DQ3 ストーリー変更(ラスボス2)

携帯版DQ3も発売されて結構経ったのでそろそろ偽装モードも解除できるかなあと思ったら今度はau向けにリリースされるようですね。DQ1-3はもう家庭用ゲーム機で本腰入れてリメイクするにはボリュームが足らなすぎるっていうことなんですかね。これといって追加できる新要素もないし、本家なのであまりドラスティックに変えるわけにもいかないし、まあしょうがないのでしょう。

まずは、「フラグがONになるまで竜の女王を石化させる」を実装します。竜の女王のNPCは通常の16×24のキャラクターグラフィックではなく、スプライトを使用して描画しているため、動かないようにするには1枚のスプライトを別途用意しないといけないかなーと思っていたのですが、割とさっくり実装できました。

  • SR: $0CC8BC 竜の女王の城NPC情報設定
0CC8BC JSL $CDF61C SR: $0DF61C 竜の女王の城NPC設定(サブ)
  • SR: $0DF61C 竜の女王の城NPC設定(サブ)(新SR)
0DF61C LDA $3551 A=$3551
0DF61F AND #$0001 A&=#$0001 竜の女王が死亡している?
0DF622 BNE #$18 if(z==off) goto $0DF63C
0DF624 LDA $35B4 A=$35B4
0DF627 AND #$0020 A&=#$0020 オルテガが竜の女王の石化の呪いを解いた
0DF62A BEQ #$09 if(z==on) goto $0DF635
0DF62C LDA #$0398 A=#$0398
0DF62F JSL $C75828 SR: $075828 NPC1設定
0DF633 BRA #$07 goto $0DF63C
0DF635 LDA #$05A4 A=#$05A4
0DF638 JSL $C75828 SR: $075828 NPC1設定
0DF63C RTL return
  • SR: $0DF5FB NPC1_TalkSR_05A4(新SR)
0DF5FB JSL $C737BE SR: $0737BE 引数:1#$1056 メッセージ表示
0DF601 RTL return
  • SR: $0DF602 NPC1_MoveSR_05A4(新SR)
0DF602 LDA #$0093 A=#$0093 スプライト番号
0DF605 LDX #$0A10 X=#$0A10 X座標指定?
0DF608 LDY #$0AC8 Y=#$0AC8 Y座標指定?
0DF60B JSL $C73C42 SR: $073C42 引数:1#$03BB スプライト配置?(引数はパレットアクセスID)
0DF611 LDA #$0000 A=#$0000
0DF614 LDX #$000A X=#$000A
0DF617 JSL $C73CED SR: $073CED
0DF61B RTL return

止まったまま動かない竜の女王を実装するには、基本もともとの実装SR: $0B98C4(NPC1_MoveSR_0398)を参考にすればOKです。SR: $0B98C4の先頭部分は以下のようになっています。

  • SR: $0B98C4 NPC1_MoveSR_0398
0B98C4 JSL $CCDADF SR: $0CDADF
0B98C8 JSL $CCD784 SR: $0CD784
0B98CC LDA #$0093 A=#$0093 スプライト番号
0B98CF LDX #$0A10 X=#$0A10 X座標指定?
0B98D2 LDY #$0AC8 Y=#$0AC8 Y座標指定?
0B98D5 JSL $C73C42 SR: $073C42 引数:1#$038E スプライト配置?(引数はパレットアクセスID)
0B98DB LDA #$0000 A=#$0000
0B98DE LDX #$000A X=#$000A
0B98E1 JSL $C73CED SR: $073CED
0B98E5 COP goto $00FFE4
0B98E6 LDA $3434 A=$3434
0B98E9 CMP #$03E8 A>=#$03E8? カウンタが1000以上か?
0B98EC BCC #$03 if(c==off) goto $0B98F1
0B98EE JMP $98F9 ($0B98F9) goto $0B98F9
0B98F1 JSL $C73E69 SR: $073E69 次のスプライトを表示?
0B98F5 COP goto $00FFE4
0B98F6 JMP $98E6 ($0B98E6) goto $0B98E6

このNPCは話し掛けるとカウンタに1000がセットされ、イベント(会話+エフェクト後消滅+卵表示など)が発生するわけですが、話し掛ける=カウンタに1000がセットされるまでは上記$0B98E6-F6の間を延々とループするわけです。この際実行されるSR: $073E69がどうやら次のスプライトを1枚表示する、と推測できます。動かないNPCにするにはこのループ部分を省けばいい、ということなのでその部分をばっさりカットすれば実装終わりです。あとは石化っぽくみせるために灰色のパレットを追加するとか、城内の他のNPCの台詞を条件に応じて変えるとかする作業があるのですが、特筆すべき点も無いので省略します。