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

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

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

データマップについての説明と、ROM領域は前ページ参照。
サウンド(BGM・効果音)関連はこちら

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レジスタというが、この後で説明する。

ミラーリング外の$7E:2000~には、VRAMなど外部メモリに送る画像関係データをまとめて書き込んで、ここからGDMA転送することがよくある。

※下位バイト・上位バイトについて
アドレス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バイト
    スプライトの配置を記録するメモリ。
  • APU: Audio Processing Unit
    サウンド用ユニット、以下で構成されている。
    • SPC700:サウンド専用CPU(演算装置)
    • ARAM:SPC700用のRAM(Audio RAM, 64KB)
    • S-DSP:音にエフェクトをかけてデジタル・オーディオ信号として出力する装置(Sound digital signal processor)
    • DAC:S-DSPから送信されたデジタルオーディオ信号をアナログオーディオ信号に変換する装置(Digital to Analog Converter)
  • データ転送
    • 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
$30:7FF1$30:7FF0初期値$FFFF、セーブすると$E41Bが入る
$30:7FF3$30:7FF2初期値$FFFF、最後にセーブしたセーブデータ番号$0000~$0003
(セーブ・ロード画面の初期カーソル位置判定に使う)
$30:7FFE$30:7FFF最終編ベストエンドクリア判定値
(クリア前は$0000、クリア後は$E41B)
(LISTENING ROOMの曲判定)

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

