Last Update 08/08/21

◇オブジェクト関係 ・EnemyID 00〜8F -> 通常のオブジェクト C0〜EF -> Effect Enemy(パレットアニメ・パレットの変更オブジェクト) 00 タケテントウ 01 ホバー 02 トムボーイ 03 サソリーヌ 04 バッタン 05 スワロン 06 ウォールブラスター(右の壁に設置) 07 ウォールブラスター(左の壁に設置) 08 リングマンステージの虹色足場 /** 09 リングマンステージの虹色足場 1つの部屋に同じ番号が重複しないよう設置 0A リングマンステージの虹色足場 0B リングマンステージの虹色足場 **/ 0C リングマンステージのリング足場 /** 0D リングマンステージのリング足場 1つの部屋に同じ番号が重複しないよう設置 0E リングマンステージのリング足場 0F リングマンステージのリング足場 **/ 10 100ワットン 11 ラットン 12 ワッパー 13 ハエハエー 14 ラッカーサー 15 ドンパン 16 海面が上下する(ダイブマンステージ) 17 海面が上下する(ダイブマンステージ) 18 カバトンキュー /** 19 カバトンキュー 3つセット 1A カバトンキュー **/ 1B タコトラッシュ 1C コックローチ・ツイン戦の落下する足場? 1D 1E エスカルーの登場? 1F エスカルーの殻? 20 エスカルーの尻尾? 21 未使用 22 未使用 23 未使用 24 未使用 25 未使用 26 未使用 27 未使用 28 ブライトマンステージのリフト 29 ドリルボムで壊せる壁 2A 2B 2C 2D ミノーン 2E スーパーボールマシーンjr(左向き) 2F スーパーボールマシーンjr(右向き) 30 岩落下(ドリルマンステージ) 31 エディー 32 エディー(ワイリーステージ2) 33 ジャンビッグ 34 シールドアタッカー 35 ブーンブロック 36 トーテムポールン 37 モビー /** 38 モビー これらと83で1セット 39 モビー 3A モビー **/ 3B メットールEX(歩行) 3C メットールEX(ジャンプ) 3D 3E 3F 40 41 地形出現レバー(ドリルマンステージ) 42 メットールEX(回転) 43 未使用 44 天井が上下する(ダストマンステージ) 45 M−422A 46 スカルメット(右向き) 47 ブヨヨーン 48 スケルトンジョー 49 リング・リング 4A メットール・スイム 4B スカルメット(左向き) 4C ヘリポン 4D ギョットット 4E ドクロン 4F ダストマンステージの組みあがる足場 50 ワイリーマシン4号 /* 50,53,54で1セット */ 51 ビリー(反時計回り) 52 ビリー(時計回り) 53 ワイリーマシン4号 /* 50,53,54で1セット */ 54 トゲヘロ(左) 55 ワイリーマシン4号 /* 50,53,54で1セット */ 56 E缶 57 モスラーヤ /** 58 モスラーヤ 3つで1セット 59 モスラーヤ **/ 5A ライフエネルギー回復大 5B ライフエネルギー回復小 5C バットントン 5D マンタン 5E コサックキャッチャー /** 5F コサックキャッチャー 3つで1セット 60 コサックキャッチャー **/ 61 スクエアーマシン /** 62 スクエアーマシン 63 スクエアーマシン 全部で1セット 64 スクエアーマシン 65 スクエアーマシン 66 スクエアーマシン **/ 67 マミーラ 68 イモーム 69 コックローチ・ツイン 6A コサックステージ3の出現する足場 6B モノローダー 6C メットール・ダディ /** 2つで1セット 6D メットール・ダディ **/ 6E ガチャッポン 6F タコトラッシュ /** これらと1Bで1セット 70 タコトラッシュ **/ 71 タコトラッシュ戦の足場 72 パカット24 73 アップンダウン 74 ワープする(ワイリーステージ3のカプセル) 75 針の出るブロック(初期状態で縦に針) 76 針の出るブロック(初期状態で横に針) 77 機雷(ダイブマンステージ) 78 ガリョービー 79 ボス出現 7A 武器エネルギー回復大 7B 武器エネルギー回復小 7C 1UP 7D バルーン 7E ワイヤー 7F ワイリーカプセル 80 暗くなっていた画面を明るくする?(ブライトマンステージ) 81 ラダープレス(左) 82 ブライトマンステージのリフト(往復) 83 モビーの 84 ラダープレス(右) 85 トゲヘロ(右) 86 エスカルーの目玉? 87 ブロックを上下させる?(ダイブマンステージ) 88 未使用 89 未使用 8A 未使用 8B 未使用 8C 未使用 8D 未使用 8E 未使用 8F 未使用 $7018F-7021E (90 bytes) EnemyID -> Display flags bit7 => 通常1 bit6 => 左右反転 bit5 => 背景に隠れる, bit4 => スプライトの表示位置にスクロール値を考慮する(通常1) bit3 => 画面外に出ても破壊されない, bit2 => 不可視 bit1 => ブロックになる bit0 => 下からジャンプで乗れる足場になる $7021F-702AE (90 bytes) EnemyID -> ObjectID $702AF-7033E (90 bytes) EnemyID -> Sprite flags bit7 => ロックマンに対してのダメージ判定の有無 bit6 => 武器に対してのダメージ判定の有無 bit5-0 => 当たり判定の大きさ(00〜3F) $7033F-703CE (90 bytes) EnemyID -> アニメーション番号 $703CF-7045E (90 bytes) EnemyID -> HP $7045F-704EE (90 bytes) EnemyID -> 初期X方向速度テーブル参照番号 $704EF-704F5 初期X方向速度テーブル参照番号 : X方向速度(low) $704F6-704FC 初期X方向速度テーブル参照番号 : X方向速度(high) ・ObjectID 00 01 コサックキャッチャー(EnemyID:60) 02 03 弾かれた武器 04 05 06 07 08 09 0A 0B 0C 0D 0E Unused. 0F 10 タケテントウ 11 12 ホバー 13 トムボーイ 14 15 サソリーヌ 16 バッタン 17 Jet Bird - Unused. 18 スワロン 19 1A ウォールブラスター 1B ウォールブラスターの弾 1C 100ワットン 1D 100ワットンの弾(分裂前) 1E 100ワットンの弾(分裂後) 1F ラットン 20 リングマンステージの虹色足場(EnemyID:08, 0C) 21 リングマンステージの虹色足場(EnemyID:09, 0D) 22 リングマンステージの虹色足場(EnemyID:0A, 0E) 23 リングマンステージの虹色足場(EnemyID:0B, 0F) 24 カバトンキュー(EnemyID:18) 25 26 カバトンキュー(EnemyID:1A) 27 28 ドリルボムで壊せる壁 29 2A 2B エスカルーの登場?(EnemyID:1E) 2C Unused. - Unused ASM at location $A7E5 in bank $3D. 2D 2E 2F ブライトマンステージのリフト 30 ワッパー 31 32 33 ハエハエー 34 35 ラッカーサー 36 37 ドンパン 38 ドンパン破壊後の花火関係? 39 3A ワッパー破壊後のエフェクト 3B 円形爆発 3C 連続した爆発(ObjectID:3Bを連続で生成) 3D ミノーン 3E スーパーボールマシーンjr 3F スーパーボールマシーンjrの弾 40 岩生成機(ドリルマンステージ) 41 岩の破片(ドリルマンステージ) 42 エディー 43 エディー(ワイリーステージ2) 44 45 コックローチ・ツイン戦の落下する足場? 46 ジャンビッグ 47 Unused. - ASM at $9F85 in bank $3A, already used by something else. 48 シールドアタッカー 49 4A 4B 4C 4D 4E トーテムポールン 4F トーテムポールンの弾 50 メットールEX(歩行) 51 メットールEX(歩行)の弾 52 モビー(EnemyID:38) 53 54 55 Unused. - RTS at $ACFC in bank $3D. 56 メットールEX(ジャンプ) 57 Unused. (Enemy ID $3D) 58 Unused. (Enemy ID $3E) 59 Unused. (Enemy ID $3F) 5A Unused. (Enemy ID $40) 5B 地形出現レバー(ドリルマンステージ) 5C メットールEX(回転) 5D コサックステージ3の出現する足場 5E 天井が上下する(ダストマンステージ) 5F M−422A 60 ブーンブロック(ブロック), 暗くなっていた画面を明るくする?(ブライトマンステージ) 61 ブヨヨーン 62 スケルトンジョー 63 64 リング・リング 65 メットール・スイム 66 67 68 Unused. 69 スカルメット 6A 6B 海面が上下する(ダイブマンステージ)(EnemyID:16) 6C 海面が上下する(ダイブマンステージ)(EnemyID:17) 6D ヘリポン 6E 6F 70 ギョットット 71 スカルマン 72 73 ダストマンステージの組みあがる足場 74 75 リングマン 76 77 78 ビリー 79 ダストマン 7A 7B 7C ダイブマン 7D 7E ドリルマン 7F 80 カバトンキュー(EnemyID:19),エスカルーの尻尾?(EnemyID:20) 81 82 83 84 ファラオマン 85 86 87 88 89 8A 8B ブライトマン 8C 8D トードマン 8E 8F 90 91 マンタン 92 コサックキャッチャー(EnemyID:5E) 93 コサックキャッチャー(EnemyID:5F) 94 95 96 97 98 岩(ドリルマンステージ) 99 9A マミーラ 9B マミーラの首 9C イモーム 9D 敵破壊後のデフォルトオブジェクト 9E コックローチツイン 9F A0 A1 モノローダー A2 A3 A4 A5 A6 A7 ガチャッポン A8 A9 AA AB AC タコトラッシュ AD AE AF B0 パカット24 B1 B2 アップンダウン(本体) B3 ワープする(ワイリーステージ3のカプセル) B4 アップンダウン(生成機) B5 針の出るブロック(コサックステージ2) B6 機雷(ダイブマンステージ) B7 ガリョービー B8 ボス登場 B9 ドクロン BA BB BC BD トゲヘロ(左) BE BF C0 C1 E缶,ライフエネルギー回復大,ライフエネルギー回復小,武器エネルギー回復大,武器エネルギー回復小,1UP C2 バルーン,ワイヤー C3 ブーンブロック(生成機) C4 ワイリーカプセル C5 C6 C7 ラダープレス(右) C8 ドンパン破壊後の花火関係? C9 ブライトマンステージのリフト(往復) CA ラダープレス(左) CB CC CD エスカルーの殻?(EnemyID:1F), エスカルーの目玉?(EnemyID:86) CE トゲヘロ(右) CF $74423-744F2 (D0 bytes) ObjectID -> ロックマンに与えるダメージ(00ですり抜ける) $744F3-745C2 (D0 bytes) ObjectID -> 撃破時の演出指定(ObjectIDで指定、撃破後のオブジェクトのObjectIDは指定した番号となる。ただし00は普通の爆発) $745C3-74692 (D0 bytes) ObjectID -> Enemy Handler呼び出し時に$A000-BFFFにマップするバンク $74693-74762 (D0 bytes) ObjectID -> Enemy Handler(low) $74763-74832 (D0 bytes) ObjectID -> Enemy Handler(high) $7E00A-7E109 (100 bytes) ObjectID -> 参照スプライトデータバンク番号(0A-0Bなら0B, 0C-0Dなら0D, 0E-0Fなら0F, 36-37なら37) ・当たり判定の大きさ 00 16 x 16 01 16 x 14 02 32 x 16 03 48 x 16 04 64 x 16 05 80 x 16 06 96 x 16 07 112 x 16 08 128 x 16 09 144 x 16 0A 48 x 8 0B 32 x 12 0C 48 x 16 0D 24 x 24 0E 8 x 8 0F 6 x 6 10 32 x 24 11 16 x 24 12 8 x 16 13 32 x 48 14 32 x 32 15 16 x 32 16 16 x 48 17 16 x 64 18 96 x 64 19 96 x 80 1A 16 x 8 1B 24 x 20 1C 6 x 28 1D 24 x 4 1E 24 x 18 1F 32 x 96 20 16 x 10 21 16 x 4 22 48 x 24 23 20 x 48 24 20 x 32 25 8 x 128 26 96 x 32 27 8 x 32 28 8 x 24 29 16 x 80 2A 128 x 16 2B 24 x 6 2C 64 x 64 2D 80 x 40 2E 40 x 64 2F 96 x 96 30 64 x 96 31 40 x 16 32 40 x 32 33 32 x 240 34 12 x 16 35 480 x 256 36 18 x 22 37 48 x 48 38 16 x 20 39 20 x 16 3A 0 x 0 3B 0 x 0 3C 0 x 0 3D 0 x 0 3E 0 x 0 3F 0 x 0
◇サブルーチン BANK 3E-3F ; 壁にめり込まないようにxをY方向に移動(Y方向速度は符号付整数, 上方向が正)。めり込み補正されたらC=1 jsr $F0F8 ; xを右に移動 jsr $F22D ; xを左に移動 jsr $F24B ; xを下方向に移動 jsr $F269 ; xを上方向に移動 jsr $F289 ; xをY方向に移動(重力加算有り。Y方向速度は符号付整数, 上方向が正) jsr $F2A7 ; xを下方向に移動させる(Y座標 - Y方向速度, ただしY方向速度は符号付整数でマイナスの値) jsr $F2B8 ; xを上方向に移動させる(Y座標 - Y方向速度, ただしY方向速度は符号付整数で0以上の値) jsr $F2D8 ; 重力加算 jsr $F2F6 ; xのY方向速度をFF.00にセット jsr $F324 ; 壁にめり込まないようにxをX方向に移動。めり込み補正されたらC=1 jsr $F3ED ; Y方向に(ブロックにめり込まないように)移動、上下のブロックにぶつかったらキャリー1? jsr $F400 ; xの向いている方向にX方向速度だけ移動(グラフィックの向きも対応して変わる) jsr $F413 ; xの向いている方向にY方向速度だけ移動 jsr $F434 ; Aレジスタの値をxのアニメーション番号($0558,x)にセット(アニメーションフレーム・タイマー初期化) jsr $F446 ; Aレジスタの値をyのアニメーション番号にセット(アニメーションフレーム・タイマー初期化) jsr $F490 ; Aレジスタにアニメーション番号を代入して呼び出し。x→yへ座標コピー・他の変数初期化 jsr $F452 ; Aレジスタにアニメーション番号,$10に相対座標番号をセットして呼び出し。xの座標 + 相対座標 をyの座標にセット jsr $F49C ; xの方向($0420,x)をロックマンの方を向くようにセット(#$01->右向き #$02->左向き) jsr $F4DC ; xの向いている方向に合わせてグラフィックの向きを合わせる jsr $F4F6 ; xの方向(左右), グラフィックを左右反転 jsr $F6AB ; 音楽を鳴らす($D9にトラック番号が格納される) jsr $F6BC ; 効果音を鳴らす jsr $F6BE ; ロックマンとxのY座標(low)を比較。Aレジスタに距離が返る。ロックマン ≧ x ならばC=1 jsr $F6D7 ; ロックマンとxのX座標を比較。Aレジスタに距離が返る。ロックマン ≧ x ならばC=1 jsr $F6E6 ; xから見たロックマンの方角を取得? 時計回りで 00 真上 01 北北東 02 北東, ... 0F 北北西 jsr $F6FD ; xから見たyの方角を取得? 時計回りで 00 真上 01 北北東 02 北東, ... 0F 北北西 (Yレジスタの値は破壊されるので注意) jsr $F70F ; xとロックマンとの接触判定。接触していればC=0 jsr $F95D ; xと武器との接触判定。接触していればC=0。$10に接触した武器オブジェクトのインデックスが入る jsr $FA34 ; オブジェクト領域取得(検索範囲は#$07-17)。Xレジスタにインデックスが入る。取得できなければキャリーが1 jsr $FB5C ; オブジェクト領域取得(検索範囲は#$07-17)。Yレジスタにインデックスが入る。取得できなければキャリーが1 jsr $FB6C ; オブジェクト領域取得(検索範囲は#$04-17)。Yレジスタにインデックスが入る。取得できなければキャリーが1 jsr $FB7C ; $00-01 / $02-03 を計算し、$04-05に結果が返る(リトルエンディアン) jsr $FC3A ; オブジェクトx消去ルーチン jsr $DC00 ; オブジェクトy消去ルーチン jsr $FCCF ; 次のVBlankまで待つ jsr $FF1C ; Aレジスタで指定した回数だけ次のVBlankまで待つ jsr $FF1E ; PRG BANKを切り替える jsr $FF37
◇スプライトデータバンク BANK 0A-0B, 0C-0D, 0E-0F, 36-37の4種類 参照時には8000-BFFFにマップされる。 BANK 0A-0Bは未使用領域が特に多く、新しいデータを定義しやすい ・スプライトパターン定義アドレス 定義アドレス0 B800〜B8FF (100) = スプライトパターン定義番号: スプライトパターン定義アドレス(low) BA00〜BAFF (100) = スプライトパターン定義番号: スプライトパターン定義アドレス(high) 定義アドレス1 B900〜B9FF (100) = スプライトパターン定義番号: スプライトパターン定義アドレス(low) BB00〜BBFF (100) = スプライトパターン定義番号: スプライトパターン定義アドレス(high) ◇スプライト配置データのアドレス BC00〜BCFF (100) = スプライト配置データ参照番号: スプライト配置データのアドレス(low) BD00〜BDFF (100) = スプライト配置データ参照番号: スプライト配置データのアドレス(high) ◇アニメーション定義へのアドレス BE00-BEFF (100) = アニメーション番号: アニメーション定義アドレス(low) BF00-BFFF (100) = アニメーション番号: アニメーション定義アドレス(high) ◇スプライトパターン定義 スプライト(8x8タイル)をどのように組み合わせてグラフィックを構成するかを決定する。 byte0 -> 使用するスプライト(8x8タイル)の総数(00で1個を表すため、実際の個数より1小さい値を入れる) byte1 -> スプライト配置データ参照番号(下記参照・左右両方向く可能性がある場合は左向きの配置データ番号) byte2 -> 1個目のパターンインデックス番号 byte3 -> 1個目のスプライトの属性(bit7 -> 上下反転, bit6 -> 左右反転, bit1-0 -> 使用パレット) byte4 -> 2個目のパターンインデックス番号 byte5 -> 2個目のスプライトの属性 … ◇スプライト配置データ スプライトをどのように配置してグラフィックを構成するかを決定する。 byte0 -> 1個目のスプライトの(相対)Y座標 byte1 -> 1個目のスプライトの(相対)X座標 byte2 -> 2個目のスプライトの(相対)Y座標 byte3 -> 2個目のスプライトの(相対)X座標 … 配置データは、左向き,右向きの順で連続した番号で参照できるようにしておかないと、左右両方を向くキャラの場合困ったことになる。 ・左向き配置データから右向き配置データの作り方 相対Y座標 -> そのまま 相対X座標 -> 左向きの値 xor $FF + 1 - $08 ◇アニメーション定義 byte0 -> bit7 0ならスプライトパターン定義アドレス0を参照、1なら定義アドレス1を参照する。 bit6-0 アニメーションに使うスプライトパターンの総数(00で1個を表すため、実際の個数より1小さい値を入れる) byte1 -> 次のスプライトパターンに切り替わるまでのフレーム数(00で毎フレーム切り替え) byte2- -> スプライトパターン定義番号(byte0で指定した個数分書く) 00を指定すると、そこでアニメーションを終了し、オブジェクトを消去する。 ブーンブロック等が勝手に消えるのは、ここで00が設定されているため。
参考資料 http://www.romhacking.net/docs/363/