ついにマシン語のプログラムが終わった。
といってもデバッグがまだなので、それでは全然終わっていないではないか
という話もあるが、とにかく組み終えた。
「敵の移動ルーチン」「スクロール」「音出し」といった、このゲームで
最もやっかいと思われる部分を作り終えたのである。あとは、これらの
ルーチンを使って、メインとなるBASIC部分を組み上げるだけである。
BASIC。なんと素晴らしい響きか。
実に久々にBASICに戻ってきた私は、そのとてつもない便利さに
感動していた。
座標計算も、画面表示も、条件分岐も、変数管理も、すべてが一瞬にして、 しかもわかりやすい表記でできる。もう条件分岐に、いちいち ジャンプ命令を繰り返すこともない。座標指定も、 LOCATE X,Yの一命令でできる。アドレス計算も &HF302+X+X+Y*120でできてしまうのである。 乱数も色指定も、思うがままである。
行番号の懐しさも味わいつつ、タイトル画面、自分移動、ミサイル移動、 ゲームオーバー、ボーナスステージ、最終ステージ、音楽演奏…と、 怒涛のように作っていった。以下はその1シーン。
私が図書室で、図書委員の仕事の合間にプログラムを書いているときのこと。
先輩「何やってんの?」
私「いや、ちょっとプログラムを…」
先輩(ちょっと覗きこんで)「これ動かないよ。」
私「え、どうしてですか?」
先輩「いや、…うーん、動かないと思う。」
といった謎のやりとりもあったが、とにかくほとんどのルーチンを 書き終え、すでに書き終わっているマシン語部分のデータもDATA文に 入れ、あとは迷路データと音楽データを残すのみとなった。
音楽データは、BASIC部分でMML解析を行なっていたので簡単に 作れるが、迷路データの作成はなかなかの大仕事である。 ゲームの性質上、かなり長い迷路データを用意しなくてはならない。 最終的に迷路の長さは300、マウンテンクライマーの3倍もの量に なったのであるが、これを例によっていちいち ノートに書いていったのである (しかも、方眼紙も何も使わずに、壁の位置がきちんと合うように 正確に書いていったのでなおさら大変であった)。 この迷路データも、病院の待合室などでよく書いていた憶えがある。
迷路データの作成には、一部関根良祐の 力も借りた。私の作るデータは、ほとんどがなんとなく作ったただの迷路か、 あるいは文字を形どったものと決まっていたが(ちなみに、「百万円」とか 「影」とか「LET’S GO」とかの文字を形どると自機やミサイル が入れない囲みができてしまって、そこに敵が入ったりしてしまうのだが、 「スクロールアウトしなければ倒せない敵!これはおもしろい!」などと 考えて全く気にしなかった。)、彼は敵のアルゴリズムに基いた、 「全く死角(安全地帯)のない迷路」などの有用な迷路を作ってくれたのであった。
さて、こうして何とか迷路を書き終えたはいいが、問題はそれをどう読み込むかで
ある。
当初から迷路はデータ圧縮することに決めていた。しかし、迷路データを見てみると、
単純な2進→16進変換より、もっと効率的な方法がある気がしてくる。
そこで私が考えたのが、「壁がいくつ続くか」「空白がいくつ続くか」を
数値で表して並べたら、かなりの圧縮になるのではないか?ということである。
すなわち、例えば
■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■という迷路なら、15,17,15,17,15という5つの数字で 表せる、というものである。(壁の数と空白の数が交互に並んでいる。)
「これはかなりの圧縮になるぞー。どれくらい縮むか楽しみだ。」などと考えながら、 私は早速、この形式の圧縮データを作成するプログラムを書き始めた。 といっても、圧縮のもととなるデータは地道に文字列で迷路を そのまま入力するしかないのだが。しかしまあ、無味乾燥な数字を入れている わけではないので、この入力はそれなりに楽しかった。
問題は、圧縮して出てきた数値である。なにしろ、 1,0,1,310,36,0,36,310,1,10,36,10,… といった値が延々と続くのだ。プリンタを持っていない私は、 これらの数値をノートに書きとめていくことにした。 (カセットを使え、という気もするが、テープでデータを入出力する というのは、当時の私はどうも苦手なのであった。どうもハードを 操作するというところに不安を感じていたらしい。あるいは、 実際に試してみたがうまくいかなかったのかもしれない。)
しかし、とにかく膨大な量である。確か、朝に書き始めてやっと夕方に書き終えた というくらい大変な作業であった。同じ1日がかりでも、プログラムの入力 と比べて、いちいち鉛筆で書いていかなければならないという点で 非常に疲れる作業であった。ことパソコンに関してはめったなことでは疲れを 憶えない私であったが、延々と続く無味乾燥な数字の羅列を前に、 このときばかりは死にそうだった。
が、とにもかくにも、なんとか全部書きとめることができた。あとは、 これを入力して展開ルーチンを書くだけである。まさに努力の結晶というべき ノート2ページ分にびっしり埋まったデータを、軽快に打ち込んでいった。
入力を終えて、run。だが、どうもうまく迷路が展開できない。 そして、デバッグしているうちに、恐しい事実に気がついた。
データが間違っている!
つまり、データ圧縮プログラムにバグがあり、誤ったデータが出力され、 私はその間違ったデータを延々とノートに写していたのであった…。 出力データに関しては最初に何度も検証し、もうバグはすべて取り除いた つもりであったが、迷路の端の部分の処理に間違いがあった。 情報落ちしていたので、展開プログラムを直してどうにかなるという問題でも なかった。
このときの私の落胆ぶりは、容易に想像がつくというものであろう。 疲れは倍増し、やる気は大幅に減少した。もう一度やり直す気など、当然の ことながら起こらない。迷路データの入力は、暗礁に乗り上げた形になった。
そして、迷路のことはあとまわしにしよう…と思っても、マシン語ルーチンは 全くまともに動かない。デバッグしようとか、そういう気を起こさせるレベル にまで達していなかった。苦労して作ったマシン語データであったが、 こうなるとただのゴミの山である。
実力に見あわないプログラムは、失敗する。MAZE HOUSEのときと 同じような状況になっていた。