前回でダメージ系の解説は終わりです。ラリホーやマホトーンなど確率系については耐性改造のあたりで触れているので省略します。というわけでこれ以外のイレギュラーな戦闘行動(イレギュラーなものは遊び人の遊びに多いですが)についていくつか説明していきます。
- SR: $029BAE ドラゴラム
029BAE | LDX $23E8 | X=$7E23E8 | |
---|---|---|---|
029BB1 | LDA #$0001 | A=#$0001 | |
029BB4 | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0040 | ドラゴラムをON |
029BBC | LDA #$0000 | A=#$0000 | |
029BBF | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0001 | コマンド入力化をOFF? |
029BC7 | LDA #$007E | A=#$007E | ドラゴンのモンスターID |
029BCA | JSL $02CA98 | SR: $02CA98 引数:1#$204B | |
029BD0 | TAY | Y=A | |
029BD1 | JSL $02CC92 | SR: $02CC92 引数:1#$0006 引数:2#$0FFC | モンスター情報取得(攻撃力) |
029BD9 | JSL $02CA98 | SR: $02CA98 引数:1#$203F | 攻撃力セット |
029BDF | JSL $02CC92 | SR: $02CC92 引数:1#$0007 引数:2#$3FF0 | モンスター情報取得(守備力) |
029BE7 | JSR $99F5 | SR: $0299F5 | 守備力変更 |
029BEA | JSL $02CC92 | SR: $02CC92 引数:1#$000A 引数:2#$00FF | モンスター情報取得(素早さ) |
029BF2 | JSL $02CA98 | SR: $02CA98 引数:1#$2043 | 素早さセット |
029BF8 | LDA #$0000 | A=#$0000 | |
029BFB | JSL $02CB70 | SR: $02CB70 引数:1#$2048 引数:2#$00FF | 行動パターン変更 |
029C03 | JSL $01A867 | SR: $01A867 引数:1#$0070 | 戦闘メッセージ表示 |
029C09 | SEC | c=on | |
029C0A | RTL | return |
- SR: $0299F5 守備力変更
0299F5 | PHX | Push X | |
---|---|---|---|
0299F6 | PHY | Push Y | |
0299F7 | LDX $2428 | X=$7E2428 | |
0299FA | PHA | Push A | |
0299FB | LDA #$0000 | A=#$0000 | |
0299FE | JSL $02CB70 | SR: $02CB70 引数:1#$2052 引数:2#$0008 | 守備力MAX状態を解除? |
029A06 | PLA | Pull A | |
029A07 | CMP #$03FF | A>=#$03FF? | 変更後の守備力が1023以上か |
029A0A | BCC #$0E | if(c==off) goto $029A1A | |
029A0C | LDA #$0001 | A=#$0001 | |
029A0F | JSL $02CB70 | SR: $02CB70 引数:1#$2052 引数:2#$0008 | 守備力MAX状態をセット? |
029A17 | LDA #$03FF | A=#$03FF | 1023以上の場合は1023にクリップ |
029A1A | JSL $02CA98 | SR: $02CA98 引数:1#$2041 | 守備力変更 |
029A20 | PLY | Pull Y | |
029A21 | PLX | Pull X | |
029A22 | RTS | return |
これを見ると、ドラゴラムとはドラゴンにモシャスすることとほぼ同値であることがわかります。ドラゴラムしたキャラクターは炎しか吐かないわけで攻撃力は意味がありませんが、守備力、素早さがドラゴンと同じになってしまうことがわかります。
- SR: $0293E0 メガンテ
0293E0 | LDA #$0001 | A=#$0001 | |
---|---|---|---|
0293E3 | PEA $23AE | Push $23AE | |
0293E6 | PEA $0004 | Push $0004 | |
0293E9 | PEA $7E00 | Push $7E00 | |
0293EC | JSL $0902E9 | SR: $0902E9 | メガンテ実行フラグ |
0293F0 | LDA $23E8 | A=$7E23E8 | |
0293F3 | STA $2428 | $7E2428=A | |
0293F6 | JSR $A3EB | SR: $02A3EB | 耐性を考慮して成否判定 |
0293F9 | BCS #$08 | if(c==on) goto $029403 | |
0293FB | JSL $01A867 | SR: $01A867 引数:1#$000F | 戦闘メッセージ表示:「きかなかった」 |
029401 | CLC | c=off | |
029402 | RTL | return | |
029403 | JSR $9372 | SR: $029372 | 命の石所持を調べて持っていれば即死回避する |
029406 | BCS #$2B | if(c==on) goto $029433 | |
029408 | PEA $23AD | Push $23AD | |
02940B | PEA $0040 | Push $0040 | |
02940E | PEA $7E00 | Push $7E00 | |
029411 | JSL $09029E | SR: $09029E | メガンテ結果選択(即死かダメージか) |
029415 | BNE #$1E | if(z==off) goto $029435 | |
029417 | LDA #$FFFF | A=#$FFFF | |
02941A | STA $00 | $000000=A | |
02941C | JSL $02BE8A | SR: $02BE8A 引数:1#$06 | HP減算処理 |
029421 | JSL $02B977 | SR: $02B977 | パーティウィンドウ再描画? |
029425 | JSL $02CFCE | SR: $02CFCE | 消滅処理? |
029429 | JSL $01A867 | SR: $01A867 引数:1#$0019 | 戦闘メッセージ表示:「くだけちった」 |
02942F | JSL $02B054 | SR: $02B054 | 行動対象者を戦闘から離脱させる処理メイン |
029433 | SEC | c=on | |
029434 | RTL | return | |
029435 | LDA $247C | A=$7E247C | |
029438 | CMP #$0158 | A>=#$0158? | ここからダメージ値の計算? |
02943B | BCS #$12 | if(c==on) goto $02944F | |
02943D | SEC | c=on | |
02943E | SBC #$0004 | A-=#$0004 | |
029441 | BCS #$03 | if(c==on) goto $029446 | |
029443 | LDA #$0000 | A=#$0000 | |
029446 | AND #$FFFC | A&=#$FFFC | |
029449 | CLC | c=off | |
02944A | ADC #$0005 | A+=#$0005 | |
02944D | BRA #$08 | goto $029457 | |
02944F | SEC | c=on | |
029450 | SBC #$0004 | A-=#$0004 | |
029453 | AND #$FFFC | A&=#$FFFC | |
029456 | INC | A++ | |
029457 | STA $00 | $000000=A | |
029459 | JSR $8E70 | SR: $028E70 | ダメージ確定メイン |
02945C | RTL | return |
術者が死亡する処理は「戦闘後追加処理を行う戦闘行動群」で実行されるので、ここではメガンテの対象に対する処理のみです。(このブログの最初期のあたりに記事を書いていますね。覚えてますか?)
- SR: $029372 命の石所持を調べて持っていれば即死回避する
029372 | LDA #$00A8 | A=#$00A8 | 命の石のアイテムID |
---|---|---|---|
029375 | STA $242C | $7E242C=A | |
029378 | JSL $02B87A | SR: $02B87A | アイテム装備チェック(保持のみならc=on) |
02937C | BCC #$10 | if(c==off) goto $02938E | |
02937E | JSL $02B904 | SR: $02B904 | 戦闘中アイテム消費 |
029382 | BCC #$0A | if(c==off) goto $02938E | |
029384 | JSL $01A867 | SR: $01A867 引数:1#$0153 | 戦闘メッセージ:「いのちのいしは くだけちった」 |
02938A | JSR $938F | SR: $02938F | |
02938D | SEC | c=on | |
02938E | RTS | return |
- SR: $02938F 使用するアイテムが命の石の場合の処理?
02938F | LDX $2428 | X=$7E2428 | |
---|---|---|---|
029392 | JSL $02CAD9 | SR: $02CAD9 引数:1#$2052 引数:2#$0020 | コマンド実行済み? |
02939A | BEQ #$21 | if(z==on) goto $0293BD | |
02939C | JSL $02CAD9 | SR: $02CAD9 引数:1#$203D 引数:2#$00FF | 使用するアイテムID取得 |
0293A4 | CMP #$00A8 | A==#$00A8? | 使用するアイテムが命の石か |
0293A7 | BNE #$14 | if(z==off) goto $0293BD | |
0293A9 | STA $242C | $7E242C=A | |
0293AC | JSL $02B87A | SR: $02B87A | アイテム装備チェック(保持のみならc=on) |
0293B0 | BCC #$0C | if(c==off) goto $0293BE | |
0293B2 | LDA $242E | A=$7E242E | |
0293B5 | JSL $02CB70 | SR: $02CB70 引数:1#$203E 引数:2#$00FF | |
0293BD | RTS | return | |
0293BE | LDA #$0000 | A=#$0000 | コマンドを実行済みにする? |
0293C1 | JSL $02CB70 | SR: $02CB70 引数:1#$2052 引数:2#$0020 | |
0293C9 | LDA #$00AB | A=#$00AB | 戦闘行動をいのちのいしにする |
0293CC | JSL $02CB70 | SR: $02CB70 引数:1#$2034 引数:2#$01FF | |
0293D4 | LDA #$0040 | A=#$0040 | ターゲット情報セット |
0293D7 | JSL $02CB70 | SR: $02CB70 引数:1#$2035 引数:2#$00FE | |
0293DF | RTS | return |
いまいち意味がわかりませんが、行動対象キャラクターの行動が命の石使用である場合、すでに命の石が砕けてしまっているので、持っていない場合にも「命の石を使った!」というメッセージが表示されるという矛盾をなくすための処理であるようです。
- SR: $029E44 凍てつく波動
029E44 | JSL $02BAE8 | SR: $02BAE8 | 倒したモンスターがあやしいかげの場合の処理 |
---|---|---|---|
029E48 | LDX $23E8 | X=$7E23E8 | 行動対象者のIDセット |
029E4B | STX $2428 | $7E2428=X | |
029E4E | JSL $02CAD9 | SR: $02CAD9 引数:1#$2051 引数:2#$0080 | 行動対象がモシャス中か |
029E56 | BNE #$0A | if(z==off) goto $029E62 | |
029E58 | JSL $02CAD9 | SR: $02CAD9 引数:1#$2051 引数:2#$0040 | 行動対象がドラゴラム中か |
029E60 | BEQ #$04 | if(z==on) goto $029E66 | |
029E62 | JSL $02B52D | SR: $02B52D | 戦闘中キャラクター行動情報初期化 |
029E66 | LDY $23E4 | Y=$7E23E4 | 行動主体者のIDセット |
029E69 | JSL $02CAE0 | SR: $02CAE0 引数:1#$203C 引数:2#$00FF | 行動主体のグループID取得 |
029E71 | CMP #$0004 | A>=#$0004? | PCor格闘場で賭けたモンスターか |
029E74 | BCS #$12 | if(c==on) goto $029E88 | |
029E76 | JSL $02CAD9 | SR: $02CAD9 引数:1#$203C 引数:2#$00FF | 行動対象のグループID取得 |
029E7E | CMP #$0004 | A>=#$0004? | PCor格闘場で賭けたモンスターか |
029E81 | BCS #$12 | if(c==on) goto $029E95 | |
029E83 | JSR $9E9E | SR: $029E9E | 凍てつく波動による不利ステータスリセット処理 |
029E86 | BRA #$10 | goto $029E98 | |
029E88 | JSL $02CAD9 | SR: $02CAD9 引数:1#$203C 引数:2#$00FF | 行動対象のグループID取得 |
029E90 | CMP #$0004 | A>=#$0004? | PCor格闘場で賭けたモンスターか |
029E93 | BCS #$EE | if(c==on) goto $029E83 | |
029E95 | JSR $9EE8 | SR: $029EE8 | 凍てつく波動による有利ステータスリセット処理 |
029E98 | JSL $02B977 | SR: $02B977 | パーティウィンドウ再描画? |
029E9C | SEC | c=on | |
029E9D | RTL | return |
ちょっとややこしいですが、A)PCor格闘場で賭けたモンスター、B)それ以外とすると、
行動主体 | 行動対象 | リセットするステータス |
---|---|---|
A | A | 不利ステータス |
A | B | 有利ステータス |
B | A | 有利ステータス |
B | B | 不利ステータス |
ということです。
- SR: $029E9E 凍てつく波動による不利ステータスリセット処理
029E9E | LDA #$0000 | A=#$0000 | |
---|---|---|---|
029EA1 | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0002 | マホトーン状態リセット |
029EA9 | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0004 | マヌーサ状態リセット |
029EB1 | JSL $02C240 | SR: $02C240 引数:1#$04 | (素の)攻撃力取得 |
029EB6 | JSL $02CA98 | SR: $02CA98 引数:1#$203F | 攻撃力変更 |
029EBC | JSL $02C240 | SR: $02C240 引数:1#$06 | (素の)守備力取得 |
029EC1 | JSR $99F5 | SR: $0299F5 | 守備力変更 |
029EC4 | JSL $02C240 | SR: $02C240 引数:1#$08 | (素の)すばやさ取得 |
029EC9 | JSL $02CA98 | SR: $02CA98 引数:1#$2043 | すばやさ変更 |
029ECF | JSL $02BE8A | SR: $02BE8A 引数:1#$00 | 現HP取得 |
029ED4 | STA $00 | $000000=A | |
029ED6 | JSL $02BE8A | SR: $02BE8A 引数:1#$02 | 現HP変更 |
029EDB | JSL $02BE8A | SR: $02BE8A 引数:1#$08 | 現MP取得 |
029EE0 | STA $00 | $000000=A | |
029EE2 | JSL $02BE8A | SR: $02BE8A 引数:1#$0A | 現MP変更 |
029EE7 | RTS | return |
眠り状態はリセットされないようです。オリジナルでは使用するのはゾーマ、神龍だけなので、使用時に他の仲間の不利ステータスをリセットする必要はない、ということのようです。
- SR: $029EE8 凍てつく波動による有利ステータスリセット処理
029EE8 | LDA #$0000 | A=#$0000 | |
---|---|---|---|
029EEB | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0010 | マホカンタ状態リセット |
029EF3 | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0020 | フバーハ状態リセット |
029EFB | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0008 | バイキルト状態リセット |
029F03 | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0040 | ドラゴラム状態リセット |
029F0B | JSL $02CB70 | SR: $02CB70 引数:1#$2051 引数:2#$0080 | モシャス状態リセット |
029F13 | JSL $02C240 | SR: $02C240 引数:1#$04 | (素の)攻撃力取得 |
029F18 | JSL $02CA98 | SR: $02CA98 引数:1#$203F | 攻撃力変更 |
029F1E | JSL $02C240 | SR: $02C240 引数:1#$06 | (素の)守備力取得 |
029F23 | JSR $99F5 | SR: $0299F5 | 守備力変更 |
029F26 | JSL $02C240 | SR: $02C240 引数:1#$08 | (素の)すばやさ取得 |
029F2B | JSL $02CA98 | SR: $02CA98 引数:1#$2043 | すばやさ変更 |
029F31 | JSL $02BE8A | SR: $02BE8A 引数:1#$00 | 現HP取得 |
029F36 | STA $00 | DP($00)=A | |
029F38 | JSL $02BE8A | SR: $02BE8A 引数:1#$02 | 現HP変更 |
029F3D | JSL $02BE8A | SR: $02BE8A 引数:1#$08 | 現MP取得 |
029F42 | STA $00 | DP($00)=A | |
029F44 | JSL $02BE8A | SR: $02BE8A 引数:1#$0A | 現MP変更 |
029F49 | RTS | return |
コメント