DQ8 (PS2) > 確率

乱数

乱数生成器 1

内部状態 x は x ← (0x5851f42d4c957f2d × x + 1) mod 2^{64} によって更新されます。

乱数 0〜(n-1) を (floor(x / 2^{32}) mod 2^{31}) mod n によって取得します。
乱数 [0.0, 1.0) を (floor(x / 2^{32}) mod 2^{31}) / 2.0^{31} によって取得します。

乱数生成器 2

内部状態 x は x ← (0x5d588b65 × x + 1) mod 2^{32} によって更新されます。

乱数 [0.0, 1.0] を (x mod 1664525) / 1664524.0 によって取得します。

ソース

+ ...
;-------------------------------------------
; v0 ← 31-bit 乱数
;-------------------------------------------
138728:   f0ffbd27    addiu   sp,sp,-16
13872c:   3800023c    lui v0,0x38
138730:   0000b0ff    sd  s0,0(sp)
138734:   5158053c    lui a1,0x5851
138738:   2df4a534    ori a1,a1,0xf42d
13873c:   382c0500    dsll    a1,a1,0x10
138740:   954ca534    ori a1,a1,0x4c95
138744:   382c0500    dsll    a1,a1,0x10
138748:   2d7fa534    ori a1,a1,0x7f2d
13874c:   2041508c    lw  s0,16672(v0)
138750:   0800bfff    sd  ra,8(sp)
138754:   26f9040c    jal 0x13e498
138758:   a80004de    ld  a0,168(s0)
 
13875c:   ff7f043c    lui a0,0x7fff
138760:   ffff8434    ori a0,a0,0xffff
138764:   01004364    daddiu  v1,v0,1
138768:   0800bfdf    ld  ra,8(sp)
13876c:   3e100300    dsrl32  v0,v1,0x0
138770:   a80003fe    sd  v1,168(s0)
138774:   24104400    and v0,v0,a0
138778:   0000b0df    ld  s0,0(sp)
13877c:   3c100200    dsll32  v0,v0,0x0
138780:   3f100200    dsra32  v0,v0,0x0
138784:   0800e003    jr  ra
138788:   1000bd27    addiu   sp,sp,16
 
;-------------------------------------------
; $f0 ← 乱数 [0.0, 1.0]
;-------------------------------------------
32af30:   0000858c    lw  a1,0(a0)
32af34:   585d033c    lui v1,0x5d58
32af38:   658b6334    ori v1,v1,0x8b65
32af3c:   1900023c    lui v0,0x19
32af40:   0d664234    ori v0,v0,0x660d
32af44:   1818a300    mult    v1,a1,v1
32af48:   01006324    addiu   v1,v1,1
32af4c:   000083ac    sw  v1,0(a0)
32af50:   0000838c    lw  v1,0(a0)
32af54:   1b006200    divu    zero,v1,v0
  ...
32af60:   10100000    mfhi    v0
32af64:   04004004    bltz    v0,0x32af78
32af68:   42180200    srl v1,v0,0x1
 
32af6c:   00008244    mtc1    v0,$f0
32af70:   07000010    b   0x32af90
32af74:   60008046    cvt.s.w $f1,$f0
 
32af78:   01004230    andi    v0,v0,0x1
32af7c:   25186200    or  v1,v1,v0
32af80:   00008344    mtc1    v1,$f0
32af84:   00000000    nop
32af88:   60008046    cvt.s.w $f1,$f0
32af8c:   40080146    add.s   $f1,$f1,$f1
 
32af90:   1900023c    lui v0,0x19
32af94:   0c664234    ori v0,v0,0x660c
32af98:   00008244    mtc1    v0,$f0
32af9c:   00000000    nop
32afa0:   20008046    cvt.s.w $f0,$f0
32afa4:   03080046    div.s   $f0,$f1,$f0
  ...
32afb0:   0800e003    jr  ra
32afb4:   00000000    nop
 

ダメージ計算

条件 ダメージ
攻撃力 ≤ 守備力/2.0 の場合 乱数 [0.0, 1.0]
(攻撃力 - 守備力/2.0)/2.0 ≤ 攻撃力/16.0 の場合 乱数 [0.0, 攻撃力/16.0]
(それ以外の場合: D := (攻撃力 - 守備力/2.0)/2.0 とする) D + 乱数 [-D/16.0, D/16.0] + 乱数 [-1.0, 1.0]
参考:
  • メタル斬りは 0.000060 % ほどの確率でメタル系モンスターに 3 ダメージを与えます。

ソース

