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

次に、特定のモンスターIDをターン終了時にスイッチさせる処理、オルテガがゾーマ初戦開始2ターン後に乱入してくる部分を実装します。 オルテガが乱入するかどうかはゾーマ戦開始直前に特定のフラグをONにしておき、そのフラグがONになっている戦闘中のみ2ターン経過後乱入処理を行うというようにします。

  • SR: $0CCB6F ゾーマの城B5FNPC情報設定
0CCBA0-2NOP
0CCBA3JSL $CDE76CSR: $0DE76Cゾーマの城5FNPC設定(サブ)
  • SR: $0DE76C ゾーマの城5FNPC設定(サブ)(新SR)
0DE76CLDA #$005FA=#$005F
0DE76FJSL $C758DESR: $0758DENPC2設定
0DE773LDA #$05A5A=#$05A5オルテガのNPC
0DE776JSL $C75828SR: $075828NPC1設定
0DE77AJSL $CDE7E6SR: $0DE7E6オルテガゾンビが出現する条件か(該当c=on)
0DE77EBCC #$07if(c==off) goto $0DE787
0DE780LDA #$05A6A=#$05A6オルテガのNPC
0DE783JSL $C75828SR: $075828NPC1設定
0DE787RTLreturn

  • SR: $0D5661 イベント戦闘(vsラスト4連戦)
0D594EJSL $C6F59FSR: $06F59Fゾーマ戦処理
  • SR: $06F59F ゾーマ戦処理(新SR)
06F59FPHAPush A
06F5A0LDA $35B4A=$35B4
06F5A3AND #$0020A&=#$0020オルテガが竜の女王の石化の呪いを解いた
06F5A6BNE #$06if(z==off) goto $06F5AE
06F5A8LDA #$0080A=#$0080
06F5ABTSB $35B4A or $35B4オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い)
06F5AEPLAPull A
06F5AFJSL $C687A0SR: $0687A0イベント戦闘処理?
06F5B3JSL $C907CCSR: $0907CC 引数:1#$35B4 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00RAM上情報変更(OFF)
06F5BDLDA $35B5A=$35B5
06F5C0AND #$0001A&=#$0001
06F5C3BEQ #$14if(z==on) goto $06F5D9
06F5C5JSL $C907CCSR: $0907CC 引数:1#$35B5 引数:2#$7E 引数:3#$01 引数:4#$00 引数:5#$00RAM上情報変更(OFF)
06F5CFLDA #$0002A=#$0002
06F5D2TSB $3554A or $3554ゾーマに1度挑んで全滅した?
06F5D5JSL $CDF652SR: $0DF652オルテガにゾーマから逃がしてもらう処理
06F5D9RTLreturn

  • SR: $02A41F ターン終了時処理(全体)
02A448JSR $D8E8SR: $02D8E8ターン終了時処理
  • SR: $02D8E8 ターン終了時処理(新SR)
02D8E8JSR $DDDDSR: $02DDDDオルテガがゾーマに攻撃をしかける処理(処理実行c=on)
02D8EBBCS #$0Eif(c==on) goto $02D8FB
02D8EDJSL $C2B32FSR: $02B32F戦闘終了時フラグセット?
02D8F1BCS #$08if(c==on) goto $02D8FB
02D8F3JSR $DB85SR: $02DB85ターン終了時処理(毒ダメージ)
02D8F6BCS #$03if(c==on) goto $02D8FB
02D8F8JSR $F32ESR: $02F32Eターン終了時処理(各キャラクターごと)
02D8FBRTSreturn

  • SR: $02A44E ターン終了時処理(各キャラクターごと)
02A475JSR $DB7BSR: $02DB7Bターン終了時各キャラクター処理(自動回復+モンスターID切り替え)
  • SR: $02DB7B ターン終了時各キャラクター処理(自動回復+モンスターID切り替え)(新SR)
02DB7BJSR $DCA8SR: $02DCA8勇者自動回復処理
02DB7EJSR $A47FSR: $02A47F自然回復処理
02DB81JSR $DD00SR: $02DD00モンスターID切り替え処理
02DB84RTSreturn
  • SR: $02DD00 モンスターID切り替え処理
02DD00STX $2428$2428=X
02DD03JSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF戦闘中PC情報取得
02DD0BCMP #$0005A>=#$0005?
02DD0EBCS #$23if(c==on) goto $02DD33
02DD10JSL $C2CA5BSR: $02CA5B 引数:1#$2049戦闘中PC情報取得
02DD16JSR $DD34SR: $02DD34モンスターID切り替え(切り替えたc=on)
02DD19BCC #$18if(c==off) goto $02DD33
02DD1BPHAPush A
02DD1CJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF戦闘中PC情報取得
02DD24ASLA<<1
02DD25TAYY=A
02DD26PLAPull A
02DD27JSL $C2CA98SR: $02CA98 引数:1#$2049戦闘中PC情報変更
02DD2DJSL $C2CA98SR: $02CA98 引数:1#$204B戦闘中PC情報変更
02DD33RTSreturn
  • SR: $02DD34 モンスターID切り替え(切り替えたc=on)(新SR)
02DD34CMP #$0088A==#$0088?光ゾーマ
02DD37BEQ #$1Bif(z==on) goto $02DD54
02DD39CMP #$00B4A==#$00B4?光ゾーマ2
02DD3CBEQ #$1Bif(z==on) goto $02DD59
02DD3ECMP #$00B5A==#$00B5?灰ゾーマ
02DD41BEQ #$1Bif(z==on) goto $02DD5E
02DD43CMP #$00B6A==#$00B6?灰ゾーマ2
02DD46BEQ #$1Bif(z==on) goto $02DD63
02DD48CMP #$00A6A==#$00A6?ダークドレアム
02DD4BBEQ #$1Bif(z==on) goto $02DD68
02DD4DCMP #$00A6A==#$00A7?ダークドレアム2
02DD50BEQ #$1Bif(z==on) goto $02DD6D
02DD52CLCc=off
02DD53RTSreturn
02DD54LDA #$00B4A=#$00B4光ゾーマ2
02DD57BRA #$17goto $02DD70
02DD59LDA #$0088A=#$0088光ゾーマ
02DD5CBRA #$12goto $02DD70
02DD5ELDA #$00B6A=#$00B6灰ゾーマ2
02DD61BRA #$0Dgoto $02DD70
02DD63LDA #$00B5A=#$00B5灰ゾーマ
02DD66BRA #$08goto $02DD70
02DD68LDA #$00B7A=#$00B7ダークドレアム2
02DD6BBRA #$03goto $02DD70
02DD6DLDA #$00A6A=#$00A6ダークドレアム
02DD70SECc=on
02DD71RTSreturn

  • SR: $02DDDD オルテガがゾーマに攻撃をしかける処理(処理実行c=on)(新SR)
