ゲーム : してログ

ザリガニ
ザリガニ
クマノミ
クマノミ
イシダイ
イシダイ
キングサーモン
キングサーモン
ホソアカクワガタ
ホソアカクワガタ

ナンヨウハギはスクリーンショット撮るの忘れてましたが、いちばん先に捕れました(出現率も高め)。キングサーモンとホソアカクワガタがなかなか出なかった。

出現率の調整があったのか、マグロとナポレオンフィッシュがよく出てくるように。代わりに川のネオンテトラが最近見ていません。お願いされる、タイ、カブトムシ、ブラックバスは、状況に応じて出現率が高く調整されるような気がします。

エリアマップ編集用に描いた下書きが出てきたので記事に残しておきます。

左右繋がったマップにしました

オリジナルのゼビウスは左右ループしたエリアはありません(そういうデザインになっていない)が、プログラム上はループしてても問題が無いような作りになっています。そこで、新16エリアは左右ループしたマップデザインに変更しようと思いました。オリジナルマップを半分シフトして、左右がうまく繋がるよう編集していくのですが、その前に手書きイメージを作成しています。なお、基本としたマップはオリジナルを左右反転したものです。

編集作業

ハチドリの砂漠をうまく閉じるのに、2面や16面の道路(右半分)を潰して自然にしています。ストーンサークルのような地形が欲しいので、それを真ん中あたりに作り、川は上に蛇行&合流させて森へ消えるよう処理します。他は、湖に島を作る、森に砲台サイトを作る、反転した影を修正などを行っていきます。

その他

今回左右繋げた結果、同じような背景のエリアが多くなるのを少し改善できますが、なくせる訳ではありません。16エリア切り出すには圧倒的に足りませんし、使い勝手の面で同じような背景マップを使わざるを得ないのが実情です。マップチップのグラフィックは2段階で反転が可能にしているように、マップ自体も左右・上下反転したものも使えるようプログラムしてあったら良かったのにと思います。

実機でも出た!
実機でも出た!

やっぱり実機で出ている姿は格別なものがあります。いくらアプコンの絵がヘロヘロでも、なんとなく格式の高さを感じてしまいます。EPROM が足りなくて、スプライトのドット絵は修正できていませんが、なんとか確保してこれからプレイするデバッグ版基板にしたいですね。

動画はキャプチャー機材を持っていないのでスマホ撮影ですみません。しかし、昨日アップしたんですが、あいかわらずゼビウス動画の再生数は少ないですね。ニコニコはしばらく後にまた削除することになると思います(アップロード数に制限があるので)。

ようやくこのときが来ました(当初の目標はこれだったはず)。

出現テーブルの解析から始めて、バグの原因と解決方法が分かってエミュレータ上や、ナムコヒストリーの改造では確認できていたものの、本物の基板上で出すというのは非常に感慨深いものがあるはずです。今回は作業に使った機材とか、確認に使った基板などをご紹介します。なお、直接録画できる環境が無いので、動作している様子は後日公開します。

これがゼビウスの基板だ

これが私の所有するゼビウスの基板で、2枚持っているうちの最近買ったほうかな(改造するから保存用と別に揃えたのだよ)。昔は1万以下で手に入れられたけど、最近は3~4万に値段が上がってるっぽい。

ご覧のようにシールが破損して読みにくくなっているので、写真を撮って分かるようにしておきました。作業前に一度通電させて遊んだら、いつの間にか1周していました(やはり本物はいいですネ)。ちなみにこの基板、電源投入直後は背景が時おりフラッシュするような不具合があるみたいですが、時間が経つと安定するようです。

表側?プログラムと出現テーブルの ROM が乗っています
表側?プログラムと出現テーブルの ROM が乗っています
裏側?こちらはスプライトのデータとかの ROM です
裏側?こちらはスプライトのデータとかの ROM です
左はシールが破れたのか補修してある XVI 1 の ROM
左はシールが破れたのか補修してある XVI 1 の ROM
XVI 2 以外の 4KB はこの三菱の M5L2732K です
XVI 2 以外の 4KB はこの三菱の M5L2732K です
右側の XVI 6 が出現テーブルを格納しています
右側の XVI 6 が出現テーブルを格納しています
表側は XVI 7 でラスト(なぜか 8 は欠番)
表側は XVI 7 でラスト(なぜか 8 は欠番)
ここから裏側で、背景マップとかスプライトとかです
ここから裏側で、背景マップとかスプライトとかです
文字データや背景キャラクタの ROM
文字データや背景キャラクタの ROM
この辺がスプライト(容量の大きい ROM がいくつか)
この辺がスプライト(容量の大きい ROM がいくつか)
小さいのはパレットなどの ROM です
小さいのはパレットなどの ROM です
発熱するのか焦げた色になっています
発熱するのか焦げた色になっています
この辺は文字も読み取れないほどシールが痛んでいます
この辺は文字も読み取れないほどシールが痛んでいます

