随分間が開いてしまいましたが、前回最後で思いついた方式については時間が取れず全く手を付けられていません。他の作業等もあり、いつ手を付けられそうか全く不明なため、とりあえず現状実装している方式について先にエントリを投下して時間稼ぎをすることにします。
追加で使用するメモリ領域は以下のとおり。メニューを開いている間のみなので使用期間は限定的です。
| 7E2700 |
メニュー上1番目の実インデックス |
| 7E2702 |
メニュー上2番目の実インデックス |
| 7E2704 |
メニュー上3番目の実インデックス |
| 7E2706 |
メニュー上4番目の実インデックス |
| 7E2708 |
1なら移動中メニュー処理中 |
| 略 |
|
|
|
| 03AD27 |
JMP $FC5F ($03FC5F) |
goto $03FC5F |
|
| 03AD2A |
BCS #$DE |
if(c==on) goto $03AD0A |
|
| 略 |
|
|
|
- SR: $03FC5F 移動中メニュー処理(追加)(新規処理)
| 03FC5F |
JSR $AD2F |
SR: $($03AD2F+X) |
メインメニュー処理SRリスト |
| 03FC62 |
PHP |
Push P Flag |
|
| 03FC63 |
JSL $C5E1A3 |
SR: $05E1A3 |
PCリスト領域クリア |
| 03FC67 |
PLP |
Pull P Flag |
|
| 03FC68 |
JMP $AD2A ($03AD2A) |
goto $03AD2A |
ジャンプした直前に戻る |
- SR: $05E1A3 PCリスト領域クリア(新SR)
| 05E1A3 |
LDX #$0000 |
X=#$0000 |
|
| 05E1A6 |
STZ $2700,X |
$2700+X=#$00 |
|
| 05E1A9 |
INX |
X++ |
|
| 05E1AA |
INX |
X++ |
|
| 05E1AB |
CPX #$000A |
X>=#$000A? |
|
| 05E1AE |
BCC #$F6 |
if(c==off) goto $05E1A6 |
|
| 05E1B0 |
RTL |
return |
|
| 03AF02 |
JSL $C5E022 |
SR: $05E022 |
|
| 03AF06 |
JSL $C5E02B |
SR: $05E02B |
|
| 03AF0A |
NOP |
|
|
| 略 |
|
|
|
- SR: $05E022 PCリスト領域初期化+実PCインデックス作成(新SR)
| 05E022 |
JSL $C5E110 |
SR: $05E110 |
PCリスト領域初期化 |
| 05E026 |
JSL $C5E127 |
SR: $05E127 |
リストのインデックスに対応する実PCインデックス作成 |
| 05E02A |
RTL |
return |
|
- SR: $05E110 PCリスト領域初期化(新SR)
| 05E110 |
LDX #$0000 |
X=#$0000 |
|
| 05E113 |
LDA #$FFFF |
A=#$FFFF |
|
| 05E116 |
STA $2700,X |
$2700+X=A |
|
| 05E119 |
INX |
X++ |
|
| 05E11A |
INX |
X++ |
|
| 05E11B |
CPX #$000A |
X>=#$000A? |
|
| 05E11E |
BCC #$F6 |
if(c==off) goto $05E116 |
|
| 05E120 |
LDA #$0001 |
A=#$0001 |
|
| 05E123 |
STA $2708 |
$2708=A |
|
| 05E126 |
RTL |
return |
|
- SR: $05E127 リストのインデックスに対応する実PCインデックス作成(新SR)
| 05E127 |
JSL $C5F067 |
SR: $05F067 |
ゲストを除いたパーティ人数を$3394にセット |
| 05E12B |
PHA |
Push A |
|
| 05E12C |
LDX #$0000 |
X=#$0000 |
|
| 05E12F |
LDY #$0000 |
Y=#$0000 |
|
| 05E132 |
JSL $C5E1F8 |
SR: $05E1F8 |
PCリストに追加するか(追加するc=on) |
| 05E136 |
BCC #$06 |
if(c==off) goto $05E13E |
|
| 05E138 |
TXA |
A=X |
|
| 05E139 |
STA $2700,Y |
$2700+Y=A |
|
| 05E13C |
INY |
Y++ |
|
| 05E13D |
INY |
Y++ |
|
| 05E13E |
INX |
X++ |
|
| 05E13F |
TYA |
A=Y |
|
| 05E140 |
LSR |
A>>1 |
|
| 05E141 |
CMP $01,S |
A>=Stack($01)? |
|
| 05E143 |
BCC #$ED |
if(c==off) goto $05E132 |
|
| 05E145 |
PLA |
Pull A |
|
| 05E146 |
RTL |
return |
|
- SR: $05F067 ゲストを除いたパーティ人数を$3394にセット(新SR)
| 05F067 |
JSL $C5DF7D |
SR: $05DF7D |
パーティ人数取得(ゲストは除外) |
| 05F06B |
STA $3394 |
$3394=A |
|
| 05F06E |
RTL |
return |
|
- SR: $05DF7D パーティ人数取得(ゲストは除外)(新SR)
| 05DF7D |
LDA $7E35B6 |
A=$7E35B6 |
|
| 05DF81 |
AND #$0080 |
A&=#$0080 |
過去テドンイベント中なら1人で確定 |
| 05DF84 |
BEQ #$04 |
if(z==on) goto $05DF8A |
|
| 05DF86 |
LDA #$0001 |
A=#$0001 |
|
| 05DF89 |
RTL |
return |
|
| 05DF8A |
LDA $7E35B6 |
A=$7E35B6 |
|
| 05DF8E |
AND #$0001 |
A&=#$0001 |
幽霊船追加イベント中で傭兵がゲストになっていれば1人減らす |
| 05DF91 |
BEQ #$08 |
if(z==on) goto $05DF9B |
|
| 05DF93 |
JSL $C4297C |
SR: $04297C 引数:1#$01 引数:2#$FF |
パーティ人数取得 |
| 05DF99 |
DEC |
A– |
|
| 05DF9A |
RTL |
return |
|
| 05DF9B |
JSL $C4297C |
SR: $04297C 引数:1#$01 引数:2#$FF |
パーティ人数取得 |
| 05DFA1 |
RTL |
return |
|
- SR: $05E1F8 PCリストに追加するか(追加するc=on)(新SR)
| 05E1F8 |
JSL $C46951 |
SR: $046951 引数:1#$01 引数:2#$FE 引数:3#$FF |
職業取得 |
| 05E1FF |
CMP #$000A |
A==#$000A? |
勇者(オルテガ専用) |
| 05E202 |
BEQ #$12 |
if(z==on) goto $05E216 |
|
| 05E204 |
CMP #$000B |
A==#$000B? |
ホビット族 |
| 05E207 |
BEQ #$0D |
if(z==on) goto $05E216 |
|
| 05E209 |
CMP #$000C |
A==#$000C? |
傭兵 |
| 05E20C |
BNE #$06 |
if(z==off) goto $05E214 |
|
| 05E20E |
JSL $C5E17F |
SR: $05E17F |
傭兵がゲスト扱いか(c=on) |
| 05E212 |
BCS #$02 |
if(c==on) goto $05E216 |
|
| 05E214 |
SEC |
c=on |
|
| 05E215 |
RTL |
return |
|
| 05E216 |
CLC |
c=off |
|
| 05E217 |
RTL |
return |
|
- SR: $05E17F 傭兵がゲスト扱いか(c=on)(新SR) 省略
これでようやく上記のメモリに必要な情報がセットされます。まだ入り口の入り口なんですがとりあえずここまで。
コメント
お忙しい中、対応ありがとうございました。
無事表示されるようになりました。
記事とは関連しないのですがSFCGENEditorのDQ3のRomMap(6MB用)について・・・
移動中アイテム鑑定時メッセージIDとメッセージ(王様やお店のメッセージIDがある項目)
の項目がエラー発生で開けないようになっています。
具体的にはそこを選択すると「メッセージのレコード数が不足しています」
と表示された後「位置○○に行がありません」と出てきます。
ご確認いただけますでしょうか?
6MB用のRomMap.xmlのメッセージ用のアドレスが4MB用のものになっているようですね。正直2バージョン(4MB, 6MB)のメンテナンスは今は時間が取れないのでやりません。6MBのRomMap.xlのメッセージのアドレスを
のように変えれば少なくとも参照はできるようです。