$30:7FF1$30:7FF0, $30:7FF3$30:7FF2, $30:7FFE$30:7FFFはセーブデータの共有部。
各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:0004~$00:0005コントローラ1のボタン判定用
$00:0008~$00:0009コントローラ1のボタン判定用
$00:0006~$00:0007コントローラ2のボタン判定用(本作では未使用)
$00:000A~$00:000Bコントローラ2のボタン判定用(本作では未使用)
$00:000Cマップ乱数計算用の値(戦闘中一時停止)
$00:000Dマップ乱数(戦闘中一時停止)
$00:002Dランダムエンカウント時 増加値(下4ビット)
$00:0034~$00:0037マップ乱数計算用アドレス
$00:0036マップ乱数($00:000Dと同値)
$00:0070通常は$00、デモ画面は$01以上(変動)
$00:0107ランダムエンカウント時 危険度
$00:010B~$00:01FF(※スタック領域。PHXやPHYなどのニーモニックで値を一時的に記録するアドレス。詳細:65C816のスタック)
$00:0114BG1のサイズ決定値 兼 スクロールで無限ループしないマップは$00、それ以外は$00以外
$00:0116BG2のサイズ決定値 兼 背景(BG2)が多重スクロールするマップでは$01~$03, それ以外は$00
$00:0119BGMIDコピー先
$00:011Fランダムエンカウント時 エリア危険度
$00:0128マップ構造における、現在のマップの表示開始X座標
$00:012Aマップ構造における、現在のマップの表示開始Y座標
$00:012Cマップ構造における、現在のマップの表示終了X座標(+1)
$00:012Eマップ構造における、現在のマップの表示終了Y座標(+1)
$00:0131マップ構造X軸表示幅(マス目単位)[$00:012C] - [$00:0128]
$00:0133マップ構造Y軸表示幅(マス目単位)[$00:012E] - [$00:012A]
$00:0134BG1タイルマップアドレスとサイズ[$00:2107]の下2ビット(マップサイズ)の値
$00:0135BG2タイルマップアドレスとサイズ[$00:2108]の下2ビット(マップサイズ)の値
$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, グラフィック処理やイベント中は$00以外
$00:020Aフィールド・コントローラ1のボタンを押した判定(合計値が入る)
右:$01 / 左:$02 / 下:$04 / 上:$08 / スタートボタン:$10 / セレクトボタン:$20 / Yボタン:$40 / Bボタン:$80
$00:0250~$00:0252HDMA転送による多段スクロール量計算用変数
$00:0253~$00:0255HDMA転送による多段スクロール量更新タイミング計算用変数
$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:058F~$00:0590現代編 ラストバトルで負けた時のカウントダウンタイマーがカウントダウン中かどうかの判定値
($00:カウントしていない、$80:カウント中、$81:秒数繰り下がり計算中)
$00:0591現代編 ラストバトルで負けた時のカウントダウンタイマー(1秒 = 60フレーム分のカウントダウン用の値, $00~$3Cが入る)
$00:0592~$00:0593現代編 ラストバトルで負けた時のカウントダウンタイマー 残り秒数(初期値$0A~$00)。[$7E:2E79][$7E:2E78]にコピーされる。
$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現在居るエリアのID(マップに対応した数値、シナリオ毎に異なる)
$00:0A03該当マップの最大スプライト数
$00:0A04$00が入っていない場合、$00:2131(I/OポートアドレスCGADSUB グラフィック用カラーマス ColorMath制御)の初期値(ほぼSF編用?)
$00:0A05~07グラフィック用カラーマス(Color Math)制御値
最終編 時のダンジョンの鐘の鳴った回数($00:014A~$00:014Cのコピー)
$00:0A0E最終編異次元空間で、階段が出現していない時$01 それ以外は$00
$00:0A0FYボタン判定フラグ 初期値$00、近未来編開始時及び、最終編で本能のダンジョンと心のダンジョンいずれかに初めて入った時に$01が入り、シナリオクリアまで変更なし。Yボタンで心を読むか匂いを嗅ぐかの分岐用
$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~$00:0A39[$00:210D](BG1水平スクロール量)計算用の値(2バイト)
$00:0A3A~$00:0A3B[$00:210E](BG1垂直スクロール量)計算用の値(2バイト)
$00:0A3C~$00:0A3D[$00:210F](BG2水平スクロール量)計算用の値(2バイト)
$00:0A3E~$00:0A3F[$00:2110](BG2垂直スクロール量)計算用の値(2バイト)
$00:0A40~$00:0A41[$00:210F](BG2水平スクロール量)多重スクロール時 計算用の値(2バイト)
$00:0A42~$00:0A43[$00:2110](BG2垂直スクロール量)多重スクロール時 計算用の値(2バイト)
$00:0A531人目のキャラの向き? 下=$00/上=$01/左=$02/右=$03
$00:0A541人目のキャラの座標?状態?
$00:0A551人目のキャラに対する2人目のキャラの相対距離?(移動中$00 ダッシュ$04 停止$80 向き変えで値変わる)
$00:0A561人目のキャラに対する3人目のキャラの相対距離?
$00:0A571人目のキャラに対する4人目のキャラの相対距離?
$00:0A60BGMID (フィールド, 以降も$00:0A6Cまでフィールドにおけるサウンド関係値) BGM一覧表
$00:0A61BGMの音量(デフォルト値は$FF)
$00:0A62効果音の音量(デフォルト値は$FF) (次のサウンド更新まで値は変動しない)
$00:0A63効果音のPAN(音の定位)の値 $00 (左)~$80 (中央・モノラル)~$FF (右) (次のサウンド更新まで値は変動しない)
$00:0A64BGMの演奏速度(テンポ)の値 $00~$FF(デフォルト値は$FF)
$00:0A65BGMピッチ(キー)変更 $00~$FF(デフォルト値は$FF)
$00:0A66BGM演奏パートミュート設定 Bit0~7がチャネル0~7に対応しており、1が立っているチャネルはミュート(無音)処理される
$00:0A67BGM演奏時、コマンド$F8のON・OFF(内容不明)
$00:0A68BGMID
$00:0A6BBGM演奏時、コマンド$8CのON・OFF(内容不明)
$00:0A6CBGM演奏時、コマンド$8FのON・OFF(内容不明)
$00:0AB0主人公の行動順-1
(以下$00:0AB3まで入る数値は$00~$03のいずれか、味方キャラ順は加入順)
$00:0AB1隊形で左の位置にいる味方キャラ / 味方キャラ1の行動順-1
$00:0AB2隊形で右の位置にいる味方キャラ / 味方キャラ2の行動順-1
$00:0AB3隊形で下の位置にいる味方キャラ / 味方キャラ3の行動順-1
$00:0AB4セーブ回数 下位バイト
セーブ回数が999回($03E7)を越えると0に戻る
$00:0AB5Bit0~6:セーブ回数 上位バイト
Bit7:%0だとステレオ、%1だとモノラル メニュー→音声の設定で切り替え
$00:0AB6~$00:0ABD初期値(ニューゲーム時)はすべて$FF。クリアしたシナリオのIDが$00:0AB6に入り、他シナリオをクリアすると+1したアドレスに値が移動していく。クリア済みシナリオをやり直す時は、そのシナリオIDは削除され($FFに戻る)クリアシナリオのIDは-1したアドレスに詰める
$00:0ABE現代編 戦闘開始時、対戦相手の値$00~$07が入る
$00:0ABF現代編 初期値$00、倒した対戦相手に対応したビットに1が立つ(Bit0~5)、オブライト戦前は%00111111($3F)
$00:0AC0~$00:0AC1マップタイマー00~15のON・OFF 2バイト値
$00:0AC2~$00:0AC3マップタイマー00~15関連フラグ値 2バイト値
$00:0AC4戦闘開始時に1以上が入り判定に使う(通常$00、戦闘中は$00)
$00:0AC5原始編・近未来編のシンボルエンカウントのON/OFF?
$00:0AC7ポゴが匂いを嗅ぐ能力を所持しているかどうか
$00:Yボタン押しても匂い嗅げない、$01:Yボタンで匂いを嗅げる、$81:匂いが漂っている最中
※原始編狩場イベントでON、最終編魔王山山頂にオディオが出現するとOFF、脱出するとON
$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:0FC0~$00:10DF$00:132E~$00:15A2(OBJマップデータ)の各スプライトデータの8バイト分をセーブデータ用にコピーした領域(セーブデータ保存用、セーブ時更新)
$00:10E5戦闘時のBGMID
$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:1329~$00:157Aマップ上スプライトの配置データ及び計算値(キャラ、座標、向き、モーション等、1スプライトあたり17バイト)
$00:1D00~$00:1D03【戦闘・マップ共通】サウンドドライバファンクションコマンド4バイト$00:2140~$00:2143転送値
※コマンドが4バイト未満の場合、前の値が消えずに入ったまま
$00:1D04~$00:1D07【戦闘・マップ共通】サウンドドライバファンクションコマンド4バイト 1回前に送った$00:1D00~$00:1D03の値
$00:1D08~$00:1D0B【戦闘・マップ共通】サウンドドライバファンクションコマンド4バイト 2回前に送った$00:1D00~$00:1D03の値
$00:1D05現在のBGMID【戦闘・マップ共通】 BGM一覧表
$00:1D20~$00:1D5F【戦闘・マップ共通】現在ARAMに入っているサンプリングデータID(2バイト区切り、最大32種類)
$00:1D60~$00:1D7F【戦闘・マップ共通】現在のBGMのサンプリングデータの最初の2バイト=波形データ量(2バイト区切り、単位バイト)
※曲演奏時、前の曲のデータ部分はリセットされず($00が入らず)残る
$00:1DE2現在のBGM【戦闘・マップ共通】 BGM一覧表
$00:1E00~$00:1E1F【戦闘・マップ共通】現在のBGMのサンプリングデータID16種(2バイト区切り)
$00:1E20~$00:1E3F【戦闘・マップ共通】現在のBGMのサンプリングデータID(2バイト区切り、ARAMに入っているデータと被っていない分)
$00:1E80~$00:1EBF【戦闘・マップ共通】ARAM$1B80~1BBFと同値
$7E:2A00~$7E:2A3Fメニュー→装備で、該当キャラのシナリオ別キャラデータがそのまま入る($23のみ例外、異なる値が入る)
$7E:2E78~$7E:2E79現代編 ラストバトルで負けた時のカウントダウンタイマー 残り秒数(初期値$0A~$00)。$00:0592~$00:0593からのコピー
$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:3100~$7E:31??HDMAテーブル コピー先
$7E:3800~$7E:39FFカラーパレットのデータ コピー先
$7E:3A00~$7E:3BFFカラーパレットのデータ 計算用領域1
$7E:3C00~$7E:3DFFカラーパレットのデータ 計算用領域2
$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キャラのスプライトデータ コピー先
$7F:0000~$7F:0FFF現在居るエリアの1マスあたりのBG1のグラフィック配置データ(縦64×横64マス分)
$7F:1000~$7F:1FFF現在居るエリアの1マスあたりのBG2のグラフィック配置データ(縦64×横64マス分)
$7F:3800~$7F:39FF現在居るマップのマップ属性(当たり判定など)
シナリオID対応表
シナリオIDキャラクター
中世$00オルステッド
原始$01ポゴ
SF$02キューブ
功夫$03心山拳老師
西部$04サンダウン
現代$05高原日勝
近未来$06アキラ
幕末$07おぼろ丸
最終$08-

