ゼビウスのギドスパリオ破壊時の赤い豆腐

ゼビウスでギドスパリオを破壊したときに赤い豆腐が出る件、20年近く前に調べて実装したけど、ちゃんとメモってなくて忘れてしまったので、再度調べ直した
20
uchopon @uchopon

ゼビウスのギドスパリオ破壊時の赤いベタキャラクタについて調べたので放流

2015-10-13 19:38:16
uchopon @uchopon

ギドスパリオの破壊アニメーション処理では、4色オブジェクトのキャラクタ番号4〜7を表示するにあたり、描画の2フレームに1回アニメーションパターンを進めている。

2015-10-13 19:38:39
uchopon @uchopon

カウンタを2で割った値に4を足してオブジェクト番号を生成するところで、2で割るのにrrca命令を使っているため、カウンタが奇数の場合に最上位ビットが立って$84〜$87という値になる。

2015-10-13 19:38:54
uchopon @uchopon

4色オブジェクトは$00-$3Fまでしかないため、パターン番号に$84〜$88という値を指定することで赤いベタキャラクタが表示されてしまっている。オブジェクトコントローラ側の動きについては、そのうち調べるかも。

2015-10-13 19:39:28
uchopon @uchopon

ちなみに、ナムコヒストリーVOL.1のゼビウス開発時は、4色オブジェクトで$40以上のパターン番号にはダミーのベタキャラクタを表示させている。20年前にも同じように調べ、前述のように実装していたのでした。ちゃんちゃん

2015-10-13 19:42:04
uchopon @uchopon

あー、ギドスパリオの件、すっきりした。件のコードは、メインプログラムの $345d〜 で、問題となる rrca は $3464 ね。以上

2015-10-13 19:43:48
uchopon @uchopon

スプライトコントローラ周りを確認。 4色オブジェ(4N)は32Kbit ROMなので、キャラクタ番号の6ビット目にあたるA12はない

2015-10-14 01:05:54
uchopon @uchopon

7ビット目はOBJデータのROM選択に使われていて、キャラクタ番号の7ビット目がHigh、オブジェクトタイプを指定するビットがHighだと4色OBJのROMの~CEがHighになり、どのROMの未選択状態となる

2015-10-14 01:10:54
uchopon @uchopon

typo修正:「どのROMの未選択状態となる」→「どのROMも未選択状態となる」だな

2015-10-14 07:53:46
uchopon @uchopon

このときスプライトコントローラに入力されるデータは、3プレーンのうち2プレーンがHigh、1プレーンがLowとなるので、カラーテーブルの011(=7)がピクセルのカラーとなる

2015-10-14 01:43:58
uchopon @uchopon

ギドスパリオのカラーテーブルは$26-$29で、$26-$28のカラー011(=7)は透明、$29は赤色なので、ちらっとだけ赤色の豆腐になるということか

2015-10-14 01:44:12
uchopon @uchopon

カラー011(=7)はカラー011(=3)の書き間違い

2015-10-14 02:12:17
uchopon @uchopon

ということでギドスパリオが破壊されたときの赤い豆腐の話はおしまい

2015-10-14 01:46:08
uchopon @uchopon

間違ってるところあったら、ジャンジャンバリバリ指摘するなり、修正入れるなりご自由にどーぞ

2015-10-14 01:55:08
uchopon @uchopon

私が勝手に調べて勝手に書いたことなので無保証。信じるも信じないも自由。間違ってるじゃん、どうしてくれるんだ!とか言われても知らんw

2015-10-14 01:57:11
uchopon @uchopon

ゼビウス ギドスパリオの件、rrcaの後にand 07hを入れ忘れたのか。他ではrrcaの後にandが入っているため、ただの書き忘れバグ(and 03hが抜けているという説もあるが、その直後のcp 04hが無意味なので07hが正解)。該当コードはCPU1の$3464ね。

2015-10-19 01:59:31