mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
decompile random
This commit is contained in:
parent
7c4bc430c2
commit
fdf832bec1
|
|
@ -13961,7 +13961,7 @@ _08011E0A:
|
|||
lsls r1, 3
|
||||
adds r0, r5, r1
|
||||
ldr r0, [r0]
|
||||
bl ReseedRng
|
||||
bl SetRngState
|
||||
b _08011E60
|
||||
.align 2, 0
|
||||
_08011E38: .4byte 0x00000414
|
||||
|
|
|
|||
|
|
@ -9,20 +9,20 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start _08272760
|
||||
_08272760:
|
||||
thumb_func_start sub_8272760
|
||||
sub_8272760:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, _08272770
|
||||
bl _08272774
|
||||
bl sub_8272774
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08272770: .4byte 0x02027370
|
||||
thumb_func_end _08272760
|
||||
thumb_func_end sub_8272760
|
||||
|
||||
thumb_func_start _08272774
|
||||
_08272774:
|
||||
thumb_func_start sub_8272774
|
||||
sub_8272774:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
|
|
@ -156,22 +156,22 @@ _08272860:
|
|||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end _08272774
|
||||
thumb_func_end sub_8272774
|
||||
|
||||
thumb_func_start _08272870
|
||||
_08272870:
|
||||
thumb_func_start sub_8272870
|
||||
sub_8272870:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, _08272880
|
||||
bl _08272884
|
||||
bl sub_8272884
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08272880: .4byte 0x02027370
|
||||
thumb_func_end _08272870
|
||||
thumb_func_end sub_8272870
|
||||
|
||||
thumb_func_start _08272884
|
||||
_08272884:
|
||||
thumb_func_start sub_8272884
|
||||
sub_8272884:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
|
|
@ -325,22 +325,22 @@ _08272994:
|
|||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end _08272884
|
||||
thumb_func_end sub_8272884
|
||||
|
||||
thumb_func_start _082729A4
|
||||
_082729A4:
|
||||
thumb_func_start sub_82729A4
|
||||
sub_82729A4:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, _082729B4
|
||||
bl _082729B8
|
||||
bl sub_82729B8
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_082729B4: .4byte 0x02027370
|
||||
thumb_func_end _082729A4
|
||||
thumb_func_end sub_82729A4
|
||||
|
||||
thumb_func_start _082729B8
|
||||
_082729B8:
|
||||
thumb_func_start sub_82729B8
|
||||
sub_82729B8:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
|
|
@ -440,22 +440,22 @@ _08272A5A:
|
|||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end _082729B8
|
||||
thumb_func_end sub_82729B8
|
||||
|
||||
thumb_func_start _08272A78
|
||||
_08272A78:
|
||||
thumb_func_start sub_8272A78
|
||||
sub_8272A78:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, _08272A88
|
||||
bl _08272A8C
|
||||
bl sub_8272A8C
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08272A88: .4byte 0x02027370
|
||||
thumb_func_end _08272A78
|
||||
thumb_func_end sub_8272A78
|
||||
|
||||
thumb_func_start _08272A8C
|
||||
_08272A8C:
|
||||
thumb_func_start sub_8272A8C
|
||||
sub_8272A8C:
|
||||
push {r4-r7,lr}
|
||||
lsls r2, r1, 3
|
||||
adds r2, r1
|
||||
|
|
@ -546,6 +546,6 @@ _08272B20:
|
|||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end _08272A8C
|
||||
thumb_func_end sub_8272A8C
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
|
|
|||
|
|
@ -2585,7 +2585,7 @@ _080B39E8:
|
|||
adds r2, r5, 0
|
||||
adds r1, r4, 0
|
||||
adds r3, r7, 0
|
||||
bl sub_80B3D3C
|
||||
bl _dtoa_r
|
||||
adds r7, r0, 0
|
||||
mov r1, r9
|
||||
cmp r1, 0x67
|
||||
|
|
@ -3034,8 +3034,8 @@ _080B3D30:
|
|||
pop {r4-r7,pc}
|
||||
thumb_func_end sub_80B3BE0
|
||||
|
||||
thumb_func_start sub_80B3D3C
|
||||
sub_80B3D3C:
|
||||
thumb_func_start _dtoa_r
|
||||
_dtoa_r:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
|
|
@ -4669,7 +4669,7 @@ _080B4A26:
|
|||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7,pc}
|
||||
thumb_func_end sub_80B3D3C
|
||||
thumb_func_end _dtoa_r
|
||||
|
||||
thumb_func_start sub_80B4A34
|
||||
sub_80B4A34:
|
||||
|
|
|
|||
130
asm/random.s
130
asm/random.s
|
|
@ -1,130 +0,0 @@
|
|||
.include "constants/gba_constants.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start SeedRng
|
||||
SeedRng:
|
||||
push {r4,lr}
|
||||
ldr r4, _08006170
|
||||
ldrb r2, [r0]
|
||||
ldrb r1, [r0, 0x1]
|
||||
muls r2, r1
|
||||
ldrb r3, [r0, 0x2]
|
||||
ldrb r1, [r0, 0x3]
|
||||
muls r1, r3
|
||||
ldr r3, _08006174
|
||||
adds r1, r3
|
||||
adds r2, r1
|
||||
ldrb r1, [r0, 0x4]
|
||||
ldrb r0, [r0, 0x5]
|
||||
muls r0, r1
|
||||
adds r2, r0
|
||||
str r2, [r4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08006170: .4byte gUnknown_203B07C
|
||||
_08006174: .4byte 0x0000d305
|
||||
thumb_func_end SeedRng
|
||||
|
||||
thumb_func_start Random16
|
||||
Random16:
|
||||
ldr r2, _08006188
|
||||
ldr r1, [r2]
|
||||
ldr r0, _0800618C
|
||||
muls r0, r1
|
||||
adds r0, 0x1
|
||||
str r0, [r2]
|
||||
asrs r0, 16
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08006188: .4byte gUnknown_203B07C
|
||||
_0800618C: .4byte 0x5d588b65
|
||||
thumb_func_end Random16
|
||||
|
||||
thumb_func_start Random
|
||||
Random:
|
||||
push {r4,lr}
|
||||
bl Random16
|
||||
adds r4, r0, 0
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
bl Random16
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
lsls r4, 16
|
||||
orrs r4, r0
|
||||
adds r0, r4, 0
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end Random
|
||||
|
||||
thumb_func_start RandomCapped
|
||||
RandomCapped:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl Random
|
||||
ldr r1, _080061C8
|
||||
ands r0, r1
|
||||
muls r0, r4
|
||||
asrs r0, 16
|
||||
ands r0, r1
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080061C8: .4byte 0x0000ffff
|
||||
thumb_func_end RandomCapped
|
||||
|
||||
thumb_func_start RandomRange
|
||||
RandomRange:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
cmp r5, r4
|
||||
beq _080061EC
|
||||
cmp r5, r4
|
||||
blt _080061E4
|
||||
subs r0, r5, r4
|
||||
bl RandomCapped
|
||||
adds r0, r4
|
||||
b _080061EC
|
||||
_080061E4:
|
||||
subs r0, r4, r5
|
||||
bl RandomCapped
|
||||
adds r0, r5
|
||||
_080061EC:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end RandomRange
|
||||
|
||||
thumb_func_start GetRngState
|
||||
GetRngState:
|
||||
ldr r0, _080061FC
|
||||
ldr r0, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080061FC: .4byte gUnknown_203B07C
|
||||
thumb_func_end GetRngState
|
||||
|
||||
thumb_func_start ReseedRng
|
||||
ReseedRng:
|
||||
push {r4,lr}
|
||||
ldr r4, _08006214
|
||||
str r0, [r4]
|
||||
bl Random
|
||||
str r0, [r4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08006214: .4byte gUnknown_203B07C
|
||||
thumb_func_end ReseedRng
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
|
@ -35,7 +35,7 @@ SECTIONS {
|
|||
{
|
||||
asm/crt0.o(.text);
|
||||
asm/code.o(.text);
|
||||
asm/random.o(.text);
|
||||
src/random.o(.text);
|
||||
asm/code_8006218.o(.text);
|
||||
src/main.o(.text);
|
||||
asm/code_800B540.o(.text);
|
||||
|
|
|
|||
49
src/random.c
Normal file
49
src/random.c
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#include "global.h"
|
||||
|
||||
extern s32 gRngState;
|
||||
|
||||
void SeedRng(u8 *seed)
|
||||
{
|
||||
gRngState = 54021 + (seed[0] * seed[1]) + (seed[2] * seed[3]) + (seed[4] * seed[5]);
|
||||
}
|
||||
|
||||
static s16 Random16(void)
|
||||
{
|
||||
gRngState = 1566083941 * gRngState + 1;
|
||||
return gRngState >> 16;
|
||||
}
|
||||
|
||||
s32 Random(void)
|
||||
{
|
||||
s32 r1 = Random16();
|
||||
s32 r2 = Random16();
|
||||
return (r1 << 16) | r2;
|
||||
}
|
||||
|
||||
// Returns a random number in the range [0, cap).
|
||||
s32 RandomCapped(s32 cap)
|
||||
{
|
||||
return (((Random() & 0xFFFF) * cap) >> 16) & 0xFFFF;
|
||||
}
|
||||
|
||||
s32 RandomRange(s32 a, s32 b)
|
||||
{
|
||||
if (a == b)
|
||||
return a;
|
||||
|
||||
if (a < b)
|
||||
return RandomCapped(b - a) + a;
|
||||
|
||||
return RandomCapped(a - b) + b;
|
||||
}
|
||||
|
||||
s32 GetRngState(void)
|
||||
{
|
||||
return gRngState;
|
||||
}
|
||||
|
||||
void SetRngState(s32 state)
|
||||
{
|
||||
gRngState = state;
|
||||
gRngState = Random();
|
||||
}
|
||||
|
|
@ -82,7 +82,7 @@ gUnknown_203B074: @ 203B074
|
|||
gUnknown_203B078: @ 203B078
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B07C: @ 203B07C
|
||||
gRngState: @ 203B07C
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B080: @ 203B080
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user