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

PC側の成長ステータスをいじっていたんですが、それにあわせて装備品の見直しをしていたら、光のドレス、ドラゴンローブのあまりのチートさをようやく認識するにいたりました。これはひどすぎる、ということで光のドレスは守備力を大幅に下げることにしたんですが、それでも割と簡単に無限に手に入るのはけしからんということで、すごろくのシステムをちょっと変えることにしました。普通は入手数制限で対応するんですが、それ一辺倒というのもアレなので、すごろく中は「コイン」制を導入することにします。毎回スタート時にはコイン1枚から開始なので積極的に戦闘することも考えないと目標額まで到達できませんし、コインマイナスのマスに止まるとその時点でアウトになります。コインを増やすギミックを追加で用意したり、モンスターの編成を変えたりしないと単なる無理ゲーになってしまうのでバランス調整が難しいところ。あとはバランス調整とデバッグだけだと思ってたのにねえ。

さて、最近停滞気味だったストーリー関連の実装の説明を進めます。メルキド襲撃の追加イベント終了後、精霊のほこらでヒントを貰ったあとの実装です。切りどころがいまいちわからなくてベタ書きしているので、意味不明な可能性高し。

  • SR: $0A1859 NPC1_TalkSR_0228(エルフの女王の会話処理)
0A1865JSL $CCF4B7SR: $0CF4B7
0A1869BCC #$16if(c==off) goto $0A1881
0A186B-7DNOP
  • SR: $0CF4B7 エルフの女王会話処理(サブ)(新SR)
0CF4B7LDA $35B2A=$35B2
0CF4BAAND #$0004A&=#$0004
0CF4BDBEQ #$0Bif(z==on) goto $0CF4CA
0CF4BFBRK $103C ($0C103C)goto $00FFE6(メッセージ表示) #$103C光の鎧のヒント表示
0CF4C2LDA #$0001A=#$0001
0CF4C5TSB $35B4A or $35B4光の鎧の隠し場所のヒントを聞いたフラグon
0CF4C8BRA #$17goto $0CF4E1
0CF4CALDA $354AA=$354A
0CF4CDAND #$0010A&=#$0010
0CF4D0BNE #$02if(z==off) goto $0CF4D4
0CF4D2BRA #$0Fgoto $0CF4E3
0CF4D4LDA $353EA=$353E
0CF4D7AND #$0004A&=#$0004
0CF4DABNE #$02if(z==off) goto $0CF4DE
0CF4DCBRA #$05goto $0CF4E3
0CF4DEBRK $03E8 ($0C03E8)goto $00FFE6(メッセージ表示) #$03E8
0CF4E1SECc=on
0CF4E2RTLreturn
0CF4E3CLCc=off
0CF4E4RTLreturn

ただ単にお使いフラグを立てるだけです。この1クッションなしでいきなりバラモス城にGOでもいいのですが、あまりに下の精霊が万能になってしまうのでこうしました。次はバラモス城の変更です。バラモス城には都合2回来ることになります。1回目はエルフの女王にヒントを貰ってバラモスの間に来て、さらに骸骨からヒントをもらい、2回目はガライを連れてもう一度バラモスの間に来る、という修正です。まずは1回目の追加イベントの実装を行いますが、順番としては、

  1. バラモス城1F-2(骸骨が玉座にいるフロア)のドアの近くに行くと「視線を感じる」メッセージが表示される
  2. バラモスの間の特定座標に達すると後ろに骸骨が現れて逃げる
  3. バラモスの間を出てバラモス城外観に移動し、左方向に向かい特定座標に達すると骸骨が左に逃げて消える
  4. 再度バラモス城1F-2に戻り、骸骨と話して光の鎧のヒントをもらう

となります。問題なのは、「イベント中にルーラで移動された場合どうするか」という問題ですが、これは「同一ダンジョン?中のみ有効なフラグ」を使用することで一連のイベントを1パックにすることができます。「同一ダンジョン?中のみ有効なフラグ」は7E3628-40に存在し、扉の開閉状態等もここを使っています(ドア開閉データの「同一フロア内開閉管理番号」というのは7E3628からのビット単位でのオフセットを意味しています)。このフラグは同一ダンジョン?から移動するときにクリアされるテンポラリのものです。今回のようにルーラ可能な複数フロア間にまたがるイベントを実装する場合にはこの領域を利用するのが一番便利です。

  • SR: $0A59D3 バラモス城1F-2進入時初期化処理
0A59F0JSL $CCF4E5SR: $0CF4E5バラモス城1F-2イベント・NPC等設定
0A59F4-6NOP
  • SR: $0CF4E5 バラモス城1F-2イベント・NPC等設定(新SR)
