summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/global.inc3
-rw-r--r--arm9/modules/52/asm/module_52.s56
-rw-r--r--arm9/modules/52/src/module_52_c.c97
3 files changed, 97 insertions, 59 deletions
diff --git a/arm9/global.inc b/arm9/global.inc
index 40466824..f682a937 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8527,4 +8527,5 @@
.extern MOD52_021D7560
.extern MOD52_021D757C
.extern MOD52_021D7594
-.extern MOD52_021D75E8 \ No newline at end of file
+.extern MOD52_021D75E8
+.extern MOD52_021D7604 \ No newline at end of file
diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s
index f9363ba0..acb4b895 100644
--- a/arm9/modules/52/asm/module_52.s
+++ b/arm9/modules/52/asm/module_52.s
@@ -4,62 +4,6 @@
.balign 4, 0
-
- thumb_func_start MOD52_021D7604
-MOD52_021D7604: ; 0x021D7604
- push {r3, r4, r5, r6, r7, lr}
- add r5, r1, #0
- str r0, [sp]
- add r0, r5, #0
- add r6, r2, #0
- bl Sav2_SysInfo_get
- bl Sav2_SysInfo_InitFromSystem
- add r0, r5, #0
- bl Sav2_SysInfo_RTC_get
- bl Sav2_SysInfo_RTC_init
- add r0, r5, #0
- bl FUN_0202881C
- add r4, r0, #0
- bl MTRandom
- add r2, r0, #0
- add r0, r4, #0
- mov r1, #1
- bl FUN_02028788
- add r0, r5, #0
- bl FUN_0206007C
- add r0, r5, #0
- bl Sav2_PlayerData_GetProfileAddr
- add r4, r0, #0
- bl MTRandom
- add r7, r0, #0
- cmp r6, #0
- beq _021D7656
- add r0, r4, #0
- add r1, r7, #0
- bl PlayerProfile_SetTrainerID
-_021D7656:
- add r0, r4, #0
- bl PlayerProfile_GetTrainerGender
- add r1, r0, #0
- add r0, r7, #0
- mov r2, #0
- bl FUN_02053678
- add r1, r0, #0
- lsl r1, r1, #0x18
- add r0, r4, #0
- lsr r1, r1, #0x18
- bl PlayerProfile_SetAvatar
- add r0, r5, #0
- bl FUN_02024ECC
- ldr r1, [sp]
- ldr r2, _021D7684 ; =0x021D76F8
- mov r3, #0x76
- bl FUN_020250C4
- pop {r3, r4, r5, r6, r7, pc}
- .align 2, 0
-_021D7684: .word MOD52_021D76F8
- thumb_func_end MOD52_021D7604
-
thumb_func_start MOD52_021D7688
MOD52_021D7688: ; 0x021D7688
push {r3, lr}
diff --git a/arm9/modules/52/src/module_52_c.c b/arm9/modules/52/src/module_52_c.c
index d87eb0e6..cfd74a74 100644
--- a/arm9/modules/52/src/module_52_c.c
+++ b/arm9/modules/52/src/module_52_c.c
@@ -4,6 +4,9 @@
#include "overlay_manager.h"
#include "player_data.h"
#include "sav_system_info.h"
+#include "unk_020286F8.h"
+#include "math_util.h"
+
extern void FUN_0201681C(u32 param0, u32 heap_id, u32 param2);
extern int FUN_020168D0(u32 heap_id);
@@ -12,11 +15,18 @@ extern struct Unk21DBE18 UNK_020FD144;
extern struct Unk21DBE18 UNK_020F2B7C;
extern struct Unk21DBE18 UNK_020F2B8C;
-extern void MOD52_021D7604(u32 heap_id, struct SaveBlock2 *save, u32 param2);
+void MOD52_021D7604(u32 heap_id, struct SaveBlock2 *save, u32 param2);
extern void FUN_02015E3C(struct IGT *igt);
extern void MOD52_021D7688(u32 heap_id, struct SaveBlock2 *save);
+extern void FUN_0206007C(struct SaveBlock2 *save);
+extern int FUN_02053678(u32 random, u32 gender, u32 param2);
+extern void FUN_02024ECC(struct SaveBlock2 *save);
+extern void FUN_020250C4(struct SaveBlock2 *save, u32 heap_id, u32 **param2, u32 param3);
+
+extern u32 *MOD52_021D76F8;
+
THUMB_FUNC int MOD52_021D74E0()
{
FUN_0201681C(3, 0x4d, 2 << 16);
@@ -101,4 +111,87 @@ THUMB_FUNC int MOD52_021D75E8()
RegisterMainOverlay(-1, &UNK_020F2B8C);
return 1;
-} \ No newline at end of file
+}
+
+
+// thumb_func_start MOD52_021D7604
+// MOD52_021D7604: ; 0x021D7604
+// push {r3, r4, r5, r6, r7, lr}
+// add r5, r1, #0
+// str r0, [sp]
+// add r0, r5, #0
+// add r6, r2, #0
+// bl Sav2_SysInfo_get
+// bl Sav2_SysInfo_InitFromSystem
+// add r0, r5, #0
+// bl Sav2_SysInfo_RTC_get
+// bl Sav2_SysInfo_RTC_init
+// add r0, r5, #0
+// bl FUN_0202881C
+// add r4, r0, #0
+// bl MTRandom
+// add r2, r0, #0
+// add r0, r4, #0
+// mov r1, #1
+// bl FUN_02028788
+// add r0, r5, #0
+// bl FUN_0206007C
+// add r0, r5, #0
+// bl Sav2_PlayerData_GetProfileAddr
+// add r4, r0, #0
+// bl MTRandom
+// add r7, r0, #0
+// cmp r6, #0
+// beq _021D7656
+// add r0, r4, #0
+// add r1, r7, #0
+// bl PlayerProfile_SetTrainerID
+// _021D7656:
+// add r0, r4, #0
+// bl PlayerProfile_GetTrainerGender
+// add r1, r0, #0
+// add r0, r7, #0
+// mov r2, #0
+// bl FUN_02053678
+// add r1, r0, #0
+// lsl r1, r1, #0x18
+// add r0, r4, #0
+// lsr r1, r1, #0x18
+// bl PlayerProfile_SetAvatar
+// add r0, r5, #0
+// bl FUN_02024ECC
+// ldr r1, [sp]
+// ldr r2, _021D7684 ; =0x021D76F8
+// mov r3, #0x76
+// bl FUN_020250C4
+// pop {r3, r4, r5, r6, r7, pc}
+// .align 2, 0
+// _021D7684: .word MOD52_021D76F8
+// thumb_func_end MOD52_021D7604
+THUMB_FUNC void MOD52_021D7604(u32 heap_id, struct SaveBlock2 *save, u32 param2) {
+ Sav2_SysInfo_InitFromSystem(Sav2_SysInfo_get(save));
+ Sav2_SysInfo_RTC_init(Sav2_SysInfo_RTC_get(save));
+
+ struct UnkSaveStruct_020286F8 *unk_save = FUN_0202881C(save);
+ u32 rand = MTRandom();
+
+ FUN_02028788(unk_save, 1, rand);
+ FUN_0206007C(save);
+
+ struct PlayerData *player_data = Sav2_PlayerData_GetProfileAddr(save);
+ u32 rand2 = MTRandom();
+
+ if (param2 != 0) {
+ PlayerProfile_SetTrainerID(player_data, rand2);
+ }
+
+ u32 gender = PlayerProfile_GetTrainerGender(player_data);
+ u32 avatar = FUN_02053678(rand2, gender, 0);
+ avatar = avatar << 0x18;
+ avatar = avatar >> 0x18;
+
+ PlayerProfile_SetAvatar(player_data, avatar);
+
+ FUN_02024ECC(save);
+ FUN_020250C4(save, heap_id, &MOD52_021D76F8, 0x76);
+}