+ ...
;------------------------------------------
; ダメージ計算
;------------------------------------------
32ad00:   00088544    mtc1    a1,$f1
32ad04:   d0ffbd27    addiu   sp,sp,-48
32ad08:   00008644    mtc1    a2,$f0
32ad0c:   2000bfff    sd  ra,32(sp)
32ad10:   a0088046    cvt.s.w $f2,$f1
32ad14:   1000b07f    sq  s0,16(sp)
32ad18:   0040023c    lui v0,0x4000
32ad1c:   2d808000    move    s0,a0
32ad20:   20008046    cvt.s.w $f0,$f0
32ad24:   00088244    mtc1    v0,$f1
32ad28:   0000b4e7    swc1    $f20,0(sp)
32ad2c:   03000146    div.s   $f0,$f0,$f1
32ad30:   01100046    sub.s   $f0,$f2,$f0
32ad34:   03050146    div.s   $f20,$f0,$f1 ; $f20: (攻撃 - 守備/2)/2
32ad38:   00608044    mtc1    zero,$f12
  ...
32ad44:   36a00c46    c.le.s  $f20,$f12
32ad48:   09000045    bc1f    0x32ad70
32ad4c:   8041023c    lui v0,0x4180
 
; [0.0, 1.0]
 
32ad50:   0400998c    lw  t9,4(a0)
32ad54:   803f023c    lui v0,0x3f80
32ad58:   00688244    mtc1    v0,$f13
32ad5c:   1800398f    lw  t9,24(t9)
32ad60:   09f82003    jalr    t9
32ad64:   00000000    nop
32ad68:   22000010    b   0x32adf4
32ad6c:   00000000    nop
 
 
32ad70:   00088244    mtc1    v0,$f1
32ad74:   00000000    nop
32ad78:   43130146    div.s   $f13,$f2,$f1 ; $f13: 攻撃/16
  ...
32ad84:   36a00d46    c.le.s  $f20,$f13
32ad88:   07000045    bc1f    0x32ada8   ; (攻撃 - 守備/2)/2 > 攻撃/16
32ad8c:   07a00046    neg.s   $f0,$f20
 
; [0.0, (攻撃)/16]
 
32ad90:   0400998c    lw  t9,4(a0)
32ad94:   1800398f    lw  t9,24(t9)
32ad98:   09f82003    jalr    t9
32ad9c:   00000000    nop
32ada0:   14000010    b   0x32adf4
32ada4:   00000000    nop
 
; D + [-D/16, D/16] + [-1.0, 1.0]
 
32ada8:   0400998c    lw  t9,4(a0)
32adac:   03030146    div.s   $f12,$f0,$f1
32adb0:   00000000    nop
32adb4:   1800398f    lw  t9,24(t9)
32adb8:   43a30146    div.s   $f13,$f20,$f1
  ...
32adc4:   09f82003    jalr    t9
32adc8:   00000000    nop
32adcc:   0400198e    lw  t9,4(s0)
32add0:   80bf033c    lui v1,0xbf80
32add4:   803f023c    lui v0,0x3f80
32add8:   2d200002    move    a0,s0
32addc:   1800398f    lw  t9,24(t9)
32ade0:   00608344    mtc1    v1,$f12
32ade4:   00688244    mtc1    v0,$f13
32ade8:   09f82003    jalr    t9
32adec:   00a50046    add.s   $f20,$f20,$f0
 
32adf0:   00a00046    add.s   $f0,$f20,$f0
 
32adf4:   00088044    mtc1    zero,$f1
32adf8:   00000000    nop
32adfc:   34000146    c.lt.s  $f0,$f1
32ae00:   02000045    bc1f    0x32ae0c
32ae04:   00000000    nop
32ae08:   06080046    mov.s   $f0,$f1
 
32ae0c:   2000bfdf    ld  ra,32(sp)
32ae10:   0000b4c7    lwc1    $f20,0(sp)
32ae14:   1000b07b    lq  s0,16(sp)
32ae18:   0800e003    jr  ra
32ae1c:   3000bd27    addiu   sp,sp,48
 
;-----------------------------------------
; $f0 ← 乱数 [$f12, $f13]
;-----------------------------------------
2afe60:   e0ffbd27    addiu   sp,sp,-32
2afe64:   1000bfff    sd  ra,16(sp)
2afe68:   0400b5e7    swc1    $f21,4(sp)
2afe6c:   0000b4e7    swc1    $f20,0(sp)
2afe70:   0400998c    lw  t9,4(a0)
2afe74:   46650046    mov.s   $f21,$f12
2afe78:   1400398f    lw  t9,20(t9)
2afe7c:   09f82003    jalr    t9
2afe80:   066d0046    mov.s   $f20,$f13
 
