DQ3戦闘部分解説8

ずいぶんさぼっていたのですが再開します。長さ的に少々短めでもエントリ頻度を増やすことにします。

  • SR: $025D56 ターン中の素早さ決定
025D56PHPPush P Flag
025D57PHBPush DB
025D58REP #$30m=off(A/M:16b) x=off(X/Y:16b)
025D5APEA #$7E7EPush #$7E7E
025D5DPLBPull DB
025D5EPLBPull DB
025D5FLDX #$0017X=#$0017戦闘中参加キャラクターインデックス最大値
025D62LDY #$002EY=#$002Eターン中の素早さ(テンポラリ)を保持するオフセット
025D65JSL $C2CB2BSR: $02CB2B 引数:1#$2050 引数:2#$0002行動可能か?
025D6DBEQ #$29if(z==on) goto $025D98
025D6FSTX $2428$2428=X
025D72JSL $C2BE8ASR: $02BE8A 引数:1#$1C生死判定?
025D77LDA #$0000A=#$0000
025D7ABCS #$1Cif(c==on) goto $025D98
025D7CJSL $C2CA5BSR: $02CA5B 引数:1#$2043素早さ取得
025D82CLCc=off
025D83ADC #$0014A+=(#$0014+c)
025D86STA $00DP($00)=A
025D88JSL $C01457SR: $001457$00-FFの乱数発生
025D8CPHXPush X
025D8DLDX #$0000X=#$0000
025D90JSL $C010D6SR: $0010D6$00,X(3B)=A(1B)*$00,X(2Byte)
025D94PLXPull X
025D95LDA $01A=DP($01)
025D97INCA++
025D98STA $2484,Y$2484+Y=Aターン中の素早さをセット
025D9BJSL $C2CA98SR: $02CA98 引数:1#$2045ターン中の素早さ値セット
025DA1DEYY–
025DA2DEYY–
025DA3DEXX–
025DA4BPL #$BFif(n==off) goto $025D65
025DA6JSR $5DACSR: $025DACターン中の行動順序設定
025DA9PLBPull DB
025DAAPLPPull P Flag
025DABRTLreturn

ターン中の素早さを作成する計算式は(現在の素早さ+20)*($00-FFの乱数)で、実際に使用されるのはその上位2バイトです。理論値で言うと$0000-0111までの値を取りうることになりますが、乱数の要素が大きいので素早さがMAX値近くにあっても必ず先に動けるとは限りません。乱数要素をなくすor減らせばターン中の行動順を制御しやすくなりますが、例えば素早さMAXのモンスターがいたらどうあがいても先手を打てない、ということになります。このあたりがターン制のDQではいかんともしがたいところです。

コメント

タイトルとURLをコピーしました