kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

Yanesdk.netによるノベルゲーム実装〜プロローグ

御存知、kow@suhito12歳でございます。
久しぶりのはてなで、かなり緊張しております。
しかし、三回忌にあわせて新しいことをはじめようかなと思っていたわけで、清々しい気持ちでおります。
三回忌? 誰の? だりだってデリダである。
10月8日になると「そのたびごとにただ一つ、世界の終焉」を読み返したくなる。10月8日の再来である。


さて、今回はYanesdk.net。
これまでわたしはYanesdk2nd/3rd/4dと各シリーズを趣味でごにょごにょしてきたが、感想文を書こうと思う。
わたしは「去人たち」というデジタルノベルをYanesdk2nd/3rd/4d/.netで作ってきた。かれこれ6年はYanesdkでプログラミングしているが、なんとなく使い方が分かってきたように思う。
しかし、中級者以上の方にはたいして興味深い感想文ではないだろうと思う。
だたの猫プロしたかっただけだろ! という声が聞こえるが、わたしは決然と聞こえないフリをしようじゃないか。


さて、感想文を書くにあたり、Yanesdk4D版の去人たちソースは準備万端整っているが、残念なことにYanesdk.net版のソースは間に合わなかった。
なぜなら、風呂敷を広げすぎたからである。拙作の「去人たち」はIとⅡがあるのだが、Yanesdk4Dから移植したYanesdk.net版では、IとⅡを統合しようと思い上がり、全くもって制御不能に陥ってしまった。
この感想文はソースコードも感想文の一部であるから、実際ソースを公開しないとはじまらない。
公開準備が整うまではノベルベーム周辺の猥雑な話でしのごうかと思っている。
あと、Yanesdkはサンプルが少なくて6年間ずっと残念だったというのもあり、ソース公開は悲願でもあった。去人たちの実装は賢明とはいえないかもしれないが、ソースを公開することで少しでも多くの人にYanesdkという大変面白いライブラリを知っていただきたいと思っている。
ソースは間に合わなかったけど、Yanesdk.netでの去人たちデモを作っている。

このデモはYanesdk4Dの習作として取り組んだものだが、それをYanesdk.netに移植したものだ。
特に興味深いテクニックがあるわけでもないし、素直にごりごり実装したものだ。
Yanesdkを使えば、このぐらいのことは普通にできます。


さて、プロローグということもあるし、大いに猥雑な話をしておこう。
去人たちを作り始めたころにはYanesdkがあった。Ynaesdk2ndのころ。Nスク吉里吉里なんて知らなかった頃。わたしがC++を勉強していた頃。自作した「去人たち」のコードは目も当てられなかった。それでも、「十分に良くできたもの」だと思っていた。冗談のような本当の話である。あんなに酷いコードなのに初めて自作したコードに盲目的になっていた。
<そんなばかな>
確かに。でも、そうなのだ。ソフトウェア・テスト技法にも書いてある。嘘みたいな本当の話、それはすべてうまく動いているように思っていた。
そこからしばらくして、このプログラムが本当に酷いものだと自覚するようになる。しかしどう改善すべきなのか?
そこで、わたしはYnesdk2ndをはじめた。
他人のコードを読むことになれていないので、わたしは何がなんだかわからずにいたことを覚えている。プログラミングをはじめたばかりで、優れた理解力があるわけでもない。わたしはソースコードを全て印刷して一日中眺めた。それか、VS6でステップ実行していた。そうなるには理由があるに違いないのだ。
本当のところ、わたしはプログラムなんてやめたほうがいいんじゃないかと思ったものだ。何にもそんなことを繰り返しても何も分からなかったからだ。SmartPtrが何のためにあるかすら、どんな挙動をするかすら分からなかったのだから。
次に蒼き大地や、Happyほたる荘をごにょごにょプレイしながら、うひょー、12歳未満がこんなんやってええのかーとか、思いながらYanesdk2ndの勉強を続けた。

Yanesdk2ndを使った去人たちのソースを思い出すと、継承ばっかしてごにょごにょしてたような気がする。ただ継承することが目的だった。継承っていう機能を使いたく仕方なかったらしい。
まあ、わたしは今でも「新しい機能」とかいわれると、その結果を無視して使いたくなるのだけれど。
それに、わたしは昔からコードを書き始めるのが段階が早すぎるのだ。今でもそうだが、これからどんな問題を解決すべきかも明確にしないままコードを書き始めるため、設計バグが頻発する。
物事を複雑にしすぎてはいけないけど、あまりにも単純化しすぎてもいけない。わたしは単純化しすぎているんだろう。


ノベルゲームなんていうのは、「絵と文章を表示して音楽を鳴らすだけ」である。ゲーム的リアリズムにもそんなことが書いてあったが、わたしは「確かに」と思うと同時に、あたしゃ、そんな単純なのもまともに動かせてないんだなあ、と胸がいっぱいになる。そして今だって、まともに動かせてないわけだけど、それにはいろんな要因があるだろう。
仕様書がない。まあ、個人で仕様書を書くのは結構マメだと思うが、少なくても頭の中にはある程度検討されたな青写真があるものである。それをいうとわたしは、なんか抽象的なもやもやとしたものがあるだけで、コードから仕様が規定される。そしてその内部仕様は往々にして外部仕様を満たさないし、まず破綻している。
そして毎度のことシナリオタスクでは、状態制御不能になる。絵と文章を表示して音楽をならすといっても、いろんな状態があるものだ。画面のオブジェクトの状態、インプットの状態、サウンドの状態、ファイルリソースのアクセス状態等々。状態遷移図を書けば穴は埋められるもんだけど、書いた試しがないのは今でもまずかったと思う。


鬱屈した猥雑な内容になってきたが、わたはダメプログラマの見本市をしたいわけじゃない。
ただ、どうしたってわたしはこうやってプログラムを組んでいるのが愉しいということが肝心だ。
もちろん、よりよい実装というものにしていきたいとも思う。そのために、去人たちを何度も作っては壊し作っては壊している。
わたしは生産効率も低くければ、学習効率も悪いかもしれないが、これからもコードを組んでいきたいなと思っている。

プロローグではこのぐらいにしておこう。
最後に、わたしは走ることが好きなのだけれど、トップアスリートにはなれないとしても熱心な市民ランナーにはなれるんじゃないかとときどき思う。