summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-03-30 13:11:51 -0500
committerGitHub <noreply@github.com>2021-03-30 13:11:51 -0500
commita2d206665c6fffbd962375f262b7fbb05c7b7478 (patch)
tree6710109c4d9098b74da68ca8f18024d6c184ebc2 /src
parent2fd4f339b42c010191c199772b09ac34c580de94 (diff)
Move some data and Splitting (#32)
* move friend area settings to src * split out playtime into different C file and decomp a few more funcs * time -> play_time * fix include * split out more wonder mail stuff * unify 203B2C0 and unkDungeon structs. snuck in a decomp func too * split out more menu screens * work some more on trade items * doc a few more things * add a close nonmatch and decomp nullsub and small func * rollback struct attempt since it causes nonmatchings * only one func left in asm * death to trade_item asm and unify into one C file * more docing and cleanup * label main menu and trade items menu global menu struct * doc itemMode
Diffstat (limited to 'src')
-rw-r--r--src/code_2.c2
-rw-r--r--src/code_80118A4.c2
-rw-r--r--src/code_8040094.c2
-rw-r--r--src/code_8041AD0.c15
-rw-r--r--src/code_80428A0.c7
-rw-r--r--src/code_8048480.c60
-rw-r--r--src/code_8094F88.c212
-rw-r--r--src/code_8098BDC.c2
-rw-r--r--src/friend_area.c589
-rw-r--r--src/main_menu.c66
-rw-r--r--src/main_menu_1.c22
-rw-r--r--src/main_menu_mid.c20
-rw-r--r--src/play_time.c93
-rw-r--r--src/trade_items_menu.c1120
-rw-r--r--src/wonder_mail.c68
-rw-r--r--src/wonder_mail_mid.c6
-rw-r--r--src/wonder_mail_pre.c101
17 files changed, 1841 insertions, 546 deletions
diff --git a/src/code_2.c b/src/code_2.c
index 3cc18e9..94f3632 100644
--- a/src/code_2.c
+++ b/src/code_2.c
@@ -6,7 +6,7 @@
#include "input.h"
#include "memory.h"
#include "music.h"
-#include "time.h"
+#include "play_time.h"
#include "save.h"
extern void NDS_DebugInit(void);
diff --git a/src/code_80118A4.c b/src/code_80118A4.c
index a427dea..39cc12b 100644
--- a/src/code_80118A4.c
+++ b/src/code_80118A4.c
@@ -3,7 +3,7 @@
#include "global.h"
#include "music.h"
#include "constants/bg_music.h"
-#include "time.h"
+#include "play_time.h"
#include "bg.h"
#include "input.h"
#include "config.h"
diff --git a/src/code_8040094.c b/src/code_8040094.c
index 691f2df..bd3c104 100644
--- a/src/code_8040094.c
+++ b/src/code_8040094.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "time.h"
+#include "play_time.h"
#include "file_system.h"
struct unkStruct_203B418
diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c
index 9358ddb..f90ca13 100644
--- a/src/code_8041AD0.c
+++ b/src/code_8041AD0.c
@@ -1,10 +1,5 @@
#include "global.h"
-
-struct unkDungeon_8041D5C
-{
- u8 padding[0x70];
- u8 *unk70[100];
-};
+#include "code_8041D5C.h"
struct unk_struct_8041F08
{
@@ -295,13 +290,11 @@ void nullsub_81(void)
void sub_8041D5C(struct unkDungeon_8041D5C *r0)
{
- u8 *temp;
if(sub_8042768(r0) == 0)
{
return;
}
- temp = *r0->unk70;
- sub_803ED30(temp[0x89 << 1] , r0, 1, 0xB);
+ sub_803ED30(r0->unk70->unk112 , r0, 1, 0xB);
}
void sub_8041D84(struct unkDungeon_8041D5C * r0)
@@ -687,9 +680,7 @@ void sub_8042208(struct unkDungeon_8041D5C *r0, u8 r1)
void sub_8042238(u32 r0, struct unkDungeon_8041D5C *r1)
{
- u8 *temp;
- temp = *r1->unk70;
- if(temp[6] != 0)
+ if(r1->unk70->unk6 != 0)
sub_8083E38(0x157);
else
sub_8083E38(0xAB << 1);
diff --git a/src/code_80428A0.c b/src/code_80428A0.c
index 6c7d48d..1596c4b 100644
--- a/src/code_80428A0.c
+++ b/src/code_80428A0.c
@@ -1,10 +1,5 @@
#include "global.h"
-
-struct unkDungeon_8041D5C
-{
- u8 padding[0x70];
- u8 *unk70[100];
-};
+#include "code_8041D5C.h"
extern void sub_804151C(struct unkDungeon_8041D5C *r0, u32 r1, u8 r2);
diff --git a/src/code_8048480.c b/src/code_8048480.c
index 880bf05..64bf949 100644
--- a/src/code_8048480.c
+++ b/src/code_8048480.c
@@ -1,13 +1,8 @@
#include "global.h"
-
-struct unkDungeon_8041D5C
-{
- u8 padding[0x70];
- u8 *unk70[100];
-};
+#include "code_8041D5C.h"
extern u32 gUnknown_80F89F4;
-extern u32 gAvailablePokemonNames;
+extern u8 gAvailablePokemonNames[0x58];
extern u32 gUnknown_80FB580;
extern s16 gUnknown_80F4FB6;
extern s16 gUnknown_80F4FB8;
@@ -22,7 +17,7 @@ extern void sub_8072008(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u3
extern void sub_8076D10(u32 r0, struct unkDungeon_8041D5C *r1);
extern void sub_807232C(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2);
-extern void sub_8045B94(u32 *r0, struct unkDungeon_8041D5C *r1, u32);
+extern void sub_8045B94(u8 *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_807A290(u32, struct unkDungeon_8041D5C *r1);
extern void sub_80522F4(u32 r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079270(u32 r0, struct unkDungeon_8041D5C *r1);
@@ -32,19 +27,11 @@ extern void sub_8079140(u32, struct unkDungeon_8041D5C *r1);
extern void sub_8077C44(u32, struct unkDungeon_8041D5C *r1, s16, s16, u32);
extern void sub_80792F8(u32, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079F20(u32, struct unkDungeon_8041D5C *r1, u32, u8);
-extern void sub_806F370(u32, struct unkDungeon_8041D5C *r1, u32, u32);
+extern void sub_806F370(u32, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
void sub_8048340(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2)
{
- u32 temp[6];
-
- temp[0] = 0;
- temp[1] = 0;
- temp[2] = 528;
- temp[3] = 0;
- temp[4] = 0;
- temp[5] = 0;
- sub_806F370(r0, r1, r2, 1);
+ sub_806F370(r0, r1, r2, 1, 0, 0, 528, 0, 0, 0);
}
void sub_8048364(u32 r0, struct unkDungeon_8041D5C *r1, u8 r2)
@@ -63,7 +50,6 @@ void sub_804839C(u32 r0, struct unkDungeon_8041D5C *r1)
sub_8077C44(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1);
}
-
void sub_80483C4(u32 r0, struct unkDungeon_8041D5C *r1)
{
sub_80792F8(r0, r1, 999);
@@ -96,26 +82,20 @@ void sub_804841C(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048428(u32 r0, struct unkDungeon_8041D5C *r1)
{
- u8 *temp;
- temp = r1->unk70[0];
- if(temp[0xAC] == 4)
- {
+ if(r1->unk70->unkAC == 4)
sub_807A290(r0, r1);
- return;
- }
- sub_80522F4(r0, r1, gUnknown_80F89F4);
+ else
+ // Pointer to "But nothing happened!"
+ sub_80522F4(r0, r1, gUnknown_80F89F4);
}
void sub_8048450(u32 r0, struct unkDungeon_8041D5C *r1)
{
- u8 *temp;
- temp = r1->unk70[0];
- if((u8)(temp[0xAC] - 2) <= 1)
- {
+ if((u8)(r1->unk70->unkAC - 2) <= 1)
sub_807A290(r0, r1);
- return;
- }
- sub_80522F4(r0, r1, gUnknown_80F89F4);
+ else
+ // Pointer to "But nothing happened!"
+ sub_80522F4(r0, r1, gUnknown_80F89F4);
}
void sub_8048480(u32 r0, struct unkDungeon_8041D5C *r1)
@@ -145,6 +125,7 @@ void sub_80484BC(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484C8(u32 r0, struct unkDungeon_8041D5C *r1)
{
+ // Pointer to "But nothing happened!"
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
@@ -155,13 +136,12 @@ void sub_80484DC(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484E8(u32 r0, struct unkDungeon_8041D5C *r1)
{
- u8 *temp;
- temp = r1->unk70[0];
- if(temp[0xAC] == 1)
- {
+ if(r1->unk70->unkAC == 1)
sub_807A290(r0, r1);
- return;
+ else
+ {
+ sub_8045B94(gAvailablePokemonNames, r1, 0);
+ // Pointer to "But nothing happened!"
+ sub_80522F4(r0, r1, gUnknown_80FB580);
}
- sub_8045B94(&gAvailablePokemonNames, r1, 0);
- sub_80522F4(r0, r1, gUnknown_80FB580);
}
diff --git a/src/code_8094F88.c b/src/code_8094F88.c
index d3ed115..5bd3a29 100644
--- a/src/code_8094F88.c
+++ b/src/code_8094F88.c
@@ -1,134 +1,160 @@
#include "global.h"
-#include "time.h"
+#include "memory.h"
-extern struct PlayTimeStruct *gPlayTimeRef;
-extern struct PlayTimeStruct gPlayTime;
+struct unkStruct_203B480
+{
+ //size of 48
+ u8 unk0;
+ u8 fill1[0x22 - 1];
+ u8 unk22;
+ u8 fill23[0x2D - 0x23];
+ u8 unk2D;
+};
+
+struct unkStruct_203B48C
+{
+ s32 unk0;
+ s32 unk4[0x20];
+};
-extern u8 gUnknown_2038C88;
+extern struct unkStruct_203B480 gUnknown_2038C88;
extern u8 gUnknown_2039288;
extern u32 gUnknown_20392E8;
-extern u32 gUnknown_20393C0;
-extern u8 *gUnknown_203B480;
+extern struct unkStruct_203B48C gUnknown_20393C0;
extern u8 *gUnknown_203B484;
extern u32 *gUnknown_203B488;
-extern u32 *gUnknown_203B48C;
-extern void sub_809488C(u8 *r0, u8 *r1, u32);
-extern void sub_8094924(u8 *r0, u8 *r1, u32);
+extern struct unkStruct_203B480 *gUnknown_203B480;
+extern struct unkStruct_203B48C *gUnknown_203B48C; // def a pointer
-void InitializePlayTime(void)
-{
- gPlayTimeRef = &gPlayTime;
- ResetPlayTime(&gPlayTime);
-}
-struct PlayTimeStruct *GetPlayTime(void)
+void sub_80950BC(void)
{
- return &gPlayTime;
+ gUnknown_203B480 = &gUnknown_2038C88;
+ gUnknown_203B484 = &gUnknown_2039288;
+ gUnknown_203B488 = &gUnknown_20392E8;
+ gUnknown_203B48C = &gUnknown_20393C0;
}
-void ResetPlayTime(struct PlayTimeStruct *Time)
+struct unkStruct_203B480 *sub_80950F8(void)
{
- Time->frames = 0;
- Time->seconds = 0;
- Time->minutes = 0;
- Time->hours = 0;
+ return &gUnknown_2038C88;
}
-void IncrementPlayTime(struct PlayTimeStruct *Time)
+u8 *sub_8095100(void)
{
- u16 temp_store16;
-
- Time->frames++;
- if(Time->frames <= 59)
- return;
- Time->frames = 0;
-
- Time->seconds++;
- if(Time->seconds <= 59)
- return;
- Time->seconds = 0;
-
- Time->minutes++;
- if(Time->minutes <= 59)
- return;
- Time->minutes = 0;
-
- // Casting here for unsigned comparison
- temp_store16 = Time->hours;
- if(Time->hours <= 9998)
- {
- temp_store16++;
- Time->hours = temp_store16;
- }
- else
- {
- Time->seconds = 59;
- Time->minutes = 59;
- Time->hours= 9999;
- }
+ return &gUnknown_2039288;
}
-void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinutes, u32 *outSeconds)
+u32 *sub_8095108(void)
{
- if(r0->hours <= 9999)
- {
- *outHours = r0->hours;
- *outMinutes = r0->minutes;
- *outSeconds = r0->seconds;
- }
- else
- {
- *outHours = 9999;
- *outMinutes = 59;
- *outSeconds = 59;
- }
+ return &gUnknown_20392E8;
}
-void sub_8095044(u8 *r0)
+struct unkStruct_203B48C *sub_8095110(void)
{
- sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
- sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
- sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
- sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+ return &gUnknown_20393C0;
}
-void sub_8095080(u8 *r0)
-{
- sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
- sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
- sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
- sub_8094924(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
-}
-void sub_80950BC(void)
+#ifdef NONMATCHING
+void sub_8095118(void)
{
- gUnknown_203B480 = &gUnknown_2038C88;
- gUnknown_203B484 = &gUnknown_2039288;
- gUnknown_203B488 = &gUnknown_20392E8;
- gUnknown_203B48C = &gUnknown_20393C0;
+ int iVar1;
+
+ MemoryFill8((u8*)gUnknown_203B480,0,0x600);
+ MemoryFill8(gUnknown_203B484,0,0x5c);
+ for(iVar1 = 0; iVar1 < 0x20; iVar1++){
+ // NOTE: when it adds the index regs flip
+ // Instead of add r0, r0, r1 -> add r0, r1, r0
+ // Everything else matches...
+ gUnknown_203B480[iVar1].unk0 = 0;
+ gUnknown_203B480[iVar1].unk22 = 0;
+ gUnknown_203B480[iVar1].unk2D = 0;
+ }
+ gUnknown_203B48C->unk0 = 0;
+ for(iVar1 = 0; iVar1 < 0x20; iVar1++){
+ gUnknown_203B48C->unk4[iVar1] = -1;
+ }
}
-
-u8 *sub_80950F8(void)
+#else
+NAKED
+void sub_8095118(void)
{
- return &gUnknown_2038C88;
+ asm_unified("\tpush {r4,lr}\n"
+ "\tldr r4, _0809517C\n"
+ "\tldr r0, [r4]\n"
+ "\tmovs r2, 0xC0\n"
+ "\tlsls r2, 3\n"
+ "\tmovs r1, 0\n"
+ "\tbl MemoryFill8\n"
+ "\tldr r0, _08095180\n"
+ "\tldr r0, [r0]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x5C\n"
+ "\tbl MemoryFill8\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r3, 0x1F\n"
+"_0809513A:\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, r1\n"
+ "\tstrb r2, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, 0x22\n"
+ "\tstrb r2, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, 0x2D\n"
+ "\tstrb r2, [r0]\n"
+ "\tadds r1, 0x30\n"
+ "\tsubs r3, 0x1\n"
+ "\tcmp r3, 0\n"
+ "\tbge _0809513A\n"
+ "\tldr r2, _08095184\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [r1]\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r4, 0x1\n"
+ "\tnegs r4, r4\n"
+"_08095166:\n"
+ "\tldr r0, [r2]\n"
+ "\tlsls r1, r3, 2\n"
+ "\tadds r0, 0x4\n"
+ "\tadds r0, r1\n"
+ "\tstr r4, [r0]\n"
+ "\tadds r3, 0x1\n"
+ "\tcmp r3, 0x1F\n"
+ "\tble _08095166\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0809517C: .4byte gUnknown_203B480\n"
+"_08095180: .4byte gUnknown_203B484\n"
+"_08095184: .4byte gUnknown_203B48C");
}
+#endif
-u8 *sub_8095100(void)
+void nullsub_206(void)
{
- return &gUnknown_2039288;
}
-u32 *sub_8095108(void)
+void nullsub_207(void)
{
- return &gUnknown_20392E8;
}
-u32 *sub_8095110(void)
+s32 sub_8095190(void)
{
- return &gUnknown_20393C0;
+ int index;
+
+ for(index = 2; index < 0x20; index++){
+ if(gUnknown_203B480[index].unk0 == 0)
+ return index;
+ }
+ return -1;
}
-
-
diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c
index 66bb85a..f4a745f 100644
--- a/src/code_8098BDC.c
+++ b/src/code_8098BDC.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "time.h"
+#include "play_time.h"
#include "input.h"
extern struct PlayTimeStruct *gPlayTimeRef;
diff --git a/src/friend_area.c b/src/friend_area.c
index 4288720..5180eba 100644
--- a/src/friend_area.c
+++ b/src/friend_area.c
@@ -6,8 +6,6 @@ extern bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
extern bool8 *gFriendAreas;
-extern struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS];
-
struct unkStruct_203B45C
{
// size: 0x58?
@@ -30,300 +28,299 @@ extern const char gUnknown_81098AC;
extern void sub_800D158(u8 *buffer, const char *r2, ...);
extern void sub_8090FEC(u32, u32 *r1, u32);
-
-//const struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] =
-//{
-// [NONE] = {
-// .num_pokemon = 0,
-// .unlock_condition = 0,
-// .price = 0,
-// },
-// [BOUNTIFUL_SEA] = {
-// .num_pokemon = 9,
-// .unlock_condition = 1,
-// .price = 5500,
-// },
-// [TREASURE_SEA] = {
-// .num_pokemon = 10,
-// .unlock_condition = 1,
-// .price = 4500,
-// },
-// [SERENE_SEA] = {
-// .num_pokemon = 4,
-// .unlock_condition = 1,
-// .price = 8000,
-// },
-// [DEEP_SEA_FLOOR] = {
-// .num_pokemon = 12,
-// .unlock_condition = 1,
-// .price = 5500,
-// },
-// [DEEP_SEA_CURRENT] = {
-// .num_pokemon = 1,
-// .unlock_condition = 3,
-// .price = 0,
-// },
-// [SEAFLOOR_CAVE] = {
-// .num_pokemon = 0,
-// .unlock_condition = 0,
-// .price = 0,
-// },
-// [SHALLOW_CAVE] = {
-// .num_pokemon = 5,
-// .unlock_condition = 1,
-// .price = 5000,
-// },
-// [MT_DEEPGREEN] = {
-// .num_pokemon = 12,
-// .unlock_condition = 0,
-// .price = 130,
-// },
-// [MT_CLEFT] = {
-// .num_pokemon = 9,
-// .unlock_condition = 1,
-// .price = 5000,
-// },
-// [MT_MOONVIEW] = {
-// .num_pokemon = 6,
-// .unlock_condition = 2,
-// .price = 0,
-// },
-// [RAINBOW_PEAK] = {
-// .num_pokemon = 1,
-// .unlock_condition = 1,
-// .price = 6500,
-// },
-// [WILD_PLAINS] = {
-// .num_pokemon = 13,
-// .unlock_condition = 0,
-// .price = 100,
-// },
-// [BEAU_PLAINS] = {
-// .num_pokemon = 12,
-// .unlock_condition = 0,
-// .price = 600,
-// },
-// [SKY_BLUE_PLAINS] = {
-// .num_pokemon = 13,
-// .unlock_condition = 2,
-// .price = 0,
-// },
-// [SAFARI] = {
-// .num_pokemon = 15,
-// .unlock_condition = 0,
-// .price = 700,
-// },
-// [SCORCHED_PLAINS] = {
-// .num_pokemon = 10,
-// .unlock_condition = 1,
-// .price = 5000,
-// },
-// [SACRED_FIELD] = {
-// .num_pokemon = 3,
-// .unlock_condition = 1,
-// .price = 6500
-// },
-// [MIST_RISE_FOREST] = {
-// .num_pokemon = 14,
-// .unlock_condition = 0,
-// .price = 150
-// },
-// [FLYAWAY_FOREST] = {
-// .num_pokemon = 12,
-// .unlock_condition = 0,
-// .price = 550
-// },
-// [OVERGROWN_FOREST] = {
-// .num_pokemon = 9,
-// .unlock_condition = 0,
-// .price = 600
-// },
-// [ENERGETIC_FOREST] = {
-// .num_pokemon = 15,
-// .unlock_condition = 1,
-// .price = 5000
-// },
-// [MUSHROOM_FOREST] = {
-// .num_pokemon = 7,
-// .unlock_condition = 0,
-// .price = 500
-// },
-// [HEALING_FOREST] = {
-// .num_pokemon = 1,
-// .unlock_condition = 3,
-// .price = 0
-// },
-// [TRANSFORM_FOREST] = {
-// .num_pokemon = 6,
-// .unlock_condition = 0,
-// .price = 500
-// },
-// [SECRETIVE_FOREST] = {
-// .num_pokemon = 9,
-// .unlock_condition = 1,
-// .price = 6500
-// },
-// [RUB_A_DUB_RIVER] = {
-// .num_pokemon = 7,
-// .unlock_condition = 0,
-// .price = 500
-// },
-// [TADPOLE_POND] = {
-// .num_pokemon = 9,
-// .unlock_condition = 0,
-// .price = 500
-// },
-// [TURTLESHELL_POND] = {
-// .num_pokemon = 10,
-// .unlock_condition = 1,
-// .price = 5500
-// },
-// [MYSTIC_LAKE] = {
-// .num_pokemon = 4,
-// .unlock_condition = 1,
-// .price = 2500
-// },
-// [WATERFALL_LAKE] = {
-// .num_pokemon = 4,
-// .unlock_condition = 1,
-// .price = 3500
-// },
-// [PEANUT_SWAMP] = {
-// .num_pokemon = 7,
-// .unlock_condition = 0,
-// .price = 2500
-// },
-// [POISON_SWAMP] = {
-// .num_pokemon = 6,
-// .unlock_condition = 1,
-// .price = 8500
-// },
-// [ECHO_CAVE] = {
-// .num_pokemon = 11,
-// .unlock_condition = 1,
-// .price = 7500
-// },
-// [CRYPTIC_CAVE] = {
-// .num_pokemon = 1,
-// .unlock_condition = 1,
-// .price = 6500
-// },
-// [DRAGON_CAVE] = {
-// .num_pokemon = 3,
-// .unlock_condition = 2,
-// .price = 0
-// },
-// [BOULDER_CAVE] = {
-// .num_pokemon = 4,
-// .unlock_condition = 2,
-// .price = 0
-// },
-// [JUNGLE] = {
-// .num_pokemon = 13,
-// .unlock_condition = 0,
-// .price = 800
-// },
-// [DECRPEPIT_LAB] = {
-// .num_pokemon = 7,
-// .unlock_condition = 0,
-// .price = 1000
-// },
-// [MT_DISCIPLINE] = {
-// .num_pokemon = 11,
-// .unlock_condition = 0,
-// .price = 1200
-// },
-// [THUNDER_MEADOW] = {
-// .num_pokemon = 11,
-// .unlock_condition = 0,
-// .price = 1000
-// },
-// [POWER_PLANT] = {
-// .num_pokemon = 6,
-// .unlock_condition = 0,
-// .price = 600
-// },
-// [CRATER] = {
-// .num_pokemon = 7,
-// .unlock_condition = 1,
-// .price = 7500
-// },
-// [FURNACE_DESERT] = {
-// .num_pokemon = 7,
-// .unlock_condition = 1,
-// .price = 8500
-// },
-// [AGED_CHAMBER_AN] = {
-// .num_pokemon = 14,
-// .unlock_condition = 1,
-// .price = 5500
-// },
-// [AGED_CHAMBER_O_EXCLAIM] = {
-// .num_pokemon = 14,
-// .unlock_condition = 1,
-// .price = 5500
-// },
-// [ANCIENT_RELIC] = {
-// .num_pokemon = 6,
-// .unlock_condition = 1,
-// .price = 8000
-// },
-// [DARKNESS_RIDGE] = {
-// .num_pokemon = 13,
-// .unlock_condition = 3,
-// .price = 0
-// },
-// [FRIGID_CAVERN] = {
-// .num_pokemon = 7,
-// .unlock_condition = 1,
-// .price = 9000
-// },
-// [ICE_FLOE_BEACH] = {
-// .num_pokemon = 5,
-// .unlock_condition = 1,
-// .price = 9500
-// },
-// [VOLCANIC_PIT] = {
-// .num_pokemon = 1,
-// .unlock_condition = 3,
-// .price = 0
-// },
-// [STRATOS_LOOKOUT] = {
-// .num_pokemon = 1,
-// .unlock_condition = 3,
-// .price = 0
-// },
-// [RAVAGED_FIELD] = {
-// .num_pokemon = 5,
-// .unlock_condition = 0,
-// .price = 1000
-// },
-// [MAGNETIC_QUARRY] = {
-// .num_pokemon = 3,
-// .unlock_condition = 0,
-// .price = 1000
-// },
-// [LEGENDARY_ISLAND] = {
-// .num_pokemon = 3,
-// .unlock_condition = 3,
-// .price = 7500
-// },
-// [SOUTHERN_ISLAND] = {
-// .num_pokemon = 2,
-// .unlock_condition = 1,
-// .price = 9500
-// },
-// [ENCLOSED_ISLAND] = {
-// .num_pokemon = 1,
-// .unlock_condition = 3,
-// .price = 0
-// },
-// [FINAL_ISLAND] = {
-// .num_pokemon = 1,
-// .unlock_condition = 1,
-// .price = 8500
-// },
-//};
+const struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] =
+{
+ [NONE] = {
+ .num_pokemon = 0,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 0,
+ },
+ [BOUNTIFUL_SEA] = {
+ .num_pokemon = 9,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5500,
+ },
+ [TREASURE_SEA] = {
+ .num_pokemon = 10,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 4500,
+ },
+ [SERENE_SEA] = {
+ .num_pokemon = 4,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 8000,
+ },
+ [DEEP_SEA_FLOOR] = {
+ .num_pokemon = 12,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5500,
+ },
+ [DEEP_SEA_CURRENT] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0,
+ },
+ [SEAFLOOR_CAVE] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0,
+ },
+ [SHALLOW_BEACH] = {
+ .num_pokemon = 5,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5000,
+ },
+ [MT_DEEPGREEN] = {
+ .num_pokemon = 12,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 130,
+ },
+ [MT_CLEFT] = {
+ .num_pokemon = 9,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5000,
+ },
+ [MT_MOONVIEW] = {
+ .num_pokemon = 6,
+ .unlock_condition = UNLOCK_WONDER_MAIL,
+ .price = 0,
+ },
+ [RAINBOW_PEAK] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 6500,
+ },
+ [WILD_PLAINS] = {
+ .num_pokemon = 13,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 100,
+ },
+ [BEAU_PLAINS] = {
+ .num_pokemon = 12,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 600,
+ },
+ [SKY_BLUE_PLAINS] = {
+ .num_pokemon = 13,
+ .unlock_condition = UNLOCK_WONDER_MAIL,
+ .price = 0,
+ },
+ [SAFARI] = {
+ .num_pokemon = 15,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 700,
+ },
+ [SCORCHED_PLAINS] = {
+ .num_pokemon = 10,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5000,
+ },
+ [SACRED_FIELD] = {
+ .num_pokemon = 3,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 6500
+ },
+ [MIST_RISE_FOREST] = {
+ .num_pokemon = 14,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 150
+ },
+ [FLYAWAY_FOREST] = {
+ .num_pokemon = 12,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 550
+ },
+ [OVERGROWN_FOREST] = {
+ .num_pokemon = 9,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 600
+ },
+ [ENERGETIC_FOREST] = {
+ .num_pokemon = 15,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5000
+ },
+ [MUSHROOM_FOREST] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 500
+ },
+ [HEALING_FOREST] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0
+ },
+ [TRANSFORM_FOREST] = {
+ .num_pokemon = 6,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 500
+ },
+ [SECRETIVE_FOREST] = {
+ .num_pokemon = 9,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 6500
+ },
+ [RUB_A_DUB_RIVER] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 500
+ },
+ [TADPOLE_POND] = {
+ .num_pokemon = 9,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 500
+ },
+ [TURTLESHELL_POND] = {
+ .num_pokemon = 10,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5500
+ },
+ [MYSTIC_LAKE] = {
+ .num_pokemon = 4,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 2500
+ },
+ [WATERFALL_LAKE] = {
+ .num_pokemon = 4,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 3500
+ },
+ [PEANUT_SWAMP] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 2500
+ },
+ [POISON_SWAMP] = {
+ .num_pokemon = 6,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 8500
+ },
+ [ECHO_CAVE] = {
+ .num_pokemon = 11,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 7500
+ },
+ [CRYPTIC_CAVE] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 6500
+ },
+ [DRAGON_CAVE] = {
+ .num_pokemon = 3,
+ .unlock_condition = UNLOCK_WONDER_MAIL,
+ .price = 0
+ },
+ [BOULDER_CAVE] = {
+ .num_pokemon = 4,
+ .unlock_condition = UNLOCK_WONDER_MAIL,
+ .price = 0
+ },
+ [JUNGLE] = {
+ .num_pokemon = 13,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 800
+ },
+ [DECRPEPIT_LAB] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 1000
+ },
+ [MT_DISCIPLINE] = {
+ .num_pokemon = 11,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 1200
+ },
+ [THUNDER_MEADOW] = {
+ .num_pokemon = 11,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 1000
+ },
+ [POWER_PLANT] = {
+ .num_pokemon = 6,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 600
+ },
+ [CRATER] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 7500
+ },
+ [FURNACE_DESERT] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 8500
+ },
+ [AGED_CHAMBER_AN] = {
+ .num_pokemon = 14,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5500
+ },
+ [AGED_CHAMBER_O_EXCLAIM] = {
+ .num_pokemon = 14,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 5500
+ },
+ [ANCIENT_RELIC] = {
+ .num_pokemon = 6,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 8000
+ },
+ [DARKNESS_RIDGE] = {
+ .num_pokemon = 13,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0
+ },
+ [FRIGID_CAVERN] = {
+ .num_pokemon = 7,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 9000
+ },
+ [ICE_FLOE_BEACH] = {
+ .num_pokemon = 5,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 9500
+ },
+ [VOLCANIC_PIT] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0
+ },
+ [STRATOS_LOOKOUT] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0
+ },
+ [RAVAGED_FIELD] = {
+ .num_pokemon = 5,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 1000
+ },
+ [MAGNETIC_QUARRY] = {
+ .num_pokemon = 3,
+ .unlock_condition = UNLOCK_SHOP_STORY,
+ .price = 1000
+ },
+ [LEGENDARY_ISLAND] = {
+ .num_pokemon = 3,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 7500
+ },
+ [SOUTHERN_ISLAND] = {
+ .num_pokemon = 2,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 9500
+ },
+ [ENCLOSED_ISLAND] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_LEGENDARY_REQUEST,
+ .price = 0
+ },
+ [FINAL_ISLAND] = {
+ .num_pokemon = 1,
+ .unlock_condition = UNLOCK_SHOP_POST_GAME,
+ .price = 8500
+ },
+};
void LoadFriendAreas(void)
{
diff --git a/src/main_menu.c b/src/main_menu.c
index 71db487..3c0840a 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -16,7 +16,7 @@
// Deletes the Save
-extern struct MainMenu *gUnknown_203B348;
+extern struct MainMenu *gMainMenu;
extern void* MemoryAlloc(u32 a, u32 b);
extern void MemoryFill8(u8 *dest, u8 value, s32 size);
void sub_8035DA0(void);
@@ -63,34 +63,34 @@ extern void sub_8038604(void);
void InitMainMenu(void)
{
- if (gUnknown_203B348 == NULL) {
- gUnknown_203B348 = MemoryAlloc(sizeof(struct MainMenu),8);
- MemoryFill8((u8 *)gUnknown_203B348, 0, sizeof(struct MainMenu));
+ if (gMainMenu == NULL) {
+ gMainMenu = MemoryAlloc(sizeof(struct MainMenu),8);
+ MemoryFill8((u8 *)gMainMenu, 0, sizeof(struct MainMenu));
}
- gUnknown_203B348->currMenu = 0xffdc;
- gUnknown_203B348->nextMenu = MENU_MAIN_SCREEN;
- gUnknown_203B348->lastMenu = MENU_MAIN_SCREEN;
- gUnknown_203B348->unk38 = -1;
- gUnknown_203B348->unk3C = -1;
- gUnknown_203B348->sub.unk2E = 0;
- gUnknown_203B348->sub.unk2C = 1;
- gUnknown_203B348->sub.unk2D = 0;
+ gMainMenu->currMenu = 0xffdc;
+ gMainMenu->nextMenu = MENU_MAIN_SCREEN;
+ gMainMenu->lastMenu = MENU_MAIN_SCREEN;
+ gMainMenu->unk38 = -1;
+ gMainMenu->unk3C = -1;
+ gMainMenu->sub.unk2E = 0;
+ gMainMenu->sub.unk2C = 1;
+ gMainMenu->sub.unk2D = 0;
sub_8035DA0();
- gUnknown_203B348->unk3A = 0;
+ gMainMenu->unk3A = 0;
}
void DeleteMainMenu(void)
{
- if(gUnknown_203B348){
- MemoryFree(gUnknown_203B348);
- gUnknown_203B348 = NULL;
+ if(gMainMenu){
+ MemoryFree(gMainMenu);
+ gMainMenu = NULL;
}
}
void SetUpMenu(void)
{
- if (gUnknown_203B348->currMenu != gUnknown_203B348->nextMenu) {
- switch(gUnknown_203B348->nextMenu) {
+ if (gMainMenu->currMenu != gMainMenu->nextMenu) {
+ switch(gMainMenu->nextMenu) {
case MENU_MAIN_SCREEN:
sub_8094C14();
sub_8099690(0);
@@ -100,14 +100,14 @@ void SetUpMenu(void)
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
- CreateLoadScreen(gUnknown_203B348->nextMenu);
+ CreateLoadScreen(gMainMenu->nextMenu);
break;
case MENU_TRADE_ITEMS:
CreateTradeItemsMenu();
break;
case MENU_COMMUNICATION_1:
case MENU_COMMUNICATION_2:
- sub_8036FDC(sub_8035DB4(gUnknown_203B348->nextMenu));
+ sub_8036FDC(sub_8035DB4(gMainMenu->nextMenu));
break;
case MENU_FRIEND_RESCUE:
CreateFriendRescueMenu();
@@ -123,7 +123,7 @@ void SetUpMenu(void)
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
case MENU_RESCUE_PASSWORD_ENTRY:
- CreateRescuePasswordMenu(gUnknown_203B348->nextMenu);
+ CreateRescuePasswordMenu(gMainMenu->nextMenu);
break;
case MENU_ADVENTURE_LOG:
CreateAdventureLogMenu();
@@ -134,13 +134,13 @@ void SetUpMenu(void)
case 0x2c:
case 0x2d:
case 0x2e:
- sub_803850C(gUnknown_203B348->nextMenu);
+ sub_803850C(gMainMenu->nextMenu);
break;
case MENU_DEBUG:
CreateDebugMenu();
break;
}
- gUnknown_203B348->currMenu = gUnknown_203B348->nextMenu;
+ gMainMenu->currMenu = gMainMenu->nextMenu;
}
}
@@ -150,7 +150,7 @@ s32 UpdateMenu(void)
s32 nextMenu;
nextMenu = MENU_NO_SCREEN_CHANGE;
- switch(gUnknown_203B348->nextMenu) {
+ switch(gMainMenu->nextMenu) {
case MENU_MAIN_SCREEN:
nextMenu = UpdateMainMenu();
break;
@@ -222,15 +222,15 @@ s32 UpdateMenu(void)
break;
}
if (nextMenu != MENU_NO_SCREEN_CHANGE) {
- gUnknown_203B348->nextMenu = nextMenu;
+ gMainMenu->nextMenu = nextMenu;
}
return nextMenu;
}
void CleanUpMenu(void)
{
- if (gUnknown_203B348->lastMenu != gUnknown_203B348->nextMenu) {
- switch(gUnknown_203B348->lastMenu) {
+ if (gMainMenu->lastMenu != gMainMenu->nextMenu) {
+ switch(gMainMenu->lastMenu) {
case MENU_MAIN_SCREEN:
CleanMainMenu();
break;
@@ -285,25 +285,25 @@ void CleanUpMenu(void)
DeleteDebugMenu();
break;
}
- gUnknown_203B348->lastMenu = gUnknown_203B348->nextMenu;
+ gMainMenu->lastMenu = gMainMenu->nextMenu;
}
}
// Unused
void sub_8035C00(struct MainMenuSub *param)
{
- gUnknown_203B348->sub = *param;
+ gMainMenu->sub = *param;
}
// Unused
struct MainMenuSub *sub_8035C10(void)
{
- return &gUnknown_203B348->sub;
+ return &gMainMenu->sub;
}
void sub_8035C1C(void)
{
- gUnknown_203B348->sub.unk2E = 0;
- gUnknown_203B348->sub.unk2C = 1;
- gUnknown_203B348->sub.unk2D = 0;
+ gMainMenu->sub.unk2E = 0;
+ gMainMenu->sub.unk2C = 1;
+ gMainMenu->sub.unk2D = 0;
}
diff --git a/src/main_menu_1.c b/src/main_menu_1.c
new file mode 100644
index 0000000..d79a420
--- /dev/null
+++ b/src/main_menu_1.c
@@ -0,0 +1,22 @@
+#include "global.h"
+
+s32 sub_8011FA8(void);
+s32 sub_8095324(u32);
+s32 sub_8011C1C(void);
+
+bool8 sub_8039844(void)
+{
+ int iVar1;
+ bool8 return_var;
+
+ iVar1 = sub_8011FA8();
+ return_var = 0;
+ if (sub_8095324(1) != 0 || sub_8095324(7) != 0)
+ {
+ if (iVar1 == 0xf1207)
+ return_var = 1;
+ }
+ else if (sub_8011C1C() == 2 && iVar1 == 0xf1207)
+ return_var = 1;
+ return return_var;
+}
diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c
index ebe2abb..d606e4d 100644
--- a/src/main_menu_mid.c
+++ b/src/main_menu_mid.c
@@ -8,14 +8,14 @@ struct unkData
};
-extern struct MainMenu *gUnknown_203B348;
+extern struct MainMenu *gMainMenu;
extern struct unkData gUnknown_80E59A8;
-extern void sub_8006518();
+extern void sub_8006518(struct unkData *);
extern void sub_800641C(struct unkData *, u32, u32);
void sub_8035CC0(struct unkData *dataArray, u32 index)
{
- sub_8006518();
+ sub_8006518(dataArray);
dataArray[index] = gUnknown_80E59A8;
ResetUnusedInputStruct();
sub_800641C(dataArray, 1, 1);
@@ -46,35 +46,35 @@ void sub_8035CF4(void * Menu, u32 index, u8 r2)
void sub_8035D1C(void)
{
- gUnknown_203B348->unk38 = -1;
+ gMainMenu->unk38 = -1;
}
void sub_8035D30(s32 r0)
{
- gUnknown_203B348->unk38 = r0;
+ gMainMenu->unk38 = r0;
}
s16 sub_8035D3C(void)
{
- return gUnknown_203B348->unk38;
+ return gMainMenu->unk38;
}
s32 *sub_8035D4C(void)
{
- return &gUnknown_203B348->currMenu;
+ return &gMainMenu->currMenu;
}
void sub_8035D58(void)
{
- gUnknown_203B348->unk3C = -1;
+ gMainMenu->unk3C = -1;
}
void sub_8035D68(s32 r0)
{
- gUnknown_203B348->unk3C = r0;
+ gMainMenu->unk3C = r0;
}
s32 sub_8035D74(void)
{
- return gUnknown_203B348->unk3C;
+ return gMainMenu->unk3C;
}
diff --git a/src/play_time.c b/src/play_time.c
new file mode 100644
index 0000000..37af5fe
--- /dev/null
+++ b/src/play_time.c
@@ -0,0 +1,93 @@
+#include "global.h"
+#include "play_time.h"
+
+extern struct PlayTimeStruct *gPlayTimeRef;
+extern struct PlayTimeStruct gPlayTime;
+
+extern void sub_809488C(u8 *r0, u8 *r1, u32);
+extern void sub_8094924(u8 *r0, u8 *r1, u32);
+
+void InitializePlayTime(void)
+{
+ gPlayTimeRef = &gPlayTime;
+ ResetPlayTime(&gPlayTime);
+}
+
+struct PlayTimeStruct *GetPlayTime(void)
+{
+ return &gPlayTime;
+}
+
+void ResetPlayTime(struct PlayTimeStruct *Time)
+{
+ Time->frames = 0;
+ Time->seconds = 0;
+ Time->minutes = 0;
+ Time->hours = 0;
+}
+
+void IncrementPlayTime(struct PlayTimeStruct *Time)
+{
+ u16 temp_store16;
+
+ Time->frames++;
+ if(Time->frames <= 59)
+ return;
+ Time->frames = 0;
+
+ Time->seconds++;
+ if(Time->seconds <= 59)
+ return;
+ Time->seconds = 0;
+
+ Time->minutes++;
+ if(Time->minutes <= 59)
+ return;
+ Time->minutes = 0;
+
+ // Casting here for unsigned comparison
+ temp_store16 = Time->hours;
+ if(Time->hours <= 9998)
+ {
+ temp_store16++;
+ Time->hours = temp_store16;
+ }
+ else
+ {
+ Time->seconds = 59;
+ Time->minutes = 59;
+ Time->hours= 9999;
+ }
+}
+
+void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinutes, u32 *outSeconds)
+{
+ if(r0->hours <= 9999)
+ {
+ *outHours = r0->hours;
+ *outMinutes = r0->minutes;
+ *outSeconds = r0->seconds;
+ }
+ else
+ {
+ *outHours = 9999;
+ *outMinutes = 59;
+ *outSeconds = 59;
+ }
+}
+
+void sub_8095044(u8 *r0)
+{
+ sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+}
+
+void sub_8095080(u8 *r0)
+{
+ sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_8094924(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+}
diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c
new file mode 100644
index 0000000..2582931
--- /dev/null
+++ b/src/trade_items_menu.c
@@ -0,0 +1,1120 @@
+#include "global.h"
+#include "input.h"
+#include "trade_items_menu.h"
+
+extern struct TradeItemsMenu *gTradeItemsMenu;
+
+struct unkStruct_203B460
+{
+ u8 unk0[0x50];
+ u16 unk50[10];
+};
+
+
+extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this
+extern u32 gUnknown_202DE30;
+extern u32 gUnknown_202DE58;
+extern struct unkData gUnknown_80E6174;
+
+// Trade Items Menu Link Error Messages
+extern u32 gTradeItemsCommunicationError;
+extern u32 gUnknown_80E639C;
+extern u32 gUnknown_80E63F8;
+extern u32 gUnknown_80E6448;
+extern u32 gUnknown_80E64AC;
+extern u32 gTradeItemsHowManyText;
+extern u32 gUnknown_80E60A0;
+extern u32 gUnknown_80E60D4;
+extern u32 gUnknown_80E61A4;
+extern u32 gUnknown_80E61C0;
+extern u32 gUnknown_80E60EC;
+extern u32 gUnknown_80E6104;
+extern u32 gUnknown_80E6154;
+extern u32 gUnknown_80E61E4;
+
+extern u32 gUnknown_80E6214;
+extern u32 gUnknown_80E618C;
+extern u32 gUnknown_80E6268;
+extern u32 gUnknown_80E62C4;
+extern u32 gUnknown_80E6358;
+extern u32 gUnknown_80E6314;
+
+extern void sub_8013AA0(u32 *);
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8 *, u32, u32);
+extern void MemoryFree(void *);
+extern void sub_800641C(u32 *, u32, u32);
+extern void sub_8035C1C();
+extern void sub_8035DA0();
+extern s32 sub_80144A4(s32 *);
+extern u32 sub_801CA08(u32);
+extern void sub_801CBB8();
+extern u8 sub_801CB24();
+extern void sub_8006518(u32 *);
+extern void sub_801B3C0(u8 *);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, s32 *);
+extern void sub_8035CC0(struct unkData *, u32);
+extern void sub_801CCD8();
+extern u32 sub_801B410();
+extern void sub_801B450();
+extern void sub_801CB5C(u32);
+extern void sub_8035CF4(u32 *, u32, u32);
+extern u32 sub_8013BBC(u32 *);
+void sub_8036F30();
+extern void sub_80369D0();
+extern void sub_8012574(u32);
+extern void sub_80141B4(u32 *, u32, u32, u32);
+
+extern void sub_8012574(u32);
+extern u8 sub_8012600(void);
+extern void sub_8012750();
+
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_8013C68(u32 *);
+extern void sub_80073E0(u32);
+extern void xxx_call_draw_string(u32, u32, u32 *, u32, u32);
+extern u8 sub_801CF14(u32);
+extern u32 sub_801D008();
+extern void sub_8090DC4(u32 *, u8, u32);
+extern void sub_801C8C4(u32, u32, s32 *, u32);
+
+
+
+
+void SetTradeItemMenu(u32);
+void PrintTradeItemsLinkError(u32);
+void sub_803652C();
+void sub_8036590();
+void sub_80365AC();
+void sub_8036674();
+void sub_8036788();
+void sub_8036728();
+extern void sub_8036830();
+void sub_803689C();
+void sub_80368D4();
+void sub_8036934();
+void sub_8036950();
+void sub_8036AA4();
+void sub_80369FC();
+void sub_8036A18();
+void sub_8036A34();
+void sub_8036A7C();
+void sub_8036A54();
+void sub_8036ADC();
+
+// 11 was another saving too?
+enum TradeItemsScreens
+{
+ TRADE_ITEMS_MAIN_MENU,
+ TRADE_ITEMS_SEND_ITEM,
+ TRADE_ITEMS_SEND_ITEM_SELECTION,
+ TRADE_ITEMS_SEND_ITEM_POPUP_MENU,
+ TRADE_ITEMS_SEND_ITEM_NUMBER,
+ TRADE_ITEMS_ITEM_INFO,
+ TRADE_ITEMS_SEND_ITEM_CONFIRM,
+ TRADE_ITEMS_RECEIVE_ITEM,
+ TRADE_ITEMS_IN_COMMUNICATION = 9,
+ TRADE_ITEMS_PREPARE_TRADE_SAVING = 15,
+ TRADE_ITEMS_EXIT = 18,
+};
+
+enum TradeItemsModes
+{
+ TRADE_ITEMS_SEND_ITEM_MODE,
+ TRADE_ITEMS_RECEIVE_ITEM_MODE
+};
+
+
+u32 CreateTradeItemsMenu(void)
+{
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gTradeItemsMenu = MemoryAlloc(sizeof(struct TradeItemsMenu), 8);
+ MemoryFill8((u8 *)gTradeItemsMenu, 0, sizeof(struct TradeItemsMenu));
+ sub_8035C1C();
+ sub_8035DA0();
+ gTradeItemsMenu->unk4 = 0x13;
+ SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU);
+ return 1;
+}
+
+u32 UpdateTradeItemsMenu(void)
+{
+
+ switch(gTradeItemsMenu->currMenu) {
+ case TRADE_ITEMS_MAIN_MENU:
+ sub_803652C();
+ break;
+ case TRADE_ITEMS_SEND_ITEM:
+ sub_8036590();
+ break;
+ case TRADE_ITEMS_SEND_ITEM_SELECTION:
+ sub_80365AC();
+ break;
+ case TRADE_ITEMS_SEND_ITEM_POPUP_MENU:
+ sub_8036674();
+ break;
+ case TRADE_ITEMS_ITEM_INFO:
+ sub_8036728();
+ break;
+ case TRADE_ITEMS_SEND_ITEM_NUMBER:
+ sub_8036788();
+ break;
+ case TRADE_ITEMS_SEND_ITEM_CONFIRM:
+ sub_8036830();
+ break;
+ case TRADE_ITEMS_RECEIVE_ITEM:
+ sub_803689C();
+ break;
+ case 8:
+ sub_80368D4();
+ break;
+ case TRADE_ITEMS_PREPARE_TRADE_SAVING:
+ sub_8036A7C();
+ break;
+ case TRADE_ITEMS_IN_COMMUNICATION:
+ sub_8036934();
+ break;
+ case 10:
+ sub_8036950();
+ break;
+ case 0xb:
+ sub_8036AA4();
+ break;
+ case 0xc:
+ sub_80369FC();
+ break;
+ case 0xe:
+ sub_8036A34();
+ break;
+ case 0x10:
+ sub_8036A54();
+ break;
+ case 0xd:
+ sub_8036A18();
+ break;
+ case 0x11:
+ sub_8036ADC();
+ break;
+ case TRADE_ITEMS_EXIT: // when you exit the menu to Main
+ return 3;
+ }
+ return 0;
+}
+
+void sub_803652C(void)
+{
+ s32 menuAction;
+
+ if (sub_80144A4(&menuAction) == 0) {
+ switch(menuAction)
+ {
+ case 1:
+ // Send Item
+ gTradeItemsMenu->itemMode = TRADE_ITEMS_SEND_ITEM_MODE;
+ gTradeItemsMenu->unk10 = 1;
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM);
+ break;
+ case 2:
+ // Receive Item
+ gTradeItemsMenu->itemMode = TRADE_ITEMS_RECEIVE_ITEM_MODE;
+ gTradeItemsMenu->unk10 = 2;
+ SetTradeItemMenu(TRADE_ITEMS_RECEIVE_ITEM);
+ break;
+ case 0:
+ case 7:
+ // Cancel
+ SetTradeItemMenu(TRADE_ITEMS_EXIT);
+ }
+ }
+}
+
+void sub_8036590(void)
+{
+ s32 iVar1;
+
+ if (sub_80144A4(&iVar1) == 0)
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_SELECTION);
+}
+
+void sub_80365AC(void)
+{
+ gTradeItemsMenu->unk25E = 0;
+ gTradeItemsMenu->unk25D = 1;
+ gTradeItemsMenu->unk25C = 0;
+ switch(sub_801CA08(1)){
+ case 2:
+ // Cancel
+ sub_801CBB8();
+ SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU);
+ break;
+ case 3:
+ // Pop up menu with Confirm, Info, Cancel
+ gTradeItemsMenu->unk25E = sub_801CB24();
+ gTradeItemsMenu->unk25D = 1;
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU);
+ break;
+ case 4:
+ gTradeItemsMenu->unk4 = 2;
+ gTradeItemsMenu->unk25E = sub_801CB24();
+ gTradeItemsMenu->unk25D = 1;
+ sub_8006518(&gTradeItemsMenu->unk1E4);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gTradeItemsMenu->unk25C);
+ SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
+ break;
+ }
+}
+
+void sub_8036674(void)
+{
+ int menuAction;
+
+ menuAction = -1;
+ sub_801CA08(0);
+ if (sub_8012FD8(&gTradeItemsMenu->unk134) == '\0') {
+ sub_8013114(&gTradeItemsMenu->unk134, &menuAction);
+ }
+ switch(menuAction){
+ case 3: // confirm
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_NUMBER);
+ break;
+ case 4: // Info
+ gTradeItemsMenu->unk4 = 0x13;
+ sub_8006518(&gTradeItemsMenu->unk1E4);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gTradeItemsMenu->unk25C);
+ SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
+ break;
+ case 7:
+ case 0:
+ // Cancel
+ sub_8035CC0(gTradeItemsMenu->unk184, 3);
+ sub_801CCD8();
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_SELECTION);
+ break;
+ }
+}
+
+void sub_8036728(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ ResetUnusedInputStruct();
+ sub_800641C(&gTradeItemsMenu->unk1E4, 1, 1);
+ sub_801CB5C(1);
+ if (gTradeItemsMenu->unk4 == 0x13) {
+ sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1);
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU);
+ }
+ else {
+ SetTradeItemMenu(gTradeItemsMenu->unk4);
+ }
+ default:
+ case 1:
+ break;
+ }
+}
+
+void sub_8036788(void)
+{
+ sub_8012FD8(&gTradeItemsMenu->unk134);
+ sub_801CA08(0);
+ switch(sub_8013BBC(&gTradeItemsMenu->unk14)){
+ case 1:
+ // When you change the #
+ sub_801CCD8();
+ sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0);
+ sub_8036F30();
+ break;
+ case 2:
+ // If you back out of the # selection
+ sub_8035CC0(gTradeItemsMenu->unk184, 2);
+ sub_801CCD8();
+ sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1);
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU);
+ break;
+ case 3:
+ // Confirm # of item
+ gTradeItemsMenu->unk25D = gTradeItemsMenu->unk14;
+ gTradeItemsMenu->unk254.unk0 = gTradeItemsMenu->unk25E;
+ gTradeItemsMenu->unk254.unk4 = gTradeItemsMenu->unk14;
+ sub_801CBB8();
+ SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM);
+ break;
+ case 0:
+ break;
+ }
+}
+
+void sub_8036830(void)
+{
+ int menuAction;
+ u16 load;
+
+ if (sub_80144A4(&menuAction) == 0)
+ {
+ switch(menuAction){
+ case 5:
+ sub_801CBB8();
+ // Used temp var to get correct statements
+ load = gUnknown_203B460->unk50[gTradeItemsMenu->unk25E];
+ load -= gTradeItemsMenu->unk14;
+ gUnknown_203B460->unk50[gTradeItemsMenu->unk25E] = load;
+ SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING);
+ sub_8012574(0);
+ break;
+ case 6:
+ case 0:
+ SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_803689C(void)
+{
+ int menuAction;
+
+ if (sub_80144A4(&menuAction) == 0) {
+ switch(menuAction){
+ case 5:
+ SetTradeItemMenu(TRADE_ITEMS_IN_COMMUNICATION);
+ break;
+ case 7:
+ case 0:
+ SetTradeItemMenu(TRADE_ITEMS_EXIT);
+ break;
+ }
+ }
+}
+
+void sub_80368D4(void)
+{
+ int menuAction;
+
+ if (sub_80144A4(&menuAction) == 0) {
+ switch(menuAction){
+ case 5:
+ SetTradeItemMenu(TRADE_ITEMS_IN_COMMUNICATION);
+ break;
+ case 7:
+ case 0:
+ if ((gTradeItemsMenu->unk254.unk0 != 0) && (gTradeItemsMenu->unk254.unk4 != 0))
+ {
+ sub_80369D0();
+ SetTradeItemMenu(0x11);
+ sub_8012574(0);
+ }
+ break;
+ }
+ }
+}
+
+void sub_8036934(void)
+{
+ s32 iVar1;
+
+ if (sub_80144A4(&iVar1) == 0) {
+ SetTradeItemMenu(10);
+ }
+}
+
+void sub_8036950(void)
+{
+ s32 iVar1;
+
+ if (sub_80144A4(&iVar1) == 0) {
+ if (gTradeItemsMenu->linkStatus == 0) {
+ switch(gTradeItemsMenu->itemMode){
+ case TRADE_ITEMS_SEND_ITEM_MODE:
+ SetTradeItemMenu(0xd);
+ break;
+ case TRADE_ITEMS_RECEIVE_ITEM_MODE:
+ SetTradeItemMenu(0xe);
+ break;
+ default:
+ break;
+ }
+ }
+ else {
+ if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->unk254.unk0 != 0))
+ && (gTradeItemsMenu->unk254.unk4 != 0)) {
+ // Link Failure
+ sub_80369D0(); // Add back the item
+ SetTradeItemMenu(0xb);
+ sub_8012574(0);
+ }
+ else {
+ PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus);
+ SetTradeItemMenu(0xc);
+ }
+ }
+ }
+}
+
+void sub_80369D0(void)
+{
+ // Use temp var to get correct statements
+ u16 load;
+ load = gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0];
+ load += gTradeItemsMenu->unk254.unk4;
+ gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0] = load;
+}
+
+void sub_80369FC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU);
+ }
+}
+
+
+void sub_8036A18(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetTradeItemMenu(TRADE_ITEMS_EXIT);
+ }
+}
+
+void sub_8036A34(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetTradeItemMenu(0x10);
+ sub_8012574(0);
+ }
+}
+
+void sub_8036A54(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ if(sub_8012600() == 0)
+ {
+ sub_8012750();
+ SetTradeItemMenu(TRADE_ITEMS_EXIT);
+ }
+ }
+}
+
+void sub_8036A7C(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ if(sub_8012600() == 0)
+ {
+ sub_8012750(); // cleans up from Save Message
+ SetTradeItemMenu(0x8);
+ }
+ }
+}
+
+void sub_8036AA4(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ if(sub_8012600() == 0)
+ {
+ sub_8012750();
+ PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus);
+ SetTradeItemMenu(0xC);
+ }
+ }
+}
+
+void sub_8036ADC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ if(sub_8012600() == 0)
+ {
+ sub_8012750();
+ SetTradeItemMenu(TRADE_ITEMS_EXIT);
+ }
+ }
+}
+
+void CleanTradeItemsMenu(void)
+{
+ if(gTradeItemsMenu != NULL)
+ {
+ MemoryFree(gTradeItemsMenu);
+ gTradeItemsMenu = NULL;
+ sub_801CBB8();
+ }
+}
+
+void nullsub_52(void)
+{
+}
+
+#ifdef NONMATCHING
+void sub_8036B28(void)
+{
+ int iVar3;
+ u32 uVar4;
+ s32 local_10;
+ u32 load_1;
+ u32 load_2;
+ struct TradeSubStruct *temp;
+ struct TradeSubStruct *temp2;
+
+ switch(gTradeItemsMenu->currMenu) {
+ case 0:
+ if (sub_801CF14(0) != '\0') {
+ sub_8014248(&gUnknown_80E61A4,0,1,&gUnknown_80E60D4,0,4,0,0,0x101);
+ }
+ else {
+ sub_8014248(&gUnknown_80E61A4,0,1,&gUnknown_80E60A0,0,4,0,0,0x101);
+ }
+ break;
+ case 1:
+ sub_80141B4(&gUnknown_80E61C0,0,0,0x101);
+ break;
+ case 2:
+ if (sub_801D008() == 0) {
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ local_10 = 0x20003;
+ sub_801C8C4(0,1,&local_10,9);
+ }
+ break;
+ case 3:
+ sub_8006518(gTradeItemsMenu->unk184);
+ SetMenuItems(&gTradeItemsMenu->unk44,gTradeItemsMenu->unk184,3,&gUnknown_80E60EC,
+ &gUnknown_80E6104,1,0,0);
+ sub_801CCD8();
+ sub_8035CF4(&gTradeItemsMenu->unk44,3,1);
+ break;
+ case 4:
+ sub_8036F74();
+ break;
+ case 6:
+ gUnknown_202DE30 = gTradeItemsMenu->unk14;
+ sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0);
+ sub_8014248(&gUnknown_80E61E4,0,5, &gUnknown_80E6154,0,4,0,0,0x101);
+ break;
+ case 7:
+ sub_8014248(&gUnknown_80E6214,0,5,&gUnknown_80E618C,0,4,0,0,0x101);
+ break;
+ case 8:
+ sub_8014248(&gUnknown_80E6268,0,5,&gUnknown_80E618C,0,4,0,0,0x101);
+ break;
+ case 9:
+ nullsub_23(0);
+ sub_80141B4(&gUnknown_80E62C4,0,0,0);
+ break;
+ case 10:
+ gTradeItemsMenu->linkStatus = 0;
+ // TODO
+ // Regs mess up here
+ // Needs a mov r2, 0
+ // and mov r3, 0
+ temp = &gTradeItemsMenu->unk244;
+ temp->unk0 = 0;
+ temp->unk4 = 0;
+
+ temp += 1; // move to unk24C
+
+ temp->unk0 = 0;
+ temp->unk4 = 0;
+ // Regs are fixed back up after
+
+ sub_8011830();
+ iVar3 = sub_8037B28(gTradeItemsMenu->itemMode);
+ gTradeItemsMenu->linkStatus = iVar3;
+ if(iVar3 == 0){
+ switch(gTradeItemsMenu->itemMode){
+ // Fallthrough needed on each case
+ case TRADE_ITEMS_SEND_ITEM_MODE:
+ temp = &gTradeItemsMenu->unk244;
+ temp2 = &gTradeItemsMenu->unk254;
+ load_2 = temp2->unk4;
+ temp->unk0 = temp2->unk0;
+ temp->unk4 = load_2;
+ case TRADE_ITEMS_RECEIVE_ITEM_MODE:
+ gTradeItemsMenu->linkStatus = sub_8037D64(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C);
+ default:
+ break;
+ }
+ }
+ // Needed this check for code generation
+ if(gTradeItemsMenu->linkStatus == 0 && gTradeItemsMenu->itemMode <= 1){
+ gTradeItemsMenu->linkStatus = sub_80381F4(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C);
+ }
+ xxx_call_start_bg_music();
+ break;
+ case 0xe:
+ if (gTradeItemsMenu->unk24C.unk4 == 0) {
+ gUnknown_202DE30 = gTradeItemsMenu->unk244.unk4;
+ // Cast is needed
+ sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.unk0,0);
+ }
+ else {
+ gUnknown_202DE30 = gTradeItemsMenu->unk24C.unk4;
+ // Cast is needed
+ sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.unk0,0);
+ }
+ sub_80141B4(&gUnknown_80E6314,0,0,0x101);
+ break;
+ case 0xd:
+ gUnknown_202DE30 = gTradeItemsMenu->unk14;
+ sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0);
+ sub_80141B4(&gUnknown_80E6358,0,0,0x101);
+ break;
+ case 0xB:
+ case 0xC:
+ case 0xF:
+ case 0x10:
+ case 0x11:
+ case 0x12:
+ default:
+ break;
+ }
+}
+#else
+NAKED
+void sub_8036B28(void)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tsub sp, 0x18\n"
+ "\tldr r1, _08036B44\n"
+ "\tldr r0, [r1]\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r5, r1, 0\n"
+ "\tcmp r0, 0x12\n"
+ "\tbls _08036B3A\n"
+ "\tb _08036DFA\n"
+"_08036B3A:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _08036B48\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+"_08036B44: .4byte gTradeItemsMenu\n"
+"_08036B48: .4byte _08036B4C\n"
+ "\t.align 2, 0\n"
+"_08036B4C:\n"
+ "\t.4byte _08036B98\n"
+ "\t.4byte _08036BDC\n"
+ "\t.4byte _08036BE4\n"
+ "\t.4byte _08036C14\n"
+ "\t.4byte _08036C58\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036C5E\n"
+ "\t.4byte _08036C90\n"
+ "\t.4byte _08036C98\n"
+ "\t.4byte _08036CC0\n"
+ "\t.4byte _08036CD8\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036DD8\n"
+ "\t.4byte _08036D70\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036DFA\n"
+ "\t.4byte _08036DFA\n"
+"_08036B98:\n"
+ "\tmovs r0, 0\n"
+ "\tbl sub_801CF14\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r2, r0, 24\n"
+ "\tcmp r2, 0\n"
+ "\tbeq _08036BB8\n"
+ "\tldr r0, _08036BB0\n"
+ "\tldr r3, _08036BB4\n"
+ "\tmovs r2, 0\n"
+ "\tb _08036BBC\n"
+ "\t.align 2, 0\n"
+"_08036BB0: .4byte gUnknown_80E61A4\n"
+"_08036BB4: .4byte gUnknown_80E60D4\n"
+"_08036BB8:\n"
+ "\tldr r0, _08036BD4\n"
+ "\tldr r3, _08036BD8\n"
+"_08036BBC:\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tadds r1, 0xFD\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_8014248\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036BD4: .4byte gUnknown_80E61A4\n"
+"_08036BD8: .4byte gUnknown_80E60A0\n"
+"_08036BDC:\n"
+ "\tldr r0, _08036BE0\n"
+ "\tb _08036DBA\n"
+ "\t.align 2, 0\n"
+"_08036BE0: .4byte gUnknown_80E61C0\n"
+"_08036BE4:\n"
+ "\tbl sub_801D008\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08036BEE\n"
+ "\tb _08036DFA\n"
+"_08036BEE:\n"
+ "\tbl ResetUnusedInputStruct\n"
+ "\tmovs r0, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_800641C\n"
+ "\tldr r0, _08036C10\n"
+ "\tstr r0, [sp, 0x14]\n"
+ "\tmovs r0, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tmovs r3, 0x9\n"
+ "\tbl sub_801C8C4\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036C10: .4byte 0x00020003\n"
+"_08036C14:\n"
+ "\tldr r0, [r5]\n"
+ "\tmovs r4, 0xC2\n"
+ "\tlsls r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tbl sub_8006518\n"
+ "\tldr r1, [r5]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x44\n"
+ "\tadds r1, r4\n"
+ "\tldr r3, _08036C50\n"
+ "\tldr r2, _08036C54\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r2, 0x1\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tmovs r2, 0\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tmovs r2, 0x3\n"
+ "\tbl SetMenuItems\n"
+ "\tbl sub_801CCD8\n"
+ "\tldr r0, [r5]\n"
+ "\tadds r0, 0x44\n"
+ "\tmovs r1, 0x3\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_8035CF4\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036C50: .4byte gUnknown_80E60EC\n"
+"_08036C54: .4byte gUnknown_80E6104\n"
+"_08036C58:\n"
+ "\tbl sub_8036F74\n"
+ "\tb _08036DFA\n"
+"_08036C5E:\n"
+ "\tldr r2, _08036C7C\n"
+ "\tldr r1, [r5]\n"
+ "\tldr r0, [r1, 0x14]\n"
+ "\tstr r0, [r2]\n"
+ "\tldr r0, _08036C80\n"
+ "\tldr r2, _08036C84\n"
+ "\tadds r1, r2\n"
+ "\tldrb r1, [r1]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8090DC4\n"
+ "\tldr r0, _08036C88\n"
+ "\tldr r3, _08036C8C\n"
+ "\tb _08036C9C\n"
+ "\t.align 2, 0\n"
+"_08036C7C: .4byte gUnknown_202DE30\n"
+"_08036C80: .4byte gUnknown_202DE58\n"
+"_08036C84: .4byte 0x0000025e\n"
+"_08036C88: .4byte gUnknown_80E61E4\n"
+"_08036C8C: .4byte gUnknown_80E6154\n"
+"_08036C90:\n"
+ "\tldr r0, _08036C94\n"
+ "\tb _08036C9A\n"
+ "\t.align 2, 0\n"
+"_08036C94: .4byte gUnknown_80E6214\n"
+"_08036C98:\n"
+ "\tldr r0, _08036CB8\n"
+"_08036C9A:\n"
+ "\tldr r3, _08036CBC\n"
+"_08036C9C:\n"
+ "\tmovs r2, 0\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tadds r1, 0xFD\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x5\n"
+ "\tbl sub_8014248\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036CB8: .4byte gUnknown_80E6268\n"
+"_08036CBC: .4byte gUnknown_80E618C\n"
+"_08036CC0:\n"
+ "\tmovs r0, 0\n"
+ "\tbl nullsub_23\n"
+ "\tldr r0, _08036CD4\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0\n"
+ "\tbl sub_80141B4\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036CD4: .4byte gUnknown_80E62C4\n"
+"_08036CD8:\n"
+ "\tldr r4, _08036D18\n"
+ "\tldr r1, [r4]\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [r1, 0xC]\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r5, 0x91\n"
+ "\tlsls r5, 2\n"
+ "\tadds r0, r1, r5\n"
+ "\tstr r2, [r0]\n"
+ "\tstr r3, [r0, 0x4]\n"
+ "\tmovs r0, 0x93\n"
+ "\tlsls r0, 2\n"
+ "\tadds r1, r0\n"
+ "\tstr r2, [r1]\n"
+ "\tstr r3, [r1, 0x4]\n"
+ "\tbl sub_8011830\n"
+ "\tldr r0, [r4]\n"
+ "\tldr r0, [r0, 0x8]\n"
+ "\tbl sub_8037B28\n"
+ "\tldr r4, [r4]\n"
+ "\tstr r0, [r4, 0xC]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08036D44\n"
+ "\tldr r0, [r4, 0x8]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08036D1C\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08036D2C\n"
+ "\tb _08036D44\n"
+ "\t.align 2, 0\n"
+"_08036D18: .4byte gTradeItemsMenu\n"
+"_08036D1C:\n"
+ "\tadds r2, r4, r5\n"
+ "\tmovs r1, 0x95\n"
+ "\tlsls r1, 2\n"
+ "\tadds r0, r4, r1\n"
+ "\tldr r1, [r0, 0x4]\n"
+ "\tldr r0, [r0]\n"
+ "\tstr r0, [r2]\n"
+ "\tstr r1, [r2, 0x4]\n"
+"_08036D2C:\n"
+ "\tldr r4, _08036D6C\n"
+ "\tldr r2, [r4]\n"
+ "\tldr r0, [r2, 0x8]\n"
+ "\tmovs r3, 0x91\n"
+ "\tlsls r3, 2\n"
+ "\tadds r1, r2, r3\n"
+ "\tadds r3, 0x8\n"
+ "\tadds r2, r3\n"
+ "\tbl sub_8037D64\n"
+ "\tldr r1, [r4]\n"
+ "\tstr r0, [r1, 0xC]\n"
+"_08036D44:\n"
+ "\tldr r4, _08036D6C\n"
+ "\tldr r2, [r4]\n"
+ "\tldr r0, [r2, 0xC]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08036D66\n"
+ "\tldr r0, [r2, 0x8]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbhi _08036D66\n"
+ "\tmovs r3, 0x91\n"
+ "\tlsls r3, 2\n"
+ "\tadds r1, r2, r3\n"
+ "\tadds r3, 0x8\n"
+ "\tadds r2, r3\n"
+ "\tbl sub_80381F4\n"
+ "\tldr r1, [r4]\n"
+ "\tstr r0, [r1, 0xC]\n"
+"_08036D66:\n"
+ "\tbl xxx_call_start_bg_music\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036D6C: .4byte gTradeItemsMenu\n"
+"_08036D70:\n"
+ "\tldr r2, [r5]\n"
+ "\tmovs r1, 0x94\n"
+ "\tlsls r1, 2\n"
+ "\tadds r0, r2, r1\n"
+ "\tldr r1, [r0]\n"
+ "\tcmp r1, 0\n"
+ "\tbne _08036DA4\n"
+ "\tldr r1, _08036D9C\n"
+ "\tmovs r3, 0x92\n"
+ "\tlsls r3, 2\n"
+ "\tadds r0, r2, r3\n"
+ "\tldr r0, [r0]\n"
+ "\tstr r0, [r1]\n"
+ "\tldr r0, _08036DA0\n"
+ "\tsubs r3, 0x4\n"
+ "\tadds r1, r2, r3\n"
+ "\tldrb r1, [r1]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8090DC4\n"
+ "\tb _08036DB8\n"
+ "\t.align 2, 0\n"
+"_08036D9C: .4byte gUnknown_202DE30\n"
+"_08036DA0: .4byte gUnknown_202DE58\n"
+"_08036DA4:\n"
+ "\tldr r0, _08036DC8\n"
+ "\tstr r1, [r0]\n"
+ "\tldr r0, _08036DCC\n"
+ "\tmovs r3, 0x93\n"
+ "\tlsls r3, 2\n"
+ "\tadds r1, r2, r3\n"
+ "\tldrb r1, [r1]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8090DC4\n"
+"_08036DB8:\n"
+ "\tldr r0, _08036DD0\n"
+"_08036DBA:\n"
+ "\tldr r3, _08036DD4\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_80141B4\n"
+ "\tb _08036DFA\n"
+ "\t.align 2, 0\n"
+"_08036DC8: .4byte gUnknown_202DE30\n"
+"_08036DCC: .4byte gUnknown_202DE58\n"
+"_08036DD0: .4byte gUnknown_80E6314\n"
+"_08036DD4: .4byte 0x00000101\n"
+"_08036DD8:\n"
+ "\tldr r2, _08036E04\n"
+ "\tldr r1, [r5]\n"
+ "\tldr r0, [r1, 0x14]\n"
+ "\tstr r0, [r2]\n"
+ "\tldr r0, _08036E08\n"
+ "\tldr r2, _08036E0C\n"
+ "\tadds r1, r2\n"
+ "\tldrb r1, [r1]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8090DC4\n"
+ "\tldr r0, _08036E10\n"
+ "\tldr r3, _08036E14\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_80141B4\n"
+"_08036DFA:\n"
+ "\tadd sp, 0x18\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_08036E04: .4byte gUnknown_202DE30\n"
+"_08036E08: .4byte gUnknown_202DE58\n"
+"_08036E0C: .4byte 0x0000025e\n"
+"_08036E10: .4byte gUnknown_80E6358\n"
+"_08036E14: .4byte 0x00000101");
+}
+#endif
+
+void PrintTradeItemsLinkError(u32 errorNum)
+{
+ switch(errorNum) {
+ case 0:
+ break;
+ case 1:
+ sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101);
+ break;
+ case 3:
+ sub_80141B4(&gUnknown_80E639C, 0, 0, 0x101);
+ break;
+ case 2:
+ sub_80141B4(&gUnknown_80E63F8, 0, 0, 0x101);
+ break;
+ case 4:
+ sub_80141B4(&gUnknown_80E6448, 0, 0, 0x101);
+ break;
+ case 5:
+ sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101);
+ break;
+ case 0xe:
+ sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101);
+ break;
+ case 0xf:
+ sub_80141B4(&gUnknown_80E64AC, 0, 0, 0x101);
+ break;
+ default:
+ case 0x6:
+ case 0x7:
+ case 0x8:
+ case 0x9:
+ case 0xA:
+ case 0xB:
+ case 0xC:
+ case 0xD:
+ sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101);
+ break;
+ }
+}
+
+void sub_8036ECC(u32 index, u32 r1)
+{
+ gTradeItemsMenu->unk24 = 3;
+ gTradeItemsMenu->unk18 = 1;
+ gTradeItemsMenu->unk1C = 1;
+ gTradeItemsMenu->unk20 = r1;
+ gTradeItemsMenu->unk30 = 0x2c;
+ gTradeItemsMenu->unk34 = 0x12;
+ gTradeItemsMenu->unk28 = index;
+ gTradeItemsMenu->unk2C = &gTradeItemsMenu->unk184[index];
+ sub_8013AA0(&gTradeItemsMenu->unk14);
+ gTradeItemsMenu->unk184[index] = gUnknown_80E6174;
+ ResetUnusedInputStruct();
+ sub_800641C((u32 *)&gTradeItemsMenu->unk184, 1, 1);
+}
+
+void sub_8036F30(void)
+{
+ u32 uVar1;
+
+ uVar1 = gTradeItemsMenu->unk28;
+ sub_8008C54(uVar1);
+ sub_80073B8(uVar1);
+ // Draw "How many?"
+ xxx_call_draw_string(2, 0, &gTradeItemsHowManyText, uVar1, 0);
+ sub_8013C68(&gTradeItemsMenu->unk14);
+ sub_80073E0(uVar1);
+}
+
+void sub_8036F74(void)
+{
+ sub_8006518((u32 *)&gTradeItemsMenu->unk184);
+ sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->unk25E]);
+ sub_801CCD8();
+ sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0);
+ sub_8036F30();
+}
+
+void SetTradeItemMenu(u32 newMenu)
+{
+ gTradeItemsMenu->currMenu = newMenu;
+ nullsub_52();
+ sub_8036B28();
+}
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index d4b7196..da8f44c 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -3,37 +3,7 @@
#include "pokemon.h"
#include "file_system.h"
#include "constants/species.h"
-
-// Wonder Mail Related
-struct WonderMailStruct_203B2C0
-{
- // size: 0x548
- u32 unk0;
- u32 unk4;
- u8 unk8[0x38];
- u32 unk40;
- u32 unk44;
- u16 unk48[232];
- u8 unk218;
- u8 padding7[3];
- u32 unk21C;
- u8 padding[0x7C];
- u32 unk29C;
- u8 padding6[0x6C];
- u32 unk30C;
- u8 padding8[0x4C];
- u32 unk35C;
- u8 padding5[0x5C];
- u32 unk3BC;
- u8 padding4[0x60];
- u32 unk420; // Is this supposed to be a File like 203B2C4?
- u8 padding3[0x110];
- u32 unk534;
- s32 unk538; // A7 << 3
- u32 unk53C;
- u32 unk540; // A8 << 4
- s16 unk544;
-};
+#include "wonder_mail.h"
struct unkStruct_203B2C4
{
@@ -44,7 +14,7 @@ struct unkStruct_203B2C4
u8 unk8[0x36]; // Probably a buffer for entry
u8 unk3E;
u32 unk40;
- u32 unk44; // another link status
+ u32 linkError; // another link status
u8 filler48[0x218 - 0x48];
s8 unk218;
u32 unk21C;
@@ -246,43 +216,43 @@ void sub_8028B1C(u32 r0)
break;
case 1:
case 2:
- sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 3:
- sub_80141B4(gWonderMailNumGBAsText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailNumGBAsText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 4:
- sub_80141B4(gWonderMailWrongModeText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailWrongModeText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 5:
- sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 6:
- sub_80141B4(gWonderMailStorageFullText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailStorageFullText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 7:
- sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailDuplicateText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 8:
break;
case 9:
- sub_80141B4(gWonderMailNotEligibleReceiveText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailNotEligibleReceiveText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 10:
break;
case 11:
- sub_80141B4(gWonderMailNotEligibleReceiveText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailNotEligibleReceiveText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 12:
break;
case 13:
- sub_80141B4(gWonderMailNoRoomText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailNoRoomText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 14:
- sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
case 15:
- sub_80141B4(gWonderMailFriendErrorText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailFriendErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
break;
default:
break;
@@ -829,7 +799,7 @@ void sub_80292EC(void)
{
return;
}
- if(gUnknown_203B2C0->unk44 == 0)
+ if(gUnknown_203B2C0->linkError == 0)
{
switch(gUnknown_203B2C0->unk538)
{
@@ -843,7 +813,7 @@ void sub_80292EC(void)
}
else
{
- sub_8028B1C(gUnknown_203B2C0->unk44);
+ sub_8028B1C(gUnknown_203B2C0->linkError);
sub_8028B04(0x7);
}
}
@@ -939,15 +909,15 @@ void sub_80293F4(void)
case 9:
break;
case 10:
- sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->unk420, 0xC);
+ sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0xC);
sub_8028B04(0x28);
break;
case 11:
- sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
case 0:
- sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->unk420, 0x10d);
+ sub_80141B4(gWonderMailDuplicateText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
case 12:
@@ -958,7 +928,7 @@ void sub_80293F4(void)
sub_8095274(temp.unk10);
temp.unkArray[0] = 2; // Some sort of Ack?
sub_80951BC(temp.unkArray);
- sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->unk420, 0x101);
+ sub_80141B4(gWonderMailAOKMailReceivedText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x101);
sub_8028B04(0x23);
break;
case 16:
diff --git a/src/wonder_mail_mid.c b/src/wonder_mail_mid.c
index 0256019..62755b1 100644
--- a/src/wonder_mail_mid.c
+++ b/src/wonder_mail_mid.c
@@ -10,7 +10,7 @@ struct unkStruct_203B2C4
u8 unk8[0x36];
u8 unk3E;
u32 unk40;
- u32 unk44; // another link status
+ u32 linkError; // another link status
u8 filler48[0x218 - 0x48];
s8 unk218;
u32 unk21C;
@@ -94,7 +94,7 @@ void sub_8029F98(void)
gUnknown_203B2C4->unk41C[2] = 0;
gUnknown_203B2C4->unk41C[1] = 1;
gUnknown_203B2C4->unk41C[0] = 0;
- if (gUnknown_203B2C4->unk44 == 0) {
+ if (gUnknown_203B2C4->linkError == 0) {
switch(gUnknown_203B2C4->unk40)
{
case 6:
@@ -121,7 +121,7 @@ void sub_8029F98(void)
}
else
{
- PrintWonderMailLinkError(gUnknown_203B2C4->unk44);
+ PrintWonderMailLinkError(gUnknown_203B2C4->linkError);
sub_802B2BC(0x1F);
}
}
diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c
new file mode 100644
index 0000000..94ab51f
--- /dev/null
+++ b/src/wonder_mail_pre.c
@@ -0,0 +1,101 @@
+#include "global.h"
+#include "file_system.h"
+#include "input.h"
+#include "pokemon.h"
+#include "constants/species.h"
+#include "wonder_mail.h"
+
+
+extern void* MemoryAlloc(u32 a, u32 b);
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+extern char* GetMonSpecies(u32);
+extern void sub_800641C(void *r0, u8, u8);
+void sub_808D8E0(u8 *, u32);
+
+extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+
+extern void sub_8029B34();
+extern void sub_8029AD8();
+extern void sub_8029AF4();
+extern void sub_8029A88();
+extern void sub_8029AB0();
+extern void sub_80297B8();
+extern void sub_80297D4();
+extern void sub_8029884();
+extern void sub_8029944();
+extern void sub_80299AC();
+extern void sub_80299D8();
+extern void sub_8029A6C();
+extern void sub_8028CE0();
+extern void sub_8028BF0();
+extern void sub_8029A18();
+extern void sub_80295A8();
+extern void sub_8029668();
+extern void sub_8029684();
+extern void sub_8029740();
+extern void sub_80295D8();
+extern void sub_802979C();
+extern void sub_8029358();
+extern void sub_8029374();
+extern void sub_802939C();
+extern void sub_8028F58();
+extern void sub_8028F30();
+extern void sub_8028F04();
+extern void sub_8028ED4();
+extern void sub_80293D8();
+extern void sub_80293F4();
+extern void sub_8028DE8(u32);
+extern void sub_8028EAC();
+extern void sub_802955C();
+extern void sub_80292A4();
+extern void sub_80292EC();
+extern void sub_802933C();
+extern void sub_802958C();
+extern void sub_8029208();
+extern void sub_8028E84();
+extern void sub_8028F80();
+extern void sub_8028FC0();
+extern void sub_8028FDC();
+extern void sub_8028E54();
+extern void sub_8028E24();
+extern void sub_8028E08();
+extern void sub_80290D4();
+extern void sub_80290F0();
+extern void sub_80291AC();
+extern void sub_8029044();
+extern void sub_8028CFC();
+extern void sub_8028D4C();
+
+u32 sub_8027F88(void)
+{
+ char *monName;
+ struct OpenedFile *faceFile;
+ s32 counter;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+ gUnknown_203B2C0 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C0), 8);
+ MemoryFill8((u8 *)gUnknown_203B2C0, 0, sizeof(struct WonderMailStruct_203B2C0));
+ gUnknown_203B2C0->unk53C = 0;
+ gUnknown_203B2C0->unk218 = -1;
+ gUnknown_203B2C0->unk544 = -1;
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
+ gUnknown_203B2C0->faceFile = faceFile;
+ gUnknown_203B2C0->faceData = faceFile->data;
+ gUnknown_203B2C0->unk42C = 0;
+ gUnknown_203B2C0->unk42D = 0;
+ gUnknown_203B2C0->unk42E = 0;
+ gUnknown_203B2C0->unk428 = 2;
+ gUnknown_203B2C0->unk42A = 8;
+ for(counter = 0; counter < 0x36; counter++){
+ gUnknown_203B2C0->unk8[counter] = 0;
+ }
+ gUnknown_203B2C0->unk0 = 0x3D;
+ sub_8028B04(0); // Set initial state to 0?
+ return 1;
+}