[ゼビウス] ドモグラムの移動指定テーブル : してログ

[ゼビウス] ドモグラムの移動指定テーブル

今回はマップテーブルの解析から分かった、ドモグラムの移動指定テーブルについて情報提供します。ご存じのようにドモグラムは移動砲台なため、出現位置だけではなく移動パターンの記述があります。

移動テーブルの例

08 30 00 A0 04 A0 10 80 0C 40 10 80 18 A0 18 20 00

全体的なテーブル構成

まず最初のバイトがテーブルの長さを表しており、長さ×2バイトの移動指定が続きます。上の例では、出現位置から8回(最初を除けば7回)方向転換しており、全体で1+8×2バイトで構成されています。

方向転換の記述は2バイトで表され、最初が移動距離(単位は不明)、後ろが移動方向です。これが先頭バイトで指定された数分、繰り返されています。

移動距離の指定

移動距離は移動を継続するフレーム数で指定する(らしい)です。ただし、8フレーム単位(恐らく)でしか指定できず、細かい動きは表現できないようです。これは移動プログラムのロジックが、整数の足し算引き算のパターンで実装されているためだと思われます。

なお、ドモグラムの水平垂直方向の速度はスクロールと同一です。従って、上方向に移動するドモグラムは画面に対して静止して見えます(上方向にフレームアウトすることは絶対にありません)。

方向の指定

方向は図のような番号が割り振られており、32方向へ進行することができます。なお、ドモグラムは方向によって移動速度が違います。この頃のゲームによくあるように、斜め45度は1.4(√2)倍の速度になります。プログラム上は方向によって、1フレーム毎に1ずつ進む、2フレーム毎に1ずつ進む、またはその方向には進まない、といった具合のX,Yの組み合わせで表現されているのだと思います。

移動方向番号(16進数)
移動方向番号(16進数)

ちなみに「エリア15では高速ドモグラムが出現する」という情報を見たことがあるかも知れませんが、これは半分合っていますが、全体的に見れば間違っています。ロジックの関係で斜め45度の移動が最も速いため、その角度のみで移動するドモグラムは速く見えますし、事実速いのです。しかし、他の場所でも斜めに移動するドモグラムはまったく同じ速度であり、エリア15だけが特別な訳ではありません。その証拠に、エリア10のドモグラムは水平または垂直に移動するものと、斜めに移動するもののタイミングが完全に合っています。

また、エリア7は斜めに動くとき速くなり、水平あるいは垂直に動くときは遅くなります(盆踊りと呼ばれる所以のひとつ)。それから良く見ていると、スクロールアウト直前に草地の方へ離脱していく姿が見えます。最後の方向転換をプログラムしていないためなのですが、なんとなく幕が下りた後に気を抜いてフライング解散しているように見えて笑えます。

仕様上はかなり滑な動きができる

このようにドモグラムの移動方向はかなり細かく設定できるのですが、エリア7の盆踊りは45度で多角形を描くように動かしています。これは実際に自分で設定してみれば分かりますが、出現開始がスクロールと同期させるしかなく、最初にスクロールインするドモグラムとそれに続くドモグラムでは出現位置をずらして設定しなければならない(32フレーム後に出現するほうは、そのフレーム分動いた後の場所から動きをプログラムする)ため、複数のドモグラムの動きを同期させるのが難しいのです。そういった制約もあり、盆踊りを手打ちでプログラムするのが当時としては大変だったんだろうと推察します。もし適切にプログラムできれば、非常に滑らかな曲線を運動するドモグラムを作ることも可能です。

また、この部分は解析しておりませんが、角度毎の動きパターンはテーブル化されていると思います。角度は32ありますが、1バイトなため物理的には33~255まで設定でき、それらを設定すると奇妙な動きをします。これには法則性が無いことから、パターン定義の領域を超えて他のメモリを参照していると思われます。中には、スクロールスピードを超えた超速になる値もあるので、うまく活用すると面白い動きをプログラムできそうです。

設定する上での注意点

まず、必ず画面の上からしか出現させられないことです。出現のタイミングは他の固定地上物と同様にスクロール位置で取ってる関係で、画面横や下からは出現させることはできません。このため複数の機体で同調して動かしたいときに、かなり面倒なことになります。当時としては、方眼紙や手計算で行ったはずですから、盆踊りやマイムマイムの動きには苦労したはずです。

先ほど、画面横からは出現させられないと言いましたが、画面外を走らせて横から出現したっぽい演出ができます。具体的には、横位置を0x00にして画面の1キャラ右を下方向に走らせ、出現させたい位置で画面内へ転進させるようにします。ただし、画面外の走行中も弾を撃って来ますので、攻撃頻度を最低にしておいたほうがいいでしょう(途中で頻度は変更できないので、ほとんど攻撃してこない機体にはなってしまいますが)。

また、地上物の管理テーブルは14個しかありませんので、北上させてずっと画面内に出しておく場合、14個目の地上物が現れる前に画面外へ行かせましょう。そうしないと、突然消えたりワープしたりしてしまいます。また、斜め上方向で画面外へ出す場合は、画面外で下方向へ転進させておくと安心です。

0 件のコメント
名前:
コメント: