次に、特定のモンスターIDをターン終了時にスイッチさせる処理、オルテガがゾーマ初戦開始2ターン後に乱入してくる部分を実装します。 オルテガが乱入するかどうかはゾーマ戦開始直前に特定のフラグをONにしておき、そのフラグがONになっている戦闘中のみ2ターン経過後乱入処理を行うというようにします。
- SR: $0CCB6F ゾーマの城B5FNPC情報設定
| 0CCBA0-2 | NOP | ||
|---|---|---|---|
| 0CCBA3 | JSL $CDE76C | SR: $0DE76C | ゾーマの城5FNPC設定(サブ) |
| 略 |
- SR: $0DE76C ゾーマの城5FNPC設定(サブ)(新SR)
| 0DE76C | LDA #$005F | A=#$005F | |
|---|---|---|---|
| 0DE76F | JSL $C758DE | SR: $0758DE | NPC2設定 |
| 0DE773 | LDA #$05A5 | A=#$05A5 | オルテガのNPC |
| 0DE776 | JSL $C75828 | SR: $075828 | NPC1設定 |
| 0DE77A | JSL $CDE7E6 | SR: $0DE7E6 | オルテガゾンビが出現する条件か(該当c=on) |
| 0DE77E | BCC #$07 | if(c==off) goto $0DE787 | |
| 0DE780 | LDA #$05A6 | A=#$05A6 | オルテガのNPC |
| 0DE783 | JSL $C75828 | SR: $075828 | NPC1設定 |
| 0DE787 | RTL | return |
- SR: $0D5661 イベント戦闘(vsラスト4連戦)
| 略 | |||
|---|---|---|---|
| 0D594E | JSL $C6F59F | SR: $06F59F | ゾーマ戦処理 |
| 略 |
- SR: $06F59F ゾーマ戦処理(新SR)
| 06F59F | PHA | Push A | |
|---|---|---|---|
| 06F5A0 | LDA $35B4 | A=$35B4 | |
| 06F5A3 | AND #$0020 | A&=#$0020 | オルテガが竜の女王の石化の呪いを解いた |
| 06F5A6 | BNE #$06 | if(z==off) goto $06F5AE | |
| 06F5A8 | LDA #$0080 | A=#$0080 | |
| 06F5AB | TSB $35B4 | A or $35B4 | オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い) |
| 06F5AE | PLA | Pull A | |
| 06F5AF | JSL $C687A0 | SR: $0687A0 | イベント戦闘処理? |
| 06F5B3 | JSL $C907CC | SR: $0907CC 引数:1#$35B4 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00 | RAM上情報変更(OFF) |
| 06F5BD | LDA $35B5 | A=$35B5 | |
| 06F5C0 | AND #$0001 | A&=#$0001 | |
| 06F5C3 | BEQ #$14 | if(z==on) goto $06F5D9 | |
| 06F5C5 | JSL $C907CC | SR: $0907CC 引数:1#$35B5 引数:2#$7E 引数:3#$01 引数:4#$00 引数:5#$00 | RAM上情報変更(OFF) |
| 06F5CF | LDA #$0002 | A=#$0002 | |
| 06F5D2 | TSB $3554 | A or $3554 | ゾーマに1度挑んで全滅した? |
| 06F5D5 | JSL $CDF652 | SR: $0DF652 | オルテガにゾーマから逃がしてもらう処理 |
| 06F5D9 | RTL | return |
- SR: $02A41F ターン終了時処理(全体)
| 略 | |||
|---|---|---|---|
| 02A448 | JSR $D8E8 | SR: $02D8E8 | ターン終了時処理 |
| 略 |
- SR: $02D8E8 ターン終了時処理(新SR)
| 02D8E8 | JSR $DDDD | SR: $02DDDD | オルテガがゾーマに攻撃をしかける処理(処理実行c=on) |
|---|---|---|---|
| 02D8EB | BCS #$0E | if(c==on) goto $02D8FB | |
| 02D8ED | JSL $C2B32F | SR: $02B32F | 戦闘終了時フラグセット? |
| 02D8F1 | BCS #$08 | if(c==on) goto $02D8FB | |
| 02D8F3 | JSR $DB85 | SR: $02DB85 | ターン終了時処理(毒ダメージ) |
| 02D8F6 | BCS #$03 | if(c==on) goto $02D8FB | |
| 02D8F8 | JSR $F32E | SR: $02F32E | ターン終了時処理(各キャラクターごと) |
| 02D8FB | RTS | return |
- SR: $02A44E ターン終了時処理(各キャラクターごと)
| 略 | |||
|---|---|---|---|
| 02A475 | JSR $DB7B | SR: $02DB7B | ターン終了時各キャラクター処理(自動回復+モンスターID切り替え) |
| 略 |
- SR: $02DB7B ターン終了時各キャラクター処理(自動回復+モンスターID切り替え)(新SR)
| 02DB7B | JSR $DCA8 | SR: $02DCA8 | 勇者自動回復処理 |
|---|---|---|---|
| 02DB7E | JSR $A47F | SR: $02A47F | 自然回復処理 |
| 02DB81 | JSR $DD00 | SR: $02DD00 | モンスターID切り替え処理 |
| 02DB84 | RTS | return |
- SR: $02DD00 モンスターID切り替え処理
| 02DD00 | STX $2428 | $2428=X | |
|---|---|---|---|
| 02DD03 | JSL $C2CAD9 | SR: $02CAD9 引数:1#$203C 引数:2#$00FF | 戦闘中PC情報取得 |
| 02DD0B | CMP #$0005 | A>=#$0005? | |
| 02DD0E | BCS #$23 | if(c==on) goto $02DD33 | |
| 02DD10 | JSL $C2CA5B | SR: $02CA5B 引数:1#$2049 | 戦闘中PC情報取得 |
| 02DD16 | JSR $DD34 | SR: $02DD34 | モンスターID切り替え(切り替えたc=on) |
| 02DD19 | BCC #$18 | if(c==off) goto $02DD33 | |
| 02DD1B | PHA | Push A | |
| 02DD1C | JSL $C2CAD9 | SR: $02CAD9 引数:1#$203C 引数:2#$00FF | 戦闘中PC情報取得 |
| 02DD24 | ASL | A<<1 | |
| 02DD25 | TAY | Y=A | |
| 02DD26 | PLA | Pull A | |
| 02DD27 | JSL $C2CA98 | SR: $02CA98 引数:1#$2049 | 戦闘中PC情報変更 |
| 02DD2D | JSL $C2CA98 | SR: $02CA98 引数:1#$204B | 戦闘中PC情報変更 |
| 02DD33 | RTS | return |
- SR: $02DD34 モンスターID切り替え(切り替えたc=on)(新SR)
| 02DD34 | CMP #$0088 | A==#$0088? | 光ゾーマ |
|---|---|---|---|
| 02DD37 | BEQ #$1B | if(z==on) goto $02DD54 | |
| 02DD39 | CMP #$00B4 | A==#$00B4? | 光ゾーマ2 |
| 02DD3C | BEQ #$1B | if(z==on) goto $02DD59 | |
| 02DD3E | CMP #$00B5 | A==#$00B5? | 灰ゾーマ |
| 02DD41 | BEQ #$1B | if(z==on) goto $02DD5E | |
| 02DD43 | CMP #$00B6 | A==#$00B6? | 灰ゾーマ2 |
| 02DD46 | BEQ #$1B | if(z==on) goto $02DD63 | |
| 02DD48 | CMP #$00A6 | A==#$00A6? | ダークドレアム |
| 02DD4B | BEQ #$1B | if(z==on) goto $02DD68 | |
| 02DD4D | CMP #$00A6 | A==#$00A7? | ダークドレアム2 |
| 02DD50 | BEQ #$1B | if(z==on) goto $02DD6D | |
| 02DD52 | CLC | c=off | |
| 02DD53 | RTS | return | |
| 02DD54 | LDA #$00B4 | A=#$00B4 | 光ゾーマ2 |
| 02DD57 | BRA #$17 | goto $02DD70 | |
| 02DD59 | LDA #$0088 | A=#$0088 | 光ゾーマ |
| 02DD5C | BRA #$12 | goto $02DD70 | |
| 02DD5E | LDA #$00B6 | A=#$00B6 | 灰ゾーマ2 |
| 02DD61 | BRA #$0D | goto $02DD70 | |
| 02DD63 | LDA #$00B5 | A=#$00B5 | 灰ゾーマ |
| 02DD66 | BRA #$08 | goto $02DD70 | |
| 02DD68 | LDA #$00B7 | A=#$00B7 | ダークドレアム2 |
| 02DD6B | BRA #$03 | goto $02DD70 | |
| 02DD6D | LDA #$00A6 | A=#$00A6 | ダークドレアム |
| 02DD70 | SEC | c=on | |
| 02DD71 | RTS | return |
- SR: $02DDDD オルテガがゾーマに攻撃をしかける処理(処理実行c=on)(新SR)
| 02DDDD | LDA $35B4 | A=$35B4 | |
|---|---|---|---|
| 02DDE0 | AND #$0080 | A&=#$0080 | オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い) |
| 02DDE3 | BEQ #$08 | if(z==on) goto $02DDED | |
| 02DDE5 | LDA $23D0 | A=$23D0 | |
| 02DDE8 | CMP #$0001 | A>=#$0001? | 経過ターン数チェック |
| 02DDEB | BCS #$02 | if(c==on) goto $02DDEF | |
| 02DDED | CLC | c=off | |
| 02DDEE | RTS | return | |
| 02DDEF | JSR $DE6E | SR: $02DE6E | ゾーマ戦で行動主体を勇者に行動対象をゾーマにする |
| 02DDF2 | JSL $C1A867 | SR: $01A867 引数:1#$017E | 戦闘メッセージ表示 |
| 02DDF8 | JSL $C1A867 | SR: $01A867 引数:1#$017F | 戦闘メッセージ表示 |
| 02DDFE | JSL $C1A867 | SR: $01A867 引数:1#$0180 | 戦闘メッセージ表示 |
| 02DE04 | LDA #$005D | A=#$005D | |
| 02DE07 | JSL $C1E314 | SR: $01E314 | BGM再生 |
| 02DE0B | JSL $C1A867 | SR: $01A867 引数:1#$0181 | 戦闘メッセージ表示 |
| 02DE11 | LDA #$8D72 | A=#$8D72 | |
| 02DE14 | STA $4F4C | $4F4C=A | |
| 02DE17 | JSR $CF59 | SR: $02CF59 | 行動対象の強制変更? |
| 02DE1A | LDA #$000E | A=#$000E | |
| 02DE1D | STA $4F68 | $4F68=A | |
| 02DE20 | INC $4F4E | $4F4E++ | |
| 02DE23 | JSR $CF31 | SR: $02CF31 | 攻撃時エフェクト実行 |
| 02DE26 | JSL $C1E32E | SR: $01E32E 引数:1#$005F | 再生BGM設定? |
| 02DE2C | LDA $23E6 | A=$23E6 | |
| 02DE2F | TAX | X=A | |
| 02DE30 | JSL $C2CAD9 | SR: $02CAD9 引数:1#$203A 引数:2#$00FF | 戦闘中PC情報取得 |
| 02DE38 | TAX | X=A | |
| 02DE39 | JSL $C02ABA | SR: $002ABA 引数:1#$C48726 | |
| 02DE40 | JSL $C48344 | SR: $048344 | エフェクト実行? |
| 02DE44 | JSL $C1A867 | SR: $01A867 引数:1#$0182 | 戦闘メッセージ表示 |
| 02DE4A | JSL $C1A867 | SR: $01A867 引数:1#$0183 | 戦闘メッセージ表示 |
| 02DE50 | JSL $C1A867 | SR: $01A867 引数:1#$0184 | 戦闘メッセージ表示 |
| 02DE56 | JSL $CDA15A | SR: $0DA15A | 現在のBGMフェードアウト? |
| 02DE5A | JSL $C1A867 | SR: $01A867 引数:1#$0185 | 戦闘メッセージ表示 |
| 02DE60 | LDA #$0020 | A=#$0020 | |
| 02DE63 | TSB $35B4 | A or $35B4 | オルテガが竜の女王の石化の呪いを解いた |
| 02DE66 | LDA #$0001 | A=#$0001 | |
| 02DE69 | TSB $35B5 | A or $35B5 | オルテガが竜の女王の石化の呪いを解いた(テンポラリフラグ扱い) |
| 02DE6C | SEC | c=on | |
| 02DE6D | RTS | return |
- SR: $02DE6E ゾーマ戦で行動主体を勇者に行動対象をゾーマにする(新SR)
| 02DE6E | LDY #$0000 | Y=#$0000 | |
|---|---|---|---|
| 02DE71 | LDA $243E,Y | A=$243E+Y | |
| 02DE74 | AND #$00FF | A&=#$00FF | |
| 02DE77 | CMP #$0018 | A>=#$0018? | |
| 02DE7A | BCS #$2D | if(c==on) goto $02DEA9 | |
| 02DE7C | STA $2428 | $2428=A | |
| 02DE7F | PHY | Push Y | |
| 02DE80 | TAY | Y=A | |
| 02DE81 | JSL $C2CAE0 | SR: $02CAE0 引数:1#$203C 引数:2#$00FF | 戦闘中PC情報取得 |
| 02DE89 | CMP #$0005 | A>=#$0005? | |
| 02DE8C | BCC #$10 | if(c==off) goto $02DE9E | |
| 02DE8E | JSL $C2BE8A | SR: $02BE8A 引数:1#$24 | |
| 02DE93 | CMP #$0008 | A==#$0008? | |
| 02DE96 | BNE #$0A | if(z==off) goto $02DEA2 | |
| 02DE98 | TYA | A=Y | |
| 02DE99 | STA $23E4 | $23E4=A | |
| 02DE9C | BRA #$04 | goto $02DEA2 | |
| 02DE9E | TYA | A=Y | |
| 02DE9F | STA $23E6 | $23E6=A | |
| 02DEA2 | PLY | Pull Y | |
| 02DEA3 | INY | Y++ | |
| 02DEA4 | CPY #$0018 | Y>=#$0018? | |
| 02DEA7 | BCC #$C8 | if(c==off) goto $02DE71 | |
| 02DEA9 | RTS | return |
このSRはオルテガの攻撃対象をゾーマに、またメッセージ中の会話の対象を勇者にセットするために必要です(オルテガから勇者への会話中の名前の呼びかけは行動主体[B7]にしているため)。あ、でもこれ勇者が死んでると間抜けですね。
- SR: $0DF652 オルテガにゾーマから逃がしてもらう処理(新SR)
| 0DF652 | LDA #$0019 | A=#$0019 | |
|---|---|---|---|
| 0DF655 | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定? |
| 0DF659 | LDA #$0041 | A=#$0041 | |
| 0DF65C | LDX #$002C | X=#$002C | |
| 0DF65F | JSL $C75305 | SR: $075305 | キャラクター出現座標を指定 |
| 0DF663 | JSL $CCD857 | SR: $0CD857 | キャラクターを上に向かせる |
| 0DF667 | LDA #$0041 | A=#$0041 | |
| 0DF66A | LDX #$0030 | X=#$0030 | |
| 0DF66D | JSL $C74279 | SR: $074279 | 視点移動座標指定 |
| 0DF671 | JSL $CDE0D0 | SR: $0DE0D0 | |
| 0DF675 | LDA #$0020 | A=#$0020 | |
| 0DF678 | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定? |
| 0DF67C | LDA #$0041 | A=#$0041 | |
| 0DF67F | LDX #$0030 | X=#$0030 | |
| 0DF682 | JSL $C75305 | SR: $075305 | キャラクター出現座標を指定 |
| 0DF686 | JSL $CDDC4D | SR: $0DDC4D | |
| 0DF68A | JSL $CDD806 | SR: $0DD806 | |
| 0DF68E | LDX #$0004 | X=#$0004 | |
| 0DF691 | LDA #$0008 | A=#$0008 | |
| 0DF694 | JSL $C7891B | SR: $07891B | |
| 0DF698 | JSL $CDD682 | SR: $0DD682 | PC再描画? |
| 0DF69C | LDA $3402 | A=$3402 | |
| 0DF69F | CMP #$1770 | A>=#$1770? | |
| 0DF6A2 | BCC #$02 | if(c==off) goto $0DF6A6 | |
| 0DF6A4 | BRA #$03 | goto $0DF6A9 | |
| 0DF6A6 | COP | goto $00FFE4 | |
| 0DF6A7 | BRA #$F3 | goto $0DF69C | |
| 0DF6A9 | LDA #$0101 | A=#$0101 | |
| 0DF6AC | LDX #$0000 | X=#$0000 | |
| 0DF6AF | JSL $C733E5 | SR: $0733E5 | |
| 0DF6B3 | JSL $CCD07D | SR: $0CD07D | |
| 0DF6B7 | LDA #$0006 | A=#$0006 | |
| 0DF6BA | JSL $C74B39 | SR: $074B39 | 処理にインターバルを置く? |
| 0DF6BE | JSL $CDC5F3 | SR: $0DC5F3 | |
| 0DF6C2 | LDA #$0010 | A=#$0010 | |
| 0DF6C5 | JSL $C74B39 | SR: $074B39 | 処理にインターバルを置く? |
| 0DF6C9 | BRK $105B ($0D105B) | goto $00FFE6(メッセージ表示) #$105B | |
| 0DF6CC | JSL $CDACD2 | SR: $0DACD2 | キー入力でメッセージウィンドウを閉じる |
| 0DF6D0 | BRK $105C ($0D105C) | goto $00FFE6(メッセージ表示) #$105C | |
| 0DF6D3 | JSL $CDACD2 | SR: $0DACD2 | キー入力でメッセージウィンドウを閉じる |
| 0DF6D7 | BRK $105D ($0D105D) | goto $00FFE6(メッセージ表示) #$105D | |
| 0DF6DA | JSL $CDACD2 | SR: $0DACD2 | キー入力でメッセージウィンドウを閉じる |
| 0DF6DE | JSL $C1E32E | SR: $01E32E 引数:1#$0065 | 再生BGM設定? |
| 0DF6E4 | JSL $C737BE | SR: $0737BE 引数:1#$105E | メッセージ表示 |
| 0DF6EA | JSL $CC7B5A | SR: $0C7B5A | パーティ人数が1人か調べる(1人c=on) |
| 0DF6EE | BCS #$08 | if(c==on) goto $0DF6F8 | |
| 0DF6F0 | JSL $C737BE | SR: $0737BE 引数:1#$1060 | メッセージ表示 |
| 0DF6F6 | BRA #$06 | goto $0DF6FE | |
| 0DF6F8 | JSL $C737BE | SR: $0737BE 引数:1#$105F | メッセージ表示 |
| 0DF6FE | LDA #$0020 | A=#$0020 | |
| 0DF701 | JSL $C74B39 | SR: $074B39 | 処理にインターバルを置く? |
| 0DF705 | LDA #$0019 | A=#$0019 | |
| 0DF708 | JSL $C1E7D9 | SR: $01E7D9 | ルーラエフェクト処理(別バンク用) |
| 0DF70C | RTL | return |
- SR: $01E7D9 ルーラエフェクト処理(別バンク用)(新SR)
| 01E7D9 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
|---|---|---|---|
| 01E7DB | PEA #$7E7E | Push #$7E7E | |
| 01E7DE | PLB | Pull DB | |
| 01E7DF | PLB | Pull DB | |
| 01E7E0 | JSL $C1E32E | SR: $01E32E 引数:1#$0096 | 再生BGM設定? |
| 01E7E6 | PHA | Push A | |
| 01E7E7 | JSR $D1AC | SR: $01D1AC | ルーラでPCが飛び上がる描画 |
| 01E7EA | JSR $D19B | SR: $01D19B | ルーラによる時刻変更 |
| 01E7ED | PLA | Pull A | |
| 01E7EE | JMP $0731E0 | goto $0731E0 |
個々の部分の処理は特筆すべき点は特にありません。まあ今までやってきたことの総まとめといったところですね。



コメント