summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-11 00:50:59 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-11 00:50:59 -0800
commitfdf832bec16cbdcb07afc4a62bb74314202fadf6 (patch)
tree4663ee320551b971e3eb40d6b1641262ed9d6198
parent7c4bc430c2997e80683612229cfa6b10d08cf512 (diff)
decompile random
-rw-r--r--asm/code_800B540.s2
-rw-r--r--asm/code_8272724.s56
-rw-r--r--asm/libc.s8
-rw-r--r--asm/random.s130
-rw-r--r--ld_script.txt2
-rw-r--r--src/random.c49
-rw-r--r--sym_ewram2.txt2
7 files changed, 84 insertions, 165 deletions
diff --git a/asm/code_800B540.s b/asm/code_800B540.s
index 017ac05..977da38 100644
--- a/asm/code_800B540.s
+++ b/asm/code_800B540.s
@@ -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
diff --git a/asm/code_8272724.s b/asm/code_8272724.s
index ff08ec2..fdf02b5 100644
--- a/asm/code_8272724.s
+++ b/asm/code_8272724.s
@@ -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.
diff --git a/asm/libc.s b/asm/libc.s
index 59d5db1..a361b80 100644
--- a/asm/libc.s
+++ b/asm/libc.s
@@ -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:
diff --git a/asm/random.s b/asm/random.s
deleted file mode 100644
index d09ba0a..0000000
--- a/asm/random.s
+++ /dev/null
@@ -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.
diff --git a/ld_script.txt b/ld_script.txt
index 3dc21ff..2f8b921 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -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);
diff --git a/src/random.c b/src/random.c
new file mode 100644
index 0000000..5db7394
--- /dev/null
+++ b/src/random.c
@@ -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();
+}
diff --git a/sym_ewram2.txt b/sym_ewram2.txt
index 41be4ef..2785f4e 100644
--- a/sym_ewram2.txt
+++ b/sym_ewram2.txt
@@ -82,7 +82,7 @@ gUnknown_203B074: @ 203B074
gUnknown_203B078: @ 203B078
.space 0x4
-gUnknown_203B07C: @ 203B07C
+gRngState: @ 203B07C
.space 0x4
gUnknown_203B080: @ 203B080