次に、特定のモンスター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 |
ゾーマ戦処理 |
| 略 |
|
|
|
| 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 |
|
| 略 |
|
|
|
| 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 |
|
個々の部分の処理は特筆すべき点は特にありません。まあ今までやってきたことの総まとめといったところですね。
コメント