ゼビウスはナムコが 1983 年に発売したアーケードゲームです。 多くの家庭用ゲーム機やパソコンに移植され、特にファミコン版は 100 万本を超える大ヒットだったそうです。
昔たまたまゼビウスのアーケード基板を入手し、ROM を吸い出して解析し、X68000 というパソコンに移植したことがあります。 その頃 X68000 版はすでに発売されていたのですが、 忠実移植ではなく不満だったので自分で作ってみました。 残念ながら世の中には出ていません。
今回 PasocomMini PC-8001 を購入したので、何かネタは無いかということで、 再びゼビウスを移植してみることにしました。X68000 への移植では、きちんと解析せず機械的に移植した部分がありましたが、 今回はかなり細かく解析したのでまとめてみました。
解説する上で、以下の用語を使います (一般的な技術用語については省略します)。
ハードウェア構成を、ゼビウスで使用している範囲で。
CPU | Z80 3.072MHz 3 個(メイン/サブ/サウンド) |
---|---|
表示範囲 | 224x288 ドット |
表示色 | 4,096 色(RGB 各 4bit)中 128 色 |
スプライト | 64 枚 縦横それぞれ 16/32 ドット 8 色 256 パターン/4 色 64 パターン H 反転/V 反転 パレットブロック 64 個(8 色と 4 色で共通) |
BG 面 | 8x8 ドット単位 4 色 512 パターン H 反転/V 反転 パレットブロック 128 個 仮想画面 32x64 キャラクタ |
点数表示面 | 8x8 ドット単位 単色 256 パターン 仮想画面 32x64 キャラクタ |
サウンド | 波形メモリ音源 3ch.(波形は 4bit×32 サンプル、8 音色) ノイズ音源 2 系統 |
英語表記は間違っているかもしれません。あしからず。
自機。縦方向は速度 1、横方向は速度 1.5、斜め方向は X, Y それぞれ 1 ドット/フレームで移動できる。
対空兵器「ザッパー」は画面内(+画面外 32 ドット)で 3 発まで撃つことができ、速度 6 で発射する。
対地兵器「ブラスター」は画面内で 1 発だけ撃つことができ、照準の位置へ向かって投下した後、加速して 38 フレームで着弾する。
最初から出てくる無人偵察機。ソルバルウとの X 距離 8 キャラクタ以上の画面上部から出現し、速度 1.5 でソルバルウの方向へ直進する。 ソルバルウとの X 距離が 2 キャラクタ以下になると、回転してソルバルウと X が逆の方向に X 加速度 1/16 で加速しながら去っていく。その時に弾を 1 発撃つものと撃たないものがある。30点。
トーロイドの高速版(出現時速度 3)。トーロイドより X 座標の反応が敏感(6 キャラクタ以下)。 タルケンと同時に出てくるものは弾を撃たない。150点。
上から速度 2 でソルバルウへ向かって 64~127 フレーム直進し、弾を 1 発撃ってコクピットを転回し、ソルバルウと反対方向に速度 3 で去っていく。50点。
タルケンの改良機。直進は 48~111 フレーム。去る時は弾を連射しつつ、ソルバルウと X 方向が逆の上方向に、X 加速度 1/16、Y 加速度 1/8 で加速しながら去っていく。300点。
カピの改良機。ソルバルウとの X 距離 8 キャラクタ以上の画面上部から出現し、弾を連射しつつ速度 3 でソルバルウの方向へ直進。ソルバルウとの X 距離が 4 キャラクタ以下になると、ソルバルウと X 方向が逆の上方向に、X 加速度 1/8、Y 加速度 1/8 で加速しながら去っていく。700点。
初めにソルバルウの方向へ速度 1.5 で直進し、何フレームか後に弾を 1 発撃って方向転換するのを繰り返す。フレーム数の範囲は可変。 出現位置と転換する方向によって、次の 3 種類がある。
上から速度 4 でソルバルウめがけて飛来する。10 点のわりに強い。
上から 2~17 キャラクタの位置(大きさを 16x16 ドットと見なした場合)にテレポート出現し、消失時に弾を 1 発撃つ。出現後の移動方向と消失条件によって、次の 4 種類がある。
ザカート同様にテレポート出現し、ソルバルウの方向に速度 2 で移動し、消失時にソルバルウの方向へ速度 3 の弾を扇状に 5 発撃つ。消失条件によって、次の 2 種類がある。
上から出現して下へ速度 3 で直進し、Y 座標 64~157 の位置で通常弾を速度 3 で 16 方向に、さらにブラグスパリオ(後述)を初速 2 で 4 方向に撃って消滅する。消滅前に撃って破壊すると 1,000 点。
上から出現し、回転しながら下へ速度 1 で移動する。破壊不能。
味方。当たり判定は無い。 ゼプナイトとキャスナイトが上から速度 4 でソルバルウへ向かって飛来し、しばらくソルバルウの近くで回転した後、 ドッキングして速度 6 で上へ去っていく。
なお、開発資料ではゼプナイトが右側、 キャスナイトが左側となっているが、他の資料では逆になっているものもあり、 どちらが正しいかは不明。 プログラム上では右側→左側の順に登録されている。
敵の通常弾。画面内に 19 発まで出現可能。ブラグザカートとガルザカートが撃つものは速度 3、それ以外は速度 2。
ガルザカートが撃つ誘導弾。通称ジェミニ。 ソルバルウの方向へ X, Y それぞれ加速度 1/8 で軌道修正する。
破壊不能だが、1 発撃つごとに 500 点入る。 ソルバルウをうまく操作することで、ソルバルウの周りで回すことが可能。2 発回すのが安全かつ点数効率が良いので「ジェミニ誘導」 (ジェミニはふたご座のこと)と呼ばれるようになったとか。
エネルギーを蓄えているピラミッド。100点。
大きい(「ガル」はゼビウス語で大きいという意味)バーラ。 下部はバキュラで作られていて破壊不能。上部は破壊可能で 300点。
ゼビウス軍の情報収集システム。攻撃はしてこない。200点。
ある程度の時間ごとに弾を 1 発ずつ撃つ。300点。
連結された(「ボザ」は連結を表す)ログラム。 周りのログラムは 1 個 300点。中心部は周りのログラムを破壊する前は 2000 点、1 つでも破壊すると 600 点になる。
弾を短い間隔で連射してくる。1,000点。
ガルバーラと同様、下部がバキュラで作られているデロータ。 他の地上物が画面下の方では弾を撃たなくなるのに対し、 画面から消えるまで撃ち続ける。2,000点。
ログラムにホバーリング機能を付けたもの。 整地を移動しながら、ある程度の時間ごとに弾を 1 発ずつ撃つ。800点。
移動速度は X, Y それぞれに設定され、(スクロール分は差し引いて)どちらかは 0.5 になる。斜め 45 度なら両方 0.5。
水陸両用の輸送車。攻撃はしてこない。 海上のものは爆発アニメーションが速く、爆破跡が残らない。 ソルバルウの照準やブラスターに反応して動きを変えるものがある。 動きの種類は以下の通り。「再び」とあるものは 48 フレーム後。
移動速度に関しては次の通り(スクロール分は差し引いてある)。
浮遊要塞。4 つのアルゴ(砲台)とコア(中央部)を持つ。 コアを撃つとアルゴも破壊されるが、その前にアルゴを撃つと 1 つ 1,000 点入る。コアを撃つと、そこからブラグザ(右画像、破壊不能)が上に逃げていき 4,000 点入る(ただしバグがあり+α点入る)。
隠しキャラ。全部で 45 ヶ所に隠れているが、照準に反応する。 ブラスターを撃つと出現して 2,000 点入り、完全に出現してから撃つと破壊できてさらに 2,000 点入る。
隠しキャラ。通称「スペシャルフラッグ」。4 ヶ所あるラインのランダムな X 座標(ソルバルウとの X 距離 8 キャラクタ以上)に設置され、そこにブラスターを撃つと出現する。 ソルと違って照準には反応しない。出現で 1,000 点、取るとエクステンドもしくは 10,000 点(DIP-SW で設定)。 なお、一度出して取ってから下がってもう一度撃っても、 出てくることはない。
1 面最初の右端でブラスターを撃っていると、 画面下部に隠しメッセージが出て 10 点入る。不正コピー対策。 正確な場所は、スタート時の画面右上端よりも 16~31 ドット上。
不正コピーチェックに引っかかるとメッセージが変わる。 ……右端ちょっと切れてますが(笑)。
難易度に対応する空中物は以下の通り。
難易度 | 空中物 1 | 空中物 2 |
---|---|---|
0~2 | トーロイド A×3 | - |
3~5 | トーロイド A×4 | - |
6~8 | トーロイド A×5 | - |
9~11 | タルケン×2 | - |
12~13 | トーロイド A×4 | - |
14~15 | トーロイド A×3 | トーロイド B×1 |
16~17 | トーロイド A×2 | トーロイド B×2 |
18~19 | トーロイド A×2 | トーロイド B×3 |
20~21 | トーロイド A×2 | トーロイド B×4 |
22~23 | タルケン×3 | - |
24~25 | タルケン×4 | - |
26~27 | タルケン×5 | - |
28~29 | ギドスパリオ×3 | - |
30~31 | ギドスパリオ×4 | - |
32~33 | ギドスパリオ×5 | - |
34~35 | ゾシー A×3 | - |
36~37 | ゾシー A×4 | - |
38~39 | ゾシー A×5 | - |
40~41 | ジアラ A×3 | - |
42~43 | ジアラ A×4 | - |
44~45 | ジアラ A×5 | - |
46~47 | ザカート A×3 | - |
48~49 | ザカート A×2 | ザカート B×1 |
50~51 | ザカート A×2 | ザカート B×2 |
52~53 | ゾシー B×3 | - |
54~55 | ゾシー B×4 | - |
56~57 | ゾシー B×5 | - |
58~59 | ジアラ B×1 | ジアラ A×3 |
60~61 | ジアラ B×2 | ジアラ A×2 |
62~63 | ジアラ B×2 | ジアラ A×3 |
64~65 | ジアラ A×2 | タルケン×3 |
66~67 | ジアラ A×2 | タルケン×4 |
68 | ザカート C×2 | - |
69~70 | ザカート C×3 | - |
71~72 | ザカート C×4 | - |
73 | ザカート C×5 | - |
74~75 | タルケン×5 | - |
76~77 | タルケン×6 | - |
78 | カピ×2 | - |
79~80 | カピ×3 | - |
81~82 | カピ×4 | - |
83 | カピ×5 | - |
84~85 | ゾシー B×5 | - |
86~87 | ゾシー B×6 | - |
88~89 | ギドスパリオ×4 | - |
90~91 | ギドスパリオ×5 | - |
92~93 | ギドスパリオ×6 | - |
94~95 | ジアラ B×5 | - |
96~97 | ジアラ B×6 | - |
98 | ザカート C×1 | ザカート D×1 |
99~100 | ザカート C×2 | ザカート D×1 |
101~102 | ザカート C×2 | ザカート D×2 |
103 | ザカート C×2 | ザカート D×3 |
104~105 | ジアラ B×6 | - |
106~109 | トーロイド B×6 | - |
110 | テラジ×2 | - |
111~112 | テラジ×3 | - |
113~114 | テラジ×4 | - |
115 | テラジ×5 | - |
116~119 | トーロイド B×6 | - |
120 | ブラグザカート A×1 | - |
121 | ブラグザカート A×2 | - |
122~125 | トーロイド B×6 | - |
126 | ブラグザカート B×1 | - |
127 | ブラグザカート B×2 | - |
A~D の表記があるものは以下の通り。
敵配置データには指定難易度の敵を出すコマンドがあり、0~255 を指定できる。このうち 128~223 は定義されていない。224~255 は以下の通り。ただし 0~127 以外で実際に使われているのは 230, 236, 241 の 3 つのみ。
難易度 | 空中物 1 | 空中物 2 |
---|---|---|
224 | トーロイド B×2 | ジアラ B×2 |
225 | トーロイド B×3 | ジアラ B×2 |
226 | トーロイド B×4 | ジアラ B×2 |
227 | トーロイド B×2 | ギドスパリオ×4 |
228 | タルケン×2 | ギドスパリオ×4 |
229 | ギドスパリオ×4 | ゾシー B×2 |
230 | ギドスパリオ×4 | ジアラ B×2 |
231 | カピ×2 | ギドスパリオ×4 |
232 | ギドスパリオ×4 | テラジ×2 |
233 | ギドスパリオ×4 | ゾシー C×2 |
234 | ゾシー B×3 | ゾシー C×1 |
235 | ゾシー B×2 | ゾシー C×2 |
236 | ゾシー B×3 | ゾシー C×2 |
237 | ゾシー B×3 | ゾシー C×3 |
238 | ザカート C×3 | ゾシー C×3 |
239 | カピ×3 | ザカート C×3 |
240 | ザカート C×3 | テラジ×3 |
241 | ブラグザカート A×2 | - |
242 | ブラグザカート A×3 | - |
243 | ブラグザカート A×4 | - |
244 | ブラグザカート B×2 | - |
245 | ブラグザカート B×3 | - |
246~255 | ブラグザカート B×4 | - |
背景データ ROM は 24KB+カラーデータ。8x8 ドット 4 色を 2x2 に並べたものを 64x128 個並べてある。全体で 1,024x2,048 ドット。 方眼紙に描いて作っていたとのこと。
スタート直後の森は別扱い。28 パターンを並べてある。14chr スクロール後に各面の背景が出てくる。
背景全体図(縦横半分に縮小)。
左上隅に ©namco の表記がある。7 面最後でのみ見ることができる。
ノイズ音の詳細。厳密な検証はしていないので参考程度に。
おおよその発音タイミングは以下の通り。「V数値」はボリューム、 「x数値」は長さ(単位は 1/150 秒くらい)。
出力は矩形波ノイズにバンドパスフィルタを通している。 矩形波ノイズのサンプリング周波数は 2400Hz くらいで、地上物爆発は 1/4 の確率で ON/OFF 切り替え、その他は 1/2 の確率で ON/OFF。
バンドパスフィルタの周波数特性などは、オペアンプ多重帰還型バンドパス・フィルタ計算ツールで、 以下の値を入力。