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

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

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

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

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

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

基礎知識

「ライブ・ア・ライブ」は、容量が「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:FFC0$00:FFDF
$02$82テキストデータ(システム関連/現代編シナリオ など)$02:9380$02:A695
$03$83BGM関連のデータ(音源?)
$10$90テキストデータ(シナリオ関連)
$11$91テキストデータ(シナリオ関連)
$16$96テキストデータ(敵の名前・技名・技説明 など)
$40$C0プログラム(主にマップ関係, 後述)
$41$C1プログラム(戦闘関係, 後述)$C1:0000$C1:FDA5
戦闘コマンドと戦闘終了時メッセージのテキスト(デバッグテキスト含む)$C1:FDA6$C1:FFFF
$42$C2プログラム(主にメニュー画面関係, $C2/6B4Cあたりまで? 後述)
サウンドデータ サイズ&転送先アドレス
$43$C3プログラム(サウンド関連, 後述)$C3:0000$C3:06F2
サウンドデータ サイズ&転送先アドレス$C3:0700$C3:FFFF
$44~$46$C4~$C6サウンドデータ サイズ&転送先アドレス
$47~$4B$C7~$CB各種定数?
$47~$4D$C7~$CDサウンドデータ サイズ&転送先アドレス
$4E$CEプログラム(メニュー画面・マップ・スプライトのロードなどシステム周りの色々)
$4F~$50$CF~$D0画像(マップ用スプライトやマップ)のデータ
フィールド用カラーパレット$CF:F960$CF:FEAF
$51$D1テキストデータ(シナリオ関連)
$54$D4画像データ
文字画像データ(文字データ参照)$D4:9200$D4:F1FF
$55$D5味方キャラデータ(詳細$D5:00C0$D5:04CA
敵キャラデータ(詳細$D5:04CB$D5:24CA
味方技データ(詳細$D5:24CB$D5:3DB1
敵技データ(詳細$D5:3DB2$D5:56CA
行動異常データ(詳細$D5:644B$D5:64CA
敵移動データ$D5:64CB$D5:71C3
アイテムデータ(詳細$D5:71C4$D5:81C3
各シナリオのアイテム欄の開始アドレス&枠数$D5:FC51$D5:FC60
$56$D6 カラーパレット(味方キャラ、32×32サイズ時)$D6:2080$D6:235F
最終編・敵パーティ編成テーブル$D6:4080$D6:40BF
敵パーティデータ(詳細$D6:4280$D6:512E
各シナリオの味方パーティIDリスト(詳細$D6:512F$D6:514F
原始編・敵パーティ編成テーブル$D6:53CB$D6:541A
中世編・敵パーティ編成テーブル$D6:541B$D6:549A
テキストデータ(システム関連)$D6:AC00$D6:CFFF
テキストデータ(技の説明テキスト)$D6:E000$D6:EF7F

サウンドデータのサイズ&転送先アドレスについて:
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:0EDF$C0:0FB0リセット時初期処理 BGマップ
$C0:1051$C0:1069[$00:4200]$81を書き込んでNMI割り込みと自動ジョイパッド読み取り機能をONにする
$C0:106A$C0:1074[$00:4200]$01を書き込んで自動ジョイパッド読み取り機能をONにする
$C0:1A69$C0:1ADBマップタイマーのカウントダウン計算
$C0:328A$C0:32AFマップタイマー初期値読み込み
$C0:24D3$C0:2546功夫編ラストバトル前に弟子のデータをシナリオ別キャラデータにコピー
$C0:263E$C0:266Bカウントアップ処理
$C0:378F$C0:37BEマップでの乱数イベント関連(戦闘中のテレポート飛び先判定も含む)
$C0:37D8$C0:3806持ち物一覧を開いて何かのアイテムを選ぶことで進行するイベント
$C0:47E8$C0:482Cアイテム取得時に持ち物欄の空欄に該当アイテムを入れ個数を+1する、または既に所持しているなら該当アイテムの個数を+1する処理
$C0:4839$C0:4853アイテム使用時に持ち物欄から指定アイテム個数を-1する処理
$C0:4DC4$C0:4EE1スプライトのデータをVRAMへGDMA転送
$C0:9A09$C0:9AC9カラーパレット呼び出し
$C0:9ACA$C0:9AE5カラーパレットGDMA転送設定
$C0:B83E$C0:B8E5マップ用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック)
$C0:B900$C0:B924マップ乱数計算
$C0:BA16$C0:BA7516bit×16bit乗算サブルーチン
$C0:BB15$C0:BC68OAM用データを計算、$00:0700$00:0920に書き込み
$C0:BC6D$C0:BC93OAMへデータ($00:0700$00:0920)を転送
戦闘関連
アドレス内容
$C1:0000$C1:0079戦闘開始時処理
$C1:00A7$C1:00AA戦闘開始時 味方行動順決定
$C1:0136$C1:0140[$00:2100]のディスプレイ制御レジスタ書き込みと[$00:4200]$81を書き込んでNMI割り込みと自動ジョイパッド読み取り機能をONにする
$C1:03F1$C1:03F9敵データ15・タイプと$04(OBJECT)で論理積を取る処理
$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:10B3$C1:10E8ダメージフィールド発生処理
$C1:14C7$C1:14DC「アイテムを使う」コマンドが選択可能か判定
$C1:14DD$C1:14EB[$7E:FEFA](ハルマゲドンフラグ)と[$00:0043]から、逃げるが選択可能か判定
$C1:156D$C1:1630ラーニング用 $7E:9200~に書き込まれた使用技を習得技として記録する処理
$C1:166E$C1:169D戦闘終了時 ドロップアイテム判定
$C1:16AD$C1:171C敵キャラ操作時 座標・向きを敵データから味方データにコピー
$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:25D7$C1:2633戦闘開始時 幕末編のNAMEタイプの敵ステータス処理
$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: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:3D93$C1:3DAF習得技のステータス移動ループ処理
$C1:3D5C$C1:3DAF技IDと敵データ09から、技データ開始アドレスを算出
$C1:3E18$C1:3E4B戦闘開始時 幕末編のNAMEタイプの敵 名前処理
$C1:3E61$C1:3EC7表示する文字列を取得し$7E:FF00$7E:FF60にコピー
$C1:3EC8$C1:3F7D$7E:FF00$7E:FF60ににコピーした文字列から文字の画像データをロード
$C1:41F2$C1:4391敵の移動処理
$C1:46C8$C1:46C9乗算・除算時の時間経過用
$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:51FB$C1:5245敵位置マス判定処理
$C1:5AC2$C1:5B64味方キャラのOAM下位テーブル用データ獲得
$C1:5EF5$C1:5F1C味方キャラのOAM上位テーブル用データ獲得
$C1:5F1D$C1:5F85味方キャラ以外のOAMデータ獲得
$C1:5FE0$C1:60C9キャラのスプライトデータをWRAM$00:D000$00:D400にGDMA転送
$C1:6150$C1:61A4戦闘用乱数計算
$C1:62BF$C1:62EE味方キャラIDからカラーパレットデータ開始位置を計算しCGRAMへGDMA転送
$C1:63F6$C1:6725敵種類の縦・横サイズ書き込み
$C1:6DCC$C1:6E12最終編ラストの7連戦後の画面上のドットがランダムに消えていく演出用計算
$C1:6F7C$C1:6FBA最終編オルステッドルート おーでぃーおー戦でざき入れ替え判定
$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:8AD8$C1:8AFD戦闘用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック)
$C1:8C19$C1:8C9E$7E:F980$7E:F99Eにロードした技用のカラーパレットをCGRAMに転送
$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:990D$C1:9927行動ポイント計算(味方が向き変え)
$C1:998E$C1:99A2戦闘コマンドに何を表示するか判定~文字列呼び出し~表示位置決定~選択可能コマンド判定
$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:B0AF$C1:B18C技用のカラーパレットを$7E:F980$7E:F99Eにロード
$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: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: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:E251$C1:E2E9該当の技IDの技が出せる状態か判定
$C1:E327$C1:E3B3敵移動時 上下左右移動処理
$C1:E3D9$C1:E401行動ポイント計算(敵が移動)
$C1:E429$C1:E487敵移動時 向き変え処理
$C1:E6BD$C1:E6ED戦闘コマンド表示位置をキャラ座標から決定
$C1:E894$C1:E8C8仲間キャラ敵対時 敵キャラデータを味方キャラデータにコピー
$C1:E94B$C1:E9FC$7E:E900$7E:E9FFに技関係の値を入れ、「ひとつ前の技」がない場合は、味方キャラデータの技一覧から、最初の技のIDを取り出して、「ひとつ前の技」に登録
$C1:EBAD$C1:EBC0戦闘開始時、行動ポイント[$00:03AF][$00:03AE]$0000をセット
$C1:EBCA$C1:EBC7戦闘開始時、敵の順序ポイント初期値設定
$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)
$C1:F3CE$C1:F3D8[$00:03AA], [$00:038B], [$00:0395], [$00:0396], [$00:03B7], [$00:03B7], [$00:03B8]に初期値$00を設定
$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:04FE$C2:0525OAM用の$00:0700$00:091Fの値をリセット
$C2:0526$C2:052F[$00:4200](割り込み有効化レジスタ)判定
$C2:0782$C2:07A0カーソル位置のOAMデータを$00:0700$00:0703に書き込み
$C2:08A0$C2:08A7メニュー画面用・コマンド判定
$C2:091E$C2:0971隊形・キャラ入れ替えのキャラ選択状態・空欄判定
$C2:0115$C2:0121メニュー画面用カラーパレットNo.$00のデータを$7E:8C00~に書き込み
$C2:0BB9$C2:0C15メニュー画面用・カーソル位置をAボタンで選択~もう一か所をカーソル位置指定しAボタンで選択して入れ替え
$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データを$7E:0710~へコピー
$C2:3CB4$C2:3CCEセーブデータからのロード
$C2:3D4D$C2:3D98セーブデータへのセーブ
$C2:42D9$C2:43B5指定テキストを$7E:2000~にロードする
$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:4B51$C2:4B9Cメニュー画面 隊形・キャラ入れ替え
$C2:4C4D$C2:4C87グラフィック転送処理
$C2:4C88$C2:4CA0VRAM転送用 GDMA転送チャネル4実行
$C2:4D35$C2:4D54OAM転送用 GDMA転送チャネル0設定
$C2:4D55$C2:4D78CGRAM転送用 GDMA転送チャネル1設定
$C2:4DB0$C2:4DD0[$00:057A](GDMA転送チャネルに設定がされているか判定用メモリアドレス)に値が入っていた ら、対応したGDMA転送チャネルを実行
$C2:4FE8$C2:4FEF[$00:4200][$00:0579]を書き込んで自動ジョイパッド読み取り機能をONにする(NMI割り込みONは[$00:0579]の値次第)
$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:FFB0$00:FFB4リセット時初期処理
$CE:CD7A$CE:CE61セーブデータへのセーブ用データ圧縮
$CE:CEEF$CE:CF13セーブデータからのセーブ用データ解凍($00:12xx用)
$CE:D03D$CE:D0A2シナリオ開始時 画像データ呼び出し用シナリオ分岐判定
$CE:D47E$CE:D89Dスプライトデータを$7E:8000~にコピー

RAM領域

RAM(Random-Access Memory)領域はバンク$00$3F$0000~$1FFF、バンク$7Eで、先に記した通りにバンク$80~にはバンク$00~がミラーリングされている。

$7E:0000$7F:FFFFはWRAM(Work RAM)というメモリ領域で、$7E:0000$7F:1FFFのみ、他バンクでもミラーリングされて共通の値が入る(バンク$00$3F, $80$BF
だいたいの場合で$00:0000$00:1FFF(またはミラーリングの$7E:0000$7F:1FFF)にて数値の読み書き・計算をするのは、ここがWRAMだからである。

WRAMの$7F:2000$7F:FFFFはミラーリングされていないため、別途、$00:2180$00:2183に値を読み書きすることで通信をして値を書き込む。
$00:2180$00:2183のように外部メモリとやりとりをするためのアドレスをI/Oレジスタというが、この後で説明する。

※下位バイト・上位バイトについて
アドレス1つに入るデータは1バイト(16進数2文字)だが、中には連続した2つのアドレスを使って、2バイト(16進数4文字)のデータを記録している値もある。
その場合は、下位バイトのアドレスに下2桁、上位バイトのアドレスに上2桁が入っており、上位バイトアドレスの値・下位バイトアドレスの値を繋げて2バイト分のデータとする。

I/Oレジスタ

スーパーファミコンと周辺機器(ゲームカセット、操作用のコントローラ、及び、画像・音を出力するためのディスプレイやスピーカーつまりスーパーファミコンの時代だとブラウン管テレビ)が通信を行うための端子(接続部分)などをI/Oポートというのだが、これら周辺機器とのやりとり用に割り振られたメモリアドレスが「I/Oレジスタ」になる。
これはスーパーファミコンの仕様のため、どのスーパーファミコンソフトでも共通のはずである。
詳しいアドレスは上サイト様など参照。ここでは簡単な説明に留める。
プログラマーでない限りいろいろ詳しいことを知っておく必要はないし、筆者もわからないことだらけだが、とりあえず、知っておくと良いレジスタだけピックアップする。
用語の説明は表の下。

アドレス内容
$00:2100ディスプレイ制御レジスタ1
$00:2101OBSEL(スプライトのサイズを設定)
$00:2102~$00:2103OAMアドレス (下位8bit~上位1bit)
$00:2104OAM書き込み
$00:2105背景(BG)制御レジスタ
$00:2107背景(BG1)画面設定
$00:2108背景(BG2)画面設定
$00:2109背景(BG3)画面設定
$00:210A背景(BG4)画面設定
$00:2116~$00:2117VRAMアドレス (下位8bit~上位8bit)
$00:2118~$00:2119VRAMデータ書き込み (下位8bit~上位8bit)
$00:2121CGRAM カラーパレットアドレス指定
$00:2122CGRAM カラーパレット書き込み
$00:2140$00:2143サウンド用CPUであるAPU(SPC700)とのI/Oレジスタ($00:2144$00:217F$00:2140$00:2143をミラーリング)
$00:2180WRAMデータレジスタ
$00:2181~$00:2183WRAMアドレスレジスタ 3バイト (下位8bit・中位8bit・上位1bit)
$00:4200割り込み有効化レジスタ
$00:420BGDMA開始レジスタ
$00:420CHDMAチャネルレジスタ
$00:4212自動ジョイパッド読み取り機能のON・OFF状態
$00:4212bit7 自動ジョイパッド読み取り機能のONOFF記録
$00:4218~$00:4219自動ジョイパッド読み取り機能のコントローラ1のボタン状態出力先
$00:421A~$00:421B自動ジョイパッド読み取り機能のコントローラ2のボタン状態出力先(本作未使用)
$00:4218$00:421Fコントローラ(ジョイパッド)出力
$00:43n0GDMA/HDMA設定レジスタ(チャネルn)
$00:43n1GDMA 転送先指定 $04=OAM, $18=VRAM, $22=CGRAM, $80=WRAM
$00:43n3$00:43n2GDMA データ元アドレス(開始位置)
$00:43n4GDMA データ元バンク
$00:43n6$00:43n5GDMA 転送するデータ量
  • WRAM: Work RAM
    容量:128KB
    スーパーファミコンのメインメモリ。$7E:0000$7F:FFFF
  • VRAM: Video RAM
    容量:64KB
    グラフィックデータ(画像の構造)を記録するメモリ。
  • CGRAM: Color Generator RAM
    容量:512バイト
    スプライトや背景の色情報(カラーパレット)を記録するメモリ。
    アドレスをbyteではなくwordで指定するため注意が必要。2byte(バイト)で1word(ワード)になる。
  • OAM: Object Attribute Memory
    容量:544バイト
    スプライトの配置を記録するメモリ。
  • データ転送
    • GDMA(General Direct Memory Access):
      データ転送のこと。HDMAと合わせて8チャネル設定可能。
      これでWRAM, VRAM, CGRAM, OAMへデータを送る。
    • HDMA(HBlank DMA):
      HBlank(画面1行のグラフィックを描画した後の次の行の描画までの僅かな時間)を利用したデータ転送。

サブルーチンを見て、$00:2100$00:213Fの読み書きをしているのならだいたい画像関係だし、$00:2140$00:217Fならサウンド関係(バンク$C3)、$00:4218$00:4219はコントローラ出力の判定である。
$00:43n?は他メモリとのデータのやりとり(大抵はグラフィックのデータ)で、$00:43n1に何の値を書き込んだかで、カラーパレットのデータ($22=CGRAM)か、スプライト位置($04=OAM)か、大雑把に把握できる。
また、スーパーファミコンには画像の伸縮回転を行う機能があるが、そのためのI/Oレジスタ$00:211B$00:2120を利用した乗算、$00:4202$00:4206の乗算・除算用レジスタを使った乗算・除算も頻繁に見られる。

ゲームプレイ中、プレイヤーからのコントローラ(ジョイパッド)の入力待ちのため$00:4212の状態の読み取りを1フレームに1回行っており、ログを取ってみると$00:4212の読み取りループばかり並ぶのはこのため。

セーブデータ

ゲームのセーブデータは、ゲームのカセット内に入っているSRAMというメモリで保存する。
このメモリはボタン電池で電力を供給しており、電池切れするとデータを保持できなくなる。
ゲームのカセットがスーパーファミコンに接続され電源が入っている時は、SRAMへの電力供給はスーパーファミコン側から行われるので、もし電池切れしていても、スーパーファミコンの電源を切らない限り、セーブデータは保存可能。

SRAMは、メモリ割り当ての規格がHiROMの場合、バンク$30$3Fのアドレス$6000$7FFFに割り当てられている。

「ライブ・ア・ライブ」では、セーブデータ領域にバンク$30のみ使用している。
「ライブ・ア・ライブ」はセーブデータが4個あるが、データ領域は以下のように割り振られている。

アドレスセーブデータ
$30:6000$30:67F7セーブデータ1
$30:67F8$30:6FEFセーブデータ2
$30:6FF0$30:77E7セーブデータ3
$30:77E8$30:7FEFセーブデータ4

1つのセーブデータにセーブされるのは、$00:0A00$00:11F7の領域にあたる。
保存する必要があるデータが$00:0A00$00:11F7外にある場合、そのデータを$00:0A00$00:11F7内にコピーすることになるが、収まりきれない一部データ(主にシナリオフラグ関係のデータ)は圧縮して$00:0A00$00:11F7にコピーされ、セーブデータに保存される。
詳細はセーブデータのセーブ・ロードを参照。

フィールド

戦闘時の共通部分含む。

アドレス内容
$00:0000フィールド・コントローラ1のボタンを押した判定(合計値が入る)
Rボタン:$10 / Lボタン:$20 / Xボタン:$40 / Aボタン:$80
$00:0001フィールド・コントローラ1のボタンを押した判定(合計値が入る)
右:$01 / 左:$02 / 下:$04 / 上:$08 / スタートボタン:$10 / セレクトボタン:$20 / Yボタン:$40 / Bボタン:$80
$00:0002$00:0003フィールド・コントローラ2のボタン状況(本作では未使用)
$00:000Cマップ乱数計算用の値(戦闘中一時停止)
$00:000Dマップ乱数(戦闘中一時停止)
$00:002Dランダムエンカウント時 増加値(下4ビット)
$00:0036マップ乱数($00:000Dと同値)
$00:0070通常は$00、デモ画面は$01以上(変動)
$00:0107ランダムエンカウント時 危険度
$00:010B$00:01FF(※スタック領域。PHXPHYなどのニーモニックで値を一時的に記録するアドレス。詳細:65C816のスタック
$00:011Fランダムエンカウント時 エリア危険度
$00:013Dアイテム取得や使用時、該当アイテムのアイテムIDが入る
$00:014A~4C最終編 時のダンジョンの鐘の鳴った回数
$00:0160場面チェンジのエフェクト
$00=黒にフェードアウト/$02=白にフェードアウト/$04=モザイク/$05=丸囲み/$06=三角囲み(戦闘突入時)
$00:01A0$00:01A3味方キャラ1~4の移動時の状態?
$00:01A4$00:01A8味方キャラ1~4の移動時の状態?
$00:01A9マップ上移動速度 $10:通常歩き $20:ダッシュ $40:おぼろ丸のダッシュ
$00:01AE$00:01A9と同値?
$00:01B0ポゴが匂いを嗅いで、匂いに触れた時に出ている吹き出しの中身
$00:01BBランダムエンカウント時 危険度合計値
$00:01C0セリフ関係(テキスト呼び出し、吹き出し形状など)
$00:01C1吹き出しの位置と形状(吹き出しについている▽のマークの位置も)
$00:01C6$00:01C7セリフテキスト読み込み位置指定
$00:0200通常$00 フィールドでプレイヤーが操作できない時$01?(セリフ中や、敵シンボルと接触した時)
$00:020Aフィールド・コントローラ1のボタンを押した判定(合計値が入る)
右:$01 / 左:$02 / 下:$04 / 上:$08 / スタートボタン:$10 / セレクトボタン:$20 / Yボタン:$40 / Bボタン:$80
$00:0544$00:0545メニュー画面での現在のカーソル位置(十字ボタンで選択可能な画面における番号)
$00:054Dプレイ中のシナリオ番号
$00:054Fプレイ中のシナリオの主人公ID
$00:0565$00:0566メニュー画面 持ち物欄などでAボタンで何かを選んだ状態
$00:0567$00:0568メニュー画面 持ち物欄などでAボタンで何かを選んだ状態で更に他位置を選択
$00:0569$00:056Aメニュー画面 装備、持ち物、技、隊形、音声、セーブを選んだ時、それぞれ$0001$0006が入る
$00:0565現代編 対戦相手画面
(通常$FF、対戦相手を選ぶと値が入る。ナムキャット$00、エイジャ$01、トゥーラ・ハン$02、森部$03、モーガン$04、イヤウケア$05、オディ・オブライト$07
$00:0566は通常$FF、それ以外$00
$00:057Aメニュー画面・GDMA転送チャネルの設定の有無
$00:057D~$00:057Eメニュー画面・コントローラ1のボタン状態出力先
$00:06B9現代編 1番目に倒した対戦相手ID(1戦目終わるまでは$FF
$00:06BA現代編 2番目に倒した対戦相手ID(2戦目終わるまでは$FF
$00:06BB現代編 3番目に倒した対戦相手ID(3戦目終わるまでは$FF
$00:06BC現代編 4番目に倒した対戦相手ID(4戦目終わるまでは$FF
$00:06BD現代編 5番目に倒した対戦相手ID(5戦目終わるまでは$FF
$00:06BE現代編 6番目に倒した対戦相手ID(6戦目終わるまでは$FF
$00:06BF現代編 倒した対戦相手の人数累積($00$06
$00:0700$00:0920OAMへ転送するスプライト用データ
$00:0A00プレイ中のシナリオ 対応表
$00:0A01シナリオのクリア状況
(8ビットが各シナリオ対応。上の桁から順に中世、原始、SF、功夫、西部、現代、近未来、幕末)
$00:0A02~03現在居るエリアのID
(マップに対応した数値、シナリオ毎に異なる)
$00:0A05~07最終編 時のダンジョンの鐘の鳴った回数($00:014A$00:014Cのコピー)
$00:0A10最終編主人公 対応表
$00:0A112人目のシナリオ別キャラデータID
$00:0A123人目のシナリオ別キャラデータID
$00:0A134人目のシナリオ別キャラデータID
$00:0A14パーティの人数($00:1人、$01:2人、$02:3人、$03:4人)
$00:0A15心山拳老師&師範が誰か(功夫編・最終編のみ)
$00=老師 $01=ユン $02=レイ $03=サモ
$00:0A20キャラ1 移動中のX座標のマスとマスの間の位置?
$00:0A21キャラ1 マップのX座標(マス目)
$00:0A22キャラ2 移動中のX座標のマスとマスの間の位置?
$00:0A23キャラ2 マップのX座標(マス目)
$00:0A24キャラ3 移動中のX座標のマスとマスの間の位置?
$00:0A25キャラ3 マップのX座標(マス目)
$00:0A26キャラ4 移動中のX座標のマスとマスの間の位置?
$00:0A27キャラ4 マップのX座標(マス目)
$00:0A28キャラ1 移動中のY座標のマスとマスの間の位置?
$00:0A29キャラ1 マップのY座標(マス目)
$00:0A2Aキャラ2 移動中のY座標マスとマスの間の位置?
$00:0A2Bキャラ2 マップのY座標(マス目)
$00:0A2Cキャラ3 移動中のY座標マスとマスの間の位置?
$00:0A2Dキャラ3 マップのY座標(マス目)
$00:0A2Eキャラ4 移動中のY座標マスとマスの間の位置?
$00:0A2Fキャラ4 マップのY座標(マス目)
$00:0A34キャラ1 向き 下=$00/上=$01/左=$02/右=$03
$00:0A35キャラ2 向き 下=$00/上=$01/左=$02/右=$03
$00:0A36キャラ3 向き 下=$00/上=$01/左=$02/右=$03
$00:0A37キャラ4 向き 下=$00/上=$01/左=$02/右=$03
$00:0A38キャラ1 出入り口(0,0)との相対距離の移動中のX座標のマスとマスの間の位置?
$00:0A39キャラ1 出入り口(0,0)との相対距離のX座標(マス目) 左方向は$FF~、右方向は$01
$00:0A3Aキャラ2 出入り口(0,0)との相対距離の移動中のX座標のマスとマスの間の位置?
$00:0A3Bキャラ2 出入り口(0,0)との相対距離のX座標(マス目)
$00:0A3Cキャラ3 出入り口(0,0)との相対距離の移動中のX座標のマスとマスの間の位置?
$00:0A3Dキャラ3 出入り口(0,0)との相対距離のX座標(マス目)
$00:0A3Eキャラ4 出入り口(0,0)との相対距離の移動中のX座標のマスとマスの間の位置?
$00:0A3Fキャラ4 出入り口(0,0)との相対距離のX座標(マス目)
$00:0A40キャラ1 出入り口(0,0)との相対距離の移動中のY座標のマスとマスの間の位置?
$00:0A41キャラ1 出入り口(0,0)との相対距離のY座標(マス目) 上方向は$FF~、下方向は$01
$00:0A42キャラ2 出入り口(0,0)との相対距離の移動中のY座標マスとマスの間の位置?
$00:0A43キャラ2 出入り口(0,0)との相対距離のY座標(マス目)
$00:0A44キャラ3 出入り口(0,0)との相対距離の移動中のY座標マスとマスの間の位置?
$00:0A45キャラ3 出入り口(0,0)との相対距離のY座標(マス目)
$00:0A46キャラ4 出入り口(0,0)との相対距離の移動中のY座標マスとマスの間の位置?
$00:0A47キャラ4 出入り口(0,0)との相対距離のY座標(マス目)
$00:0A531人目のキャラの向き? 下=$00/上=$01/左=$02/右=$03
$00:0A541人目のキャラの座標?状態?
$00:0A551人目のキャラに対する2人目のキャラの相対距離?(移動中$00 ダッシュ$04 停止$80 向き変えで値変わる)
$00:0A561人目のキャラに対する3人目のキャラの相対距離?
$00:0A571人目のキャラに対する4人目のキャラの相対距離?
$00:0A60フィールド上BGM サウンドルームBGMとは異なる BGM一覧表
$00:0A61BGMの再生ピッチ?(通常$FF、「いいお天気でしょっ!」の夜バージョンは$60
$00:0AB0主人公の行動順-1
(以下$00:0AB3まで入る数値は$00$03のいずれか、味方キャラ順は加入順)
$00:0AB1味方キャラ1の行動順-1
$00:0AB2味方キャラ2の行動順-1
$00:0AB3味方キャラ3の行動順-1
$00:0AB1隊形で左の位置にいる味方キャラ
$00:0AB2隊形で右の位置にいる味方キャラ
$00:0AB3隊形で下の位置にいる味方キャラ
$00:0AB4$00:0AB5セーブ回数 下位バイト/上位バイト
999回($03E7)を越えると0に戻る
$00:0AC0$00:0AC1マップタイマー00~15のON・OFF
C0に下位バイト、C1に上位バイト
$00:0AC2$00:0AC3マップタイマー00~15関連フラグ値
C2に下位バイト、C3に上位バイト
$00:0AC5原始編・近未来編のシンボルエンカウントのON/OFF?
$00:0ACA$00:0ACBポゴがパーティにいる時のみ、匂いを嗅いだ時の漂う匂いの表示タイマー。
匂いを嗅ぐと、$00:0ACA$01$00:0ACB$68が入り、360フレーム(6秒)のカウントを行う
$00:0ACC原始編でポゴが匂いを嗅げる、かつシンボルエンカウントありエリアだと$01が入る
$00:0ACE主人公キャラID(最終編は$08で固定)対応表
$00:0AE0$00:0AE1マップタイマー00残り時間 下位バイト/上位バイト
$00:0AE2$00:0AE3マップタイマー01残り時間 下位バイト/上位バイト
$00:0AE4$00:0AE5マップタイマー02残り時間 下位バイト/上位バイト
$00:0AE6$00:0AE7マップタイマー03残り時間 下位バイト/上位バイト
$00:0AE8$00:0AE9マップタイマー04残り時間 下位バイト/上位バイト
$00:0AEA$00:0AEBマップタイマー05残り時間 下位バイト/上位バイト
$00:0AEC$00:0AEDマップタイマー06残り時間 下位バイト/上位バイト
$00:0AEE$00:0AEFマップタイマー07残り時間 下位バイト/上位バイト
$00:0AF0$00:0AF1マップタイマー08残り時間 下位バイト/上位バイト
$00:0AF2$00:0AF3マップタイマー09残り時間 下位バイト/上位バイト
$00:0AF4$00:0AF5マップタイマー10残り時間 下位バイト/上位バイト
$00:0AF6$00:0AF7マップタイマー11残り時間 下位バイト/上位バイト
$00:0AF8$00:0AF9マップタイマー12残り時間 下位バイト/上位バイト
$00:0AFA$00:0AFBマップタイマー13残り時間 下位バイト/上位バイト
$00:0AFC$00:0AFDマップタイマー14残り時間 下位バイト/上位バイト
$00:0AFE$00:0AFFマップタイマー15残り時間 下位バイト/上位バイト
$00:0B01$00:0BFFアイテム欄に入っているアイテムID(最終編)
$00:0B01$00:0B27アイテム欄に入っているアイテムID(中世編)
$00:0B28$00:0B4Cアイテム欄に入っているアイテムID(原始編)
$00:0B4D$00:0B66アイテム欄に入っているアイテムID(西部編)
$00:0B67$00:0B88アイテム欄に入っているアイテムID(幕末編)
$00:0B89$00:0BBBアイテム欄に入っているアイテムID(近未来編)
$00:0BBD$00:0BE0アイテム欄に入っているアイテムID(功夫編)
$00:0BF5$00:0CF9アイテム欄に入っているアイテムID(SF編)
$00:0C01$00:0CFFアイテム欄に入っているアイテムIDの各個数(最終編)
$00:0C01$00:0C27アイテム欄に入っているアイテムIDの各個数(中世編)
$00:0C28$00:0C4Cアイテム欄に入っているアイテムIDの各個数(原始編)
$00:0C4D$00:0C66アイテム欄に入っているアイテムIDの各個数(西部編)
$00:0C67$00:0C88アイテム欄に入っているアイテムIDの各個数(幕末編)
$00:0C89$00:0CBBアイテム欄に入っているアイテムIDの各個数(近未来編)
$00:0CBD$00:0CE0アイテム欄に入っているアイテムIDの各個数(功夫編)
$00:0CF5$00:0DF9アイテム欄に入っているアイテムIDの各個数(SF編)
$00:0D00$00:0FBF【戦闘・マップ共通】シナリオ別キャラデータ(詳細後述)
$00:0F92幕末編における忍者(2人組)の遭遇数$00~$06
(戦闘開始直後に増加、「逃げる」コマンド選択時に増えた分だけ減少。$00:$0F9Fまで同じ)
$00:0F93虚無僧の遭遇数$00~$03
$00:0F94奴の遭遇数$00~$0A
$00:0F95浪人の遭遇数$00~$0A
$00:0F96藩士の遭遇数$00~$07
$00:0F97強藩士の遭遇数$00~$0A
$00:0F98外人の遭遇数$00~$02
$00:0F99商人の遭遇数$00~$04
$00:0F9A家老の遭遇数$00~$05
$00:0F9B忍者(1人)の遭遇数$00~$08
$00:0F9Cくの一の遭遇数$00~$04
$00:0F9D腰元の遭遇数$00~$09
$00:0F9F忍者(4人組)の遭遇数$00~$08
$00:10E5最終編の戦闘時のBGM
$00:10FE$00:10FF$00:1300$00:130Fを8ビット区切りで圧縮したデータ(セーブデータ保存用、セーブ時更新)
$00:11D0$00:11EF$00:1200$00:12FFを8ビット区切りで圧縮したデータ(セーブデータ保存用、セーブ時更新)
$00:11F0イベントカウンター用メモリ(シナリオによりカウントする値は変わる)
$00:1200$00:12FF【戦闘・マップ共通】シナリオ進行フラグ(詳細はシナリオ進行フラグページ参照)
$00:1300$00:1301心山拳伝承者 下位バイト/上位バイト
$0001ならユン、$0100ならレイ、$0000だとサモ
$00:1303初期値$00、西部編最後のマッドドッグとの戦闘で逃げると$01
$00:1304初期値$00、幕末編最後の選択肢で「面白い」を選ぶと$01
$00:1D00サウンドデータ転送ステータス$00:2140記録用【戦闘・マップ共通】
$00:1D01サウンドデータサイズ$00:2141記録用【戦闘・マップ共通】
$00:1D02$00:1D03転送先アドレス2バイト($00:2142$00:2143)記録用【戦闘・マップ共通】
$00:1D05現在のBGM【戦闘・マップ共通】 BGM一覧表
$00:1DE2現在のBGM【戦闘・マップ共通】 BGM一覧表
$7E:2A00$7E:2A3Fメニュー→装備で、該当キャラのシナリオ別キャラデータがそのまま入る($23のみ例外、異なる値が入る)
$7E:2F3C文字入力画面 ページ数($00~、シナリオなどにより最大ページ数は変動)
$7E:2F40文字入力画面 X軸のカーソル位置 左上座標を(0,0)とする。横方向は11文字。$00$0A
$7E:2F42文字入力画面 Y軸のカーソル位置 左上座標を(0,0)とする。縦方向は9文字。$00$08
$7E:2F44文字入力画面 入力した文字数(1文字で+2) $00$0C
$7E:2F46$7E:2F47文字入力画面 入力欄1文字目(2バイト)
$7E:2F48$7E:2F49文字入力画面 入力欄2文字目(2バイト)
$7E:2F4A$7E:2F4b文字入力画面 入力欄3文字目(2バイト)
$7E:2F4C$7E:2F4d文字入力画面 入力欄4文字目(2バイト)
$7E:2F4E$7E:2F4f文字入力画面 入力欄5文字目(2バイト)
$7E:2F50$7E:2F51文字入力画面 入力欄6文字目(2バイト)
$7E:3800$7E:39FFカラーパレットのデータ コピー先
$7E:8000$7E:81FFカラーパレットのコピー先アドレス
$7E:8A00$7E:8AC6文字入力画面 文字コード(1文字2バイト、左上から右下へ、横11文字分、縦9文字分)
$7E:8A00$7E:8AFFメニュー画面>持ち物欄 整頓時アイテムIDコピー用アドレス
$7E:8B00$7E:8BFFメニュー画面>持ち物欄 整頓時アイテム所持数コピー用アドレス
$7E:8C00$7E:8DFFメニュー画面用カラーパレットのデータ コピー先
$7E:901D戦闘開始時に場の属性が決まっているエリアだと属性の値が入る
$7E:C000$7E:CE7Fキャラのスプライトデータ コピー先
シナリオID対応表
シナリオIDキャラクター
中世$00オルステッド
原始$01ポゴ
SF$02キューブ
功夫$03心山拳老師
西部$04サンダウン
現代$05高原日勝
近未来$06アキラ
幕末$07おぼろ丸
最終$08-
BGM一覧表

タイトルはサウンドトラックに準拠。
(「いいお天気でしょっ!」の夜バージョンなど、一部楽曲のスローテンポな曲は原曲の再生ピッチを変更して流しているらしい)

IDタイトル
$00無音(BGMなし)
$01魔王への叙曲
$02凛然たる戦い
$03忍音
$04WANDERER
$05殺陣!
$06THE WILDS
$07UNDER THE FAKE
$08UNSEEN SYNDROME
$09NATIVE LIFE
$0AWAIT FOR TRUTH
$0BPSYCHOで夜露死苦!!
$0C猛者達…
$0D鳥児在天空飛翔 魚児在河里游泳
$0E在中国的戦闘
$0F効果音(幕末編・天井裏カラクリ音)
$10KNOCK YOU DOWN!
$11効果音(馬が走る音)
$12効果音(SF編・宇宙船内)
$13効果音(近未来編・港)
$14老拳師下深山
$15いいお天気でしょっ!
$16KISS OF JEALOUSY
$17密命
$18GO!GO!ブリキ大王!!
$19届かぬ翼
$1A魔王山を往く
$1B魔王オディオ
$1CPURE ODIO
$1D効果音(アキラ レベルアップ音)
$1E効果音(木魚のポクポク音)
$1F効果音(風の吹く音)
$20効果音(キューブの機械音)
$21効果音(オルステッド レベルアップ音)
$22効果音(おぼろ丸 レベルアップ音)
$23効果音(サモ・ユン レベルアップ音・アチョーボイス)
$24効果音(レイ レベルアップ音・ボイス)
$25SELECT・A・LIVE
$26効果音(ポゴ レベルアップ音・ボイス)
$27効果音(ゴリのボイス/馬のいななき 兼用)
$28効果音(高原日勝 レベルアップ音・ボイス)
$29効果音(サンダウン レベルアップ音・銃声)
$2A効果音(近未来編・木琴)
$2BMEGALOMANIA
$2C効果音(強風の吹く音)
$2D効果音(SF編/近未来編・パソコン効果音)
$2E効果音(近未来編・筑波研究所最奥)
$2F効果音(功夫編 銅鑼)
$30効果音(西部編 鐘)
$31効果音(幕末編 アイテム入手時)
$32効果音(原始編 ウホウホ)
$33最強-VICTORY ROAD-
$34LIVE・A・LIVE
$35CRY・A・LIVE
$36WARM・A・LIVE
$37絶望の都
$38Sancho・de・Los・Panchoz
$39効果音(マラカス)
$3A効果音(各シナリオ開始時の低い音)
$3B原始編・宴(リメイク版の「生贄の宴」)
$3CSilent Labyrinth
$3DARMAGEDDON
$3ECAPTAIN SQUARE
$3F星屑のキャプテン
$40効果音(近未来編・オルガン むすんでひらいて)
$41効果音(近未来編・オルガン 猫ふんじゃった)
$42効果音(近未来編・オルガン トッカータとフーガ)
$43効果音(近未来編・オルガン チョコボのテーマ)
$44Live over Again
$45Live for Live
$46効果音(崩壊)
$47効果音(SF編・警告音)
$48効果音(功夫編・夜 虫の音)
$49CAPTAIN SQUARE
$4A効果音(ゲーム開始時「SQUARE SOFT」ボイス)
$4BILLUSION…
$4CVersus!
$4D原始編・宴 ボイスのみ
$4E以降は無音

共通

マップ・戦闘どちらでも共通して値が読み書きされるあたりのアドレス。
他にもあるが、重要そうなあたりを。

シナリオ進行フラグは量が膨大になるため、ページを分けた。

シナリオ別キャラデータ

$7E:0D00$7E:0FBFに入る、各シナリオのキャラ用データ。
1キャラあたり64バイトの容量がある。
戦闘中もそれ以外も同じアドレスに入っている。
主人公+仲間3キャラのIDは順に$7E:0A10, $7E:0A11, $7E:0A12, $7E:0A13に入る(加入順?)

最終編以外は、主人公キャラのID・$08$09$0Aという順で上のアドレスに入ることになるが、最終編は各シナリオの主人公たちがパーティに加わった時点で2人目以降の値が更新されていく。

IDアドレス原始SF功夫西部現代近未来幕末中世最終
$00$7E:0D00-------オルステッドオルステッド
$01$7E:0D40ポゴ-------ポゴ
$02$7E:0D80-キャプテン
スクウェア
/キューブ
------キューブ
$03$7E:0DC0--心山拳老師-----心山拳師範
$04$7E:0E00---サンダウン----サンダウン
$05$7E:0E40----高原 日勝---高原 日勝
$06$7E:0E80-----アキラ--アキラ
$07$7E:0EC0------おぼろ丸-おぼろ丸
$08$7E:0F00ゴリ-ユン・ジョウマッドドッグ-タロイモとらわれの男ストレイボウ-
$09$7E:0F40べる-レイ・クウゴ--無法松カラクリ丸ウラヌス-
$0A$7E:0F80ざき-サモ・ハッカ--ブリキ大王-ハッシュブリキ大王
シナリオ別キャラデータの64バイト分データ

便宜上、64バイト分のデータに$00$3Fと番号を付けた。
空欄は筆者には不明な部分。

数値内容
$00キャラID(ブリキ大王は$40
$01 
$02右装備の追加効果の値(=アイテムデータ15、戦闘開始時に更新される)
$03 
$04$04を下位バイト、$05を上位バイトとした4桁の値+$D50000に、
味方キャラデータがそっくり入っている
$05
$06レベル
$07 
$08現在HP(下位バイト)
$09現在HP(上位バイト)
$0A最大HP(下位バイト)
$0B最大HP(上位バイト)
$0C前に出した技
$0D覚えた技(下位バイト)技00~07を2進数で表す
$0E覚えた技(上位バイト)技08~15を2進数で表す
$0F 
$10力(力+装備上昇分)
$11
$12力(装備上昇分)
$13速(速+装備上昇分)
$14
$15速(装備上昇分)
$16体(体+装備上昇分)
$17
$18体(装備上昇分)
$19知(知+装備上昇分)
$1A
$1B知(装備上昇分)
$1C側面補正
$1D背面補正
$1E経験値
$1F
$20無効状態異常
$21キャラ自身の回避属性(下位バイト)
$22キャラ自身の回避属性(上位バイト)
$23 
$24頭装備
$25右装備
$26左装備
$27体装備
$28足装備
$29アクセサリー1
$2Aアクセサリー2
$2Bアクセサリー3
$2Cアクセサリー4
$2Dアクセサリー5
$2E(味方キャラデータ42 全キャラ$00)
$2F防御合計値(初期値は味方キャラデータ43)
$30
$31フィールド吸収(下4ビット、$1:電/$2:火/$4:毒/$8:水 の合計値)
$32装備の回避属性(下位バイト)
$33装備の回避属性(上位バイト)
$34名前1文字目
$35名前2文字目
$36名前3文字目
$37名前4文字目
$38名前5文字目
$39名前6文字目
$3A名前7文字目
$3B名前8文字目
$3C名前9文字目
$3D名前10文字目
$3E名前11文字目
$3F名前12文字目

名前の文字については、文字データを参照のこと。

戦闘

戦闘中のアドレスと内容について。
$00:0???はバンク$7Eではなくバンク$00で呼び出されるのがほとんど。
$7E:9000~以降は、ほとんどの場合、計算用に他アドレスからコピーした値や、計算途中の値が入る。

戦闘全体に関する値
アドレス内容
$00:0041戦闘時の背景番号
$00:0043「逃げる」が有効な戦闘は$00、無効な戦闘は$01
$00:0338戦闘用乱数4(新たな乱数を計算するための値)
$00:0339戦闘用乱数3(新たな乱数を計算するための値)
$00:033A戦闘用乱数2(新たな乱数を計算するための値)
$00:033B戦闘用乱数1(現在の乱数)
$00:0344コントローラ1のボタンを押した判定(合計値が入る)
Rボタン:$10 / Lボタン:$20 / Xボタン:$40 / Aボタン:$80
$00:0345コントローラ1のボタンを押した判定(合計値が入る)
右:$01 / 左:$02 / 下:$04 / 上:$08 / スタートボタン:$10 / セレクトボタン:$20 / Yボタン:$40 / Bボタン:$80
$00:0348~$00:0349コントローラ2のボタン状態出力先(本作未使用)
$00:034C$00:0344内ボタンの、何かを操作した時の押したボタンを記録
$00:034D$00:0345内ボタンの、何かを操作した時の押したボタンを記録
$00:0354戦闘開始時にセット $00:0041の上6ビット
$00:0355敵パーティレベル
$00:0356操作キャラがブリキ大王かどうか(ブリキ大王操作時は$01、それ以外は$00
$00:0358上位バイトはアイテムドロップ率計算用数値、下位バイトは敵の総数
$00:035A$00:035B味方行動順の値(2バイト)
1人目から順に、$1C00, $1C40, $1C80, $1CC0が入る
$00:0378$00:0379攻撃中の敵0~Eに対応したアドレス
1Bx0が2バイトで入る(アドレス呼び出し用)
$00:03AE行動ポイント(下位バイト)
$00:03AF行動ポイント(上位バイト)
$00:036Cステータス復元用計算値(Yで$40、向き変えで$20
$00:036Dステータス復元用計算値(技使用中$10)
$00:03E6戦闘コマンドにおけるカーソル位置(初期位置$00、技一覧やアイテム一覧でも)
$00:0488$00:04BE戦闘フィールドマスの計算用アドレス
$00:04C8$00:04FF戦闘フィールドマスの状態(後述)
$7E:0700$7E:0920OAMへ転送するスプライト用データ
$7E:8000$7E:8200カラーパレットのコピー先アドレス
$7E:9009技使用時 技データ13 上4ビット:周囲攻撃2、反撃専用4、回復8/下4ビット:技の属性
$7E:900A技使用時 技データ22 上4ビット:ダメージフィールド/下4ビット:上4ビットが8以上の時、行動異常の値
$7E:900B技使用時 技データ10 上8ビット-下2ビット:LV差係数/下2ビット:敵依存ステータス・防御力依存係数
$7E:900C技使用時 使用者のレベル(現在値)
$7E:9010$7E:9028技使用時 該当技の技データ00~24が入る(次技使用直前まで値が残る)
$7E:9100原始編・ざき3戦目のみ ポゴの攻撃が命中した回数(4回目を当てた直後に戦闘が強制終了する)
$7E:9200~現代編・幕末編・功夫編修行 敵が使った技または心山拳老師が使った技(命中時)のIDが順に入る。$7E:9200の初期値は$00
(ラーニング判定用。敵/老師が技を使う度に、$7E:9200から順に$00が書き込まれたアドレスの値をチェックして、被っていないのなら敵/老師の使用技ID+次のアドレスに$00を書き込む)
$7E:A0??戦闘中、各技特有の一時的な値の記録アドレス
$7E:A010$7E:A011現代編ワタナベイベント判定用の計算値(「カミツキ(青)」使用時のみ0以外が入る)
$7E:A01Aサモの「ほいこーろー」のSTEP数が蓄積される
$7E:A01D現代編ワタナベイベントのエイジャの向き判定 左上向きは$79、それ以外は$38
$7E:B005$7E:B5FB表示する文字列のビットマップデータ(文字の画像データ)コピー先
$7E:D000$7E:DFFF戦闘中のキャラスプライト(元データからのコピー)
$7E:F980$7E:F99E技用のカラーパレットコピー先
$7E:FEF0戦闘中タイマー(下位バイト)
$7E:FEF1戦闘中タイマー(上位バイト)
$7E:FEFA通常$00、ハルマゲドンコマンドONの時$FFが入る
$7E:FEFB通常$00、最終編ラストバトルの7つの像の部屋の7連戦のみ$01
$7E:FEFDターン数(フィールドダメージ発動計算用。リセット時に0、メニュー開いても0、戦闘をまたいでも引き継ぎ)
$7E:FF00$7E:FF60表示する文字列のデータコピー先
$00:04C8$00:04FEの戦闘フィールドについて

戦闘フィールドは7×7マスで構成されているが、各マスに対応したアドレスは以下の通り。
$00:04????の値部分のみ記している。
各アドレスに、現在居るキャラクターと、ダメージフィールド状態が記録される。

C8C9CACBCCCDCECF
D0D1D2D3D4D5D6D7
D8D9DADBDCDDDEDF
E0E1E2E3E4E5E6E7
E8E9EAEBECEDEEEF
F0F1F2F3F4F5F6F7
F8F9FAFBFCFDFEFF

一番右の灰色背景部分は実際には戦闘フィールドではないため、$00が入っている。
プログラミング上、7という数字はキリが悪いので、横8×縦7でアドレスを設定しているようである。

各アドレスに入る数値は、何もなければ$00、それ以外はキャラクターの数値+ダメージフィールド状態の合計値になる。
敵が複数マスにまたがっている場合は該当マスに同じ数値が入る。

数値内容
$01味方キャラ1
$02味方キャラ2
$03味方キャラ3
$04味方キャラ4
$11敵キャラ0
$12敵キャラ1
$13敵キャラ2
$14敵キャラ3
$15敵キャラ4
$16敵キャラ5
$17敵キャラ6
$18敵キャラ7
$19敵キャラ8
$1A敵キャラ9
$1B敵キャラA
$1C敵キャラB
$1D敵キャラC
$1E敵キャラD
$1F敵キャラE
$80水フィールド
$A0毒フィールド
$C0火炎フィールド
$E0電撃フィールド
戦闘中の味方キャラデータ

戦闘時に読み書きされるアドレス。
最大4キャラ分のデータ領域。各64バイト。

味方キャラ番号アドレス
1$7E:1C00$7E:1C3F
2$7E:1C40$7E:1C7F
3$7E:1C80$7E:1CBF
4$7E:1CC0$7E:1CFF

各キャラに入る64バイト分のデータは以下の通り。
便宜上、64バイト分のデータに$00$3Fと番号を付けた。
空欄は筆者には不明な部分。

数値内容
$00味方キャラID
$01戦闘状態
$00:戦闘離脱 $20:味方キャラ敵対 $40:敵操作状態 $FF:通常)
$02 
$03シナリオ別キャラデータ開始アドレス(下位バイト)
$04シナリオ別キャラデータ開始アドレス(上位バイト)
$05技関係状態
$00:通常 $40:タメ時間中 $F0:技を出している最中
$06タメ時間ありの技発動までの時間
$07実行しようとしている技のタメ時間
$08 
$09 
$0A 
$0B 
$0C 
$0D 
$0E 
$0F 
$10キャラの位置のX軸(ピクセル単位・後述) 下位バイト
$11キャラの位置のX軸(ピクセル単位・後述) 上位バイト
$12キャラの位置のY軸(ピクセル単位・後述) 下位バイト
$13キャラの位置のY軸(ピクセル単位・後述) 上位バイト
$14ひとつ前の技(初期値$00の時にXボタンで前の技を選ぶと初期技を選択)
$15 
$16 
$17 
$18キャラ位置のマス目のX座標(左から$00$06
$19キャラ位置のマス目のY座標(上から$00$06
$1A途中計算用X座標
$1B途中計算用Y座標
$1C 
$1D向き(右下00/左下01/右上02/左上03
$1E 
$1F 
$20戦闘中に経験値が増える行動をしたかのフラグ。行動なし:$00 行動あり:$80
$21 
$22 
$23 
$24 
$25 
$26 
$27 
$28技の範囲指定~使用中、キャラ位置のマス目のX座標
$29技の範囲指定~使用中、キャラ位置のマス目のY座標
$2A 
$2B 
$2C 
$2D無効状態異常
$2ELV(現在値) - 背面補正(減算結果が負の場合は0)
$2F 
$30力(通常値)
$31速(通常値)
$32体(通常値)
$33知(通常値)
$34力(現在値)
$35速(現在値)
$36体(現在値)
$37知(現在値)
$38LV(現在値)
$39状態異常
$3A被ダメージ/回復量のヒット数
$3Bヒット数
$3C被ダメージの単発値(下1バイト)
$3D被ダメージの単発値(上1バイト)
$3E 
$3F 
キャラのピクセル単位の位置について

味方キャラが戦闘フィールドのどの位置に居るかを記録しているアドレスは、上の通りに$10$12$18~19に入る。
$18~19は、マス目を単位としており、$18は横方向(X座標・左から$00~$06)、$19は縦方向(Y座標・上から$00~$06)である。

$10$12だが、マス目ではなく、ゲーム画面の戦闘フィールド上のピクセル単位、つまりドット数での位置を示していると思われる。
スーパーファミコンの解像度は横256×縦224ピクセルで、戦闘フィールドは横32ピクセル×7マス(合計224ピクセル)、縦24ピクセル×7マス(合計168ピクセル)である。
16進数にすると、1マスのサイズは、横$20ピクセル、縦$18ピクセルで、戦闘フィールド全体は横$E0ピクセル、縦$A8ピクセルになる。

戦闘フィールド

$10に入る値は、戦闘フィールド左隅からの、該当キャラのドット絵の中心位置(単位ピクセル)になる。
$12に入る値は、戦闘フィールド上隅からの、該当キャラのドット絵の中心位置(単位ピクセル)になる。
例えば該当キャラが、左から2マス、上から3マスの位置に居る場合は、下図のようになる。

戦闘フィールド キャラが左から2マス、上から3マスの位置に居る

キャラの中心位置までの距離なので、横は$60ピクセル、縦は$3Cピクセル。
味方キャラデータ$10に入る値は$60、味方キャラデータ$12に入る値は$3Cということになる。

この値はピクセル単位で記録されているため、たとえばキャラが移動中、マス目とマス目の間にいる時はその値がフレーム単位(リアルタイム)で更新される。
また、ダメージをくらった時、キャラが左右に小さく動くモーションがあるが、この時にも横軸(X軸)にあたる味方キャラデータ$10の数値が少し動く。

以上から、マス目単位の味方キャラデータ$18$19は、向きや方向、位置を考慮した上でのダメージ量計算やターゲット計算などに用いられ、ピクセル単位でキャラの位置を記録する味方キャラデータ$10$12は、キャラのドット絵、技のモーションやエフェクトなどの表示位置計算に使っているのだろう、ということが推測できる。

味方キャラの技ID&関連ステータス

最大16種類の技、$00$0Fとしておく。

味方キャラ番号アドレス
1$7E:E900$7E:E93F
2$7E:E940$7E:E97F
3$7E:E980$7E:E9BF
4$7E:E9C0$7E:E9FF

例えば味方キャラ1の場合、以下のようにアドレスに値が入る。
技データ08は該当技が出せなくなる状態異常、技データ14~技データ15は反撃属性2バイト。
また、ラーニングなどでも技習得が可能な、レベル順に技を習得しないキャラの場合、アドレスは低い順に詰めて記録されていく(戦闘中の技一覧と同期している)。よって技LVとアドレスが必ずしも一致しない場合があるので注意。

技LV技ID技データ08技データ14技データ15
+反撃専用の値
00$7E:E900$7E:E910$7E:E920$7E:E930
01$7E:E901$7E:E911$7E:E921$7E:E931
02$7E:E902$7E:E912$7E:E922$7E:E932
03$7E:E903$7E:E913$7E:E923$7E:E933
04$7E:E904$7E:E914$7E:E924$7E:E934
05$7E:E905$7E:E915$7E:E925$7E:E935
06$7E:E906$7E:E916$7E:E926$7E:E936
07$7E:E907$7E:E917$7E:E927$7E:E937
08$7E:E908$7E:E918$7E:E928$7E:E938
09$7E:E909$7E:E919$7E:E929$7E:E939
10$7E:E90A$7E:E91A$7E:E92A$7E:E93A
11$7E:E90B$7E:E91B$7E:E92B$7E:E93B
12$7E:E90C$7E:E91C$7E:E92C$7E:E93C
13$7E:E90D$7E:E91D$7E:E92D$7E:E93D
14$7E:E90E$7E:E91E$7E:E92E$7E:E93E
16$7E:E90F$7E:E91F$7E:E92F$7E:E93F

※「技データ15+反撃専用の値」は、技データ15の上7ビット + 技データ13の上2ビット目に入っている反撃専用か否かの1ビット

味方キャラの状態

$7E:EA??は、計算途中の値なども含めた、味方キャラの状態に関する値が入る。各キャラ64バイト。

味方キャラ番号アドレス
1$7E:EA00
2$7E:EA40
3$7E:EA80
4$7E:EAC0
アドレス下2桁内容
$00首かため継続時間
$01足かため継続時間
$02腕かため継続時間
$03毒継続時間
$04マヒ継続時間
$05眠り継続時間
$06酔い継続時間
$07石化継続時間。0になっても石化は回復しない。
$20被ダメージ/回復量のヒット数
$2E~$2F被ダメージ/回復量の総ダメージ/回復量
$35回避属性判定
敵の種類

戦闘では最大4種類の敵が出現する。
最大4種類分のデータ領域。各64バイト。

敵種類アドレス
1$7E:1A00$7E:1A3F
2$7E:1A40$7E:1A7F
3$7E:1A80$7E:1ABF
4$7E:1AC0$7E:1AFF
数値内容
$00敵ID
$01該当の敵が居るなら$FF、居ないなら$00
$02 
$03 
$04横の幅
$05縦の幅
$06 
$07 
$08 
$09 
$0A 
$0Bレベル
$0C 
$0D 
$0E 
$0F 
$10HP
10を下位バイト、11を上位バイトとした4桁の値
$11
$12技1の反撃属性1
$13技2の反撃属性1
$14技3の反撃属性1
$15技4の反撃属性1
$16技1の反撃属性2
$17技2の反撃属性2
$18技3の反撃属性2
$19技4の反撃属性2
$1A技1が使用不可になるステータス異常
$1B技2が使用不可になるステータス異常
$1C技3が使用不可になるステータス異常
$1D技4が使用不可になるステータス異常
$1E 
$1F 
$20敵データ00 移動パターン
$21敵データ01 上4ビット:フィールド吸収/下4ビット:移動頻度
$22敵データ02 (データアドレス呼び出しの値)
$23敵データ03 (データアドレス呼び出しの値)
$24敵データ04 HP *$80以上の時は、実際のHP = (敵データ04 & $7F) * $10
$25敵データ05 力
$26敵データ06 速
$27敵データ07 体
$28敵データ08 知
$29敵データ09 上1ビット:使用技を敵技IDから取得するなら0、味方技IDから取得するなら1/下7ビット:レベル
$2A敵データ10 無効状態異常
$2B敵データ11 使用技1 技ID 敵データ09上1ビットが0なら敵技ID/1なら味方技ID、以下敵データ14まで同じ
$2C敵データ12 使用技2 技ID
$2D敵データ13 使用技3 技ID
$2E敵データ14 使用技4 技ID
$2F敵データ15 タイプ
$30敵データ16 カウンター行動異常 手/足
$31敵データ17 カウンター行動異常 突/鋭
$32敵データ18 カウンター行動異常 鈍/締
$33敵データ19 カウンター行動異常 飛/背
$34敵データ20 カウンター行動異常 火/水
$35敵データ21 カウンター行動異常 風/土
$36敵データ22 カウンター行動異常 精/善
$37敵データ23 カウンター行動異常 悪/無 ※下1桁(4ビット)はそのまま種族の値
$38敵データ24 ドロップアイテム1
$39敵データ25 ドロップアイテム2
$3A敵データ26 ドロップアイテム3
$3B敵データ27 ※未使用データ
$3C敵データ28 ※未使用データ
$3D敵データ29 背後補正/側面補正
$3E敵データ30 回避属性 8ビットが手足突鋭鈍締飛背に対応
$3F敵データ31 回避属性 8ビットが火水風土精善悪無に対応
敵0~Eのデータ

敵は最大で15体出現する。便宜上、0~Eと番号を振ってある。
最大15キャラ分のデータ領域。
なお、戦闘に入った時、前の敵データを消さずに上書きするだけらしく、例えば敵パーティが4体の戦闘の後に敵パーティが2体の戦闘になった時、敵0と敵1のデータは上書き更新されるが、前の戦闘の敵2と敵3のデータは残ったまま。

$7E:AB??~以降は、ほとんどの場合、計算用に他アドレスからコピーした値や、計算途中の値が入る。
計算途中の値であるため、数フレームの間しか値が入らない、または入ってもすぐに変動することも多い。

敵キャラアドレス
0$7E:1B00$7E:1B0F, $7E:AA00$7E:AA0F, $7E:AB00
1$7E:1B10$7E:1B1F, $7E:AA10$7E:AA1F, $7E:AB10
2$7E:1B20$7E:1B2F, $7E:AA20$7E:AA2F, $7E:AB20
3$7E:1B30$7E:1B3F, $7E:AA30$7E:AA3F, $7E:AB30
4$7E:1B40$7E:1B4F, $7E:AA40$7E:AA4F, $7E:AB40
5$7E:1B50$7E:1B5F, $7E:AA50$7E:AA5F, $7E:AB50
6$7E:1B60$7E:1B6F, $7E:AA60$7E:AA6F, $7E:AB60
7$7E:1B70$7E:1B7F, $7E:AA70$7E:AA7F, $7E:AB70
8$7E:1B80$7E:1B8F, $7E:AA80$7E:AA8F, $7E:AB80
9$7E:1B90$7E:1B9F, $7E:AA90$7E:AA9F, $7E:AB90
A$7E:1BA0$7E:1BAF, $7E:AAA0$7E:AAAF, $7E:ABA0
B$7E:1BB0$7E:1BBF, $7E:AAB0$7E:AABF, $7E:ABB0
C$7E:1BC0$7E:1BCF, $7E:AAC0$7E:AACF, $7E:ABC0
D$7E:1BD0$7E:1BDF, $7E:AAD0$7E:AADF, $7E:ABD0
E$7E:1BE0$7E:1BEF, $7E:AAE0$7E:AAEF, $7E:ABE0
アドレス内容
$1B00敵ID
$1B01戦闘状態
$00:戦闘離脱 $20:敵キャラをプレイヤーが操作 $40:味方キャラが敵状態 $80:敵総数+1の敵番号 $FF:通常
$1B02 
$1B03
$1B04向き(右下$00/左下$40/右上$80/左上$C0
$1B05技関係状態
$00:通常 $40:タメ時間中 $80:移動中 $F0:技を出している最中
$1B06実行中の技のタメ時間(残り時間)
$1B07行動状態
$1B08途中計算用のマス目のX座標(左から$00$06)※敵の左上マス基準
$1B09途中計算用のマス目のY座標(上から$00$06)※敵の左上マス基準
$1B0A現在のキャラ位置のマス目のX座標(左から$00$06)※敵の左上マス基準
$1B0B現在のキャラ位置のマス目のY座標(上から$00$06)※敵の左上マス基準
$1B0Cキャラの位置のX軸(ピクセル単位) 下位バイト
$1B0Dキャラの位置のX軸(ピクセル単位) 上位バイト
$1B0Eキャラの位置のY軸(ピクセル単位) 下位バイト
$1B0Fキャラの位置のY軸(ピクセル単位) 上位バイト
$AA00現在HP
00を下位バイト、01を上位バイトとした4桁の値
$AA01
$AA02行動異常
$AA03力(現在値)
$AA04速(現在値)
$AA05体(現在値)
$AA06知(現在値)
$AA07状態異常
$AA08首かため回復までの残り時間
$AA09足かため回復までの残り時間
$AA0A腕かため回復までの残り時間
$AA0B毒回復までの残り時間
$AA0Cマヒ回復までの残り時間
$AA0D眠り回復までの残り時間
$AA0E酔い回復までの残り時間
$AA0F石化すると値がつく
$AB00LV(現在値)
$AB01攻撃/回復技の対象の範囲内にいる敵には順に$01~が入り、範囲外だと$FFが入る。
$AB02被ダメージ/回復量のヒット数
$AB03ヒット数(倒れるか999以上の時$FF?)
$AB04$AB05被ダメージの単発値(2バイト)※被ダメージは技だけでなくフィールドダメージなども含む
$AB06 
$AB07 
$AB08行動異常(計算用)
$AB09状態異常(計算用)
$AB0Aレベル現在値(向き補正込みの計算値)
$AB0B向き補正(正面:$00, 側面:$01, 背面:$80)
$AB0C状態異常(技によって発生した値、これと既に発生している状態異常を加算する)
$AB0D 
$AB0E 
$AB0F 
$AC00使用技(決定前)
$AC02$AC03技の範囲指定~使用中、キャラ位置のマス目のY/X座標
$AC04$AC05順序ポイント(2バイト)
$AC07移動または向き変え時、相対位置判定で一番近い位置の味方キャラ番号
$AD00$AD01被ダメージの総ダメージ量(2バイト)


このページをシェアする

上へ