+ | ... |
;--------------------------------
; 乱数 0〜(a0-1) を返す
;--------------------------------
2728f8: f0ffbd27 addiu sp,sp,-16
2728fc: 0000b0ff sd s0,0(sp)
272900: 2d808000 move s0,a0
272904: 0800bfff sd ra,8(sp)
272908: 27ca090c jal 0x27289c
27290c: 2d20a000 move a0,a1
272910: 2d184000 move v1,v0
272914: 05000012 beqz s0,0x27292c
272918: 2d100000 move v0,zero
27291c: 1a007000 div zero,v1,s0
272920: 01000052 beqzl s0,0x272928
272924: cd010000 break 0x0,0x7
272928: 10100000 mfhi v0
27292c: 0000b0df ld s0,0(sp)
272930: 0800bfdf ld ra,8(sp)
272934: 0800e003 jr ra
272938: 1000bd27 addiu sp,sp,16
;--------------------------------
; v0 ← 乱数値 0〜65535
;--------------------------------
27289c: b0a3858f lw a1,-23632(gp)
2728a0: 585d023c lui v0,0x5d58
2728a4: 658b4234 ori v0,v0,0x8b65
2728a8: b4a3838f lw v1,-23628(gp)
2728ac: 1828a200 mult a1,a1,v0
2728b0: 2d408000 move t0,a0
2728b4: 01006324 addiu v1,v1,1
2728b8: d0076428 slti a0,v1,2000
2728bc: c0380300 sll a3,v1,0x3
2728c0: b4a383af sw v1,-23628(gp)
2728c4: 0100a524 addiu a1,a1,1
2728c8: 02340500 srl a2,a1,0x10
2728cc: b0a385af sw a1,-23632(gp)
2728d0: 07008010 beqz a0,0x2728f0
2728d4: 2d10c000 move v0,a2
2728d8: 6b00033c lui v1,0x6b
2728dc: 18d36324 addiu v1,v1,-11496
2728e0: 21206700 addu a0,v1,a3
2728e4: 2118e300 addu v1,a3,v1
2728e8: 000066ac sw a2,0(v1)
2728ec: 040088ac sw t0,4(a0)
2728f0: 0800e003 jr ra
2728f4: 00000000 nop
|
境界値 T の範囲 | 確率 |
---|---|
T ≤ 0 | 0 |
0 < T ≤ 601 | (66×T)/65536 |
601 < T < 999 | (65536-65×(999-T))/65536 |
999 ≤ T | 1 |
+ | ... |
;--------------------------------
; ポポロ勧誘率
;--------------------------------
...
20e404: 0b006012 beqz s3,0x20e434 ; 素手の場合 は飛ばす
20e408: 2d800000 move s0,zero ; s0 ← 0
20e40c: 38006286 lh v0,56(s3)
20e410: 02004014 bnez v0,0x20e41c
20e414: 2d184000 move v1,v0
20e418: 0c006386 lh v1,12(s3) ; 装備アイテム ID
20e41c: 40100300 sll v0,v1,0x1
20e420: 21104300 addu v0,v0,v1
20e424: 80100200 sll v0,v0,0x2
20e428: 8f00103c lui s0,0x8f
20e42c: 21800202 addu s0,s0,v0
20e430: b4371086 lh s0,14260(s0) ; s0 ← 装備 勧誘率補正
20e434: 0800228e lw v0,8(s1)
20e438: 2d204002 move a0,s2
20e43c: 2d280000 move a1,zero
20e440: 04004284 lh v0,4(v0) ; モンスター ID
20e444: 40100200 sll v0,v0,0x1
20e448: 8f00013c lui at,0x8f
20e44c: 21082200 addu at,at,v0
20e450: 20362284 lh v0,13856(at)
20e454: 18df080c jal 0x237c60
20e458: 21800202 addu s0,s0,v0 ; s0 += モンスター 勧誘率補正
20e45c: 40100200 sll v0,v0,0x1
20e460: 2d200000 move a0,zero
20e464: 8f00013c lui at,0x8f
20e468: 21082200 addu at,at,v0
20e46c: 98ef2284 lh v0,-4200(at)
20e470: 009180af sw zero,-28416(gp)
20e474: 9c74080c jal 0x21d270 ; v0 ← 乱数 0〜998
20e478: 21800202 addu s0,s0,v0 ; s0 += Lv 勧誘率補正
20e47c: 2a105000 slt v0,v0,s0
20e480: 03004050 beqzl v0,0x20e490 ; (乱数値) >= s0 の場合、仲間にならない
20e484: 2d100000 move v0,zero
20e488: 009191af sw s1,-28416(gp)
20e48c: 01000224 li v0,1
20e490: 0000b0df ld s0,0(sp)
20e494: 0800b1df ld s1,8(sp)
20e498: 1000b2df ld s2,16(sp)
20e49c: 1800b3df ld s3,24(sp)
20e4a0: 2000bfdf ld ra,32(sp)
20e4a4: 0800e003 jr ra
20e4a8: 3000bd27 addiu sp,sp,48
8f39a0: 40 (0x29)
8f39ac: 60 (0x2a)
8f39b8: 90 (0x2b)
8f39c4: -9999 (0x2c)
8f39d0: 128 (0x2d)
8eef98: 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00
08 00 09 00 0a 00 0b 00 0c 00 0d 00 0e 00 0f 00
10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00
18 00 19 00 1a 00 1b 00 1c 00 1d 00 1e 00 1f 00
20 00 21 00 22 00 23 00 24 00 25 00 26 00 27 00
28 00 29 00 2a 00 2b 00 2c 00 2d 00 2e 00 2f 00
30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00
38 00 39 00 3a 00 3b 00 3c 00 3d 00 3e 00 3f 00
40 00 41 00 42 00 43 00 44 00 45 00 46 00 47 00
48 00 49 00 4a 00 4b 00 4c 00 4d 00 4e 00 4f 00
50 00 51 00 52 00 53 00 54 00 55 00 56 00 57 00
58 00 59 00 5a 00 5b 00 5c 00 5d 00 5e 00 5f 00
60 00 61 00 62 00 63 00
8f3620: 00 00 64 00 32 00 01 00 64 00 64 00 0a 00 0a 00
64 00 32 00 64 00 32 00 1e 00 14 00 64 00 32 00
30 ff 32 00 1e 00 1e 00 fa 00 c8 00 01 00 00 00
05 00 01 00 91 00 1e 00 1e 00 32 00 32 00 64 00
64 00 14 00 14 00 64 00 32 00 94 ff 64 00 64 00
64 00 64 00 1e 00 05 00 01 00 64 00 32 00 32 00
28 00 14 00 0a 00 14 00 50 00 46 00 3c 00 32 00
14 00 32 00 28 00 1e 00 0a 00 0a 00 1e 00 1e 00
1e 00 01 00 01 00 64 00 96 00 01 00 14 00 4e ff
4e ff 00 00 00 00 64 00 64 00 64 00 32 00 1e 00
01 00 64 00 64 00 1e 00 64 00 46 00 28 00 64 00
32 00 64 00 05 00 64 00 64 00 64 00 32 00 0a 00
0a 00 64 00 32 00 64 00 64 00 64 00 64 00 64 00
28 00 64 00 32 00 14 00 64 00 94 ff 64 00 30 ff
01 00 32 00 64 00 64 00 32 00 64 00 64 00 64 00
14 00 14 00 1e 00 0f 00 0f 00 32 00 32 00 32 00
32 00 38 ff 28 00 28 00 94 ff 30 ff 01 00 01 00
00 00 00 00 00 00 00 00 64 00 46 00 46 00 58 ff
58 ff 58 ff 46 00 46 00 3c 00 01 00 01 00 01 00
28 00 28 00 64 00 64 00 64 00 64 00 0a 00 0a 00
64 00 64 00 64 00 30 ff 01 00 01 00 64 00 64 00
00 00 64 00 28 00 50 00 14 00 94 ff 30 ff 14 00
64 00 64 00 64 00 64 00 64 00 64 00 01 00 46 00
46 00 46 00 64 00 00 00 ce ff 05 00 05 00 05 00
05 00 05 00 05 00 05 00 05 00 00 00 00 00 00 00
;--------------------------------
; 乱数 0〜998 を返す
;--------------------------------
21d270: f0ffbd27 addiu sp,sp,-16
21d274: 2d288000 move a1,a0
21d278: 0000bfff sd ra,0(sp)
21d27c: e7030424 li a0,999
21d280: 0000bfdf ld ra,0(sp)
21d284: 3eca0908 j 0x2728f8
21d288: 1000bd27 addiu sp,sp,16
|
条件 | 等級 | アイテム | 確率(乱数の一様性を仮定した場合) |
---|---|---|---|
(乱数値) = 1999 | 特等 | ゴールドカード | 約 1/2000 |
1988 ≤ (乱数値) < 1999 | 1等 | 白紙の巻物 | 約 11/2000 |
1968 ≤ (乱数値) < 1988 | 2等 | メッキの巻物 | 約 20/2000 |
500 ≤ (乱数値) < 600 | 3等 | スカラの巻物 | 約 100/2000 |
850 ≤ (乱数値) < 1000 | 4等 | バイキルトの巻物 | 約 150/2000 |
0 ≤ (乱数値) < 450 | 5等 | (福引き券) | 約 450/2000 |
(その他) | はずれ | (なし) | 約 1268/2000 |
+ | ... |
;----------------------------------------
; 乱数 初期化
;----------------------------------------
2deef8: 0008a448 qmtc2 a0,$vf1
2deefc: 3e0c004a vrinit $R,$vf1x
2def00: 0800e003 jr ra
2def04: 00000000 nop
; 乱数 シード指定箇所
...
3328a8: 0b00043c lui a0,0xb
3328ac: be7b0b0c jal 0x2deef8
3328b0: 85ae8434 ori a0,a0,0xae85
; 乱数 シード指定箇所
...
200420: 5600043c lui a0,0x56
200424: be7b0b0c jal 0x2deef8
200428: db298434 ori a0,a0,0x29db
;----------------------------------------
; 乱数? 取得部分
;----------------------------------------
2def3c: 7f00083c lui t0,0x7f
2def40: ffff0835 ori t0,t0,0xffff
2def44: 3c04e14b vrnext.xyzw $vf1xyzw,$R
2def48: 00082248 qmfc2 v0,$vf1
2def4c: 0800e003 jr ra
2def50: 24104800 and v0,v0,t0
;----------------------------------------
; 福引き
;----------------------------------------
32a514: 3cf88324 addiu v1,a0,-1988
32a518: 01000624 li a2,1
32a51c: 0b00632c sltiu v1,v1,11
32a520: 50f88524 addiu a1,a0,-1968
32a524: 06000224 li v0,6
32a528: 1400a52c sltiu a1,a1,20
32a52c: 0b10c300 movn v0,a2,v1
32a530: 02000624 li a2,2
32a534: 0cfe8324 addiu v1,a0,-500
32a538: 0b10c500 movn v0,a2,a1
32a53c: 6400632c sltiu v1,v1,100
32a540: 03000624 li a2,3
32a544: aefc8524 addiu a1,a0,-850
32a548: 0b10c300 movn v0,a2,v1
32a54c: 9600a52c sltiu a1,a1,150
32a550: 04000324 li v1,4
32a554: 0b106500 movn v0,v1,a1
32a558: c201852c sltiu a1,a0,450
32a55c: cf070624 li a2,1999
32a560: 05000324 li v1,5
32a564: 26208600 xor a0,a0,a2
32a568: 0b106500 movn v0,v1,a1
32a56c: 0800e003 jr ra
32a570: 0a100400 movz v0,zero,a0
|
+ | ... |
221d84: c0ffbd27 addiu sp,sp,-64
221d88: 0000b0ff sd s0,0(sp)
221d8c: 0800b1ff sd s1,8(sp)
221d90: 3000bfff sd ra,48(sp)
221d94: 1000b2ff sd s2,16(sp)
221d98: 2d900000 move s2,zero
221d9c: 1800b3ff sd s3,24(sp)
221da0: ff009330 andi s3,a0,0xff
221da4: 2000b4ff sd s4,32(sp)
221da8: ff00d430 andi s4,a2,0xff
221dac: 2800b5ff sd s5,40(sp)
221db0: ff00b530 andi s5,a1,0xff
221db4: 9c74080c jal 0x21d270 ; v0 ← 乱数 0〜998
221db8: 2d200000 move a0,zero
221dbc: a072080c jal 0x21ca80
221dc0: 2d884000 move s1,v0
221dc4: 2d184000 move v1,v0
221dc8: 00006584 lh a1,0(v1)
221dcc: 0f00a010 beqz a1,0x221e0c
221dd0: 41001024 li s0,65
221dd4: 02006284 lh v0,2(v1) ; v0 ← (境界値)
221dd8: 06004014 bnez v0,0x221df4
221ddc: 2a205100 slt a0,v0,s1 ; a0 ← (境界値) < (乱数値)
...
221dec: f6ff0010 b 0x221dc8
221df0: 06006324 addiu v1,v1,6
...
221e00: f1ff8014 bnez a0,0x221dc8
221e04: 06006324 addiu v1,v1,6
...
|
+ | ... |
;
; 乱数 0〜997 を返す
;
L_0021D254:
addiu sp,-0x10
dmove a1,a0
sd ra,(sp)
li a0,0x3E6 ; a0 ← 998
ld ra,(sp)
j L_002728F8
addiu sp,0x10
;
; アイテム選択処理
;
L_00253968:
...
L_00253B7C:
jal L_0021D254 ; v0 ← 乱数 0〜997
dmove a0,zero
L_00253B84:
lw a3,(s5)
bltz a3,L_00253B9C
dmove a2,v0 ; a2 ← v0
dmove a0,s7
b L_00253BBC
dmove s3,s6
L_00253B9C:
lui v0,0x0040
and v0,a3,v0
beqz v0,L_00253BB4
lw a0,0x348(sp)
b L_00253BBC
dmove s3,fp
L_00253BB4:
lw a0,0x340(sp)
lw s3,0x344(sp)
L_00253BBC:
lh v0,(a0)
beqz v0,L_00253BD4
dmove s1,zero
slt v0,a2
beqzl v0,L_00253C0C ; (境界値) >= (乱数値)
xori v0,s1,0x000E
L_00253BD4:
addiu s1,0x1
L_00253BD8:
sll v0,s1,0x01
slti v1,s1,0x000E
beqz v1,L_00253C08
addu v0,a0
lh v0,(v0)
nop
beqz v0,L_00253BD4
slt v1,v0,a2 ; v1 ← (境界値) < (乱数値)
nop
nop
bnezl v1,L_00253BD8 ; (境界値) >= (乱数値) となるまでループする
addiu s1,0x1
L_00253C08:
xori v0,s1,0x000E
L_00253C0C:
li v1,0xC
sltiu a1,v0,0x0001
bne s1,v1,L_00253C3C
li a2,0x1
lui v0,0x0065
lui v1,0x0020
lhu a0,-0x2EC4(v0)
and v1,a3,v1
lhu v0,0x8(s5)
movn a1,a2,v1
xor v0,a0
movz a1,a2,v0
L_00253C3C:
beqz a1,L_00253C6C
li a1,0x122
...
b L_00253E10
addiu s4,0x1
L_00253C6C:
dmove a0,zero
jal L_0021D254 ; v0 ← 乱数値 0〜997
dmove s0,zero
dmove a1,zero
dmove a2,v0
dmove v1,s3
L_00253C84:
lh a0,(v1)
beqz a0,L_00253CB0
addiu v1,0x2
lui v0,0x0090
addu v0,a1
lh v0,0x4614(v0)
bnel v0,s1,L_00253CB4
addiu s0,0x1
slt v0,a0,a2 ; v0 ← (境界値) < (乱数値)
beqz v0,L_00253CC4 ; (境界値) >= (乱数値) となるまでループ
li v0,0x172
L_00253CB0:
addiu s0,0x1
L_00253CB4:
slti v0,s0,0x0172
bnez v0,L_00253C84
addiu a1,0x18
li v0,0x172
L_00253CC4:
bne s0,v0,L_00253CF4
addiu s3,sp,0x100
...
|