TOP > プログラミング関係解説&調査 > データマップ

「ライブ・ア・ライブ」データマップ

当ページの内容は、ある程度のプログラミングの知識を必要とする。
まず、プログラミング関係解説&調査をひととおり読んでいただきたい。

この項目は、以下ウェブサイト様などを参考にさせていただきました。

ここでは、「ライブ・ア・ライブ」の内部データのどこに何があるのか、つまりデータマップ及び、ゲームプレイ中のメモリマップを紹介する。
上記ウェブサイト様から引用したデータも数多く、先達の皆様に深く感謝する次第である。

筆者のプログラミング知識の不足ゆえに、誤りがある可能性も高いことをご了承いただきたい。
未調査の部分も多く、今後追記するかもしれない。

RAM領域はページを分けている。データマップ > RAMを参照。
サウンド(BGM・効果音)関連はこちら

基礎知識

「ライブ・ア・ライブ」は、容量が「16メガビットロムカセット」のスーパーファミコンソフトである。
1バイトは8ビット(2進数8文字分)なので、16メガビット = 16000000ビット = 2メガバイト = 2000000バイト分のデータで構成されているということになる。

以下では他ページと同じく、16進数の頭には「$」をつけて「$12AB」などと表記し、2進数は頭に「%」をつけて「%0001 0101」のように表記する。2進数はわかりやすさ優先で4桁区切りで間にスペース(空白)を入れる。

このデータがスーパーファミコン本体のメモリ領域に読み込まれてゲームをプレイする。
メモリ領域のアドレスは16進数6桁で表し、上2桁を「バンク」、下4桁を「アドレス」と呼ぶ。
ここでは、

$00:0000

という形で、バンクとアドレスを「:」区切りで表記する。

スーパーファミコンのバンクは$00から$FFまで、その各バンク内に$0000から$FFFFまでアドレスが割り振られている。
1つのアドレスに入るのは、1バイト分のデータである(16進数2文字分、つまり$00$FFが入る。10進数なら0~255)。
ゲームデータは$00:0000から順に入るのではなく、入る場所が決まっている。
ライブ・ア・ライブだと、

  • バンク$00$1Fのアドレス$8000$FFFF
  • バンク$40$5Fのアドレス$0000$FFFF

という位置に、ゲームカセット内のデータ16メガビット分が丸ごと入っている(コピーされている)。

ゲームカセット内のデータはゲームプレイの元となる基本のデータなので、ゲームプレイの最中、読み取りはしても上書きすることはない。
こういった領域をROM(Read-Only Memory)領域と呼ぶ。
一方で、戦闘のダメージ量計算などに使う、読み取りも書き込みもできる領域がRAM(Random-Access Memory)である。
(「ライブ・ア・ライブ」はバッテリーバックアップ機能つきで、セーブデータをカセット内に記録する時は読み書きをするが、SRAMという別のメモリがカセットの中に入っていて、そちらで読み書きをする。SRAMについては後で説明している)

また、まったく同じデータが入っている(ミラーリング)箇所も多い。
例えばバンク$00$7Dは、バンク$80$FDでミラーリングなので、大雑把に言えば、スーパーファミコンのメモリ領域を半分で区切り、前半部を後半部でミラーリングしているようなものである。
なぜ同じデータをミラーリングするのかだが、ゲームプレイの最中、ゲーム内部では各種データの読み込みや書き込みをしつつ様々な計算を行うことになる。
読み込み・書き込みをする時、次に探したいデータの位置が近くにある方が素早くアクセスできる。
ミラーリングにより同じデータを散らし、近い位置のアドレスからより速く読み書きできるようにしている、らしい。
そういう理由から、ゲームプレイ中は頻繁に使われる一部データが更にミラーリングされていることもある。

メモリ割り当ての規格(HiROMとLoROM)

SNES技術資料 - メモリマッピング

上でメモリ領域について少し触れたが、スーパーファミコンのゲームソフトにおいて、メモリ領域の規格はHiROMとLoROMの2種類あり、データの割り当て方が異なる。
「ライブ・ア・ライブ」はHiROMという規格を採用している。
上で説明した通り、ひとつのバンクに$0000$FFFF、65,535バイトのデータを入れることができる規格である。
どこのバンクに何が入るかも規格で決まっており、メモリマップやメモリマッピングという名称で、どこに何が入るかの表が公開されている。
ここでは詳しい話には触れないでおく。興味があれば上サイト様などで調べていただきたい。

ゲームデータ部分(ROM領域)

「ライブ・ア・ライブ」は、スーパーファミコンのメモリの、

  • バンク$00$1F(ミラーリング:$80$1F)のアドレス$8000$FFFF
  • バンク$40$5F(ミラーリング:$C0$DF)のアドレス$0000$FFFF

に、ゲームデータが入っていると述べた通りだが、筆者にわかる範囲でどこに何があるか記す。
画像・音関係については未調査なので、非常に大雑把である。

詳しくはわからないが同じ文字でひたすら埋まっている箇所もあり、おそらくは未使用のアドレス部分なのであろう。

