システムについて

 しかし本当に無駄話だ。こっちの日記は本当にひどいな。一応コメントも復活させといたんだけど誰もコメントしてくれないし、そもそも誰も見てないだろう。リンク元も閑散としている。システムの核心的なところでも書こうか。

 普通のゲームの物語は、繰り返さない。基本的にgotoで飛び、一度実行されたところには飛ばず、違うパスで同じテキストが出てくるところですらサブルーチン呼び出しせずにコピペすることが多い。

 そういうシステムだから、簡単にフローチャートで書ける。普通のプログラムはフローチャートで書けるようなものじゃない。書けば書けないことはないが超大変だ。構造化プログラミングのパラダイムでもフローチャートは適さないし、オブジェクト指向だともっとずっと難しくなる。フローチャートなんか書くやつの頭の中はアセンブラから一歩も進歩していないと考えていい。その意味で言えば、物語はプログラミング的にはアセンブラから進歩していないともいえる。物語の場合は普通のプログラムとは違った事情がたくさんあるから別に悪いわけではないけれど。

 登場人物を一般化する場合、繰り返さないと意味がない。同じコードを登場人物を変えて繰り返し実行することが前提だ。サブルーチン呼び出しするコードで登場人物を一般化するだけでもいくらか作業量の節約にはなるだろうけど、違う人物なのに同じような処理になってしまって表現力という面で格段に劣る。登場人物の一般化にメリットがあるとすれば、そこに複雑なアルゴリズムがあってキャラごとに同じものを適用する場合に、アルゴリズムを別々に書かなくていいというところだ。

 「複雑なアルゴリズムを適用」して「繰り返し実行」されないと登場人物の一般化にメリットはほぼない。しかし物語において、「繰り返し実行される」というのはかなりひどい制約になる。

 通常のゲームでは繰り返しはセーブ、ロードを用いてプレイヤーが制御する。それは今までに見てない別のテキストを見るためであり、フラグが立たず、別のテキストが現れなかったらそのプレイはハズレとなる。理想を言えば一発で自分の見たいテキスト、答えにたどり着くのが正解で、ロードして繰り返し実行してしまうこと自体がプレイの失敗を意味している。繰り返し=プレイの失敗。この構図がある限り、登場人物の一般化にメリットはない。

 しかしそれは制御機構にgotoを用いるから起こることだ。同じコードを実行したならば、フラグがたっていない限り同じテキストが現れる。その理屈を根底からひっくり返す。あるテキストが現れたとしても、その後に続くテキストは毎回違う。これが実現できれば、繰り返しは失敗とはならない。

 一つのテキストが複数の意味を持つ。それぞれ別の意味を受けたテキストが後に続く。通常の小説でも、再読すれば別の意味を感じることが出来るが、ゲームにおいてはそうはみなされない。フラグが立ち、別のテキストを見ることが出来ないとそれはプレイの失敗、同じことを繰り返されたと認識される。

 一つのテキストが複数の内部状態から現れ、その後に続くものが毎回変わる。こっから先は少しギリギリになる。ある人物の発言は、別の理由でなされている。違う理由で発言しているので、あとの展開は必然的に変わる。同じテキストが現れたとしても、その人物がどういう意図でそれを言ったのか、毎回考えなければならない。

 人物は理由を持ってある行為を行う。これがシステムの根幹だ。理由と言ってもコンピュータで数値的に表わせるものだけなので、それはたかが知れている。しかし、この世界の人物は、数値的に表わせる理由でしか行動を起こさない。その理由→行為をどのように定義し、システムの中で動かした結果現れる物語がおもしろくなるかが問題だ。理由→行為のアルゴリズムは複雑なものになるが、これを実現するためには登場人物の一般化が必要だ。

 理由→行為をどのように定義するかは今は言わない。言ったのを真似されたとしても絶対に先を越されないくらいまで開発が進んだら言うかもしれないし、出来上がるまで言わないかもしれない。先を越されてしまったら俺の数年にわたってやってきたことが全部無駄になる。それだけはいやだ。しかしまあ、ここなら誰も見てないし大丈夫かもしれないけど。