2afe84:   41a01546    sub.s   $f1,$f20,$f21
2afe88:   1000bfdf    ld  ra,16(sp)
2afe8c:   02080046    mul.s   $f0,$f1,$f0
2afe90:   00a80046    add.s   $f0,$f21,$f0
2afe94:   0400b5c7    lwc1    $f21,4(sp)
2afe98:   0000b4c7    lwc1    $f20,0(sp)
2afe9c:   0800e003    jr  ra
2afea0:   2000bd27    addiu   sp,sp,32
 

行動順

行動順は、floor((すばやさ) × (乱数 50〜100)/100) の値の大小により決定されます。

同一の値をとったキャラクタ・モンスターの順番については、次のコードと同等の処理によりシャッフルされるようです。
from random import randint
from collections import defaultdict
 
def acting_order(agls):
    N = len(agls)
    pairs = sorted([(999 - min(999, agls[i]) * randint(50, 100) // 100, i) for i in range(N)])
    order  = [i for _, i in pairs]
    values = [v for v, _ in pairs]
 
    # シャッフル処理
    swapped = False
    for t in range(1, 36):
        for i in range(N - 1):
            if values[i] == values[i + 1] and randint(0, 255) < 128:
                order[i], order[i + 1] = order[i + 1], order[i]
                swapped = True
        if not swapped:
            break
    return order
 
if __name__ == "__main__":
    # すばやさ
    agls = [1, 3, 2]
 
    freq = defaultdict(int)
    for i in range(10000000):
        order = acting_order(agls)
        freq[tuple(order)] += 1
 
    for order, c in sorted(freq.items()):
        print(order, c)
 

シャッフル後の行動順の分布

注意:
  • 同一の値を取った組がちょうど 1 つであった場合での確率です。
  • 敵・味方を含め、死亡状態となっているものがいない状況を仮定しています。

2 人が同一の値を取った場合

行動順 確率
A, B 約 3/4
B, A 約 1/4

3 人が同一の値を取った場合

行動順 確率
A, B, C 約 3/8
上記以外 約 1/8

4 人が同一の値を取った場合

行動順 確率
A, B, C, D 約 31/192
上記以外 約 7/192

ソース

+ ...
...
2af2d4:   9a003786    lh  s7,154(s1)
2af2d8:   588c0d0c    jal 0x363160
2af2dc:   2d202002    move    a0,s1
 
2af2e0:   cae1040c    jal 0x138728
2af2e4:   2d804000    move    s0,v0       ; s0 ← 999
 
2af2e8:   33000424    li  a0,51
2af2ec:   64000324    li  v1,100
2af2f0:   1a004400    div zero,v0,a0
  ...
2af2fc:   10100000    mfhi    v0
2af300:   32004224    addiu   v0,v0,50    ; v0 ← 乱数 50〜100
2af304:   1810e202    mult    v0,s7,v0
2af308:   02006014    bnez    v1,0x2af314
2af30c:   1a004300    div zero,v0,v1
 
2af310:   cd010000    break   0x0,0x7
 
2af314:   12100000    mflo    v0          ; v0 ← (すばやさ) × (乱数 50〜100) / 100
2af318:   2a080202    slt at,s0,v0
2af31c:   03002010    beqz    at,0x2af32c
2af320:   00000000    nop
 
2af324:   04000010    b   0x2af338
2af328:   2d100002    move    v0,s0
 
2af32c:   02004104    bgez    v0,0x2af338
2af330:   00000000    nop
2af334:   2d100000    move    v0,zero
 
2af338:   23100202    subu    v0,s0,v0    ; v0 ← 999 - v0
...
 
; シャッフル処理
 
2af3b8:   b0050224    li  v0,1456
2af3bc:   2db80000    move    s7,zero
2af3c0:   63000010    b   0x2af550
2af3c4:   01001224    li  s2,1
 
2af3c8:   5b000010    b   0x2af538
2af3cc:   48049026    addiu   s0,s4,1096  ; 
 
; begin
 
2af3d0:   1c00038e    lw  v1,28(s0)
2af3d4:   58006010    beqz    v1,0x2af538
2af3d8:   00000000    nop
 
2af3dc:   03002016    bnez    s1,0x2af3ec
2af3e0:   00000000    nop
 
2af3e4:   54000010    b   0x2af538
2af3e8:   2d880002    move    s1,s0
 
 
2af3ec:   1c00228e    lw  v0,28(s1)
2af3f0:   7800428c    lw  v0,120(v0)
2af3f4:   05004018    blez    v0,0x2af40c
2af3f8:   2da80000    move    s5,zero
 
2af3fc:   7800628c    lw  v0,120(v1)
2af400:   0200401c    bgtz    v0,0x2af40c
2af404:   00000000    nop
 
2af408:   01001564    daddiu  s5,zero,1
 
 
2af40c:   1c00248e    lw  a0,28(s1)
2af410:   7800828c    lw  v0,120(a0)
2af414:   0e004018    blez    v0,0x2af450
2af418:   00000000    nop
 
2af41c:   1c00028e    lw  v0,28(s0)
2af420:   7800428c    lw  v0,120(v0)
2af424:   0a004018    blez    v0,0x2af450
2af428:   00000000    nop
 
2af42c:   988e0d0c    jal 0x363a60
2af430:   00000000    nop
2af434:   06004014    bnez    v0,0x2af450
2af438:   00000000    nop
 
2af43c:   988e0d0c    jal 0x363a60
2af440:   1c00048e    lw  a0,28(s0)
2af444:   02004010    beqz    v0,0x2af450
2af448:   00000000    nop
 
2af44c:   01001564    daddiu  s5,zero,1
2af450:   3800a016    bnez    s5,0x2af534
2af454:   00000000    nop
 
 
2af458:   1c00228e    lw  v0,28(s1)
2af45c:   7800428c    lw  v0,120(v0)
2af460:   0600401c    bgtz    v0,0x2af47c
2af464:   2da80000    move    s5,zero
 
2af468:   1c00028e    lw  v0,28(s0)
2af46c:   7800428c    lw  v0,120(v0)
2af470:   02004018    blez    v0,0x2af47c
2af474:   00000000    nop
 
2af478:   01001564    daddiu  s5,zero,1
 
 
2af47c:   1c00248e    lw  a0,28(s1)
2af480:   7800828c    lw  v0,120(a0)
2af484:   0e004018    blez    v0,0x2af4c0
2af488:   00000000    nop
 
2af48c:   1c00028e    lw  v0,28(s0)
2af490:   7800428c    lw  v0,120(v0)
2af494:   0a004018    blez    v0,0x2af4c0
2af498:   00000000    nop
 
2af49c:   988e0d0c    jal 0x363a60
2af4a0:   00000000    nop
2af4a4:   06004010    beqz    v0,0x2af4c0
2af4a8:   00000000    nop
 
2af4ac:   988e0d0c    jal 0x363a60
2af4b0:   1c00048e    lw  a0,28(s0)
2af4b4:   02004014    bnez    v0,0x2af4c0
2af4b8:   00000000    nop
 
2af4bc:   01001564    daddiu  s5,zero,1   ; s5 == 1: swap する
 
2af4c0:   06002396    lhu v1,6(s1)
2af4c4:   06000296    lhu v0,6(s0)
2af4c8:   0c006214    bne v1,v0,0x2af4fc 
2af4cc:   00000000    nop
 
; 行動順を決める値が同じ場合
 
2af4d0:   cae1040c    jal 0x138728
2af4d4:   00000000    nop
2af4d8:   04004104    bgez    v0,0x2af4ec
2af4dc:   ff004330    andi    v1,v0,0xff  ; v1 ← 乱数 0〜255
 
2af4e0:   03006010    beqz    v1,0x2af4f0
2af4e4:   80006128    slti    at,v1,128
2af4e8:   00ff6324    addiu   v1,v1,-256
 
2af4ec:   80006128    slti    at,v1,128
2af4f0:   02002010    beqz    at,0x2af4fc ; 乱数値 >= 128 の場合
2af4f4:   00000000    nop
2af4f8:   01001564    daddiu  s5,zero,1   ; s5 == 1: 順序を交換する
 
2af4fc:   0d00a012    beqz    s5,0x2af534
2af500:   00000000    nop
 
; 順序を交換する
 
2af504:   0800238e    lw  v1,8(s1)  
2af508:   02006010    beqz    v1,0x2af514
2af50c:   0c00028e    lw  v0,12(s0)
2af510:   0c0070ac    sw  s0,12(v1) 
 
2af514:   080003ae    sw  v1,8(s0)
2af518:   0c0011ae    sw  s1,12(s0)  
2af51c:   080030ae    sw  s0,8(s1) 
2af520:   02004010    beqz    v0,0x2af52c
2af524:   0c0022ae    sw  v0,12(s1)
 
2af528:   080051ac    sw  s1,8(v0)
 
2af52c:   2d802002    move    s0,s1 
2af530:   01001764    daddiu  s7,zero,1
 
2af534:   2d880002    move    s1,s0       ; 
2af538:   0c00108e    lw  s0,12(s0)       ;  
2af53c:   a4ff0016    bnez    s0,0x2af3d0
2af540:   00000000    nop
 
2af544:   0500e012    beqz    s7,0x2af55c ; 初回に順序交換が生じなかった場合、終了する
2af548:   00000000    nop
2af54c:   01005226    addiu   s2,s2,1
 
2af550:   2400422a    slti    v0,s2,36
2af554:   9cff4014    bnez    v0,0x2af3c8
2af558:   2d880000    move    s1,zero
 
...
 

すばやさ依存のみかわし率

すばやさ依存のみかわし率は以下の値を基準として線形補間されます。
すばやさ みかわし率
0 4.0/256.0
400 8.0/256.0
500 10.0/256.0
900 50.0/256.0
999 64.0/256.0

ソース

+ ...
;----------------------------------------
; すばやさ依存のみかわし率
;----------------------------------------
2a6e90:   07000010    b   0x2a6eb0
2a6e94:   2d180000    move    v1,zero
 
2a6e98:   21108200    addu    v0,a0,v0
2a6e9c:   00004294    lhu v0,0(v0)
2a6ea0:   2a10c200    slt v0,a2,v0
2a6ea4:   05004014    bnez    v0,0x2a6ebc
2a6ea8:   00000000    nop
2a6eac:   01006324    addiu   v1,v1,1
 
2a6eb0:   2a106500    slt v0,v1,a1
2a6eb4:   f8ff4014    bnez    v0,0x2a6e98
2a6eb8:   80100300    sll v0,v1,0x2
 
2a6ebc:   0f006014    bnez    v1,0x2a6efc
2a6ec0:   00000000    nop
...
 
2a6efc:   11006514    bne v1,a1,0x2a6f44
2a6f00:   80100300    sll v0,v1,0x2
 
; (すばやさ) >= 999
 
2a6f04:   80100500    sll v0,a1,0x2
2a6f08:   21104400    addu    v0,v0,a0
2a6f0c:   feff4294    lhu v0,-2(v0)
2a6f10:   04004004    bltz    v0,0x2a6f24
2a6f14:   42180200    srl v1,v0,0x1
2a6f18:   00008244    mtc1    v0,$f0
2a6f1c:   07000010    b   0x2a6f3c
2a6f20:   20008046    cvt.s.w $f0,$f0
...
 
2a6f3c:   1f000010    b   0x2a6fbc
2a6f40:   00000000    nop
 
; (すばやさ) < 999
 
2a6f44:   21104400    addu    v0,v0,a0
2a6f48:   fcff4594    lhu a1,-4(v0)
2a6f4c:   00004494    lhu a0,0(v0)
2a6f50:   feff4794    lhu a3,-2(v0)
2a6f54:   2318c500    subu    v1,a2,a1
2a6f58:   23208500    subu    a0,a0,a1
2a6f5c:   00088444    mtc1    a0,$f1
2a6f60:   02004294    lhu v0,2(v0)
2a6f64:   00008344    mtc1    v1,$f0
2a6f68:   00000000    nop
2a6f6c:   60088046    cvt.s.w $f1,$f1
2a6f70:   23104700    subu    v0,v0,a3
2a6f74:   20008046    cvt.s.w $f0,$f0
2a6f78:   43000146    div.s   $f1,$f0,$f1
2a6f7c:   00008244    mtc1    v0,$f0
2a6f80:   00000000    nop
2a6f84:   20008046    cvt.s.w $f0,$f0
2a6f88:   0400e004    bltz    a3,0x2a6f9c
2a6f8c:   42080046    mul.s   $f1,$f1,$f0
 
2a6f90:   00008744    mtc1    a3,$f0
2a6f94:   08000010    b   0x2a6fb8
2a6f98:   20008046    cvt.s.w $f0,$f0
...
 
2a6fb8:   00000146    add.s   $f0,$f0,$f1
 
2a6fbc:   0800e003    jr  ra
2a6fc0:   00000000    nop
 
8495e4:   00 00 04 00 
          64 00 05 00 
          C8 00 06 00 
          2C 01 07 00 
          90 01 08 00 
          F4 01 0A 00 
          58 02 14 00 
          BC 02 1E 00 
          20 03 28 00 
          84 03 32 00 
          E7 03 40 00
 

逃走成功率

回数 逃走 成功確率
1〜2 約 5/7.999
3 約 3/3.999
4〜 1

ソース

+ ...
...
2aa814:   4000828c    lw  v0,64(a0)
2aa818:   01004224    addiu   v0,v0,1
2aa81c:   400082ac    sw  v0,64(a0)
...
 
2aa900:   4000438e    lw  v1,64(s2)
2aa904:   03006128    slti    at,v1,3
2aa908:   13002010    beqz    at,0x2aa958
2aa90c:   03000224    li  v0,3
 
; 1〜2 回目
 
2aa910:   cae1040c    jal 0x138728
2aa914:   00000000    nop
2aa918:   00108244    mtc1    v0,$f2
2aa91c:   988480c7    lwc1    $f0,-31592(gp) ; 0x3b2988: 0x40fff7cf (7.999)
2aa920:   a0108046    cvt.s.w $f2,$f2
2aa924:   0030023c    lui v0,0x3000
2aa928:   00088244    mtc1    v0,$f1
2aa92c:   00000000    nop
2aa930:   42080246    mul.s   $f1,$f1,$f2
2aa934:   02000146    mul.s   $f0,$f0,$f1
2aa938:   24000046    trunc.w.s   $f0,$f0
2aa93c:   00000244    mfc1    v0,$f0
2aa940:   00000000    nop
2aa944:   05004128    slti    at,v0,5
2aa948:   19002010    beqz    at,0x2aa9b0
2aa94c:   2d204002    move    a0,s2
 
2aa950:   16000010    b   0x2aa9ac
2aa954:   01001064    daddiu  s0,zero,1
 
 
2aa958:   13006214    bne v1,v0,0x2aa9a8 ; 4〜 回目の場合 100 %
2aa95c:   00000000    nop
 
; 3 回目
 
2aa960:   cae1040c    jal 0x138728
2aa964:   00000000    nop
2aa968:   00108244    mtc1    v0,$f2
2aa96c:   9c8480c7    lwc1    $f0,-31588(gp) ; 0x3b298c: 0x407fef9e (3.999)
2aa970:   a0108046    cvt.s.w $f2,$f2
2aa974:   0030023c    lui v0,0x3000
2aa978:   00088244    mtc1    v0,$f1
2aa97c:   00000000    nop
2aa980:   42080246    mul.s   $f1,$f1,$f2
2aa984:   02000146    mul.s   $f0,$f0,$f1
2aa988:   24000046    trunc.w.s   $f0,$f0
2aa98c:   00000244    mfc1    v0,$f0
2aa990:   00000000    nop
2aa994:   03004128    slti    at,v0,3
2aa998:   04002010    beqz    at,0x2aa9ac
2aa99c:   00000000    nop
 
2aa9a0:   02000010    b   0x2aa9ac
2aa9a4:   01001064    daddiu  s0,zero,1
 
2aa9a8:   01001064    daddiu  s0,zero,1
 
 

先制攻撃・不意打ち

設定値 先制攻撃の確率 不意打ちの確率
0 約 1/31.999 約 1/33.0312 (≈ 30.999/31.999 × 1/31.999)
1 約 1/31.999 0
2 約 4/31.999 約 1/36.5704 (≈ 27.999/31.999 × 1/31.999)
3 約 4/31.999 約 1/9.1426 (≈ 27.999/31.999 × 4/31.999)

ソース

+ ...
;----------------------------------------------
; 先制攻撃・不意打ち
;----------------------------------------------
2fec80:   b0ffbd27    addiu   sp,sp,-80
2fec84:   4000bfff    sd  ra,64(sp)
2fec88:   3000b37f    sq  s3,48(sp)
2fec8c:   2000b27f    sq  s2,32(sp)
2fec90:   2d988000    move    s3,a0
2fec94:   1000b17f    sq  s1,16(sp)
2fec98:   2d90a000    move    s2,a1
2fec9c:   60700b0c    jal 0x2dc180
2feca0:   0000b07f    sq  s0,0(sp)
 
2feca4:   03004010    beqz    v0,0x2fecb4
2feca8:   00000000    nop
 
2fecac:   35000010    b   0x2fed84
2fecb0:   2d100000    move    v0,zero
 
2fecb4:   64f70a0c    jal 0x2bdd90
2fecb8:   00000000    nop
2fecbc:   2d804000    move    s0,v0
2fecc0:   24004290    lbu v0,36(v0)
2fecc4:   09004010    beqz    v0,0x2fecec
2fecc8:   2d200000    move    a0,zero
 
2feccc:   8c9c0a0c    jal 0x2a7230
2fecd0:   64000524    li  a1,100
2fecd4:   2800038e    lw  v1,40(s0)
2fecd8:   2a086200    slt at,v1,v0
2fecdc:   03002014    bnez    at,0x2fecec
2fece0:   00000000    nop
 
2fece4:   27000010    b   0x2fed84
2fece8:   24000282    lb  v0,36(s0)
 
2fecec:   1c00638e    lw  v1,28(s3)
2fecf0:   01001124    li  s1,1
2fecf4:   0400628e    lw  v0,4(s3)
2fecf8:   2d802002    move    s0,s1
2fecfc:   1000668e    lw  a2,16(s3)
2fed00:   2d202002    move    a0,s1
2fed04:   20000524    li  a1,32
2fed08:   80190300    sll v1,v1,0x6
2fed0c:   21104300    addu    v0,v0,v1
2fed10:   01004290    lbu v0,1(v0)
2fed14:   40100200    sll v0,v0,0x1
2fed18:   21104600    addu    v0,v0,a2
2fed1c:   10004390    lbu v1,16(v0)
2fed20:   11004290    lbu v0,17(v0)
2fed24:   18882302    mult    s1,s1,v1
2fed28:   8c9c0a0c    jal 0x2a7230
2fed2c:   18800272    mult1   s0,s0,v0
 
2fed30:   2a082202    slt at,s1,v0
2fed34:   03002014    bnez    at,0x2fed44
2fed38:   00000000    nop
2fed3c:   11000010    b   0x2fed84
2fed40:   01000224    li  v0,1
 
2fed44:   07004012    beqz    s2,0x2fed64
2fed48:   01000424    li  a0,1
 
2fed4c:   01001024    li  s0,1
2fed50:   04000524    li  a1,4
2fed54:   8c9c0a0c    jal 0x2a7230
2fed58:   2d200002    move    a0,s0
2fed5c:   04000010    b   0x2fed70
2fed60:   2a080202    slt at,s0,v0
 
2fed64:   8c9c0a0c    jal 0x2a7230
2fed68:   20000524    li  a1,32
2fed6c:   2a080202    slt at,s0,v0
 
2fed70:   03002014    bnez    at,0x2fed80
2fed74:   00000000    nop
2fed78:   02000010    b   0x2fed84
2fed7c:   02000224    li  v0,2
 
2fed80:   2d100000    move    v0,zero
 
2fed84:   4000bfdf    ld  ra,64(sp)
2fed88:   3000b37b    lq  s3,48(sp)
2fed8c:   2000b27b    lq  s2,32(sp)
2fed90:   1000b17b    lq  s1,16(sp)
2fed94:   0000b07b    lq  s0,0(sp)
2fed98:   0800e003    jr  ra
2fed9c:   5000bd27    addiu   sp,sp,80
 
;----------------------------------------------
; 乱数取得 [0, s0 - s1 + 0.999]
;----------------------------------------------
2a7230:   d0ffbd27    addiu   sp,sp,-48
2a7234:   2000bfff    sd  ra,32(sp)
2a7238:   1000b17f    sq  s1,16(sp)
2a723c:   0000b07f    sq  s0,0(sp)
2a7240:   2d888000    move    s1,a0      ; 1
2a7244:   2d80a000    move    s0,a1      ; 32
2a7248:   03003016    bne s1,s0,0x2a7258
2a724c:   2d102002    move    v0,s1
 
2a7250:   19000010    b   0x2a72b8
2a7254:   2000bfdf    ld  ra,32(sp)
 
2a7258:   cae1040c    jal 0x138728
2a725c:   00000000    nop
2a7260:   00088244    mtc1    v0,$f1
2a7264:   2a083002    slt at,s1,s0
2a7268:   60088046    cvt.s.w $f1,$f1
2a726c:   0030023c    lui v0,0x3000
2a7270:   00008244    mtc1    v0,$f0
2a7274:   03002010    beqz    at,0x2a7284
2a7278:   82000146    mul.s   $f2,$f0,$f1 ; $f2: 乱数 [0.0, 1.0)
 
2a727c:   03000010    b   0x2a728c
2a7280:   2d100002    move    v0,s0
 
2a7284:   2d102002    move    v0,s1
2a7288:   2d880002    move    s1,s0
 
2a728c:   23105100    subu    v0,v0,s1
2a7290:   00088244    mtc1    v0,$f1
2a7294:   d08480c7    lwc1    $f0,-31536(gp) ; 0x3b29c0: 0x3f7fbe77 (0.999)
2a7298:   60088046    cvt.s.w $f1,$f1
2a729c:   00000146    add.s   $f0,$f0,$f1    ; $f0: s1 - s0 + 0.999
2a72a0:   02000246    mul.s   $f0,$f0,$f2 
2a72a4:   24000046    trunc.w.s   $f0,$f0
2a72a8:   00000244    mfc1    v0,$f0
2a72ac:   00000000    nop
2a72b0:   21102202    addu    v0,s1,v0
2a72b4:   2000bfdf    ld  ra,32(sp)
 
2a72b8:   1000b17b    lq  s1,16(sp)
2a72bc:   0000b07b    lq  s0,0(sp)
2a72c0:   0800e003    jr  ra
2a72c4:   3000bd27    addiu   sp,sp,48
 
f71ab0:   01 01 
          01 00 
          04 01 
          04 04
 

装備 状態異常 命中率補正

注意: 命中率補正の分母は 256 ではなく 255 です。
ID アイテム名称 命中率補正 耐性 bits 対応する耐性
157 天使のローブ 128/255 0x000200 ザキ
216 黄金のティアラ 32/255 0x001b00 ラリホー, ザキ, マホトーン, メダパニ
220 竜神のかぶと 16/255 0x001b00 ラリホー, ザキ, マホトーン, メダパニ
221 太陽のかんむり 0/255 0x001100 ラリホー, メダパニ
222 メタルキングヘルム 64/255 0x001b00 ラリホー, ザキ, マホトーン, メダパニ
230 女神の指輪 84/255 0x201100 ラリホー, メダパニ, 麻痺
250 まよけの聖印 128/255 0x000200 ザキ

ソース

+ ...
;-----------------------------------------------
; 装備品 補正値
;-----------------------------------------------
269520:   e0ffbd27    addiu   sp,sp,-32
269524:   1000bfff    sd  ra,16(sp)
269528:   0000b07f    sq  s0,0(sp)
26952c:   0000a0ac    sw  zero,0(a1)
269530:   2d80a000    move    s0,a1
269534:   407c090c    jal 0x25f100
269538:   0c00a0ac    sw  zero,12(a1)
26953c:   6ca5090c    jal 0x2695b0
269540:   2d204000    move    a0,v0
269544:   03004014    bnez    v0,0x269554
269548:   00000000    nop
26954c:   13000010    b   0x26959c
269550:   2d100000    move    v0,zero
 
 
269554:   00004490    lbu a0,0(v0)
269558:   7f43033c    lui v1,0x437f     ; 255.0
26955c:   00008344    mtc1    v1,$f0
269560:   07008330    andi    v1,a0,0x7
269564:   000003ae    sw  v1,0(s0)
 
269568:   0400438c    lw  v1,4(v0)
26956c:   fc190300    dsll32  v1,v1,0x7
269570:   fe190300    dsrl32  v1,v1,0x7
269574:   0c0003ae    sw  v1,12(s0)
 
269578:   00004294    lhu v0,0(v0)
26957c:   3c1d0200    dsll32  v1,v0,0x14
269580:   fe1d0300    dsrl32  v1,v1,0x17
269584:   01000224    li  v0,1
269588:   040003ae    sw  v1,4(s0)
 
26958c:   040001c6    lwc1    $f1,4(s0)
269590:   60088046    cvt.s.w $f1,$f1
269594:   03080046    div.s   $f0,$f1,$f0
269598:   080000e6    swc1    $f0,8(s0)   ; 値 / 255.0
26959c:   1000bfdf    ld  ra,16(sp)
2695a0:   0000b07b    lq  s0,0(sp)
2695a4:   0800e003    jr  ra
2695a8:   2000bd27    addiu   sp,sp,32
 
2695ac:   00000000    nop
 
 
;-----------------------------------------------
; 状態異常 命中率
;-----------------------------------------------
...
31a8ac:   6c210d0c    jal 0x3485b0
31a8b0:   2d280002    move    a1,s0
31a8b4:   0e004004    bltz    v0,0x31a8f0
31a8b8:   2d204000    move    a0,v0
 
31a8bc:   48a5090c    jal 0x269520       ; 装備品 補正値
31a8c0:   8000a527    addiu   a1,sp,128
 
31a8c4:   8c00a58f    lw  a1,140(sp)
31a8c8:   bc220d0c    jal 0x348af0
31a8cc:   2d202002    move    a0,s1
 
31a8d0:   07004010    beqz    v0,0x31a8f0
31a8d4:   00000000    nop
 
31a8d8:   8000a38f    lw  v1,128(sp)
31a8dc:   03000224    li  v0,3
31a8e0:   03006214    bne v1,v0,0x31a8f0
31a8e4:   00000000    nop
 
31a8e8:   8800a0c7    lwc1    $f0,136(sp)
31a8ec:   02a50046    mul.s   $f20,$f20,$f0
 
31a8f0:   01001026    addiu   s0,s0,1
31a8f4:   0500022a    slti    v0,s0,5
31a8f8:   ecff4014    bnez    v0,0x31a8ac
31a8fc:   2d208002    move    a0,s4
 

ポルトリンクの野草

乱数値 アイテム 確率
0〜1 上どくけし草 2 %
2〜4 上やくそう 3 %
5〜19 まんげつ草 15 %
20〜54 どくけし草 35 %
55〜 やくそう 45 %
最終更新:2024年12月26日 20:18