してログ

MAMEだけだとアレなので、Windows95版のナムコヒストリーVol.1に収録されているゼビウスを改造して、幻の46本目のソルを出してみました。環境はWindows98seで、キーボードによる操作なのでかなり苦労しましたが、見事に出現して感激しました。他には、Ultra2000版のゼビウスもエミュレータ実装なので同じことができると思います。

NAMCO HISTORY VOL.1 XEVIOUS
NAMCO HISTORY VOL.1 XEVIOUS
NAMCO HISTORY VOL.1 SUPER XEVIOUS
NAMCO HISTORY VOL.1 SUPER XEVIOUS

こうなると、アーケード基板でも見たくなりますが、実家で探したところコントロールボックスが捨てられたのか見当たらなくて(基板はありました)、すぐには出来なさそうです。自作するか中古で買ってくるか、とにかく動作確認ができたらROMライタで試してみようかと思います。

関連記事

最後のソルはかなり意外(というか陰険)な場所でした。「ゼビウス・ガンプの謎はすべて解けた!? 」のガンプモードでソル全42本、スペシャルフラッグ4本、すべて自分の力だけで見つけました。見返してみると、いかにもゼビウス的なありそうな場所には無く、反則的な隠し方がされている感が否めません。これクォータービューだと探し当てるの無理なんじゃないでしょうかね。

このソルはイカンでしょ
このソルはイカンでしょ

初期のクォータービューがイマイチで iPhone の肥やしだった本作を今更ながらプレイしてます。縦スクロールのほうが操作性も良くて、こっちをメインにしてクォータービューはオマケにしたら成功したかも知れない。ガンプとVSのほうはソルを探索中ですが、なかなか探す暇がないゲーム性となっていてあまり探せてません。とりあえず、エリア4のソルはどこでしょう?

まともな攻略サイトが無いようですので、メモ代わりにソルのスクリーンショットを集めた攻略ページを作りました。オリジナルモードはまだ探索率50%程度となっております。アーケードモードは非破壊(周囲)イメージでコンプリートしました。

先日上げたゲームのプレイ動画、著作権がどうたらが付いた関係かで画質が宜しくないし、誰も再生していないので消してしまった。あと、新しいチャンネルにしようとしたけど、まずブランドアカウントを作ってください、と出て名前入れて作成すると普通にチャンネルが出来てると思うんだけど、なんだこれ。今までのアカウントに、新しいチャンネル作るだけでいいのに。最近こういう訳がわからんような、サービスが多くてこまります。

上がオリジナルのカラーです
上がオリジナルのカラーです

小説ゼビウスに出てきたような記憶がある、イヴ機の黒いソルバルウに改造してみました。上がオリジナルの白、左が灰色バージョン、右がかなり黒くしたバージョンです。単体で見るとなかなか良さそうだったのですが、いざ書き換えてみるとちょっと残念な感じです。

実際にゲームを書き換えてみたの図
実際にゲームを書き換えてみたの図

並べてみるとやはりオリジナルの明るいソルバルウがいいと思いました。ゼビウスってなまら完成度が高いので、どんな改造も蛇足になっちゃうんですよね。青いラインすら別のに変えるとしっくりこないのには感服致しました。

ゼビウスの設定でゼビ語文字という珍妙なものがありますが、それをゲームのフォントに組み込んでみました。単色の文字だと2進数に直してダンプするだけで文字が見えくるので、ツールを作るのも割と簡単でした。ちなみに、ゼビ文字は数字が16進数なのですが雰囲気が出れば良いということで、ご了承ください。

簡単な字形なのでそうかと思いきや、実際にドットを打ってみるとかなり辛いです。もっとウェイトのあるフォントにしたかったのですが、細い線を使わないとまるでうまく行きません。あと、設定されていない記号などは適当にデザインしました。ちなみに、「&」はシオナイトがドッキングする様子、「?」と「!」は悩みましたが雰囲気は壊していないと思います。

完成したゼビ語フォント
完成したゼビ語フォント
実際に書き換えてみるとこんな感じです
実際に書き換えてみるとこんな感じです

実際にプレイもできますが、スコアがぜんぜん読めない以外は支障は無いでしょう(何が書いてあるかは読まなくても分かりますし)。あ、でもネームエントリは正しく入力するのは、まずムリと思います。講座にでも行って、正しいゼビ語を習得しましょう。

ファミコン版の幻のソル
ファミコン版の幻のソル

ゼビウス6面のソルは本来2本ありWikipedia によるとキャラクターオーバーによって出ないとされています。この幻のソル、ファミコン版やナムコミュージアムVol.2(PSP)で、川の手前の左側で出現するので知っている人も多いでしょう。しかしこの場面、そんなにキャラが多いとは思えず疑問でした。今回はそれが本当かどうか、プログラムを解析して調べてみたいと思います。

