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

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

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

7E2700メニュー上1番目の実インデックス
7E2702メニュー上2番目の実インデックス
7E2704メニュー上3番目の実インデックス
7E2706メニュー上4番目の実インデックス
7E27081なら移動中メニュー処理中

  • SR: $03AC8A 移動中メニュー処理
03AD27JMP $FC5F ($03FC5F)goto $03FC5F
03AD2ABCS #$DEif(c==on) goto $03AD0A

  • SR: $03FC5F 移動中メニュー処理(追加)(新規処理)
03FC5FJSR $AD2FSR: $($03AD2F+X)メインメニュー処理SRリスト
03FC62PHPPush P Flag
03FC63JSL $C5E1A3SR: $05E1A3PCリスト領域クリア
03FC67PLPPull P Flag
03FC68JMP $AD2A ($03AD2A)goto $03AD2Aジャンプした直前に戻る

  • SR: $05E1A3 PCリスト領域クリア(新SR)
05E1A3LDX #$0000X=#$0000
05E1A6STZ $2700,X$2700+X=#$00
05E1A9INXX++
05E1AAINXX++
05E1ABCPX #$000AX>=#$000A?
05E1AEBCC #$F6if(c==off) goto $05E1A6
05E1B0RTLreturn

  • SR: $03AF02 移動中どうぐメニュー処理
03AF02JSL $C5E022SR: $05E022
03AF06JSL $C5E02BSR: $05E02B
03AF0ANOP

  • SR: $05E022 PCリスト領域初期化+実PCインデックス作成(新SR)
05E022JSL $C5E110SR: $05E110PCリスト領域初期化
05E026JSL $C5E127SR: $05E127リストのインデックスに対応する実PCインデックス作成
05E02ARTLreturn

  • SR: $05E110 PCリスト領域初期化(新SR)
05E110LDX #$0000X=#$0000
05E113LDA #$FFFFA=#$FFFF
05E116STA $2700,X$2700+X=A
05E119INXX++
05E11AINXX++
05E11BCPX #$000AX>=#$000A?
05E11EBCC #$F6if(c==off) goto $05E116
05E120LDA #$0001A=#$0001
05E123STA $2708$2708=A
05E126RTLreturn

  • SR: $05E127 リストのインデックスに対応する実PCインデックス作成(新SR)
05E127JSL $C5F067SR: $05F067ゲストを除いたパーティ人数を$3394にセット
05E12BPHAPush A
05E12CLDX #$0000X=#$0000
05E12FLDY #$0000Y=#$0000
05E132JSL $C5E1F8SR: $05E1F8PCリストに追加するか(追加するc=on)
05E136BCC #$06if(c==off) goto $05E13E
05E138TXAA=X
05E139STA $2700,Y$2700+Y=A
05E13CINYY++
05E13DINYY++
05E13EINXX++
05E13FTYAA=Y
05E140LSRA>>1
05E141CMP $01,SA>=Stack($01)?
05E143BCC #$EDif(c==off) goto $05E132
05E145PLAPull A
05E146RTLreturn

  • SR: $05F067 ゲストを除いたパーティ人数を$3394にセット(新SR)
05F067JSL $C5DF7DSR: $05DF7Dパーティ人数取得(ゲストは除外)
05F06BSTA $3394$3394=A
05F06ERTLreturn

  • SR: $05DF7D パーティ人数取得(ゲストは除外)(新SR)
05DF7DLDA $7E35B6A=$7E35B6
05DF81AND #$0080A&=#$0080過去テドンイベント中なら1人で確定
05DF84BEQ #$04if(z==on) goto $05DF8A
05DF86LDA #$0001A=#$0001
05DF89RTLreturn
05DF8ALDA $7E35B6A=$7E35B6
05DF8EAND #$0001A&=#$0001幽霊船追加イベント中で傭兵がゲストになっていれば1人減らす
05DF91BEQ #$08if(z==on) goto $05DF9B
05DF93JSL $C4297CSR: $04297C 引数:1#$01 引数:2#$FFパーティ人数取得
05DF99DECA–
05DF9ARTLreturn
05DF9BJSL $C4297CSR: $04297C 引数:1#$01 引数:2#$FFパーティ人数取得
05DFA1RTLreturn

  • SR: $05E1F8 PCリストに追加するか(追加するc=on)(新SR)
05E1F8JSL $C46951SR: $046951 引数:1#$01 引数:2#$FE 引数:3#$FF職業取得
05E1FFCMP #$000AA==#$000A?勇者(オルテガ専用)
05E202BEQ #$12if(z==on) goto $05E216
05E204CMP #$000BA==#$000B?ホビット族
05E207BEQ #$0Dif(z==on) goto $05E216
05E209CMP #$000CA==#$000C?傭兵
05E20CBNE #$06if(z==off) goto $05E214
05E20EJSL $C5E17FSR: $05E17F傭兵がゲスト扱いか(c=on)
05E212BCS #$02if(c==on) goto $05E216
05E214SECc=on
05E215RTLreturn
05E216CLCc=off
05E217RTLreturn
  • SR: $05E17F 傭兵がゲスト扱いか(c=on)(新SR) 省略

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

コメント

  1. ドングリ より:

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

    管理者より返信:

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

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

  2. ドングリ より:

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

タイトルとURLをコピーしました