告知など


2009-06-15 [Mon]

FF1裏話

あんな感じでガリガリとプログラムを書いていたりすると、裏話的なものもぽろぽろと出てきたりします。

FF1を作っていたのは1992年でした。まずこれ重要。FF5が出ていた時期ですね。ですので、全体的にFF5を参考にしたアレンジになっています。

まず、元のデータですが、MSX2のFD版でした。こいつのFDのフォーマットがDOSじゃなくて独自フォーマットで、まずディスクの内容を全部ダンプして(MSXの場合物理フォーマットは全部同じなので)、ブートストラップから解析して、ファイルシステムの内容(と言っても、管理領域は、開始セクタ、サイズ、ファイル名の羅列、くらいだったと思うけど)を読み取り、そこからファイル単位で抜き出すプログラムを作って分割しました。

次にプログラムをディスアセンブル。このZ80のプログラムを解析し、理解できたところはC言語に直し、見た目が一緒ならいいところは見た目だけCで書くというのをやりました。

正直、今から考えて、なんでそんなことをガリガリと出来たのか、不思議でしょうがありません。

敵が出現するところの計算アルゴリズムは、どうしても何をしているのかが理解できず、結局、アセンブラのロジックをそのままCに書き写すという敗北的なことをしています。

あと作成途中では色々なデータ変換が必要になり、小さなC言語のプログラムを沢山作りました。この修行にも似た作業は、かなり良い訓練になりましたね。

また、マップエディタも必要だよねってことになり、自作しました。はい。

スプライトとBGのエディタはOh!Xについてきたsm.xを使っていたはず。

背景の画像データは何で編集してたっけかな。

技術的には、そこそこ凝ったことをやっていて、例えば海や川は半透明+ラスタースクロールだったり、木の後側に回り込むのは、透明色のテキストを重ねて実現していたり。

背景はBGじゃなくてグラフィックなのですが、このブロック転送は最初普通にmoveしていたのですが、遅くて、うーんと考えてmovepを使い、これ以上高速化できないはずだという処理にしました。その後、とある市販ゲームを解析していたら、まったく同じコードを発見し、ああやっぱりみんな同じことをするんだなあと思った記憶があります。

速度と言えば、ラスタースクロールをするのに、当然、水平帰線期間で処理を終わらせる必要があるのですが、最初波のようにうねるのを作ったら処理がオーバーしてしまい、68000の青本とにらめっこしながらクロック数を減らそうと苦労した記憶もあります。

プログラムの分量としては、wc -lすると全体で18000行くらいあります。ただ、会話のテキストがプログラム中に文字列の配列として埋め込まれていて、これが結構あったりするので純粋なプログラムは12000行くらいなんですかね。

今となっては10000行規模のコードは普通に仕事でスクラッチから書いたりするけれど、当時はかなり大規模なものを作っている気分でした。

ちなみに、FF1のルーチンを流用して、別のRPGを作ろうかと言ってみんなでシナリオを考え始めたのが、「HERETICS' EARTH」という作品で、このシナリオの断片を原型にして数年後に小説にしたのが、僕が始めて書いた長編小説だったりします。ということで、なんだかんだと今に繋がっているのですな。


INFORMATION OF EARTHLIGHT TECH NOLOGY <kimoto@earthlight.jp>