いまさらながらYU-NOを見て衝撃を受けた話
久しぶりに記事を書いたが全くロボットとは関係ない。 また私はゲーム開発者でもないので、ひとりのプレイヤーの戯言と思って聞いてほしい。
ことのはじまり
急に深夜に筆を取り始めてしまったが、アニメリメイクされたYU-NOを見た。 きっかけは16bitセンセーション内で語られる当時の衝撃から。 この漫画の中では今なお色あせない数々の名作について語られるが、96年編あたりは当時の衝撃の強さがうかがえる。
お盆休みのほとんどを惰眠を貪ることに費やしていたが、久々に時間が取れたこともあり、YU-NOがどれほどすごかったのかを体験しようと見始めた。 結論から言えば良作だった。記憶を消してPC98版をプレイしたほうがいいと思うほどに衝撃だった。
私はゲームといってもインディーゲームやレトロゲームが好きである。 ゲームには体験を求めており、シナリオとゲームシステムが両立した上で、この上ない没入感を得られるゲームが好きである。
これとは対象的に、現代の3DCGマシマシなアクションゲームはあまりプレイしない。 これには体質的な問題から3Dゲームが酔いやすいためという悲しい事情もある。 ノベルゲームも好きなのだが、個人的には戦略系など時間に余裕がありつつ考えさせるゲームが一番のお気に入りである。
YU-NO の何がすごかったのか?
アニメだけ見て知ったかぶりをしてしまうが、このゲームはシナリオとゲームシステムのバランスが巧妙だったと感じる。 時系列をプレイヤーに見せた上で逆行・遷移するシステムは、当時で言えばセガサターンの「街 〜運命の交差点〜」やかまいたちシリーズ、他にも「428 〜封鎖された渋谷で〜」やSIRENなど枚挙にいとまがない。
そしてこれらの作品に共通して言えることは、全体の世界観が時系列を遷移するゲームシステムと非常によくマッチしている点である。 今回のYU-NOであればリフレクターデバイスとA.D.M.S.というゲームシステムが、ユーザ視点からゲーム世界へのインタラクションをよく実現している。 その上で当時の価値観ギリギリを行くようなシナリオだったのだから、同時代人たちが衝撃を受けたことは想像に難くない。
バブルに思い馳せ
よく私はもう一度生まれ変われたなら、バブル期をぜひとも体験したいと思っている。 83年ファミコンの発売、数々の家庭用コンピュータ、そして崩壊とともに生まれた豊作の90年代。 なにぶんアングラな世界のために当時の人々の感想があまり残っていない。
だからこそ16bitセンセーションはエロゲー史料であると思うし、これらを語り継いでくれる50・60代の技術オタクおじさんたちは本当に私にとっては貴重である。
そして幸いなことにゲームは残っている。 YU-NOはPC98版が最近になってDL販売もされている。
天才はいる
もはやYU-NOから逸れてしまうのだが、「ゲームとは体験」を感じさせてくれたゲームを少し挙げさせてほしい。 これらには統一的な法則があるように私は思っており、この記事を書きながらTwitterことXを眺めていると、同様の発言をしている人も見かけられた。
私がレトロゲームを好きな要因の1つに、画面の遷移や解像度などの派手さがない(性能的に出せなかった)おかげで、ゲームシステムによってプレイヤーを引き付けようとする工夫が随所に散りばめられていることがある。
タイトルの元ネタはこの記事より。
伝説のオウガバトル
オウガバトルは特に衝撃を受けた作品だった。 派生作品のタクティクスオウガを踏襲したゲームはいくつか存在するが、伝説のオウガバトルライクは正直言ってないと思う。あれば教えて欲しい。
伝説のオウガバトルの凄さは、ゲーム内時間の進行とキャラクター操作を連動させた上で、カオスシステムといったパラメータの変動・反映や隠しアイテム要素の豊富さにある。 欲を言えばテキストがもう少しあると世界への気持ちの入れ具合が変わったのだが、時代的な側面もあるし続編のオウガバトル64を含めれば言うことはない。
そしてテキスト量を指摘しつつも引き付けられる要因がその世界観である。 全体が数章立てのプロットから構築されており、それぞれのゲーム作品の中でそのプロットの一部の章に関する話が描かれる。
オウガバトルの開発に携わった松野泰己氏はこのオウガバトルの世界の他に、FFタクティクスとFF12、そして噂の域を出ないがベイグラントストーリーやFF16のベースともなっているとされるイヴァリース世界という概念も構築している。 プレイする分には各作品に完結すればよいが、すべてを通すことで見える世界があり、ゲームデザイナーだからこそなせる"ある種"の妄想世界にとらわれてしまえば、すっかりこの感覚は病みつきになってしまう。
VA-11 Hall-A と Read Only Memories
この2作品は私にとってはサイバーパンク世界と言っていいと思う。 方やバーテンダーとなってカクテルを作るゲームで、方や冴えないライターが探偵ごっこをする話である。 ここにCyber Punkを加えてもいいと思う。
これらの世界で語られるのは、テクノロジーが発展した世界という共通した背景を持って、ドラえもんより遥かにリアルで生々しく人々の生活を描いている点にある。 テクノロジーに携わるものは、プレイすれば何らかの感覚を得られると思う。 まだ現実になっていない世界をゲームの中であっても具現化することは、それを受け取るプレイヤーにとってもワクワクさせられる。
Almagest Overture と シュバルツシルトシリーズ
どちらも星間戦争を模したSF戦略ゲームである。シュバルツシルトは言われてみればPC98作品もあり、YU-NOと同時代でもある。 私はAlmagestをしばらくプレイしてからシュバルツシルトを知るのだが、ゲームシステムはむしろAlmagestが踏襲したのだと気づく。
シュバルツシルトは世界観が壮大だが、シナリオは割りと一本道のものが多い。ただその分キャラクターの作り込みがそれなりになされている。
Almagestはシナリオの順番が特定でなく毎回違ったストーリー展開となる。マルチエンディングのため攻略の歯ごたえも高い。
すごいと思うのは未だに旧2chのような掲示板が動いていることである。 ゲームシステムそのものは今の作品からすると多少見劣りするが、世界観とそれを含めたゲームデザインのトータルで見ると本当に素晴らしい。
何が我々を体験をさせるのか
「リアリティとは情報量である」とは、やはり同じ時期の95年に公開となった「GHOST IN THE SHELL / 攻殻機動隊」の監督である押井守氏の言葉であったと記憶しているが、このアニメが細部への書き込みにこだわったように1つ1つの要素に至るまで統一した世界観・設定のもとに決定されていると、そこから受け取った側への反芻・咀嚼・尾を引く感覚もまたものすごく大きなものになる。
そしてゲームだからこそできることがある。現実にはなし得ないこともゲームだからこそ実現できる要素がある。 例えばロード・セーブですらそういう機能だと思うし、シミュレーションも仮想的に体験するための機能である。
これらがその世界と一体になる感覚、寝ても覚めてもその"妄想世界"を感じさせてしまうところに体験がある。 この"妄想世界"をシナリオだけの情報で再現できるものが小説であり、視野をもって再現するものがアニメ・映画・ドラマであり、臨場感をもって伝えるものが演劇であり、五感に訴えられるものがゲームである。
ゲームならではの表現については多々あるため深く述べないが、ゲーム表現の工夫はプレイヤーに現実世界を体感させる装置であり、同時に介入させる装置でもある。 ところが近年は体感に重きがおかれてしまい、介入の要素が薄いと感じることがある。 そしてシナリオまで軽視されるとここに"妄想世界"への没入は成り立たない。
今あらためて発売から30年経とうとしているYU-NOから、ゲーム本来の楽しさを教えてもらった気がする。
さいごに
YU-NOと同時代のゲームを中心にコラム的な話を突発的に書いた。 それはそれとしてYU-NOはよかった。視聴が止まらなかった。
天才はいる。ゲームデザイナー・剣乃ゆきひろ氏は惜しくも故人であるが、彼の作った世界、伝えたかったモノは半永久的に生きている。
一生ですべてのゲームはプレイできない。だからこそ味わい深いゲームをプレイしたいと思っている。 次は痕か家族計画か。まあ今も中途半端に進めているゲームが複数あるのだが。。。
2020年が未投稿で終わりそうなので滑り込み備忘録
タイトル通り滑り込み備忘録 今年は本当にいろいろあった。
大学・お仕事の話
えー、7年ほど通った大学を退学しました。留年はないですよ?+1年なのは無謀にも博士課程に足を突っ込んだからです。 2019年の入学式1週間前に退学の決意をして、意味のないオリエンテーションを受け、就活していました。 そらねぇ、アルバイトなのに締め切りカツカツのプログラム業務なんてできないわけですよ。
会社はそこまで人数規模も多くない、ひっそりとしたプログラムの会社に就職。 最近は業種欄に「SE」と書けることが嬉しかったりします。 ただロボットのお仕事は本職にするにはきつかったので、少し離れたところにいます。
学んだなあってこと
人生学んだなぁってのは、トップダウンの組織でマネジメントとか言い出すやつのマネジメントは怪しいってこと。 大学組織より会社組織のほうがそれなりに秩序が取れてて気持ちが楽だなぁと感じます。 まあ個人はあまり守られていないのかもしれませんが。
社会人の「時間無い」、の意味が実感をもってわかるようになりました。 大学なら業務じゃないので、学校にいる時間で自分のやりたいプログラムの勉強とかできますが、 会社だとそれは制限されてしまうので、なかなか趣味の続け方に四苦八苦・試行錯誤する1年でした。
業務中でふと思いついたことをクラウドのメモ帳に投稿しておき、電車の中で優先度を整理して、家に帰って作業的にこなすルーチンが身についてきました。 そろそろ自宅にサーバーがないといろいろ厳しいので、年明け目標でパーツを集めています。
会社にはサーバーやWSLがあって、本当によかった...よかった... 初めて導入するツールとかは業務で実験して取り入れつつ、使えるものを趣味に反映しています(逆なのでは?
技術的に覚えたこと
これは今年1年にいえることですが、とにかくプログラミングのスキルが伸びました。これは会社で設計工程やっているのが関わってます。 UMLとかクラスの設計やって、プログラム書いたり、プロトタイピングしていること。 またPythonでクラスをガシガシ組んだりするなかで、オブジェクト指向の理解が深まった気がします。
あとはスレッドプログラミングにだいぶ強くなりました。 なんか今からロボットのプログラム書くと、学生時代の自分とは全く違う発想で作れそうです。 なのでそういう意味では、今の業務がだいぶ自分を成長させてくれています。
趣味でやってたこと
- 年始:昨年末に引き続き、引きこもりだったので、scikit-learnでずっと遊んでいた。
- 3月:急にブログサイトに熱が入り、Gatsbyjsベースでブログシステムを作成。継続中
- 4月~5月:研修始まってまちまち。空き時間でESの勉強とかしてた。あ、ESは受かりました。
- 6月~9月:知り合いと組んでサーボ設計を始めた時期。最近滞ってしまって申し訳ない。
- 10月:趣味は停滞していた気がする。
- 11月~12月:計測系のプログラムを組む必要が生じてPythonでライブラリ作成中
これでサーボ設計にあまり時間が回せなくなる。
あとはCNCが家にきたり、プロダクトに向けてハード面の準備を進めていた。
コメント
Covid-19ことコロナの影響もどこ吹く風。会社が堅調だったので仕事面での影響はなかったです。 友達とも時期を見て食事やら泊まりで遊びやら。遠出もすっかりカーシェアに馴染み、感染に気を回しつつも、まあそれなりに楽しめました。 唯一心残りはカラオケに行けなかったこと、同期と飲み会できなかったことかな。
今年のYoutubeブームに乗って生放送やろうと思って準備してたけど、こっちも結局できなかったなぁ。 まあ来年はなんか起きろ!
SNS Analytics
- Spotify:一番聞いてたのがB.T.Express だったらしいです。Boowyも相変わらず。加えて角松敏生、P-MODELを聞くように。
- Youtube:だめだねmemeからDejeve meme、Borksoulときて、年末にとうとうRedditに参加してしまいした。Happy cakeday!!
- LINE:夏場に人恋しくなってオープンチャットを始めました。いろいろ闇を見て社会勉強になりました。
- その他:休日は競馬ばっかり見るようになりました。あといきつけのジョナサンができました。お一人様を満喫していますっ
ではまた来年。良いお年を。
POSIXのタイマースレッドを使いたい
realteckです.
仕事でPOSIX Thread,pthread
系の関数を使う機会があったので,忘れないうちにログをつけておきます.
そもそもPOSIXは,システムインタフェースの規格で,IEEEに策定されています.
このうち,POSIX 1003.1bに関しては,リアルタイムなオペレーション向けに拡張された,オプショナルな関数によって構成されます.
この1003.1b内のPOSIX Timerでは,周期的なタスク実行のため,timer_create()
を始めとした関数が用意されています.
timer_create()
は,timer_t
型の構造体に周期動作の設定を記述し,引数にすることで使用できますが,
その実,中身はというと,nanosleep
とスレッド実行する関数を切り替えているに過ぎません.
そもそも構造体に設定を記述して実行させるスタイルが,古いデザインなように思い,POSIX Timerのラッパーを探しました.
いくつかネット上にソースを上げている方がいますが,真に継承しているものは,boost::thread
になるでしょう.
しかし,多くがpthread
の拡張にとどまっており,timer_create
のラッパーらしいライブラリは存在しません.
(私のサーベイ力では見つけられなかったので,どなたか教えてください)
そこで,周期実行を主とするロボットやリアルタイムなサーバ処理を記述する場合,割とお手製のスケジューラを組む必要が出てきます. 特にC++なんかは多いのでしょうか,企業ではこの手のライブラリがある意味の資産として,引き継がれることも少なくありません.
ROS実行も結局はリアルタイムノードの構築が難しいことから,この手のミドルウェアは解決になっていません. とすると,汎用POSIXの上にラッパーを構築するのが手早い気がします. さて,問題は自分で作るべきか,すでにうまい具合に作られたシステムがあるか.
余談ですが,近年はマイコン環境にもPOSIXの使えるOSも増えているので,ラッパーを作ることに少なからず意味はあるでしょう. 仮にROS互換のインターフェースが実装できれば,リアルタイムタスクはこのラッパーに,そうでない重い処理やオフライン処理はROSに,といった作業の分担ができますね.
誰かやってくれないかなぁ〜...
明るい鬱
お久しぶりです,リアルテックです 少し時間的な余裕ができたので,まだブログの移行も終わってないですが,近況でも書こうかと.
今見ると昨年は更新が出来てなかったようで,振り返るとかなりタスク詰め詰めで生きていた気がします. 最近まで知らなかったですが,明るい鬱というキーワードがあるそうで,日常通り生活が行えていても,心理的に苦痛を感じている症状だそうです.
すでに博士進学を控え,いくらでも出すからと言われた金はなく,プログラマー軽視の流れで酷使され,まあ社会に出てもこんなもんだろうと受け止めていた矢先,自分の目標がなくなっていることに気づいた次第です.うん,早く就職すれば良かったのよね.
ただ昨年は,学術的にもプログラム的にも,ロボットに使えそうな知識がついてきたので, こちらのブログではプログラムベースに,たまに数式使いたいときは,以前作ったスタティックサイトかQiitaでも更新しようかと思います.
(てかマークダウン内で\tauと\sigma表示できないのなんとかしたいんですが,スクリプト書いたほうが早いかな...
ではでは,ぽいちゃ
JekyllでBuildするまで
情報古いです
あれ?ブログまた変わった??
と思われた方は正解です. ドメインは一緒ですが,テンプレートを一新し,ブログのビルドエンジンもHugo→Jekyllに変更しました.
Hugoは,Go言語ベースの静的サイト生成ツールですが,Jekyll(ジキル)は,Rubyベースとなっており,比較的利用者の多いツールです.(参考:StaticGen)
もちろん導入にいたっては,東工大の某氏たちはじめ,多数のロボットやプログラムに携わる人が使っていたことも決め手になっています.
なんでJekyll??
Hugoでも良かったんですよ.Markdownという記法で手軽に記事が書けるし,Gitベースのクライアントで更新できるので,ローカルでデータ更新してプッシュするだけだし,問題はなかったんですが...
あるとき,プラグインでグラフやツリーを描写できることを知り,いろいろ調べていくうちに,現行で比較的プラグインが豊富なのがJekyllだったので,最終的にJekyllにすることになりました.(また変わるかも知れませんが(^_^;)
ブロック線図を書くには?
現状のツール
Jekyll向けプラグインとして,システムの流れを再現可能なツールは,Mermaid,Graphvizやblockdiagなんかがあります.パッケージの上下関係がわからないので,細かい点は省略.
しかし,これらのツールは,ノードtoノードが基本となっており,頑張ってブロック線図を書こうとしても,
こんな感じになってしまう...
Tikz(Texパッケージ)
やっぱり,制御やってる人は,
とまあこんな感じでいきたいですよね.
こんなときはTikz(「てぃくす」と読むらしい).Texのパッケージとして使えて,ブロック線図も上の通り.Jekyllならプラグインもあるので,そこまで難しくなく扱えます.もちろん,Texがコンパイルできるパソコン前提での話ですよ.内部でTexコンパイルして,生成したsvgファイルを自動リンクしてくれるのでかなり便利です.
企み
「おいおい,Tex使うってことは,いまのCIツールじゃ難しいってことじゃないか.Gitプッシュからビルドサーバだけで完結できねえのか.」と思い,Dockerに環境を構築してみました.とビルドは出来たのですが,NetlifyにプッシュするためにSSHキーを保存せねばならず,外部のビルドサーバ経由で行うのは断念.現在サーバ検討中なので,近いうちには自前のビルドサーバで,プッシュからデプロイまで自動化しているかもしれません?
環境構築
私はMacユーザーなので,Windowsでは検証していません(が,入れるパッケージはそこまで変わらないと思います).自宅ビルド用にUbuntuでも環境を再構築したので,載せておきます.
-
- Texが動く環境を構築(MacTexなど)
- Tikzのサンプルなどを動作させる
brew install pdf2svg
などして,pdf2svgをインストール- (怪しい感じの)Jekyll-tikzを入手し,Jekyll用ディレクトリ内の_pluginにコピペ.
sudo apt-add-repository ppa:texlive-backports/ppa sudo apt-get install texlive texlive-lang-cjk ruby ruby ruby-dev make gcc nodejs wget sudo gem install jekyll bundle jekyll new tikz-test-site cd tikz-test-site sudo bundle install wget https://gist.githubusercontent.com/hack-ghost/6139753/raw/fb37dd05a5e0a4e8daf36d002c8f8dcd8072f0ca/jekyll-tikz.rb mv jekyll-tikz.rb _plugins/jekyll-tikz.rb
- Graphvizとblockdiag使いたい人は,
sudo apt-get python python-pip graphviz sudo pip install actdiag blockdiag nwdiag seqdiag gem install jekyll-diagrams
- さらに,_config.yml内のgemに
jekyll-diagrams
と書き,Gemfile内に以下を書いて下さい.
group :jekyll_plugins do gem "jekyll-diagrams" end
今回はここまで.ぽいちゃ
つれづれ その1
情報古いです
このブログを作って
もう運用開始からおよそ3週間.いまだに大々的に広めていないのは,過去ブログからのデータをどう移行するか悩んでいるため. MovavleTypeなので,imageのリンクは後で変えるにしても,スクリプトでも書いてMarkdownファイル(md)にしてしまえば問題ないとは思うが...
ここのサイトは将来的な目標も見据えて,bitbucket→netlify(コンパイルサーバ)で公開しており,サイトはHugoで生成している. なぜかmd形式だと最初の挨拶とか最後のコメントを忘れがち. 最近は論文ばかり書いていたので,あまりにも淡々としすぎている. ですます調でブログを書くことが多少信念でもあったのだが...
Dato-CMS
本ブログは,先も述べたとおりHugoで生成された静的webサイトである. つまりstaticなので,時々刻々とかわる情報(ツイッターとかサイトカウンタ)には対応していない. いや頑張れば反映できないこともないが,まだjavascriptがよく扱えないのと,意外とこのシンプルな見た目を気に入っている.
しかし記事内容は,個々のmdで管理せねばならず,いちいちbitbucketを開いてコミットするのもどこかばかばかしい. Dato-CMSは,こうした静的webサイトに公開される記事内容を管理してくれるサービスで,なかなか使いやすそうである. とはいえまだまだユーザーが少ないのか,日本語サイトが上がらない.
私はといえば,使用方法がなんとなくわかったが,テキストにエクスポート出来ない点を嫌って,Dato-CMSで書くのはやめることにした.
つれづれ
最近は,Pythonをいじりはじめ,JavaScriptを学び,もとい回路などを作ってプログラムなどをして生きています. fc2より広告は出ないし,サイトも見やすくなったので,しばらくはこっちで書いていきます. Markdownならオフラインでもサイト記事のストックがしやすいので,意外とこのスタイルはあっているかも. ではまた
F031のADC連続変換が・・・
なんかADCの様子が・・・
STM32F031でADCをしていた. RegularModeでいいだろと,DMAを使わないでマルチチャンネル取得を試したいたのだが・・・
ADCにはEOC/EOSというフラグがあって, ADCコンバート終了時の割り込み時にこのフラグを同時に確認すると, 今読み出してるデータの種類がわかる. ちなみに,EOC(End of conversion),EOS(End of sequence)である.
hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
として,
main.c内ADC終了時のコールバック関数を以下のように記述するも
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)) { adcval[adc_chcount] = HAL_ADC_GetValue(hadc); adc_chcount++; //adc_convflag=1; } if(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS)) { adc_convflag=0; adc_chcount=0; } }
サンプルのほぼパクリだがダメー!!
素直にDMAしよう?ね?
最初からこうしとけって話,無駄に2日費やした. 開発に大事なのはペースなのだよ.
ところでDMAの動きを確認したら脳筋だった.
ADC側,DMA側の連続変換モードをともにONにして,
HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcval, sizeof(adcval));
と記述して本日の試合終了
めでたしめでたし