0CF4E5JSL $C77843SR: $077843 引数:1#$CAA16B移動・宝箱・ドア・NPC情報設定
0CF4ECJSL $C7785FSR: $07785F 引数:1#$CCFE2Dイベント設定
0CF4F3RTLreturn

  • SR: $0CFE2D バラモス城1F-2追加イベント処理(新SR)
0CFE2DJSL $CCFE50SR: $0CFE50バラモス上の骸骨から光の鎧の情報を聞いた(該当c=on)
0CFE31BCS #$18if(c==on) goto $0CFE4B
0CFE33JSL $CCFEEDSR: $0CFEEDバラモス城1F-2追加イベント処理(骸骨と会話)発生条件か(該当c=on)
0CFE37BCC #$06if(c==off) goto $0CFE3F
0CFE39JSL $CCFA23SR: $0CFA23バラモス城1F-2追加イベント処理(骸骨と会話)実処理
0CFE3DBRA #$10goto $0CFE4F
0CFE3FJSL $CCFA10SR: $0CFA10バラモス城1F-2追加イベント処理(視線を感じた)発生条件か(該当c=on)
0CFE43BCC #$06if(c==off) goto $0CFE4B
0CFE45JSL $CCF8F2SR: $0CF8F2バラモス城1F-2追加イベント処理(視線を感じた)実処理
0CFE49BRA #$04goto $0CFE4F
0CFE4BJSL $CCD211SR: $0CD211フラグ消化後のイベント終了時処理?
0CFE4FRTLreturn
  • SR: $0CFE50 バラモス上の骸骨から光の鎧の情報を聞いた(該当c=on)(新SR)
  • SR: $0CFEED バラモス城1F-2追加イベント処理(骸骨と会話)発生条件か(該当c=on)(新SR)
  • SR: $0CFA10 バラモス城1F-2追加イベント処理(視線を感じた)発生条件か(該当c=on)(新SR)

フラグのチェックのみなので省略

  • SR: $0CF8F2 バラモス城1F-2追加イベント処理(視線を感じた)実処理(新SR)
0CF8F2COPgoto $00FFE4
0CF8F3JSL $CCD276SR: $0CD276
0CF8F7LDA #$08F0A=#$08F0
0CF8FALDX #$0900X=#$0900
0CF8FDLDY #$0938Y=#$0938
0CF900JSL $C75365SR: $075365PCが指定座標(X座標は範囲指定)に到達しているか(しているc=on)
0CF904BCS #$02if(c==on) goto $0CF908
0CF906BRA #$EBgoto $0CF8F3
0CF908JSL $C737BESR: $0737BE 引数:1#$104Aメッセージ表示
0CF90ELDA #$0001A=#$0001
0CF911TSB $3638A or $3638フラグON
0CF914JSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0CF918JSL $CDD65CSR: $0DD65CPC表示?
0CF91CJSL $CCD298SR: $0CD298イベント終了時処理?
0CF920RTLreturn

  • SR: $0AA1E2 バラモスの間移動・宝箱・ドア・NPC情報設定
0AA209JSL $CDE763SR: $0DE763バラモスの間NPC設定+追加イベント用設定
  • SR: $0DE763 バラモスの間NPC設定+追加イベント用設定(新SR)
0DE763JSL $CCC8A2SR: $0CC8A2バラモスの間NPC設定
0DE767JSL $CDF23FSR: $0DF23Fバラモスの間追加イベント用設定
0DE76BRTLreturn
  • SR: $0DF23F バラモスの間追加イベント用設定(新SR)
0DF24DLDX #$0097X=#$0097
0DF250JSL $C666FASR: $0666FAしらべるイベント設定
  • SR: $0CC8A2 バラモスの間NPC設定
0CC8A2JSR $F22ESR: $0CF22Eバラモスの間NPC設定(サブ)
  • SR: $0CF22E バラモスの間NPC設定(サブ)(新SR)
0CF251LDA #$0599A=#$0599骸骨のNPC
0CF254JSL $C75828SR: $075828NPC1設定
0CF258RTSreturn

  • SR: $0CEBBC バラモスの間イベント処理
0CEBC7JSL $CCFDFASR: $0CFDFAバラモスの間追加イベント処理
  • SR: $0CFFDA バラモスの間追加イベント処理(新SR)
