DQ3 ストーリー変更(幽霊船2)

今回から実装を開始することにします。

まず、幽霊船の中でのルーラの使用を禁止します。

  • SR: $0A79DC 幽霊船1F進入時初期化処理
0A79EF JSL $CCF68C SR: $0CF68C
0A79F3-5 NOP
  • SR: $0CF68C 幽霊船1F移動・宝箱・ドア・NPC、ルーラ設定(新SR)
0CF68C JSL $C77843 SR: $077843 引数:1#$CAC5A0 移動・宝箱・ドア・NPC配置
0CF693 JSL $CADE4F SR: $0ADE4F ルーラ使用禁止
0CF697 RTL return
  • SR: $0A7A0F 幽霊船B1F進入時初期化処理
0A7A28 JSL $CCF680 SR: $0CF680
0A7A2C-E NOP
  • SR: $0CF680 幽霊船B1F移動・宝箱・ドア・NPC、ルーラ設定(新SR)
0CF680 JSL $C77843 SR: $077843 引数:1#$CAC5D6 移動・宝箱・ドア・NPC配置
0CF687 JSL $CADE4F SR: $0ADE4F ルーラ使用禁止
0CF68B RTL return

次に、イベント発生時の甲板でのエンカウントを多少変えます(後から考えるといらなかったかも)。エンカウント率が高くなって移動をうざくするのが主目的ですww。エンカウントのデータが追加できなかったので場所を移動します。

  • エンカウント:データ移動($08ADD1→$08AC7D)+レコード数変更(105→120)
  • SR中で参照しているアドレスの変更
  • SR: $0A79DC 幽霊船1F進入時初期化処理
0A79F6 JSL $CAF750 SR: $0AF750
  • SR: $0AF750 幽霊船1Fエンカウント・戦闘背景・イベント設定(新SR)
0AF750 LDA #$0051 A=#$0051 エンカウントID(通常)
0AF753 JSL $CCF15A SR: $0CF15A 追加イベント中か?
0AF757 BCC #$03 if(c==off) goto $0AF75C
0AF759 LDA #$0069 A=#$0069 エンカウントID(イベント中)
0AF75C LDX #$0026 X=#$0026
0AF75F JSL $C777F9 SR: $0777F9 エンカウント、戦闘背景設定
0AF763 JSL $CCF15A SR: $0CF15A 追加イベント中か?
0AF767 BCC #$07 if(c==off) goto $0AF770
0AF769 JSL $C7785F SR: $07785F 引数:1#$CCF997 イベント設定
0AF770 RTL return
  • SR: $0CF15A 幽霊船追加イベント発生条件かしらべる(該当c=on)(新SR)
0CF15A LDA $35B1 A=$35B1
0CF15D AND #$0002 A&=#$0002 幽霊船追加ボスを倒している
0CF160 BNE #$0A if(z==off) goto $0CF16C
0CF162 LDA $3542 A=$3542
0CF165 AND #$0080 A&=#$0080 愛の思い出を入手している
0CF168 BEQ #$02 if(z==on) goto $0CF16C
0CF16A SEC c=on
0CF16B RTL return
0CF16C CLC c=off
0CF16D RTL return

最後に、イベント中に全滅した時に愛の思い出を剥奪するようにします。ついでに、アリアハンの追加イベントで入手した「ゆうきのあかし」も全滅したら剥奪するようにしてデスルーラでショートカットできるのを防ぎます。

  • SR: $067A85 全滅時復活処理
067AF8 JSR $F421 SR: $06F421
  • SR: $06F421 全滅時アイテム剥奪処理(新SR)
06F421 JSR $7B0E SR: $067B0E 全滅時黄金の爪剥奪処理
06F424 JSR $F4ED SR: $06F4ED 全滅時ゆうきのあかし剥奪処理
06F427 JSR $F43A SR: $06F43A 全滅時愛の思い出剥奪処理
06F42A RTS return
  • SR: $06F4ED 全滅時ゆうきのあかし剥奪処理(新SR)
06F4ED LDA $354E A=$354E
06F4F0 AND #$0001 A&=#$0001 勇者に転身済みなら剥奪処理をしない
06F4F3 BNE #$03 if(z==off) goto $06F4F8
06F4F5 JSR $F42B SR: $06F42B
06F4F8 RTS return
  • SR: $06F42B 全滅時ゆうきのあかし剥奪処理(新SR)
06F42B JSL $CCF119 SR: $0CF119 ゆうきのあかし削除
06F42F JSL $C907CC SR: $0907CC 引数:1#$35B0 引数:2#$7E 引数:3#$01 引数:4#$00 引数:5#$00 ゆうきのあかし入手フラグOFF
06F439 RTS return
  • SR: $06F43A 全滅時愛の思い出剥奪処理(新SR)
06F43A LDA $35B1 A=$35B1
06F43D AND #$0002 A&=#$0002 幽霊船追加ボスを倒している
06F440 BNE #$20 if(z==off) goto $06F462
06F442 LDA $3542 A=$3542
06F445 AND #$0080 A&=#$0080 愛の思い出を入手している
06F448 BEQ #$18 if(z==on) goto $06F462
06F44A JSL $CC9E86 SR: $0C9E86 愛の思い出削除
06F44E JSL $C907CC SR: $0907CC 引数:1#$3542 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00 愛の思い出入手フラグOFF
06F458 JSL $C907CC SR: $0907CC 引数:1#$353E 引数:2#$7E 引数:3#$40 引数:4#$00 引数:5#$00 愛の思い出宝箱空けたフラグOFF
06F462 RTS return

DQはFFと違って全滅したら前回のセーブポイントから再開ではないのでデスルーラ対策を特別処理として実装しないといけないのが面倒です。とりえあず準備が終わったので次回からはNPC配置、イベントの実装を行います。

あと、蛇足ですが、DQ3SFCEditorのデータ(SR)移動と要素数の変更のあたりがバグっているようで、潰しちゃいけない領域を0で潰すケースがあるようです。再現パターンが確定できていないのでまだデバッグできてません。念のため注意喚起しておきます。