DQ3 プレイヤーキャラクター情報へのアクセス
以前バイナリスレで86氏に教えていただいたPC*1のステータス(HP、MP、力など)の取得/変更(SR: $043414 力取得など)は、大抵3,4個の引数を取りますが、なんとなく2番目が対象キャラクターを示し、3番目以降で変更(もしくは取得)する値の指定をしている程度の理解で実装をしていました。現在行っている作業の中でこれらのSRについて正しく理解する羽目になったのでエントリとして投下します。
そもそも各PCのステータス自体は$7E3925-から1PCにつき60バイトの領域を使用して連続して格納されています。$7E3925-は勇者の情報、$7E3961-はルイーダに最初から入る仲間の1人目の情報…のようになっており、この順番は基本固定で、キャラの順番を入れ替えても格納位置が変わることはありません。実際にパーティに参加しているキャラクターの情報等は以前のエントリ(https://retrogamehackers.net/dq3-pcinfo-management-001/)で説明したように$7E36E2-に各種人数、$7E36E8-に各キャラクターの開始アドレスが配列になって並んでいます。とどのつまりは「この開始アドレスをいかにして取得してくるか」が最終的な目的になります。PCのステータスにアクセスするSRは以下の2種類があります。
- Xレジスタに開始アドレスがセットされていることを前提としてAレジスタにデータを返す/Aレジスタのデータに変更する
- 1をラップしてより柔軟なデータのやり取りをできるようにする