この節ではサブルーチン $218AFC
およびそれに依存する機能群の振る舞いを可能な限り詳細に説明する。
最初にサブルーチン $218AFC
がどのような機能を有するプログラム構成要素なのかをごく簡単に説明する。
さらにこのサブルーチンを間接的に利用するプログラム構成要素について言及する。
これにより、サブルーチン $218AFC
の仕様を把握することの重要性が明らかになるだろう。
最後に、本サブルーチンの筆者が独自に調査した仕様を簡易な図表にして示す。
逆アセンブリーコードの解読のお供にするなり、逆アセンブラーのポストプロセッサーに取り込むなりして利用していただきたい。
サブルーチン $218AFC
はその機能や役割を文章で表現することが案外難しい。
このサブルーチンを呼び出す状況次第で、その振る舞いの違いがあまりにも大きいからだ。
まずは実際にこのサブルーチンが実行することができる機能について例を挙げておく。
仲間一人の属性値を参照または更新
戦闘時において、戦闘員一人の属性値を参照または更新
仲間一人の所持品または装備品を参照、検索または変更
仲間パーティーについて何らかの検索
仲間パーティーの編成を参照または更新
モンスター一種の属性値を参照
預かり所の状態を参照または更新
モンスターじいさんと仲間一体についての操作
ルイーダの酒場とある仲間一人についての操作
メダル王と取引するちいさなメダルについての操作
カジノのコインについての操作
このように用途が多岐に亘るので、汎用データアクセスサブルーチン(仮)と呼ぶことにする。
用途が多いと必然的に利用箇所も多数あるわけだが、
このサブルーチンは呼び出し目的が何であっても共通してあるアドレスの値をやりとりする仕組みになっている。
プログラマーは定型的なコードが繰り返し現れるのをある程度は防ぎたいはずで、
これを BRK 命令を拡張することで実現したと思われる。
BRK 命令を介した実行についての詳細とその実例は 3.2.3.4 オペランド #$80
, ..., #$93
: オブジェクトのフィールドにアクセス で述べる。
サブルーチン $218AFC
の呼び出しに関する依存関係を簡単なアスキーアートで表現する。
矢印の向きは依存する側から依存される側に向かうものとする。
$21/8AFC ← $21/8A9D: Long 型サブルーチン。未使用。 ← $21/8AC8: Long 型サブルーチン。未使用。 ← $21/8AF8: Long 型サブルーチン。 ← $00/8F80: BRK ハンドラー。
JSL 命令で実行されるはずの二つのサブルーチン $218A9D
および $218AC8
については、
独自の調査の結果で未使用ルーチンであると結論したため、説明を省く。
サブルーチン $218AF8
はバンク内サブルーチンを任意のサブルーチンから呼び出せるようにするだけのラッパーであるので特別な説明を要しない。
ただし、そのサブルーチンを利用する唯一の呼び出し元である BRK ハンドラー $008F80
は被参照機会がとてつもなく多いため重要だ。
これの呼び出しコードの意味を直ちに特定することができれば、逆アセンブリーコードの解読が飛躍的に効率的になる。
次に反対側の呼び出し依存関係を示す。
$21/8AFC → $21/907C: この後管理するメモリーを初期化する。 → $21/8B31: 対象メンバー ($39) を特定する。 → $21/8B82: この後操作するベースアドレス ($3A:) オフセット ($3D) サイズ ($3E) 実データ ($46:) をセットする。 → $21/8C3A: 目的 ($38) に応じた処理コードへジャンプする。
最初の三つのサブルーチンはこれ以上の呼び出しを含まない。
サブルーチン $21907C
は作業用のメモリーをゼロで初期化するだけのミニルーチンだ。
特に $46
から $49
までがゼロになることに注意したい。
サブルーチン $218B31
は主にアクセス対象のデータのベースアドレスを設定するためにある。
つまり、オブジェクトサイズが N で、先頭から k 番目の仲間または敵についてのデータが欲しい場合には、
このルーチンはアドレス $39
にベースアドレスに値 N * k
を加算した値を格納する。
最後のサブルーチン $218C3A
が難解で、
固定ジャンプテーブルを参照することで目的 ($38
) 別に定義されたコードを実行するようになっている。
次節で図表にして示すことでコードの説明に代える。
まずサブルーチン $218AFC
が間接的に参照するジャンプテーブルの各エントリーの振る舞いを図表にする。
併せて、関連するデータ型をその格納アドレスに代表させて示す。
機能 ID とその機能の概要を図表にしたものを次に示す。
未使用分も含めると機能個数が #$F6
すなわち 246 個もあるので厄介だ。
図表の読み方は詳細に述べず、読者の感覚に委ねる。
表 3.9 サブルーチン機能一覧
ID | ベース | オフセット | マスク | 機能 | 備考 |
---|---|---|---|---|---|
#$00 | $7E2040 | [02:04] | 仲間::HP を参照する。 | さらに $49 に非ゼロ情報をセット。 | |
#$01 | $7E2040 | [02:04] | 仲間::HP を増加させる。 | 結果値は MHP を上限とする。 | |
#$02 | $7E2040 | [02:04] | 仲間::HP を減少させる。 | 結果値は 0 を下限とする。 | |
#$03 | $7E2040 | [02:04] | 仲間::HP をその MHP と同じ値とする。 | ||
#$04 | $7E2040 | [02:04] | 仲間::HP をその MHP の半分の値とする。 | ||
#$05 | $7E2040 | [0E:10] | 仲間::MHP を参照する。 | ||
#$06 | $7E2040 | [0E:10] | 仲間::MHP を増加させる。 | 結果値は 999 を上限とする。 | |
#$07 | $7E2040 | [04:06] | 仲間::MP を参照する。 | さらに $49 に非ゼロ情報をセット。 | |
#$08 | $7E2040 | [04:06] | 仲間::MP を増加させる。 | 結果値は MMP を上限とする。 | |
#$09 | $7E2040 | [04:06] | 仲間::MP を減少させる。 | 結果値は 0 を下限とする。 | |
#$0A | $7E2040 | [04:06] | 仲間::MP と指定値とを比較する。 | ||
#$0B | $7E2040 | [04:06] | 仲間::MP をゼロにする。 | ||
#$0C | $7E2040 | [04:06] | 仲間::MP をその MMP と同じ値とする。 | ||
#$0D | $7E2040 | [10:12] | 仲間::MMP を参照する。 | ||
#$0E | $7E2040 | [10:12] | 仲間::MMP を増加させる。 | 結果値は 999 を上限とする。 | |
#$0F | $7E2040 | [14:16] | 仲間::攻撃力を評価する。 | ちからと装備品から算出する。 | |
#$10 | $000760 | [00] | 味方ワーク::攻撃力を参照する。 | ||
#$11 | $000760 | [00] | 味方ワーク::攻撃力を増加させる。 | 結果値は 511 を上限とする。 | |
#$12 | $000760 | [00] | 味方ワーク::攻撃力を減少させる。 | 結果値は 0 を下限とする。 | |
#$13 | $7E2040 | [14:16] | 仲間::守備力を評価する。 | ||
#$14 | $000760 | [02:04] | 味方ワーク::守備力を参照する。 | ||
#$15 | $000760 | [02:04] | 味方ワーク::守備力を増加させる。 | 結果値は 511 を上限とする。 | |
#$16 | $000760 | [02:04] | 味方ワーク::守備力を減少させる。 | 結果値は 0 を下限とする。 | |
#$17 | $7E2040 | [06] | 仲間::すばやさを評価する。 | みのまもりと装備品から算出する。 | |
#$18 | $7E2040 | [06] | 仲間::すばやさを増加させる。 | 結果値は 255 を上限とする。 | |
#$19 | $000760 | [04] | 味方ワーク::すばやさを評価する。 | ||
#$1A | $000760 | [04] | 味方ワーク::すばやさを増加させる。 | 結果値は 255 を上限とする。 | |
#$1B | $000760 | [04] | 味方ワーク::すばやさを減少させる。 | 結果値は 0 を下限とする。未使用。 | |
#$1C | $7E2040 | [07] | 仲間::ちからを参照する。 | ||
#$1D | $7E2040 | [07] | 仲間::ちからを増加させる。 | 結果値は 255 を上限とする。 | |
#$1E | $7E2040 | [08] | 仲間::みのまもりを参照する。 | ||
#$1F | $7E2040 | [08] | 仲間::みのまもりを増加させる。 | 結果値は 255 を上限とする。 | |
#$20 | $7E2040 | [09] | 仲間::かしこさを評価する。 | かしこさと装備品から算出する。 | |
#$21 | $7E2040 | [09] | 仲間::かしこさを増加させる。 | 結果値は 255 を上限とする。 | |
#$22 | $7E2040 | [0A] | 仲間::うんのよさを参照する。 | ||
#$23 | $7E2040 | [0A] | 仲間::うんのよさを増加させる。 | 結果値は 255 を上限とする。 | |
#$24 | $7E2040 | [0B:0E] | 仲間::けいけんちを参照する。 | ||
#$25 | $7E2040 | [0B:0E] | 仲間::けいけんちを増加させる。 | 結果値は 10000000 を上限とする。 | |
#$26 | $7E2040 | [26:29] | 仲間::次のレベル到達時の経験値を参照する。 | ||
#$27 | $7E2040 | [12] | 仲間::レベルを参照する。 | ||
#$28 | $7E2040 | [13] | 仲間::レベル最大値を参照する。 | ||
#$29 | $7E2040 | [12] | 仲間::レベルを 1 だけ増加させる。 | 結果値はレベル最大値を上限とする。 | |
#$2A | $7E2040 | [00] | 仲間::ID を参照する。 | ビット列である。 | |
#$2B | $7E2040 | [00] | #$3F | 指定オブジェクトの名前を得る。 | キャラクターの名前以外にも利用できる。 |
#$2C | $7E2040 | [00] | #$3F | 仲間::性別かモンスターを参照する。 | 戦闘時混乱行動にしか影響しない。 |
#$2D | $7E2040 | [22] | 仲間::職業かモンスターを参照する。 | ||
#$2E | $7E2040 | [14:16] | 仲間::所持品と装備状態を得る。 | ||
#$2F | $7E2040 | [14:16] | 仲間の所持品と装備品を数える。 | ||
#$30 | $7E2040 | [14:16] | 対象者とアイテムを指定して、仲間の所持品とする。 | ||
#$31 | $7E2040 | [14:16] | 対象者とアイテムを指定して、仲間の所持品から取り除く。 | 貴重品を考慮する。 | |
#$32 | $7E2040 | [14:16] | 対象者とアイテムを指定して、仲間の所持品から取り除く。 | ||
#$33 | $7E2040 | [14:16] | 対象者とアイテムを指定して、仲間の所持位置と装備状態を得る。 | ||
#$34 | $7E2040 | [14:16] | 対象者とアイテム位置を指定して、仲間に装備させる。 | ||
#$35 | * | * | * | 一回だけ(みなごろしのけん) | |
#$36 | * | * | * | 未使用 | |
#$37 | * | * | * | 未使用 | |
#$38 | * | * | * | 一回だけ(てんくうのかぶと) | |
#$39 | $7E2040 | [14:16] | 対象者を指定して、仲間が武器をいくつ所持しているかを数える。 | 未使用 | |
#$3A | $7E2040 | [14:16] | 対象者を指定して、仲間が防具をいくつ所持しているかを数える。 | 未使用 | |
#$3B | $7E2040 | [14:16] | 対象者を指定して、仲間が盾をいくつ所持しているかを数える。 | 未使用 | |
#$3C | $7E2040 | [14:16] | 対象者を指定して、仲間が兜をいくつ所持しているかを数える。 | 未使用 | |
#$3D | $7E2040 | [14:16] | 仲間::主要装備品を参照する。 | ||
#$3E | $7E2040 | [01] | 指定 | 仲間::状態を参照する。 | |
#$3F | $7E2040 | [01] | 指定 | 仲間::状態をセットする。 | |
#$40 | $7E2040 | [01] | 指定 | 仲間::状態をリセットする。 | |
#$41 | $000760 | [05] | 指定 | 味方ワーク::状態を参照する。 | |
#$42 | $000760 | [05] | 指定 | 味方ワーク::状態をセットする。 | |
#$43 | $000760 | [05] | 指定 | 味方ワーク::状態をリセットする。 | |
#$44 | $000760 | [05] | 指定 | 味方ワーク::状態カウンターを 1 だけ減少させる。 | |
#$45 | $7E201D | n/a | 指定する状態のパーティーメンバーを数える。 | ||
#$46 | $7E201D | n/a | 指定する状態のパーティーメンバーを検索する。 | ||
#$47 | $7E2040 | n/a | パーティーメンバーを加える。 | ||
#$48 | $7E2040 | n/a | パーティーメンバーを外す。 | ||
#$49 | $7E2000 | [19:1C] | 所持金を参照する。 | ||
#$4A | $7E2000 | [19:1C] | 所持金を増加させる。 | 結果値は 99999 を上限とする。 | |
#$4B | $7E2000 | [19:1C] | 所持金を減少させる。 | 結果値は 0 を下限とする。 | |
#$4C | $7E2000 | [30:33] | ルーラで行ける地点を数える。 | ||
#$4D | $7E2000 | [30:33] | ルーラで行ける地点があるか調べる。 | ||
#$4E | $7E2033 | #$7F | 調査中。 | 未使用 | |
#$4F | $7E2034 | さくせんを参照する。 | |||
#$50 | $0007C0 | [02:04] | 敵方ワーク::HP を参照する。 | ||
#$51 | $0007C0 | [02:04] | 敵方ワーク::HP を増加させる。 | 結果値は MHP を上限とする。 | |
#$52 | $0007C0 | [02:04] | 敵方ワーク::HP を減少させる。 | 結果値は 0 を下限とする。マジックナンバーを考慮する。 | |
#$53 | $0007C0 | [02:04] | 敵方ワーク::HP をその MHP と同じ値とする。 | ||
#$54 | $0007C0 | [02:04] | 敵方ワーク::HP をその MHP の半分の値とする。 | ||
#$55 | $238000 | [03] | 敵方メンバーの MHP を評価する。 | マジックナンバーやモシャスを考慮。 | |
#$56 | $0007C0 | [04] | 敵方ワーク::MP を参照する。 | ||
#$57 | $0007C0 | [04] | 敵方ワーク::MP を増加させる。 | 結果値は 254 を上限とする。 | |
#$58 | $0007C0 | [04] | 敵方ワーク::MP を減少させる。 | 結果値は 0 を下限とする。マジックナンバーを考慮する。 | |
#$59 | $0007C0 | [04] | 敵方ワーク::MP と指定値とを比較する。 | ||
#$5A | $0007C0 | [04] | 敵方ワーク::MP をその MMP と同じ値とする。 | ||
#$5B | $238000 | [04] | モンスター::MMP を参照する。 | ||
#$5C | $0007C0 | [05] | 敵方ワーク::すばやさを参照する。 | ||
#$5D | $0007C0 | [05] | 敵方ワーク::すばやさを増加させる。 | 結果値は 255 を上限とする。 | |
#$5E | $0007C0 | [05] | 敵方ワーク::すばやさを減少させる。 | 結果値は 0 を下限とする。 | |
#$5F | $238000 | [00] | モンスター::すばやさを参照する。 | ||
#$60 | $0007C0 | [06:08] | 敵方ワーク::攻撃力を参照する。 | ||
#$61 | $0007C0 | [06:08] | 敵方ワーク::攻撃力を増加させる。 | 結果値は 2047 を上限とする。 | |
#$62 | $0007C0 | [06:08] | 敵方ワーク::攻撃力を減少させる。 | 結果値は 0 を下限とする。 | |
#$63 | $238000 | [01] | #$80 | モンスター::攻撃力を参照する。 | 攻撃力の 256 の位の値は [08] にある。 |
#$64 | $0007C0 | [08:0A] | 敵方ワーク::守備力を参照する。 | ||
#$65 | $0007C0 | [08:0A] | 敵方ワーク::守備力を増加させる。 | 結果値は 2047 を上限とする。 | |
#$66 | $0007C0 | [08:0A] | 敵方ワーク::守備力を減少させる。 | 結果値は 0 を下限とする。 | |
#$67 | $238000 | [02] | 敵方メンバーの守備力を評価する。 | マジックナンバーを考慮する。 | |
#$68 | $238000 | [08] | #$03 | モンスター::コマンド選択制約を参照する。 | |
#$69 | $238000 | [0A] | #$E0 | モンスター::コマンド選択アルゴリズムを参照する。 | |
#$6A | $238000 | [11] | モンスター::戦闘コマンドを参照する。 | ||
#$6B | $238000 | [0B] | #$C0 | モンスター::複数回攻撃を参照する。 | |
#$6C | $238000 | [0A] | #$18 | モンスター::自動回復を参照する。 | |
#$6D | $238000 | [0C] | #$40 | モンスター::集中攻撃を参照する。 | |
#$6E | $238000 | [08] | #$30 | モンスター::みかわしを参照する。 | |
#$6F | $238000 | [0C] | 指定 | モンスター::状態を参照する。 | |
#$70 | $238000 | [0C] | #$80 | モンスター::初期状態を参照する。 | |
#$71 | $238000 | [09] | #$C0 | モンスター::初期状態適用確率を参照する。 | |
#$72 | $238000 | [05:07] | モンスター::経験値を参照する。 | ||
#$73 | $238000 | [07:09] | モンスター::ゴールドを参照する。 | ||
#$74 | $238000 | [09] | #$38 | モンスター::アイテム確率を参照する。 | |
#$75 | $238000 | [17] | モンスター::アイテムを参照する。 | ||
#$76 | $238000 | [09] | #$07 | モンスター::仲間確率を参照する。 | |
#$77 | $238000 | [18] | #$7F | モンスター::仲間モンスターを参照する。 | |
#$78 | $0007C0 | [00] | 敵方ワーク::IDを参照する。 | ||
#$79 | $0007C0 | [0A] | 指定 | 敵方ワーク::状態を参照する。 | |
#$7A | $0007C0 | [0A] | 指定 | 敵方ワーク::状態を参照する。 | |
#$7B | $0007C0 | [0A] | 指定 | 敵方ワーク::状態をリセットする。 | |
#$7C | $0007C0 | [0A] | 指定 | 敵方ワーク::状態カウンターを 1 だけ減少させる。 | |
#$7D | $0007C0 | [01] | #$03 | 敵方ワーク::敵グループを参照する。 | |
#$7E | $0007C0 | [01] | #$BC | 敵方ワーク::敵位置を参照する。 | |
#$7F | $0007C0 | [00] | 主人公等を初期化する。 | ||
#$80 | $7E2035 | #$07 | ひょうじそくどを参照する。 | ||
#$81 | $7E2034 | さくせんをセットする。 | |||
#$82 | $7E2040 | [00] | 移動時呪文と消費 MP を参照する。 | 対象アドレスを別途算出。 | |
#$83 | $7E2040 | [00] | 移動時呪文特技を参照する。 | 対象アドレスを別途算出。 | |
#$84 | $7E2040 | [00] | 習得済移動時呪文の個数を得る。 | 対象アドレスを別途算出。 | |
#$85 | $7E2040 | [00] | 戦闘時呪文と消費 MP を参照する。 | 対象アドレスを別途算出。 | |
#$86 | $7E2040 | [00] | 戦闘時呪文特技の個数を得る。 | 対象アドレスを別途算出。 | |
#$87 | $7E2040 | [00] | 習得済戦闘時呪文特技の個数を得る。 | 対象アドレスを別途算出。 | |
#$88 | $7E2035 | ひょうじそくどをセットする。 | |||
#$89 | $7E2040 | [14:16] | 対象者とアイテム位置を指定して、仲間の装備を外す。 | ||
#$8A | $7E2020 | 調査中。 | |||
#$8B | $23AED1 | [08] | #$0F | 仲間モンスター::装備クラスを参照する。 | 未使用? |
#$8C | $23AED1 | [08] | これはナンセンス。 | 未使用 | |
#$8D | $23AED1 | [01] | #$7F | 仲間モンスター::レベル最大値を参照する。 | 未使用 |
#$8E | $7E201D | アイテムをパーティーの誰かの所持品に追加する。 | |||
#$8F | $0007C0 | [0A] | 調査中。 | なぜか二度連続して呼ぶ。 | |
#$90 | $7E201C | アイテムをパーティーの所持品から検索する。 | |||
#$91 | $7E201C | #$C0 | 馬車利用可か調べる。 | ||
#$92 | $7E201C | #$C0 | 馬車利用可とする。 | ||
#$93 | $7E201C | #$3F | 調査中。 | ||
#$94 | $7E2000 | [19:1C] | 所持金に指定額だけ増加させられるか調べる。 | 結果値は 99999 を上限とする。未使用。 | |
#$95 | $7E2040 | [01] | #03 | 仲間::状態をリセットする。 | 未使用? |
#$96 | $7E2040 | [01] | #03 | 仲間::状態をセットする。 | 未使用 |
#$97 | $7E2000 | [3A:3C] | 預かり所::預金額を参照する。 | 1000G 単位。 | |
#$98 | $7E2000 | [3A:3C] | 預かり所::預金額に指定額だけ増加させられるか調べる。 | 1000G を単位として結果値は 1000 を上限とする。 | |
#$99 | $7E2000 | [3A:3C] | 預かり所::預金額を増加させる。 | 1000G を単位として結果値は 1000 を上限とする。 | |
#$9A | $7E2000 | [3A:3C] | 預かり所::預金額を減少させる。 | 結果値は 0 を下限とする。 | |
#$9B | $7E2250 | 預かり所::在庫数を得る(ぶき)。 | |||
#$9C | $7E2250 | 預かり所::在庫数を得る(ぼうぐ)。 | |||
#$9D | $7E2250 | 預かり所::在庫数を得る(どうぐ)。 | |||
#$9E | $7E2250 | 預かり所::在庫を増やせるか調べる。 | 結果値は 99 を上限とする。 | ||
#$9F | $7E2250 | 預かり所::在庫を 1 だけ増やす。 | 結果値は 99 を上限とする。 | ||
#$A0 | $7E2250 | 預かり所::アイテムと在庫数を得る(ぶき)。 | |||
#$A1 | $7E2250 | 預かり所::アイテムと在庫数を得る(ぼうぐ)。 | |||
#$A2 | $7E2250 | 預かり所::アイテムと在庫数を得る(どうぐ)。 | |||
#$A3 | $7E2250 | 預かり所::在庫を 1 だけ減らす(ぶき)。 | 結果値は 0 を下限とする。 | ||
#$A4 | $7E2250 | 預かり所::在庫を 1 だけ減らす(ぼうぐ)。 | 結果値は 0 を下限とする。 | ||
#$A5 | $7E2250 | 預かり所::在庫を 1 だけ減らす(どうぐ)。 | 結果値は 0 を下限とする。 | ||
#$A6 | $7E2332 | [00] | じいさんに預けてある仲間モンスターの頭数を数える。 | ||
#$A7 | $7E2332 | [00] | じいさんに預けてある仲間モンスターがいるか調べる。 | 未使用 | |
#$A8 | $7E2040 | [00] | じいさんに仲間モンスターを送る。 | ||
#$A9 | $7E2040 | じいさんから仲間モンスターを引き取る。 | |||
#$AA | $7E2332 | [00] | 同一種モンスター仲間数というデータを更新する。 | ||
#$AB | $7E2332 | [00] | #$3F | 預けたモンスター::名前を得る。 | 文字列の出力先は $00:$10 とする。 |
#$AC | $7E2332 | [00] | #$7F | 預けたモンスター::レベルを参照する。 | |
#$AD | $7E2332 | [01] | #$80 | 預けたモンスター::生存状態を参照する。 | |
#$AE | $7E2332 | [0B:0E] | 預けたモンスター::けいけんちを参照する。 | 未使用 | |
#$AF | $7E2332 | [02:04] | 預けたモンスター::HP を参照する。 | ||
#$B0 | $7E2332 | [04:06] | 預けたモンスター::MP を参照する。 | ||
#$B1 | $7E2332 | [0E:10] | 預けたモンスター::MHP を参照する。 | 未使用 | |
#$B2 | $7E2332 | [10:12] | 預けたモンスター::MMP を参照する。 | 未使用 | |
#$B3 | $7E2332 | [06] | 預けたモンスター::すばやさを参照する。 | 未使用 | |
#$B4 | $7E2332 | [07] | 預けたモンスター::ちからを参照する。 | 未使用 | |
#$B5 | $7E2332 | [08] | 預けたモンスター::みのまもりを参照する。 | 未使用 | |
#$B6 | $7E2332 | [09] | 預けたモンスター::かしこさを参照する。 | 未使用 | |
#$B7 | $7E2332 | [0A] | 預けたモンスター::うんのよさを参照する。 | 未使用 | |
#$B8 | $7E2332 | [00] | 預けたモンスター::モンスターを参照する。 | ||
#$B9 | $7E2332 | [14:18] | 預けたモンスター::装備品を参照する。 | ||
#$BA | $7E294A | [00] | ルイーダに預けてある仲間の人数を数える。 | ||
#$BB | $7E294A | [00] | ルイーダに預けてある仲間がいるか調べる。 | 未使用 | |
#$BC | $7E2040 | [00] | ルイーダに仲間を送る。 | ||
#$BD | $7E2040 | ルイーダから仲間を引き取る。 | |||
#$BE | $7E294A | [00] | #$3F | 預けた人間::名前を得る。 | 文字列の出力先は $00:$10 とする。 |
#$BF | $7E294A | [12] | #$7F | 預けた人間::レベルを参照する。 | |
#$C0 | $7E294A | [01] | #$80 | 預けた人間::生存状態を参照する。 | |
#$C1 | $7E294A | [0B:0E] | 預けた人間::けいけんちを参照する。 | 未使用 | |
#$C2 | $7E294A | [02:04] | 預けた人間::HP を参照する。 | ||
#$C3 | $7E294A | [04:06] | 預けた人間::MP を参照する。 | ||
#$C4 | $7E294A | [0E:10] | 預けた人間::MHP を参照する。 | 未使用 | |
#$C5 | $7E294A | [10:12] | 預けた人間::MMP を参照する。 | 未使用 | |
#$C6 | $7E294A | [06] | 預けた人間::すばやさを参照する。 | 未使用 | |
#$C7 | $7E294A | [07] | 預けた人間::ちからを参照する。 | 未使用 | |
#$C8 | $7E294A | [08] | 預けた人間::みのまもりを参照する。 | 未使用 | |
#$C9 | $7E294A | [09] | 預けた人間::かしこさを参照する。 | 未使用 | |
#$CA | $7E294A | [0A] | 預けた人間::うんのよさを参照する。 | 未使用 | |
#$CB | $7E294A | [18] | 預けた人間::肩書を参照する。 | ||
#$CC | $7E294A | [16:1A] | これはナンセンス。 | 未使用 | |
#$CD | $7E2250 | 指定アイテムの預かり所::在庫を参照する。 | |||
#$CE | $000760 | [05:09] | 味方ワーク::状態ビット列を参照する。 | ||
#$CF | $000760 | [09] | 味方ワーク::状態ビット列を参照する。 | ||
#$D0 | $0007C0 | [0A:0E] | 敵方ワーク::状態ビット列を参照する。 | ||
#$D1 | $0007C0 | [0E:10] | 敵方ワーク::状態ビット列を参照する。 | ||
#$D2 | $7E2040 | [23:26] | 仲間::習得済コマンドをセットする。 | ||
#$D3 | $7E2000 | [3F] | メダル王::ちいさなメダルを数える。 | ||
#$D4 | $7E2000 | [3F] | メダル王::ちいさなメダルの枚数を 1 だけ増やす。 | 結果値は 255 を上限とする。 | |
#$D5 | $7E2000 | [3F] | メダル王::ちいさなメダルの枚数を減らす。 | 結果値は 0 を下限とする。 | |
#$D6 | $7E2040 | [26:29] | 仲間::次のレベル到達時の経験値をセットする。 | ||
#$D7 | $7E2000 | [3C:3F] | カジノ::コイン枚数を参照する。 | ||
#$D8 | $7E2000 | [3C:3F] | カジノ::コイン枚数を指定分増やせるかどうか調べる。 | 結果値は 9999999 を上限とする。 | |
#$D9 | $7E2000 | [3C:3F] | カジノ::コイン枚数を増加させる。 | 結果値は 9999999 を上限とする。 | |
#$DA | $7E2000 | [3C:3F] | カジノ::コイン枚数を減少させる。 | 結果値は 0 を下限とする。 | |
#$DB | $7E201D | パーティーメンバーを検索する。 | |||
#$DC | $238000 | [08] | #$03 | モンスター::コマンド選択制約を参照する。 | |
#$DD | $238000 | [0A] | #$E0 | モンスター::コマンド選択アルゴリズムを参照する。 | |
#$DE | $238000 | [11] | モンスター::戦闘コマンドを参照する。 | ||
#$DF | $238000 | [0C] | 指定 | モンスター::耐性を参照する。 | |
#$E0 | $7E201D | パーティー情報 $7E201F = $7E201E; $7E2028,X = $7E2020,X | |||
#$E1 | $7E201D | パーティー情報 $7E201E = $7E201F; $7E2020,X = $7E2028,X | |||
#$E2 | $7E201D | パーティーを馬車外でソートする。 | |||
#$E3 | $7E201D | パーティーの先頭をセットする。 | パパスが多い。 | ||
#$E4 | $7E2040 | [29] | 仲間::キャラクターフラグを参照する。 | ||
#$E5 | $7E2040 | [29] | 仲間::キャラクターフラグをセットする。 | ||
#$E6 | $7E2040 | [25] | #$F0 | 仲間::最近使った戦闘コマンドを参照する。 | |
#$E7 | $7E2040 | [25] | #$F0 | 仲間::最近使った戦闘コマンドをセットする。 | |
#$E8 | $7E2040 | [22] | 仲間::職業・肩書・モンスターをセットする。 | ||
#$E9 | $7E201D | 指定メンバーがパーティーの何番目か調べる。 | |||
#$EA | $7E201D | $42,X から値 $4A を除外して $7E2020,X に remove_copy する。 | |||
#$EB | $7E201D | パーティーからメンバーを外す(簡易版)。 | |||
#$EC | $7E201D | パーティーにメンバーを加える(簡易版)。 | |||
#$ED | $7E2000 | [30:33] | ルーラで行ける地点をセットする。 | ||
#$EE | $0007C0 | [00] | 敵方ワーク::ID をセットする。 | ||
#$EF | $000760 | [05] | 調査中。 | なぜか二度連続して呼ぶ。 | |
#$F0 | $7E2000 | [3C:3F] | カジノ::コイン枚数をセットする。 | ||
#$F1 | $238000 | [0B] | #$C0 | モンスター::複数回攻撃を参照する。 | |
#$F2 | $238000 | [08] | #$30 | モンスター::みかわしを参照する。 | |
#$F3 | $0007C0 | [0F] | #$0F | 敵方ワーク::モシャス対象をセットする。 | |
#$F4 | $0007C0 | [0F] | #$07 | 敵方ワーク::モシャス対象を参照する。 | |
#$F5 | $0007C0 | [04] | 敵方ワーク::MP をセットする。 |
$0007C0
, $0007C0
各構造体については
3.5 戦闘キャラクター構造体 を、
$7E2040
, $7E2332
, $7E294A
各構造体については
3.4 仲間キャラクター構造体 をそれぞれ参照して欲しい。
フラグ等のアクセス対象がビット単位で構成されるデータの場合は、
次の表に基づき $43
を用いて指示する。
表 3.10 ビット単位データアクセスのための指定表
ID | ベース | オフセット | マスク | 属性 |
---|---|---|---|---|
#$00
|
不明 |
[00]
|
#$FF
|
未使用 |
#$01
|
$7E2041
|
[00]
|
#$80
|
生存フラグ |
#$02
|
$7E2041
|
[00]
|
#$40
|
マヒフラグ |
#$03
|
$7E2041
|
[00]
|
#$20
|
どくフラグ |
#$04
|
$7E2041
|
[00]
|
#$10
|
もうどくフラグ |
#$05
|
$7E2041
|
[00]
|
#$08
|
HP を呪われているフラグ |
#$06
|
$7E2041
|
[00]
|
#$04
|
MP を呪われているフラグ |
#$07
|
$7E2041
|
[00]
|
#$03
|
未使用 |
#$08
|
$000765
|
[00]
|
#$80
|
ラリホーフラグ |
#$09
|
$000765
|
[00]
|
#$40
|
おたけびフラグ |
#$0A
|
$000765
|
[00]
|
#$20
|
メダパニフラグ |
#$0B
|
$000765
|
[00]
|
#$10
|
マホトーンフラグ |
#$0C
|
$000765
|
[00]
|
#$08
|
マヌーサフラグ |
#$0D
|
$000765
|
[00]
|
#$04
|
フバーハフラグ |
#$0E
|
$000765
|
[00]
|
#$02
|
なめまわしフラグ |
#$0F
|
$000765
|
[00]
|
#$01
|
マホキテフラグ |
#$10
|
$000765
|
[01]
|
#$80
|
バイキルトフラグ |
#$11
|
$000765
|
[01]
|
#$40
|
マホカンタフラグ |
#$12
|
$000765
|
[01]
|
#$20
|
モシャスフラグ(仲間にはない) |
#$13
|
$000765
|
[01]
|
#$10
|
ドラゴラムフラグ |
#$14
|
$000765
|
[01]
|
#$08
|
ちからため・きあいためフラグ |
#$15
|
$000765
|
[01]
|
#$04
|
さそうおどりフラグ |
#$16
|
$000765
|
[01]
|
#$03
|
ぼうぎょ | ぼうぎょ2 |
#$17
|
$000765
|
[01]
|
#$01
|
ぼうぎょフラグ |
#$18
|
$000765
|
[01]
|
#$02
|
ぼうぎょ2フラグ |
#$19
|
$000765
|
[02]
|
#$80
|
ぶきみなひかりフラグ |
#$1A
|
$000765
|
[02]
|
#$40
|
みなぎるフラグ |
#$1B
|
$000765
|
[02]
|
#$20
|
はやぶさフラグ |
#$1C
|
$000765
|
[02]
|
#$10
|
すなけむりフラグ |
#$1D
|
$000765
|
[02]
|
#$0C
|
時間停止カウンター |
#$1E
|
$000765
|
[02]
|
#$03
|
まぶしいひかりカウンター |
#$1F
|
$000765
|
[03]
|
#$80
|
あしばらいフラグ |
#$20
|
$0007C0
|
[03]
|
#$30
|
ラリホーカウンター |
#$21
|
$0007C0
|
[03]
|
#$08
|
ルカニ・スカラフラグ |
#$22
|
$0007C0
|
[03]
|
#$04
|
頭を呪われているフラグ |
#$23
|
$0007C0
|
[03]
|
#$02
|
調査中 |
#$24
|
$0007C0
|
[03]
|
#$01
|
動きを呪われているフラグ |
#$25
|
$0007C0
|
[04]
|
#$80
|
着ているものを脱いでいるフラグ |
#$26
|
$0007C0
|
[04]
|
#$70
|
調査中 |
#$27
|
$0007C0
|
[04]
|
#$0F
|
コマンドカウンター |
#$28
|
$0007C0
|
[00]
|
#$80
|
いなくなったフラグ? |
#$29
|
$0007C0
|
[00]
|
#$40
|
生存フラグ |
#$2A
|
$0007C0
|
[00]
|
#$20
|
マヒフラグ |
#$2B
|
$0007C0
|
[00]
|
#$10
|
どくフラグ |
#$2C
|
$0007C0
|
[00]
|
#$08
|
経験値ゴールドを無視フラグ |
#$2D
|
$0007C0
|
[00]
|
#$04
|
アストロンフラグ |
#$2E
|
$0007C0
|
[00]
|
#$02
|
こおりついてうごけないフラグ |
#$2F
|
$0007C0
|
[00]
|
#$01
|
みぶるいフラグ |
#$30
|
$0007C0
|
[01]
|
#$80
|
ラリホーフラグ |
#$31
|
$0007C0
|
[01]
|
#$40
|
おどろきすくみフラグ |
#$32
|
$0007C0
|
[01]
|
#$20
|
メダパニフラグ |
#$33
|
$0007C0
|
[01]
|
#$10
|
マホトーンフラグ |
#$34
|
$0007C0
|
[01]
|
#$08
|
マヌーサフラグ |
#$35
|
$0007C0
|
[01]
|
#$04
|
エサかじりフラグ |
#$36
|
$0007C0
|
[01]
|
#$02
|
もうどくフラグ |
#$37
|
$0007C0
|
[01]
|
#$01
|
マホキテフラグ |
#$38
|
$0007C0
|
[02]
|
#$80
|
バイキルトフラグ |
#$39
|
$0007C0
|
[02]
|
#$40
|
マホカンタフラグ |
#$3A
|
$0007C0
|
[02]
|
#$20
|
モシャスフラグ |
#$3B
|
$0007C0
|
[02]
|
#$10
|
ドラゴラムフラグ(敵にはない) |
#$3C
|
$0007C0
|
[02]
|
#$08
|
ちからためフラグ |
#$3D
|
$0007C0
|
[02]
|
#$04
|
おどりやすみフラグ |
#$3E
|
$0007C0
|
[02]
|
#$03
|
ぼうぎょ | ぼうぎょ2 |
#$3F
|
$0007C0
|
[02]
|
#$01
|
ぼうぎょフラグ |
#$40
|
$0007C0
|
[02]
|
#$02
|
ぼうぎょ2フラグ |
#$41
|
$0007C0
|
[03]
|
#$80
|
ぶきみなひかりフラグ |
#$42
|
$0007C0
|
[03]
|
#$40
|
みなぎるフラグ |
#$43
|
$0007C0
|
[03]
|
#$20
|
はやぶさフラグ |
#$44
|
$0007C0
|
[03]
|
#$10
|
調査中 |
#$45
|
$0007C0
|
[03]
|
#$0C
|
時間停止カウンター |
#$46
|
$0007C0
|
[03]
|
#$03
|
まぶしいひかりカウンター |
#$47
|
$0007C0
|
[04]
|
#$80
|
馬車ドア閉めフラグ |
#$48
|
$0007C0
|
[04]
|
#$70
|
コマンドカウンター |
#$49
|
$0007C0
|
[04]
|
#$08
|
ルカニ・スカラフラグ |
#$4A
|
$0007C0
|
[04]
|
#$04
|
頭を呪われているフラグ |
#$4B
|
$0007C0
|
[04]
|
#$02
|
調査中 |
#$4C
|
$0007C0
|
[04]
|
#$01
|
動きを呪われているフラグ |
#$4D
|
$0007C0
|
[05]
|
#$C0
|
アストロンカウンター |
#$4E
|
$0007C0
|
[05]
|
#$30
|
ラリホーカウンター |
#$4F
|
$0007C0
|
[05]
|
#$0F
|
モシャス対象 |
#$50
|
$238000
|
[00]
|
#$30
|
メラ系に対する耐性 |
#$51
|
$238000
|
[00]
|
#$0C
|
ギラ系に対する耐性 |
#$52
|
$238000
|
[00]
|
#$03
|
イオ系に対する耐性 |
#$53
|
$238000
|
[01]
|
#$C0
|
ヒャド系に対する耐性 |
#$54
|
$238000
|
[01]
|
#$30
|
バギ系に対する耐性 |
#$55
|
$238000
|
[01]
|
#$0C
|
デイン系に対する耐性 |
#$56
|
$238000
|
[01]
|
#$03
|
ザキ系に対する耐性 |
#$57
|
$238000
|
[02]
|
#$C0
|
ラリホー系に対する耐性 |
#$58
|
$238000
|
[02]
|
#$30
|
マヌーサ系に対する耐性 |
#$59
|
$238000
|
[02]
|
#$0C
|
ニフラムに対する耐性 |
#$5A
|
$238000
|
[02]
|
#$03
|
ルカニ系に対する耐性 |
#$5B
|
$238000
|
[03]
|
#$C0
|
マホトラ系に対する耐性 |
#$5C
|
$238000
|
[03]
|
#$30
|
マホトーン系に対する耐性 |
#$5D
|
$238000
|
[03]
|
#$0C
|
メダパニに対する耐性 |
#$5E
|
$238000
|
[03]
|
#$03
|
メガンテに対する耐性 |
#$5F
|
$238000
|
[04]
|
#$C0
|
未使用 |
#$60
|
$238000
|
[04]
|
#$30
|
毒系に対する耐性 |
#$61
|
$238000
|
[04]
|
#$0C
|
休み系に対する耐性 |
実例は 3.2.3.4 オペランド #$80
, ..., #$93
: オブジェクトのフィールドにアクセス の説明と実例を参照して欲しい。
ここでは全機能共通の規則をまとめる。
この情報は逆アセンブリーコードを目視で検査して BRK #$8?
系の行周囲の意味を推測する際の目安となる。
当サブルーチン呼び出しの事前条件および事後条件を、関係するメモリーアドレスを主眼にまとめたものが次の表だ。 いずれも 8 ビットで扱う。何なら事前条件、事後条件をそれぞれ入力、出力とそれぞれ読み替えてもらっても構わない。 また、キャラクター ID とある項目は機能によっては指定不要だ。
表 3.11 サブルーチン呼び出しの事前条件
アドレス | 条件 |
---|---|
$38
|
機能 ID の値。範囲 [#$00, #$F6) の数でなければならない。 |
$3F
|
キャラクター検索フィルターとなるビットマスク。 |
$42
|
対象となるキャラクターの ID の値。 |
$43
|
サブルーチン側が必要とする情報。機能によって異なる。 |
$44
|
|
$45
|
表 3.12 サブルーチン呼び出しの事後条件
アドレス | 条件 |
---|---|
$39
|
対象となるキャラクターの ID の値。 |
$3A
|
データアクセスのためのベースアドレスの値。 |
$3B
|
|
$3C
|
|
$3D
|
上記ベースアドレスに加算したオフセット値。 |
$3E
|
データアクセス時のデータサイズ。 |
$46
|
呼び出し側が必要とする情報。機能によって異なる。 |
$47
|
|
$48
|
|
$49
|
|
$4A
|
$46 , ..., $49 のコピー。 |
$4B
|
|
$4C
|
|
$4D
|