DQ3 ストーリー変更(アレフガルド船入手)

追加ダンジョンクリアによってオリハルコンが入手できるため、マイラまで徒歩で行けば王者の剣が入手できます(オリハルコンの価格を低くして王者の剣入手にかかるコストを高くしました)。このタイミングで船の取得を可能にします。流れとしては

  1. 太陽の石入手後、カンダタに話し掛けて船の手配を依頼する
  2. 王者の剣入手後、カンダタに話し掛けて必要経費(20000G)を払えば船取得

となります。フラグを立てるだけのお使いイベント的なものです。 ポイントは

  • 船を入手した時点で船をラダトーム西に出現させる

くらいですが、これもバイナリwikiにアレフガルドの船の座標のアドレスがばっちり出ているので苦労はしません。あと、若干カンダタのキャラを変えて勇者を「だんな」呼ばわりすることにしましたw。これといって難しいこともないので実装も本エントリで終わらせてしまいます。

  • SR: $0A5DD4 ラダトーム2F進入時初期化処理
0A5DE3 JSL $CCF661 SR: $0CF661 ラダトーム2Fイベント設定・NPC他設定
0A5DE7-9 NOP
  • SR: $0CF661 ラダトーム2Fイベント設定・NPC他設定(新SR)
0CF661 JSL $C77843 SR: $077843 引数:1#$CAA5BD 移動・宝箱・ドア・NPC上方設定用SRアドレス設定
0CF668 JSL $C7785F SR: $07785F 引数:1#$CDEEB6 イベント設定
0CF66F RTL return
  • SR: $0CC9F1 ラダトーム2FNPC設定
0CC9F1-3 NOP
0CC9F4 JSL $CCF670 SR: $0CF670 ラダトーム2FNPC設定
0CC9F8 RTL return
  • SR: $0CF670 ラダトーム2FNPC設定(新SR)
0CF670 JSL $CCF4A5 SR: $0CF4A5 カンダタに船入手依頼中か調べる(該当c=on)
0CF674 BCS #$07 if(c==on) goto $0CF67D
0CF676 LDA #$0456 A=#$0456
0CF679 JSL $C75828 SR: $075828 NPC1設定
0CF67D RTL return
  • SR: $0B9CC4 NPC1_TalkSR_0456(カンダタのNPC)
0B9CE4 JSR $FA80 SR: $0BFA80 ラダトームカンダタ会話処理
  • SR: $0BFA80 ラダトームカンダタ会話処理(新SR)
0BFA80 LDA $35B1 A=$35B1
0BFA83 AND #$0004 A&=#$0004 アレフガルドで船を手に入れた
0BFA86 BEQ #$05 if(z==on) goto $0BFA8D
0BFA88 BRK $1045 ($0B1045) goto $00FFE6(メッセージ表示) #$1045
0BFA8B BRA #$28 goto $0BFAB5
0BFA8D JSL $CCF64F SR: $0CF64F 王者の剣を入手していてカンダタに船入手を依頼しているか(該当c=on)
0BFA91 BCC #$29 if(c==off) goto $0BFABC
0BFA93 BRK $1046 ($0B1046) goto $00FFE6(メッセージ表示) #$1046
0BFA96 JSL $C3226F SR: $03226F 引数:1#$16 引数:2#$12 ウィンドウ表示
0BFA9C JSL $C322C6 SR: $0322C6 引数:1#$16 ウィンドウ消去?
0BFAA1 BCS #$14 if(c==on) goto $0BFAB7
0BFAA3 JSL $CDEEC8 SR: $0DEEC8 カンダタに船の代金20000Gを支払う処理(支払い完了c=on)
0BFAA7 BCC #$09 if(c==off) goto $0BFAB2
0BFAA9 BRK $1047 ($0B1047) goto $00FFE6(メッセージ表示) #$1047
0BFAAC JSL $CCF362 SR: $0CF362 アレフガルド船取得処理
0BFAB0 BRA #$03 goto $0BFAB5
0BFAB2 BRK $1048 ($0B1048) goto $00FFE6(メッセージ表示) #$1048
0BFAB5 BRA #$03 goto $0BFABA
0BFAB7 BRK $1049 ($0B1049) goto $00FFE6(メッセージ表示) #$1049
0BFABA BRA #$31 goto $0BFAED
0BFABC LDA $3544 A=$3544
0BFABF AND #$0020 A&=#$0020
0BFAC2 BEQ #$30 if(z==on) goto $0BFAF4
0BFAC4 LDA $35B4 A=$35B4
0BFAC7 AND #$0040 A&=#$0040
0BFACA BNE #$0B if(z==off) goto $0BFAD7
0BFACC BRK $105A ($0B105A) goto $00FFE6(メッセージ表示) #$105A
0BFACF LDA #$0040 A=#$0040
0BFAD2 TSB $35B4 A or $35B4 ラダトームのカンダタと会話した
0BFAD5 BRA #$03 goto $0BFADA
0BFAD7 BRK $1042 ($0B1042) goto $00FFE6(メッセージ表示) #$1042
0BFADA JSL $CDAC66 SR: $0DAC66 はい/いいえ選択処理(はいc=on)
0BFADE BCC #$0F if(c==off) goto $0BFAEF
0BFAE0 BRK $1043 ($0B1043) goto $00FFE6(メッセージ表示) #$1043
0BFAE3 LDA #$0080 A=#$0080
0BFAE6 TSB $35B3 A or $35B3
0BFAE9 JSL $CDADD8 SR: $0DADD8 カウンタに1000をセット
0BFAED BRA #$03 goto $0BFAF2
0BFAEF BRK $1044 ($0B1044) goto $00FFE6(メッセージ表示) #$1044
0BFAF2 BRA #$09 goto $0BFAFD
0BFAF4 BRK $07DE ($0B07DE) goto $00FFE6(メッセージ表示) #$07DE
0BFAF7 LDA #$0040 A=#$0040
0BFAFA TSB $35B4 A or $35B4
0BFAFD RTS return
  • SR: $0CF58F NPC1_MoveSR_0456(カンダタのNPC)(新SR)
