風来のシレンDS2 砂漠の魔城 (DS) > 確率

乱数

32-bit 疑似乱数生成器を用いており、その状態 x は次の式で更新されます: x ← (x × 0x5d588b65 + 1) mod 2^{32}
乱数 0〜(n-1) は (x / 2^{16}) × n / 2^{16} によって取得されます。

ソース

+ ...
;------------------------------------------
; 乱数 0〜(r1-1) の取得
;------------------------------------------
020B1FC8 E92D4038 push    r3-r5,r14
020B1FCC E1A04000 mov     r4,r0
020B1FD0 E28D0000 add     r0,r13,0h
020B1FD4 E1A05001 mov     r5,r1
020B1FD8 EBFFFFED bl      Lxx_20B1F94h
020B1FDC E59D0000 ldr     r0,[r13]
020B1FE0 E1A00800 mov     r0,r0,lsl 10h
020B1FE4 E1A01820 mov     r1,r0,lsr 10h
020B1FE8 E0000591 mul     r0,r1,r5
020B1FEC E1A01840 mov     r1,r0,asr 10h
020B1FF0 E1A00801 mov     r0,r1,lsl 10h
020B1FF4 E58D1000 str     r1,[r13]
020B1FF8 E1A00820 mov     r0,r0,lsr 10h
020B1FFC E5840000 str     r0,[r4]
020B2000 E8BD8038 pop     r3-r5,r15
 
;------------------------------------------
; 乱数更新
;------------------------------------------
020B1F94 E59F2024 ldr     r2,=Lxx_216359Ch
020B1F98 E59F1024 ldr     r1,=Lxx_5D588B65h
020B1F9C E5923000 ldr     r3,[r2]
020B1FA0 E0010193 mul     r1,r3,r1
020B1FA4 E2813001 add     r3,r1,1h
020B1FA8 E1A01823 mov     r1,r3,lsr 10h
020B1FAC E1A01801 mov     r1,r1,lsl 10h
020B1FB0 E5823000 str     r3,[r2]
020B1FB4 E1A01821 mov     r1,r1,lsr 10h
020B1FB8 E5801000 str     r1,[r0]
020B1FBC E12FFF1E bx      r14
020B1FC0 0216359C 
020B1FC4 5D588B65 
 

ダメージ計算式

シレンからモンスターへの攻撃

