From 9900ca5af2d9e3d081831fa6f1a2c8b6554ab970 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 21 Jan 2017 12:05:31 -0600 Subject: start decompiling battle_party_menu --- src/battle_party_menu.c | 169 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 src/battle_party_menu.c (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c new file mode 100644 index 000000000..33a44c345 --- /dev/null +++ b/src/battle_party_menu.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "pokemon.h" +#include "task.h" + +struct PartyMenuItem +{ + const u8 *text; + void (*func)(void); +}; + +struct UnknownStruct2 +{ + u8 unk0; + u8 unk1; + const u8 *unk4; +}; + +extern u8 IsLinkDoubleBattle(void); +extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); +extern void LoadHeldItemIconGraphics(void); +extern void CreateHeldItemIcons_806DC34(); +extern u8 sub_806BD58(u8, u8); +extern void PartyMenuPrintMonsLevelOrStatus(void); +extern void PrintPartyMenuMonNicknames(void); +extern void PartyMenuTryPrintMonsHP(void); +extern void nullsub_13(void); +extern void PartyMenuDrawHPBars(void); +extern u8 sub_806B58C(u8); +extern u8 GetItemEffectType(); +extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int); + +struct UnknownStruct1 +{ + u8 filler0[0x259]; + u8 unk259; + u8 filler25A[6]; + u8 unk260; + u8 filler261[3]; + s16 unk264; + s16 unk266; +}; + +extern u8 unk_2000000[]; + +#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) + +extern u16 gScriptItemId; +extern u8 gUnknown_02038473; +extern const struct PartyMenuItem gUnknown_083B5FCC[]; +extern const struct UnknownStruct2 gUnknown_083B5FF4[]; + +int SetUpBattlePartyMenu(void) +{ + switch (EWRAM_1B000.unk264) + { + case 0: + //TODO: try to get rid of this duplicate code + if (IsLinkDoubleBattle() == TRUE) + { + if (EWRAM_1B000.unk266 != 6) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + } + else + { + if (EWRAM_1B000.unk266 <= 5) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + { + EWRAM_1B000.unk266++; + } + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + PartyMenuTryPrintMonsHP(); + EWRAM_1B000.unk264++; + break; + case 7: + nullsub_13(); + EWRAM_1B000.unk264++; + break; + case 8: + PartyMenuDrawHPBars(); + EWRAM_1B000.unk264++; + break; + case 9: + if (sub_806B58C(EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + { + EWRAM_1B000.unk266++; + } + break; + case 10: + if (gUnknown_02038473 == 3) + { + if (GetItemEffectType(gScriptItemId) == 10) + EWRAM_1B000.unk259 = 0xFF; + else + EWRAM_1B000.unk259 = 3; + } + return TRUE; + } + return FALSE; +} + +void sub_8095050(u8 a, u8 b) +{ + if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) + { + if (gUnknown_02038473 == 1) + { + gTasks[EWRAM_1B000.unk260].data[4] = 1; + gTasks[EWRAM_1B000.unk260].data[5] = 1; + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 0; + gTasks[EWRAM_1B000.unk260].data[5] = 0; + } + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 2; + gTasks[EWRAM_1B000.unk260].data[5] = 2; + } + sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0); +} -- cgit v1.2.3 From a1f2856816f0114983bfd55975eca1d9d3072f61 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 21 Jan 2017 12:41:32 -0600 Subject: decompile more of battle_party_menu --- src/battle_party_menu.c | 273 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 199 insertions(+), 74 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 33a44c345..d8b5b48f3 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,6 +1,12 @@ #include "global.h" +#include "asm.h" +#include "main.h" +#include "palette.h" #include "pokemon.h" +#include "songs.h" +#include "sound.h" #include "task.h" +#include "text.h" struct PartyMenuItem { @@ -28,6 +34,13 @@ extern void PartyMenuDrawHPBars(void); extern u8 sub_806B58C(u8); extern u8 GetItemEffectType(); extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int); +extern u16 sub_806BD80(); +extern u8 sub_806CA38(); +extern void sub_806D5A4(void); +extern void sub_802E414(void); +extern void sub_8094D60(void); +extern void sub_80A6DCC(void); +extern void sub_806AF4C(); struct UnknownStruct1 { @@ -45,102 +58,111 @@ extern u8 unk_2000000[]; #define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) extern u16 gScriptItemId; +extern u8 gUnknown_0202E8F4; extern u8 gUnknown_02038473; +extern void (*gUnknown_03004AE4)(); //don't know types yet extern const struct PartyMenuItem gUnknown_083B5FCC[]; extern const struct UnknownStruct2 gUnknown_083B5FF4[]; +void sub_80952E4(u8); +void sub_8095408(u8); +void sub_809527C(u8); +void sub_80952B4(u8); +void sub_8095330(u8); +void sub_809538C(void); + int SetUpBattlePartyMenu(void) { switch (EWRAM_1B000.unk264) { - case 0: - //TODO: try to get rid of this duplicate code - if (IsLinkDoubleBattle() == TRUE) + case 0: + //TODO: try to get rid of this duplicate code + if (IsLinkDoubleBattle() == TRUE) + { + if (EWRAM_1B000.unk266 != 6) { - if (EWRAM_1B000.unk266 != 6) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; } else - { - if (EWRAM_1B000.unk266 <= 5) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) { EWRAM_1B000.unk266 = 0; EWRAM_1B000.unk264++; } - else + } + else + { + if (EWRAM_1B000.unk266 <= 5) { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); EWRAM_1B000.unk266++; } - break; - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - PartyMenuTryPrintMonsHP(); - EWRAM_1B000.unk264++; - break; - case 7: - nullsub_13(); - EWRAM_1B000.unk264++; - break; - case 8: - PartyMenuDrawHPBars(); - EWRAM_1B000.unk264++; - break; - case 9: - if (sub_806B58C(EWRAM_1B000.unk266) == 1) + else { EWRAM_1B000.unk266 = 0; EWRAM_1B000.unk264++; - } + } + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + { + EWRAM_1B000.unk266++; + } + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + PartyMenuTryPrintMonsHP(); + EWRAM_1B000.unk264++; + break; + case 7: + nullsub_13(); + EWRAM_1B000.unk264++; + break; + case 8: + PartyMenuDrawHPBars(); + EWRAM_1B000.unk264++; + break; + case 9: + if (sub_806B58C(EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + { + EWRAM_1B000.unk266++; + } + break; + case 10: + if (gUnknown_02038473 == 3) + { + if (GetItemEffectType(gScriptItemId) == 10) + EWRAM_1B000.unk259 = 0xFF; else - { - EWRAM_1B000.unk266++; - } - break; - case 10: - if (gUnknown_02038473 == 3) - { - if (GetItemEffectType(gScriptItemId) == 10) - EWRAM_1B000.unk259 = 0xFF; - else - EWRAM_1B000.unk259 = 3; - } - return TRUE; + EWRAM_1B000.unk259 = 3; + } + return TRUE; } return FALSE; } @@ -167,3 +189,106 @@ void sub_8095050(u8 a, u8 b) } sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0); } + +void SetUpBattlePokemonMenu(u8 a) +{ + if (!gPaletteFade.active) + { + if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) + { + gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + return; + } + + switch (sub_806BD80(a)) + { + case 1: + if (gUnknown_02038473 == 3) + { + if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) + { + PlaySE(SE_HAZURE); + } + else + { + sub_806D5A4(); + gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + } + } + else + { + PlaySE(SE_SELECT); + GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); + sub_8095050(a, sub_806CA38(a)); + SetTaskFuncWithFollowupFunc(a, sub_8095408, SetUpBattlePokemonMenu); + } + break; + case 2: + if (gUnknown_02038473 == 1) + { + PlaySE(SE_HAZURE); + } + else + { + PlaySE(SE_SELECT); + if (gUnknown_02038473 == 3) + { + gUnknown_0202E8F4 = 0; + gTasks[a].func = sub_80952E4; + } + else + { + gUnknown_0202E8F4 = 0; + gTasks[a].func = sub_809527C; + } + } + break; + } + } +} + +void sub_809527C(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_80952B4; +} + +void sub_80952B4(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_8094D60(); + DestroyTask(taskId); + SetMainCallback2(sub_802E414); + } +} + +void sub_80952E4(u8 taskId) +{ + if (gUnknown_0202E8F4 != 0) + { + sub_809527C(taskId); + } + else + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8095330; + } +} + +void sub_8095330(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_8094D60(); + DestroyTask(taskId); + sub_80A6DCC(); + } +} + +void sub_809535C(u8 taskId) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); + SetMainCallback2(sub_809538C); +} -- cgit v1.2.3 From 8a5ada74a110cead46fbd1b090f4e925d7f3f66d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 21 Jan 2017 15:50:12 -0600 Subject: finish decompiling battle_party_menu --- src/battle_party_menu.c | 296 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 257 insertions(+), 39 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index d8b5b48f3..2d6399b8a 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,20 +1,22 @@ #include "global.h" #include "asm.h" #include "main.h" +#include "menu.h" #include "palette.h" #include "pokemon.h" #include "songs.h" #include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" struct PartyMenuItem { const u8 *text; - void (*func)(void); + TaskFunc func; }; -struct UnknownStruct2 +struct PartyPopupMenu { u8 unk0; u8 unk1; @@ -33,7 +35,7 @@ extern void nullsub_13(void); extern void PartyMenuDrawHPBars(void); extern u8 sub_806B58C(u8); extern u8 GetItemEffectType(); -extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int); +extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); extern u16 sub_806BD80(); extern u8 sub_806CA38(); extern void sub_806D5A4(void); @@ -41,6 +43,22 @@ extern void sub_802E414(void); extern void sub_8094D60(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); +extern u8 sub_80F9344(void); +extern u8 sub_806B124(void); +extern void sub_806C994(); +extern void sub_806BF74(); +extern void sub_806AEDC(void); +extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); +extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); +extern void sub_806E7D0(u8, const struct PartyPopupMenu *); +extern u8 *sub_8040D08(); +extern void sub_806E834(); +extern u8 sub_8094C20(); +extern void sub_8040B8C(void); +extern u8 pokemon_order_func(u8); +extern void sub_8094C98(u8, u8); +extern void sub_806E6F0(); +extern void sub_806D538(); struct UnknownStruct1 { @@ -48,28 +66,65 @@ struct UnknownStruct1 u8 unk259; u8 filler25A[6]; u8 unk260; - u8 filler261[3]; + u8 filler261[1]; + u8 unk262; s16 unk264; s16 unk266; }; extern u8 unk_2000000[]; +#define EWRAM_1609D unk_2000000[0x1609D] #define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) extern u16 gScriptItemId; +extern u8 gPlayerPartyCount; +extern u8 gUnknown_02024A68; +extern u16 gUnknown_02024A6A[]; +extern u8 gUnknown_02024E6C; extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_0202E8F6; extern u8 gUnknown_02038473; +extern u8 gUnknown_020384F0; extern void (*gUnknown_03004AE4)(); //don't know types yet -extern const struct PartyMenuItem gUnknown_083B5FCC[]; -extern const struct UnknownStruct2 gUnknown_083B5FF4[]; +extern const u8 gOtherText_CantSwitchPokeWithYours[]; +extern const u8 gOtherText_NoEnergyLeft[]; +extern const u8 gOtherText_EGGCantBattle[]; +extern const u8 gOtherText_AlreadySelected[]; +extern const u8 gOtherText_CantBeSwitched[]; +extern const u8 gOtherText_AlreadyBattle[]; +extern const u8 OtherText_Summary[]; +extern const u8 gOtherText_CancelNoTerminator[]; +extern const u8 OtherText_Shift[]; +extern const u8 OtherText_SendOut[]; -void sub_80952E4(u8); -void sub_8095408(u8); -void sub_809527C(u8); -void sub_80952B4(u8); -void sub_8095330(u8); -void sub_809538C(void); +static void Task_809527C(u8); +static void Task_80952B4(u8); +static void Task_80952E4(u8); +static void Task_8095330(u8); +static void Task_809538C(void); +static void Task_HandlePopupMenuInput(u8); +static void Task_BattlePartyMenuSummary(u8 taskId); +static void Task_BattlePartyMenuShift(u8 taskId); +static void Task_BattlePartyMenuCancel(u8 taskId); + +static const struct PartyMenuItem sBattlePartyMenuActions[] = +{ + {OtherText_Summary, Task_BattlePartyMenuSummary}, + {gOtherText_CancelNoTerminator, Task_BattlePartyMenuCancel}, + {OtherText_Shift, Task_BattlePartyMenuShift}, + {OtherText_SendOut, Task_BattlePartyMenuShift}, +}; +static const u8 Unknown_83B5FEC[] = {2, 0, 1}; //SHIFT, SUMMARY, CANCEL +static const u8 Unknown_83B5FEF[] = {3, 0, 1}; //SEND OUT, SUMMARY, CANCEL +static const u8 Unknown_83B5FF2[] = {0, 1}; //SUMMARY, CANCEL +static const struct PartyPopupMenu sBattlePartyPopupMenus[] = +{ + {ARRAY_COUNT(Unknown_83B5FEC), 9, Unknown_83B5FEC}, + {ARRAY_COUNT(Unknown_83B5FEF), 9, Unknown_83B5FEF}, + {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, +}; int SetUpBattlePartyMenu(void) { @@ -92,7 +147,7 @@ int SetUpBattlePartyMenu(void) } else { - if (EWRAM_1B000.unk266 <= 5) + if (EWRAM_1B000.unk266 < 6) { TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); EWRAM_1B000.unk266++; @@ -119,9 +174,7 @@ int SetUpBattlePartyMenu(void) EWRAM_1B000.unk264++; } else - { EWRAM_1B000.unk266++; - } break; case 4: PartyMenuPrintMonsLevelOrStatus(); @@ -150,9 +203,7 @@ int SetUpBattlePartyMenu(void) EWRAM_1B000.unk264++; } else - { EWRAM_1B000.unk266++; - } break; case 10: if (gUnknown_02038473 == 3) @@ -167,7 +218,7 @@ int SetUpBattlePartyMenu(void) return FALSE; } -void sub_8095050(u8 a, u8 b) +static void sub_8095050(u8 a, u8 b) { if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) { @@ -187,7 +238,7 @@ void sub_8095050(u8 a, u8 b) gTasks[EWRAM_1B000.unk260].data[4] = 2; gTasks[EWRAM_1B000.unk260].data[5] = 2; } - sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0); + sub_806E750(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); } void SetUpBattlePokemonMenu(u8 a) @@ -196,7 +247,7 @@ void SetUpBattlePokemonMenu(u8 a) { if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) { - gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); return; } @@ -206,13 +257,11 @@ void SetUpBattlePokemonMenu(u8 a) if (gUnknown_02038473 == 3) { if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) - { PlaySE(SE_HAZURE); - } else { sub_806D5A4(); - gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); } } else @@ -220,26 +269,24 @@ void SetUpBattlePokemonMenu(u8 a) PlaySE(SE_SELECT); GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); sub_8095050(a, sub_806CA38(a)); - SetTaskFuncWithFollowupFunc(a, sub_8095408, SetUpBattlePokemonMenu); + SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); } break; case 2: if (gUnknown_02038473 == 1) - { PlaySE(SE_HAZURE); - } else { PlaySE(SE_SELECT); if (gUnknown_02038473 == 3) { gUnknown_0202E8F4 = 0; - gTasks[a].func = sub_80952E4; + gTasks[a].func = Task_80952E4; } else { gUnknown_0202E8F4 = 0; - gTasks[a].func = sub_809527C; + gTasks[a].func = Task_809527C; } } break; @@ -247,13 +294,13 @@ void SetUpBattlePokemonMenu(u8 a) } } -void sub_809527C(u8 taskId) +static void Task_809527C(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_80952B4; + gTasks[taskId].func = Task_80952B4; } -void sub_80952B4(u8 taskId) +static void Task_80952B4(u8 taskId) { if (!gPaletteFade.active) { @@ -263,20 +310,18 @@ void sub_80952B4(u8 taskId) } } -void sub_80952E4(u8 taskId) +static void Task_80952E4(u8 taskId) { if (gUnknown_0202E8F4 != 0) - { - sub_809527C(taskId); - } + Task_809527C(taskId); else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8095330; + gTasks[taskId].func = Task_8095330; } } -void sub_8095330(u8 taskId) +static void Task_8095330(u8 taskId) { if (!gPaletteFade.active) { @@ -286,9 +331,182 @@ void sub_8095330(u8 taskId) } } -void sub_809535C(u8 taskId) +static void Task_809535C(u8 taskId) { gPaletteFade.bufferTransferDisabled = TRUE; sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); - SetMainCallback2(sub_809538C); + SetMainCallback2(Task_809538C); +} + +static void Task_809538C(void) +{ + do + { + if (sub_806B124() == 1) + { + sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.unk260, 0); + GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); + sub_8095050(EWRAM_1B000.unk260, gUnknown_020384F0); + SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); + SetMainCallback2(sub_806AEDC); + return; + } + } while(sub_80F9344() != 1); +} + +static void Task_HandlePopupMenuInput(u8 taskId) +{ + TaskFunc func; + + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + return; + } + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + return; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], + sBattlePartyPopupMenus, + sBattlePartyMenuActions, + GetMenuCursorPos()); + func(taskId); + return; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + Task_BattlePartyMenuCancel(taskId); + return; + } + } +} + +static void Task_80954C0(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + Task_BattlePartyMenuCancel(taskId); +} + +static void Task_ShowSummaryScreen(u8 taskId) +{ + u8 partySelection = sub_806CA38(taskId); + + if (!gPaletteFade.active) + { + DestroyTask(taskId); + EWRAM_1B000.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); + } +} + +static void Task_BattlePartyMenuSummary(u8 taskId) +{ + sub_806CA38(taskId); //an unused variable was probably set with this. + gTasks[taskId].func = Task_ShowSummaryScreen; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +static void Task_BattlePartyMenuShift(u8 taskId) +{ + u8 partySelection; + u8 i; + u8 r4; + + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + partySelection = sub_806CA38(taskId); + if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) + { + sub_806D5A4(); + StringCopy(gStringVar1, sub_8040D08()); + StringExpandPlaceholders(gStringVar4, gOtherText_CantSwitchPokeWithYours); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_HP) == 0) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_NoEnergyLeft); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + for (i = 0; i < gUnknown_02024A68; i++) + { + if (battle_side_get_owner(i) == 0 + && sub_8094C20(partySelection) == gUnknown_02024A6A[i]) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_IS_EGG)) + { + sub_806D5A4(); + StringExpandPlaceholders(gStringVar4, gOtherText_EGGCantBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (sub_8094C20(partySelection) == EWRAM_1609D) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadySelected); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 4) + { + sub_806D5A4(); + sub_8040B8C(); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 2) + { + u8 r0; + u8 r4 = gUnknown_02024E6C; + + sub_806D5A4(); + r0 = pokemon_order_func(gUnknown_02024A6A[r4]); + GetMonNickname(&gPlayerParty[r0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeSwitched); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + gUnknown_0202E8F5 = sub_8094C20(partySelection); + gUnknown_0202E8F4 = 1; + r4 = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]); + sub_8094C98(r4, partySelection); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); + gTasks[taskId].func = Task_809527C; +} + +static void Task_BattlePartyMenuCancel(u8 taskId) +{ + sub_8072DEC(); + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + sub_806D538(0, 0); + SwitchTaskToFollowupFunc(taskId); } -- cgit v1.2.3 From bcaab977727ded65c9eeaef9dbef9e9441d26fb7 Mon Sep 17 00:00:00 2001 From: YamaArashi Date: Sat, 21 Jan 2017 16:48:06 -0800 Subject: formatting --- src/battle_party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 2d6399b8a..c6d39d5a0 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -352,7 +352,7 @@ static void Task_809538C(void) SetMainCallback2(sub_806AEDC); return; } - } while(sub_80F9344() != 1); + } while (sub_80F9344() != 1); } static void Task_HandlePopupMenuInput(u8 taskId) -- cgit v1.2.3 From 93cd06195985eaa52d3dca28a42434009369b2cf Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 28 Feb 2017 04:12:14 +0000 Subject: start decompiling script_pokemon_util_80F99CC.c --- src/battle_party_menu.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index c6d39d5a0..dab97db9b 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -9,6 +9,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "battle_party_menu.h" struct PartyMenuItem { @@ -60,23 +61,6 @@ extern void sub_8094C98(u8, u8); extern void sub_806E6F0(); extern void sub_806D538(); -struct UnknownStruct1 -{ - u8 filler0[0x259]; - u8 unk259; - u8 filler25A[6]; - u8 unk260; - u8 filler261[1]; - u8 unk262; - s16 unk264; - s16 unk266; -}; - -extern u8 unk_2000000[]; - -#define EWRAM_1609D unk_2000000[0x1609D] -#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) - extern u16 gScriptItemId; extern u8 gPlayerPartyCount; extern u8 gUnknown_02024A68; -- cgit v1.2.3 From 6035511c139549a0291b6b3d43b9b080f792b2b6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 18 Mar 2017 04:00:15 +0100 Subject: reorganize and add new headers for many files --- src/battle_party_menu.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index dab97db9b..2d47f4e7d 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -11,19 +11,6 @@ #include "text.h" #include "battle_party_menu.h" -struct PartyMenuItem -{ - const u8 *text; - TaskFunc func; -}; - -struct PartyPopupMenu -{ - u8 unk0; - u8 unk1; - const u8 *unk4; -}; - extern u8 IsLinkDoubleBattle(void); extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); extern void LoadHeldItemIconGraphics(void); -- cgit v1.2.3 From 9a113e77ca483d23a2091f6f5bd58af64db64b04 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 7 Apr 2017 06:29:43 +0100 Subject: split rom_810CBB4.s and elaborate on battle_party_menu rom merge --- src/battle_party_menu.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 2d47f4e7d..79c926e0d 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -97,6 +97,8 @@ static const struct PartyPopupMenu sBattlePartyPopupMenus[] = {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, }; +// rom_8094928 is part of this file, has yet to be decompiled. + int SetUpBattlePartyMenu(void) { switch (EWRAM_1B000.unk264) -- cgit v1.2.3 From ddc846fa6a0d9a13cfba6f52488a66f6f4562a2d Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Thu, 27 Apr 2017 15:43:31 +0200 Subject: Sort includes --- src/battle_party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 79c926e0d..d61da637e 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_party_menu.h" #include "asm.h" #include "main.h" #include "menu.h" @@ -9,7 +10,6 @@ #include "string_util.h" #include "task.h" #include "text.h" -#include "battle_party_menu.h" extern u8 IsLinkDoubleBattle(void); extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); -- cgit v1.2.3 From c8e8e7dcfc60ab2769c0c1ada5a580ec1c1c4d5d Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Fri, 5 May 2017 16:16:54 +0200 Subject: Remove trailing whitespace --- src/battle_party_menu.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index d61da637e..820d16465 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -129,7 +129,7 @@ int SetUpBattlePartyMenu(void) { EWRAM_1B000.unk266 = 0; EWRAM_1B000.unk264++; - } + } } break; case 1: @@ -223,7 +223,7 @@ void SetUpBattlePokemonMenu(u8 a) gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); return; } - + switch (sub_806BD80(a)) { case 1: @@ -331,7 +331,7 @@ static void Task_809538C(void) static void Task_HandlePopupMenuInput(u8 taskId) { TaskFunc func; - + if (!gPaletteFade.active) { if (gMain.newAndRepeatedKeys & DPAD_UP) @@ -347,7 +347,7 @@ static void Task_HandlePopupMenuInput(u8 taskId) return; } if (gMain.newKeys & A_BUTTON) - { + { PlaySE(SE_SELECT); func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], sBattlePartyPopupMenus, @@ -374,7 +374,7 @@ static void Task_80954C0(u8 taskId) static void Task_ShowSummaryScreen(u8 taskId) { u8 partySelection = sub_806CA38(taskId); - + if (!gPaletteFade.active) { DestroyTask(taskId); @@ -395,7 +395,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) u8 partySelection; u8 i; u8 r4; - + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); partySelection = sub_806CA38(taskId); if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) @@ -458,7 +458,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) { u8 r0; u8 r4 = gUnknown_02024E6C; - + sub_806D5A4(); r0 = pokemon_order_func(gUnknown_02024A6A[r4]); GetMonNickname(&gPlayerParty[r0], gStringVar1); -- cgit v1.2.3 From e6d8705d3152947c609339641cb0b792a36bdfdd Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 17 May 2017 17:49:13 -0500 Subject: fix build --- src/battle_party_menu.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 820d16465..690ef99be 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -40,7 +40,6 @@ extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, con extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); -extern void sub_806E834(); extern u8 sub_8094C20(); extern void sub_8040B8C(void); extern u8 pokemon_order_func(u8); -- cgit v1.2.3 From 7c4f99560812cd5a8eedb124a9bc99c3f4243438 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Sun, 21 May 2017 11:37:35 +0200 Subject: Remove duplicate strings.h declarations --- src/battle_party_menu.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 690ef99be..359517ecd 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -8,6 +8,7 @@ #include "songs.h" #include "sound.h" #include "string_util.h" +#include "strings.h" #include "task.h" #include "text.h" @@ -58,16 +59,6 @@ extern u8 gUnknown_0202E8F6; extern u8 gUnknown_02038473; extern u8 gUnknown_020384F0; extern void (*gUnknown_03004AE4)(); //don't know types yet -extern const u8 gOtherText_CantSwitchPokeWithYours[]; -extern const u8 gOtherText_NoEnergyLeft[]; -extern const u8 gOtherText_EGGCantBattle[]; -extern const u8 gOtherText_AlreadySelected[]; -extern const u8 gOtherText_CantBeSwitched[]; -extern const u8 gOtherText_AlreadyBattle[]; -extern const u8 OtherText_Summary[]; -extern const u8 gOtherText_CancelNoTerminator[]; -extern const u8 OtherText_Shift[]; -extern const u8 OtherText_SendOut[]; static void Task_809527C(u8); static void Task_80952B4(u8); -- cgit v1.2.3 From 4d2b22a899c11dfcacfec6889968ab01655a3fe3 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Fri, 26 May 2017 14:53:51 +0200 Subject: Add headers --- src/battle_party_menu.c | 44 +++++++------------------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 359517ecd..8be774047 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,6 +1,12 @@ +#include "party_menu.h" +#include "rom_8094928.h" +#include "battle.h" +#include "item_menu.h" +#include "rom_8077ABC.h" +#include "menu_helpers.h" +#include "pokemon_summary_screen.h" #include "global.h" #include "battle_party_menu.h" -#include "asm.h" #include "main.h" #include "menu.h" #include "palette.h" @@ -12,42 +18,6 @@ #include "task.h" #include "text.h" -extern u8 IsLinkDoubleBattle(void); -extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); -extern void LoadHeldItemIconGraphics(void); -extern void CreateHeldItemIcons_806DC34(); -extern u8 sub_806BD58(u8, u8); -extern void PartyMenuPrintMonsLevelOrStatus(void); -extern void PrintPartyMenuMonNicknames(void); -extern void PartyMenuTryPrintMonsHP(void); -extern void nullsub_13(void); -extern void PartyMenuDrawHPBars(void); -extern u8 sub_806B58C(u8); -extern u8 GetItemEffectType(); -extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); -extern u16 sub_806BD80(); -extern u8 sub_806CA38(); -extern void sub_806D5A4(void); -extern void sub_802E414(void); -extern void sub_8094D60(void); -extern void sub_80A6DCC(void); -extern void sub_806AF4C(); -extern u8 sub_80F9344(void); -extern u8 sub_806B124(void); -extern void sub_806C994(); -extern void sub_806BF74(); -extern void sub_806AEDC(void); -extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); -extern void sub_806E7D0(u8, const struct PartyPopupMenu *); -extern u8 *sub_8040D08(); -extern u8 sub_8094C20(); -extern void sub_8040B8C(void); -extern u8 pokemon_order_func(u8); -extern void sub_8094C98(u8, u8); -extern void sub_806E6F0(); -extern void sub_806D538(); - extern u16 gScriptItemId; extern u8 gPlayerPartyCount; extern u8 gUnknown_02024A68; -- cgit v1.2.3 From f26daa3d6954d2db3a7c44b79d319a7a084462c2 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Fri, 26 May 2017 15:01:42 +0200 Subject: Sort includes --- src/battle_party_menu.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 8be774047..be34cd5c0 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,16 +1,16 @@ -#include "party_menu.h" -#include "rom_8094928.h" -#include "battle.h" -#include "item_menu.h" -#include "rom_8077ABC.h" -#include "menu_helpers.h" -#include "pokemon_summary_screen.h" #include "global.h" #include "battle_party_menu.h" +#include "battle.h" +#include "item_menu.h" #include "main.h" #include "menu.h" +#include "menu_helpers.h" #include "palette.h" +#include "party_menu.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" #include "songs.h" #include "sound.h" #include "string_util.h" -- cgit v1.2.3 From f5b7921fa3b4356c2d79a117858fc543fd2cf15f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 9 Jun 2017 02:43:39 -0400 Subject: cleanup player_pc.c --- src/battle_party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 820d16465..e5f78b6c4 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -477,7 +477,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) static void Task_BattlePartyMenuCancel(u8 taskId) { - sub_8072DEC(); + HandleDestroyMenuCursors(); sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); gTasks[taskId].data[4] = gTasks[taskId].data[5]; sub_806D538(0, 0); -- cgit v1.2.3 From 4c91ef5f49f5f8fb5aff42257807e5480e64dd65 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 10 Jun 2017 23:37:25 -0500 Subject: move rom_8094928.c into battle_party_menu.c --- src/battle_party_menu.c | 309 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 302 insertions(+), 7 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 359517ecd..5e3efcc0d 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -12,6 +12,30 @@ #include "task.h" #include "text.h" +#define DATA_COUNT (6) + +extern u8 ewram[]; + +struct Unk201B000 +{ + //u8 filler0[0x260]; + struct Pokemon unk0[6]; + u8 filler258[1]; + u8 unk259; + u8 filler25A[6]; + u8 unk260; + u8 unk261; + u8 filler262[2]; + s16 unk264[DATA_COUNT * 2]; // This may be a union + u8 filler27C[2]; + s16 unk27E; + s16 unk280; + s16 unk282; +}; + +#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000)) +#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. + extern u8 IsLinkDoubleBattle(void); extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); extern void LoadHeldItemIconGraphics(void); @@ -29,7 +53,6 @@ extern u16 sub_806BD80(); extern u8 sub_806CA38(); extern void sub_806D5A4(void); extern void sub_802E414(void); -extern void sub_8094D60(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); extern u8 sub_80F9344(void); @@ -41,12 +64,12 @@ extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, con extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); -extern u8 sub_8094C20(); extern void sub_8040B8C(void); -extern u8 pokemon_order_func(u8); -extern void sub_8094C98(u8, u8); extern void sub_806E6F0(); extern void sub_806D538(); +extern void nullsub_14(); +extern void OpenPartyMenu(); +extern u8 sub_803FBBC(void); extern u16 gScriptItemId; extern u8 gPlayerPartyCount; @@ -56,10 +79,17 @@ extern u8 gUnknown_02024E6C; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F5; extern u8 gUnknown_0202E8F6; +extern u8 gUnknown_02038470[3]; extern u8 gUnknown_02038473; extern u8 gUnknown_020384F0; extern void (*gUnknown_03004AE4)(); //don't know types yet +extern struct PokemonStorage gPokemonStorage; +void sub_8094C98(u8, u8); +static void sub_8094998(u8[3], u8); +static void sub_8094A74(u8[3], u8, u32); +u8 pokemon_order_func(u8); +static void sub_8094D60(void); static void Task_809527C(u8); static void Task_80952B4(u8); static void Task_80952E4(u8); @@ -87,11 +117,276 @@ static const struct PartyPopupMenu sBattlePartyPopupMenus[] = {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, }; -// rom_8094928 is part of this file, has yet to be decompiled. +void unref_sub_8094928(struct PokemonStorage *ptr) +{ + *ptr = gPokemonStorage; +} + +void unref_sub_8094940(struct PokemonStorage *ptr) +{ + gPokemonStorage = *ptr; +} + +void sub_8094958(void) +{ + sub_8094998(gUnknown_02038470, sub_803FBBC()); +} + +void sub_8094978(u8 arg1, u8 arg2) +{ + sub_8094A74((UNK_201606C_ARRAY) + arg1 * 3, arg2, arg1); +} + +static void sub_8094998(u8 arg[3], u8 player_number) +{ + int i; + u32 pos; + u8 temp[6]; + if (IsLinkDoubleBattle() == TRUE) + { + if (player_number) + { + *arg = 0x30; + arg[1] = 0x45; + arg[2] = 0x12; + } + else + { + *arg = 0x03; + arg[1] = 0x12; + arg[2] = 0x45; + } + } + else + { + if (!IsDoubleBattle()) + { + pos = 1; + *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)]; + for (i = 0; i <= 5; i++) + if (i != *temp) + temp[pos++] = i; + } + else + { + pos = 2; + *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)]; + temp[1] = gUnknown_02024A6A[battle_get_side_with_given_state(2)]; + for (i = 0; i <= 5; i++) + if ((i != *temp) && (i != temp[1])) + temp[pos++] = i; + } + for (i = 0; i <= 2; i++) + arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; + } +} + +static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) +{ + int i, j; + u8 temp[6]; + if (!battle_side_get_owner(arg3)) + { + i = battle_get_side_with_given_state(0); + j = battle_get_side_with_given_state(2); + } + else + { + i = battle_get_side_with_given_state(1); + j = battle_get_side_with_given_state(3); + } + if (IsLinkDoubleBattle() == TRUE) + { + if (player_number) + { + *arg = 0x30; + arg[1] = 0x45; + arg[2] = 0x12; + } + else + { + *arg = 0x03; + arg[1] = 0x12; + arg[2] = 0x45; + } + } + else + { + if (!IsDoubleBattle()) + { + int pos = 1; + *temp = gUnknown_02024A6A[i]; + for (i = 0; i <= 5; i++) + if (i != *temp) + temp[pos++] = i; + } + else + { + int pos = 2; + *temp = gUnknown_02024A6A[i]; + temp[1] = gUnknown_02024A6A[j]; + for (i = 0; i <= 5; i++) + if ((i != *temp) && (i != temp[1])) + temp[pos++] = i; + } + for (i = 0; i <= 2; i++) + arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; + } +} + +void sub_8094B6C(u8 a, u8 b, u8 c) +{ + s32 i; + s32 j; + u8 temp[6]; + u8 r3; + u8 r7 = 0; + + if (IsLinkDoubleBattle()) + { + u8 *arr = ewram + 0x1606C + a * 3; + + for (i = 0, j = 0; i < 3; i++) + { + temp[j++] = arr[i] >> 4; + temp[j++] = arr[i] & 0xF; + } + r3 = temp[c]; + for (i = 0; i < 6; i++) + { + if (temp[i] == b) + { + r7 = temp[i]; + temp[i] = r3; + break; + } + } + if (i != 6) + { + temp[c] = r7; + + arr[0] = (temp[0] << 4) | temp[1]; + arr[1] = (temp[2] << 4) | temp[3]; + arr[2] = (temp[4] << 4) | temp[5]; + } + } +} + +u8 sub_8094C20(u8 a) +{ + u8 retVal; + u8 val = a & 1; + + a /= 2; + if (val) + retVal = gUnknown_02038470[a] & 0xF; + else + retVal = gUnknown_02038470[a] >> 4; + return retVal; +} + +void sub_8094C54(u8 a, u8 b) +{ + u8 val = a & 1; + + a /= 2; + if (val) + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF0) | b; + else + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF) | (b << 4); +} + +void sub_8094C98(u8 a, u8 b) +{ + u8 r4 = sub_8094C20(a); + u8 r1 = sub_8094C20(b); + + sub_8094C54(a, r1); + sub_8094C54(b, r4); +} + +u8 pokemon_order_func(u8 a) +{ + u8 i; + u8 r2; + + for (i = 0, r2 = 0; i < 3; i++) + { + if ((gUnknown_02038470[i] >> 4) == a) + return r2; + r2++; + if ((gUnknown_02038470[i] & 0xF) == a) + return r2; + r2++; + } + return 0; +} + +void pokemon_change_order(void) +{ + u8 i; + + memcpy(ewram1B000.unk0, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = pokemon_order_func(i); + + memcpy(&gPlayerParty[n], &ewram1B000.unk0[i], sizeof(struct Pokemon)); + } +} + +static void sub_8094D60(void) +{ + struct Pokemon temp[6]; + u8 i; + + memcpy(temp, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = sub_8094C20(i); + + memcpy(&gPlayerParty[n], &temp[i], sizeof(struct Pokemon)); + } +} + +void unref_sub_8094DB0(void) +{ + u8 i; + u8 r4; + + for (i = 1; i < 6; i++) + { + u8 n = sub_8094C20(i); + + if (GetMonData(&gPlayerParty[n], MON_DATA_SPECIES) != 0 + && GetMonData(&gPlayerParty[n], MON_DATA_HP) != 0) + { + r4 = sub_8094C20(0); + sub_8094C98(0, i); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]); + break; + } + } +} + +void sub_8094E20(u8 a) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + gUnknown_02038473 = a; + nullsub_14(); + pokemon_change_order(); + OpenPartyMenu(1, 0xFF); +} + +void sub_8094E4C(void) +{ + sub_8094E20(3); +} int SetUpBattlePartyMenu(void) { switch (EWRAM_1B000.unk264) + //switch (ewram1B000.unk264[0]) { case 0: //TODO: try to get rid of this duplicate code @@ -172,9 +467,9 @@ int SetUpBattlePartyMenu(void) if (gUnknown_02038473 == 3) { if (GetItemEffectType(gScriptItemId) == 10) - EWRAM_1B000.unk259 = 0xFF; + ewram1B000.unk259 = 0xFF; else - EWRAM_1B000.unk259 = 3; + ewram1B000.unk259 = 3; } return TRUE; } -- cgit v1.2.3 From 0de38858f641934699ce934e2bdb3dc1495baec9 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 16 Jun 2017 17:46:13 -0500 Subject: decompile sub_8121E10 - sub_8122838 --- src/battle_party_menu.c | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 7b4eb0258..c2183e6bb 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -4,6 +4,7 @@ #include "main.h" #include "menu.h" #include "palette.h" +#include "party_menu.h" #include "pokemon.h" #include "songs.h" #include "sound.h" @@ -12,28 +13,7 @@ #include "task.h" #include "text.h" -#define DATA_COUNT (6) - extern u8 ewram[]; - -struct Unk201B000 -{ - //u8 filler0[0x260]; - struct Pokemon unk0[6]; - u8 filler258[1]; - u8 unk259; - u8 filler25A[6]; - u8 unk260; - u8 unk261; - u8 filler262[2]; - s16 unk264[DATA_COUNT * 2]; // This may be a union - u8 filler27C[2]; - s16 unk27E; - s16 unk280; - s16 unk282; -}; - -#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000)) #define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. extern u8 IsLinkDoubleBattle(void); @@ -61,7 +41,7 @@ extern void sub_806C994(); extern void sub_806BF74(); extern void sub_806AEDC(void); extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); +extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); @@ -589,7 +569,7 @@ static void Task_8095330(u8 taskId) } } -static void Task_809535C(u8 taskId) +static void Task_809535C(void) { gPaletteFade.bufferTransferDisabled = TRUE; sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); -- cgit v1.2.3 From 14b1a94d7266cc24447d34145decf818e930e747 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 17 Jun 2017 21:38:01 -0500 Subject: finish decompiling choose_party --- src/battle_party_menu.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 074ebbce0..0fbe2b0e3 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -46,7 +46,6 @@ extern void sub_806C994(); extern void sub_806BF74(); extern void sub_806AEDC(void); extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); -- cgit v1.2.3 From 102f5b1e15e7295e30a3cebfbbad3c8af4cc1d37 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 20 Jun 2017 05:46:48 +0200 Subject: Battle labels named (#333) * Changed battle labels --- src/battle_party_menu.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src/battle_party_menu.c') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index c02290e80..96b68adba 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -44,9 +44,9 @@ struct Unk201B000 extern u16 gScriptItemId; extern u8 gPlayerPartyCount; -extern u8 gUnknown_02024A68; -extern u16 gUnknown_02024A6A[]; -extern u8 gUnknown_02024E6C; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBankInMenu; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F5; extern u8 gUnknown_0202E8F6; @@ -135,7 +135,7 @@ static void sub_8094998(u8 arg[3], u8 player_number) if (!IsDoubleBattle()) { pos = 1; - *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)]; + *temp = gBattlePartyID[GetBankByPlayerAI(0)]; for (i = 0; i <= 5; i++) if (i != *temp) temp[pos++] = i; @@ -143,8 +143,8 @@ static void sub_8094998(u8 arg[3], u8 player_number) else { pos = 2; - *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)]; - temp[1] = gUnknown_02024A6A[battle_get_side_with_given_state(2)]; + *temp = gBattlePartyID[GetBankByPlayerAI(0)]; + temp[1] = gBattlePartyID[GetBankByPlayerAI(2)]; for (i = 0; i <= 5; i++) if ((i != *temp) && (i != temp[1])) temp[pos++] = i; @@ -158,15 +158,15 @@ static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) { int i, j; u8 temp[6]; - if (!battle_side_get_owner(arg3)) + if (!GetBankSide(arg3)) { - i = battle_get_side_with_given_state(0); - j = battle_get_side_with_given_state(2); + i = GetBankByPlayerAI(0); + j = GetBankByPlayerAI(2); } else { - i = battle_get_side_with_given_state(1); - j = battle_get_side_with_given_state(3); + i = GetBankByPlayerAI(1); + j = GetBankByPlayerAI(3); } if (IsLinkDoubleBattle() == TRUE) { @@ -188,7 +188,7 @@ static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) if (!IsDoubleBattle()) { int pos = 1; - *temp = gUnknown_02024A6A[i]; + *temp = gBattlePartyID[i]; for (i = 0; i <= 5; i++) if (i != *temp) temp[pos++] = i; @@ -196,8 +196,8 @@ static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) else { int pos = 2; - *temp = gUnknown_02024A6A[i]; - temp[1] = gUnknown_02024A6A[j]; + *temp = gBattlePartyID[i]; + temp[1] = gBattlePartyID[j]; for (i = 0; i <= 5; i++) if ((i != *temp) && (i != temp[1])) temp[pos++] = i; @@ -674,10 +674,10 @@ static void Task_BattlePartyMenuShift(u8 taskId) gTasks[taskId].func = Task_80954C0; return; } - for (i = 0; i < gUnknown_02024A68; i++) + for (i = 0; i < gNoOfAllBanks; i++) { - if (battle_side_get_owner(i) == 0 - && sub_8094C20(partySelection) == gUnknown_02024A6A[i]) + if (GetBankSide(i) == 0 + && sub_8094C20(partySelection) == gBattlePartyID[i]) { sub_806D5A4(); GetMonNickname(&gPlayerParty[partySelection], gStringVar1); @@ -715,10 +715,10 @@ static void Task_BattlePartyMenuShift(u8 taskId) if (gUnknown_02038473 == 2) { u8 r0; - u8 r4 = gUnknown_02024E6C; + u8 r4 = gBankInMenu; sub_806D5A4(); - r0 = pokemon_order_func(gUnknown_02024A6A[r4]); + r0 = pokemon_order_func(gBattlePartyID[r4]); GetMonNickname(&gPlayerParty[r0], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_CantBeSwitched); sub_806E834(gStringVar4, 0); @@ -727,7 +727,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) } gUnknown_0202E8F5 = sub_8094C20(partySelection); gUnknown_0202E8F4 = 1; - r4 = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]); + r4 = pokemon_order_func(gBattlePartyID[gBankInMenu]); sub_8094C98(r4, partySelection); sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); gTasks[taskId].func = Task_809527C; -- cgit v1.2.3