バンクアドレス内容
$00$80-プログラム他
$00$80$00:FFC0$00:FFDFカートリッジヘッダ
$02$82$02:9380$02:A695バンク$42のミラーリング(テキストデータ)
$03$83- 関連のデータ(音源?)
$10$90-テキストデータ(シナリオ関連)
$11$91-テキストデータ(シナリオ関連)
$16$96-テキストデータ(敵の名前・技名・技説明 など)
$40$C0-(ほぼ)プログラム(主にマップ関係, 後述)
$40$C0$C0:BC94$C0:BD1F正接(sin)の三角関数表(ラジアンで0~2π、5度区切りで360度分)
$41$C1$C1:0000$C1:FDA5(ほぼ)プログラム(戦闘関係, 後述)
$41$C1$C1:02B2$C1:02B9BG3ウィンドウ用赤系カラーパレット(4色)
$41$C1$C1:A5E6$C1:A605$C1/A6D0用技モーションサブルーチン呼び出しアドレス値(2バイト)($C1/A72F$C1/B01B呼び出し)
$41$C1$C1:A606$C1:A665$C1/B00C用技モーションサブルーチン呼び出しアドレス値(2バイト)($C1/A8E2$C1/B421呼び出し)
$41$C1$C1:FDA6$C1:FFFF戦闘コマンドと戦闘終了時メッセージのテキスト(デバッグテキスト含む)
$42$C2$C2:0000$C2:6B4Cプログラム(主にメニュー画面関係, 後述)
$42$C2$C2:712A$C2:7133メニュー画面コマンドの半透明位置を指定するHDMAテーブルの値
$42$C2$C2:73C8$C2:7407GDMA転送用 I/Oポート定数
$42$C2$C2:7438$C2:7453メニュー画面のセリフ吹き出し形状のBGマップデータ
$42$C2$C2:9380$C2:A695メニュー画面、セーブ・ロード画面、シナリオ選択画面、名前入力画面、現代編関係のテキストデータ
$42$C2$C2:D2A0$C2:D49Fメニュー画面のセリフ吹き出し部分画像
$42$C2$C2:D4A0$C2:D5BFメニュー画面のコマンド枠画像
$42$C2$C2:D5C0$C2:D8BF装備画面における頭・右・左・体・足・アクセサリ欄の16×16サイズキャラ
$42$C2$C2:D8C0$C2:DB3Fメニュー画面の四角枠画像
$42$C2$C2:DB40$C2:DB9Fメニュー画面の斜め向き矢印、「←L」アイコン、「R→」アイコン
$42$C2-サウンドデータ サイズ&転送先アドレス
$43$C3$C3:0000$C3:06F2プログラム(サウンド関連, 後述)
$43$C3$C3:0700$C3:FFFFサウンドデータ サイズ&転送先アドレス
$44~$46$C4~$C6-サウンドデータ サイズ&転送先アドレス
$4A$CA$CA:F300$CA:FEFFメニュー画面の背景画像($200バイト毎に8シナリオ分)
$4A$CA$CA:FF00$CA:FFFF画像マスキングでアイリスイン・アイリスアウトする時の座標計算係数
$47~$4D$C7~$CD-サウンドデータ サイズ&転送先アドレス
$4E$CE-プログラム(メニュー画面・マップ・スプライトのロードなどシステム周りの色々)
$4E$CE$CE:001C$CE:160FキャプテンスクウェアBGMode7用タイルデータ
$4F~$50$CF~$D0-画像(マップ用スプライトやマップ)のデータ
$4F~$50$CF~$D0$CF:F4A0$CF:F51F塗りつぶし用の四角形
$4F~$50$CF~$D0$CF:F520$CF:F91F各シナリオカーソル画像
$4F~$50$CF~$D0$CF:E000$CF:FEAFフィールド用カラーパレット
$51$D1-テキストデータ(シナリオ関連)
$54$D4$D4:9200$D4:F1FF文字画像データ(文字データ参照)
$54$D4$D4:F200$D4:FFFF8×8ピクセルサイズの文字画像・吹き出し・ウィンドウ形状などのタイルデータ
$55$D5$D5:00C0$D5:04CA味方キャラデータ(詳細
$55$D5$D5:04CB$D5:24CA敵キャラデータ(詳細
$55$D5$D5:24CB$D5:3DB1味方技データ(詳細
$55$D5$D5:3DB2$D5:56CA敵技データ(詳細
$55$D5$D5:570B$D5:627C戦闘中の味方キャラのスプライトのタイルデータが格納されたアドレス計算値
$55$D5$D5:644B$D5:64CA行動異常データ(詳細
$55$D5$D5:64CB$D5:71C3敵移動データ
$55$D5$D5:71C4$D5:81C3アイテムデータ(詳細
$55$D5$D5:8EA2$D5:F97A技のモーション(技データ00~05)
$55$D5$D5:F97B$D5:F98A敵サイズ(Bit3~5が敵の横幅(マス数)、Bit0~2が敵の縦幅(マス数))
$55$D5$D5:FC51$D5:FC60各シナリオのアイテム欄の開始アドレス&枠数
$56$D6$D6:0080$D6:207Fカラーパレット(敵キャラ、32×32サイズ時)
$56$D6$D6:2080$D6:235Fカラーパレット(味方キャラ、32×32サイズ時)
$56$D6$D6:2470$D6:247Fカラーパレット(戦闘時BG3用ウィンドウ&文字色)
$56$D6$D6:4080$D6:40BF最終編・敵パーティ編成テーブル
$56$D6$D6:4170$D6:4183近未来編・ワールドマップ敵パーティ編成テーブル
$56$D6$D6:4280$D6:512E敵パーティデータ(詳細
$56$D6$D6:512F$D6:514F各シナリオの味方パーティIDリスト(詳細
$56$D6$D6:53CB$D6:541A原始編・敵パーティ編成テーブル
$56$D6$D6:541B$D6:549A中世編・敵パーティ編成テーブル
$56$D6$D6:AC00$D6:CFFFテキストデータ(システム関連)
$56$D6$D6:E000$D6:EF7Fテキストデータ(技の説明テキスト)
$56$D6$D6:F900$D6:FAFFHPやダメージ量の数字と、「ミス!」の文字
$56$D6$D6:FC00$D6:FFFF技範囲内の枠や、キャラ範囲枠、✕マークなど
$57~$5A$D7~$DA$D7:1620$DA:DA2F戦闘 味方キャラのスプライトのタイルデータ
$5B~$5E$DB~$DE$DB:F979$DE:FFFF戦闘 敵のタイルデータ
$5F$DF$DF:0000$DF:05FF戦闘 ダメージフィールドのタイルデータ

サウンドデータのサイズ&転送先アドレスについて:
3バイト区切りで、サウンドデータのサイズと転送先アドレス2バイトを記述している。サウンド用CPU(SPUとかSPC700、またはAPUと呼ばれている)とやりとりをするためのアドレス$00:2141$00:2143転送用。
バンク$C2$CCの各所に散らばっている。

プログラム関係はバンク$C0$C3、各種データはバンク$D5$D6からロードすることが多いようである。つまりミラーリングから読み込みしている。

以下は各種データアドレスページに解説を載せているので参照のこと。

サブルーチン

筆者が調べた範囲のみ。

フィールド
アドレス内容
$C0:0016$C0:0067リセット時初期処理 $00:0000$00:1CFEに初期値設定
$C0:00FC$C0:01CBリセット時初期処理 画像関係(PPU)$00:2100$00:2133及び$00:4200$00:420D$00:4016$00:4200の初期化
$C0:0308$C0:032Cセーブデータからのセーブ用データ解凍($00:13xx用)
$C0:0CAC$C0:0DC2マップ上移動速度[$00:01AE]から[$00:0A38][$00:0A3F]計算(BG1・BG2の水平/垂直スクロール量用)
$C0:0EDC$C0:0F7Cタイトル画面の初期設定
$C0:0E1A$C0:0ED7マップ切り替え時などにウィンドウ関係のI/Oレジスタ$00:21??に初期値書き込み
$C0:0EDF$C0:0F7Cリセット時初期処理 BGマップ
$C0:0F80$C0:0FB0BGモードをMode7(背景の回転・拡大・縮小モード)に変更
$C0:1051$C0:1069[$00:4200]$81を書き込んでNMI割り込みと自動ジョイパッド読み取り機能をONにする
$C0:106A$C0:1074[$00:4200]$01を書き込んで自動ジョイパッド読み取り機能をONにする
$C0:1183$C0:12E6[$00:0031][$00:0A63]$80を書き込み、[$00:1D00]$18[$00:1D01][$00:0030][$00:1D02]$80を書き込んでサウンド$C3/0004$C3/017F処理
$C0:1A69$C0:1ADBマップタイマーのカウントダウン計算
$C0:24D3$C0:2546功夫編ラストバトル前に弟子のデータをシナリオ別キャラデータにコピー
$C0:263E$C0:266Bカウントアップ処理
$C0:302B$C0:304D固定色の輝度[$00:0A04][$00:0A07]を設定
$C0:328A$C0:32AFマップタイマー初期値読み込み
$C0:378F$C0:37BEマップでの乱数イベント関連(戦闘中のテレポート飛び先判定も含む)
$C0:37D8$C0:3806持ち物一覧を開いて何かのアイテムを選ぶことで進行するイベント
$C0:47E8$C0:482Cアイテム取得時に持ち物欄の空欄に該当アイテムを入れ個数を+1する、または既に所持しているなら該当アイテムの個数を+1する処理
$C0:4839$C0:4853アイテム使用時に持ち物欄から指定アイテム個数を-1する処理
$C0:4A4B$C0:4B6Dバンク$7Fのアドレス$2800$3800コピー、$7F:2000~2FFF$00で初期化
$C0:4D17$C0:4D9Cバンク$DEからバンク$7Eにタイル(画像)のデータコピー
$C0:4D9F$C0:4EE1スプライトのデータをVRAMへGDMA転送
$C0:4F80$C0:5036マップ切り替え時[$00:0A38][$00:0A3F]に初期値書き込み(BG1・BG2の水平/垂直スクロール量用)
$C0:5043$C0:5333BG1, BG2の1画面分BGマップデータを$7E:C000$7E:C6FF$7E:D000$7E:D6FFにコピー
$C0:5337$C0:53BFBG1, BG2の1画面分BGマップデータ(各$700バイト)をVRAM転送
$C0:53C0$C0:541CBG1・BG2の水平/垂直スクロール量更新
$C0:6F47$C0:6F4E16bitでスタックの値をダイレクトページレジスタに転送+8bitでスタックの値をダイレクトページレジスタに転送
$C0:6FC0$C0:70237E:F800~を7E:EC00~にMVN転送
$C0:70B6$C0:7233MVN転送 $CF:xxxx$7E:C100$7E:C3BFの後、
$7E:C000$7E:D7FF$1800バイト)を、VRAMアドレス$6000word ($C000byte)を開始位置にしてGDMA転送
$C0:72A5$C0:7373$7E:C000$7E:D7FF$1800バイト)を、VRAMアドレス$7400word ($E800byte)を開始位置にしてGDMA転送
$C0:7376$C0:73BE$7E:8000$7E:89FFを、VRAMアドレス$C500$E7FF$100バイトずつGDMA転送するループ処理
$C0:73C1$C0:73C8[$00:0022]$04X$6C00をロードしてから、$C0/756Aへジャンプ
$C0:73DC$C0:73E3[$00:0022]$04X$7000をロードしてから、$C0/756Aへジャンプ
$C0:7479$C0:74B3MVN転送 $7E:xxxx$7E:yyyy
$C0:74B6$C0:74E2MVN転送 $7E:xxxx$7E:yyyy+$01E0
$C0:74E5$C0:751FMVN転送 $7E:xxxx$7E:yyyy+$01E0
$C0:7526$C0:752CAY+$0020して、$C0:7539へジャンプ
$C0:752F$C0:7538AY-$0040して、$C0:7539へジャンプしてからサブルーチン戻り
$C0:7539$C0:7569$7E:xxxxをビット反転し、$7E:yyyyにコピー
$C0:756A$C0:75E1$7E:8000$7E:87FFを、VRAMアドレス$D800$DFFF$100バイトずつ転送するループ処理
$C0:9A09$C0:9AC9カラーパレット呼び出し
$C0:9ACA$C0:9AE5カラーパレットGDMA転送設定
$C0:9AF7$C0:9B64テキスト・セリフ関係グラフィック(BG3)の初期化及び、セリフウィンドウなど共通データのVRAM転送
$C0:A2CB$C0:A2EEBG3のテキスト部分のタイル&BGマップデータをVRAMに転送
$C0:A64B$C0:A86BVRAMに転送するBG3タイルデータ用テキストを$7E:C800$7E:D0FFにコピー
$C0:A91A$C0:A940BG3タイルデータ用テキスト$7E:C800$7E:D0FFを、VRAMの$7000$7900(BG3タイルデータの文字部分)に転送
$C0:B838$C0:B8E5マップ用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック)
$C0:B900$C0:B924マップ乱数計算
$C0:B925$C0:B931VBlankフラグ判定ループ([$00:4212] 上1ビット判定)
$C0:B932$C0:B93Eエンディング終了後用のVBlankフラグ判定ループ([$00:4212] 上1ビット判定)
$C0:B97C$C0:B98CAレジスタに$01をロードしAをスタックにプッシュしてから$C0/B925(VBlankフラグ判定ループ)にジャンプし画面の輝度[$00:2100]変更ループ
$C0:BA12$C0:BA7516bit×16bit乗算サブルーチン
$C0:BA76$C0:BAA6符号付8bit×8bit乗算サブルーチン
$C0:BB15$C0:BC68OAM用データを計算、$00:0700$00:0920に書き込み
$C0:BC6D$C0:BC93OAMへデータ($00:0700$00:0920)を転送
$C0:BE00$C0:BF14モザイク処理 モザイクサイズを徐々に小さくする、かつ、輝度を上げる
$C0:BFE4$C0:C002戦闘開始時 三角形ウィンドウマスク処理のHDMA転送7チャネル転送
$C0:C02A$C0:C098モザイク処理 モザイクサイズを徐々に大きくする、かつ、輝度を下げる
$C0:D001$C0:D0CA固定色の輝度計算・更新
$C0:D190$C0:D1E4戦闘開始時 三角形ウィンドウマスク処理のI/Oアドレス設定
$C0:D33C$C0:D36D戦闘開始時 三角形ウィンドウマスク処理のHDMAテーブル・間接テーブルモードのアドレス書き込み
$C0:D404$C0:D485マスク+スクロール時処理
$C0:D4F4$C0:D54Eマスク+スクロール時処理
$C0:D54F$C0:D5ADマスク+スクロール時処理
$C0:D52F$C0:D54E$00:0250$00:025B$00:025C$00:0267にコピー
$C0:D65E$C0:D6B2ラスタースクロール用[$00:210D](BG1水平スクロール)と[$00:210F]BG2水平スクロール量計算値$7F:5400$7F:548Fから$7F:4000$7F:41BEにコピー
$C0:D6B3$C0:D6DF$C0:BC96~の三角関数表を$7F:5400~にコピー
$C0:D6E2$C0:D6DF三角関数表の乗算処理から値を更新
$C0:D721$C0:D829ラスタースクロール用HDMAチャネル3, 4, 5設定
$C0:D9DC$C0:DAC9ラスタースクロール用HDMA転送の前準備+HDMA転送開始処理
$C0:DCD1$C0:DFA7デモ画面用BGMode7
$C0:E017$C0:E02Fタイトル画面の初期設定(メインスクリーン指定、画面サイズ、多重スクロール位置計算値)
$C0:E083$C0:E08Dタイトル画面のHDMA転送開始
$C0:E1A2$C0:E1CBタイトル画面のBG1垂直スクロール量[$00:210E]とBG2垂直スクロール量[$00:2110]の初期値書き込み
$C0:E1CC$C0:E1FCタイトル画面の多重スクロール用HDMA転送チャネル6とチャネル7設定
$C0:E1FD$C0:E20EHDMA転送で多重スクロールする時の変数[$00:0250][$00:0255]初期値設定
$C0:E20F$C0:E230HDMA転送による多段スクロールのスクロール量計算・更新
$C0:E231$C0:E387HDMA転送用HDMAテーブル計算(多段スクロールのスクロール量計算)
$C0:F338$C0:F340キャプテンスクウェア用BGMode7のメインスクリーン指定
$C0:F347$C0:F353キャプテンスクウェア用BGMode7 $00:0100$00:0102$00を書き込んで$C0/BB15$C0/BC68にジャンプ、OAM転送
$C0:F356$C0:F373キャプテンスクウェア用BGMode7 拡大縮小回転中心座標決定その1
$C0:F376$C0:F37Aキャプテンスクウェア用BGMode7 [$00:0030]$DDを書き込んで$C0/1183へジャンプ(サウンド処理へ)
$C0:F37D$C0:F38Fキャプテンスクウェア用BGMode7 [$00:02A1][$00:02A6]に初期値を書き込み
$C0:F392$C0:F39Aキャプテンスクウェア用BGMode7の表示開始 [$00:212C](メインスクリーン指定)に$11を書き込みBG1とOBJを表示させる
$C0:F39D$C0:F3A7キャプテンスクウェア用BGMode7用の座標計算値[$00:210D]書き込み
$C0:F3AA$C0:F3B7キャプテンスクウェア用BGMode7 [$00:02A5][$00:02A6][$00:0030][$00:0033]初期化
$C0:F3BA$C0:F3CDキャプテンスクウェア用BGMode7 [$00:0030][$00:0033]から[$00:02A0][$00:02A3]更新
$C0:F3D0$C0:F430キャプテンスクウェア用BGMode7 [$00:02An]更新ループ処理
$C0:F439$C0:F467キャプテンスクウェア用BGMode7 拡大縮小回転中心座標決定その2
$C0:F46A$C0:F4ACキャプテンスクウェア用BGMode7 [$00:210D][$00:211E]更新、[$00:02A0]~から[$00:0030]~更新
$C0:F4AF$C0:F4FFキャプテンスクウェア用BGMode7 [$00:0030]~から[$00:02A0]~更新ループ処理
$C0:F502$C0:F513キャプテンスクウェア用BGMode7 [$00:02A4]$16[$00:02A0][$00:02A6]に2バイトずつ$0001セット
$C0:F51C$C0:F540キャプテンスクウェア用BGMode7 拡大縮小回転中心座標決定その3
$C0:F543$C0:F55Eキャプテンスクウェア用BGMode7 [$00:210D][$00:211E]から[$00:2100](スクリーン初期化)更新
$C0:F561$C0:F5DAキャプテンスクウェア用BGMode7 [$00:210D][$00:211E]最終値計算ループ処理
$C0:F5DD$C0:F5E2キャプテンスクウェア用BGMode7 [$00:2100]$8Fを書き込みBGMode7処理終了
$C0:F60D$C0:F64CVRAM$0000$4000の初期化
$C0:F64F$C0:F757VRAMタイルデータとOBJ(スプライト)タイルデータ転送
$C0:F758$C0:F77FOBJ(スプライト)タイルデータを$20バイトずつDMA転送
$C0:F780$C0:F7B9CGRAMへDMA転送($7E:8020からCGRAMアドレス$0000$20バイト、$0100$20バイト)
$C0:F884$C0:F8CCBGMode7用 BG1のBGマップ更新
$C0:FA4F$C0:FAB9BGMode7用の三角関数表呼び出し
$C0:FA83$C0:FAA0BGMode7用の三角関数表呼び出し
$C0:FB5C$C0:FBA1BGMode7用の座標計算値の計算(sinθまたはcosθ,拡大縮小倍率のα及びβの計算)
$C0:FABA$C0:FAD5BGMode7用の座標計算I/Oポート[$00:211B][$00:211E]書き込み
$C0:FAD6$C0:FB18BGMode7 VRAMにタイルデータを8バイトずつ転送
戦闘関連
アドレス内容
$C1:0000$C1:0079戦闘開始/終了時処理 ※戦闘開始は$C1/0049で分岐処理し$C1/0060
$C1:004B$C1:005F$C1/0049分岐[$00:2100]$8F(FBlank強制割り込みで画面を黒一色にする)、[$00:4200]$01を書き込んで戦闘終了処理
$C1:00A7$C1:00AA戦闘開始時 味方行動順決定
$C1:0136$C1:0140[$00:2100]のディスプレイ制御レジスタ書き込みと[$00:4200]$81を書き込んでNMI割り込みと自動ジョイパッド読み取り機能をONにする
$C1:0327$C1:0346[$7E:FEFB]判定後、[$7E:FEF0](戦闘中タイマー)に$7Fセット
$C1:03F1$C1:03F9敵データ15・タイプと$04(OBJECT)で論理積を取る処理
$C1:047C$C1:04BC[$7E:A480]$0F, [$7E:A481][$7E:A484][$7E:A485][$7E:A487][$7E:A488][$7E:A4A3][$7E:A4A6]$00, [$7E:A482][$7E:A483]$17, [$7E:A486]$E0書き込み
$C1:0BF7$C1:0C10SF編主人公 キューブにデータ切り替え開始
$C1:0C14$C1:0C29原始編・ざき3戦目 判定サブルーチン
$C1:0C2D$C1:0C4A原始編・ざき3戦目 ざきへの攻撃回数$7E:9100+1する処理
$C1:0CF2$C1:0D5Aラーニング用 $7E:9200~に使用技を書き込み+使用技判定処理
$C1:0D0D$C1:0D14功夫編修行 ラーニング用前処理
$C1:0D5B$C1:0DBB功夫編修行 戦闘終了時 ラーニング処理
$C1:1083$C1:10B2CGRAM転送 CGRAMアドレス$0010$D6:2470$D6:2477, CGRAMアドレス$0018$D6:2478$D6:247F(技名用)
$C1:10B3$C1:10E8ダメージフィールド発生処理
$C1:10F0$C1:1136戦闘フィールドマス$00:04C8$00:04FFの値からダメージフィールドの状態確認
$C1:11D1$C1:11E3[$00:0070](タイトルデモ判定)と[$00:0040]判定をして技効果音を鳴らすか判定
$C1:1255$C1:12BE技を出す時の効果音IDと設定を[$00:1D00][$00:1D02]にセット&効果音を鳴らす回数[$7E:FEFC]の初期化・インクリメント
$C1:12BF$C1:12C7[$00:1D00]$F2を書き込み効果音処理$C1/11D1
$C1:14C7$C1:14DC「アイテムを使う」コマンドが選択可能か判定
$C1:14DD$C1:14EB[$7E:FEFA](ハルマゲドンフラグ)と[$00:0043]から、逃げるが選択可能か判定
$C1:1528$C1:156C固定値を$20バイト毎ループ処理でコピー(一定範囲のアドレスの初期化)
$C1:156D$C1:1630ラーニング用 $7E:9200~に書き込まれた使用技を習得技として記録する処理
$C1:166E$C1:169D戦闘終了時 ドロップアイテム判定
$C1:16AD$C1:171C敵キャラ操作時 座標・向きを敵データから味方データにコピー
$C1:16CA$C1:16E2敵キャラのマス位置のX座標$00:1BnA*$20+$10してピクセル座標$00:1BnCに書き込み、Y座標$00:1BnB*$18+$27してピクセル座標$00:1BnEに書き込み
$C1:17E6$C1:17E2行動異常発生時 レベル修正
$C1:1ADD$C1:1B21功夫編ラストバトル 弟子に「旋牙連山拳」を習得
$C1:1BBE$C1:1BE1功夫編ラストバトル 弟子が「旋牙連山拳」を使用後に習得技から削除
$C1:1C02$C1:1C51順序ポイント計算(味方の攻撃以外の行動(1マス移動、Yボタン足踏み、パス、向き変え)、または敵味方全員行動できない状態)
$C1:1C77$C1:1C8D順序ポイント計算(敵が攻撃)
$C1:1C91$C1:1CA8順序ポイント計算(行動異常発生時)
$C1:1CAC$C1:1CF6順序ポイント計算(敵がダメージを受ける)
$C1:1CF7$C1:1D1D行動異常のデータ呼び出し
$C1:1DD0$C1:1DF1味方キャラの毒状態判定及び、毒状態の時ダメージ量計算
$C1:1DF8$C1:1E19味方キャラのダメージ処理
$C1:1E26$C1:1E42味方キャラの吸収処理
$C1:1E4C$C1:1E6F敵キャラの毒状態判定及び、毒状態の時ダメージ量計算
$C1:1E71$C1:1E9A敵キャラのダメージ処理
$C1:1EA3$C1:1ECA敵キャラの吸収処理
$C1:1ECE$C1:1F05ダメージフィールド消去判定
$C1:1F06$C1:1F47$7E:FEFD+1&ダメージフィールド発動判定
$C1:1F5C$C1:1FABダメージフィールド消去処理
$C1:1FB2$C1:1FE9ダメージフィールドのダメージ判定
$C1:1FEA$C1:201F味方キャラのフィールドダメージ処理
$C1:2029$C1:2070敵キャラのフィールドダメージ計算
$C1:20CD$C1:20E8ステータス復元用共通処理
$C1:2111$C1:2132敵キャラ レベル復元
$C1:2133$C1:2143敵キャラ 力・速・体・知の復元
$C1:21C1$C1:21E0味方キャラ レベル復元
$C1:21E1$C1:21ED味方キャラ 力・速・体・知の復元
$C1:2239$C1:227B中世編ラストバトル ストレイボウのステータス判定
$C1:230E$C1:234F功夫編修行 修行場所によるステータスアップ処理
$C1:2363$C1:243D戦闘終了時 取得経験値計算
$C1:2451$C1:2476レベルアップ時のHPアップ処理
$C1:248B$C1:24C5レベルアップ時の力・速・体・知アップ処理
$C1:24C8$C1:253Eレベルアップ時の技習得処理
$C1:25A8$C1:25BC「逃げる」選択時 幕末編処理分岐(NAMEの敵用)
$C1:25D7$C1:2633戦闘開始時 幕末編のNAMEタイプの敵ステータス処理
$C1:27D7$C1:27DFNMI割り込みの$C1:612F$C1:613Cをループさせる処理
$C1:2800$C1:281A移動または向き変え時の行動ポイント計算用 $40 - 速/4(※向き変えはこの1/2で行動ポイント増減)
$C1:281E$C1:2833味方の行動時、行動ポイント[$00:03AF][$00:03AE]増加処理
$C1:283D$C1:2856敵の移動または向き変え時、行動ポイント[$00:03AF][$00:03AE]減少処理
$C1:2E9C$C1:2EF9味方技を出したキャラの向き更新 ([$7E:A01D] & $80) | (([$7E:A01D]<<1) & $03)
$C1:2F1C$C1:2F50味方技を出したキャラの位置のX軸(ピクセル単位)計算
$C1:2F51$C1:2F85味方技を出したキャラの位置のY軸(ピクセル単位)計算
$C1:2EFC$C1:2F0A味方技を出したキャラの位置の座標(ピクセル単位)書き込み
$C1:320E$C1:3279技を出すキャラのY座標(ピクセル単位中心位置)と向きを[$7E:A020][$7E:A462]にコピー
$C1:329F$C1:32DD技データ00~技データ05(技モーション呼び出しアドレス)を$7E:A028$7E:A468$40バイト間隔コピー
$C1:34EA$C1:34F5HBlank判定用 Hカウンタ(画面描画水平位置)が$E0以上かまたは$50未満か判定
$C1:34F6$C1:3504HBlank判定用 Hカウンタの値を取得
$C1:3546$C1:35C3戦闘開始時 行動異常
$C1:35C7$C1:35E9戦闘開始時 状態異常(実際のゲームでは未使用)
$C1:380E$C1:38E1範囲攻撃における範囲の計算
$C1:3924$C1:3970敵の縦・横幅, 技データ06, 技データ07, 座標チェック
$C1:3973$C1:3A31敵の向きとサイズ判定
$C1:3B32$C1:3BB0技が周囲攻撃でない時、回復技か判定
$C1:3B67$C1:3C48技を出すキャラの向き判定
$C1:3BB1$C1:3C41向き判定用分岐処理
$C1:3C4B$C1:3CFE技が出るマスに対応したマス目計算値$00:0488$00:04BE$0F書き込み
$C1:3D2B$C1:3D38フィールド用計算アドレス$00:0488(または$00:0480)~$00:04BF$00をセット
$C1:3D5C$C1:3DAF技IDから、技データ開始アドレスを算出~習得技のステータス移動ループ処理
$C1:3E18$C1:3E4B戦闘開始時 幕末編のNAMEタイプの敵 名前処理
$C1:3E61$C1:3EC7表示する文字列を取得し$7E:FF00$7E:FF60にコピー
$C1:3EC8$C1:3F7D$7E:FF00$7E:FF60ににコピーした文字列から文字の画像データをロード, 文字数とVRAMでの位置判定
$C1:41F2$C1:4391敵の移動処理
$C1:4535$C1:4549マス目のX座標*$100*$20して、マス目のX座標からピクセル単位の座標計算
$C1:454A$C1:455Eマス目のY座標*$100*$18して、マス目のX座標からピクセル単位の座標計算
$C1:45D5$C1:4582$0018,x(キャラ位置のマス目のX座標)*$100*$20 + $10(ピクセル単位の座標のマス中心部)をピクセル単位X座標$0010,xに、$0019,x(キャラ位置のマス目のY座標)*$100*$18 + $1F(ピクセル単位の座標のマス中心部)をピクセル単位Y座標$0012,xにセット
$C1:45EE$C1:45F6X,Yをスタックに格納して$C1/45D5$C1/4582実行
$C1:46C8$C1:46C9乗算・除算時の時間経過用
$C1:4D7E$C1:4D89シナリオIDまたは最終編主人公から、カーソル画像のアドレスを算出して、スプライトをVRAMに転送
$C1:4D8A$C1:4DD1戦闘時の数字、記号、技範囲枠など固定スプライトをVRAMに転送
$C1:4EB0$C1:4F01符号付16bit x 8bit「$0080 * 」の部分
$C1:4FDC$C1:5000戦闘コマンド表示時 ハルマゲドン判定(逃げるコマンドが「ハルマゲドン」)
$C1:5002$C1:5007戦闘コマンド表示時 キャプテンスクウェア判定(逃げるコマンドが「やめる」)
$C1:5009$C1:501F戦闘コマンド表示時 テレポート判定(逃げるコマンドが「テレポート」)
$C1:5022$C1:5038戦闘コマンド表示時 逃げるコマンドがどれになるか決定
$C1:5040$C1:5075キャラIDから、キャラIDのキャラがいるか及びキャラ状態の判定
$C1:5076$C1:5139テキストデータから文字ビットマップ呼び出し
$C1:5095$C1:50EABG3のテキスト 文字部分を$7E:B000~にコピー
$C1:5143$C1:5146BG3のBGマップデータ転送($C1:8D42$C1:8D60)を実行してサブルーチン戻り
$C1:51FB$C1:5245敵位置マス判定処理
$C1:5263$C1:52C3敵状態判定
$C1:52C4$C1:52F2味方キャラ全体の位置のY軸(味方データ$00:1C00+$12,ピクセル単位)下位バイトに+$20(右1マス移動計算値)
$C1:5AC2$C1:5B64味方キャラのOAM下位テーブル用データ獲得
$C1:5EF5$C1:5F1C味方キャラのOAM上位テーブル用データ獲得
$C1:5F1D$C1:5F85味方キャラ以外のOAMデータ獲得
$C1:5F89$C1:5FDF味方移動判定(味方データ$$00:1C00+$1E, $1Fチェック)
$C1:5FE0$C1:60C9キャラのスプライトデータをWRAM$00:D000$00:D400にGDMA(チャネル2)転送
$C1:612F$C1:6144HDMA転送&NMIによる割り込み待ち用ループ
$C1:6145$C1:614DVBlankフラグ判定ループ([$00:4212] 上1ビット判定)~NMI割り込み
$C1:6150$C1:61A4戦闘用乱数計算
$C1:62EF$C1:6325敵種類nのカラーパレットをCGRAMへGDMA転送(ピュアオディオは処理スキップ)
$C1:62BF$C1:62EE味方キャラIDからカラーパレットデータ開始位置を計算しCGRAMへGDMA転送
$C1:6326$C1:6337敵番号nのX・Y座標(マス目)からロードする敵キャラタイルアドレス計算
$C1:6338$C1:63A7敵番号nの縦・横タイル幅からVRAMデータマップ書き込み位置計算
$C1:63C1$C1:63EAシナリオIDと最終編主人公判定をして、最終編オルステッド主人公時以外、敵種類nの存在確認
$C1:641B$C1:6435VRAMアドレス$6000$9FFF初期化
$C1:64A6$C1:64FB敵番号nのBG2のマップデータを$7E:F000$7E:F7FE内に書き込み
$C1:65E9$C1:660A敵IDから、敵キャラデータ02と敵キャラデータ03のアドレス算出&値のロード
$C1:6612$C1:6640敵キャラデータ02から、敵の横幅と縦幅計算用アドレス呼び出し+敵タイルデータロードサブルーチン呼び出し
$C1:6641$C1:665B[$00:039C]から、敵の横幅と縦幅を算出
$C1:6665$C1:6687敵の横幅タイル数と敵の縦幅タイル数から、敵タイルデータのVRAM位置算出
$C1:668A$C1:66B9敵タイルデータ縦1×横4タイル分をGDMA転送(ピュアオディオは処理スキップ)
$C1:66BC$C1:66D0敵の横幅タイル数と敵の縦幅タイル数から、VRAMアドレス算出分岐
$C1:66D3$C1:6705敵の横幅タイル数から、敵タイルデータのVRAM位置算出~改行処理
$C1:670C$C1:6725[$00:1An2]に敵の横幅タイル数、[$00:1An3]に敵の縦幅タイル数、[$00:1An4]に敵の横幅マス数、[$00:1An5]に敵の縦幅マス数を書き込み+Y$3000をロード
$C1:675C$C1:67D8BG1のBGマップデータ$7E:8000$7E:8FFFをVRAMアドレス$C000$C7FFにGDMA転送
$C1:67D9$C1:6919BG1のBGマップデータを$7E:8000$7E:8FFFにコピー
$C1:6948$C1:699DBG1背景用タイル及び、ダメージフィールド4種用タイルのVRAM転送処理
$C1:6B43$C1:6B6F敵タイルデータ呼び出しのため、AXYに値セットして、$C1:6B70$C1:6CABでタイルデータをロード
$C1:6B70$C1:6CAB敵タイルデータを[$7E:2000]~にロード
$C1:6DCC$C1:6E12最終編ラストの7連戦後の画面上のドットがランダムに消えていく演出用計算
$C1:6F7C$C1:6FBA最終編オルステッドルート おーでぃーおー戦でざき入れ替え判定
$C1:7046$C1:70B9テレポートコマンド実行時 画像処理(モザイク処理など)
$C1:7202$C1:7268技が周囲攻撃かどうか判定($C1:7236まで敵判定、それ以降は味方判定)
$C1:77CE$C1:783A単発ダメージ/回復量計算
$C1:7843$C1:7851単発ダメージ+乱数ブレ分
$C1:7852$C1:786B技使用時、$7E:9010$7E:9028に技データをコピー
$C1:7AED$C1:7B01行動ポイントの更新
$C1:7AED$C1:7B01味方キャラが行動可能か判定(状態異常とタメ時間中でないか確認)
$C1:7BCE$C1:7F92最終編ラストバトル ピュアオディオ出現判定・処理
$C1:835E$C1:8368[$00:2100]のディスプレイ制御レジスタに$0F書き込みと[$00:4200]$81を書き込んでNMI割り込みと自動ジョイパッド読み取り機能をONにする
$C1:85C4$C1:85EAHDMA転送処理+戦闘中タイマーを-1、65C816用レジスタをスタックから出してRTI(割込みから復帰し、中断していた処理を再開)
$C1:8702$C1:8713HDMAチャネル5を停止(技使用中にHDMAチャネル4など使用時)
$C1:8913$C1:894Eウィンドウ用カラーパレット転送(4色分)
$C1:89E5$C1:8A25CGRAM転送+カラーマス処理 BG3の指定マス色を$840000で加算処理して色変更
$C1:8A67$C1:8A6B[$00:0340][$00:0341]初期化
$C1:8AD8$C1:8AFD戦闘用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック)
$C1:8B6B$C1:8B87BG2のBGマップデータ転送処理
$C1:8C19$C1:8C9E$7E:F980$7E:F99Eにロードした技用のカラーパレットをCGRAMに転送
$C1:8D0F$C1:8D32ウィンドウの文字画像データをVRAMに転送
$C1:8D33$C1:8D60BG3のBGマップデータ転送($7E:C000$7E:C73FをVRAMアドレス$D000$D73FにGDMA転送)
$C1:8D9C$C1:8DBFOAMへデータ$7E:0700$7E:0920を転送
$C1:8DC0$C1:8DFDWRAMにコピーしたスプライトデータをVRAM転送
$C1:8E51$C1:8E5B行動ポイントのチェック
$C1:8E5E$C1:8E7E順序ポイント計算(敵が行動不能な状態異常(石化、マヒ、眠り)の時)
$C1:8E82$C1:8EB3敵ターン 移動・向き変え判定
$C1:8EB6$C1:8F59敵ターン 使用技1, 2, 3, 4の判定
$C1:8F1C$C1:8F2D敵ターン 敵の使用技判定
$C1:8F77$C1:8F8C順序ポイント計算(敵が1マス移動)
$C1:8F8D$C1:8FA1敵の移動・向き変え処理分岐
$C1:8FA4$C1:90A1敵の移動・向き変え 行動パターン$00$13
$C1:90A2$C1:90C4行動異常継続判定
$C1:90DB$C1:9139敵の向き・味方との相対距離から、敵移動データ読み込み
$C1:913A$C1:9165敵の移動・向き判定用 敵味方の状態と座標獲得して、敵に一番近い味方の位置と距離獲得
$C1:9166$C1:917A敵の移動・向き判定用 味方キャラ状態獲得
$C1:917D$C1:91AA敵の移動・向き判定用 敵味方の座標、距離判定
$C1:91AB$C1:91C5敵の移動・向き判定用 X座標相対位置判定
$C1:91C6$C1:91E0敵の移動・向き判定用 Y座標相対位置判定
$C1:91E1$C1:91EF敵の移動・向き判定用 相対位置判定で、味方-敵でキャリーフラグOFF
$C1:91F0$C1:920B敵の移動・向き判定用 敵座標と敵幅を[$00:0314][$00:0317]へコピー
$C1:920C$C1:9251味方全員の状態異常と、敵の使用技で発生する状態異常が被っていないか判定
$C1:9252$C1:92C2技IDから、周囲攻撃・反撃専用・回復技判定~回復技使用判定
$C1:926D$C1:927Dは敵ID$D7のスタビライザー専用処理
$C1:92C3$C1:9335敵ターンで行動する敵を順序ポイントから決定
$C1:92D0$C1:92F8行動異常発生後、BREAKDOWN対象の敵のみ行動異常解除
$C1:93A0$C1:93E0行動ポイント計算(味方が技を出した時)
$C1:941E$C1:943E行動ポイント計算(敵行動時 行動ポイント[$00:03AF][$00:03AE] & $6F | $10)
$C1:9474$C1:9477行動ポイント判定~敵の行動決定(1回目)
$C1:9480$C1:9533敵の行動決定(1回目か2回目か判定~2回目処理)
$C1:9572$C1:957D行動ポイント計算(味方がパスまたは味方がYボタン足踏み)
$C1:96CB$C1:96EF行動ポイント計算(味方が移動)
$C1:9898$C1:9895スタートボタンを押してポーズをかけた時、画面の輝度を下げる処理
$C1:990D$C1:9927行動ポイント計算(味方が向き変え)
$C1:998E$C1:99A2戦闘コマンドに何を表示するか判定~文字列呼び出し~表示位置決定~選択可能コマンド判定
$C1:99F6$C1:9AB7「逃げる」「テレポート」「ハルマゲドン」コマンド選択時処理 [$00:047E][$00:03FC]$FF書き込み、[$00:0362]$00書き込み
$C1:9D13$C1:9D86Xボタンの「ひとつ前の技」関連処理
$C1:9EFA$C1:9F51味方の行動順決定([$00:035B][$00:035A]を更新)
$C1:9F5A$C1:9F75味方キャラ戦闘状態確認
$C1:A00B$C1:A0DE味方が出した技が回復技または無属性ではないとき、技の属性を取り出す
$C1:A12C$C1:A179敵が出した技が回復技または無属性ではないとき、技の属性を取り出す
$C1:A1BD$C1:A21B敵から1ヒット以上の攻撃を食らった時、習得技で反撃できるか判定し、反撃技が出せなくなる状態異常ではないか判定
$C1:A312$C1:A161敵が技を出した直後、味方側の被ヒット数$00:1C3B/1C7B/1CBB/1CFBを、$7E:EA20/EA60/EAA0/EAE0にコピー
$C1:A3E4$C1:A3F3$7E:A000$7E:A47F$00で初期化
$C1:A43E$C1:A44B技データ19 & $80(範囲内に1ヒットなら1が立つ)でゼロフラグ分岐
$C1:A666$C1:A6DA技データ00~05からモーションのサブルーチンアドレス呼び出し+ジャンプ
$C1:A72F$C1:A74E$C1/A6D0用技モーションサブルーチン01
$C1:A751$C1:A76B$C1/A6D0用技モーションサブルーチン02
$C1:A76E$C1:A79B$C1/A6D0用技モーションサブルーチン03
$C1:A79E$C1:A7CB$C1/A6D0用技モーションサブルーチン04
$C1:A7CE$C1:A7EC$C1/A6D0用技モーションサブルーチン05
$C1:A7EF$C1:A80D$C1/A6D0用技モーションサブルーチン06
$C1:A810$C1:A82A$C1/A6D0用技モーションサブルーチン07
$C1:A82D$C1:A836$C1/A6D0用技モーションサブルーチン08
$C1:A839$C1:A8C6$C1/A6D0用技モーションサブルーチン09
$C1:A8C9$C1:A8DF$C1/A6D0用技モーションサブルーチン10
$C1:A8E2$C1:A943$C1/B00C用技モーションサブルーチン01
$C1:A946$C1:A958$C1/B00C用技モーションサブルーチン02
$C1:A959$C1:A969$C1/B00C用技モーションサブルーチン03
$C1:A96C$C1:A97C$C1/B00C用技モーションサブルーチン04
$C1:A97F$C1:A99D$C1/B00C用技モーションサブルーチン05
$C1:A99E$C1:A9CF$C1/B00C用技モーションサブルーチン06
$C1:A9EE$C1:AA19$C1/B00C用技モーションサブルーチン07
$C1:AA1F$C1:AA41$C1/B00C用技モーションサブルーチン08
$C1:AA44$C1:AA54$C1/B00C用技モーションサブルーチン09
$C1:AA57$C1:AA67$C1/B00C用技モーションサブルーチン10
$C1:AA6A$C1:AA7A$C1/B00C用技モーションサブルーチン11
$C1:AA7D$C1:AA8D$C1/B00C用技モーションサブルーチン12
$C1:AA90$C1:AAAD$C1/B00C用技モーションサブルーチン13
$C1:AAB0$C1:AB4C$C1/B00C用技モーションサブルーチン14
$C1:AC5D$C1:AC88$C1/B00C用技モーションサブルーチン15
$C1:AC8B$C1:AC96$C1/B00C用技モーションサブルーチン16
$C1:ACA0$C1:ACC9$C1/A6D0用技モーションサブルーチン11
$C1:ACCA$C1:ACD9$C1/B00C用技モーションサブルーチン17
$C1:ACDC$C1:ACE7$C1/B00C用技モーションサブルーチン18
$C1:ACEA$C1:ACF9$C1/B00C用技モーションサブルーチン19
$C1:ACFC$C1:AD0B$C1/B00C用技モーションサブルーチン20
$C1:AD0E$C1:AD23$C1/B00C用技モーションサブルーチン21
$C1:AE2C$C1:AE42$C1/B00C用技モーションサブルーチン22
$C1:AE43$C1:AE55$C1/B00C用技モーションサブルーチン23
$C1:AF44$C1:AF52$C1/B00C用技モーションサブルーチン24
$C1:AF48$C1:AF52$C1/B00C用技モーションサブルーチン25
$C1:AF4C$C1:AF52$C1/B00C用技モーションサブルーチン26
$C1:AF55$C1/B00C用技モーションサブルーチン27(BRL
$C1:AF58$C1:AF7A$C1/A6D0用技モーションサブルーチン12
$C1:AF84$C1:AF9E$C1/A6D0用技モーションサブルーチン13
$C1:AFA8$C1:AFCC$C1/A6D0用技モーションサブルーチン14
$C1:AFD6$C1:AFF8$C1/A6D0用技モーションサブルーチン15
$C1:B000$C1:B01B$C1/A6D0用技モーションサブルーチン16
$C1:B019$C1:B020$C1/B00C用技モーションサブルーチン28
$C1:B023$C1:B02A$C1/B00C用技モーションサブルーチン29
$C1:B02D$C1:B098$C1/B00C用技モーションサブルーチン30
$C1:B0AF$C1:B18C技用のカラーパレットを$7E:F980$7E:F99Eにロード
$C1:B200$C1:B251$C1/B00C用技モーションサブルーチン31
$C1:B254$C1:B268$C1/B00C用技モーションサブルーチン32
$C1:B26B$C1:B270$C1/B00C用技モーションサブルーチン33
$C1:B273$C1:B2F2$C1/B00C用技モーションサブルーチン34
$C1:B30F$C1:B312$C1/B00C用技モーションサブルーチン35
$C1:B315$C1:B329$C1/B00C用技モーションサブルーチン36
$C1:B39E$C1:B3C7$C1/B00C用技モーションサブルーチン37
$C1:B3D3$C1:B3FC$C1/B00C用技モーションサブルーチン38
$C1:B408$C1:B40D$C1/B00C用技モーションサブルーチン39
$C1:B410$C1/B00C用技モーションサブルーチン40(BRL
$C1:B413$C1:B416$C1/B00C用技モーションサブルーチン41
$C1:B419$C1:B41C$C1/B00C用技モーションサブルーチン42
$C1:B41F$C1:B421$C1/B00C用技モーションサブルーチン43
$C1:B720$C1:B732技データ00~05からモーションのサブルーチンアドレス呼び出し
$C1:C39D$C1:C3B7自爆999ダメージタイプ処理開始
$C1:C3DD$C1:C3E7技タイプが「外すとダメージ」「自爆999ダメージ」か判定
$C1:C40F$C1:C42B被ダメージの単発値、ヒット数書き込み
$C1:CB87$C1:CBA5技・ダメージフィールドによる回復量計算(味方側)
$C1:CBA6$C1:CBE2技・ダメージフィールドによるダメージ量計算(味方側)
$C1:CBC2$C1:CBD7現在HPからダメージ量減算(味方側)
$C1:CBE3$C1:CC6C敵への後方吹き飛ばし・90度右回転・180度回転判定と処理
$C1:CC29$C1:CC3F行動異常発生処理
$C1:CC72$C1:CCBF技・ダメージフィールドによるダメージ量計算(敵側)
$C1:CD09$C1:CD2E現在HPからダメージ量減算(敵側)
$C1:CD32$C1:CD53敵キャラ 総ダメージ量の回避属性半減処理・999を越えている時999に変える処理
$C1:CD9F$C1:CDC8味方キャラ 総ダメージ量の回避属性半減処理・999を越えている時999に変える処理
$C1:CDF7$C1:CE082桁の16進数の値を10進数に解釈し直すサブルーチン
$C1:CE60$C1:CE91現在HPと技使用後のHPの差から残りHP計算
$C1:CED4$C1:CEF4敵への90度回転処理
$C1:CF0A$C1:CF12敵への180度回転処理
$C1:CF13$C1:CF2E味方キャラの戦闘状態確認・座標を$00:1C18$00:1C1A, $00:1C19$00:1C1Bへコピー
$C1:CF2F$C1:CF5A敵への吹き飛ばし処理
$C1:D025$C1:D0F4敵への吹き飛ばし座標計算
$C1:D1D5$C1:D29C味方キャラ 向き補正・回避属性判定(レベル補正)
$C1:D29D$C1:D2BB[$7E:9EF0][$7E:9EF6]$00書き込み
$C1:D6B9$C1:D725攻撃技のヒット数計算
$C1:D726$C1:D7F4攻撃技の敵ターゲット決定
$C1:D7A0$C1:D7AD味方キャラ 技使用時 ヒット数をインクリメント
$C1:D7F7$C1:D802敵キャラ 技使用時 ヒット数をインクリメント
$C1:D870$C1:D8B1敵キャラ 回復技判定~命中判定計算
$C1:D8BE$C1:D8FC味方キャラ技使用時 回復技かどうか判定
$C1:D900$C1:D910外すとダメージタイプの処理開始位置
$C1:D912$C1:D95C味方キャラ回復技使用時 技データ10からLV差係数関係算出~単発回復量計算~眠り状態解除
$C1:D978$C1:D9D9敵キャラ技使用時 技データ10からLV差係数関係算出~単発回復/ダメージ量計算~眠り状態解除~オディオモールなら単発ダメージ量を1に
$C1:D9DA$C1:DA24カウンター行動異常
$C1:DB38$C1:DBF4状態異常 発生判定処理
$C1:DC66$C1:DC99状態異常 依存ステータス判定
$C1:DC0A$C1:DC4A武器の追加効果の状態異常処理
$C1:DCC1$C1:DE82味方へのステータス変動処理
$C1:DD83$C1:DE9C敵へのステータス変動処理
$C1:DF27$C1:DF3B武器の追加効果の状態異常判定
$C1:DFAF$C1:DFE8味方攻撃時、技範囲内に敵キャラがいるか判定
$C1:DFF0$C1:E025敵攻撃時、技範囲内に味方キャラがいるか判定
(味方キャラが攻撃範囲内にいたら、戦闘中の味方キャラデータ$00:1C00+40n + $2Fに順に$01$04の値を書き込む)
$C1:E061$C1:E0A1敵キャラ 向き補正用の中心マスを計算
$C1:E0A2$C1:E0F4敵キャラ 回避属性判定
$C1:E0F7$C1:E124味方が敵を攻撃する時、向き補正[$7E:ABnB]から、向き補正したレベルの値を[$7E:ABnA]に書き込む
$C1:E127$C1:E1A8味方が敵を攻撃する時、向き補正を判定して[$7E:ABnB]に書き込む値をAにロードする
$C1:E1A9$C1:E1C7敵キャラ戦闘状態確認
$C1:E1CB$C1:E1E9nを加算後に敵番号nの存在確認
$C1:E251$C1:E2E9該当の技IDの技が出せる状態か判定
$C1:E327$C1:E3B3敵移動時 上下左右移動処理
$C1:E3D9$C1:E401行動ポイント計算(敵が移動)
$C1:E429$C1:E487敵移動時 向き変え処理
$C1:E4CD$C1:E552BG3のBGマップデータ(実際のテキスト部分)を$7E:B000~にコピー
$C1:E55C$C1:E5A3BG3のBGマップデータ(固定値部分)を$7E:B000~にコピー
$C1:E6BD$C1:E6ED戦闘コマンド表示位置をキャラ座標から決定
$C1:E7BD$C1:E808敵番号nのX・Y座標(マス目)と向きから敵キャラタイルの向き判定
$C1:E80C$C1:E832敵番号nの状態を確認してから座標・敵キャラタイル位置処理へジャンプ~処理終了
$C1:E894$C1:E8C8仲間キャラ敵対時 敵キャラデータを味方キャラデータにコピー
$C1:E94B$C1:E9FC$7E:E900$7E:E9FFに技関係の値を入れ、「ひとつ前の技」がない場合は、味方キャラデータの技一覧から、最初の技のIDを取り出して、「ひとつ前の技」に登録
$C1:EA79$C1:EA76敵番号nの存在確認の$C1:E1CB$C1:E1E9へジャンプして分岐処理、敵番号処理が終わったらBG2のBGマップデータ転送処理へジャンプ
$C1:EB18$C1:EB34VRAM$0000$4000初期化 GDMAチャネル7転送$C1:029A(fixed) -> VRAM:$0000 4000Byte
$C1:EBAD$C1:EBC0戦闘開始時、行動ポイント[$00:03AF][$00:03AE]$0000をセット
$C1:EBCA$C1:EBC7戦闘開始時、敵の順序ポイント初期値設定
$C1:EBF1$C1:EC0F[$7E:B000][$7E:BFFF]初期化
$C1:EC25$C1:EC4AキャラIDからキャラデータ開始アドレス開始アドレスを計算
$C1:EC5C$C1:EC79SF編と功夫編・最終編での主人公ID呼び出し分岐
$C1:ECAB$C1:ED0E最終編オルステッドルート 味方キャラデータを味方2人目以降にセット
$C1:ED7B$C1:ED95味方パーティIDリストから仲間キャラのIDをロード
$C1:EE2F$C1:EE46最終編で仲間キャラ敵対時 仲間キャラID・戦闘状態書き込み
$C1:EE56$C1:EEC8最終編以外で仲間キャラ敵対時 味方キャラID・アドレス呼び出し
$C1:F05F$C1:F2B1最終編オルステッドルート 対戦キャラのステータスセット
$C1:F2D1$C1:F319戦闘開始時 GDMA転送初期設定
$C1:F31F$C1:F337戦闘開始時 GDMA転送初期設定(チャネル4[$00:434?]
$C1:F338$C1:F3AA戦闘開始時 グラフィック関係I/Oレジスタ初期設定
$C1:F3AB$C1:F4A8[$00:420B], [$00:420C], [$7E:FE??], [$00:03??], [$00:1C??], [$00:1A??]の初期化
$C1:F4A9$C1:F4C5[$00:00F8][$00:00FF]に初期値設定
$C1:F50E$C1:F623最終編ランダムエンカウント時の敵パーティ算出
$C1:F55D$C1:F727味方ステータスのセット
$C1:F575$C1:F57C[$00:0041](背景番号)から上6ビットを[$00:0354]に書き込み
$C1:F626$C1:F65E敵パーティデータから味方キャラ4キャラ分の向きと座標を獲得・設置
$C1:F661$C1:F6E9敵キャラ操作時 敵種類1~4セット
$C1:F89B$C1:F955敵キャラ操作時 操作する敵のステータスセット
$C1:F95C$C1:F986仲間キャラ敵対時かどうか判断・キャラID処理
$C1:F9B0$C1:F9DE仲間キャラ敵対時 キャラの初期位置のロード~敵ID呼び出し
$C1:F9E1$C1:FA19最終編オルステッドルート 敵対キャラの戦闘状態書き込み
$C1:FA31$C1:FB2A仲間キャラ敵対時 味方キャラデータを敵種類・敵個別データにコピー
$C1:FB62$C1:FBB8敵種類1の敵ID書き込み
$C1:FB2B$C1:FB5D味方の隊形から行動順を判定
$C1:FBBE$C1:FBFD敵キャラ操作時 敵IDや敵座標セット
$C1:FC0A$C1:FC3E戦闘開始時 敵データのロード&$00:1A??~への書き込み
$C1:FC3F$C1:FC58最終編オルステッドルート 技1~4の反撃属性1/反撃属性2/使用不可になるステータス異常書き込み
$C1:FC78$C1:FD0F戦闘開始時 敵データから$7E:AA??~への書き込み、行動異常・状態異常に初期値設定
$C1:FD76$C1:FD80シナリオID判定(最終編の場合、最終編主人公は誰か)
$C1:FD81$C1:FDA5最終編ラスト7連戦開始時のみ[$7E:FEFB]$01を、それ以外は$00を書き込む
メニュー画面
アドレス内容
$C2:00F7$C2:00FAメニュー画面開いた時の暗転処理
$C2:0103$C2:010C[$00:0579][$00:057A][$00:057B]$00を書き込み$C2/51E1$C2/51F8にジャンプ・処理
$C2:0115$C2:0121メニュー画面用カラーパレットNo.$00のデータ$C2:72A8$C2:72C7$7E:8C007E:8C1FにMVN転送
$C2:0127$C2:012FシナリオIDを[$00:054E][$00:054D]にコピー
$C2:04EF$C2:04FD$7E:8C00$7E:8DFEの初期化($00で埋める)
$C2:04FE$C2:0525OAM用の$00:0700$00:091Fの初期化($00で埋める)
$C2:0526$C2:052F[$00:4200](割り込み有効化レジスタ)判定
$C2:05B2$C2:05D2バンク$C2の値を$0000,yにループ処理で転送
$C2:0782$C2:07A0カーソル位置のOAMデータを$00:0700$00:0703に書き込み
$C2:0893$C2:089Fメニュー画面コマンドカーソル位置から、HDMAテーブル[$7E:3105][$7E:3104]を書き換えて、半透明(カラーマス)部分位置を変更
$C2:08A0$C2:08A7メニュー画面用・コマンド判定
$C2:091E$C2:0971隊形・キャラ入れ替えのキャラ選択状態・空欄判定
$C2:0BB9$C2:0C15メニュー画面用・カーソル位置をAボタンで選択~もう一か所をカーソル位置指定しAボタンで選択して入れ替え
$C2:2DBC$C2:2DCA$7E:A000$7E:BBFEの初期化($00で埋める)
$C2:2DCB$C2:2E6Bキャラ名などテキストデータを$7E:2000~から$00:05xx~にコピー
$C2:2F16$C2:2FA4BG3の$00:05xx~のデータをタイルデータの配置に合わせて分割、$7E:A5C0$7E:BA1Fにコピー
$C2:2FA5$C2:2FBD タイルデータビット反転処理
$C2:2FBE$C2:300E$D4:F200$D4:FFFF(8×8ピクセルサイズの文字画像・吹き出し・ウィンドウ形状などのタイルデータ)をVRAMアドレス$6400$8000にGDMA転送
$C2:300F$C2:3022[$00:054E][$00:054D]からシナリオIDまたは最終編主人公IDを[$00:0550][$00:054F]にコピー
$C2:3023$C2:308Aメニュー画面の共通画像部分(背景画像、セリフ吹き出し、コマンド枠)をVRAMアドレス$4000$5FFFに転送
$C2:308B$C2:3097XYを指定した状態でバンクC2からバンク7Eへ$003F+#$007Fバイト転送
$C2:3098$C2:30AAXYを指定した状態でバンク7Eからバンク7EへXを+$20バイトしつつ+$001Fバイト転送
$C2:30AB$C2:30FA$7E:C000$7E:C7FE$00で初期化、シナリオ別カーソルの画像コピー
$C2:3121$C2:3160各シナリオカーソル、手袋カーソル、枠、斜め向き矢印、「←L」アイコン、「R→」アイコン画像をVRAMアドレス$8000$87FFに転送
$C2:3161$C2:3197装備画面における頭・右・左・体・足・アクセサリ欄の16×16サイズキャラのタイルデータ($C2:D5C0$C2:D8BF)を、VRAMアドレス$BC00$BD7F, $BE00$BF7FにGDMA転送
$C2:321B$C2:322FBG2(背景)タイルデータのBGマップ用データの同一箇所を[$7E:Cxxx]にコピー
$C2:3230$C2:32BBBG2(背景)タイルデータのBGマップ用データのn行目タイルデータを[$7E:C000]~に転送
$C2:32CA$C2:32C0$7E:A7FE$7E:9800の初期化($00で埋める)
$C2:32CB$C2:3334メニュー画面吹き出し形状のBGマップデータを$00:0655$00:066Fにコピー
$C2:335E$C2:336Dメニュー画面のBG1用BGマップデータ改行判定
$C2:3370$C2:338Dメニュー画面吹き出し形状のBGマップデータ(吹き出しの尖った部分)を$7E:9800$7E:9EFFにセット
$C2:33A1$C2:33ECメニュー画面のBG1用BGマップデータを$7E:9800$7E:9EFFにセット
$C2:3481$C2:34A7VRAM転送用 GDMA転送チャネル4設定
$C2:34AC$C2:34E4$7E:C000~にコピーされたキャラのスプライトデータを$7E:C800~へコピー
$C2:34FC$C2:3526キャラのカラーパレットデータを$7E:8D00~へコピー
$C2:3534$C2:35A8キャラのスプライトデータを$7E:C000~へコピー
$C2:35AD$C2:3712キャラのOAMデータ、または背景のBGマップデータを$7E:xxxx~へコピー
$C2:35F5$C2:360EBGマップ4バイト転送
$C2:3620$C2:3665BGマップ反転処理
$C2:3966$C2:398C各シナリオの主人公(+最終編で功夫編主人公になるユン、レイ、サモ)の、フィールドの16×16サイズスプライトをVRAMアドレス$A400$BBFFにGDMA転送
$C2:3CB4$C2:3CCEセーブデータからのロード
$C2:3D4D$C2:3D98セーブデータへのセーブ
$C2:42D9$C2:43B5指定テキストを$7E:2000~にロードする
$C2:4386$C2:43BBシナリオ別キャラデータからキャラ名を$7E:2000~にロード
$C2:44C9$C2:44D8シナリオ別キャラデータからデータ呼び出し
$C2:44D9$C2:4513シナリオIDからメニュー画面用の定数[$00:0555][$00:0559]設定
$C2:4514$C2:453Cアイテム欄整頓用 $7E:8A00~及び$7E:8B00~から元の$00:0B01~及び$00:0C01~に転送・上書き
$C2:49A6$C2:49D0アイテムIDからアイテムデータ開始アドレス計算の準備~アイテムデータ転送
$C2:4AEF$C2:4AFFHDMAテーブルを$00:3100~にコピー
$C2:4B09$C2:4B0DVBlankフラグ判定ループ([$00:4212] 上1ビット判定)
$C2:4B22$C2:4B2BHDMA転送&NMIによる割り込み待ち用ループ
$C2:4B3B$C2:4B50HDMA チャネル7設定
$C2:4B51$C2:4B9Cメニュー画面 隊形・キャラ入れ替え
$C2:4C4D$C2:4C87VRAMの初期化+アドレス$F800$FFFFバイトに初期値書き込み
$C2:4C88$C2:4CA0VRAM転送用 [$00:0600]がネガティブフラグONならGDMA転送実行
$C2:4D35$C2:4D54OAM転送用 GDMA転送チャネル0設定
$C2:4D55$C2:4D78CGRAM転送用 GDMA転送チャネル1設定
$C2:4D83$C2:4DAFVRAMのBG1用BGマップ転送用 GDMAチャネル3設定
$C2:4DB0$C2:4DD0[$00:057A](GDMA転送チャネルに設定がされているか判定用メモリアドレス)に値が入っていた ら、対応したGDMA転送チャネルを実行
$C2:4DD4$C2:4FE5メニュー画面 グラフィック関係I/Oレジスタ初期設定
$C2:4FE8$C2:4FEF[$00:4200][$00:0579]を書き込んで自動ジョイパッド読み取り機能をONにする(NMI割り込みONは[$00:0579]の値次第)&HDMA転送実行
$C2:4FF7$C2:4FFDD/DB/Y/X/P/Aレジスタにスタックからプルして割込から復帰し、中断していた処理を再開
$C2:5178$C2:51E0メニュー画面用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック)
$C2:51F9$C2:5201アドレス呼び出し用サブルーチン(A$7Eセット)
$C2:5204$C2:5231シナリオ別キャラデータから功夫編主人公の「老師」「師範」のセット
(功夫編主人公IDが$08 = 老師かどうかで判定)
$C2:5232$C2:523Dシナリオ別キャラデータからキャラ名呼び出し
$C2:5383$C2:53F3入力テキストと$7E:2000~が一致しているか判定
$C2:55C7$C2:55E2文字一覧表に文字を設置
$C2:6238$C2:6257アイテムIDからアイテムデータ開始アドレス計算
$C2:62EF$C2:6300アイテム欄整理用 [$7E:8A00][$7E:8AFF]及び[$7E:8B00][$7E:8BFF]に初期値として$00を書き込む処理
$C2:6301$C2:6316アイテム欄整頓用 アイテムIDを整理用アドレスにコピー及びアイテム個数の整理とコピー
$C2:6317$C2:632Dアイテム欄整頓用 アイテムをアイテム欄整理用アドレスにコピーするループ処理
$C2:632E$C2:6341アイテム欄整頓「回復先/攻撃先/装備先」用 回復/攻撃/装備アイテム以外をアイテム欄整理用アドレスにコピーするループ処理
$C2:6342$C2:6371アイテム欄整頓「回復先」用 回復アイテムをアイテム欄整理用アドレスにコピーするループ処理
$C2:6372$C2:639Dアイテム欄整頓「攻撃先」用 攻撃アイテムをアイテム欄整理用アドレスにコピーするループ処理
$C2:63A2$C2:63E2アイテム欄整頓「装備先」用 装備アイテムをアイテム欄整理用アドレスにコピーするループ処理
サウンド
アドレス内容
$C3:0000$C3:012Fリセット時サウンドデータ転送
$C3:0131$C3:017Fサウンドデータ転送判定
$C3:03E2$C3:03DFサウンドデータサイズを$00:2141に、転送先アドレスを$00:2143-$00:2142に書き込み
$C3:06BD$C3:06CCサウンドデータ転送([$00:2140]待機)
システム・その他
アドレス内容
$00:FFB0$00:FFB4リセット時初期処理
$CE:CD7A$CE:CE61セーブデータへのセーブ用データ圧縮
$CE:CEEF$CE:CF13セーブデータからのセーブ用データ解凍($00:12xx用)
$CE:D03D$CE:D0A2シナリオ開始時 画像データ呼び出し用シナリオ分岐判定
$CE:D3BF$CE:D432BG1,BG2マップデータの初期化
$CE:D47E$CE:D89D画像データを$7E:xxxx~にコピー
$CE:D909$CE:D95B戦闘開始時 三角形ウィンドウマスク座標計算
$CE:DAC5$CE:DAFE戦闘開始時 三角形ウィンドウマスク処理のHDMA転送7チャネル設定
$CE:DB04$CE:DB5C戦闘開始時 三角形ウィンドウマスク処理のHDMAテーブル初期値設定
$CE:DB5D$CE:DB88戦闘開始時 三角形ウィンドウマスク座標計算終了判定
$CE:DB99$CE:DBDD戦闘開始時 三角形ウィンドウマスク座標計算指示
$CE:DC76$CE:DD0D戦闘開始時 三角形ウィンドウマスク座標のHDMAテーブル計算値書き込みループ
$CE:DD56$CE:DDB2戦闘開始時 三角形ウィンドウマスク座標のHDMAテーブル計算値書き込み

RAM領域は次ページ参照。



このページをシェアする

上へ