DQ3 ストーリー変更(アリアハン5)

前回「オルテガのこども」のときにタルやタンスを調べると「周りの目が気になってやめてしまった」というメッセージが出て調べられない実装をしましたが、アリアハン城2Fに限り、ちょっと違う実装をする必要があります。なぜかというとアリアハン城2Fは「ゆうきのあかし」を持ち帰って王様に話すと「オルテガのこども」から勇者に転生するイベントがあるため、イベントの前後でタンスを調べたときのリアクションを切り替える必要があります。現在のマップ上のイベントの種類をメモリ中に保持している場所を見つけたので試しに手動で置き換えてみたところ、イベントの差し替えはできたのですが、タンスを開けたとたん、下の床が丸見えになってしまいました。要はタンスを開けた後のグラフィックがメモリ中に読み込まれていないことが原因のようです。いろいろ調べてみましたが、どうやって読み込んでいるのかとか、どのグラフィックを読んでいるのかということがわからなかったので、結局以下の手法で逃げることにしました。かなり邪道な方法です。

  1. イベントフラグに関わらず、オリジナルどおりのマップの初期化をする。
  2. 主人公が旅立ちの許可をもらってない=勇者になっていない場合は特定のメモリ領域を調べるイベントで上書きする
  3. 「ゆうきのあかし」を持った状態でアリアハン王に話し掛けたときの処理中に主人公は勇者に転身するが、その処理の最後に2で上書きした調べるイベントをオリジナルのイベントに差し替える

現在表示するマップ中で必要なグラフィックはおそらくマップの初期化処理中でどこかのメモリ中に展開されるようなので、実際に使う使わないに関わらずとにかくメモリ中に読ませてしまい、イベントフラグの部分だけ上書き、必要に応じて再度上書き、というのが方針です。というわけで実装は以下のようになります。

  • SR: $0A9AE7 アリアハン城内2F移動・宝箱・ドア・NPC情報設定
0A9AFC-B05NOP
0A9B06JSL $CAF572SR: $0AF572
  • SR: $0AF572 アリアハン城内2Fアイテム拾得等切替処理
0AF572LDX #$0090X=#$0090
0AF575JSL $C66696SR: $066696
0AF579LDX #$0060X=#$0060
0AF57CJSL $C666C8SR: $0666C8
0AF580LDA $354EA=$354E
0AF583AND #$0001A&=#$0001
0AF586BNE #$04if(z==off) goto $0AF58C
0AF588JSL $CAF60ASR: $0AF60A
0AF58CRTLreturn

  • SR: $0AF60A アリアハン城内2F勇者転身前アイテム拾得等切替処理
0AF60ALDA #$0012A=#$0012
0AF60DSTA $A17D$A17D=A
0AF610STA $A17F$A17F=A
0AF613LDA #$0004A=#$0004
0AF616STA $A3BD$A3BD=A
0AF619LDA #$0004A=#$0004
0AF61CSTA $A3BF$A3BF=A
0AF61FLDA #$0092A=#$0092
0AF622STA $A41D$A41D=A
0AF625LDA #$0093A=#$0093
0AF628STA $A41F$A41F=A
0AF62BLDA #$0272A=#$0272
0AF62ESTA $A47D$A47D=A
0AF631STA $A47F$A47F=A
0AF634LDA #$0037A=#$0037
0AF637STA $A4DD$A4DD=A
0AF63ASTA $A4DF$A4DF=A
0AF63DRTLreturn

  • SR: $0AF5D6 アリアハン城内2F勇者転身後アイテム拾得等切替処理
0AF5D6LDA #$0007A=#$0007
0AF5D9STA $A17D$A17D=A
0AF5DCSTA $A17F$A17F=A
0AF5DFLDA #$0000A=#$0000
0AF5E2STA $A3BD$A3BD=A
0AF5E5LDA #$0002A=#$0002
0AF5E8STA $A3BF$A3BF=A
0AF5EBLDA #$0090A=#$0090
0AF5EESTA $A41D$A41D=A
0AF5F1LDA #$0060A=#$0060
0AF5F4STA $A41F$A41F=A
0AF5F7LDA #$01F0A=#$01F0
0AF5FASTA $A47D$A47D=A
0AF5FDSTA $A47F$A47F=A
0AF600LDA #$0022A=#$0022
0AF603STA $A4DD$A4DD=A
0AF606STA $A4DF$A4DF=A
0AF609RTLreturn

SR: $0AF5D6は主人公を勇者に転身させる処理の最後に呼びます。これによってタンスに設定されているイベントの切り替えが可能になりました。

コメント

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