0CF58F COP goto $00FFE4
0CF590 JSL $CDAEB1 SR: $0DAEB1 カウンタが1000になるまで待機
0CF594 JSL $CCD392 SR: $0CD392 キャラクターイベント中移動フラグON
0CF598 JSL $CCD35E SR: $0CD35E 移動速度4/3倍セット
0CF59C LDX #$0018 X=#$0018
0CF59F LDA #$0021 A=#$0021
0CF5A2 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0CF5A6 JSL $CCD58C SR: $0CD58C 指定座標にX軸→Y軸の順でキャラクター移動
0CF5AA LDX #$0022 X=#$0022
0CF5AD LDA #$001B A=#$001B
0CF5B0 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0CF5B4 JSL $CCD58C SR: $0CD58C 指定座標にX軸→Y軸の順でキャラクター移動
0CF5B8 JSL $C1E32E SR: $01E32E 引数:1#$0053 BGM再生
0CF5BE JSL $C75930 SR: $075930 キャラクター消滅
0CF5C2 JSL $CDADE6 SR: $0DADE6 カウンタに2000をセット
0CF5C6 RTL return
  • SR: $0DEEB6 ラダトーム2F追加イベント処理(新SR)
0DEEB6 COP goto $00FFE4
0DEEB7 JSL $CCE1D1 SR: $0CE1D1 イベント開始待ち?
0DEEBB JSL $CDAED1 SR: $0DAED1 カウンタが2000になるまで待機
0DEEBF JSL $CDD65C SR: $0DD65C PC表示?
0DEEC3 JSL $CCD298 SR: $0CD298 イベント終了時処理?
0DEEC7 RTL return

カンダタに船入手の依頼をする際にイベントを起こしていますが、きわめて簡単なので省略します。続いて王者の剣入手後の実装を行います(半分くらいは上に書いてしまっていますが)。

  • SR: $0DEEC8 カンダタに船の代金20000G支払う処理(支払い完了c=on)(新SR)
0DEEC8 JSL $C45AB0 SR: $045AB0 引数:1#$70 所持金取得
0DEECD LDA $72 A=DP($72)
0DEECF AND #$00FF A&=#$00FF
0DEED2 CMP #$0001 A>=#$0001? 所持金3バイト目が1以上(65536以上所持)か
0DEED5 BCS #$0A if(c==on) goto $0DEEE1
0DEED7 LDA $70 A=DP($70)
0DEED9 CMP #$4E20 A>=#$4E20?
0DEEDC BCS #$03 if(c==on) goto $0DEEE1
0DEEDE CLC c=off
0DEEDF BRA #$16 goto $0DEEF7
0DEEE1 SEP #$20 m=on(A/M:8b)
0DEEE3 STZ $72 DP($72)=#$00
0DEEE5 REP #$20 m=off(A/M:16b)
0DEEE7 LDA #$4E20 A=#$4E20
0DEEEA STA $70 DP($70)=A
0DEEEC JSL $C45B66 SR: $045B66 引数:1#$70 所持金減額
0DEEF1 JSL $C32251 SR: $032251 引数:1#$12 ウィンドウ表示
0DEEF6 SEC c=on
0DEEF7 RTL return
  • SR: $0CF362 アレフガルド船取得処理(新SR)
0CF362 LDA #$0004 A=#$0004
0CF365 TSB $35B1 A or $35B1 アレフガルドで船を入手したフラグON
0CF368 LDA #$00C0 A=#$00C0
0CF36B STA $3516 $3516=A
0CF36E LDA #$00DD A=#$00DD
0CF371 STA $3522 $3522=A 船の座標指定
0CF374 RTL return

あと、船着場の親子のセリフもあわせて変更しておきます。