共通

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

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

シナリオ別キャラデータ

$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:0368~$00:0369技使用中、該当技の技データアドレス開始位置の値2バイトが入る
$00:036Cステータス復元用計算値(Yで$40、向き変えで$20)
$00:036Dステータス復元用計算値(技使用中$10)
$00:0378~$00:0379攻撃中の敵0~Eに対応したアドレス
1Bx0が2バイトで入る(アドレス呼び出し用)
$00:037B敵攻撃時、技範囲内にいる味方キャラの数カウント(攻撃決定時初期値$01、最大$04)
$00:03AE行動ポイント(下位バイト)
$00:03AF行動ポイント(上位バイト)
$00:03E6戦闘コマンドにおけるカーソル位置(初期位置$00、技一覧やアイテム一覧でも)
$00:047E初期値$00、「逃げる」または「テレポート」選択時$FF
$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:A010~$7E:A011現代編ワタナベイベント判定用の計算値(「カミツキ(青)」使用時のみ0以外が入る)
$7E:A018~$7E:A019「ほいこーろー」/「わいろ」用乱数
$7E:A01A~$7E:A01B「ほいこーろー」STEP数/「わいろ」回転数記録アドレス
$7E:A01D現代編ワタナベイベントのエイジャの向き判定 左上向きは$79、それ以外は$38
$7E:A020~$7E:A47F技モーション計算用の値
$7E:A02C「ほいこーろー」増加判定フラグ
$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:FEFC技データ24の効果音を繰り返す回数カウンター。技データ20の効果音サブルーチン時に$00を書き込んで初期化し、技データ24の効果音が鳴ると+1していく。多段ヒット技でヒット数の回数分効果音を鳴らす場合、鳴る度に+1
$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モーション値1
$1Fモーション値2
$20戦闘中に経験値が増える行動をしたかのフラグ。行動なし:$00 行動あり:$80
$21 
$22 
$23 
$24 
$25 
$26 
$27 
$28技の範囲指定~使用中、キャラ位置のマス目のX座標
$29技の範囲指定~使用中、キャラ位置のマス目のY座標
$2A 
$2B 
$2C 
$2D無効状態異常
$2ELV(現在値) - 背面補正(減算結果が負の場合は$00)※ダメージ受けた時に計算値が入る
$2F敵攻撃範囲内判定値
初期値$00, 敵攻撃時に範囲内にいると+1(味方キャラに$01~$04の値が入る)
$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横の幅(タイル数)※8×8ピクセルが1タイル
$03縦の幅(タイル数)
$04横の幅(マス数)
$05縦の幅(マス数)
$06VRAMグラフィック読み込み開始位置(VRAM$6000~から入る32×32タイルを1単位として、0からナンバリング)
$07VRAMグラフィックに占める行数(縦1×横4タイルを1単位としてデータに何行使用しているか)
$08 
$09CGRAMのカラーパレット開始アドレス(word単位)
$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
$AA00を下位バイト、$AA01を上位バイトとした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バイト)


このページをシェアする

上へ