敵の防御力を S とするとき、ダメージ量 D は以下の式で計算されます。(補足: round(f) は f の小数第一位を四捨五入するものとします)
  • D := round(round((D_{S} × floor((乱数 87〜111) × 65536 / 100) / 65536) / 65536)
  • D_{n} := floor(D_{n-2^k} / 65536) × C_{2^k} (n ≥ 2 の場合) (ただし、k は 2^k ≤ n を満たす最大の整数とします)
  • D_{n} := (攻撃力) × 65536 (n < 2 の場合)
  • (攻撃力) := floor((シレンの基本攻撃力) × (8 + floor(剣の強さ/2) + ちから) / 16)

参考: (ダメージ量) ≈ round((攻撃力) × (15/16)^{floor(対象の防御力/2)} × (乱数 87〜111) / 100)

表記 固定小数点数換算
C_{2} 61440 0.9375
C_{4} 57600 0.878906
C_{8} 50625 0.772476
C_{16} 39107 0.596725
C_{32} 23336 0.356079
C_{64} 8309 0.126785
C_{128} 1053 0.0160675
C_{256} 17 0.000259399
C_{512} 0 0

参考: Python による処理の再現
import random
def damage(wp, st, lv, df):
    l = 0
    if lv >= 26:
        l = 54 + (lv - 26)
    elif lv >= 2:
        l = 6 + 2 * (lv - 2)
    elif lv >= 1:
        l = 5
    d = (wp//2 + st + 8) * l
    d = (d >> 4) << 16
    c = 0xf000
    df >>= 1
    while df > 0:
        if df & 1:
            d = ((d & 0xffff0000) * c) >> 16
        c = (c * c + 0x8000) >> 16
        df >>= 1
    r = random.randint(87, 111)
    t = (d * (r * 65536 // 100) + 0x8000) >> 16
    ret = (t + 0x8000) >> 16
    return max(1, min(999, ret))
 

モンスターからシレンへの攻撃

(基本的には)上記の式について、(防御力) := (盾の強さ)、(攻撃力) := (モンスターの攻撃力) として計算するようです。

シレンの基本攻撃力

Lv 上位\Lv 下位 0 1 2 3 4 5 6 7 8 9
0 0 5 6 8 10 12 14 16 18 20
10 22 24 26 28 30 32 34 36 38 40
20 42 44 46 48 50 52 54 55 56 57
30 58 59 60 61 62 63 64 65 66 67
40 68 69 70 71 72 73 74 75 76 77
50 78 79 80 81 82 83 84 85 86 87
60 88 89 90 91 92 93 94 95 96 97
70 98 99 100 101 102 103 104 105 106 107
80 108 109 110 111 112 113 114 115 116 117
90 118 119 120 121 122 123 124 125 126 127

モンスターデータ

ソース

+ ...
;-------------------------------------
; アイテムドロップ処理
;-------------------------------------
...
02332070 E28D002C add     r0,r13,2Ch
02332074 E3A01064 mov     r1,64h
02332078 E3A04000 mov     r4,0h
0233207C EBF5FFD1 bl      Lxx_20B1FC8h ; [r13,2Ch] ← 乱数 0〜99
...
 
...
0233237C E1D014B0 ldrh    r1,[r0,40h]  ; r1 ← (境界値)
02332380 E59D002C ldr     r0,[r13,2Ch] ; r0 ← (乱数値)
02332384 E1500001 cmp     r0,r1
02332388 AA000015 bge     Lxx_23323E4h
...
 
;-------------------------------------
; 特技使用確率
;-------------------------------------
...
0209E5D4 E28D0000 add     r0,r13,0h
0209E5D8 E3A01064 mov     r1,64h
0209E5DC EB004E79 bl      Lxx_20B1FC8h ; [r13,0h] ← 乱数 0〜99
...
 
...
0209E61C E1D052BE ldrh    r5,[r0,2Eh] ; r5 ← (境界値)
...
 
...
0209E6C0 E59D0000 ldr     r0,[r13]     ; r0 ← (乱数値)
0209E6C4 E1500005 cmp     r0,r5        ; 
0209E6C8 AA000022 bge     Lxx_209E758h 
...
 

アイテム出現率

ソース

+ ...
020B2174 E92D4FF0 push    r4-r11,r14
020B2178 E24DD00C sub     r13,r13,0Ch
020B217C E3A01028 mov     r1,28h
020B2180 E1A0A000 mov     r10,r0
020B2184 E2812E46 add     r2,r1,460h ; r2 ← 0x488
020B2188 E000019A mul     r0,r10,r1
020B218C E3A05000 mov     r5,0h
020B2190 E007029A mul     r7,r10,r2
020B2194 E58D0000 str     r0,[r13]
020B2198 E58D5004 str     r5,[r13,4h]
020B219C E59F01C8 ldr     r0,=Lxx_27C007Ch
020B21A0 E3A01013 mov     r1,13h
020B21A4 E5903000 ldr     r3,[r0]
020B21A8 E59D0000 ldr     r0,[r13]
020B21AC E0832000 add     r2,r3,r0
 
020B21B0 E0820081 add     r0,r2,r1,lsl 1h
020B21B4 E2800B07 add     r0,r0,1C00h
020B21B8 E1D00DBC ldrh    r0,[r0,0DCh]
020B21BC E3500000 cmp     r0,0h
020B21C0 0A000005 beq     Lxx_20B21DCh
020B21C4 E59D0000 ldr     r0,[r13]
020B21C8 E0800003 add     r0,r0,r3
020B21CC E0800081 add     r0,r0,r1,lsl 1h
020B21D0 E2800B07 add     r0,r0,1C00h
020B21D4 E1D05DBC ldrh    r5,[r0,0DCh]    ; r5 ← 重みの累積和
020B21D8 EA000001 b       Lxx_20B21E4h
 
020B21DC E2511001 subs    r1,r1,1h
020B21E0 5AFFFFF2 bpl     Lxx_20B21B0h
 
 
020B21E4 E28D0008 add     r0,r13,8h
020B21E8 E1A01005 mov     r1,r5
020B21EC EBFFFF75 bl      Lxx_20B1FC8h
020B21F0 E59F0174 ldr     r0,=Lxx_27C007Ch
020B21F4 E3A01000 mov     r1,0h
020B21F8 E5904000 ldr     r4,[r0]
020B21FC E59D0000 ldr     r0,[r13]
020B2200 E59D3008 ldr     r3,[r13,8h]   ; r3 ← 乱数 0〜(累積和-1)
020B2204 E1A08001 mov     r8,r1
020B2208 E0842000 add     r2,r4,r0
 
020B220C E0820088 add     r0,r2,r8,lsl 1h
020B2210 E2800B07 add     r0,r0,1C00h
020B2214 E1D00DBC ldrh    r0,[r0,0DCh]
020B2218 E3500000 cmp     r0,0h
020B221C 0A000004 beq     Lxx_20B2234h
020B2220 E1510003 cmp     r1,r3
020B2224 CA000001 bgt     Lxx_20B2230h
020B2228 E1530000 cmp     r3,r0
020B222C BA000003 blt     Lxx_20B2240h ; (1つ前の境界値) <= (乱数値) < (境界値) の場合
020B2230 E1A01000 mov     r1,r0
;
020B2234 E2888001 add     r8,r8,1h
020B2238 E3580014 cmp     r8,14h
020B223C BAFFFFF2 blt     Lxx_20B220Ch
 
 
020B2240 E3580014 cmp     r8,14h
020B2244 028DD00C addeq   r13,r13,0Ch
020B2248 03A000EB moveq   r0,0EBh
020B224C 08BD8FF0 popeq   r4-r11,r15
 
020B2250 E59F2118 ldr     r2,=Lxx_243h
020B2254 E59F1118 ldr     r1,=Lxx_21592E0h
020B2258 E0843007 add     r3,r4,r7
 
020B225C E0810202 add     r0,r1,r2,lsl 4h
020B2260 E5D0000A ldrb    r0,[r0,0Ah]
020B2264 E1580000 cmp     r8,r0
020B2268 1A000005 bne     Lxx_20B2284h
020B226C E0830082 add     r0,r3,r2,lsl 1h
020B2270 E2800C1D add     r0,r0,1D00h
020B2274 E1D005B4 ldrh    r0,[r0,54h]
020B2278 E3500000 cmp     r0,0h
020B227C 11A05000 movne   r5,r0
020B2280 1A000001 bne     Lxx_20B228Ch ; r5 ← 重みの累積和
 
020B2284 E2522001 subs    r2,r2,1h
020B2288 5AFFFFF3 bpl     Lxx_20B225Ch
 
020B228C E3A06000 mov     r6,0h
020B2290 E59F40DC ldr     r4,=Lxx_21592E0h
020B2294 E1A0B006 mov     r11,r6
020B2298 E28D0008 add     r0,r13,8h
020B229C E1A01005 mov     r1,r5
020B22A0 EBFFFF48 bl      Lxx_20B1FC8h ; 乱数 0〜(累積和-1)
020B22A4 E59F00C0 ldr     r0,=Lxx_27C007Ch
020B22A8 E59D1008 ldr     r1,[r13,8h]
020B22AC E5900000 ldr     r0,[r0]
020B22B0 E1A0200B mov     r2,r11
020B22B4 E0870000 add     r0,r7,r0
020B22B8 E1A0900B mov     r9,r11
020B22BC E0843209 add     r3,r4,r9,lsl 4h
020B22C0 E5D3300A ldrb    r3,[r3,0Ah]
020B22C4 E1580003 cmp     r8,r3
020B22C8 1A000009 bne     Lxx_20B22F4h
 
020B22CC E0803089 add     r3,r0,r9,lsl 1h
020B22D0 E2833C1D add     r3,r3,1D00h
020B22D4 E1D335B4 ldrh    r3,[r3,54h]
020B22D8 E3530000 cmp     r3,0h
020B22DC 0A000004 beq     Lxx_20B22F4h
020B22E0 E1520001 cmp     r2,r1
020B22E4 CA000001 bgt     Lxx_20B22F0h
020B22E8 E1510003 cmp     r1,r3
020B22EC BA000003 blt     Lxx_20B2300h ; (1つ前の境界値) <= (乱数値) < (境界値) の場合
020B22F0 E1A02003 mov     r2,r3
 
020B22F4 E2899001 add     r9,r9,1h
020B22F8 E3590F91 cmp     r9,244h
020B22FC BAFFFFEE blt     Lxx_20B22BCh
 
020B2300 E3590F91 cmp     r9,244h
020B2304 028DD00C addeq   r13,r13,0Ch
020B2308 03A000EB moveq   r0,0EBh
020B230C 08BD8FF0 popeq   r4-r11,r15
...
 

モンスター出現率

ソース

+ ...
020B2638 E92D4FF8 push    r3-r11,r14
020B263C E3A02FA6 mov     r2,298h
020B2640 E0090290 mul     r9,r0,r2
020B2644 E59F0118 ldr     r0,=Lxx_27C007Ch
020B2648 E3A060F4 mov     r6,0F4h
020B264C E5900000 ldr     r0,[r0]
020B2650 E1A0A001 mov     r10,r1
020B2654 E2861057 add     r1,r6,57h
020B2658 E0802009 add     r2,r0,r9
020B265C E3A07000 mov     r7,0h
020B2660 E0820081 add     r0,r2,r1,lsl 1h
020B2664 E2800C17 add     r0,r0,1700h
020B2668 E1D00ABC ldrh    r0,[r0,0ACh]
020B266C E3500000 cmp     r0,0h
020B2670 11A07000 movne   r7,r0           ; r7 ← (重みの累積和)
020B2674 1A000001 bne     Lxx_20B2680h
020B2678 E2511001 subs    r1,r1,1h
020B267C 5AFFFFF7 bpl     Lxx_20B2660h
 
 
020B2680 E3A08000 mov     r8,0h
020B2684 E59F40DC ldr     r4,=Lxx_216017Ch
020B2688 E28D5000 add     r5,r13,0h
020B268C E1A0B008 mov     r11,r8
020B2690 E1A00005 mov     r0,r5
020B2694 E1A01007 mov     r1,r7
020B2698 EBFFFE4A bl      Lxx_20B1FC8h
020B269C E59F00C0 ldr     r0,=Lxx_27C007Ch
020B26A0 E59D1000 ldr     r1,[r13]
020B26A4 E5900000 ldr     r0,[r0]
020B26A8 E1A0200B mov     r2,r11
020B26AC E0890000 add     r0,r9,r0
 
020B26B0 E0803082 add     r3,r0,r2,lsl 1h
020B26B4 E2833C17 add     r3,r3,1700h
020B26B8 E1D3CABC ldrh    r12,[r3,0ACh]
020B26BC E35C0000 cmp     r12,0h
020B26C0 0A000003 beq     Lxx_20B26D4h
020B26C4 E1A03802 mov     r3,r2,lsl 10h
020B26C8 E151000C cmp     r1,r12
020B26CC E1A06823 mov     r6,r3,lsr 10h
020B26D0 BA000002 blt     Lxx_20B26E0h  ; (乱数値) < (境界値) の場合
 
020B26D4 E2822001 add     r2,r2,1h
020B26D8 E3520F53 cmp     r2,14Ch
020B26DC BAFFFFF3 blt     Lxx_20B26B0h
...
 

ワナ出現率

ソース

+ ...
...
020B24C4 E5902000 ldr     r2,[r0]
020B24C8 E3A09000 mov     r9,0h
020B24CC E3A0101B mov     r1,1Bh
020B24D0 E0820081 add     r0,r2,r1,lsl 1h
020B24D4 E2800C2A add     r0,r0,2A00h
020B24D8 E1D00EBC ldrh    r0,[r0,0ECh]
020B24DC E3500000 cmp     r0,0h
020B24E0 11A09000 movne   r9,r0        ; r9 ← (重みの累積和)
020B24E4 1A000001 bne     Lxx_20B24F0h
 
020B24E8 E2511001 subs    r1,r1,1h
020B24EC 5AFFFFF7 bpl     Lxx_20B24D0h
 
 
020B24F0 E3A0A000 mov     r10,0h
020B24F4 E28D7000 add     r7,r13,0h
020B24F8 E1A0600A mov     r6,r10
020B24FC E1A00007 mov     r0,r7
020B2500 E1A01009 mov     r1,r9
020B2504 EBFFFEAF bl      Lxx_20B1FC8h ; 乱数 0〜(重みの累積和-1)
020B2508 E59F111C ldr     r1,=Lxx_27C007Ch
020B250C E59D0000 ldr     r0,[r13]
020B2510 E591C000 ldr     r12,[r1]
020B2514 E1A03006 mov     r3,r6
020B2518 E1A01006 mov     r1,r6
020B251C E08C2081 add     r2,r12,r1,lsl 1h
020B2520 E2822C2A add     r2,r2,2A00h
020B2524 E1D22EBC ldrh    r2,[r2,0ECh]
020B2528 E3520000 cmp     r2,0h
020B252C 0A000004 beq     Lxx_20B2544h
 
020B2530 E1530000 cmp     r3,r0
020B2534 CA000001 bgt     Lxx_20B2540h
 
020B2538 E1500002 cmp     r0,r2
020B253C BA000003 blt     Lxx_20B2550h ; (1つ前の境界値) <= (乱数値) < (境界値) の場合
 
020B2540 E1A03002 mov     r3,r2
020B2544 E2811001 add     r1,r1,1h
020B2548 E351001C cmp     r1,1Ch
020B254C BAFFFFF2 blt     Lxx_20B251Ch
...
 

ダンジョン設定値

ソース

+ ...
;----------------------------------------
; - r1 > r2 の場合: 乱数値 [r2, r1) を返す
; - r1 == r2 の場合: r1 を返す
; - r1 < r2 の場合: 乱数値 [r1, r2) を返す
;----------------------------------------
020B2004 E92D4070 push    r4-r6,r14
020B2008 E24DD008 sub     r13,r13,8h
020B200C E1A05001 mov     r5,r1
020B2010 E1A04002 mov     r4,r2
020B2014 E1550004 cmp     r5,r4
020B2018 E1A06000 mov     r6,r0
020B201C 028DD008 addeq   r13,r13,8h
020B2020 05865000 streq   r5,[r6]
020B2024 08BD8070 popeq   r4-r6,r15
 
020B2028 AA000007 bge     Lxx_20B204Ch
020B202C E28D0004 add     r0,r13,4h
020B2030 E0441005 sub     r1,r4,r5
020B2034 EBFFFFE3 bl      Lxx_20B1FC8h
020B2038 E59D0004 ldr     r0,[r13,4h]
020B203C E28DD008 add     r13,r13,8h
020B2040 E0800005 add     r0,r0,r5
020B2044 E5860000 str     r0,[r6]
020B2048 E8BD8070 pop     r4-r6,r15
 
020B204C E28D0000 add     r0,r13,0h
020B2050 E0451004 sub     r1,r5,r4
020B2054 EBFFFFDB bl      Lxx_20B1FC8h
020B2058 E59D0000 ldr     r0,[r13]
020B205C E0800004 add     r0,r0,r4
020B2060 E5860000 str     r0,[r6]
020B2064 E28DD008 add     r13,r13,8h
020B2068 E8BD8070 pop     r4-r6,r15
 
;----------------------------------------
; モンスター出現数
;----------------------------------------
...
020B1458 E5D21F50 ldrb    r1,[r2,0F50h]
020B145C E5D22F51 ldrb    r2,[r2,0F51h]
020B1460 EB0002E7 bl      Lxx_20B2004h
...
 
;----------------------------------------
; アイテム出現数
;----------------------------------------
...
020B0D00 E5D21F4C ldrb    r1,[r2,0F4Ch]
020B0D04 E5D22F4D ldrb    r2,[r2,0F4Dh]
020B0D08 EB0004BD bl      Lxx_20B2004h
...
 
;----------------------------------------
; ワナ出現数
;----------------------------------------
...
020B0F48 E5D21F4E ldrb    r1,[r2,0F4Eh]
020B0F4C E5D22F4F ldrb    r2,[r2,0F4Fh]
020B0F50 EB00042B bl      Lxx_20B2004h
...
 
 
;----------------------------------------
; 呪い確率
;----------------------------------------
...
0203368C E28D0000 add     r0,r13,0h
02033690 E3A01064 mov     r1,64h
02033694 EB01FA4B bl      Lxx_20B1FC8h ; 乱数 0〜99
02033698 E59F02E0 ldr     r0,=Lxx_27C007Ch
0203369C E59D1000 ldr     r1,[r13]
020336A0 E5900000 ldr     r0,[r0]
020336A4 E2800A05 add     r0,r0,5000h
020336A8 E5D00F5B ldrb    r0,[r0,0F5Bh] ; 境界値
020336AC E1510000 cmp     r1,r0
020336B0 AA000003 bge     Lxx_20336C4h
020336B4 E1D700B0 ldrh    r0,[r7]
020336B8 E3800004 orr     r0,r0,4h
020336BC E3C00B01 bic     r0,r0,400h
020336C0 E1C700B0 strh    r0,[r7]
 
; かさタヌキ 確率
 
020336C4 E28D0000 add     r0,r13,0h
020336C8 E3A01064 mov     r1,64h
020336CC EB01FA3D bl      Lxx_20B1FC8h ; 乱数 0〜99
020336D0 E59F02AC ldr     r0,=Lxx_27C006Ch
020336D4 E5900000 ldr     r0,[r0]
020336D8 E2800B03 add     r0,r0,0C00h
020336DC E1D00EB4 ldrh    r0,[r0,0E4h]
020336E0 E350002B cmp     r0,2Bh
020336E4 1350002C cmpne   r0,2Ch
020336E8 1350002D cmpne   r0,2Dh
020336EC 1350002E cmpne   r0,2Eh
020336F0 0A00001F beq     Lxx_2033774h
020336F4 E59F0284 ldr     r0,=Lxx_27C007Ch
020336F8 E59D1000 ldr     r1,[r13]
020336FC E5900000 ldr     r0,[r0]
02033700 E2800A05 add     r0,r0,5000h
02033704 E5D00F59 ldrb    r0,[r0,0F59h] ; 境界値
02033708 E1510000 cmp     r1,r0
0203370C B1D700B0 ldrhlt  r0,[r7]
02033710 E3A01064 mov     r1,64h
02033714 B3800020 orrlt   r0,r0,20h
02033718 B1C700B0 strhlt  r0,[r7]
 
; 祝福 確率
 
0203371C E28D0000 add     r0,r13,0h
02033720 EB01FA28 bl      Lxx_20B1FC8h ; 乱数 0〜99
02033724 E59F0254 ldr     r0,=Lxx_27C007Ch
02033728 E59D1000 ldr     r1,[r13]
0203372C E5900000 ldr     r0,[r0]
02033730 E2800A05 add     r0,r0,5000h
02033734 E5D00F5A ldrb    r0,[r0,0F5Ah]
02033738 E1510000 cmp     r1,r0
0203373C AA00000C bge     Lxx_2033774h
 
02033740 E3A00000 mov     r0,0h
02033744 EBFFE474 bl      Lxx_202C91Ch
02033748 E59F1238 ldr     r1,=Lxx_2151DC0h
0203374C E3A02001 mov     r2,1h
02033750 E7910100 ldr     r0,[r1,r0,lsl 2h]
02033754 E1100412 tst     r0,r2,lsl r4
02033758 0A000005 beq     Lxx_2033774h
 
0203375C E1D700B0 ldrh    r0,[r7]
02033760 E3800B01 orr     r0,r0,400h
02033764 E1C700B0 strh    r0,[r7]
02033768 E1D700B0 ldrh    r0,[r7]
0203376C E3C00004 bic     r0,r0,4h   ; 呪い状態 を解除する
02033770 E1C700B0 strh    r0,[r7]
...
 
; ゴールド範囲
 
020337E0 E1D215B2 ldrh    r1,[r2,52h]
020337E4 E1D225B4 ldrh    r2,[r2,54h]
020337E8 EB01FA05 bl      Lxx_20B2004h
...
 
;----------------------------------------
; 店確率
;----------------------------------------
...
020B3540 E5D10F40 ldrb    r0,[r1,0F40h]
020B3544 E5D11F58 ldrb    r1,[r1,0F58h]
020B3548 EB001FB1 bl      Lxx_20BB414h
...
 
;----------------------------------------
; 店設置(サブルーチン)
;----------------------------------------
020BB414 E92D4FF8 push    r3-r11,r14
020BB418 E24DD048 sub     r13,r13,48h
020BB41C E59F364C ldr     r3,=Lxx_27C006Ch
020BB420 E1A06000 mov     r6,r0
020BB424 E5933000 ldr     r3,[r3]
020BB428 E1A05001 mov     r5,r1
020BB42C E3A040FF mov     r4,0FFh
020BB430 E28D002C add     r0,r13,2Ch
020BB434 E3A01064 mov     r1,64h
020BB438 E58D2004 str     r2,[r13,4h]
020BB43C E5C34B2A strb    r4,[r3,0B2Ah]
020BB440 EBFFDAE0 bl      Lxx_20B1FC8h ; 乱数 0〜99
020BB444 E3560000 cmp     r6,0h
020BB448 028DD048 addeq   r13,r13,48h
020BB44C 08BD8FF8 popeq   r3-r11,r15
;
020BB450 E59D002C ldr     r0,[r13,2Ch]
020BB454 E1560000 cmp     r6,r0
020BB458 D28DD048 addle   r13,r13,48h
020BB45C D8BD8FF8 pople   r3-r11,r15  ; (境界値) <= (乱数値) の場合スキップ
 
 
020BB460 EBFDC5A7 bl      Lxx_202CB04h
020BB464 E3500000 cmp     r0,0h
020BB468 028DD048 addeq   r13,r13,48h
020BB46C 08BD8FF8 popeq   r3-r11,r15
 
020BB470 E28D002C add     r0,r13,2Ch
020BB474 E3A01064 mov     r1,64h
020BB478 EBFFDAD2 bl      Lxx_20B1FC8h ; 乱数 0〜99
020BB47C E59D002C ldr     r0,[r13,2Ch]
020BB480 E1500005 cmp     r0,r5
020BB484 AA00001B bge     Lxx_20BB4F8h
 
020BB488 E3A04000 mov     r4,0h
020BB48C E1A00004 mov     r0,r4
020BB490 EBFDC521 bl      Lxx_202C91Ch
020BB494 E59F15D8 ldr     r1,=Lxx_27C007Ch
020BB498 E59F25D8 ldr     r2,=Lxx_2151D00h
020BB49C E5916000 ldr     r6,[r1]
020BB4A0 E7922100 ldr     r2,[r2,r0,lsl 2h]
020BB4A4 E1A05004 mov     r5,r4
020BB4A8 E28D1034 add     r1,r13,34h
020BB4AC E3A03001 mov     r3,1h
020BB4B0 E0860085 add     r0,r6,r5,lsl 1h
020BB4B4 E2800C1D add     r0,r0,1D00h
020BB4B8 E1D000B4 ldrh    r0,[r0,4h]
020BB4BC E3500000 cmp     r0,0h
020BB4C0 0A000002 beq     Lxx_20BB4D0h
020BB4C4 E1120513 tst     r2,r3,lsl r5
020BB4C8 17C15004 strbne  r5,[r1,r4]
020BB4CC 12844001 addne   r4,r4,1h
020BB4D0 E2855001 add     r5,r5,1h
020BB4D4 E3550014 cmp     r5,14h
020BB4D8 BAFFFFF4 blt     Lxx_20BB4B0h
020BB4DC E28D002C add     r0,r13,2Ch
020BB4E0 E1A01004 mov     r1,r4
020BB4E4 EBFFDAB7 bl      Lxx_20B1FC8h
020BB4E8 E59D102C ldr     r1,[r13,2Ch]
020BB4EC E28D0034 add     r0,r13,34h
020BB4F0 E7D04001 ldrb    r4,[r0,r1]
020BB4F4 EA000000 b       Lxx_20BB4FCh
...
 
;----------------------------------------
; モンスターハウス確率
;----------------------------------------
...
020B354C E59D0000 ldr     r0,[r13]
020B3550 E3500000 cmp     r0,0h
020B3554 159F0080 ldrne   r0,=Lxx_3E7h
020B3558 1A000003 bne     Lxx_20B356Ch
020B355C E59F0070 ldr     r0,=Lxx_27C007Ch
020B3560 E5900000 ldr     r0,[r0]
020B3564 E2800A05 add     r0,r0,5000h
020B3568 E5D00F41 ldrb    r0,[r0,0F41h] ; r0 ← (設定値)
020B356C E1A00800 mov     r0,r0,lsl 10h
020B3570 E1A00840 mov     r0,r0,asr 10h
020B3574 EB002143 bl      Lxx_20BBA88h
...
 
;----------------------------------------
; サブルーチン
;----------------------------------------
020BBA88 E92D4FF8 push    r3-r11,r14
020BBA8C E24DD010 sub     r13,r13,10h
020BBA90 E59F11A0 ldr     r1,=Lxx_27C006Ch
020BBA94 E1A04000 mov     r4,r0
020BBA98 E5912000 ldr     r2,[r1]
020BBA9C E3A030FF mov     r3,0FFh
020BBAA0 E28D0008 add     r0,r13,8h
020BBAA4 E3A01064 mov     r1,64h
020BBAA8 E5C23B2B strb    r3,[r2,0B2Bh]
020BBAAC EBFFD945 bl      Lxx_20B1FC8h
020BBAB0 E59F0180 ldr     r0,=Lxx_27C006Ch
020BBAB4 E5902000 ldr     r2,[r0]
020BBAB8 E5D20CE8 ldrb    r0,[r2,0CE8h]
020BBABC E3500002 cmp     r0,2h
020BBAC0 1A000007 bne     Lxx_20BBAE4h
 
020BBAC4 E59F1170 ldr     r1,=Lxx_27C0074h
020BBAC8 E2820B03 add     r0,r2,0C00h
020BBACC E5911000 ldr     r1,[r1]
020BBAD0 E1D02EBC ldrh    r2,[r0,0ECh]
020BBAD4 E1D102BC ldrh    r0,[r1,2Ch]
020BBAD8 E1520000 cmp     r2,r0
020BBADC 028DD010 addeq   r13,r13,10h
020BBAE0 08BD8FF8 popeq   r3-r11,r15
 
020BBAE4 E3540000 cmp     r4,0h
020BBAE8 028DD010 addeq   r13,r13,10h
020BBAEC 08BD8FF8 popeq   r3-r11,r15
 
020BBAF0 E59D0008 ldr     r0,[r13,8h] 
020BBAF4 E1540000 cmp     r4,r0      
020BBAF8 D28DD010 addle   r13,r13,10h ; (境界値) >= (乱数値)
020BBAFC D8BD8FF8 pople   r3-r11,r15
...
 
最終更新:2024年06月30日 22:56