DQ3 ストーリー変更(光の鎧入手7)

ガライが仲間になることで、「ガライが仲間にいる場合」を考慮しないといけない場所が出てきます。

具体的には、

  • すごろく開始・終了時の整列(1-4のみ、5はストーリー進行上ありえないので除外)
  • すごろく中
  • すごろく場4ごほうびフロア中
  • ロマリア王即位中
  • ちきゅうのへそ挑戦中
  • アッサラームぱふぱふ中

です(下4つはテストプレイしてくれた方が見つけてくれたものでしたorz)。これらのケースについて「PCが1-4人のとき」それぞれについてテストし、バグがあれば修正しないといけません(超面倒くせー)。また、ガライがいない場合にも問題がないかテストする必要があるので、テストの範囲は結構多くなります。

  • SR: $06F5DA PC描画タイプ初期化?(新SR)
06F5E7PHXPush X
06F5E8TAXX=A
06F5E9JSL $CDF9D0SR: $0DF9D0アッサラーム2F-2ぱふぱふ中か(該当c=on)
06F5EDBCS #$2Aif(c==on) goto $06F619
06F5EFJSL $CDF968SR: $0DF968すごろく場4のご褒美フロアか(該当c=on)
06F5F3BCS #$24if(c==on) goto $06F619
06F5F5JSL $CDF95CSR: $0DF95Cロマリア王に即位中か(該当c=on)
06F5F9BCS #$1Eif(c==on) goto $06F619
06F5FBJSL $CDF948SR: $0DF948ランシールひとりチャレンジ中でランシール以外のマップか(該当c=on)
06F5FFBCS #$18if(c==on) goto $06F619
06F601JSL $C3FF09SR: $03FF09すごろく中か(該当c=on)
06F605BCS #$12if(c==on) goto $06F619
06F607JSL $CCFF1CSR: $0CFF1Cガライが仲間になっているか(該当c=on)
06F60BBCS #$06if(c==on) goto $06F613
06F60DJSL $CDF97CSR: $0DF97C5人目を透明にするべき条件か(該当c=on)
06F611BCC #$06if(c==off) goto $06F619
06F613LDA #$0002A=#$00025人目を追加するモード
06F616PLXPull X
06F617SECc=on
06F618RTSreturn
06F619TXAA=X
06F61APLXPull X
06F61BCLCc=off
06F61CRTSreturn

これでガライが仲間になっていても上記のケースで後ろにガライがついてくることがなくなります。他にはすごろく開始時などにもともと存在しなかった5人目の動きを実装する必要があります。

  • SR: $0CD02F すごろく場1NPC情報設定
0CD04B-DNOP
0CD04EJSL $CCFF55SR: $0CFF55すごろく場1NPC設定(サブ)
  • SR: $0CFF55 すごろく場1NPC設定(サブ)(新SR)
0CFF55LDA #$0549A=#$0549
0CFF58JSL $C75828SR: $075828NPC1設定
0CFF5CJSL $CCFFCASR: $0CFFCAパーティ人数が5人か(5人c=on)
0CFF60BCC #$07if(c==off) goto $0CFF69
0CFF62LDA #$059EA=#$059E
0CFF65JSL $C75828SR: $075828NPC1設定
0CFF69RTLreturn
  • SR: $0CFFCA パーティ人数が5人か(5人c=on)
0CFFCAJSL $C4297CSR: $04297C 引数:1#$01 引数:2#$FFパーティ人数を取得
0CFFD0CMP #$0004A==#$0004?
0CFFD3BNE #$09if(z==off) goto $0CFFDE
0CFFD5JSL $CCFF1CSR: $0CFF1Cガライが仲間になっているか(該当c=on)
0CFFD9BCC #$03if(c==off) goto $0CFFDE
0CFFDBSECc=on
0CFFDCBRA #$01goto $0CFFDF
0CFFDECLCc=off
0CFFDFRTLreturn
  • SR: $0D9BCA すごろく場1イベント処理
0D9C8DJSL $CDF13BSR: $0DF13Bパーティ人数が5人目も含めて1人か調べる(1人c=on)
  • SR: $0DF13B パーティ人数が5人目も含めて1人か調べる(1人c=on)
0DF13BJSL $CC7B5ASR: $0C7B5Aパーティ人数が1人か調べる(1人c=on)
0DF13FBCC #$09if(c==off) goto $0DF14A
0DF141JSL $CCFF1CSR: $0CFF1Cガライが仲間になっているか(該当c=on)
0DF145BCS #$03if(c==on) goto $0DF14A
0DF147SECc=on
0DF148BRA #$01goto $0DF14B
0DF14ACLCc=off
0DF14BRTLreturn
  • SR: $0DF06A NPC1_MoveSR_059E(5人目のNPC)(新SR)
