各コマンド入力の詳細部分の続きです。今回は「とくぎ」「じゅもん」の表面部分まで。

- SR:$0239D2 戦闘コマンド処理1人分_特技
| 0239D2 |
JSL $C5F503 |
SR: $05F503 |
戦闘中特技選択画面を表示するか(c=onしない) |
| 0239D6 |
BCS #$15 |
if(c==on) goto $0239ED |
|
| 0239D8 |
STZ $3AC4 |
$3AC4=#$00 |
|
| 0239DB |
STY $386E |
$386E=Y |
|
| 0239DE |
LDA #$00D7 |
A=#$00D7 |
|
| 0239E1 |
JSL $C37236 |
SR: $037236 |
ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 0239E5 |
BCS #$06 |
if(c==on) goto $0239ED |
|
| 0239E7 |
JSR $3A0A |
SR: $023A0A |
呪文特技対象選択処理 |
| 0239EA |
BVS #$F9 |
if(v==on) goto $0239E5 |
|
| 0239EC |
CLC |
c=off |
|
| 0239ED |
RTS |
return |
|
メインの処理自体は非常にシンプルで「習得している特技がなければメッセージを表示して終わり。習得していれば選択画面を出して対象選択処理をして終わり」というものです。ちなみに呪文も同じような構成です。
- SR:$05F503 戦闘中特技選択画面を表示するか(c=onしない)
| 05F503 |
PHP |
Push P Flag |
|
| 05F504 |
REP #$30 |
m=off(A/M:16b) x=off(X/Y:16b) |
|
| 05F506 |
PHA |
Push A |
|
| 05F507 |
PHX |
Push X |
|
| 05F508 |
PHY |
Push Y |
|
| 05F509 |
PHB |
Push DB |
|
| 05F50A |
LDX $386E |
X=$386E |
|
| 05F50D |
JSL $C45BD1 |
SR: $045BD1 引数:1#$02 引数:2#$FE 引数:3#$FF |
特技習得数取得 |
| 05F514 |
CMP #$0000 |
A==#$0000? |
|
| 05F517 |
BNE #$22 |
if(z==off) goto $05F53B |
|
| 05F519 |
LDA #$0061 |
A=#$0061 |
|
| 05F51C |
JSL $C37236 |
SR: $037236 |
ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 05F520 |
JSL $C02A16 |
SR: $002A16 引数:1#$01B6 |
戦闘メッセージ表示「せんとうちゅうの とくぎを おぼえていない!」 |
| 05F526 |
JSL $C31BD0 |
SR: $031BD0 |
キー入力を待つ(R,Y入力無視) |
| 05F52A |
LDA $38B0 |
A=$38B0 |
|
| 05F52D |
DEC |
A– |
|
| 05F52E |
JSL $C3B4F9 |
SR: $03B4F9 |
指定ページ以上の深さのバッファクリア |
| 05F532 |
PLB |
Pull DB |
|
| 05F533 |
REP #$30 |
m=off(A/M:16b) x=off(X/Y:16b) |
|
| 05F535 |
PLY |
Pull Y |
|
| 05F536 |
PLX |
Pull X |
|
| 05F537 |
PLA |
Pull A |
|
| 05F538 |
PLP |
Pull P Flag |
|
| 05F539 |
SEC |
c=on |
|
| 05F53A |
RTL |
return |
|
| 05F53B |
STA $3BB3 |
$3BB3=A |
|
| 05F53E |
PLB |
Pull DB |
|
| 05F53F |
REP #$30 |
m=off(A/M:16b) x=off(X/Y:16b) |
|
| 05F541 |
PLY |
Pull Y |
|
| 05F542 |
PLX |
Pull X |
|
| 05F543 |
PLA |
Pull A |
|
| 05F544 |
PLP |
Pull P Flag |
|
| 05F545 |
CLC |
c=off |
|
| 05F546 |
RTL |
return |
|
このSRについても特に解説することもなく特技習得数を取得して0でないかを調べているだけです。呪文もほぼ同じ構造です。セットしているウィンドウIDが違うだけ(呪文:#$D6、特技:#$D7)です。
- SR:$0239EE 戦闘コマンド処理1人分_呪文
| 0239EE |
JSL $C5F547 |
SR: $05F547 |
|
| 0239F2 |
BCS #$15 |
if(c==on) goto $023A09 |
|
| 0239F4 |
STZ $3AC4 |
$3AC4=#$00 |
|
| 0239F7 |
STY $386E |
$386E=Y |
|
| 0239FA |
LDA #$00D6 |
A=#$00D6 |
|
| 0239FD |
JSL $C37236 |
SR: $037236 |
|
| 023A01 |
BCS #$06 |
if(c==on) goto $023A09 |
|
| 023A03 |
JSR $3A0A |
SR: $023A0A |
呪文特技対象選択処理 |
| 023A06 |
BVS #$F9 |
if(v==on) goto $023A01 |
|
| 023A08 |
CLC |
c=off |
|
| 023A09 |
RTS |
return |
|
どちらも実行する特技・呪文を選択させた後、その対象を選択させるSR:$023A03 呪文特技対象選択処理をコールしているのですが、この中身が結構奥が深そうなのでちょっと中途半端ですが次回に回します。
コメント