DQ3 ゲストキャラクター概念の追加5(移動中編2)

随分間が開いてしまいましたが、前回最後で思いついた方式については時間が取れず全く手を付けられていません。他の作業等もあり、いつ手を付けられそうか全く不明なため、とりあえず現状実装している方式について先にエントリを投下して時間稼ぎをすることにします。

追加で使用するメモリ領域は以下のとおり。メニューを開いている間のみなので使用期間は限定的です。

7E2700 メニュー上1番目の実インデックス
7E2702 メニュー上2番目の実インデックス
7E2704 メニュー上3番目の実インデックス
7E2706 メニュー上4番目の実インデックス
7E2708 1なら移動中メニュー処理中
  • SR: $03AC8A 移動中メニュー処理
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
  • SR: $03AF02 移動中どうぐメニュー処理
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) 省略

これでようやく上記のメモリに必要な情報がセットされます。まだ入り口の入り口なんですがとりあえずここまで。

コメント

  1. ドングリ より:

    記事とは関連しないのですがSFCGENEditorのDQ3のRomMap(6MB用)について・・・
    移動中アイテム鑑定時メッセージIDとメッセージ(王様やお店のメッセージIDがある項目)
    の項目がエラー発生で開けないようになっています。
    具体的にはそこを選択すると「メッセージのレコード数が不足しています」
    と表示された後「位置○○に行がありません」と出てきます。
    ご確認いただけますでしょうか?

    管理者より返信:

    6MB用のRomMap.xmlのメッセージ用のアドレスが4MB用のものになっているようですね。正直2バージョン(4MB, 6MB)のメンテナンスは今は時間が取れないのでやりません。6MBのRomMap.xlのメッセージのアドレスを

    のように変えれば少なくとも参照はできるようです。

  2. ドングリ より:

    お忙しい中、対応ありがとうございました。
    無事表示されるようになりました。