0CFDFAJSL $CDE55CSR: $0DE55Cバラモス城追加ボスを倒したか(該当c=on)
0CFDFEBCC #$06if(c==off) goto $0CFE06
0CFE00JSL $CCD211SR: $0CD211フラグ消化後のイベント終了時処理
0CFE04BRA #$16goto $0CFE1C
0CFE06JSL $CCFF1CSR: $0CFF1Cガライが仲間になっているか(該当c=on)
0CFE0ABCC #$06if(c==off) goto $0CFE12
0CFE0CJSL $CDF32ASR: $0DF32A
0CFE10BRA #$0Agoto $0CFE1C
0CFE12JSL $CCFE5DSR: $0CFE5Dバラモスの間追加イベント1が発生する条件か(該当c=on)
0CFE16BCC #$E8if(c==off) goto $0CFE00
0CFE18JSL $CDEEF8SR: $0DEEF8バラモスの間追加イベント1処理
0CFE1CRTLreturn
  • SR: $0DE55C バラモス城追加ボスを倒したか(該当c=on)(新SR)
  • SR: $0CFF1C ガライが仲間になっているか(該当c=on)(新SR)
  • SR: $0CFE5D バラモスの間追加イベント1が発生する条件か(該当c=on)(新SR)

フラグのチェックのみなので省略

  • SR: $0DEEF8 バラモスの間追加イベント1処理(新SR)
0DEEF8COPgoto $00FFE4
0DEEF9JSL $CCD276SR: $0CD276
0DEEFDLDA #$0980A=#$0980
0DEF00LDX #$0980X=#$0980
0DEF03LDY #$0920Y=#$0920
0DEF06JSL $C75365SR: $075365PCが指定座標(X座標は範囲指定)に到達しているか(しているc=on)
0DEF0ABCS #$02if(c==on) goto $0DEF0E
0DEF0CBRA #$EBgoto $0DEEF9
0DEF0EJSL $CDADD8SR: $0DADD8カウンタに1000をセット
0DEF12JSL $CDAED1SR: $0DAED1カウンタが2000になるまで待機
0DEF16LDA #$0002A=#$0002
0DEF19TSB $3638A or $3638フラグON
0DEF1CJSL $CDD65CSR: $0DD65CPC表示?
0DEF20JSL $CCD298SR: $0CD298イベント終了時処理
0DEF24RTLreturn

  • SR: $0CFE70 NPC1_MoveSR_0599(骸骨のNPC)(新SR)
0CFE70COPgoto $00FFE4
0CFE71JSL $CDAEB1SR: $0DAEB1カウンタが1000になるまで待機
0CFE75JSL $CCD392SR: $0CD392キャラクターイベント中移動フラグON?
0CFE79JSL $CCD35ESR: $0CD35E移動速度4/3倍速セット?
0CFE7DLDA #$002EA=#$002E
0CFE80LDX #$0039X=#$0039
0CFE83JSL $C75305SR: $075305キャラクター出現座標指定
0CFE87JSL $CCD857SR: $0CD857キャラクターを上に向かせる
0CFE8BLDX #$002EX=#$002E
0CFE8ELDA #$0030A=#$0030
0CFE91JSL $C75474SR: $075474キャラクター移動先座標指定
0CFE95JSL $CCD59DSR: $0CD59D指定座標にY軸→X軸の順でキャラクター移動
0CFE99JSL $CC73CFSR: $0C73CFキャラクターが足踏する処理
0CFE9DLDX #$002EX=#$002E
0CFEA0LDA #$0039A=#$0039
0CFEA3JSL $C75474SR: $075474
0CFEA7JSL $CCD59DSR: $0CD59D
0CFEABJSL $C75930SR: $075930キャラクター消滅
0CFEAFJSL $CDADE6SR: $0DADE6カウンタに2000セット
0CFEB3RTLreturn

まだ半分くらいなんですが、長くなったので今回はこの辺で。

コメント

  1. 謎の東洋人 より:

    通りすがりですが簡単なバグ報告です。ここの改造でできた奇跡の剣を使いますと、たとえばスライムを攻撃したときに、スライムに89のダメージ!のつぎに表示されるメッセージが、スライムのキズが回復した!になってしまっています。戦闘メッセージ005E:FCA4EE:[BD][B8]の キズが かいふくした![B1]のうちの動作の対象を表す変数文字コードの[B8]を動作の主体を表す文字コードの[B7]に変更した戦闘メッセージを増設して、それを使うことですぐに直りますが。

    管理者より返信:

    実装ではそれを見越して$02D3C7-E2で行動主体と対象を入れ替えてるんですが…。念のため手元で確認してみましたが、一応ちゃんと動いてました。とはいえ、ご指摘の実装方法のほうがプログラムがすっきりするのでいいですね。取り入れさせてもらいます。

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