基礎知識
戦闘関係
この項目は、以下ウェブサイト様などを参考にさせていただきました。
ここでは、「ライブ・ア・ライブ」の内部データのどこに何があるのか、つまりデータマップ及び、ゲームプレイ中のメモリマップを紹介する。
上記ウェブサイト様から引用したデータも数多く、先達の皆様に深く感謝する次第である。
筆者のプログラミング知識の不足ゆえに、誤りがある可能性も高いことをご了承いただきたい。
未調査の部分も多く、今後追記するかもしれない。
「ライブ・ア・ライブ」は、容量が「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)である。
また、まったく同じデータが入っている(ミラーリング)箇所も多い。
例えばバンク$00~$7Dは、バンク$80~$FDでミラーリングなので、大雑把に言えば、スーパーファミコンのメモリ領域を半分で区切り、前半部を後半部でミラーリングしているようなものである。
なぜ同じデータをミラーリングするのかだが、ゲームプレイの最中、ゲーム内部では各種データの読み込みや書き込みをしつつ様々な計算を行うことになる。
読み込み・書き込みをする時、次に探したいデータの位置が近くにある方が素早くアクセスできる。
ミラーリングにより同じデータを散らし、近い位置のアドレスからより速く読み書きできるようにしている、らしい。
そういう理由から、ゲームプレイ中は頻繁に使われる一部データが更にミラーリングされていることもある。
「ライブ・ア・ライブ」は、スーパーファミコンのメモリの、
$00~$1F(ミラーリング:$80~$1F)のアドレス$8000~$FFFF$40~$5F(ミラーリング:$C0~$DF)のアドレス$0000~$FFFFに、ゲームデータが入っていると述べた通りだが、筆者にわかる範囲でどこに何があるか記す。
画像・音関係については未調査なので、非常に大雑把である。
詳しくはわからないが同じ文字でひたすら埋まっている箇所もあり、おそらくは未使用のアドレス部分なのであろう。
| バンク | 内容 | ||
|---|---|---|---|
$00 | $80 | プログラム | |
$02 | $82 | テキストデータ(システム関連/現代編シナリオ など) | $02:9380~$02:A695 |
$03 | $83 | BGM関連のデータ(音源?) | |
$10 | $90 | テキストデータ(シナリオ関連) | |
$11 | $91 | テキストデータ(シナリオ関連) | |
$16 | $96 | テキストデータ(敵の名前・技名・技説明 など) | |
$40 | $C0 | プログラム(主にマップ関係) | |
$41 | $C1 | プログラム(主に戦闘関係) | |
$42 | $C2 | プログラム(主にメニュー画面関係) | |
$43 | $C3 | プログラム(サウンド関連)/BGM関連のデータ(楽譜?) | |
$44 | $C4 | BGM関連のデータ(楽譜?) | |
$45 | $C5 | BGM関連のデータ(楽譜?) | |
$46 | $C6 | BGM関連のデータ(楽譜?) | |
$51 | $D1 | テキストデータ(シナリオ関連) | |
$54 | $D4 | 画像データ(タイルマップなど) | |
$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 | ||
$56 | $D6 |
最終編・敵パーティ編成テーブル | $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 | ||
プログラム関係はバンク$C0~$C3、各種データはバンク$D5~$D6からロードすることが多いようである。つまりミラーリングから読み込みしている。
以下は各種データアドレスページに解説を載せているので参照のこと。
筆者が調べた範囲のみ。
| アドレス | 内容 |
|---|---|
$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:B83E~$C0:B8E5 | マップ用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック) |
$C0:B900~$C0:B924 | マップ乱数計算 |
$C0:BA16~$C0:BA75 | 16bit×16bit乗算サブルーチン |
$C2:42D9~$C2:43B5 | 指定テキストを$7E:2000~にロードする |
$C2:5178~$C2:51E0 | メニュー画面用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック) |
$C2:5383~$C2:53F3 | 入力テキストと$7E:2000~が一致しているか判定 |
$C2:55C7~$C2:55E2 | 文字一覧表に文字を設置 |
| アドレス | 内容 |
|---|---|
$C1:03F1~$C1:03F9 | 敵データ15・タイプと$04(OBJECT)で論理積を取る処理 |
$C1:0BF7~$C1:0C10 | SF編主人公 キューブにデータ切り替え開始 |
$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: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:1CF7~$C1:1CA8 | 行動異常発生時 行動順修正 |
$C1:1DF8~$C1:1E19 | 味方キャラのフィールドダメージ処理 |
$C1:1E26~$C1:1E42 | 味方キャラのフィールド吸収処理 |
$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: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:3546~$C1:35C3 | 戦闘開始時 行動異常 |
$C1:35C7~$C1:35E9 | 戦闘開始時 状態異常(実際のゲームでは未使用) |
$C1:380E~$C1:38E1 | 範囲攻撃における範囲の計算 |
$C1:3924~$C1:3970 | 敵の縦・横幅チェック |
$C1:3B32~$C1:3BAD | 技が周囲攻撃でない時、回復技か判定 |
$C1:3B67~$C1:3C48 | 技を出すキャラの向き判定 |
$C1:3C4B~$C1:3CFE | 技が出るマスに対応したマス目計算値$00:0488~$00:04BEに$0F書き込み |
$C1:3D2B~$C1:3D38 | フィールド用計算アドレス$00:0488~$00:04BEに$00をセット |
$C1:3D93~$C1:3DAF | 習得技のステータス移動ループ処理 |
$C1:3E18~$C1:3F25 | 戦闘開始時 幕末編のNAMEタイプの敵 名前処理 |
$C1:41F2~$C1:4391 | 敵の移動処理 |
$C1:5095~$C1:50EA | テキストデータから文字画像データ呼び出し |
$C1:51FB~$C1:5245 | 敵位置マス判定処理 |
$C1:6150~$C1:61A4 | 戦闘用乱数計算 |
$C1:63F6~$C1:6725 | 敵種類の縦・横サイズ書き込み |
$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:7BCE~$C1:7F92 | 最終編ラストバトル ピュアオディオ出現判定・処理 |
$C1:8AD8~$C1:8AFD | 戦闘用・コントローラーのボタンを押したか判定ループ([$00:4212][$00:4218]のチェック) |
$C1:90A2~$C1:90C4 | 行動異常継続判定 |
$C1:92D0~$C1:92F8 | 行動異常発生後、BREAKDOWN対象の敵のみ行動異常解除 |
$C1:9D13~$C1:9D86 | Xボタンの「ひとつ前の技」関連処理 |
$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: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:CD0C~$C1:CD2E | 現在HPからダメージ量減算(敵側) |
$C1:CD32~$C1:CD53 | 総ダメージ量の回避属性半減処理・999を越えている時999に変える処理 |
$C1:CDF7~$C1:CE08 | 2桁の16進数の値を10進数に解釈し直すサブルーチン |
$C1:CED4~$C1:CEF4 | 敵への90度回転処理 |
$C1:CF0A~$C1:CF12 | 敵への180度回転処理 |
$C1:CF2F~$C1:CF5A | 敵への吹き飛ばし処理 |
$C1:D025~$C1:D0F4 | 敵への吹き飛ばし座標計算 |
$C1:D9DA~$C1:DA24 | カウンター行動異常 |
$C1:D6B9~$C1:D725 | 攻撃技のヒット数計算 |
$C1:D726~$C1:D7F4 | 攻撃技の敵ターゲット決定 |
$C1:D870~$C1:D8B1 | 命中判定計算 |
$C1:D9A7~$C1:D9D9 | 敵へダメージ与える前の処理(眠り状態解除~オディオモールなら単発ダメージ量を1に) |
$C1:DB38~$C1:DBF4 | 状態異常 発生判定処理 |
$C1:DC66~$C1:DC99 | 状態異常 依存ステータス判定 |
$C1:DC0A~$C1:DC4A | 武器の追加効果の状態異常処理 |
$C1:DF27~$C1:DF3B | 武器の追加効果の状態異常判定 |
$C1:DFAF~$C1:DFE8 | 技範囲内に敵キャラがいるか判定 |
$C1:E894~$C1:E8C8 | 仲間キャラ敵対時 敵キャラデータを味方キャラデータにコピー |
$C1:E94B~$C1:E9FC | $7E:E900~$7E:E9FFに技関係の値を入れ、「ひとつ前の技」がない場合は、味方キャラデータの技一覧から、最初の技のIDを取り出して、「ひとつ前の技」に登録 |
$C1:EC25~$C1:EC4A | キャラIDからキャラデータ開始アドレス開始アドレスを計算 |
$C1:EC5C~$C1:EC79 | SF編と功夫編・最終編での主人公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:F50E~$C1:F623 | 最終編ランダムエンカウント時の敵パーティ算出 |
$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:FBBE~$C1:FBFD | 敵キャラ操作時 敵IDや敵座標セット |
$C1:FC0A~$C1:FC3E | 戦闘開始時 敵データのロード&$00:1A??~への書き込み |
$C1:FC3F~$C1:FC58 | 最終編オルステッドルート 技1~4の反撃属性1/反撃属性2/使用不可になるステータス異常書き込み |
$C1:FC78~$C1:FD0F | 戦闘開始時 敵データから$7E:AA??~への書き込み、行動異常・状態異常に初期値設定 |
RAM(Random-Access Memory)領域はバンク$00~$3Fの$0000~$1FFF、バンク$7E(ただしバンク$7E:$0000~$1FFFはバンク$00:$0000~$1FFFのミラーリング)で、先に記した通りにバンク$80~にはバンク$00~がミラーリングされている。
何かしらの計算をする時はだいたい、$00:0000~$00:1FFF(ミラーリング:$7E:0000~$7E:1FFF)の領域を一時的な変数のように扱っている、と思って良い。
解説サイトなどでは、ミラーリングである$7E:????でどのメモリが何の役割かを説明していることが多い。ここではバンク$00の値を以下に記す。
※下位バイト・上位バイトについて
アドレス1つに入るデータは1バイト(16進数2文字)だが、中には連続した2つのアドレスを使って、2バイト(16進数4文字)のデータを記録している値もある。
その場合は、下位バイトのアドレスに下2桁、上位バイトのアドレスに上2桁が入っており、上位バイトアドレスの値・下位バイトアドレスの値を繋げて2バイト分のデータとする。
戦闘時の共通部分含む。
| アドレス | 内容 |
|---|---|
$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 | (※スタック領域。PHXやPHYなどのニーモニックで値を一時的に記録するアドレス。詳細:65C816のスタック) |
$00:011F | ランダムエンカウント時 エリア危険度 |
$00:013D | アイテム取得や使用時、該当アイテムのアイテムIDが入る |
$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:0565 | 現代編 対戦相手画面 (通常$FF、対戦相手を選ぶと値が入る。ナムキャット$00、エイジャ$01、トゥーラ・ハン$02、森部$03、モーガン$04、イヤウケア$05、オディ・オブライト$07 ※ $00:0566は通常$FF、それ以外$00 |
$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:0A00 | プレイ中のシナリオ 対応表 |
$00:0A01 | シナリオのクリア状況 (8ビットが各シナリオ対応。上の桁から順に中世、原始、SF、功夫、西部、現代、近未来、幕末) |
$00:0A02~03 | 現在居るエリアのID (マップに対応した数値、シナリオ毎に異なる) |
$00:0A10 | 最終編主人公 対応表 |
$00:0A11 | 2人目のシナリオ別キャラデータID |
$00:0A12 | 3人目のシナリオ別キャラデータID |
$00:0A13 | 4人目のシナリオ別キャラデータ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:0A53 | 1人目のキャラの向き? 下=$00/上=$01/左=$02/右=$03 |
$00:0A54 | 1人目のキャラの座標?状態? |
$00:0A55 | 1人目のキャラに対する2人目のキャラの相対距離?(移動中$00 ダッシュ$04 停止$80 向き変えで値変わる) |
$00:0A56 | 1人目のキャラに対する3人目のキャラの相対距離? |
$00:0A57 | 1人目のキャラに対する4人目のキャラの相対距離? |
$00:0A60 | フィールド上BGM サウンドルームBGMとは異なる BGM一覧表 |
$00:0A61 | BGMの再生ピッチ?(通常$FF、「いいお天気でしょっ!」の夜バージョンは$60) |
$00:0AB0 | 最終編だと$01 他シナリオは$00 |
$00:0AB1 | 最終編だと$00 他シナリオは$01 |
$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: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: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:4200 | 下1ビット 自動ジョイパッド読み取り機能のONOFF |
$00:4212 | 下1ビット 自動ジョイパッド読み取り機能のONOFF記録 |
$00:4218~$00:4219 | 自動ジョイパッド読み取り機能のコントローラ1のボタン状態出力先 |
$00:421A~$00:421B | 自動ジョイパッド読み取り機能のコントローラ2のボタン状態出力先(本作未使用) |
$00:057E~$00:057D | メニュー画面・コントローラ1のボタン状態出力先 |
$00:10E5 | 最終編の戦闘時のBGM |
$00:11F0~ | イベントカウンター用メモリ(シナリオによりカウントする値は変わる) |
$00:1200~$00:12FF | 【戦闘・マップ共通】シナリオ進行フラグ(詳細はシナリオ進行フラグページ参照) |
$00:1300~$00:1301 | 心山拳伝承者 下位バイト/上位バイト $0001ならユン、$0100ならレイ、$0000だとサモ |
$00:1303 | 初期値$00、西部編最後のマッドドッグとの戦闘で逃げると$01 |
$00:1304 | 初期値$00、幕末編最後の選択肢で「面白い」を選ぶと$01 |
$00:1D00~$00:1D04 | サウンド関連値(計算値やサウンドエフェクトの値など)【戦闘・マップ共通】 |
$00:1D05 | 現在のBGM【戦闘・マップ共通】 BGM一覧表 |
$00:1DE2 | 現在のBGM【戦闘・マップ共通】 BGM一覧表 |
$00:2A00~$00:2A3F | メニュー→装備で、該当キャラのシナリオ別キャラデータがそのまま入る($23のみ例外、異なる値が入る) |
$00:2F3C | 文字入力画面 ページ数($00~、シナリオなどにより最大ページ数は変動) |
$00:2F40 | 文字入力画面 X軸のカーソル位置 左上座標を(0,0)とする。横方向は11文字。$00~$0A |
$00:2F42 | 文字入力画面 Y軸のカーソル位置 左上座標を(0,0)とする。縦方向は9文字。$00~$08 |
$00:2F44 | 文字入力画面 入力した文字数(1文字で+2) $00~$0C |
$00:2F46~$00:2F47 | 文字入力画面 入力欄1文字目(2バイト) |
$00:2F48~$00:2F49 | 文字入力画面 入力欄2文字目(2バイト) |
$00:2F4A~$00:2F4b | 文字入力画面 入力欄3文字目(2バイト) |
$00:2F4C~$00:2F4d | 文字入力画面 入力欄4文字目(2バイト) |
$00:2F4E~$00:2F4f | 文字入力画面 入力欄5文字目(2バイト) |
$00:2F50~$00:2F51 | 文字入力画面 入力欄6文字目(2バイト) |
$00:8A00~$00:8AC6 | 文字入力画面 文字コード(1文字2バイト、左上から右下へ、横11文字分、縦9文字分) |
$00:8E00~ | 各シナリオ専用データ |
| シナリオ | ID | キャラクター |
|---|---|---|
| 中世 | $00 | オルステッド |
| 原始 | $01 | ポゴ |
| SF | $02 | キューブ |
| 功夫 | $03 | 心山拳老師 |
| 西部 | $04 | サンダウン |
| 現代 | $05 | 高原日勝 |
| 近未来 | $06 | アキラ |
| 幕末 | $07 | おぼろ丸 |
| 最終 | $08 | - |
タイトルはサウンドトラックに準拠。
(「いいお天気でしょっ!」の夜バージョンなど、一部楽曲のスローテンポな曲は原曲の再生ピッチを変更して流しているらしい)
| ID | タイトル |
|---|---|
| $00 | 無音(BGMなし) |
| $01 | 魔王への叙曲 |
| $02 | 凛然たる戦い |
| $03 | 忍音 |
| $04 | WANDERER |
| $05 | 殺陣! |
| $06 | THE WILDS |
| $07 | UNDER THE FAKE |
| $08 | UNSEEN SYNDROME |
| $09 | NATIVE LIFE |
| $0A | WAIT FOR TRUTH |
| $0B | PSYCHOで夜露死苦!! |
| $0C | 猛者達… |
| $0D | 鳥児在天空飛翔 魚児在河里游泳 |
| $0E | 在中国的戦闘 |
| $0F | 効果音 |
| $10 | KNOCK YOU DOWN! |
| $11 | 効果音(馬が走る音) |
| $12 | 効果音(SF編・宇宙船内) |
| $13 | 効果音(近未来編・港) |
| $14 | 老拳師下深山 |
| $15 | いいお天気でしょっ! |
| $16 | KISS OF JEALOUSY |
| $17 | 密命 |
| $18 | GO!GO!ブリキ大王!! |
| $19 | 届かぬ翼 |
| $1A | 魔王山を往く |
| $1B | 魔王オディオ |
| $1C | PURE ODIO |
| $1D | 効果音(アキラ レベルアップ音) |
| $1E | 効果音(木魚のポクポク音) |
| $1F | 効果音(風の吹く音) |
| $20 | 効果音(キューブの機械音) |
| $21 | 効果音(オルステッド レベルアップ音) |
| $22 | 効果音(おぼろ丸 レベルアップ音) |
| $23 | 効果音(サモ・ユン レベルアップ音・アチョーボイス) |
| $24 | 効果音(レイ レベルアップ音・ボイス) |
| $25 | SELECT・A・LIVE |
| $26 | 効果音(ポゴ レベルアップ音・ボイス) |
| $27 | 効果音(ゴリのボイス/馬のいななき 兼用) |
| $28 | 効果音(高原日勝 レベルアップ音・ボイス) |
| $29 | 効果音(サンダウン レベルアップ音・銃声) |
| $2A | 効果音(近未来編・木琴) |
| $2B | MEGALOMANIA |
| $2C | 効果音(強風の吹く音) |
| $2D | 効果音(SF編/近未来編・パソコン効果音) |
| $2E | 効果音(近未来編・筑波研究所最奥) |
| $2F | 効果音(功夫編 銅鑼) |
| $30 | 効果音(西部編 鐘) |
| $31 | 効果音(幕末編 アイテム入手時) |
| $32 | 効果音(原始編 ウホウホ) |
| $33 | 最強-VICTORY ROAD- |
| $34 | LIVE・A・LIVE |
| $35 | CRY・A・LIVE |
| $36 | WARM・A・LIVE |
| $37 | 絶望の都 |
| $38 | Sancho・de・Los・Panchoz |
| $39 | 効果音(マラカス) |
| $3A | 効果音(各シナリオ開始時の低い音) |
| $3B | 原始編・宴(リメイク版の「生贄の宴」) |
| $3C | Silent Labyrinth |
| $3D | ARMAGEDDON |
| $3E | CAPTAIN SQUARE |
| $3F | 星屑のキャプテン |
| $40 | 効果音(近未来編・オルガン むすんでひらいて) |
| $41 | 効果音(近未来編・オルガン 猫ふんじゃった) |
| $42 | 効果音(近未来編・オルガン トッカータとフーガ) |
| $43 | 効果音(近未来編・オルガン チョコボのテーマ) |
| $44 | Live over Again |
| $45 | Live for Live |
| $46 | 効果音(崩壊) |
| $47 | 効果音(SF編・警告音) |
| $48 | 効果音(功夫編・夜 虫の音) |
| $49 | CAPTAIN SQUARE |
| $4A | 効果音(ゲーム開始時「SQUARE SOFT」ボイス) |
| $4B | ILLUSION… |
| $4C | Versus! |
| $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バイト分のデータに$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文字目 |
上のキャラクターの名前にも関係するが、本作の文字コードを説明する。
1文字あたり、ひらがな・カタカナ・アルファベット・記号は1バイト、漢字は2バイトのデータを使う。
1バイトの場合は上表に対応した値をそのまま使うが、漢字は上表のように上位バイトに$1D・$1E・$1F、下位バイトに$00~$FFの数値を入れて、$1D??, $1E??, $1F??とする。
シナリオ別キャラデータの名前1文字目~名前12文字目の部分は、漢字だとアドレスを2バイト使うため、漢字のみだと最大6文字になる。
また、文字コードはセリフなどのテキスト表示にも使うため、中には改行用コード($01)や、本来2文字分の「‥‥」を1バイト分のデータ「$07」としていたりもする。
例:
「オルステッド」だと、$7E:0D34~$7E:0D3Fの12バイトに入っているデータは、
| 数値 | $65 | $89 | $6D | $73 | $91 | $A5 | $00 | $00 | $00 | $00 | $00 | $00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 対応文字 | オ | ル | ス | テ | ッ | ド | - | - | - | - | - | - |
「高原 日勝」だと、$7E:0E74~$7E:E73Fの12バイトに入っているデータは、
| 数値 | $1D | $E1 | $1D | $BC | $20 | $1F | $3A | $1E | $55 | $00 | $00 | $00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 対応文字 | 高 | 原 | (空白) | 日 | 勝 | - | - | - | ||||
雑に作ったがJavaScriptでデコード・エンコードできるようにした(エンコードはあまりあてにできない)。不具合がある可能性大。
戦闘中のアドレスと内容について。
$00:0???はバンク$7Eではなくバンク$00で呼び出されるのがほとんど。
$7E:9000~以降は、ほとんどの場合、計算用に他アドレスからコピーした値や、計算途中の値が入る。
| アドレス | 内容 |
|---|---|
$00:0041 | 戦闘時の背景番号 |
$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:0378~$00:0379 | 攻撃中の敵0~Eに対応したアドレス1Bx0が2バイトで入る(アドレス呼び出し用) |
$00:03AE | 行動ポイント(下位バイト) |
$00:03AF | 行動ポイント(上位バイト) |
$00:0488~$00:04BE | 戦闘フィールドマスの計算用アドレス |
$00:04C8~$00:04FF | 戦闘フィールドマスの状態(後述) |
$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~34が入る(次技使用直前まで値が残る) |
$7E:9100 | 原始編・ざき3戦目のみ ポゴの攻撃が命中した回数(4回目を当てた直後に戦闘が強制終了する) |
$7E:9200~ | 現代編・幕末編・功夫編修行 敵が使った技または心山拳老師が使った技(命中時)のIDが順に入る。$7E:9200の初期値は$00。(ラーニング判定用。 $7E:9200から順に、敵/老師が技を使う度に、$7E:200~から$00が書き込まれたアドレスの値をチェックして、被っていないのなら敵/老師の使用技ID+次のアドレスに$00を書き込む) |
$7E:A0?? | 戦闘中、各技特有の一時的な値の記録アドレス |
$7E:A010~$7E:A011 | 現代編ワタナベイベント判定用の計算値(「カミツキ(青)」使用時のみ0以外が入る) |
$7E:A01A | サモの「ほいこーろー」のSTEP数が蓄積される |
$7E:A01D | 現代編ワタナベイベントのエイジャの向き判定 左上向きは$79、それ以外は$38 |
$7E:FEF0 | 戦闘中タイマー(下位バイト) |
$7E:FEF1 | 戦闘中タイマー(上位バイト) |
$7E:FEFD | ターン数(フィールドダメージ発動計算用。リセット時に0、戦闘をまたいでも引き継ぎ) |
$7E:FF00~$7E:FF5F | 画面上側のウィンドウ文字列(実際に表示する文字より多めに文字列をロードしている) |
戦闘中タイマーは戦闘用乱数の初期値計算と、キャラのモーションやエフェクト表示などのタイミングなどを合わせるための時間調整に使われている、と思われる。
$00:04C8~$00:04FEの戦闘フィールドについて戦闘フィールドは7×7マスで構成されているが、各マスに対応したアドレスは以下の通り。
$00:04C??の??の値部分のみ記している。
各アドレスに、現在居るキャラクターと、ダメージフィールド状態が記録される。
| C8 | C9 | CA | CB | CC | CD | CE | CF |
| D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
| D8 | D9 | DA | DB | DC | DD | DE | DF |
| E0 | E1 | E2 | E3 | E4 | E5 | E6 | E7 |
| E8 | E9 | EA | EB | EC | ED | EE | EF |
| F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 |
| F8 | F9 | FA | FB | FC | FD | FE | FF |
一番右の灰色背景部分は実際には戦闘フィールドではないため、$00が入っている。
プログラミング上、7という数字はキリが悪いので、横8×縦7でアドレスを設定しているようである。
各アドレスに入る数値は、何もなければ$00、それ以外はキャラクターの数値+ダメージフィールド状態の合計値になる。
敵が複数マスにまたがっている場合は該当マスに同じ数値が入る。
| 数値 | 内容 |
|---|---|
| $01 | 味方キャラ1 |
| $02 | 味方キャラ2 |
| $03 | 味方キャラ3 |
| $04 | 味方キャラ4 |
| $11 | 敵キャラ1 |
| $12 | 敵キャラ2 |
| $13 | 敵キャラ3 |
| $14 | 敵キャラ4 |
| $15 | 敵キャラ5 |
| $16 | 敵キャラ6 |
| $17 | 敵キャラ7 |
| $18 | 敵キャラ8 |
| $19 | 敵キャラ9 |
| $1A | 敵キャラA |
| $1B | 敵キャラB |
| $1C | 敵キャラC |
| $1D | 敵キャラD |
| $1E | 敵キャラ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 | 戦闘開始後は$18と同値? |
$1B | 戦闘開始後は$19と同値? |
$1C | |
$1D | 向き(右下00/左下01/左上03/右上04) |
$1E | |
$1F | |
$20 | 戦闘中に経験値が増える行動をしたかのフラグ。行動なし:$00 行動あり:$80 |
$21 | |
$22 | |
$23 | |
$24 | |
$25 | |
$26 | |
$27 | |
$28 | 技の範囲指定~使用中、キャラ位置のマス目のX座標 |
$29 | 技の範囲指定~使用中、キャラ位置のマス目のY座標 |
$2A | |
$2B | |
$2C | |
$2D | |
$2E | |
$2F | |
$30 | 力(通常値) |
$31 | 速(通常値) |
$32 | 体(通常値) |
$33 | 知(通常値) |
$34 | 力(現在値) |
$35 | 速(現在値) |
$36 | 体(現在値) |
$37 | 知(現在値) |
$38 | LV(現在値) |
$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マスの位置に居る場合は、下図のようになる。

キャラの中心位置までの距離なので、横は$60ピクセル、縦は$3Cピクセル。
味方キャラデータ$10に入る値は$60、味方キャラデータ$12に入る値は$3Cということになる。
この値はピクセル単位で記録されているため、たとえばキャラが移動中、マス目とマス目の間にいる時はその値がフレーム単位(リアルタイム)で更新される。
また、ダメージをくらった時、キャラが左右に小さく動くモーションがあるが、この時にも横軸(X軸)にあたる味方キャラデータ$10の数値が少し動く。
以上から、マス目単位の味方キャラデータ$18~$19は、向きや方向、位置を考慮した上でのダメージ量計算やターゲット計算などに用いられ、ピクセル単位でキャラの位置を記録する味方キャラデータ$10と$12は、キャラのドット絵、技のモーションやエフェクトなどの表示位置計算に使っているのだろう、ということが推測できる。
最大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 | 被ダメージのヒット数 |
戦闘では最大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 | |
$10 | HP10を下位バイト、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ビットが火水風土精善悪無に対応 |
敵は最大で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:タメ時間中 $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 | 石化すると値がつく |
$AB00 | LV(現在値) |
$AB01 | 攻撃/回復技の対象の範囲内にいる敵には順に$01~が入り、範囲外だと$FFが入る。 |
$AB02 | 被ダメージ/回復量のヒット数 |
$AB03 | ヒット数(倒れるか999以上の時$FF?) |
$AB04~$AB05 | 被ダメージの単発値(2バイト)※被ダメージは技だけでなくフィールドダメージなども含む |
$AB06 | |
$AB07 | |
$AB08 | 行動異常(計算用) |
$AB09 | 状態異常(計算用) |
$AB0A | レベル現在値(計算値) |
$AB0B | |
$AB0C | 状態異常(技によって発生した値、これと既に発生している状態異常を加算する) |
$AB0D | |
$AB0E | |
$AB0F | |
$AC00 | 使用技(決定前) |
$AC02~$AC03 | 技の範囲指定~使用中、キャラ位置のマス目のY/X座標 |
$AC04~$AC05 | 順序ポイント(2バイト) |
$AD00~$AD01 | 被ダメージの総ダメージ量(2バイト) |