02DDDDLDA $35B4A=$35B4
02DDE0AND #$0080A&=#$0080オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い)
02DDE3BEQ #$08if(z==on) goto $02DDED
02DDE5LDA $23D0A=$23D0
02DDE8CMP #$0001A>=#$0001?経過ターン数チェック
02DDEBBCS #$02if(c==on) goto $02DDEF
02DDEDCLCc=off
02DDEERTSreturn
02DDEFJSR $DE6ESR: $02DE6Eゾーマ戦で行動主体を勇者に行動対象をゾーマにする
02DDF2JSL $C1A867SR: $01A867 引数:1#$017E戦闘メッセージ表示
02DDF8JSL $C1A867SR: $01A867 引数:1#$017F戦闘メッセージ表示
02DDFEJSL $C1A867SR: $01A867 引数:1#$0180戦闘メッセージ表示
02DE04LDA #$005DA=#$005D
02DE07JSL $C1E314SR: $01E314BGM再生
02DE0BJSL $C1A867SR: $01A867 引数:1#$0181戦闘メッセージ表示
02DE11LDA #$8D72A=#$8D72
02DE14STA $4F4C$4F4C=A
02DE17JSR $CF59SR: $02CF59行動対象の強制変更?
02DE1ALDA #$000EA=#$000E
02DE1DSTA $4F68$4F68=A
02DE20INC $4F4E$4F4E++
02DE23JSR $CF31SR: $02CF31攻撃時エフェクト実行
02DE26JSL $C1E32ESR: $01E32E 引数:1#$005F再生BGM設定?
02DE2CLDA $23E6A=$23E6
02DE2FTAXX=A
02DE30JSL $C2CAD9SR: $02CAD9 引数:1#$203A 引数:2#$00FF戦闘中PC情報取得
02DE38TAXX=A
02DE39JSL $C02ABASR: $002ABA 引数:1#$C48726
02DE40JSL $C48344SR: $048344エフェクト実行?
02DE44JSL $C1A867SR: $01A867 引数:1#$0182戦闘メッセージ表示
02DE4AJSL $C1A867SR: $01A867 引数:1#$0183戦闘メッセージ表示
02DE50JSL $C1A867SR: $01A867 引数:1#$0184戦闘メッセージ表示
02DE56JSL $CDA15ASR: $0DA15A現在のBGMフェードアウト?
02DE5AJSL $C1A867SR: $01A867 引数:1#$0185戦闘メッセージ表示
02DE60LDA #$0020A=#$0020
02DE63TSB $35B4A or $35B4オルテガが竜の女王の石化の呪いを解いた
02DE66LDA #$0001A=#$0001
02DE69TSB $35B5A or $35B5オルテガが竜の女王の石化の呪いを解いた(テンポラリフラグ扱い)
02DE6CSECc=on
02DE6DRTSreturn

  • SR: $02DE6E ゾーマ戦で行動主体を勇者に行動対象をゾーマにする(新SR)
02DE6ELDY #$0000Y=#$0000
02DE71LDA $243E,YA=$243E+Y
02DE74AND #$00FFA&=#$00FF
02DE77CMP #$0018A>=#$0018?
02DE7ABCS #$2Dif(c==on) goto $02DEA9
02DE7CSTA $2428$2428=A
02DE7FPHYPush Y
02DE80TAYY=A
02DE81JSL $C2CAE0SR: $02CAE0 引数:1#$203C 引数:2#$00FF戦闘中PC情報取得
02DE89CMP #$0005A>=#$0005?
02DE8CBCC #$10if(c==off) goto $02DE9E
02DE8EJSL $C2BE8ASR: $02BE8A 引数:1#$24
02DE93CMP #$0008A==#$0008?
02DE96BNE #$0Aif(z==off) goto $02DEA2
02DE98TYAA=Y
02DE99STA $23E4$23E4=A
02DE9CBRA #$04goto $02DEA2
02DE9ETYAA=Y
02DE9FSTA $23E6$23E6=A
02DEA2PLYPull Y
02DEA3INYY++
02DEA4CPY #$0018Y>=#$0018?
02DEA7BCC #$C8if(c==off) goto $02DE71
02DEA9RTSreturn

このSRはオルテガの攻撃対象をゾーマに、またメッセージ中の会話の対象を勇者にセットするために必要です(オルテガから勇者への会話中の名前の呼びかけは行動主体[B7]にしているため)。あ、でもこれ勇者が死んでると間抜けですね。

  • SR: $0DF652 オルテガにゾーマから逃がしてもらう処理(新SR)
