ずいぶんさぼっていたのですが再開します。長さ的に少々短めでもエントリ頻度を増やすことにします。
- SR: $025D56 ターン中の素早さ決定
025D56 | PHP | Push P Flag | |
---|---|---|---|
025D57 | PHB | Push DB | |
025D58 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
025D5A | PEA #$7E7E | Push #$7E7E | |
025D5D | PLB | Pull DB | |
025D5E | PLB | Pull DB | |
025D5F | LDX #$0017 | X=#$0017 | 戦闘中参加キャラクターインデックス最大値 |
025D62 | LDY #$002E | Y=#$002E | ターン中の素早さ(テンポラリ)を保持するオフセット |
025D65 | JSL $C2CB2B | SR: $02CB2B 引数:1#$2050 引数:2#$0002 | 行動可能か? |
025D6D | BEQ #$29 | if(z==on) goto $025D98 | |
025D6F | STX $2428 | $2428=X | |
025D72 | JSL $C2BE8A | SR: $02BE8A 引数:1#$1C | 生死判定? |
025D77 | LDA #$0000 | A=#$0000 | |
025D7A | BCS #$1C | if(c==on) goto $025D98 | |
025D7C | JSL $C2CA5B | SR: $02CA5B 引数:1#$2043 | 素早さ取得 |
025D82 | CLC | c=off | |
025D83 | ADC #$0014 | A+=(#$0014+c) | |
025D86 | STA $00 | DP($00)=A | |
025D88 | JSL $C01457 | SR: $001457 | $00-FFの乱数発生 |
025D8C | PHX | Push X | |
025D8D | LDX #$0000 | X=#$0000 | |
025D90 | JSL $C010D6 | SR: $0010D6 | $00,X(3B)=A(1B)*$00,X(2Byte) |
025D94 | PLX | Pull X | |
025D95 | LDA $01 | A=DP($01) | |
025D97 | INC | A++ | |
025D98 | STA $2484,Y | $2484+Y=A | ターン中の素早さをセット |
025D9B | JSL $C2CA98 | SR: $02CA98 引数:1#$2045 | ターン中の素早さ値セット |
025DA1 | DEY | Y– | |
025DA2 | DEY | Y– | |
025DA3 | DEX | X– | |
025DA4 | BPL #$BF | if(n==off) goto $025D65 | |
025DA6 | JSR $5DAC | SR: $025DAC | ターン中の行動順序設定 |
025DA9 | PLB | Pull DB | |
025DAA | PLP | Pull P Flag | |
025DAB | RTL | return |
ターン中の素早さを作成する計算式は(現在の素早さ+20)*($00-FFの乱数)で、実際に使用されるのはその上位2バイトです。理論値で言うと$0000-0111までの値を取りうることになりますが、乱数の要素が大きいので素早さがMAX値近くにあっても必ず先に動けるとは限りません。乱数要素をなくすor減らせばターン中の行動順を制御しやすくなりますが、例えば素早さMAXのモンスターがいたらどうあがいても先手を打てない、ということになります。このあたりがターン制のDQではいかんともしがたいところです。
コメント