佛陀斬は六道輪廻がテーマのひとつになっているので、いろんなものがぐるぐる巡るのである。油断すると突然1面に戻されるし(これが狭義の本作における“輪廻”)梵字が佛陀をぐるぐる巡るし、四苦は在家衆を囲んでぐるぐる巡るし、スプライトもぐるぐる巡るのである......最後のはちょとアレゲ。それはともかくとして、本稿においては同じくぐるぐる巡る佛陀のお言葉について触れておくことにしたい。佛陀斬は、ゲームオーバーになると画面下のメッセージ部に佛陀のありがたいお言葉の英訳が表示される、という、まことにもって信心深いゲームなのである。このメッセージが、特に何の圧縮処理もしていないので1つ当たり64バイトも食うのだが......何だか突然ありがたみが失せた......開発初期のメモリ吝嗇の結果、ゲーム本体の実装を概ね終えた時点でまだ4KB強も容量が残っていたので、調子にのって32種もお言葉を収録している。このテキストだけで丸々2KBだ。ここまではドラコニックスロウンのドラゴンの捨て台詞と同じ......益々ありがたみが失せた......なのだが、ドラコニックスロウンのそれはゲームオーバー毎にランダムだった。このランダムは、厳密には16ビットの周期性を有する疑似乱数なのだが、8種類の捨て台詞を選択するのに下位3ビットしか使っていないし、かつ、同じ疑似乱数からゲーム中のそれも導いているので、何回かゲームをプレイすると、前回・前々回と捨て台詞が同じ、ということが存外頻繁に起こる。毎々度々前回と異なるものが必ず出て来るとすれば、それはランダムではない、ということなのであって、これはランダムであるがゆえの偏りなのであるが、翻って佛陀斬の捨て台詞......もとい、佛陀のお言葉は、箴言であるがゆえに、できれば同じものが続くのは避けたいし、32種の箴言が収録されているのだから、32回プレイすれば一通りすべてに触れることができるようにしたい。言えば、実機にせよエミュレータにせよ、ROMイメージをブートする毎に表示される順序が異なるようにしたいぢゃないか。いや、頭ではわかっているのだ。そんなコトにこだわったって、MSXdevのオツム・プアな審査員(まだ根にもっている)はもちろんのこと、誰もそんなことには気づかないし、そもそもゲームオーバーに際して御仏の言葉に浴している......つまりこのゲーム自体がぐるぐる巡るデジタル・マニ車なのだ......ということも、気づく人は稀だ、なんてことはわかっているのだ。<なんとなく作ったトレイラー>が、それでもやらずにいれないのが、極めて遺憾ながらボクという人なのである。実現方法を考えてみよう。この課題......n通りの選択肢からn回の抽出で以ってすべてを重複なくランダムに取り尽くす......は次のように言い換えることが出来る。「n進法のn個の順序数集合A(0,1...n-1)からすべてを取り尽くすのに、任意の値に繰り返し整数bを加えその最下位桁を用いるとする。一般化するとこういうややこしい表現になるが、より日常的な感覚で把握しやすくするために、十進法......つまり普通の意味における“整数”の範囲で考えてみるとこうなる。「0〜9の数字を取り尽くすのに、このうちのどれかにある数bを繰り返し加えてその一の位を取っていくとするとき、使えるbの条件とは何だろうか。」このレベルだと実際にやってみた方が早い。右表は、bの候補1〜9について、それぞれ0から始めてくりかえしこれを加え、その和の一の位がどのように変化していくかをまとめたものである。0以外から始まるケースは表中の値がズレの分だけ増えるから、重複の有無については結果は同じになる。赤く着色しているのが和に重複が出ているものであり、つまり、赤い列のbは使えない、ということになる。使えない条件とは何なのか。一見すると偶数が全滅しているように見えるが、奇数である5もアウトだから「偶数は駄目」というワケではないことがわかる。一足飛びに結論から言えば、この数列の基数......この場合、十進法だから10ということになるが、bはこの基数と素因数を共有できない(1は当然ながら使える)。10の素因数は2と5だから、偶数が全滅し、加えて5が駄目になる。これで原理はわかったので、今回の課題に落とし込む。bは......奇数であれば何でもいい、ということになる。何じゃそりゃ!いや、何事もちゃんと原理まで遡って理解しておくことは大切なのだ。わかっている人は「何を白々しいことを」とお思いだろうが、その通り、話は逆なのであって、箴言の数を32通りにしたのはこれが理由である。コンピュータ上では奇数は最下位のビットを立てるだけで簡単に得られるので、この基数だとこの課題が扱い易いのだ。これを実装に落とすと以下のようになる。乱数(疑似乱数でよい)があるとする。ブート後一度だけ、この乱数から値を2つ得る。1つは最初に表示される箴言に対応する番号。1つはこれに加えていく数......上記説明でいうbになる。こちらは1との論理和をとって奇数化しておく。ゲームオーバーになる都度、箴言番号にbを加える。これで、プレイヤーの視線から見ると、ブート毎に最初に出て来るものもその後の順序も異なり、かつ、32回プレイしないと決して重複しては出て来ない箴言が実現される。<英語にすると「で、何やねん?」的なものもままある>ところで、察しのいい人は既にお気づきかも知れないが、繰り返しさも当たり前のように書き飛ばしている“疑似乱数”も、本質的には同じもの......あるビット長=進法の範囲で重複しない値を毎回返し一見してその値が互いに無関係に見える......である。「箴言も疑似乱数でいいじゃない」と言われれば、それはそうなのだが、もちろん疑似乱数は箴言の選択のみに使うワケではないので、そのまま使ってしまうとやはり同じであったり偏っていたりする箴言が選択されることになる。「じゃぁ箴言専用の疑似乱数の系をもう1つ用意すれば?」は、これもそれはそうなのだが、有り体に言えばオーバースペックである。プレイヤーはメモリ上に箴言データがどのような順序で並んでいるかわからないから、その番号のランダムさには特に意味はない。一方で疑似乱数は、数値そのものに意味があり、そこにランダム性を持たせるべくもう少し込み入った計算をやっている。「箴言選択のロジックの初期値を疑似乱数から得るとして、所詮は“疑似”乱数であるがゆえにブート直後の疑似乱数の出力は常に一定なのだから、結局箴言選択もまた一定になるのでは?」も、一見してごもっともだが、実際にはそうはならない。これは前作・前々作すべてに共通する実装だが、ゲーム開始時のトリガ入力を待つサブルーチンの中で、実は何に使うでもなく入力を1サイクル待つ都度疑似乱数が生成されている。このトリガ待ちの開始から実際にトリガされるまでの時間は、プレイヤーの指の動きに依存するがゆえに完全にランダムであり、この時間は擬似乱数が生成される回数に他ならないから、これが疑似乱数を真乱数に近づける仕掛けになっている。「でもブート時点からトリガを押しっぱなしにしておけば毎回結果が同じになるんじゃない?」も、これまた一見してごもっともだが実はそうならない。いうのも、本作について言えば、トリガ待ちで使用された後、もっとも疑似乱数が多用されるのは四苦がカルマを放つか否かの判定であり、これは四苦が射撃可能範囲に存在する限りにおいて、一体あたり1/15秒に1回(NTSCベースの場合)実行される。ミリ秒単位でまったく相同のプレイをしない限り、たとえゲーム開始トリガを同期させても、以降の疑似乱数は決して他のプレイと同期することはない。これを利用して、箴言選択の2つの初期値は、トリガ直後に1つ目、最初のゲームオーバー時に2つ目が取得されている。1つ目の値がトリガ同期で一致しても、2つ目の値が異なるセッションにおいて同期することは確率的には事実上1/32......つまりランダムになる。<これは結構有名なヤツ(の一部)>「どうして誰も気づかないこんな演出にそこまでエネルギーを使うの?」も、これまたまったくごもっともなのだが、もちろんコレも次作を踏まえた実験なのである。この仕掛けは、例えば次のようなシチュエーションに利用できる。ゲームの中で場面が16あるとする。進行上、16の場面は順序性を持たず、プレイヤーから見るとランダムに発生しているようにしたい、一方で、実際に発現する場面が偏るのは好ましくなく、あるステージを最初から最後まで遊べば16すべての場面を通過するようにしたい......この課題は佛陀斬の箴言選択とまったく等価になる。「で、何でこんなことをダラダラ書いてるの?」もちろん、こうして書いておかないと、他ならぬボクが次作に着手する前に忘れるからだ、駄目ぢゃん。いい余談(いやむしろこっちが本題か)になるが、誤解されてもアレゲなので付言しておくと、ボク自身はこんなものを作りつつ、今回引いた和英対照仏教聖典......画面デザインの都合で大半の英訳にはアレンジが加わっている......を含む仏典の言葉を、歴史上の釈迦の言葉であるとは露とも信じていない。その露とも信じていないものを一晩かけて読み通してゲームに収蔵するのに具合のよいものを32コも探したボクは我ながらイカれているな、と思わないでもないのだが、法華経転読(うたたよみ、とよんでね)の確信犯的イカれ度合いと比べれば、ボクにしては大人しい部類であるかも知れない。投稿者メールコメントURL画像内の文字列(認証コード)を入力してください。認証コードを正しく入力するとコメントが反映されます。※大文字/小文字の区別はありません。コメントは新しいものから表示されます。コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。“AutoPage”AutoPage最新お知らせ。