0DF652LDA #$0019A=#$0019
0DF655JSL $C74B8CSR: $074B8C行動対象キャラクター指定?
0DF659LDA #$0041A=#$0041
0DF65CLDX #$002CX=#$002C
0DF65FJSL $C75305SR: $075305キャラクター出現座標を指定
0DF663JSL $CCD857SR: $0CD857キャラクターを上に向かせる
0DF667LDA #$0041A=#$0041
0DF66ALDX #$0030X=#$0030
0DF66DJSL $C74279SR: $074279視点移動座標指定
0DF671JSL $CDE0D0SR: $0DE0D0
0DF675LDA #$0020A=#$0020
0DF678JSL $C74B8CSR: $074B8C行動対象キャラクター指定?
0DF67CLDA #$0041A=#$0041
0DF67FLDX #$0030X=#$0030
0DF682JSL $C75305SR: $075305キャラクター出現座標を指定
0DF686JSL $CDDC4DSR: $0DDC4D
0DF68AJSL $CDD806SR: $0DD806
0DF68ELDX #$0004X=#$0004
0DF691LDA #$0008A=#$0008
0DF694JSL $C7891BSR: $07891B
0DF698JSL $CDD682SR: $0DD682PC再描画?
0DF69CLDA $3402A=$3402
0DF69FCMP #$1770A>=#$1770?
0DF6A2BCC #$02if(c==off) goto $0DF6A6
0DF6A4BRA #$03goto $0DF6A9
0DF6A6COPgoto $00FFE4
0DF6A7BRA #$F3goto $0DF69C
0DF6A9LDA #$0101A=#$0101
0DF6ACLDX #$0000X=#$0000
0DF6AFJSL $C733E5SR: $0733E5
0DF6B3JSL $CCD07DSR: $0CD07D
0DF6B7LDA #$0006A=#$0006
0DF6BAJSL $C74B39SR: $074B39処理にインターバルを置く?
0DF6BEJSL $CDC5F3SR: $0DC5F3
0DF6C2LDA #$0010A=#$0010
0DF6C5JSL $C74B39SR: $074B39処理にインターバルを置く?
0DF6C9BRK $105B ($0D105B)goto $00FFE6(メッセージ表示) #$105B
0DF6CCJSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0DF6D0BRK $105C ($0D105C)goto $00FFE6(メッセージ表示) #$105C
0DF6D3JSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0DF6D7BRK $105D ($0D105D)goto $00FFE6(メッセージ表示) #$105D
0DF6DAJSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0DF6DEJSL $C1E32ESR: $01E32E 引数:1#$0065再生BGM設定?
0DF6E4JSL $C737BESR: $0737BE 引数:1#$105Eメッセージ表示
0DF6EAJSL $CC7B5ASR: $0C7B5Aパーティ人数が1人か調べる(1人c=on)
0DF6EEBCS #$08if(c==on) goto $0DF6F8
0DF6F0JSL $C737BESR: $0737BE 引数:1#$1060メッセージ表示
0DF6F6BRA #$06goto $0DF6FE
0DF6F8JSL $C737BESR: $0737BE 引数:1#$105Fメッセージ表示
0DF6FELDA #$0020A=#$0020
0DF701JSL $C74B39SR: $074B39処理にインターバルを置く?
0DF705LDA #$0019A=#$0019
0DF708JSL $C1E7D9SR: $01E7D9ルーラエフェクト処理(別バンク用)
0DF70CRTLreturn
  • SR: $01E7D9 ルーラエフェクト処理(別バンク用)(新SR)
01E7D9REP #$30m=off(A/M:16b) x=off(X/Y:16b)
01E7DBPEA #$7E7EPush #$7E7E
01E7DEPLBPull DB
01E7DFPLBPull DB
01E7E0JSL $C1E32ESR: $01E32E 引数:1#$0096再生BGM設定?
01E7E6PHAPush A
01E7E7JSR $D1ACSR: $01D1ACルーラでPCが飛び上がる描画
01E7EAJSR $D19BSR: $01D19Bルーラによる時刻変更
01E7EDPLAPull A
01E7EEJMP $0731E0goto $0731E0

個々の部分の処理は特筆すべき点は特にありません。まあ今までやってきたことの総まとめといったところですね。

コメント

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