summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s197
-rw-r--r--arm9/modules/59/include/mod59_021D74E0.h16
-rw-r--r--arm9/modules/59/src/mod59_021D74E0_src.c155
-rw-r--r--arm9/src/player_data.c2
-rw-r--r--include/player_data.h2
5 files changed, 166 insertions, 206 deletions
diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s
index a48cd966..627f31bf 100644
--- a/arm9/modules/59/asm/mod59_021D74E0_asm.s
+++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s
@@ -3,203 +3,6 @@
.section .text
.balign 4, 0
- thumb_func_start MOD59_021D7564
-MOD59_021D7564: ; 0x021D7564
- push {r3, r4, r5, r6, lr}
- sub sp, #0xc
- add r5, r1, #0
- bl OverlayManager_GetData
- ldr r1, [r5]
- add r4, r0, #0
- mov r6, #0
- cmp r1, #5
- bls _021D757A
- b _021D76AC
-_021D757A:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_021D7586: ; jump table
- .short _021D7592 - _021D7586 - 2 ; case 0
- .short _021D75FA - _021D7586 - 2 ; case 1
- .short _021D7642 - _021D7586 - 2 ; case 2
- .short _021D7668 - _021D7586 - 2 ; case 3
- .short _021D7690 - _021D7586 - 2 ; case 4
- .short _021D76AA - _021D7586 - 2 ; case 5
-_021D7592:
- add r0, r6, #0
- add r1, r6, #0
- bl FUN_0200E3A0
- mov r0, #1
- add r1, r6, #0
- bl FUN_0200E3A0
- add r0, r6, #0
- add r1, r0, #0
- bl Main_SetVBlankIntrCB
- add r0, r6, #0
- add r1, r0, #0
- bl FUN_02015F34
- bl GX_DisableEngineALayers
- bl GX_DisableEngineBLayers
- mov r2, #1
- lsl r2, r2, #0x1a
- ldr r1, [r2]
- ldr r0, _021D76B4 ; =0xFFFFE0FF
- and r1, r0
- str r1, [r2]
- ldr r2, _021D76B8 ; =0x04001000
- ldr r1, [r2]
- and r0, r1
- str r0, [r2]
- mov r0, #4
- mov r1, #8
- bl SetKeyRepeatTimers
- add r0, r4, #0
- bl MOD59_021D778C
- add r0, r4, #0
- bl MOD59_021D79F8
- add r0, r4, #0
- bl MOD59_021D7A4C
- ldr r0, _021D76BC ; =MOD59_021D7724
- add r1, r4, #0
- bl Main_SetVBlankIntrCB
- bl GX_BothDispOn
- mov r0, #1
- str r0, [r5]
- b _021D76AC
-_021D75FA:
- bl MOD59_021D8920
- cmp r0, #1
- bne _021D761E
- mov r0, #6
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- ldr r0, [r4]
- str r0, [sp, #8]
- add r0, r6, #0
- add r1, r0, #0
- add r2, r0, #0
- add r3, r0, #0
- bl FUN_0200E1D0
- mov r0, #2
- str r0, [r5]
-_021D761E:
- ldr r0, [r4, #0x14]
- cmp r0, #0
- beq _021D76AC
- mov r0, #6
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- ldr r0, [r4]
- str r0, [sp, #8]
- mov r0, #0
- add r1, r0, #0
- add r2, r0, #0
- add r3, r0, #0
- bl FUN_0200E1D0
- mov r0, #3
- str r0, [r5]
- b _021D76AC
-_021D7642:
- bl FUN_0200E308
- cmp r0, #1
- bne _021D76AC
- add r0, r4, #0
- bl MOD59_021D7A34
- add r0, r4, #0
- bl MOD59_021D796C
- add r0, r4, #0
- bl MOD59_021D7A5C
- add r0, r6, #0
- add r1, r0, #0
- bl Main_SetVBlankIntrCB
- mov r6, #1
- b _021D76AC
-_021D7668:
- bl FUN_0200E308
- cmp r0, #1
- bne _021D76AC
- add r0, r4, #0
- bl MOD59_021D7A34
- add r0, r4, #0
- bl MOD59_021D796C
- add r0, r4, #0
- bl MOD59_021D7A5C
- add r0, r6, #0
- add r1, r0, #0
- bl Main_SetVBlankIntrCB
- mov r0, #4
- str r0, [r5]
- b _021D76AC
-_021D7690:
- ldr r0, [r4, #0x14]
- bl OverlayManager_Run
- cmp r0, #1
- bne _021D76AC
- ldr r0, [r4, #0x14]
- bl OverlayManager_delete
- add r0, r6, #0
- str r0, [r4, #0x14]
- mov r0, #5
- str r0, [r5]
- b _021D76AC
-_021D76AA:
- str r6, [r5]
-_021D76AC:
- add r0, r6, #0
- add sp, #0xc
- pop {r3, r4, r5, r6, pc}
- nop
-_021D76B4: .word 0xFFFFE0FF
-_021D76B8: .word 0x04001000
-_021D76BC: .word MOD59_021D7724
- thumb_func_end MOD59_021D7564
-
- thumb_func_start MOD59_021D76C0
-MOD59_021D76C0: ; 0x021D76C0
- push {r4, r5, r6, lr}
- add r6, r0, #0
- bl OverlayManager_GetData
- add r4, r0, #0
- ldr r0, [r4, #4]
- ldr r5, [r4]
- bl Sav2_PlayerData_GetProfileAddr
- ldr r1, [r4, #0x70]
- ldr r1, [r1, #0x18]
- bl PlayerName_StringToFlat
- ldr r0, [r4, #4]
- bl Sav2_PlayerData_GetProfileAddr
- ldr r1, [r4, #0x70]
- ldr r1, [r1, #4]
- bl PlayerProfile_SetTrainerGender
- ldr r0, [r4, #4]
- bl FUN_02024EB4
- ldr r1, [r4, #0x74]
- ldr r1, [r1, #0x18]
- bl RivalsNameToU16Array
- ldr r0, [r4, #0x70]
- bl FUN_02077AC4
- ldr r0, [r4, #0x74]
- bl FUN_02077AC4
- add r0, r6, #0
- bl OverlayManager_FreeData
- add r0, r5, #0
- bl DestroyHeap
- ldr r0, _021D771C ; =SDK_OVERLAY_MODULE_52_ID
- ldr r1, _021D7720 ; =MOD52_021D76D8
- bl RegisterMainOverlay
- mov r0, #1
- pop {r4, r5, r6, pc}
- nop
-_021D771C: .word SDK_OVERLAY_MODULE_52_ID
-_021D7720: .word MOD52_021D76D8
- thumb_func_end MOD59_021D76C0
-
thumb_func_start MOD59_021D7724
MOD59_021D7724: ; 0x021D7724
ldr r3, _021D772C ; =FUN_0201AB60
diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h
index 9342913d..a33e34fc 100644
--- a/arm9/modules/59/include/mod59_021D74E0.h
+++ b/arm9/modules/59/include/mod59_021D74E0.h
@@ -6,6 +6,14 @@
#include "save_block_2.h"
#include "main.h"
+struct MOD59_UnkPlayerStruct
+{
+ u8 padding[0x4];
+ u32 gender;
+ u8 padding2[0x10];
+ struct String *name;
+};
+
typedef struct MOD59_OverlayData
{
u32 heap_id;
@@ -13,10 +21,10 @@ typedef struct MOD59_OverlayData
struct Options *options;
u32 Unk0C;
u32 Unk10;
- u32 Unk14;
+ struct UnkStruct_02006234 *Unk14;
u8 padding[0x58];
- u32 Unk70;
- u32 Unk74;
+ struct MOD59_UnkPlayerStruct *playerStruct;
+ struct MOD59_UnkPlayerStruct *rivalStruct;
u8 padding2[0x10];
u8 Unk88;
u8 Unk89;
@@ -28,5 +36,7 @@ typedef struct MOD59_OverlayData
} MOD59_OverlayData;
BOOL MOD59_Init(struct UnkStruct_02006234 *param0);
+BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1);
+BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0);
#endif //POKEDIAMOND_MOD59_021D74E0_H
diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c
index be8dac20..34912948 100644
--- a/arm9/modules/59/src/mod59_021D74E0_src.c
+++ b/arm9/modules/59/src/mod59_021D74E0_src.c
@@ -3,9 +3,30 @@
#include "overlay_manager.h"
#include "mod59_021D74E0.h"
#include "heap.h"
+#include "game_init.h"
+#include "GX_layers.h"
+#include "unk_02024E64.h"
+#include "module_52.h"
+extern void *FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);
-extern u32 FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);
+extern void FUN_0200E3A0(PMLCDTarget, int);
+
+extern void MOD59_021D778C(MOD59_OverlayData *data);
+extern void MOD59_021D79F8(MOD59_OverlayData *data);
+extern void MOD59_021D7A34(MOD59_OverlayData *data);
+extern void MOD59_021D796C(MOD59_OverlayData *data);
+extern void MOD59_021D7A4C(MOD59_OverlayData *data);
+extern void MOD59_021D7A5C(MOD59_OverlayData *data);
+extern void MOD59_021D7724(void *data);
+extern u32 MOD59_021D8920(MOD59_OverlayData *data);
+
+extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id);
+extern u32 FUN_0200E308(void);
+
+extern void FUN_02077AC4(void *param0);
+
+FS_EXTERN_OVERLAY(MODULE_52);
THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
{
@@ -18,9 +39,10 @@ THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
int *field18 = OverlayManager_GetField18(param0);
data->sav2 = (struct SaveBlock2 *)field18[2]; //?
data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2);
- data->Unk14 = data->Unk10 = data->Unk0C = 0;
- data->Unk70 = FUN_02077A84(0x52, 0, 0, 7, data->options);
- data->Unk74 = FUN_02077A84(0x52, 3, 0, 7, data->options);
+ data->Unk10 = data->Unk0C = 0;
+ data->Unk14 = NULL;
+ data->playerStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 0, 0, 7, data->options);
+ data->rivalStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 3, 0, 7, data->options);
data->Unk88 = 0;
data->Unk89 = 0;
data->Unk8A = 0;
@@ -28,3 +50,128 @@ THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
data->Unk90 = 0;
return TRUE;
}
+
+THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
+{
+ MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_GetData(param0);
+ BOOL ret = FALSE;
+
+ switch (*param1)
+ {
+ case 0:
+ FUN_0200E3A0(PM_LCD_TOP, 0);
+ FUN_0200E3A0(PM_LCD_BOTTOM, 0);
+
+ Main_SetVBlankIntrCB(NULL, NULL);
+
+ FUN_02015F34(NULL, NULL);
+ GX_DisableEngineALayers();
+ GX_DisableEngineBLayers();
+
+ reg_GX_DISPCNT = reg_GX_DISPCNT & 0xFFFFE0FF;
+ reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & 0xFFFFE0FF;
+
+ SetKeyRepeatTimers(4, 8);
+
+ MOD59_021D778C(data);
+ MOD59_021D79F8(data);
+ MOD59_021D7A4C(data);
+
+ Main_SetVBlankIntrCB(MOD59_021D7724, data);
+
+ GX_BothDispOn();
+
+ *param1 = 1;
+
+ break;
+
+ case 1:
+ if (MOD59_021D8920(data) == 1)
+ {
+ FUN_0200E1D0(0, 0, 0, 0, 6, 1, data->heap_id);
+ *param1 = 2;
+ }
+
+ if (data->Unk14 == NULL)
+ {
+ break;
+ }
+
+ FUN_0200E1D0(0, 0, 0, 0, 6, 1, data->heap_id);
+ *param1 = 3;
+
+ break;
+
+ case 2:
+ if (FUN_0200E308() != 1)
+ {
+ break;
+ }
+
+ MOD59_021D7A34(data);
+ MOD59_021D796C(data);
+ MOD59_021D7A5C(data);
+
+ Main_SetVBlankIntrCB(NULL, NULL);
+
+ ret = TRUE;
+ break;
+
+ case 3:
+ if (FUN_0200E308() != 1)
+ {
+ break;
+ }
+
+ MOD59_021D7A34(data);
+ MOD59_021D796C(data);
+ MOD59_021D7A5C(data);
+
+ Main_SetVBlankIntrCB(NULL, NULL);
+
+ *param1 = 4;
+
+ break;
+
+ case 4:
+ if (OverlayManager_Run(data->Unk14) != TRUE)
+ {
+ break;
+ }
+
+ OverlayManager_delete(data->Unk14);
+ data->Unk14 = NULL;
+
+ *param1 = 5;
+
+ break;
+
+ case 5:
+ *param1 = 0;
+
+ break;
+ }
+
+ return ret;
+}
+
+THUMB_FUNC BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0)
+{
+ MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_GetData(param0);
+
+ u32 heap_id = data->heap_id;
+ PlayerName_StringToFlat(Sav2_PlayerData_GetProfileAddr(data->sav2), data->playerStruct->name);
+ PlayerProfile_SetTrainerGender(Sav2_PlayerData_GetProfileAddr(data->sav2), data->playerStruct->gender);
+
+ RivalsNameToU16Array(FUN_02024EB4(data->sav2), data->rivalStruct->name);
+
+ FUN_02077AC4(data->playerStruct);
+ FUN_02077AC4(data->rivalStruct);
+
+ OverlayManager_FreeData(param0);
+ DestroyHeap(heap_id);
+
+ RegisterMainOverlay(FS_OVERLAY_ID(MODULE_52), &MOD52_021D76D8);
+
+ return TRUE;
+}
diff --git a/arm9/src/player_data.c b/arm9/src/player_data.c
index ea5802aa..be2fe7f4 100644
--- a/arm9/src/player_data.c
+++ b/arm9/src/player_data.c
@@ -111,7 +111,7 @@ u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data)
return (u16)data->playerId;
}
-void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender)
+void PlayerProfile_SetTrainerGender(struct PlayerData * data, u32 gender)
{
data->gender = gender;
}
diff --git a/include/player_data.h b/include/player_data.h
index 5095ea61..c86db1c1 100644
--- a/include/player_data.h
+++ b/include/player_data.h
@@ -51,7 +51,7 @@ struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData * data,
void PlayerProfile_SetTrainerID(struct PlayerData * data, u32 otid);
u32 PlayerProfile_GetTrainerID(struct PlayerData * data);
u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data);
-void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender);
+void PlayerProfile_SetTrainerGender(struct PlayerData * data, u32 gender);
u32 PlayerProfile_GetTrainerGender(struct PlayerData * data);
BOOL PlayerProfile_TestBadgeFlag(struct PlayerData * data, u32 badgeno);
void PlayerProfile_SetBadgeFlag(struct PlayerData * data, u32 badgeno);