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

まずはイベントフラグ関連の変更をします。オリジナルではアリアハン王に最初に謁見した時点でルイーダ、登録所が使用可能になりますが、ナジミの塔からイベントアイテム(ゆうきのあかし ID=#$E8)を持ち帰るまではこのフラグはONにはしません。なお、個々のメッセージの編集内容は基本カットします。

  • SR: $0B6A0A NPC1_TalkSR_02FA(アリアハン王との会話処理)
0B6A5BBRA #$70goto $0B6ACD
0B6A5D-60NOP
0B6ABCLDA #$0040A=#$0040
0B6ABFTSB $354DA or $354D
0B6AC2BRK $0557 ($0B0557)goto $00FFE6(メッセージ表示) #$0557
0B6AC5BRK $0558 ($0B0558)goto $00FFE6(メッセージ表示) #$0558
0B6AC8BRK $055A ($0B055A)goto $00FFE6(メッセージ表示) #$055A
0B6ACBBRA #$0Egoto $0B6ADB
0B6ACDJSR $EF12SR: $0BEF12
0B6AD0BCS #$94if(c==on) goto $0B6A66
0B6AD2LDA $354DA=$354D
0B6AD5AND #$0040A&=#$0040
0B6AD8BRA #$87goto $0B6A61
0B6ADANOP

今回各NPCとの会話処理の中身を初めてまじめに見たのですが、気がついたのは、

  • イベントは後に起きるもの→先に起きるものの順で並んでいる
  • JMP(#$4C)が多用されている

ということです。BRA(#$80)でないので、ジャンプ先のアドレスが絶対アドレスで指定されています。そのため気軽に処理を移動できません。おそらく処理によっては128バイト以上先に飛ばないといけない(BRAでは前後127バイトまでしか飛べない)からだと思われます。さて、あまり思うようにプログラムを移動できないので(やってやれなくはないが、バグの元になるので既存のプログラムの移動は極力避けることにします)、かなり苦しい実装になっています。アリアハン王との会話は「ゾーマ登場以降→旅立ちの許可をもらって以降→初回の謁見」の順番に処理が並んでいます。これを「ゾーマ登場以降→旅立ちの許可をもらって以降→初回の謁見以降→初回の謁見」と1段階はさむように変えます。なお、$7E354Dの7ビット目(#$40)が「アリアハン王に会ったか」のフラグで、$7E354Eの1ビット目(#$01)が「アリアハン王から旅立ちの許可をもらったか」のフラグです。

  • SR: $0BEF12 アリアハン王に旅立ちの許可をもらう処理+条件判定(旅立ちの許可をもらっているc=on)(新SR)
0BEF12LDA $354EA=$354E
0BEF15AND #$0001A&=#$0001
0BEF18BNE #$7Aif(z==off) goto $0BEF94
0BEF1AJSL $CCF104SR: $0CF104
0BEF1EBCC #$72if(c==off) goto $0BEF92
0BEF20BRK $0FD6 ($0B0FD6)goto $00FFE6(メッセージ表示) #$0FD6
0BEF23JSL $C737BESR: $0737BE 引数:1#$0FD7
0BEF29JSL $C1E32ESR: $01E32E 引数:1#$0028
0BEF2FJSL $C028B4SR: $0028B4
0BEF33JSL $C1E59CSR: $01E59C 引数:1#$0028
0BEF39BCC #$F4if(c==off) goto $0BEF2F
0BEF3BJSL $C1E35BSR: $01E35B
0BEF3FLDX #$3925X=#$3925
0BEF42SEP #$20m=on(A/M:8b)
0BEF44LDA #$08A=#$08
0BEF46STA $0021,X$0021+X=A
0BEF49REP #$30m=off(A/M:16b) x=off(X/Y:16b)
0BEF4BLDX #$0000X=#$0000
0BEF4EJSL $C4FE6BSR: $04FE6B 引数:1#$01 引数:2#$FE
0BEF54JSL $CCF119SR: $0CF119
0BEF58JSL $C737BESR: $0737BE 引数:1#$0FE0
0BEF5EBRK $0FD8 ($0B0FD8)goto $00FFE6(メッセージ表示) #$0FD8
0BEF61JSL $C737BESR: $0737BE 引数:1#$0559
0BEF67JSL $CC9F2CSR: $0C9F2C
0BEF6BBRK $0FD9 ($0B0FD9)goto $00FFE6(メッセージ表示) #$0FD9
0BEF6EJSL $C737BESR: $0737BE 引数:1#$0FDA
0BEF74JSL $CDA806SR: $0DA806
0BEF78JSL $CC9F5FSR: $0C9F5F
0BEF7CJSL $CDACEESR: $0DACEE
0BEF80LDA #$0001A=#$0001
0BEF83TSB $354EA or $354E
0BEF86LDA #$0080A=#$0080
0BEF89TSB $362BA or $362B
0BEF8CJSL $CAF5D6SR: $0AF5D6
0BEF90BRA #$02goto $0BEF94
0BEF92CLCc=off
0BEF93RTSreturn
0BEF94SECc=on
0BEF95RTSreturn

  • SR: $0CF104 ゆうきのあかしを持っているか(持っているc=on)
0CF104LDA #$00E8A=#$00E8
0CF107LDX #$0104X=#$0104
0CF10AJSL $C78238SR: $078238
0CF10EBCS #$02if(c==on) goto $0CF112
0CF110CLCc=off
0CF111RTLreturn
0CF112SECc=on
0CF113RTLreturn

  • SR: $0CF119 ゆうきのあかし削除
0CF119LDA #$00E8A=#$00E8
0CF11CLDX #$0104X=#$0104
0CF11FJSL $C781F6SR: $0781F6アイテム削除
0CF123RTLreturn

順番が前後してしまいますが、先に「ゆうきのあかし」(ナジミの塔の最上階で入手)をもっている状態でアリアハン王に話したときの実装を済ませてしまいます。「ゆうきのあかし」を持っている場合には、専用のメッセージを表示し、主人公を勇者に転生させます(レベルはそのまま)。その後、「ゆうきのあかし」を削除し、$7E354Eの1ビット目(#$01)をONにします。ちなみにこの部分は作者の表現力のなさのためなぜか唐突に説明調の台詞が多くなります。DQ6の本体合流時に体が光ったりする演出ができればいいんですが、やり方がよくわからないのでとりあえずペンディングで。また、SR: $0AF5D6は今回新しく定義したSRですが、別途説明します。

20090608235906.jpg

コメント

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