AC版ですが一応基盤は所有していますが、そこから始めるのはあまりにも敷居が高いということで、MAMEを使うことにします。MAMEだとデバッガ等のツールも便利なので、解析作業も楽になります。(余談ですが、今だとゼビウスの基盤だと5万くらいの安い方ですが、バブルシステム版グラディウスとかうん十万後半とかなってるものもあります。ちなみに、ライフフォースは所有してますがそんな高く無いですね。コレクションしておけば良かったなぁ)

移植作品に出現する幻のソル

上のファミコン版以外にも、いくつかの移植作品で出現します。ナムコクラッシックコレクションVol.1 のゼビウス(オリジナル)では、デバッグモード(ザッパーとブラスターのボタンを押しながらスタートさせる)で出現させることが出来ます。

ファミコン版は他のソルも位置がずれているのですが、こちらはアーケードの配置そのままだと思われます。これを参考に、アーケード版のロム内にデータとして存在しているのか、存在していれば表示されない理由は何なのか、検証していきたいと思います。

ナムコクラッシックコレクションVol.1 の幻のソル
ナムコクラッシックコレクションVol.1 の幻のソル
MAME のデバッガって超便利

今回初めてデバッグモードを使ってみましたが、逆アセンブル、メモリダンプ、ブレークやウォッチポイントなど超便利ですね。メモリダンプもリアルタイムに更新されるので、残機やエリア進行のポインタの動きっぽい更新から当たりを付けられて、Z80のコードを追わなくても何とかなる部分が多かったです。

解析の手順(かなり端折ります)
チートファイルで省力化

まず、スクロールに伴ってカウントアップするような箇所を探していきます。いきなりですが、チートファイルの中身を見て無限残機で書き込んでいるアドレス(0x8183)をモニターしてみました。すると、ゲーム開始で "2" が入り、ミスすると減っていき、"0" 時にミスするとゲームオーバーになりました。なるほど、1000万点近くで無限アップして、残機が256機(0xFFをインクリメントして0x00)になると0になるのは 1byte で管理しているからですね。そして、256機(0x00)でミスすると一発ゲームオーバーと。

なぜここを見たかと言うと、だいたいゲーム進行のステータス関係は、近い場所に格納されているだろうと踏んだからです。闇雲にプログラムを追っても時間が掛かるだけですから、あるものは利用させていただきましょう。

敵の出現テーブルはどこ?

今回は敵の出現テーブルを見つけたいので、この周辺でカウントアップしているような箇所を探します。すると、すぐ隣の 0x8185 (WORD) にそれらしき動きをする部分を発見しました。無敵チートを使って、エリア16 まで通しで監視してみると、常にカウントアップしているものの、間隔に緩急があるように見えました(敵が出てくるタイミングでカウントアップしている)。エリア1で 0x1020 で始まり、エリア16の最後で 0x1E51、エリア7に戻ると 0x1473 になり以降繰り返しとなります。ここが敵出現テーブルのポインタで間違い無さそうでしたが、どうも 0x1020 のアドレスには無さそうです。この辺りでちょっと違う方向に解析を進めてしまって、かなり時間を無駄に使ったので省略します。

出現テーブルの解析

これらの出現テーブルを処理しているのは、サブCPUだと分かりましたので、ウォッチポイントやメモリダンプもデバッガでターゲットを切り替えれば OK です。分かったのは、"XVI6" が出現テーブルのデータで、サブの 0x1000 に読み込まれているようでした。

これの構造が分かり難かったのですが、0x1000 から 16 エリア分の開始位置が書き込まれており、そこから各キャラクタ(地上物と空中物は共通)の出現位置の羅列になっているようです。キャラクタの種類によってバイト数が変わるようで、地上物は 4 バイト(ドモグラムは移動パターンがあるので長くなります)、空中物は 2 バイト、0x0D で終了というような内容になっています。

地上物の 4 バイトは、縦の出現位置(エリアの進行割合)、地上物の種類、処理のスロット番号、横の出現位置(ピクセル単位)、という並びになっています。縦の出現位置と、処理スロット番号(勝手にそう呼んでますが、画面内で生きている地上物の状態を管理する入れ物で、最大 14 個使えるようです)は、かなり分かり難くくて悩みました。

地上物の出現テーブル詳細

下記の出現テーブルは、最初に出てくるバーラ(上)とゾルバク(下)の出現テーブルです。

#1042: D6 1E 04 80
#1046: D6 1F 06 70

簡単なものから説明すると、2バイト目が地上物の種類を表しており、例えば「0x1B」に書き換えればデロータが出てきます。また、4バイト目は横の配置で、画面右端からのピクセル単位で指定するようです。

少し悩んだ1バイト目ですが、これはエリア全体で縦の位置(半キャラの8px単位)を表しています。エリアの開始位置を FF、終了位置が 10(これより後には地上物も空中物も置けない)という形で指定し、出現テーブル上で降順(ここ重要)に並んでいる必要があります。最初これが分からずに、適当に値を入れると地上物が何も表示されなくなったりして悩みました。

問題の3バイト目