差し替え ROM の調達

これがなかなか厄介でした。ゼビウスで使われているものは、UVEPROM で 2732 と 2764 なのですが、もう希少パーツになっています。最初、ヤフオクでウォッチしていたんですが、所有の安いプログラマで書き込める型番のがなかなかありません。オリジナルが使っている三菱の M5L2732K は結構出てるのですが、サポートリストにないしダメ元で1個買ってみましたが、やっぱりダメでした。この三菱のやつは、吸い出しはできるのですけどね、うまく行かないもんです。

ずっとこんな状態でしたので諦めかけてたわけですが、最近少ないながら新品在庫を持っている会社を発見します。そこでサポートリストにある富士通の MBM2732A-25 というのをどうにか4個ゲットできました(ちなみに、そこの最終在庫でした)。これだと数が足りなくて、スプライトやマップの書き換えまでは無理ですが、幻のソルを出すだけなら2個あればできる状態になりました。ちなみに1個700円くらいで割高&希少、消去する機材も無いので失敗は許されません。

ようやく見つけた 2732
ようやく見つけた 2732

まずはオリジナルデータのバックアップ

この作業は過去やっておりますが、念のため全 ROM のバックアップを取りました。取り外すときのパキパキっていう音が心臓に悪い、基板にあまりストレスかけると半田クラックしそうで心配です。ちなみに、これらのチップはプログラマのデバイスリストに無いものでしたが、問題なく読み込めました。

プログラマにセットして読み取っている様子
プログラマにセットして読み取っている様子

データの書き込み

まず届いた EPROM をプログラマに乗せ、とりあえずブランクチェックをしてみました。ここまでは問題なし、次に書き換えたデータを読み込み、プログラム(書き込み)をしたところ問題発生です。なんか開始した途端にエラーで中止されてしまいます。型番は合っているし、認識もできている、しばらく悩んでしまいました。結局、データシートを確認し書き込み時のボルテージが低いためだと気づきました。データシートどおりの設定に変更し、再プログラムを行ったところうまく行きました。

デフォルトの VPP Voltage だとエラーになる
デフォルトの VPP Voltage だとエラーになる

そして乗せ換え

この辺はアーケード基板を触ったことある人ならやったことあると思います。ドライバーなんかでもできますが、IC の脚を折らないように引き抜き器具を使ったほうがいいです。今回は新しい ROM なので脚を少し曲げてあげないとダメなのですが、こちらは専用器具を使わず定規と机のカドを使って曲げました。ソケットの幅に合ったら、向きを間違えずに差し込めば交換完了です。

今回は用意できた EPROM の数が揃わなかったので、出現テーブルとプログラムの2つを交換しました。プログラムの方は ROM チェックのバイパスと、エリア表示と残機表示の改善も含んでいます。写真で黄色いマルで囲った ROM がそれで、取り外したオリジナルは脇に置いてあります。後はデータが消えないようにシールを貼れば OK ですが、適当なのが無いのでしばらくここままでいいでしょう。

黄色のマルが交換した ROM
黄色のマルが交換した ROM

緊張の動作確認

接続確認を入念に行い電源投入、安いアプコンのロゴの後、おなじみのキャラモザイク、ROM, RAM チェック、デデーンっとタイトル画面が。クレジット、スタート、ファンファーレ、おお、ここまで問題無ければほぼ間違いなくうまく行っています。それではエリア6まで軽くフライトと行きましょう。。。。次回に続く。

さあてどうなるか。。。
さあてどうなるか。。。

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

移動テーブルの例

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個目の地上物が現れる前に画面外へ行かせましょう。そうしないと、突然消えたりワープしたりしてしまいます。また、斜め上方向で画面外へ出す場合は、画面外で下方向へ転進させておくと安心です。

黒チューリップまで完了
黒チューリップまで完了

ガーデンイベントの中断でなかなかコンプリートできませんが、ロックンローズ前に黒チューリップまで完了しました。レアリティの低い順に集めましたが、逆の高い順に集めると一石二鳥、三鳥になるので効率的かも知れません。基本的には店売りのオレンジを、集めている色のチューリップに交配して増やしました。これから紫と青ですが、オレンジとの交配だと低確率なのですが、白が出るので溜めて交配の二段階手法でいけそうです。