0DF06ALDA $362AA=$362A
0DF06DAND #$0002A&=#$0002すごろく終了時フラグON?
0DF070BNE #$02if(z==off) goto $0DF074
0DF072BRA #$06goto $0DF07A
0DF074JSL $CDF07FSR: $0DF07Fすごろく場1PC5人目座標設定処理
0DF078BRA #$04goto $0DF07E
0DF07AJSL $CDF0A3SR: $0DF0A3すごろく場1PC5人目移動処理
0DF07ERTLreturn
  • SR: $0DF07F すごろく場1PC5人目座標設定処理
0DF07FLDA $353FA=$353F
0DF082AND #$0008A&=#$0008?
0DF085BNE #$02if(z==off) goto $0DF089
0DF087BRA #$19goto $0DF0A2
0DF089LDA $344EA=$344E
0DF08CJSL $C74CD0SR: $074CD0キャラクター表示?
0DF090LDA #$0021A=#$0021
0DF093LDX #$007FX=#$007F
0DF096JSL $C75305SR: $075305キャラクター出現座標を指定
0DF09ALDA #$0000A=#$0000
0DF09DJSL $C7518CSR: $07518C
0DF0A1COPgoto $00FFE4
0DF0A2RTLreturn

  • SR: $0DF0A3 すごろく場1PC5人目移動処理
0DF0A3JSL $CCD7EASR: $0CD7EA
0DF0A7COPgoto $00FFE4
0DF0A8JSL $CDAEB1SR: $0DAEB1カウンタが1000になるまで待機
0DF0ACJSL $CDF13BSR: $0DF13Bパーティ人数が5人目も含めて1人か調べる(1人c=on)
0DF0B0BCS #$02if(c==on) goto $0DF0B4
0DF0B2BRA #$02goto $0DF0B6
0DF0B4BRA #$18goto $0DF0CE
0DF0B6JSL $CDF0FBSR: $0DF0FBPC5人目を移動対象にする?
0DF0BALDA $353FA=$353F
0DF0BDAND #$0008A&=#$0008
0DF0C0BNE #$02if(z==off) goto $0DF0C4
0DF0C2BRA #$0Agoto $0DF0CE
0DF0C4JSL $C74D4ESR: $074D4E
0DF0C8LDA $C18DA=$C18D
0DF0CBSTA $344E$344E=A
0DF0CEJSL $CDADBBSR: $0DADBBカウンタを100カウントアップ
0DF0D2JSL $CDAED1SR: $0DAED1カウンタが2000になるまで待機
0DF0D6LDA $353FA=$353F
0DF0D9AND #$0008A&=#$0008
0DF0DCBNE #$02if(z==off) goto $0DF0E0
0DF0DEBRA #$16goto $0DF0F6
0DF0E0JSL $CCD392SR: $0CD392キャラクターイベント中移動フラグON?
0DF0E4LDX #$0021X=#$0021
0DF0E7LDA #$007FA=#$007F
0DF0EAJSL $C75474SR: $075474キャラクター移動先座標指定
0DF0EEJSL $CCD59DSR: $0CD59D指定座標にY軸→X軸の順でキャラクター移動
0DF0F2JSL $CCD857SR: $0CD857キャラクターを上に向かせる
0DF0F6JSL $CDADBBSR: $0DADBBカウンタを100カウントアップ
0DF0FARTLreturn
  • SR: $0DF0FB PC5人目を移動対象にする?
0DF0FBLDA #$0008A=#$0008
0DF0FETRB $353FA ^ $353F
0DF101LDA #$0024A=#$0024
0DF104JSL $C74B8CSR: $074B8C行動対象キャラクター指定?
0DF108JSL $CCD70BSR: $0CD70B
0DF10CJSL $C74C86SR: $074C86
0DF110BCS #$03if(c==on) goto $0DF115
0DF112NOP
0DF113BRA #$21goto $0DF136
0DF115LDA #$0008A=#$0008
0DF118TSB $353FA or $353F
0DF11BJSL $CCD784SR: $0CD784
0DF11FJSL $C74BC2SR: $074BC2
0DF123LDA #$0024A=#$0024
0DF126JSL $C74CF7SR: $074CF7
0DF12AJSL $CCD644SR: $0CD644
0DF12EJSL $C75662SR: $075662
0DF132JSL $CCD767SR: $0CD767
0DF136JSL $C74BC2SR: $074BC2
0DF13ARTLreturn

たかが5人目をすごろく開始時と終了時に期待した座標に配置するだけなんですが結構長いです。とはいえ2人目~4人目の実装をパクるだけで十分なんですが。「みようみまねでやっている」だけなので完全には理解してはいません。ちなみに、すごろく場1と2,3,4のすごろく開始時のPCのMove処理は若干異なっているため、またちょっと違った実装をする必要があるのですが、あまり本筋ではないので説明は省略します。同様にかなり考慮をしないといけないのがランシール、アッサラームです。アッサラームに至っては未だに完全に修正はできていない始末。まあいやならやらなきゃいいんですがw、この「5人目を追加する」ギミックはやりたいこと以外に考慮しないといけない部分が多くて骨が折れました。さて、次回はイベントの残りの部分を実装します。

コメント

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