解析の結果、3バイト目は地上物を処理するスロット番号(便宜上こう呼びます)が入ります。簡単に説明すると、地上物を存在させるために状態等を保存しておく箱の番号といったところです。ゼビウスの場合それが、04, 06, 08, 0A, 0C, 0E, 10, 12, 14, 16, 18, 1A, 1C, 1E(各16進数)の 14 個用意されているようです。このことから、同時に画面上に存在し得る地上物の数は 14 個に制限されることが分かりました。

出現テーブルを全体的に眺めると、一番最初に現れるバーラの 0x04 から始まって、全エリア通しで 0x04 ~ 0x1E をリング状にループしているのが分かります。なお、大きい地上物は複数のスロットを消費し(ボザログラムが5個、ガル系は2個)、従ってこれらが密集するエリアは配置可能な地上物の数は少なくなります。

ソルが幻となる核心部分

それでは、エリア6の問題の箇所を見てみましょう。

#1442: 4F 1D 06 D0

はい、ソルを表す 0x1D のデータが確かにありました! これが幻のソルそのものです。横の位置 0xD0(画面の右端から 208 ドット目)は、背景の並木の左側、そう、ちょうどナムコクラッシックコレクションで確認した場所にあたります。アーケード版のゼビウスにもちゃんと存在していたことが証明されました。

図にスロット番号を書き出してみると、ボザログラム手前のソルから始まって、幻のソルの手前のログラムでちょうど一周していることが分かります。

また、ボザログラムと幻のソルのスロット番号が同じだということも分かります。このことから、まだボザログラムの存在が残っている状態で出現できないか、出現してもボザログラムと道連れにすぐに消滅しているのどちらかが原因と判明しました。

この場所であまりキャラクターが多い印象が無いのは、ボザログラムが5個分も消費しているせいでした。という訳で、キャラクターオーバー説は本当だったようです。

もう一つ分かる点としは、同じくボザログラムと被るスロット番号(0x08)を持ったドモグラムが消えないことです。つまり、ソルが消えるのは本当にギリギリの不運だったという事になります。

ここまで分かれば、出現させるのは割と簡単です。例えば、ログラムをひとつ潰すという方法や、ボザログラムの出現位置を下げる方法を試したところ、ちゃんと表示されました。ただ、完成されたマップはできるだけ変更したくありません。他の方法を探しますが、地上物が消えたり、出現と同時にワープしたり、撃ってもいないのに爆発痕になったりと、ここからの試行錯誤が大変でした。

本当に紙一重

例えば、ボザの次のグロブダー(撃とうとすると高速で下に避けるやつ)と同じ 0x10 をソルに割り当てたところ、わざと加速させて画面外に出したときのみ正常にソルが出てきます(加速させなかったり、破壊してしまうとダメ)。

また、ボザの出現位置を1キャラ下げるか、ソルを1キャラ上げるだけでも正常に出てくるようになります。仮に、ボザを下げても空き地内に収まっているし、ソルを上げても元々幻だったわけですから、凄腕のゼビウス警察でもない限りまず気づかないでしょうが…。

発想の転換

ボザログラムの実態は、4つのログラムと1つのコアの組み合わせだと推察できます。消費するスロットも5つとなっているので、1つの地上物でありながら消滅は個別のログラムとして処理されるのでは無いかと考えました(俺ならそうする)。そしてここからは当て推量ですが、下側に位置するログラムが1キャラ分早く消滅すると仮定して、そのスロット番号を特定すれば良いと考えました。素直に(俺が)書けば、中央コアが 06、周りはその人のセンスで他のスロットが割り当ててあるはずです。最下部のログラムが 06 だったときのみ、どうしようもありませんが、その可能性は低いと思いました。

今までの解析で、ソル以降の地上物はボザログラムで使用されたスロット番号が並んでいるはず、それらとスロット番号を入れ替えれば推測が正しいか判明します。実際にやってみたところ、1つ後のドモグラムで思い通りの結果となりました。

ついに「正しい位置にソルが出現し、他の地上物に一切影響が無い状態」になったのです!

修正はたったの2バイト

上側が幻のソル(0x1D)、下側が直後に左から出てくるドモグラム(0x2E)の出現テーブルになります。ドモグラムは移動経路がある分、定義が長くなっています。オリジナルでは下記のように 0x06 → 0x08 になっています。

#1442: 4F 1D 06 D0
#1446: 48 2E 08 D8 03 08 00 58 18 FF 00	

それぞれの3バイト目のスロット番号を入れ替えると下記のようになります。本来はオリジナルのように順番になっていなければなりませんが、入れ替えても何ら問題が無い(出現場所が近い場合)ことが分かっています。

#1442: 4F 1D 08 D0
#1446: 48 2E 06 D8 03 08 00 58 18 FF 00	
本物の幻の46本目のソル

とは言っても MAME ですが、もちろん ROM ライタで焼いて基板に移せば完璧です。埃かぶっているコントロールボックスなど、実家の物置から発掘できたらやってみたいと思います。それにしても、都市伝説みたいな噂だったのに、たった2バイトで良かったなんて面白いものです。

やっと逢えたね!No.46
やっと逢えたね!No.46
実際に出現させてみた動画