summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/random.s36
-rw-r--r--common_syms/random.txt1
-rw-r--r--src/random.c18
-rw-r--r--sym_common.txt5
4 files changed, 22 insertions, 38 deletions
diff --git a/asm/random.s b/asm/random.s
deleted file mode 100644
index dcf706524..000000000
--- a/asm/random.s
+++ /dev/null
@@ -1,36 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start Random
-Random: @ 8044EC8
- ldr r2, _08044EDC @ =gUnknown_3005000
- ldr r1, [r2]
- ldr r0, _08044EE0 @ =0x41c64e6d
- muls r0, r1
- ldr r1, _08044EE4 @ =0x00006073
- adds r0, r1
- str r0, [r2]
- lsrs r0, 16
- bx lr
- .align 2, 0
-_08044EDC: .4byte gUnknown_3005000
-_08044EE0: .4byte 0x41c64e6d
-_08044EE4: .4byte 0x00006073
- thumb_func_end Random
-
- thumb_func_start SeedRng
-SeedRng: @ 8044EE8
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08044EF4 @ =gUnknown_3005000
- str r0, [r1]
- bx lr
- .align 2, 0
-_08044EF4: .4byte gUnknown_3005000
- thumb_func_end SeedRng
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/random.txt b/common_syms/random.txt
new file mode 100644
index 000000000..794439ea5
--- /dev/null
+++ b/common_syms/random.txt
@@ -0,0 +1 @@
+gRngValue
diff --git a/src/random.c b/src/random.c
new file mode 100644
index 000000000..54dae0824
--- /dev/null
+++ b/src/random.c
@@ -0,0 +1,18 @@
+#include "global.h"
+#include "random.h"
+
+// The number 1103515245 comes from the example implementation
+// of rand and srand in the ISO C standard.
+
+u32 gRngValue;
+
+u16 Random(void)
+{
+ gRngValue = 1103515245 * gRngValue + 24691;
+ return gRngValue >> 16;
+}
+
+void SeedRng(u16 seed)
+{
+ gRngValue = seed;
+}
diff --git a/sym_common.txt b/sym_common.txt
index db9a63d4f..869baeb9e 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -132,8 +132,9 @@ gUnknown_3004FF8: @ 3004FF8
gUnknown_3004FFC: @ 3004FFC
.space 0x4
-gUnknown_3005000: @ 3005000
- .space 0x4
+ .include "random.o"
+
+ .align 2
gUnknown_3005004: @ 3005004
.space 0x4