From f2b5416c20ba48a09f590dd727e533177254b5c8 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 17 Sep 2017 20:43:34 -0700 Subject: Decompile PrintNewStatsInLevelUpWindow() --- src/party_menu.c | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 39477e293..d0fe19fc9 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -74,10 +74,10 @@ extern s32 gBattleMoveDamage; //extern const u8 gUnknown_083769A8[][12]; extern void *const gUnknown_08376858[][6]; extern const u8 gUnknown_083769A8[]; -extern const u8 gUnknown_08376D1C[DATA_COUNT]; +extern const u8 gUnknown_08376D1C[NUM_STATS]; extern const u16 gUnknown_08376504[]; extern void (*const gUnknown_08376B54[])(u8); -extern const u8 *const gUnknown_08376D04[DATA_COUNT]; +extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); @@ -1282,7 +1282,7 @@ void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100) { for (i = 0; i < 6; i++) - ewram1B000.unk264[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + ewram1B000.statGrowths[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0); } else @@ -1319,7 +1319,7 @@ void Task_RareCandy1(u8 taskId) if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); - sub_8070848(taskId); + PrintStatGrowthsInLevelUpWindow(taskId); gTasks[taskId].func = Task_RareCandy2; } } @@ -1330,19 +1330,19 @@ void Task_RareCandy2(u8 taskId) if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); - sub_8070968(taskId); + PrintNewStatsInLevelUpWindow(taskId); gTasks[taskId].func = Task_RareCandy3; } } #if ENGLISH -void sub_8070848(u8 taskId) +void PrintStatGrowthsInLevelUpWindow(u8 taskId) { u8 i; MenuDrawTextWindow(11, 0, 29, 7); - for (i = 0; i < DATA_COUNT; i++) + for (i = 0; i < NUM_STATS; i++) { u8 x; u8 y; @@ -1350,8 +1350,8 @@ void sub_8070848(u8 taskId) stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); - ewram1B000.unk264[i + DATA_COUNT] = stat; - ewram1B000.unk264[i] = stat - ewram1B000.unk264[i]; + ewram1B000.statGrowths[i + NUM_STATS] = stat; + ewram1B000.statGrowths[i] = stat - ewram1B000.statGrowths[i]; x = (i / 3) * 9 + 11; y = ((i % 3) << 1) + 1; @@ -1367,14 +1367,14 @@ void sub_8070848(u8 taskId) gStringVar1[1] = 0x14; gStringVar1[2] = 0x06; - ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.unk264[i], 1, 2); + ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.statGrowths[i], 1, 2); MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0); } } #elif GERMAN __attribute__((naked)) -void sub_8070848(u8 taskId) { +void PrintStatGrowthsInLevelUpWindow(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ @@ -1492,3 +1492,30 @@ _08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ .syntax divided\n"); } #endif + +void PrintNewStatsInLevelUpWindow(u8 taskId) +{ + u8 i; + + for (i = 0; i < NUM_STATS; i++) + { + u8 x; + u8 y; + u32 stat; + u32 newStatIndex; + + stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + newStatIndex = i + 6; + ewram1B000.statGrowths[newStatIndex] = stat; + + x = ((i / 3) * 9) + 11; + y = ((i % 3) << 1) + 1; + + gStringVar1[0] = EXT_CTRL_CODE_BEGIN; + gStringVar1[1] = 0x14; + gStringVar1[2] = 0x06; + + ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.statGrowths[newStatIndex], 1, 3); + MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 6, y * 8, 0); + } +} -- cgit v1.2.3 From ee45710b2b62b099f1d1919678ca1f21839b1251 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 17 Sep 2017 21:33:56 -0700 Subject: Decompile RedrawPokemonInfoInMenu --- src/party_menu.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index d0fe19fc9..c57753085 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -81,6 +81,7 @@ extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); +void PartyMenuTryDrawHPBar(u8, struct Pokemon *); /* void sub_806AEDC(void) @@ -1301,7 +1302,7 @@ void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) gUnknown_0202E8F4 = 1; PlayFanfareByFanfareNum(0); - sub_8070A20(ewram1C000.unk5, ewram1C000.pokemon); + RedrawPokemonInfoInMenu(ewram1C000.unk5, ewram1C000.pokemon); RemoveBagItem(b, 1); GetMonNickname(ewram1C000.pokemon, gStringVar1); level = GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL); @@ -1519,3 +1520,32 @@ void PrintNewStatsInLevelUpWindow(u8 taskId) MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 6, y * 8, 0); } } + +void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) +{ + u8 statusAndPkrs; + bool8 isDoubleBattle; + u16 currentHP; + u16 maxHP; + u8 icon; + + statusAndPkrs = GetMonStatusAndPokerus(pokemon); + if (statusAndPkrs == 0 || statusAndPkrs == 6) + { + PartyMenuUpdateLevelOrStatus(pokemon, a); + } + + isDoubleBattle = IsDoubleBattle(); + + currentHP = GetMonData(pokemon, MON_DATA_HP); + maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); + + PartyMenuDoPrintHP(a, isDoubleBattle, currentHP, maxHP); + PartyMenuTryDrawHPBar(a, pokemon); + + icon = GetMonIconSpriteId_maybe(ewram1C000.unk4, a); + SetMonIconAnim(icon, pokemon); + + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + a * 2], 7); + ewram1B000.unk261 = 2; +} -- cgit v1.2.3 From ad1f73f49e53f166bf3d4c9610d2fa60977fb6a3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Sep 2017 00:32:52 -0700 Subject: Decompile Task_RareCandy3 --- src/party_menu.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/pokemon_menu.c | 1 - 2 files changed, 64 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index c57753085..c8a59c390 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5,8 +5,10 @@ #include "battle_party_menu.h" #include "data2.h" #include "event_data.h" +#include "evolution_scene.h" #include "item.h" #include "item_use.h" +#include "item_menu.h" #include "mail_data.h" #include "main.h" #include "menu.h" @@ -69,6 +71,7 @@ extern u8 gUnknown_0202E8FA; extern u8 gLastFieldPokeMenuOpened; extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; +extern u16 gMoveToLearn; //extern const u16 gUnknown_083769A8[][6]; //extern const u8 gUnknown_083769A8[][12]; @@ -81,6 +84,7 @@ extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); +void sub_8070D90(u8 taskId); void PartyMenuTryDrawHPBar(u8, struct Pokemon *); /* @@ -1549,3 +1553,63 @@ void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + a * 2], 7); ewram1B000.unk261 = 2; } + +void Task_RareCandy3(u8 taskId) +{ + if (WaitFanfare(0)) + { + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + u16 learnedMove; + u16 evolutionSpecies; + + MenuZeroFillWindowRect(WINDOW_LEFT + 8, 0, WINDOW_RIGHT + 3, 7); + + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, 1); + ewram1B000.unk282 = 1; + + switch (learnedMove) + { + case 0: + // No move is learned. + evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); + if (evolutionSpecies != 0) + { + gCB2_AfterEvolution = sub_80A53F8; + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + DestroyTask(taskId); + } + else + { + sub_8070D90(taskId); + } + break; + case 0xFFFF: + // Mon already knows 4 moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); + + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + + ewram1C000.unk8 = gMoveToLearn; + gTasks[taskId].func = sub_806F358; + break; + case 0xFFFE: + // Move was already known by the mon. + gTasks[taskId].func = sub_8070C54; + break; + default: + // Mon automatically learned a move because it knew less than four moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[learnedMove]); + + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); + + gTasks[taskId].func = Task_TeamMonTMMove3; + break; + } + } + } +} diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index bc5150a16..dd6b576a3 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -57,7 +57,6 @@ void sub_80E62A0(u8 arg0, struct MailStruct* arg1, void* arg2, u8 arg3); void sub_808A520(void); void sub_80A61D0(void); void CB2_InitFlyRegionMap(void); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem); bool8 SetUpFieldMove_Cut(void); bool8 SetUpFieldMove_Flash(void); bool8 SetUpFieldMove_RockSmash(void); -- cgit v1.2.3 From 5e8ad277727278d2dd97339051819542f715bac2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Sep 2017 09:40:00 -0700 Subject: Decompile TeachMonMoveInPartyMenu --- src/party_menu.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index c8a59c390..49c421b54 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -598,7 +598,7 @@ void Task_TeamMonTMMove4(u8 taskId) SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); if (ewram1B000.unk282 == 1) { - sub_8070C54(taskId); + TeachMonMoveInPartyMenu(taskId); } else { @@ -616,7 +616,7 @@ void sub_806F2FC(u8 taskId) SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); if (ewram1B000.unk282 == 1) { - sub_8070C54(taskId); + TeachMonMoveInPartyMenu(taskId); } else { @@ -1565,7 +1565,7 @@ void Task_RareCandy3(u8 taskId) MenuZeroFillWindowRect(WINDOW_LEFT + 8, 0, WINDOW_RIGHT + 3, 7); - learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, 1); + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, TRUE); ewram1B000.unk282 = 1; switch (learnedMove) @@ -1597,7 +1597,7 @@ void Task_RareCandy3(u8 taskId) break; case 0xFFFE: // Move was already known by the mon. - gTasks[taskId].func = sub_8070C54; + gTasks[taskId].func = TeachMonMoveInPartyMenu; break; default: // Mon automatically learned a move because it knew less than four moves. @@ -1613,3 +1613,53 @@ void Task_RareCandy3(u8 taskId) } } } + +void TeachMonMoveInPartyMenu(u8 taskId) +{ + u16 learnedMove; + u16 evolutionSpecies; + + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, FALSE); + switch (learnedMove) + { + case 0: + // No move is learned. + evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); + if (evolutionSpecies != 0) + { + gCB2_AfterEvolution = sub_80A53F8; + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + DestroyTask(taskId); + } + else + { + sub_8070D90(taskId); + } + break; + case 0xFFFF: + // Mon already knows 4 moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); + + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + + ewram1C000.unk8 = gMoveToLearn; + gTasks[taskId].func = sub_806F358; + break; + case 0xFFFE: + // Move was already known by the mon. Go on the the next move to be learned. + TeachMonMoveInPartyMenu(taskId); + break; + default: + // Mon automatically learned a move because it knew less than four moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[learnedMove]); + + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); + + gTasks[taskId].func = Task_TeamMonTMMove3; + break; + } +} -- cgit v1.2.3 From 76b0936323ba0c5d2807cec26bbea056af8aa2e0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Sep 2017 09:50:04 -0700 Subject: Decompile sub_8070D90 --- src/party_menu.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 49c421b54..83c0afbc3 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -84,7 +84,7 @@ extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); -void sub_8070D90(u8 taskId); +static void sub_8070D90(u8 taskId); void PartyMenuTryDrawHPBar(u8, struct Pokemon *); /* @@ -1663,3 +1663,9 @@ void TeachMonMoveInPartyMenu(u8 taskId) break; } } + +static void sub_8070D90(u8 taskId) +{ + gTasks[ewram1C000.unk4].func = ewram1C000.unk10; + DestroyTask(taskId); +} -- cgit v1.2.3 From a7fa00901efb9e7e90a78b3e415a56b695588ec3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Sep 2017 10:25:42 -0700 Subject: Decompile DoEvolutionStoneItemEffect --- src/party_menu.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 83c0afbc3..e1eb9cdae 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1669,3 +1669,25 @@ static void sub_8070D90(u8 taskId) gTasks[ewram1C000.unk4].func = ewram1C000.unk10; DestroyTask(taskId); } + +void DoEvolutionStoneItemEffect(u8 taskId, u16 evolutionStoneItem, TaskFunc c) +{ + PlaySE(SE_SELECT); + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, evolutionStoneItem, c); + + gCB2_AfterEvolution = sub_80A53F8; + + if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, evolutionStoneItem, 0)) + { + gUnknown_0202E8F4 = 0; + sub_806E834(gOtherText_WontHaveAnyEffect, 1); + + CreateTask(sub_806FB0C, 5); + } + else + { + RemoveBagItem(evolutionStoneItem, 1); + } +} -- cgit v1.2.3 From 81a0f3b974f5f49e0bc7bf93b873de5dacfe0a01 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Sep 2017 13:47:14 -0700 Subject: Decompile more party_menu --- src/battle_party_menu.c | 13 +- src/choose_party.c | 16 +-- src/party_menu.c | 357 +++++++++++++++++++++++++++++++++++++++++++++++- src/pokemon_menu.c | 18 +-- 4 files changed, 373 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 49e0b8432..ca883daec 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -33,15 +33,11 @@ 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 void sub_806D5A4(void); extern void sub_802E414(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); extern void sub_806AEDC(void); -extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); -extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); extern void sub_806E6F0(); @@ -79,7 +75,7 @@ static void Task_BattlePartyMenuSummary(u8 taskId); static void Task_BattlePartyMenuShift(u8 taskId); static void Task_BattlePartyMenuCancel(u8 taskId); -static const struct PartyMenuItem sBattlePartyMenuActions[] = +static const struct MenuAction2 sBattlePartyMenuActions[] = { {OtherText_Summary, Task_BattlePartyMenuSummary}, {gOtherText_CancelNoTerminator, Task_BattlePartyMenuCancel}, @@ -475,7 +471,8 @@ static 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], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); + + ShowPartyPopupMenu(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); } void SetUpBattlePokemonMenu(u8 a) @@ -660,7 +657,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) u8 i; u8 r4; - sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + ClosePartyPopupMenu(gTasks[taskId].data[4], sBattlePartyPopupMenus); partySelection = sub_806CA38(taskId); if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) { @@ -742,7 +739,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) static void Task_BattlePartyMenuCancel(u8 taskId) { HandleDestroyMenuCursors(); - sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + ClosePartyPopupMenu(gTasks[taskId].data[4], sBattlePartyPopupMenus); gTasks[taskId].data[4] = gTasks[taskId].data[5]; sub_806D538(0, 0); SwitchTaskToFollowupFunc(taskId); diff --git a/src/choose_party.c b/src/choose_party.c index 9cdf63fc8..38533ba02 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -53,7 +53,6 @@ extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); extern u16 sub_806BE38(); extern u8 sub_806CA38(); -extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); extern u8 sub_806B124(); extern void sub_806C994(); extern void sub_806C658(); @@ -82,7 +81,6 @@ extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16); extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *); extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); -extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); static void ClearPartySelection(void); static bool8 IsMonAllowedInBattleTower(struct Pokemon *); @@ -273,7 +271,7 @@ static void BattleTowerEntryMenuCallback_Enter(u8); static void BattleTowerEntryMenuCallback_NoEntry(u8); static void BattleTowerEntryMenuCallback_Exit(u8); -static const struct PartyMenuItem sBattleTowerEntryMenuItems[] = +static const struct MenuAction2 sBattleTowerEntryMenuItems[] = { {OtherText_Summary, BattleTowerEntryMenuCallback_Summary}, {OtherText_Enter2, BattleTowerEntryMenuCallback_Enter}, @@ -313,18 +311,18 @@ static void sub_81221F8(u8 taskId) if (IsPartyMemberAlreadySelected(gLastFieldPokeMenuOpened + 1) == TRUE) { gTasks[taskId].data[4] = 1; - sub_806E750(1, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + ShowPartyPopupMenu(1, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); } else { gTasks[taskId].data[4] = 0; - sub_806E750(0, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + ShowPartyPopupMenu(0, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); } } else { gTasks[taskId].data[4] = 2; - sub_806E750(2, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + ShowPartyPopupMenu(2, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); } } @@ -795,7 +793,7 @@ static void DaycareStorageMenuCallback_Store(u8); static void DaycareStorageMenuCallback_Summary(u8); static void DaycareStorageMenuCallback_Exit(u8); -static const struct PartyMenuItem sDaycareStorageMenuItems[] = +static const struct MenuAction2 sDaycareStorageMenuItems[] = { {OtherText_Store, DaycareStorageMenuCallback_Store}, {OtherText_Summary, DaycareStorageMenuCallback_Summary}, @@ -816,12 +814,12 @@ static void sub_8122D94(u8 taskId) if (!GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) { gTasks[taskId].data[4] = 0; - sub_806E750(0, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); + ShowPartyPopupMenu(0, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); } else { gTasks[taskId].data[4] = 1; - sub_806E750(1, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); + ShowPartyPopupMenu(1, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); } } diff --git a/src/party_menu.c b/src/party_menu.c index e1eb9cdae..7e515462a 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -9,6 +9,7 @@ #include "item.h" #include "item_use.h" #include "item_menu.h" +#include "items.h" #include "mail_data.h" #include "main.h" #include "menu.h" @@ -30,7 +31,6 @@ #include "palette.h" #include "event_data.h" #include "main.h" -#include "item.h" #include "battle_interface.h" #include "species.h" #include "party_menu.h" @@ -111,6 +111,34 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif +void ShowPartyPopupMenu(u8 menuIndex, const struct PartyPopupMenu *menu, const struct MenuAction2 *menuActions, u8 cursorPos) +{ + u8 left; + u8 top; + + sub_806E720(menuIndex, &left, &top, menu); + sub_8089C50(left, top, menu[menuIndex].width, menu[menuIndex].numChoices, menuActions, menu[menuIndex].items); + + InitMenu(0, left + 1, top + 1, menu[menuIndex].numChoices, cursorPos, menu[menuIndex].width - 1); +} + +void ClosePartyPopupMenu(u8 index, const struct PartyPopupMenu *menu) +{ + u8 left; + u8 top; + + sub_806E720(index, &left, &top, menu); + + MenuZeroFillWindowRect(left, top, left + menu[index].width, menu[index].numChoices * 2 + top + 1); + HandleDestroyMenuCursors(); +} + +TaskFunc PartyMenuGetPopupMenuFunc(u8 menuIndex, const struct PartyPopupMenu *menus, const struct MenuAction2 *menuActions, u8 itemIndex) +{ + u8 action = menus[menuIndex].items[itemIndex]; + return menuActions[action].func; +} + u8 sub_806E834(const u8 *message, u8 arg1) { u8 taskId; @@ -881,10 +909,10 @@ bool8 IsHPRecoveryItem(u16 item) { const u8 *itemEffect; - if (item == 0xAF) + if (item == ITEM_ENIGMA_BERRY) itemEffect = gSaveBlock1.enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[item - 13]; + itemEffect = gItemEffectTable[item - ITEM_POTION]; if (itemEffect[4] & 4) return TRUE; @@ -1199,10 +1227,10 @@ void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c) const u8 *itemEffect; u8 taskId2; - if (b == 0xAF) + if (b == ITEM_ENIGMA_BERRY) itemEffect = gSaveBlock1.enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[b - 13]; + itemEffect = gItemEffectTable[b - ITEM_POTION]; gTasks[taskId].func = TaskDummy; taskId2 = CreateTask(TaskDummy, 5); sub_806E8D0(taskId, b, c); @@ -1691,3 +1719,322 @@ void DoEvolutionStoneItemEffect(u8 taskId, u16 evolutionStoneItem, TaskFunc c) RemoveBagItem(evolutionStoneItem, 1); } } + +// u8 GetItemEffectType(u16 item) +// { +// const u8 *itemEffect; +// register u8 itemEffect0 asm("r1"); +// u8 mask; + +// // Read the item's effect properties. +// if (item == ITEM_ENIGMA_BERRY) +// { +// itemEffect = gSaveBlock1.enigmaBerry.itemEffect; +// } +// else +// { +// itemEffect = gItemEffectTable[item - ITEM_POTION]; +// } + +// itemEffect0 = itemEffect[0]; +// mask = 0x3F; + +// if ((itemEffect0 & mask) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & 0x80)) +// { +// return 0; +// } +// else if (itemEffect0 & 0x40) +// { +// return 10; +// } +// else if (itemEffect[3] & 0x40) +// { +// return 1; +// } +// else if ((itemEffect[3] & mask) || (itemEffect0 >> 7)) +// { +// if ((itemEffect[3] & mask) == 0x20) +// { +// return 4; +// } +// else if ((itemEffect[3] & mask) == 0x10) +// { +// return 3; +// } +// else if ((itemEffect[3] & mask) == 0x8) +// { +// return 5; +// } +// else if ((itemEffect[3] & mask) == 0x4) +// { +// return 6; +// } +// else if ((itemEffect[3] & mask) == 0x2) +// { +// return 7; +// } +// else if ((itemEffect[3] & mask) == 0x1) +// { +// return 8; +// } +// else if ((itemEffect0 >> 7) != 0 && (itemEffect[3] & mask) == 0) +// { +// return 9; +// } +// else +// { +// return 11; +// } +// } +// else if (itemEffect[4] & 0x44) +// { +// return 2; +// } +// else if (itemEffect[4] & 0x2) +// { +// return 12; +// } +// else if (itemEffect[4] & 0x1) +// { +// return 13; +// } +// else if (itemEffect[5] & 0x8) +// { +// return 14; +// } +// else if (itemEffect[5] & 0x4) +// { +// return 15; +// } +// else if (itemEffect[5] & 0x2) +// { +// return 16; +// } +// else if (itemEffect[5] & 0x1) +// { +// return 17; +// } +// else if (itemEffect[4] & 0x80) +// { +// return 18; +// } +// else if (itemEffect[4] & 0x20) +// { +// return 19; +// } +// else if (itemEffect[5] & 0x10) +// { +// return 20; +// } +// else if (itemEffect[4] & 0x18) +// { +// return 21; +// } +// else +// { +// return 22; +// } +// } +__attribute__((naked)) +u8 GetItemEffectType(u16 item) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + bne _08070E5C\n\ + ldr r4, _08070E58 @ =gSaveBlock1 + 0x3676\n\ + b _08070E66\n\ + .align 2, 0\n\ +_08070E58: .4byte gSaveBlock1 + 0x3676\n\ +_08070E5C:\n\ + ldr r1, _08070E8C @ =gItemEffectTable\n\ + subs r0, 0xD\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r4, [r0]\n\ +_08070E66:\n\ + ldrb r1, [r4]\n\ + movs r5, 0x3F\n\ + adds r0, r5, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08070E88\n\ + ldrb r0, [r4, 0x1]\n\ + cmp r0, 0\n\ + bne _08070E88\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r0, 0\n\ + bne _08070E88\n\ + ldrb r3, [r4, 0x3]\n\ + movs r0, 0x80\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08070E90\n\ +_08070E88:\n\ + movs r0, 0\n\ + b _08070F8A\n\ + .align 2, 0\n\ +_08070E8C: .4byte gItemEffectTable\n\ +_08070E90:\n\ + movs r2, 0x40\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070E9E\n\ + movs r0, 0xA\n\ + b _08070F8A\n\ +_08070E9E:\n\ + adds r0, r2, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08070EAA\n\ + movs r0, 0x1\n\ + b _08070F8A\n\ +_08070EAA:\n\ + adds r2, r5, 0\n\ + ands r2, r3\n\ + cmp r2, 0\n\ + bne _08070EB8\n\ + lsrs r0, r1, 7\n\ + cmp r0, 0\n\ + beq _08070EFA\n\ +_08070EB8:\n\ + cmp r2, 0x20\n\ + bne _08070EC0\n\ + movs r0, 0x4\n\ + b _08070F8A\n\ +_08070EC0:\n\ + cmp r2, 0x10\n\ + bne _08070EC8\n\ + movs r0, 0x3\n\ + b _08070F8A\n\ +_08070EC8:\n\ + cmp r2, 0x8\n\ + bne _08070ED0\n\ + movs r0, 0x5\n\ + b _08070F8A\n\ +_08070ED0:\n\ + cmp r2, 0x4\n\ + bne _08070ED8\n\ + movs r0, 0x6\n\ + b _08070F8A\n\ +_08070ED8:\n\ + cmp r2, 0x2\n\ + bne _08070EE0\n\ + movs r0, 0x7\n\ + b _08070F8A\n\ +_08070EE0:\n\ + cmp r2, 0x1\n\ + bne _08070EE8\n\ + movs r0, 0x8\n\ + b _08070F8A\n\ +_08070EE8:\n\ + lsrs r0, r1, 7\n\ + cmp r0, 0\n\ + beq _08070EF6\n\ + cmp r2, 0\n\ + bne _08070EF6\n\ + movs r0, 0x9\n\ + b _08070F8A\n\ +_08070EF6:\n\ + movs r0, 0xB\n\ + b _08070F8A\n\ +_08070EFA:\n\ + ldrb r1, [r4, 0x4]\n\ + movs r0, 0x44\n\ + ands r0, r1\n\ + adds r2, r1, 0\n\ + cmp r0, 0\n\ + beq _08070F0A\n\ + movs r0, 0x2\n\ + b _08070F8A\n\ +_08070F0A:\n\ + movs r5, 0x2\n\ + adds r0, r5, 0\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08070F18\n\ + movs r0, 0xC\n\ + b _08070F8A\n\ +_08070F18:\n\ + movs r3, 0x1\n\ + adds r0, r3, 0\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08070F26\n\ + movs r0, 0xD\n\ + b _08070F8A\n\ +_08070F26:\n\ + ldrb r1, [r4, 0x5]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070F34\n\ + movs r0, 0xE\n\ + b _08070F8A\n\ +_08070F34:\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070F40\n\ + movs r0, 0xF\n\ + b _08070F8A\n\ +_08070F40:\n\ + adds r0, r5, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070F4C\n\ + movs r0, 0x10\n\ + b _08070F8A\n\ +_08070F4C:\n\ + adds r0, r3, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070F58\n\ + movs r0, 0x11\n\ + b _08070F8A\n\ +_08070F58:\n\ + movs r0, 0x80\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08070F64\n\ + movs r0, 0x12\n\ + b _08070F8A\n\ +_08070F64:\n\ + movs r0, 0x20\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08070F70\n\ + movs r0, 0x13\n\ + b _08070F8A\n\ +_08070F70:\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08070F7C\n\ + movs r0, 0x14\n\ + b _08070F8A\n\ +_08070F7C:\n\ + movs r0, 0x18\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08070F88\n\ + movs r0, 0x16\n\ + b _08070F8A\n\ +_08070F88:\n\ + movs r0, 0x15\n\ +_08070F8A:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +void unref_sub_8070F90() +{ + FlagSet(SYS_POKEDEX_GET); + FlagSet(SYS_POKEMON_GET); + FlagSet(SYS_POKENAV_GET); +} diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index dd6b576a3..dc5d018d4 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -389,18 +389,18 @@ static void sub_808A060(u8 taskID) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, (void *)sPokemonMenuActions, sPokeMenuCursorPos)(taskID); + PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, sPokemonMenuActions, sPokeMenuCursorPos)(taskID); } else if (gMain.newKeys & B_BUTTON) { - sub_806E7D0(0, &sUnknown_0839F578); + ClosePartyPopupMenu(0, &sUnknown_0839F578); PokemonMenu_CancelSubmenu(taskID); } } static void sub_808A100(u8 taskID) { - sub_806E750(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0); + ShowPartyPopupMenu(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0); sub_806D538(0xD, 2); gTasks[taskID].func = sub_808A060; } @@ -619,7 +619,7 @@ static void PokemonMenu_Mail(u8 taskID) HandleDestroyMenuCursors(); sPokeMenuCursorPos = 0; MenuZeroFillWindowRect(19, 0, 29, 19); - sub_806E750(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, 0); + ShowPartyPopupMenu(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, 0); gTasks[taskID].func = sub_808A73C; } @@ -629,26 +629,26 @@ static void sub_808A73C(u8 taskID) { PlaySE(SE_SELECT); if (sPokeMenuCursorPos == 0) - sPokeMenuCursorPos = MoveMenuCursor(sUnknown_0839F584.unk0 - 1); + sPokeMenuCursorPos = MoveMenuCursor(sUnknown_0839F584.numChoices - 1); else sPokeMenuCursorPos = MoveMenuCursor(-1); } if (gMain.newAndRepeatedKeys == DPAD_DOWN) { PlaySE(SE_SELECT); - if (sPokeMenuCursorPos == sUnknown_0839F584.unk0 - 1) - sPokeMenuCursorPos = MoveMenuCursor(1 - sUnknown_0839F584.unk0); + if (sPokeMenuCursorPos == sUnknown_0839F584.numChoices - 1) + sPokeMenuCursorPos = MoveMenuCursor(1 - sUnknown_0839F584.numChoices); else sPokeMenuCursorPos = MoveMenuCursor(1); } if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, sPokeMenuCursorPos)(taskID); + PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F584, sPokemonMenuActions, sPokeMenuCursorPos)(taskID); } else if (gMain.newKeys & B_BUTTON) { - sub_806E7D0(0, &sUnknown_0839F584); + ClosePartyPopupMenu(0, &sUnknown_0839F584); PokemonMenu_Cancel(taskID); } } -- cgit v1.2.3 From 31d472d048e916f959d93efdf79443c3b0113700 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Sep 2017 15:29:59 -0700 Subject: Decompile SetPartyPopupMenuOffsets --- src/party_menu.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 7e515462a..e98af59ee 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -111,12 +111,22 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif + +void SetPartyPopupMenuOffsets(u8 menuIndex, u8 *left, u8 *top, const struct PartyPopupMenu *menu) +{ + u8 bottomOffset = (2 * menu[menuIndex].numChoices) + 2; + u8 rightOffset = menu[menuIndex].width + 1; + + *left = 30 - rightOffset; + *top = 20 - bottomOffset; +} + void ShowPartyPopupMenu(u8 menuIndex, const struct PartyPopupMenu *menu, const struct MenuAction2 *menuActions, u8 cursorPos) { u8 left; u8 top; - sub_806E720(menuIndex, &left, &top, menu); + SetPartyPopupMenuOffsets(menuIndex, &left, &top, menu); sub_8089C50(left, top, menu[menuIndex].width, menu[menuIndex].numChoices, menuActions, menu[menuIndex].items); InitMenu(0, left + 1, top + 1, menu[menuIndex].numChoices, cursorPos, menu[menuIndex].width - 1); @@ -127,7 +137,7 @@ void ClosePartyPopupMenu(u8 index, const struct PartyPopupMenu *menu) u8 left; u8 top; - sub_806E720(index, &left, &top, menu); + SetPartyPopupMenuOffsets(index, &left, &top, menu); MenuZeroFillWindowRect(left, top, left + menu[index].width, menu[index].numChoices * 2 + top + 1); HandleDestroyMenuCursors(); -- cgit v1.2.3 From 82fa74e7a24b95ba6642bc3cbef3830f32c460a7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Sep 2017 15:51:04 -0700 Subject: Decompile SwapPokemon --- src/battle_party_menu.c | 5 ++--- src/party_menu.c | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index ca883daec..9db9b0dab 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -40,7 +40,6 @@ extern void sub_806AF4C(); extern void sub_806AEDC(void); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); -extern void sub_806E6F0(); extern void nullsub_14(); extern void OpenPartyMenu(); extern u8 sub_803FBBC(void); @@ -338,7 +337,7 @@ void unref_sub_8094DB0(void) { r4 = sub_8094C20(0); sub_8094C98(0, i); - sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]); + SwapPokemon(&gPlayerParty[r4], &gPlayerParty[n]); break; } } @@ -732,7 +731,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) gUnknown_0202E8F4 = 1; r4 = pokemon_order_func(gBattlePartyID[gBankInMenu]); sub_8094C98(r4, partySelection); - sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); + SwapPokemon(&gPlayerParty[r4], &gPlayerParty[partySelection]); gTasks[taskId].func = Task_809527C; } diff --git a/src/party_menu.c b/src/party_menu.c index e98af59ee..553ff0ad0 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -112,6 +112,13 @@ void sub_806AEDC(void) #endif +void SwapPokemon(struct Pokemon *a, struct Pokemon *b) +{ + struct Pokemon temp = *a; + *a = *b; + *b = temp; +} + void SetPartyPopupMenuOffsets(u8 menuIndex, u8 *left, u8 *top, const struct PartyPopupMenu *menu) { u8 bottomOffset = (2 * menu[menuIndex].numChoices) + 2; -- cgit v1.2.3 From 5d5f91e71b5dad8245415e3bc255b2567d56f3a7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Sep 2017 16:00:36 -0700 Subject: Decompile PartyMenuDrawHPBars --- src/battle_party_menu.c | 1 - src/party_menu.c | 12 +++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 9db9b0dab..a21a76683 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -31,7 +31,6 @@ 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 void sub_806D5A4(void); extern void sub_802E414(void); diff --git a/src/party_menu.c b/src/party_menu.c index 553ff0ad0..294a1f2ed 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -112,6 +112,16 @@ void sub_806AEDC(void) #endif +void PartyMenuDrawHPBars(void) +{ + u8 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + PartyMenuTryDrawHPBar(i, &gPlayerParty[i]); + } +} + void SwapPokemon(struct Pokemon *a, struct Pokemon *b) { struct Pokemon temp = *a; @@ -2049,7 +2059,7 @@ _08070F8A:\n\ .syntax divided\n"); } -void unref_sub_8070F90() +void unref_sub_8070F90(void) { FlagSet(SYS_POKEDEX_GET); FlagSet(SYS_POKEMON_GET); -- cgit v1.2.3 From 38f06a72f86940d46abf3aa304f4b8d72398ea15 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Sep 2017 16:37:35 -0700 Subject: Decompile PartyMenuTryDrawHPBar --- src/choose_party.c | 1 - src/party_menu.c | 30 ++++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index 38533ba02..28d6a8c9d 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -72,7 +72,6 @@ extern void PartyMenuPutStatusTilemap(u8, int, u8); extern void PartyMenuPrintLevel(); extern void PartyMenuPutNicknameTilemap(); extern void PrintPartyMenuMonNickname(); -extern void PartyMenuDrawHPBar(); extern bool8 sub_80F9344(void); extern void sub_806D4AC(); extern void sub_806D3B4(); diff --git a/src/party_menu.c b/src/party_menu.c index 294a1f2ed..5baa0f8f3 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -33,7 +33,6 @@ #include "main.h" #include "battle_interface.h" #include "species.h" -#include "party_menu.h" struct Unk201C000 { @@ -85,7 +84,6 @@ extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); -void PartyMenuTryDrawHPBar(u8, struct Pokemon *); /* void sub_806AEDC(void) @@ -112,6 +110,22 @@ void sub_806AEDC(void) #endif +void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) +{ + if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) + { + u8 isDoubleBattle = IsLinkDoubleBattle(); + if (isDoubleBattle == TRUE) + { + PartyMenuDrawHPBar(monIndex, 2, pokemon); + } + else + { + PartyMenuDrawHPBar(monIndex, IsDoubleBattle(), pokemon); + } + } +} + void PartyMenuDrawHPBars(void) { u8 i; @@ -1580,7 +1594,7 @@ void PrintNewStatsInLevelUpWindow(u8 taskId) } } -void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) +void RedrawPokemonInfoInMenu(u8 monIndex, struct Pokemon *pokemon) { u8 statusAndPkrs; bool8 isDoubleBattle; @@ -1591,7 +1605,7 @@ void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) statusAndPkrs = GetMonStatusAndPokerus(pokemon); if (statusAndPkrs == 0 || statusAndPkrs == 6) { - PartyMenuUpdateLevelOrStatus(pokemon, a); + PartyMenuUpdateLevelOrStatus(pokemon, monIndex); } isDoubleBattle = IsDoubleBattle(); @@ -1599,13 +1613,13 @@ void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) currentHP = GetMonData(pokemon, MON_DATA_HP); maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); - PartyMenuDoPrintHP(a, isDoubleBattle, currentHP, maxHP); - PartyMenuTryDrawHPBar(a, pokemon); + PartyMenuDoPrintHP(monIndex, isDoubleBattle, currentHP, maxHP); + PartyMenuTryDrawHPBar(monIndex, pokemon); - icon = GetMonIconSpriteId_maybe(ewram1C000.unk4, a); + icon = GetMonIconSpriteId_maybe(ewram1C000.unk4, monIndex); SetMonIconAnim(icon, pokemon); - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + a * 2], 7); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + monIndex * 2], 7); ewram1B000.unk261 = 2; } -- cgit v1.2.3 From f4941b3f8e6ed9a919256e5b437d9f88093dcd8d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 20 Sep 2017 21:36:26 -0700 Subject: Decompile printHP functions in party_menu.c --- src/battle_interface.c | 6 +-- src/battle_party_menu.c | 1 - src/choose_party.c | 1 - src/party_menu.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 107 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/battle_interface.c b/src/battle_interface.c index 246bda62b..95f8f73c0 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -97,7 +97,7 @@ static int sub_8045F58(s32, s32, int, int *, u8, u16); static u8 GetScaledExpFraction(int, int, int, u8); static void sub_8045D58(u8, u8); static u8 sub_804602C(int, int, int, int *, u8 *, u8); -static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c); +static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, u16 *c); static int do_nothing(s16 unused1, s16 unused2, int unused3) { @@ -2972,7 +2972,7 @@ static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f) return r3; } -s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d) +s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, u16 *c, int d) { u16 r7; s16 r1; @@ -2987,7 +2987,7 @@ s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d) return r7; } -static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c) +static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, u16 *c) { u8 sp8[6]; u16 sp10[6]; diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index a21a76683..595cdcc48 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -29,7 +29,6 @@ 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 u8 sub_806B58C(u8); extern void sub_806D5A4(void); diff --git a/src/choose_party.c b/src/choose_party.c index 28d6a8c9d..55ce3583d 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -76,7 +76,6 @@ extern bool8 sub_80F9344(void); extern void sub_806D4AC(); extern void sub_806D3B4(); extern void PartyMenuDoPrintLevel(u8, u8, u8); -extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16); extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *); extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); diff --git a/src/party_menu.c b/src/party_menu.c index 5baa0f8f3..bd20ce5ed 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -74,13 +74,15 @@ extern u16 gMoveToLearn; //extern const u16 gUnknown_083769A8[][6]; //extern const u8 gUnknown_083769A8[][12]; -extern void *const gUnknown_08376858[][6]; +extern u16 *const gUnknown_08376858[][6]; extern const u8 gUnknown_083769A8[]; extern const u8 gUnknown_08376D1C[NUM_STATS]; extern const u16 gUnknown_08376504[]; extern void (*const gUnknown_08376B54[])(u8); extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; +extern u8 gUnknown_02039460[]; +extern u8 gTileBuffer[]; static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); @@ -110,6 +112,107 @@ void sub_806AEDC(void) #endif +void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) +{ + u32 *var; + register u8 *stringVar1 asm("r2") = gStringVar1; + register u8 *textPtr asm("r2") = sub_8072C14(stringVar1, currentHP, 15, 1); + textPtr[0] = CHAR_SLASH; + + sub_8072C14(++textPtr, maxHP, 35, 1); + var = 0; + + CpuFastSet(&var, gUnknown_02039460, 0x1000040); + sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100, gStringVar1); + CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64); +} + +void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon) +{ + u16 currentHP; + u16 maxHP; + + currentHP = GetMonData(pokemon, MON_DATA_HP); + maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); + + PartyMenuDoPrintHP(monIndex, b, currentHP, maxHP); +} + +void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) +{ + if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) + { + u8 isDoubleBattle = IsLinkDoubleBattle(); + if (isDoubleBattle == TRUE) + { + PartyMenuPrintHP(monIndex, 2, pokemon); + } + else + { + PartyMenuPrintHP(monIndex, IsDoubleBattle(), pokemon); + } + } +} + +void PartyMenuTryPrintMonsHP(void) +{ + u8 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + PartyMenuTryPrintHP(i, &gPlayerParty[i]); + } +} + +void unref_sub_806E564(void) { } +void unref_sub_806E568(void) { } +void nullsub_12(void) { } +void nullsub_13(void) { } + +void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) +{ + u8 hpBarLevel; + u16 *vramPtr; + int var = -32768; + struct BattleInterfaceStruct1 battleInterface; + battleInterface.unk0 = maxHP; + battleInterface.unk4 = currentHP; + battleInterface.unk8 = 0; + + hpBarLevel = GetHPBarLevel(currentHP, maxHP); + if (hpBarLevel > 2) + { + battleInterface.unkC_0 = 4; + } + if (hpBarLevel == 2) + { + battleInterface.unkC_0 = 5; + } + if (hpBarLevel < 2) + { + battleInterface.unkC_0 = 6; + } + + battleInterface.unk10 = 0x100; + + vramPtr = gUnknown_08376858[b][monIndex]; + sub_80460C8(&battleInterface, &var, vramPtr, 0); + + vramPtr -= 2; + + vramPtr[0] = 0x3109; + vramPtr[1] = 0x310A; + vramPtr[8] = 0x310B; +} + +void PartyMenuDrawHPBar(u8 monIndex, u8 b, struct Pokemon *pokemon) +{ + u16 currentHP = GetMonData(pokemon, MON_DATA_HP); + u16 maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); + + PartyMenuDoDrawHPBar(monIndex, b, currentHP, maxHP); +} + void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) -- cgit v1.2.3 From 18e88baffa65cc6a647f96441446238616df275c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 21 Sep 2017 20:40:14 -0700 Subject: Decompile PartyMenuPrintGenderIcon funcs --- src/battle_interface.c | 2 +- src/choose_party.c | 6 ++---- src/party_menu.c | 39 +++++++++++++++++++++++++++++++++++++++ src/pokemon_3.c | 8 ++++---- 4 files changed, 46 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/battle_interface.c b/src/battle_interface.c index 95f8f73c0..7c9253852 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2388,7 +2388,7 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) gender = GetMonGender(pkmn); species = GetMonData(pkmn, MON_DATA_SPECIES); language = GetMonData(pkmn, MON_DATA_LANGUAGE); - if (sub_8040D3C(species, nickname, language)) + if (ShouldHideGenderIconForLanguage(species, nickname, language)) gender = 100; switch (gender) { diff --git a/src/choose_party.c b/src/choose_party.c index 55ce3583d..c666cc68f 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -70,13 +70,11 @@ extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern void PartyMenuPutStatusTilemap(u8, int, u8); extern void PartyMenuPrintLevel(); -extern void PartyMenuPutNicknameTilemap(); extern void PrintPartyMenuMonNickname(); extern bool8 sub_80F9344(void); extern void sub_806D4AC(); extern void sub_806D3B4(); extern void PartyMenuDoPrintLevel(u8, u8, u8); -extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *); extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); @@ -647,7 +645,7 @@ static void sub_81229B8(void) PartyMenuPutStatusTilemap(i, 3, status - 1); else PartyMenuPrintLevel(i, 3, &gPlayerParty[i]); - PartyMenuPutNicknameTilemap(i, 3, &gPlayerParty[i]); + PartyMenuPrintGenderIcon(i, 3, &gPlayerParty[i]); PrintPartyMenuMonNickname(i, 3, &gPlayerParty[i]); PartyMenuDrawHPBar(i, 3, &gPlayerParty[i]); } @@ -697,7 +695,7 @@ static void sub_8122B10(u8 taskId) PartyMenuPutStatusTilemap(i + 3, 3, r2 - 1); else PartyMenuDoPrintLevel(i + 3, 3, gUnknown_02023A00[i].level); - PartyMenuDoPutNicknameTilemap(gUnknown_02023A00[i].species, gUnknown_02023A00[i].gender, 3, i + 3, gUnknown_02023A00[i].nickname); + PartyMenuDoPrintGenderIcon(gUnknown_02023A00[i].species, gUnknown_02023A00[i].gender, 3, i + 3, gUnknown_02023A00[i].nickname); StringCopy(gStringVar1, gUnknown_02023A00[i].nickname); StringGetEnd10(gStringVar1); SanitizeNameString(gStringVar1); diff --git a/src/party_menu.c b/src/party_menu.c index bd20ce5ed..38a01345e 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -60,6 +60,12 @@ struct UnknownStruct5 u16 *unk4; }; +struct GenderIconCoords +{ + u8 x; + u8 y; +}; + #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) @@ -72,6 +78,7 @@ extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; extern u16 gMoveToLearn; +extern struct GenderIconCoords const gUnknown_08376738[12][6]; //extern const u16 gUnknown_083769A8[][6]; //extern const u8 gUnknown_083769A8[][12]; extern u16 *const gUnknown_08376858[][6]; @@ -84,6 +91,8 @@ extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; extern u8 gUnknown_02039460[]; extern u8 gTileBuffer[]; +extern void PartyMenuWriteTilemap(u8, u8 b, u8 c); + static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); @@ -112,6 +121,36 @@ void sub_806AEDC(void) #endif +void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 c, u8 monIndex, u8 *nickname) +{ + if (!ShouldHideGenderIcon(species, nickname)) + { + u8 x = gUnknown_08376738[c][monIndex].x + 3; + u8 y = gUnknown_08376738[c][monIndex].y + 1; + + switch (gender) + { + case MON_MALE: + PartyMenuWriteTilemap(0x42, x, y); + break; + case MON_FEMALE: + PartyMenuWriteTilemap(0x44, x, y); + break; + } + } +} + +void PartyMenuPrintGenderIcon(u8 monIndex, u8 b, struct Pokemon *pokemon) +{ + u16 species2; + u8 gender; + + GetMonNickname(pokemon, gStringVar1); + species2 = GetMonData(pokemon, MON_DATA_SPECIES2); + gender = GetMonGender(pokemon); + PartyMenuDoPrintGenderIcon(species2, gender, b, monIndex, gStringVar1); +} + void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) { u32 *var; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index e51d3187b..263b8b746 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -1337,7 +1337,7 @@ u8 *sub_8040D08(void) return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name; } -bool32 sub_8040D3C(u16 species, u8 *name, u8 language) +bool32 ShouldHideGenderIconForLanguage(u16 species, u8 *name, u8 language) { bool32 retVal = FALSE; if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) @@ -1362,12 +1362,12 @@ bool32 sub_8040D3C(u16 species, u8 *name, u8 language) return retVal; } -bool32 sub_8040D8C(u16 species, u8 *name) +bool32 ShouldHideGenderIcon(u16 species, u8 *name) { u8 language = GAME_LANGUAGE; if (name[0] == 0xFC && name[1] == 21) language = LANGUAGE_JAPANESE; - return sub_8040D3C(species, name, language); + return ShouldHideGenderIconForLanguage(species, name, language); } bool32 unref_sub_8040DAC(struct Pokemon *mon) @@ -1376,5 +1376,5 @@ bool32 unref_sub_8040DAC(struct Pokemon *mon) u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0); GetMonData(mon, MON_DATA_NICKNAME, name); - return sub_8040D3C(species, name, language); + return ShouldHideGenderIconForLanguage(species, name, language); } -- cgit v1.2.3 From bbdef672b72d069a44f332c8c550edfe8bab25c5 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 21 Sep 2017 21:06:01 -0700 Subject: Decompile PartyMenuPrintMonLevelOrStatus funcs --- src/choose_party.c | 1 - src/party_menu.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index c666cc68f..ed96bf3a7 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -69,7 +69,6 @@ extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern void PartyMenuPutStatusTilemap(u8, int, u8); -extern void PartyMenuPrintLevel(); extern void PrintPartyMenuMonNickname(); extern bool8 sub_80F9344(void); extern void sub_806D4AC(); diff --git a/src/party_menu.c b/src/party_menu.c index 38a01345e..467820111 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -120,6 +120,58 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif +extern void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status); +extern void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level); + + +void PartyMenuPrintLevel(u8 monIndex, u8 b, struct Pokemon *pokemon) +{ + u16 level = GetMonData(pokemon, MON_DATA_LEVEL); + PartyMenuDoPrintLevel(monIndex, b, level); +} + +void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) +{ + if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) + { + u8 statusAndPkrs; + u8 isLinkDoubleBattle; + u8 b; + + statusAndPkrs = GetMonStatusAndPokerus(pokemon); + + isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == TRUE) + { + b = 2; + } + else + { + b = IsDoubleBattle(); + } + + if (statusAndPkrs != 0 && statusAndPkrs != 6) + { + PartyMenuPutStatusTilemap(monIndex, b, statusAndPkrs - 1); + } + else + { + PartyMenuPrintLevel(monIndex, b, pokemon); + } + + PartyMenuPrintGenderIcon(monIndex, b, pokemon); + } +} + +void PartyMenuPrintMonsLevelOrStatus() +{ + u8 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + PartyMenuPrintMonLevelOrStatus(i, &gPlayerParty[i]); + } +} void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 c, u8 monIndex, u8 *nickname) { @@ -181,8 +233,8 @@ void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 isDoubleBattle = IsLinkDoubleBattle(); - if (isDoubleBattle == TRUE) + u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == TRUE) { PartyMenuPrintHP(monIndex, 2, pokemon); } -- cgit v1.2.3 From 6b8d5537e2639756d77f60bea8f4872d9abe34f1 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 22 Sep 2017 20:56:29 -0700 Subject: Decompile several more party_menu funcs --- src/choose_party.c | 2 -- src/party_menu.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 78 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index ed96bf3a7..223c97f69 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -68,12 +68,10 @@ extern void CreatePartyMenuMonIcon(); extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); -extern void PartyMenuPutStatusTilemap(u8, int, u8); extern void PrintPartyMenuMonNickname(); extern bool8 sub_80F9344(void); extern void sub_806D4AC(); extern void sub_806D3B4(); -extern void PartyMenuDoPrintLevel(u8, u8, u8); extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); diff --git a/src/party_menu.c b/src/party_menu.c index 467820111..541c04fdc 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -91,8 +91,6 @@ extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; extern u8 gUnknown_02039460[]; extern u8 gTileBuffer[]; -extern void PartyMenuWriteTilemap(u8, u8 b, u8 c); - static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); @@ -120,10 +118,85 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif -extern void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status); -extern void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level); +u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer) +{ + GetMonData(pokemon, MON_DATA_NICKNAME, stringBuffer); + return StringGetEnd10(stringBuffer); +} + +void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status) +{ + u8 i; + u8 x = gUnknown_08376738[b][monIndex].x - 1; + u8 y = gUnknown_08376738[b][monIndex].y + 1; + u16 *vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); + u8 var1 = status * 4; + + for (i = 0; i < 4; i++) + { + vramPtr[i] = (0x18C + var1 + i) | -0x5000; + } +} + +static void PartyMenuClearLevelStatusTilemap(u8 monIndex) +{ + u8 isLinkDoubleBattle; + u8 b; + u8 x; + u8 y; + u16 *vramPtr; + u8 i; + + isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == TRUE) + { + b = 2; + } + else + { + b = IsDoubleBattle(); + } + + x = gUnknown_08376738[b][monIndex].x - 1; + y = gUnknown_08376738[b][monIndex].y + 1; + + vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); + for (i = 0; i < 4; i++) + { + vramPtr[i] = 0; + } +} + +static void PartyMenuWriteTilemap(u8 a, u8 x, u8 y) +{ + u16 *vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); + *vramPtr = a + 0x10C; +} + +void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level) +{ + u8 *stringVar; + u32 var1; + u8 x = gUnknown_08376738[b][monIndex].x; + u8 y = gUnknown_08376738[b][monIndex].y; + + PartyMenuWriteTilemap(0x40, x - 1, y + 1); + + stringVar = gStringVar1; + stringVar[0] = 0xFC; + stringVar[1] = 0x12; + stringVar[2] = 0x8; + + ConvertIntToDecimalString(&stringVar[3], level); + + var1 = 0; + CpuFastSet(&var1, gUnknown_02039460, 0x1000020); + sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); + CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x200 + (monIndex * 0x400)), 32); +} + void PartyMenuPrintLevel(u8 monIndex, u8 b, struct Pokemon *pokemon) { u16 level = GetMonData(pokemon, MON_DATA_LEVEL); @@ -214,7 +287,7 @@ void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) var = 0; CpuFastSet(&var, gUnknown_02039460, 0x1000040); - sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100, gStringVar1); + sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64); } -- cgit v1.2.3 From e27de6bda3ab58f4190582532b399620082e385a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 22 Sep 2017 21:21:48 -0700 Subject: Decompile party_menu nickname printing funcs --- src/battle_party_menu.c | 1 - src/choose_party.c | 5 +---- src/party_menu.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 595cdcc48..e80737210 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -28,7 +28,6 @@ extern void LoadHeldItemIconGraphics(void); extern void CreateHeldItemIcons_806DC34(); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); -extern void PrintPartyMenuMonNicknames(void); extern void nullsub_13(void); extern u8 sub_806B58C(u8); extern void sub_806D5A4(void); diff --git a/src/choose_party.c b/src/choose_party.c index 223c97f69..6e2d2382a 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -48,7 +48,6 @@ extern void LoadHeldItemIconGraphics(void); extern void CreateHeldItemIcons_806DC34(); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); -extern void PrintPartyMenuMonNicknames(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); extern u16 sub_806BE38(); @@ -68,11 +67,9 @@ extern void CreatePartyMenuMonIcon(); extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); -extern void PrintPartyMenuMonNickname(); extern bool8 sub_80F9344(void); extern void sub_806D4AC(); extern void sub_806D3B4(); -extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); static void ClearPartySelection(void); @@ -696,7 +693,7 @@ static void sub_8122B10(u8 taskId) StringCopy(gStringVar1, gUnknown_02023A00[i].nickname); StringGetEnd10(gStringVar1); SanitizeNameString(gStringVar1); - box_print(i + 3, 3, gStringVar1); + PartyMenuDoPrintMonNickname(i + 3, 3, gStringVar1); PartyMenuDoDrawHPBar(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp); } } diff --git a/src/party_menu.c b/src/party_menu.c index 541c04fdc..10b2719e4 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -119,6 +119,46 @@ void sub_806AEDC(void) #endif +void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer) +{ + u32 var1 = 0; + CpuFastSet(&var1, gTileBuffer, 0x1000100); + sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gTileBuffer, nameBuffer); + CpuFastSet(gTileBuffer, (void *)(OBJ_VRAM1 + (monIndex * 0x400)), 128); +} + +void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon) +{ + u8 nameBuffer[12]; + GetMonNickname(pokemon, nameBuffer); + PartyMenuDoPrintMonNickname(monIndex, b, nameBuffer); +} + +void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon) +{ + if (GetMonData(pokemon, MON_DATA_SPECIES)) + { + u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == TRUE) + { + PrintPartyMenuMonNickname(monIndex, 2, pokemon); + } + else + { + PrintPartyMenuMonNickname(monIndex, IsDoubleBattle(), pokemon); + } + } +} + +void PrintPartyMenuMonNicknames(void) +{ + u8 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + TryPrintPartyMenuMonNickname(i, &gPlayerParty[i]); + } +} u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer) { -- cgit v1.2.3 From c3792f2bd4c6ee3fecea548f45b2a54a9b468ab1 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 23 Sep 2017 15:08:32 -0700 Subject: Decompile HeldItemIcon funcs in party_menu --- src/battle_party_menu.c | 2 - src/choose_party.c | 2 - src/party_menu.c | 410 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 410 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index e80737210..f8f43e2bd 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -24,8 +24,6 @@ extern u8 ewram[]; 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 nullsub_13(void); diff --git a/src/choose_party.c b/src/choose_party.c index 6e2d2382a..aa2e04f03 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -44,8 +44,6 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; extern void OpenPartyMenu(); 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 sub_806BC3C(u8, u8); diff --git a/src/party_menu.c b/src/party_menu.c index 10b2719e4..48576a156 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -85,11 +85,14 @@ extern u16 *const gUnknown_08376858[][6]; extern const u8 gUnknown_083769A8[]; extern const u8 gUnknown_08376D1C[NUM_STATS]; extern const u16 gUnknown_08376504[]; +extern const struct SpriteSheet gUnknown_083765DC; +extern const struct SpritePalette gUnknown_083765E4; extern void (*const gUnknown_08376B54[])(u8); extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; extern u8 gUnknown_02039460[]; extern u8 gTileBuffer[]; +extern const struct SpriteTemplate gSpriteTemplate_837660C[]; static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); @@ -118,6 +121,413 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif +extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); + + +void LoadHeldItemIconGraphics(void) +{ + LoadSpriteSheet(&gUnknown_083765DC); + LoadSpritePalette(&gUnknown_083765E4); +} + +void SpriteCB_HeldItemIcon(struct Sprite *sprite) +{ + + u8 data7 = sprite->data7; + if (gSprites[data7].invisible) + { + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + sprite->pos1.x = gSprites[data7].pos1.x + gSprites[data7].pos2.x; + sprite->pos1.y = gSprites[data7].pos1.y + gSprites[data7].pos2.y; + } +} + +void CreateHeldItemIcon(u8 a, u8 b) +{ + u8 subPriority; + u8 spriteId; + + subPriority = gSprites[a].subpriority; + spriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, subPriority - 1); + + gSprites[spriteId].pos2.x = 4; + gSprites[spriteId].pos2.y = 10; + gSprites[spriteId].callback = SpriteCB_HeldItemIcon; + gSprites[spriteId].data7 = a; + + StartSpriteAnim(&gSprites[spriteId], b); + gSprites[spriteId].callback(&gSprites[spriteId]); +} + +void CreateHeldItemIcons(u8 *a, u8 *b, u8 c) +{ + u16 i; + u16 heldItem; + + switch(c) + { + case 0: + i = 0; + while (i < a[0]) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + if (heldItem) + { + CreateHeldItemIcon(b[i], ItemIsMail(heldItem)); + } + + i++; + } + break; + case 1: + i = 0; + while (i < a[1]) + { + heldItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); + if (heldItem) + { + CreateHeldItemIcon(b[i + 6], ItemIsMail(heldItem)); + } + + i++; + } + break; + } +} + +void CreateHeldItemIcons_806DC34(u8 taskId) +{ + u8 i; + u8 monIconSpriteId; + u8 heldItemSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) + { + monIconSpriteId = GetMonIconSpriteId_maybe(taskId, i); + heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4); + + gSprites[heldItemSpriteId].pos2.x = 4; + gSprites[heldItemSpriteId].pos2.y = 10; + gSprites[heldItemSpriteId].data7 = monIconSpriteId; + gSprites[monIconSpriteId].data7 = heldItemSpriteId; + + SetHeldItemIconVisibility(taskId, i); + gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]); + } + } +} + +#ifdef NONMATCHING +void CreateHeldItemIcon_806DCD4(int taskId, u8 monIndex, int item) +{ + u8 monIconSpriteId; + u8 heldItemSpriteId; + + monIconSpriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4); + + gSprites[heldItemSpriteId].pos2.x = 4; + gSprites[heldItemSpriteId].pos2.y = 10; + gSprites[heldItemSpriteId].data7 = monIconSpriteId; + gSprites[monIconSpriteId].data7 = heldItemSpriteId; + + if (!item) + { + gSprites[heldItemSpriteId].invisible = 1; + } + else + { + if (ItemIsMail(item)) + { + StartSpriteAnim(&gSprites[heldItemSpriteId], 1); + } + else + { + StartSpriteAnim(&gSprites[heldItemSpriteId], 0); + } + + gSprites[heldItemSpriteId].invisible = 0; + } + + gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]); +} +#else +__attribute__((naked)) +void CreateHeldItemIcon_806DCD4(u8 a, u8 monIndex) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + lsls r2, 16\n\ + lsrs r7, r2, 16\n\ + bl GetMonIconSpriteId_maybe\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldr r0, _0806DD2C @ =gSpriteTemplate_837660C\n\ + movs r1, 0xFA\n\ + movs r2, 0xAA\n\ + movs r3, 0x4\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, _0806DD30 @ =gSprites\n\ + lsls r0, r6, 4\n\ + adds r0, r6\n\ + lsls r0, 2\n\ + adds r5, r0, r1\n\ + movs r0, 0x4\n\ + strh r0, [r5, 0x24]\n\ + movs r0, 0xA\n\ + strh r0, [r5, 0x26]\n\ + strh r4, [r5, 0x3C]\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + strh r6, [r0, 0x3C]\n\ + cmp r7, 0\n\ + bne _0806DD34\n\ + adds r0, r5, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r2, 0x4\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _0806DD5C\n\ + .align 2, 0\n\ +_0806DD2C: .4byte gSpriteTemplate_837660C\n\ +_0806DD30: .4byte gSprites\n\ +_0806DD34:\n\ + adds r0, r7, 0\n\ + bl ItemIsMail\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0806DD46\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ + b _0806DD4A\n\ +_0806DD46:\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ +_0806DD4A:\n\ + bl StartSpriteAnim\n\ + adds r2, r5, 0\n\ + adds r2, 0x3E\n\ + ldrb r1, [r2]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ +_0806DD5C:\n\ + ldr r2, _0806DD78 @ =gSprites\n\ + lsls r0, r6, 4\n\ + adds r0, r6\n\ + lsls r0, 2\n\ + adds r1, r2, 0\n\ + adds r1, 0x1C\n\ + adds r1, r0, r1\n\ + adds r0, r2\n\ + ldr r1, [r1]\n\ + bl _call_via_r1\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806DD78: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite) +{ + u8 spriteId = sprite->data7; + + sprite->pos1.x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->pos1.y = gSprites[spriteId].pos1.y; +} + +u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex) +{ + switch(monIndex) + { + case 1: + return gTasks[taskId].data[0]; + break; + case 2: + return gTasks[taskId].data[1] >> 8; + break; + case 3: + return gTasks[taskId].data[1]; + break; + case 4: + return gTasks[taskId].data[2] >> 8; + break; + case 5: + return gTasks[taskId].data[2]; + break; + case 0: + default: + return gTasks[taskId].data[0] >> 8; + break; + } +} + +void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 c) +{ + switch(monIndex) + { + case 0: + gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (c << 8); + break; + case 1: + gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | c; + break; + case 2: + gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (c << 8); + break; + case 3: + gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | c; + break; + case 4: + gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (c << 8); + break; + case 5: + gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | c; + break; + } +} + +u16 GetHeldItemIconSpriteIdByMon_maybe(u8 taskId, u8 monIndex) +{ + u8 spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + u8 retVal = gSprites[spriteId].data7; + return retVal; +} + +#ifdef NONMATCHING +void SetHeldItemIconVisibility(u8 taskId, u8 monIndex) +{ + u8 spriteId; + u16 heldItem; + + spriteId = GetHeldItemIconSpriteIdByMon_maybe(taskId, monIndex); + if (!GetMonData(&gPlayerParty[monIndex], MON_DATA_HELD_ITEM)) + { + gSprites[spriteId].invisible = 1; + } + else + { + struct Sprite *sprite; + + heldItem = GetMonData(&gPlayerParty[monIndex], MON_DATA_HELD_ITEM); + sprite = &gSprites[spriteId]; + if (ItemIsMail(heldItem)) + { + StartSpriteAnim(sprite, 1); + } + else + { + StartSpriteAnim(sprite, 0); + } + + sprite->invisible = 0; + } +} +#else +__attribute__((naked)) +void SetHeldItemIconVisibility(u8 a, u8 monIndex) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r1, r4, 0\n\ + bl GetHeldItemIconSpriteIdByMon_maybe\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + adds r6, r5, 0\n\ + movs r0, 0x64\n\ + adds r1, r4, 0\n\ + muls r1, r0\n\ + ldr r0, _0806DFA4 @ =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0806DFAC\n\ + ldr r1, _0806DFA8 @ =gSprites\n\ + lsls r0, r5, 4\n\ + adds r0, r5\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r2, 0x4\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _0806DFF6\n\ + .align 2, 0\n\ +_0806DFA4: .4byte gPlayerParty\n\ +_0806DFA8: .4byte gSprites\n\ +_0806DFAC:\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl ItemIsMail\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0806DFD8\n\ + lsls r4, r5, 4\n\ + adds r4, r5\n\ + lsls r4, 2\n\ + ldr r0, _0806DFD4 @ =gSprites\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + b _0806DFE6\n\ + .align 2, 0\n\ +_0806DFD4: .4byte gSprites\n\ +_0806DFD8:\n\ + lsls r4, r6, 4\n\ + adds r4, r6\n\ + lsls r4, 2\n\ + ldr r0, _0806DFFC @ =gSprites\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ +_0806DFE6:\n\ + bl StartSpriteAnim\n\ + adds r4, 0x3E\n\ + ldrb r1, [r4]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r4]\n\ +_0806DFF6:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806DFFC: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif // NONMATCHING void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer) { -- cgit v1.2.3 From 31748e93d8be0b5e8410c2f11b5719d60c2162db Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 24 Sep 2017 13:05:06 -0700 Subject: More party_menu decomp --- src/battle_party_menu.c | 2 - src/choose_party.c | 6 - src/party_menu.c | 758 +++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 746 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index f8f43e2bd..9a71c09e8 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -23,12 +23,10 @@ extern u8 ewram[]; #define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. extern u8 IsLinkDoubleBattle(void); -extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void nullsub_13(void); extern u8 sub_806B58C(u8); -extern void sub_806D5A4(void); extern void sub_802E414(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); diff --git a/src/choose_party.c b/src/choose_party.c index aa2e04f03..f798baab1 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -43,7 +43,6 @@ extern const u16 gBattleTowerBanlist[]; EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; extern void OpenPartyMenu(); -extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); @@ -57,17 +56,12 @@ extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern void sub_806C890(); -extern void sub_806D5A4(); extern void sub_806B908(void); extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); -extern void sub_806D50C(int, u8); -extern void CreatePartyMenuMonIcon(); extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); -extern void sub_806D4AC(); -extern void sub_806D3B4(); extern void sub_806BCE8(void); static void ClearPartySelection(void); diff --git a/src/party_menu.c b/src/party_menu.c index 48576a156..0f7e95612 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4,6 +4,7 @@ #include "battle_interface.h" #include "battle_party_menu.h" #include "data2.h" +#include "decompress.h" #include "event_data.h" #include "evolution_scene.h" #include "item.h" @@ -15,6 +16,7 @@ #include "menu.h" #include "palette.h" #include "pokemon.h" +#include "pokemon_icon.h" #include "pokemon_item_effect.h" #include "pokemon_menu.h" #include "pokemon_summary_screen.h" @@ -66,6 +68,28 @@ struct GenderIconCoords u8 y; }; +struct PartyMenuWindowCoords +{ + u8 left; + u8 top; + u8 right; + u8 bottom; +}; + +struct UnknownPokemonStruct2 +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) @@ -79,6 +103,11 @@ extern s32 gBattleMoveDamage; extern u16 gMoveToLearn; extern struct GenderIconCoords const gUnknown_08376738[12][6]; +extern struct GenderIconCoords const gUnknown_08376678[12][6]; +extern struct PartyMenuWindowCoords const gUnknown_08376948[2][6]; +extern struct PartyMenuWindowCoords const gUnknown_08376978[2][6]; +extern u8 *const gUnknown_08376624[]; +extern const u8 gUnknown_083769C0[]; //extern const u16 gUnknown_083769A8[][6]; //extern const u8 gUnknown_083769A8[][12]; extern u16 *const gUnknown_08376858[][6]; @@ -93,9 +122,28 @@ extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; extern u8 gUnknown_02039460[]; extern u8 gTileBuffer[]; extern const struct SpriteTemplate gSpriteTemplate_837660C[]; - +extern struct Window gUnknown_03004210; + +extern const u8 gPartyMenuMisc_Gfx[]; +extern const u8 gPartyMenuMisc_Tilemap[]; +extern const u8 gPartyMenuMisc_Pal[]; +extern const u8 gFontDefaultPalette[]; +extern const u8 gPartyMenuHpBar_Gfx[]; +extern const u8 gPartyMenuOrderText_Gfx[]; +extern const u8 gStatusGfx_Icons[]; +extern const u8 gStatusPal_Icons[]; + +static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); +static void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon); +static void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon); +static void sub_806D05C(u8 taskId); +static void sub_806D15C(u8 taskId); +static void sub_806D198(u8 taskId); static void sub_806E884(u8 taskId); static void sub_8070D90(u8 taskId); +static void sub_806D5B8(u8 taskId); +static void sub_806D014(u8 taskId); +static void sub_806D118(u8 taskId); /* void sub_806AEDC(void) @@ -121,8 +169,694 @@ void sub_806AEDC(void) #define WINDOW_RIGHT (29) #endif +extern u8 UpdateMonIconFrame(struct Sprite *sprite); extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); +extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); +extern void sub_809D62C(struct Sprite *sprite); +extern void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); +extern void UpdateMonIconFrame_806DA38(struct Sprite *sprite); +extern void sub_806BB3C(s16 a, u8 b); +extern void sub_806BA94(s16 a, u8 b, u8 c, u8 d); +extern void sub_806B9A4(s16 a, u8 b, u8 c); +extern void SpriteCB_sub_806D37C(struct Sprite *sprite); +extern void sub_806BA34(s16 a, u8 b); +extern void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); +extern void sub_806CD44(u8 taskId); + + +void sub_806CAFC(u8 a, s16 b) +{ + struct Sprite *sprite1 = &gSprites[ewram01000.unk1]; + struct Sprite *sprite2 = &gSprites[ewram01000.unk2]; + + sub_806BF74(a, b); + + if (sprite1->data0 != sprite2->data0) + { + sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 1); + } + else + { + sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 0); + } +} + +void sub_806CB74(u8 taskId) +{ + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + sub_806CAFC(ewram01000.unk0, -1); + break; + case DPAD_DOWN: + sub_806CAFC(ewram01000.unk0, 1); + break; + case DPAD_LEFT: + sub_806CAFC(ewram01000.unk0, -2); + break; + case DPAD_RIGHT: + sub_806CAFC(ewram01000.unk0, 2); + break; + } + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(5); + gTasks[taskId].func = ewram01000.unkC; + gTasks[taskId].func(taskId); + } + else if (gMain.newKeys == B_BUTTON) + { + PlaySE(5); + sub_806CD44(taskId); + } +} + +void sub_806CC2C(u8 taskId) +{ + DestroySprite(&gSprites[ewram01000.unk1]); + sub_806D538(0, 0); + + ewram1B000.unk261 = 2; + SwitchTaskToFollowupFunc(ewram01000.unk0); + DestroyTask(taskId); +} + +void sub_806CC74(u8 taskId) +{ + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk2].data0 * 2], gSprites[ewram01000.unk2].data0, 3, 1); + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 3, 0); + sub_806CC2C(taskId); +} + +void sub_806CCE4() +{ + u8 monIndex1 = gSprites[ewram01000.unk1].data0; + u8 monIndex2 = gSprites[ewram01000.unk2].data0; + + if (monIndex1 <= 5) + { + sub_806BF24(&gUnknown_083769A8[monIndex1 * 2], monIndex1, 3, 0); + } + + if (monIndex2 <= 5) + { + sub_806BF24(&gUnknown_083769A8[monIndex2 * 2], monIndex2, 3, 1); + } +} + +void sub_806CD44(u8 taskId) +{ + sub_806CCE4(); + sub_806CC2C(taskId); +} + +void sub_806CD5C(u8 taskId) +{ + u8 monIndex1 = gSprites[ewram01000.unk1].data0; + u8 monIndex2 = gSprites[ewram01000.unk2].data0; + + if (monIndex1 == monIndex2 || monIndex1 == 7 || monIndex2 == 7) + { + sub_806CD44(taskId); + } + else + { + u8 var1; + + sub_806D5B8(monIndex1); + sub_806D5B8(monIndex2); + + if (monIndex1 > monIndex2) + { + ewram01000.unk5 = monIndex2; + ewram01000.unk6 = monIndex1; + } + else + { + ewram01000.unk5 = monIndex1; + ewram01000.unk6 = monIndex2; + } + + ewram01000.unk3 = GetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk5); + ewram01000.unk4 = GetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk6); + + var1 = ewram01000.unk5; + if (!var1) + { + gSprites[ewram01000.unk3].data0 = -8; + gSprites[ewram01000.unk3].data2 = -0xA8; + ewram01000.unk8 = var1; + ewram01000.unkA = 11; + + gTasks[taskId].func = sub_806D014; + ewram1B000.unk261 = 1; + } + else + { + gSprites[ewram01000.unk3].data0 = 8; + gSprites[ewram01000.unk3].data2 = 0xA8; + ewram01000.unk8 = 11; + ewram01000.unkA = 11; + + gTasks[taskId].func = sub_806D118; + ewram1B000.unk261 = 1; + } + + gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C; + + gSprites[ewram01000.unk4].data0 = 8; + gSprites[ewram01000.unk4].data2 = 0xA8; + gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C; + + gSprites[ewram01000.unk3].callback(&gSprites[ewram01000.unk3]); + gSprites[ewram01000.unk4].callback(&gSprites[ewram01000.unk4]); + } +} + +void sub_806CEF8(s16 *x, s16 *y) +{ + s16 temp = *x; + *x = *y; + *y = temp; +} + +#ifdef NONMATCHING +void sub_806CF04(void) +{ + sub_806CEF8(&gSprites[ewram01000.unk3].pos1.x, &gSprites[ewram01000.unk4].pos1.x); + sub_806CEF8(&gSprites[ewram01000.unk3].pos1.y, &gSprites[ewram01000.unk4].pos1.y); + sub_806CEF8(&gSprites[ewram01000.unk3].pos2.x, &gSprites[ewram01000.unk4].pos2.x); + sub_806CEF8(&gSprites[ewram01000.unk3].data0, &gSprites[ewram01000.unk4].data0); + + gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C; + gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C; +} +#else +__attribute__((naked)) +void sub_806CF04(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r4, _0806CF94 @ =0x02001000\n\ + ldrb r1, [r4, 0x3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r5, _0806CF98 @ =gSprites + 0x20\n\ + adds r0, r5\n\ + ldrb r2, [r4, 0x4]\n\ + lsls r1, r2, 4\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + bl sub_806CEF8\n\ + ldrb r1, [r4, 0x3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r3, r5, 0x2\n\ + adds r0, r3\n\ + ldrb r2, [r4, 0x4]\n\ + lsls r1, r2, 4\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r3\n\ + bl sub_806CEF8\n\ + ldrb r1, [r4, 0x3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r3, r5, 0x4\n\ + adds r0, r3\n\ + ldrb r2, [r4, 0x4]\n\ + lsls r1, r2, 4\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r3\n\ + bl sub_806CEF8\n\ + ldrb r1, [r4, 0x3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r3, r5, 0\n\ + adds r3, 0xE\n\ + adds r0, r3\n\ + ldrb r2, [r4, 0x4]\n\ + lsls r1, r2, 4\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r3\n\ + bl sub_806CEF8\n\ + ldrb r1, [r4, 0x3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + subs r5, 0x4\n\ + adds r0, r5\n\ + ldr r2, _0806CF9C @ =SpriteCB_sub_806D37C\n\ + str r2, [r0]\n\ + ldrb r1, [r4, 0x4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + str r2, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806CF94: .4byte 0x02001000\n\ +_0806CF98: .4byte gSprites + 0x20\n\ +_0806CF9C: .4byte SpriteCB_sub_806D37C\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_806CFA0(u8 taskId, u8 b) +{ + u8 var1 = ((ewram01000.unk6 - 1) * 3) + 1; + + sub_806BA34(ewram01000.unk8, 3); + sub_806BB3C(ewram01000.unkA, var1); + + if (!b) + { + ewram01000.unk8--; + ewram01000.unkA++; + } + else + { + ewram01000.unk8++; + ewram01000.unkA--; + } + + sub_806B9A4(ewram01000.unk8, 3, 10); + sub_806BA94(ewram01000.unkA, var1, 0, 10); +} + +void sub_806D014(u8 taskId) +{ + sub_806CFA0(taskId, 0); + + if (ewram01000.unk8 < -13 && ewram01000.unkA > 32) + { + sub_806CF04(); + gTasks[taskId].func = sub_806D05C; + } +} + +void sub_806D05C(u8 taskId) +{ + sub_806CFA0(taskId, 1); + + if (ewram01000.unk8 == 0 && ewram01000.unkA == 11) + { + gTasks[taskId].func = sub_806D198; + } +} + +void sub_806D098(u8 a, u8 b) +{ + u8 var1 = ((ewram01000.unk5 - 1) * 3) + 1; + u8 var2 = ((ewram01000.unk6 - 1) * 3) + 1; + + sub_806BB3C(ewram01000.unk8, var1); + sub_806BB3C(ewram01000.unkA, var2); + + if (!b) + { + ewram01000.unk8++; + ewram01000.unkA++; + } + else + { + ewram01000.unk8--; + ewram01000.unkA--; + } + + sub_806BA94(ewram01000.unk8, var1, 0, 10); + sub_806BA94(ewram01000.unkA, var2, 0, 10); +} + +void sub_806D118(u8 taskId) +{ + sub_806D098(taskId, 0); + + if (ewram01000.unk8 > 32 && ewram01000.unkA > 32) + { + sub_806CF04(); + gTasks[taskId].func = sub_806D15C; + } +} + +void sub_806D15C(u8 taskId) +{ + sub_806D098(taskId, 1); + + if (ewram01000.unk8 == 11 && ewram01000.unkA == 11) + { + gTasks[taskId].func = sub_806D198; + } +} + +void sub_806D198(u8 taskId) +{ + u8 spriteId; + + SetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk5, ewram01000.unk4); + SetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk6, ewram01000.unk3); + + gSprites[ewram01000.unk3].pos1.x = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk6].x; + gSprites[ewram01000.unk3].pos1.y = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk6].y; + gSprites[ewram01000.unk3].pos2.x = 0; + gSprites[ewram01000.unk3].pos2.y = 0; + gSprites[ewram01000.unk3].callback = UpdateMonIconFrame_806DA38; + + gSprites[ewram01000.unk4].pos1.x = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk5].x; + gSprites[ewram01000.unk4].pos1.y = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk5].y; + gSprites[ewram01000.unk4].pos2.x = 0; + gSprites[ewram01000.unk4].pos2.y = 0; + gSprites[ewram01000.unk4].callback = UpdateMonIconFrame_806DA38; + + spriteId = GetMonIconSpriteId_maybe(ewram01000.unk0, gSprites[ewram01000.unk2].data0); + gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C; + SwapPokemon(&gPlayerParty[ewram01000.unk5], &gPlayerParty[ewram01000.unk6]); + + PartyMenuPrintMonLevelOrStatus(ewram01000.unk5, &gPlayerParty[ewram01000.unk5]); + TryPrintPartyMenuMonNickname(ewram01000.unk5, &gPlayerParty[ewram01000.unk5]); + PartyMenuTryPrintHP(ewram01000.unk5, &gPlayerParty[ewram01000.unk5]); + nullsub_12(ewram01000.unk5, &gPlayerParty[ewram01000.unk5]); + + PartyMenuPrintMonLevelOrStatus(ewram01000.unk6, &gPlayerParty[ewram01000.unk6]); + TryPrintPartyMenuMonNickname(ewram01000.unk6, &gPlayerParty[ewram01000.unk6]); + PartyMenuTryPrintHP(ewram01000.unk6, &gPlayerParty[ewram01000.unk6]); + nullsub_12(ewram01000.unk6, &gPlayerParty[ewram01000.unk6]); + + PartyMenuDrawHPBars(); + sub_806CC74(taskId); +} + +void SpriteCB_sub_806D37C(struct Sprite *sprite) +{ + UpdateMonIconFrame(sprite); + + if (sprite->pos2.x == sprite->data2) + { + sprite->data0 *= -1; + sprite->data2 = 0; + sprite->callback = UpdateMonIconFrame_806DA38; + } + else + { + sprite->pos2.x += sprite->data0; + } +} + +void sub_806D3B4(u8 taskId, u16 species1, u16 species2) +{ + const u8 *var1 = gUnknown_083769C0; + + sub_806BA34(var1[2] + gTasks[taskId].data[0], var1[3]); + sub_806BB3C(var1[8] + gTasks[taskId].data[0], var1[9]); + sub_806BB3C(var1[10] + gTasks[taskId].data[0], var1[11]); + + gTasks[taskId].data[0]--; + + sub_806B9A4(var1[2] + gTasks[taskId].data[0], var1[3], 4); + + if (species1) + { + sub_806BA94(var1[8] + gTasks[taskId].data[0], var1[9], 0, 4); + } + else + { + sub_806BA94(var1[8] + gTasks[taskId].data[0], var1[9], 1, 4); + } + + if (species2) + { + sub_806BA94(var1[10] + gTasks[taskId].data[0], var1[11], 0, 4); + } + else + { + sub_806BA94(var1[10] + gTasks[taskId].data[0], var1[11], 1, 4); + } +} + +void sub_806D4AC(u8 taskId, u16 species, u8 c) +{ + if (species) + { + u8 monIndex = c + 3; + u8 spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + + gSprites[spriteId].data0 = -8; + gSprites[spriteId].data2 = gTasks[taskId].data[0] * -8; + gSprites[spriteId].callback = SpriteCB_sub_806D37C; + } +} + +void sub_806D50C(u8 taskId, u8 monIndex) +{ + gSprites[GetMonIconSpriteId_maybe(taskId, monIndex)].pos1.x += 0xF0; +} + +void sub_806D538(u8 textId, u8 b) +{ + if (textId != 0xFF) + { + switch (b) + { + case 0: + MenuDrawTextWindow(0, 16, 23, 19); + break; + case 1: + MenuDrawTextWindow(0, 16, 19, 19); + break; + case 2: + MenuDrawTextWindow(0, 16, 22, 19); + break; + case 3: + MenuDrawTextWindow(0, 16, 18, 19); + break; + } + + MenuPrint(gUnknown_08376624[textId], 1, 17); + } +} + +void sub_806D5A4(void) +{ + MenuZeroFillWindowRect(0, 16, 29, 19); +} + +void sub_806D5B8(u8 monIndex) +{ + u32 var1; + u8 left = gUnknown_08376948[IsDoubleBattle()][monIndex].left; + u8 top = gUnknown_08376948[IsDoubleBattle()][monIndex].top; + u8 right = gUnknown_08376948[IsDoubleBattle()][monIndex].right; + u8 bottom = gUnknown_08376948[IsDoubleBattle()][monIndex].bottom; + + ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom); + + var1 = 0; + CpuFastSet(&var1, (void *)(OBJ_VRAM1 + monIndex * 0x400), 0x1000100); +} + +void sub_806D668(u8 monIndex) +{ + u32 var1; + u8 left = gUnknown_08376978[IsDoubleBattle()][monIndex].left; + u8 top = gUnknown_08376978[IsDoubleBattle()][monIndex].top; + u8 right = gUnknown_08376978[IsDoubleBattle()][monIndex].right; + u8 bottom = gUnknown_08376978[IsDoubleBattle()][monIndex].bottom; + + ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom); + + var1 = 0; + CpuFastSet(&var1, (void *)(OBJ_VRAM1 + 0x300 + monIndex * 0x400), 0x1000040); +} + +u8 LoadPartyMenuGraphics(u8 a) +{ + u16 palette = 0x7FFF; + u8 retVal = 0; + + if (a < 2) + { + LZDecompressVram(gPartyMenuMisc_Gfx, (void *)BG_VRAM); + } + + if (a == 2 || a == 0) + { + LZDecompressVram(gPartyMenuMisc_Tilemap, (void *)(BG_VRAM + 0x3800)); + } + + if (a == 3 || a == 0) + { + LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160); + } + + if (a == 4 || a == 0) + { + LoadPalette(&palette, 0, 2); + LoadPalette(gFontDefaultPalette, 0xF0, 0x20); + } + + if (a == 5 || a == 0) + { + LZDecompressVram(gPartyMenuHpBar_Gfx, (void *)(BG_VRAM + 0x6000)); + } + + if (a == 6 || a == 0) + { + LZDecompressVram(gPartyMenuOrderText_Gfx, (void *)(BG_VRAM + 0x6180)); + } + + if (a == 7 || a == 0) + { + LZDecompressVram(gStatusGfx_Icons, (void *)(BG_VRAM + 0x7180)); + } + + if (a == 8 || a == 0) + { + LoadCompressedPalette(gStatusPal_Icons, 0xB0, 0x20); + retVal = 1; + } + + return retVal; +} + +void SetMonIconAnimByHP(u8 spriteId, u16 currentHP, u16 maxHP) +{ + u8 hpBarLevel = GetHPBarLevel(currentHP, maxHP); + u8 animNum = 0; + + if (currentHP != maxHP) + { + if (hpBarLevel == 3) + { + animNum = 1; + } + else if (hpBarLevel == 2) + { + animNum = 2; + } + else if (hpBarLevel == 1) + { + animNum = 3; + } + else + { + animNum = 4; + } + } + + sub_809D824(&gSprites[spriteId], animNum); +} + +void SetMonIconAnim(u8 spriteId, struct Pokemon *pokemon) +{ + u16 currentHP = GetMonData(pokemon, MON_DATA_HP); + u16 maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); + + SetMonIconAnimByHP(spriteId, currentHP, maxHP); +} + +void CreatePartyMenuMonIcon(u8 taskId, u8 monIndex, u8 c, struct Pokemon *pokemon) +{ + u8 x = gUnknown_08376678[c][monIndex].x; + u8 y = gUnknown_08376678[c][monIndex].y; + + u16 species2 = GetMonData(pokemon, MON_DATA_SPECIES2); + u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY); + + u8 spriteId = CreateMonIcon(species2, sub_809D62C, x, y, 5, personality); + SetMonIconSpriteId_maybe(taskId, monIndex, spriteId); + SetMonIconAnim(spriteId, pokemon); +} + +void TryCreatePartyMenuMonIcon(u8 a, u8 monIndex, struct Pokemon *pokemon) +{ + if (GetMonData(pokemon, MON_DATA_SPECIES)) + { + bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == TRUE) + { + CreatePartyMenuMonIcon(a, monIndex, 2, pokemon); + } + else + { + CreatePartyMenuMonIcon(a, monIndex, IsDoubleBattle(), pokemon); + } + } +} + +void unref_sub_806D964(u8 a) +{ + u8 i; + for (i = 0; i < gPlayerPartyCount; i++) + { + TryCreatePartyMenuMonIcon(a, i, &gPlayerParty[i]); + } +} + +void CreateMonIcon_806D99C(u8 taskId, u8 monIndex, u8 c, struct UnknownPokemonStruct2 *d) +{ + u8 x = gUnknown_08376678[c][monIndex].x; + u8 y = gUnknown_08376678[c][monIndex].y; + + u8 spriteId = CreateMonIcon(d->species, sub_809D62C, x, y, 5, d->personality); + SetMonIconSpriteId_maybe(taskId, monIndex, spriteId); + SetMonIconAnimByHP(spriteId, d->hp, d->maxhp); +} + +void UpdateMonIconFrame_806DA0C(struct Sprite *sprite) +{ + u8 var1; + + var1 = UpdateMonIconFrame(sprite); + if (var1) + { + if (var1 & 1) + { + sprite->pos2.y = -3; + } + else + { + sprite->pos2.y = 1; + } + } +} + +void UpdateMonIconFrame_806DA38(struct Sprite *sprite) +{ + UpdateMonIconFrame(sprite); +} + +void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c) +{ + u8 spriteId; + + if (monIndex < PARTY_SIZE) + { + spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + gSprites[spriteId].pos2.y = 0; + gSprites[spriteId].data0 = 0; + + if (!c) + { + gSprites[spriteId].callback = UpdateMonIconFrame_806DA38; + } + else + { + gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C; + } + } +} void LoadHeldItemIconGraphics(void) { @@ -168,7 +902,7 @@ void CreateHeldItemIcons(u8 *a, u8 *b, u8 c) u16 i; u16 heldItem; - switch(c) + switch (c) { case 0: i = 0; @@ -358,7 +1092,7 @@ void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite) u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex) { - switch(monIndex) + switch (monIndex) { case 1: return gTasks[taskId].data[0]; @@ -382,27 +1116,27 @@ u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex) } } -void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 c) +void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 spriteId) { - switch(monIndex) + switch (monIndex) { case 0: - gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (c << 8); + gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (spriteId << 8); break; case 1: - gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | c; + gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | spriteId; break; case 2: - gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (c << 8); + gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (spriteId << 8); break; case 3: - gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | c; + gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | spriteId; break; case 4: - gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (c << 8); + gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (spriteId << 8); break; case 5: - gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | c; + gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | spriteId; break; } } @@ -780,7 +1514,7 @@ void PartyMenuTryPrintMonsHP(void) void unref_sub_806E564(void) { } void unref_sub_806E568(void) { } -void nullsub_12(void) { } +void nullsub_12(u8 monIndex, struct Pokemon *pokemon) { } void nullsub_13(void) { } void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) -- cgit v1.2.3 From c2d448767c6de4c9028454f279c8e43d2ecb174c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 7 Oct 2017 16:33:02 -0700 Subject: Finish decompiling party_menu, and remove its asm/ file --- src/battle_party_menu.c | 2 - src/choose_party.c | 7 - src/naming_screen.c | 2 + src/party_menu.c | 2810 ++++++++++++++++++++++++++++++++++++++++++++--- src/rom_8077ABC.c | 2 + 5 files changed, 2676 insertions(+), 147 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 9a71c09e8..fdc1d503d 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -22,7 +22,6 @@ extern u8 ewram[]; #define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. -extern u8 IsLinkDoubleBattle(void); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void nullsub_13(void); @@ -34,7 +33,6 @@ extern void sub_806AEDC(void); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); extern void nullsub_14(); -extern void OpenPartyMenu(); extern u8 sub_803FBBC(void); extern u8 gPlayerPartyCount; diff --git a/src/choose_party.c b/src/choose_party.c index f798baab1..cd63947a4 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -42,27 +42,20 @@ extern const u16 gBattleTowerBanlist[]; EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; -extern void OpenPartyMenu(); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); -extern u16 sub_806BE38(); -extern u8 sub_806CA38(); extern u8 sub_806B124(); -extern void sub_806C994(); extern void sub_806C658(); extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); -extern void sub_806C890(); -extern void sub_806B908(void); extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); -extern void sub_806BCE8(void); static void ClearPartySelection(void); static bool8 IsMonAllowedInBattleTower(struct Pokemon *); diff --git a/src/naming_screen.c b/src/naming_screen.c index 3f8417e6d..a20a15569 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -30,6 +30,8 @@ extern u8 unk_2000000[]; #define namingScreenData (*(struct NamingScreenData *)(unk_2000000)) +extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); + const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp"); const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp"); diff --git a/src/party_menu.c b/src/party_menu.c index 0f7e95612..b84b139bc 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -14,6 +14,7 @@ #include "mail_data.h" #include "main.h" #include "menu.h" +#include "menu_helpers.h" #include "palette.h" #include "pokemon.h" #include "pokemon_icon.h" @@ -29,160 +30,2693 @@ #include "string_util.h" #include "strings.h" #include "task.h" -#include "sprite.h" -#include "palette.h" -#include "event_data.h" -#include "main.h" -#include "battle_interface.h" -#include "species.h" +#include "util.h" + +struct Unk201C000 +{ + /*0x00*/ struct Pokemon *pokemon; + /*0x04*/ u8 unk4; + /*0x05*/ u8 unk5; + /*0x06*/ u16 unk6; + /*0x08*/ u16 unk8; + /*0x0A*/ u8 pad_0A[2]; + /*0x0C*/ s32 unkC; + /*0x10*/ TaskFunc unk10; + /*0x14*/ TaskFunc unk14; +}; + +struct Unk201F000 +{ + u8 filler0[0xE00]; + u8 unkE00[3]; // not sure if this is an array or struct, or how big it is +}; + +struct UnknownStruct5 +{ + u8 unk0; + u8 unk1; + u16 *unk4; +}; + +struct Coords8 +{ + u8 x; + u8 y; +}; + +struct PartyMenuWindowCoords +{ + u8 left; + u8 top; + u8 right; + u8 bottom; +}; + +struct UnknownPokemonStruct2 +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + +struct PartyMenuFunctionsStruct +{ + /*0x0*/TaskFunc func1; + /*0x4*/TaskFunc func2; + /*0x8*/u8 unk8; +}; + +#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) +#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) + +extern u16 gBattleTypeFlags; + +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F6; +extern u16 gUnknown_0202E8F8; +extern u8 gUnknown_0202E8FA; +extern u8 gLastFieldPokeMenuOpened; +extern u8 gPlayerPartyCount; +extern s32 gBattleMoveDamage; +extern u16 gMoveToLearn; + +extern struct PartyMenuFunctionsStruct const gUnknown_08376C74[]; +extern u8 gUnknown_083769D8[]; +extern u8 gUnknown_08376A25[]; +extern u8 gUnknown_08376A5E[]; +extern u16 gUnknown_08E9A300[]; +extern const u16 gUnknown_08376CD4[]; +extern const u16 gUnknown_08376CEC[]; +extern u16 *const gUnknown_08376918[2][PARTY_SIZE]; +extern struct Coords8 const gUnknown_08376738[12][6]; +extern struct Coords8 const gUnknown_08376678[12][6]; +extern struct PartyMenuWindowCoords const gUnknown_08376948[2][6]; +extern struct PartyMenuWindowCoords const gUnknown_08376978[2][6]; +extern struct Coords8 const gUnknown_083768B8[3][8]; +extern u8 *const gUnknown_08376624[]; +extern const u8 gUnknown_083769C0[]; +//extern const u16 gUnknown_083769A8[][6]; +//extern const u8 gUnknown_083769A8[][12]; +extern u16 *const gUnknown_08376858[][6]; +extern const u8 gUnknown_083769A8[]; +extern const u8 gUnknown_08376D1C[NUM_STATS]; +extern const u16 gUnknown_08376504[]; +extern const struct SpriteSheet gUnknown_083765DC; +extern const struct SpritePalette gUnknown_083765E4; +extern void (*const gUnknown_08376B54[])(u8); +extern const u8 *const gUnknown_08376D04[NUM_STATS]; +extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; +extern u8 gUnknown_02039460[]; +extern u8 gTileBuffer[]; +extern const struct SpriteTemplate gSpriteTemplate_837660C[]; +extern struct Window gUnknown_03004210; + +extern const u8 gPartyMenuMisc_Gfx[]; +extern const u8 gPartyMenuMisc_Tilemap[]; +extern const u8 gPartyMenuMisc_Pal[]; +extern const u8 gFontDefaultPalette[]; +extern const u8 gPartyMenuHpBar_Gfx[]; +extern const u8 gPartyMenuOrderText_Gfx[]; +extern const u8 gStatusGfx_Icons[]; +extern const u8 gStatusPal_Icons[]; + +static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); +static void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon); +static void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon); +static void sub_806D05C(u8 taskId); +static void sub_806D15C(u8 taskId); +static void sub_806D198(u8 taskId); +static void sub_806E884(u8 taskId); +static void sub_8070D90(u8 taskId); +static void sub_806D5B8(u8 taskId); +static void sub_806D014(u8 taskId); +static void sub_806D118(u8 taskId); +static void sub_806B460(void); +static void sub_806B548(void); + +#if ENGLISH +#define WINDOW_LEFT (3) +#define WINDOW_RIGHT (26) +#elif GERMAN +#define WINDOW_LEFT (0) +#define WINDOW_RIGHT (29) +#endif + +extern u8 UpdateMonIconFrame(struct Sprite *sprite); +extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); +extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); +extern void sub_809D62C(struct Sprite *sprite); +extern void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); +extern void UpdateMonIconFrame_806DA38(struct Sprite *sprite); +extern void SpriteCB_sub_806D37C(struct Sprite *sprite); +extern void sub_806CD44(u8 taskId); +extern u8 sub_806CA00(u8 taskId); +extern void sub_806BA34(s16 a, u16 b); +extern void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); +extern void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C658(u8 taskId, s8 directionPressed); +extern void sub_806CA18(u8 taskId, u8 b); +extern void sub_806B9A4(s16 a, u16 b, u8 c); +extern void sub_806BA94(s16 a, u16 b, u8 c, u8 d); + + +#ifdef NONMATCHING +void sub_806AEDC(void) +{ + const struct UnknownStruct5 *var1; + s32 i; + + AnimateSprites(); + BuildOamBuffer(); + + var1 = gUnknown_08376BB4[gUnknown_0202E8FA]; + for (i = 0; i < 6; i++) + { + sub_800142C(var1[i].unk0 * 8, var1[i].unk1 * 8, var1[i].unk4, 0, (i << 5) | 0x200); + } + + RunTasks(); + UpdatePaletteFade(); +} +#else +__attribute__((naked)) +void sub_806AEDC(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + ldr r0, _0806AF2C @ =gUnknown_0202E8FA\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 4\n\ + ldr r1, _0806AF30 @ =gUnknown_08376BB4\n\ + adds r5, r0, r1\n\ + movs r6, 0\n\ +_0806AEF8:\n\ + ldrb r0, [r5]\n\ + lsls r0, 3\n\ + ldrb r1, [r5, 0x1]\n\ + lsls r1, 3\n\ + ldr r2, [r5, 0x4]\n\ + lsls r3, r6, 5\n\ + movs r4, 0x80\n\ + lsls r4, 2\n\ + orrs r3, r4\n\ + str r3, [sp]\n\ + movs r3, 0\n\ + bl sub_800142C\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _0806AEF8\n\ + bl RunTasks\n\ + bl UpdatePaletteFade\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806AF2C: .4byte gUnknown_0202E8FA\n\ +_0806AF30: .4byte gUnknown_08376BB4\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_806AF34(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_806B548(); +} + +void sub_806AF4C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +{ + if (battleFlags != 0xFF) + { + gBattleTypeFlags = battleFlags; + } + + ewram1B000.unk258 = a; + ewram1B000.taskFunc = func; + ewram1B000.unk259 = d; +} + +void sub_806AF8C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +{ + sub_806AF4C(a, battleFlags, func, d); + SetMainCallback2(sub_806B460); +} + +void OpenPartyMenu(u8 a, u8 battleFlags) +{ + sub_806AF8C(a, battleFlags, gUnknown_08376C74[a].func1, gUnknown_08376C74[a].unk8); +} + +__attribute__((naked)) +bool8 sub_806AFD0(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r1, _0806AFF0 @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + adds r4, r1, 0\n\ + cmp r0, 0x9\n\ + bls _0806AFE6\n\ + b _0806B11A\n\ +_0806AFE6:\n\ + lsls r0, 2\n\ + ldr r1, _0806AFF4 @ =_0806AFF8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806AFF0: .4byte 0x0201b000\n\ +_0806AFF4: .4byte _0806AFF8\n\ + .align 2, 0\n\ +_0806AFF8:\n\ + .4byte _0806B020\n\ + .4byte _0806B060\n\ + .4byte _0806B066\n\ + .4byte _0806B07A\n\ + .4byte _0806B0A4\n\ + .4byte _0806B0AA\n\ + .4byte _0806B0BC\n\ + .4byte _0806B0C2\n\ + .4byte _0806B0D4\n\ + .4byte _0806B0EC\n\ +_0806B020:\n\ + ldr r0, _0806B048 @ =0x00000266\n\ + adds r5, r4, r0\n\ + movs r1, 0\n\ + ldrsh r3, [r5, r1]\n\ + ldr r0, _0806B04C @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bge _0806B054\n\ + movs r2, 0x98\n\ + lsls r2, 2\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + ldrb r1, [r5]\n\ + movs r2, 0x64\n\ + muls r2, r3\n\ + ldr r3, _0806B050 @ =gPlayerParty\n\ + adds r2, r3\n\ + bl TryCreatePartyMenuMonIcon\n\ + b _0806B114\n\ + .align 2, 0\n\ +_0806B048: .4byte 0x00000266\n\ +_0806B04C: .4byte gPlayerPartyCount\n\ +_0806B050: .4byte gPlayerParty\n\ +_0806B054:\n\ + movs r0, 0\n\ + strh r0, [r5]\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + b _0806B0E0\n\ +_0806B060:\n\ + bl LoadHeldItemIconGraphics\n\ + b _0806B0D8\n\ +_0806B066:\n\ + movs r1, 0x98\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl CreateHeldItemIcons_806DC34\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r1, r4, r2\n\ + b _0806B0E0\n\ +_0806B07A:\n\ + movs r1, 0x98\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + ldr r2, _0806B0A0 @ =0x00000266\n\ + adds r5, r4, r2\n\ + ldrb r1, [r5]\n\ + bl sub_806BD58\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B114\n\ + movs r0, 0\n\ + strh r0, [r5]\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0A0: .4byte 0x00000266\n\ +_0806B0A4:\n\ + bl PartyMenuPrintMonsLevelOrStatus\n\ + b _0806B0D8\n\ +_0806B0AA:\n\ + bl PrintPartyMenuMonNicknames\n\ + ldr r1, _0806B0B8 @ =0x0201b000\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0B8: .4byte 0x0201b000\n\ +_0806B0BC:\n\ + bl PartyMenuTryPrintMonsHP\n\ + b _0806B0D8\n\ +_0806B0C2:\n\ + bl nullsub_13\n\ + ldr r1, _0806B0D0 @ =0x0201b000\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0D0: .4byte 0x0201b000\n\ +_0806B0D4:\n\ + bl PartyMenuDrawHPBars\n\ +_0806B0D8:\n\ + ldr r1, _0806B0E8 @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r1, r2\n\ +_0806B0E0:\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ + b _0806B11A\n\ + .align 2, 0\n\ +_0806B0E8: .4byte 0x0201b000\n\ +_0806B0EC:\n\ + ldr r0, _0806B110 @ =0x00000266\n\ + adds r5, r4, r0\n\ + ldrb r0, [r5]\n\ + bl sub_806B58C\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B114\n\ + movs r1, 0\n\ + strh r1, [r5]\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r4, r2\n\ + strh r1, [r0]\n\ + movs r0, 0x1\n\ + b _0806B11C\n\ + .align 2, 0\n\ +_0806B110: .4byte 0x00000266\n\ +_0806B114:\n\ + ldrh r0, [r5]\n\ + adds r0, 0x1\n\ + strh r0, [r5]\n\ +_0806B11A:\n\ + movs r0, 0\n\ +_0806B11C:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_806B124(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0xC\n\ + ldr r0, _0806B144 @ =gMain\n\ + ldr r1, _0806B148 @ =0x0000043c\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bls _0806B13A\n\ + b _0806B450\n\ +_0806B13A:\n\ + lsls r0, 2\n\ + ldr r1, _0806B14C @ =_0806B150\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806B144: .4byte gMain\n\ +_0806B148: .4byte 0x0000043c\n\ +_0806B14C: .4byte _0806B150\n\ + .align 2, 0\n\ +_0806B150:\n\ + .4byte _0806B198\n\ + .4byte _0806B240\n\ + .4byte _0806B246\n\ + .4byte _0806B27C\n\ + .4byte _0806B282\n\ + .4byte _0806B2AC\n\ + .4byte _0806B2B2\n\ + .4byte _0806B2D0\n\ + .4byte _0806B2EC\n\ + .4byte _0806B318\n\ + .4byte _0806B344\n\ + .4byte _0806B37C\n\ + .4byte _0806B382\n\ + .4byte _0806B3C0\n\ + .4byte _0806B3CC\n\ + .4byte _0806B3E4\n\ + .4byte _0806B40C\n\ + .4byte _0806B440\n\ +_0806B198:\n\ + movs r0, 0\n\ + bl SetVBlankCallback\n\ + movs r3, 0xC0\n\ + lsls r3, 19\n\ + movs r4, 0xC0\n\ + lsls r4, 9\n\ + add r2, sp, 0x8\n\ + mov r8, r2\n\ + add r2, sp, 0x4\n\ + movs r6, 0\n\ + ldr r1, _0806B22C @ =0x040000d4\n\ + movs r5, 0x80\n\ + lsls r5, 5\n\ + ldr r7, _0806B230 @ =0x81000800\n\ + movs r0, 0x81\n\ + lsls r0, 24\n\ + mov r12, r0\n\ +_0806B1BC:\n\ + strh r6, [r2]\n\ + add r0, sp, 0x4\n\ + str r0, [r1]\n\ + str r3, [r1, 0x4]\n\ + str r7, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + adds r3, r5\n\ + subs r4, r5\n\ + cmp r4, r5\n\ + bhi _0806B1BC\n\ + strh r6, [r2]\n\ + add r2, sp, 0x4\n\ + str r2, [r1]\n\ + str r3, [r1, 0x4]\n\ + lsrs r0, r4, 1\n\ + mov r3, r12\n\ + orrs r0, r3\n\ + str r0, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + movs r0, 0xE0\n\ + lsls r0, 19\n\ + movs r3, 0x80\n\ + lsls r3, 3\n\ + movs r4, 0\n\ + str r4, [sp, 0x8]\n\ + ldr r2, _0806B22C @ =0x040000d4\n\ + mov r1, r8\n\ + str r1, [r2]\n\ + str r0, [r2, 0x4]\n\ + lsrs r0, r3, 2\n\ + movs r1, 0x85\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r1, 0xA0\n\ + lsls r1, 19\n\ + add r0, sp, 0x4\n\ + strh r4, [r0]\n\ + str r0, [r2]\n\ + str r1, [r2, 0x4]\n\ + lsrs r3, 1\n\ + movs r0, 0x81\n\ + lsls r0, 24\n\ + orrs r3, r0\n\ + str r3, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r2, _0806B234 @ =gPaletteFade\n\ + ldrb r0, [r2, 0x8]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2, 0x8]\n\ + ldr r1, _0806B238 @ =gMain\n\ + ldr r2, _0806B23C @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B22C: .4byte 0x040000d4\n\ +_0806B230: .4byte 0x81000800\n\ +_0806B234: .4byte gPaletteFade\n\ +_0806B238: .4byte gMain\n\ +_0806B23C: .4byte 0x0000043c\n\ +_0806B240:\n\ + bl remove_some_task\n\ + b _0806B426\n\ +_0806B246:\n\ + bl sub_806B4A8\n\ + ldr r1, _0806B26C @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + movs r2, 0\n\ + strh r2, [r0]\n\ + ldr r3, _0806B270 @ =0x00000266\n\ + adds r0, r1, r3\n\ + strh r2, [r0]\n\ + movs r0, 0x9A\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + strh r2, [r1]\n\ + ldr r1, _0806B274 @ =gMain\n\ + ldr r2, _0806B278 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B26C: .4byte 0x0201b000\n\ +_0806B270: .4byte 0x00000266\n\ +_0806B274: .4byte gMain\n\ +_0806B278: .4byte 0x0000043c\n\ +_0806B27C:\n\ + bl ResetSpriteData\n\ + b _0806B426\n\ +_0806B282:\n\ + ldr r0, _0806B2A0 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _0806B298\n\ + cmp r0, 0x5\n\ + beq _0806B298\n\ + bl ResetTasks\n\ +_0806B298:\n\ + ldr r1, _0806B2A4 @ =gMain\n\ + ldr r2, _0806B2A8 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B2A0: .4byte 0x0201b000\n\ +_0806B2A4: .4byte gMain\n\ +_0806B2A8: .4byte 0x0000043c\n\ +_0806B2AC:\n\ + bl FreeAllSpritePalettes\n\ + b _0806B426\n\ +_0806B2B2:\n\ + ldr r4, _0806B2CC @ =0x0201b000\n\ + movs r1, 0x97\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0\n\ + bl CreateTask\n\ + movs r2, 0x98\n\ + lsls r2, 2\n\ + adds r1, r4, r2\n\ + strb r0, [r1]\n\ + b _0806B426\n\ + .align 2, 0\n\ +_0806B2CC: .4byte 0x0201b000\n\ +_0806B2D0:\n\ + ldr r0, _0806B2E0 @ =gWindowConfig_81E6C90\n\ + bl SetUpWindowConfig\n\ + ldr r1, _0806B2E4 @ =gMain\n\ + ldr r0, _0806B2E8 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B2E0: .4byte gWindowConfig_81E6C90\n\ +_0806B2E4: .4byte gMain\n\ +_0806B2E8: .4byte 0x0000043c\n\ +_0806B2EC:\n\ + ldr r4, _0806B308 @ =gUnknown_03004210\n\ + ldr r1, _0806B30C @ =gWindowConfig_81E6C90\n\ + adds r0, r4, 0\n\ + bl InitWindowFromConfig\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + bl MultistepInitWindowTileData\n\ + ldr r1, _0806B310 @ =gMain\n\ + ldr r2, _0806B314 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B308: .4byte gUnknown_03004210\n\ +_0806B30C: .4byte gWindowConfig_81E6C90\n\ +_0806B310: .4byte gMain\n\ +_0806B314: .4byte 0x0000043c\n\ +_0806B318:\n\ + bl MultistepLoadFont\n\ + cmp r0, 0\n\ + bne _0806B322\n\ + b _0806B450\n\ +_0806B322:\n\ + ldr r0, _0806B338 @ =0x0201b000\n\ + movs r3, 0x99\n\ + lsls r3, 2\n\ + adds r0, r3\n\ + movs r1, 0x1\n\ + strh r1, [r0]\n\ + ldr r1, _0806B33C @ =gMain\n\ + ldr r0, _0806B340 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B338: .4byte 0x0201b000\n\ +_0806B33C: .4byte gMain\n\ +_0806B340: .4byte 0x0000043c\n\ +_0806B344:\n\ + ldr r0, _0806B368 @ =0x0201b000\n\ + movs r1, 0x99\n\ + lsls r1, 2\n\ + adds r4, r0, r1\n\ + ldrb r0, [r4]\n\ + bl LoadPartyMenuGraphics\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B374\n\ + movs r0, 0\n\ + strh r0, [r4]\n\ + ldr r1, _0806B36C @ =gMain\n\ + ldr r2, _0806B370 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B368: .4byte 0x0201b000\n\ +_0806B36C: .4byte gMain\n\ +_0806B370: .4byte 0x0000043c\n\ +_0806B374:\n\ + ldrh r0, [r4]\n\ + adds r0, 0x1\n\ + strh r0, [r4]\n\ + b _0806B450\n\ +_0806B37C:\n\ + bl sub_809D51C\n\ + b _0806B426\n\ +_0806B382:\n\ + ldr r2, _0806B3B0 @ =gUnknown_08376C74\n\ + ldr r0, _0806B3B4 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r2, 0x4\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + bl _call_via_r0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B450\n\ + ldr r1, _0806B3B8 @ =gMain\n\ + ldr r2, _0806B3BC @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3B0: .4byte gUnknown_08376C74\n\ +_0806B3B4: .4byte 0x0201b000\n\ +_0806B3B8: .4byte gMain\n\ +_0806B3BC: .4byte 0x0000043c\n\ +_0806B3C0:\n\ + ldr r0, _0806B3C8 @ =gWindowConfig_81E6CC8\n\ + bl MultistepInitMenuWindowBegin\n\ + b _0806B426\n\ + .align 2, 0\n\ +_0806B3C8: .4byte gWindowConfig_81E6CC8\n\ +_0806B3CC:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, 0\n\ + beq _0806B450\n\ + ldr r1, _0806B3DC @ =gMain\n\ + ldr r0, _0806B3E0 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3DC: .4byte gMain\n\ +_0806B3E0: .4byte 0x0000043c\n\ +_0806B3E4:\n\ + ldr r0, _0806B3FC @ =0x0201b000\n\ + ldr r1, _0806B400 @ =0x00000259\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + movs r1, 0\n\ + bl sub_806D538\n\ + ldr r1, _0806B404 @ =gMain\n\ + ldr r2, _0806B408 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3FC: .4byte 0x0201b000\n\ +_0806B400: .4byte 0x00000259\n\ +_0806B404: .4byte gMain\n\ +_0806B408: .4byte 0x0000043c\n\ +_0806B40C:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + movs r1, 0\n\ + str r1, [sp]\n\ + movs r2, 0x10\n\ + movs r3, 0\n\ + bl BeginNormalPaletteFade\n\ + ldr r2, _0806B434 @ =gPaletteFade\n\ + ldrb r1, [r2, 0x8]\n\ + movs r0, 0x7F\n\ + ands r0, r1\n\ + strb r0, [r2, 0x8]\n\ +_0806B426:\n\ + ldr r1, _0806B438 @ =gMain\n\ + ldr r3, _0806B43C @ =0x0000043c\n\ + adds r1, r3\n\ +_0806B42C:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _0806B450\n\ + .align 2, 0\n\ +_0806B434: .4byte gPaletteFade\n\ +_0806B438: .4byte gMain\n\ +_0806B43C: .4byte 0x0000043c\n\ +_0806B440:\n\ + ldr r0, _0806B44C @ =sub_806AF34\n\ + bl SetVBlankCallback\n\ + movs r0, 0x1\n\ + b _0806B452\n\ + .align 2, 0\n\ +_0806B44C: .4byte sub_806AF34\n\ +_0806B450:\n\ + movs r0, 0\n\ +_0806B452:\n\ + add sp, 0xC\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +void sub_806B460(void) +{ + while (sub_806B124() != TRUE) + { + if (sub_80F9344() == TRUE) + { + return; + } + } + + if (ewram1B000.unk258 != 5) + { + sub_806BF74(ewram1B000.unk260, 0); + } + + SetMainCallback2(sub_806AEDC); +} + +void sub_806B4A8(void) +{ + SetHBlankCallback(NULL); + REG_DISPCNT = 8000; + REG_BG0CNT = 0x1E05; + REG_BG1CNT = 0x703; + REG_BG2CNT = 0xF08; + REG_BG3CNT = 0x602; + REG_BLDCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG3VOFS = -1; +} + +bool8 IsLinkDoubleBattle() +{ + if ((gBattleTypeFlags & BATTLE_TYPE_LINK_DOUBLE) == BATTLE_TYPE_LINK_DOUBLE) + return TRUE; + else + return FALSE; +} + +#ifdef NONMATCHING +void sub_806B548(void) +{ + if (ewram1B000.unk261) + { + u32 src = (u32)&gBGTilemapBuffers[2]; + u32 dest = BG_VRAM + 0x3000; + + REG_DMA3SAD = src; + REG_DMA3DAD = dest; + REG_DMA3CNT = ((DMA_ENABLE) << 16) | 0x400; + + if (ewram1B000.unk261 == 2) + { + ewram1B000.unk261 = 0; + } + } +} +#else +__attribute__((naked)) +void sub_806B548(void) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + ldr r0, _0806B574 @ =0x0201b000\n\ + ldr r1, _0806B578 @ =0x00000261\n\ + adds r4, r0, r1\n\ + ldrb r3, [r4]\n\ + cmp r3, 0\n\ + beq _0806B56E\n\ + ldr r1, _0806B57C @ =gBGTilemapBuffers + 0x1000\n\ + ldr r2, _0806B580 @ =0x06003000\n\ + ldr r0, _0806B584 @ =0x040000d4\n\ + str r1, [r0]\n\ + str r2, [r0, 0x4]\n\ + ldr r1, _0806B588 @ =0x80000400\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + cmp r3, 0x2\n\ + bne _0806B56E\n\ + movs r0, 0\n\ + strb r0, [r4]\n\ +_0806B56E:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806B574: .4byte 0x0201b000\n\ +_0806B578: .4byte 0x00000261\n\ +_0806B57C: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B580: .4byte 0x06003000\n\ +_0806B584: .4byte 0x040000d4\n\ +_0806B588: .4byte 0x80000400\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +__attribute__((naked)) +u8 sub_806B58C(u8 a) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0\n\ + bne _0806B5A8\n\ + ldr r0, _0806B5A4 @ =gUnknown_0202E8FA\n\ + strb r2, [r0]\n\ + b _0806B5C8\n\ + .align 2, 0\n\ +_0806B5A4: .4byte gUnknown_0202E8FA\n\ +_0806B5A8:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B5C0\n\ + ldr r1, _0806B5BC @ =gUnknown_0202E8FA\n\ + movs r0, 0x2\n\ + b _0806B5C4\n\ + .align 2, 0\n\ +_0806B5BC: .4byte gUnknown_0202E8FA\n\ +_0806B5C0:\n\ + ldr r1, _0806B5E4 @ =gUnknown_0202E8FA\n\ + movs r0, 0x1\n\ +_0806B5C4:\n\ + strb r0, [r1]\n\ + adds r0, r1, 0\n\ +_0806B5C8:\n\ + ldrb r0, [r0]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + ldr r0, _0806B5E8 @ =gUnknown_083769A8\n\ + adds r4, r1, r0\n\ + cmp r5, 0x8\n\ + bls _0806B5DA\n\ + b _0806B900\n\ +_0806B5DA:\n\ + lsls r0, r5, 2\n\ + ldr r1, _0806B5EC @ =_0806B5F0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806B5E4: .4byte gUnknown_0202E8FA\n\ +_0806B5E8: .4byte gUnknown_083769A8\n\ +_0806B5EC: .4byte _0806B5F0\n\ + .align 2, 0\n\ +_0806B5F0:\n\ + .4byte _0806B614\n\ + .4byte _0806B628\n\ + .4byte _0806B638\n\ + .4byte _0806B694\n\ + .4byte _0806B71A\n\ + .4byte _0806B7A2\n\ + .4byte _0806B832\n\ + .4byte _0806B8C6\n\ + .4byte _0806B8E8\n\ +_0806B614:\n\ + ldr r0, _0806B624 @ =gBGTilemapBuffers + 0x1000\n\ + movs r2, 0x80\n\ + lsls r2, 4\n\ + movs r1, 0\n\ + bl memset\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B624: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B628:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r4, 0x1]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + b _0806B8A8\n\ +_0806B638:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B666\n\ + ldr r0, _0806B65C @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bls _0806B660\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B65C: .4byte gPlayerPartyCount\n\ +_0806B660:\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + b _0806B8BC\n\ +_0806B666:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B684\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0x4\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ +_0806B684:\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + b _0806B8A8\n\ +_0806B694:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B6C2\n\ + ldr r0, _0806B6B8 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bls _0806B6BC\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B6B8: .4byte gPlayerPartyCount\n\ +_0806B6BC:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B6C2:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B6F6\n\ + ldr r0, _0806B6EC @ =gPlayerParty + 2 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B6F0\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B6EC: .4byte gPlayerParty + 2 * 0x64\n\ +_0806B6F0:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B6F6:\n\ + ldr r0, _0806B710 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bls _0806B714\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B710: .4byte gPlayerPartyCount\n\ +_0806B714:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B71A:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B74A\n\ + ldr r0, _0806B740 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bls _0806B744\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B740: .4byte gPlayerPartyCount\n\ +_0806B744:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B74A:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B77E\n\ + ldr r0, _0806B774 @ =gPlayerParty + 3 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B778\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B774: .4byte gPlayerParty + 3 * 0x64\n\ +_0806B778:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B77E:\n\ + ldr r0, _0806B798 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bls _0806B79C\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B798: .4byte gPlayerPartyCount\n\ +_0806B79C:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B7A2:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B7D2\n\ + ldr r0, _0806B7C8 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bls _0806B7CC\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B7C8: .4byte gPlayerPartyCount\n\ +_0806B7CC:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B8BC\n\ +_0806B7D2:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B80A\n\ + ldr r0, _0806B800 @ =gPlayerParty + 4 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B804\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ + .align 2, 0\n\ +_0806B800: .4byte gPlayerParty + 4 * 0x64\n\ +_0806B804:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B884\n\ +_0806B80A:\n\ + ldr r0, _0806B828 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bls _0806B82C\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B828: .4byte gPlayerPartyCount\n\ +_0806B82C:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B8BC\n\ +_0806B832:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B84C\n\ + ldr r0, _0806B848 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bhi _0806B896\n\ + b _0806B8B8\n\ + .align 2, 0\n\ +_0806B848: .4byte gPlayerPartyCount\n\ +_0806B84C:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B88E\n\ + ldr r0, _0806B87C @ =gPlayerParty + 5 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B880\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + movs r1, 0x5\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ + .align 2, 0\n\ +_0806B87C: .4byte gPlayerParty + 5 * 0x64\n\ +_0806B880:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ +_0806B884:\n\ + movs r2, 0x1\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + b _0806B900\n\ +_0806B88E:\n\ + ldr r0, _0806B8B4 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bls _0806B8B8\n\ +_0806B896:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + movs r1, 0x5\n\ +_0806B8A8:\n\ + movs r2, 0x3\n\ +_0806B8AA:\n\ + movs r3, 0\n\ + bl sub_806BF24\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B8B4: .4byte gPlayerPartyCount\n\ +_0806B8B8:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ +_0806B8BC:\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B900\n\ +_0806B8C6:\n\ + ldr r0, _0806B8E4 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0806B8DA\n\ + movs r0, 0x1\n\ + bl sub_806BB9C\n\ +_0806B8DA:\n\ + movs r0, 0x1\n\ + bl sub_806BBEC\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B8E4: .4byte 0x0201b000\n\ +_0806B8E8:\n\ + ldr r0, _0806B8F8 @ =0x0201b000\n\ + ldr r1, _0806B8FC @ =0x00000261\n\ + adds r0, r1\n\ + movs r1, 0x2\n\ + strb r1, [r0]\n\ + movs r0, 0x1\n\ + b _0806B902\n\ + .align 2, 0\n\ +_0806B8F8: .4byte 0x0201b000\n\ +_0806B8FC: .4byte 0x00000261\n\ +_0806B900:\n\ + movs r0, 0\n\ +_0806B902:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +#ifdef NONMATCHING +void sub_806B908(void) +{ + memset(&gBGTilemapBuffers[2], 0, 0x800); + gUnknown_0202E8FA = 3; + sub_806B9A4(gUnknown_083769C0[12], gUnknown_083769C0[13], 3); + + if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES)) + sub_806BA94(gUnknown_083769C0[16], gUnknown_083769C0[17], 0, 3); + else + sub_806BA94(gUnknown_083769C0[16], gUnknown_083769C0[17], 1, 3); + + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) + sub_806BA94(gUnknown_083769C0[18], gUnknown_083769C0[19], 0, 3); + else + sub_806BA94(gUnknown_083769C0[18], gUnknown_083769C0[19], 1, 3); + + ewram1B000.unk261 = 2; +} +#else +__attribute__((naked)) +void sub_806B908(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r0, _0806B948 @ =gBGTilemapBuffers + 0x1000\n\ + movs r2, 0x80\n\ + lsls r2, 4\n\ + movs r1, 0\n\ + bl memset\n\ + ldr r1, _0806B94C @ =gUnknown_0202E8FA\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + ldr r0, _0806B950 @ =gUnknown_083769A8\n\ + adds r4, r0, 0\n\ + adds r4, 0x24\n\ + ldr r5, _0806B954 @ =gPlayerParty + 1 * 0x64\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r4, 0x1]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B958\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B964\n\ + .align 2, 0\n\ +_0806B948: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B94C: .4byte gUnknown_0202E8FA\n\ +_0806B950: .4byte gUnknown_083769A8\n\ +_0806B954: .4byte gPlayerParty + 1 * 0x64\n\ +_0806B958:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ +_0806B964:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B980\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B98C\n\ +_0806B980:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ +_0806B98C:\n\ + ldr r0, _0806B99C @ =0x0201b000\n\ + ldr r1, _0806B9A0 @ =0x00000261\n\ + adds r0, r1\n\ + movs r1, 0x2\n\ + strb r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806B99C: .4byte 0x0201b000\n\ +_0806B9A0: .4byte 0x00000261\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_806B9A4(s16 a, u16 b, u8 c) +{ + u8 i; + u16 var1 = b * 32; + + for (i = 0; i <= 6; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 10 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = (c << 12) | gUnknown_083769D8[i * 11 + j]; + } + } + } + } +} + +void sub_806BA34(s16 a, u16 b) +{ + u8 i; + u16 var1 = b * 32; + + for (i = 0; i <= 6; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 10 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = 0; + } + } + } + } +} + +void sub_806BA94(s16 a, u16 b, u8 c, u8 d) +{ + u8 i; + u8 *arr; + u16 var1; + + arr = gUnknown_08376A5E; + if (c == 0) + { + arr = gUnknown_08376A25; + } + + var1 = b * 32; + + + for (i = 0; i < 3; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + while (j <= 0x12 && a + j <= 0x1F) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = (d << 12) | arr[i * 19 + j]; + } + + j++; + } + } + } +} + +void sub_806BB3C(s16 a, u16 b) +{ + u8 i; + u16 var1 = (b * 32); + + for (i = 0; i < 3; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 0x12 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = 0; + } + } + } + } +} + +void sub_806BB9C(u8 a) +{ + u8 i; + u16 *vramPtr; + const u16 arr[12]; + + memcpy(&arr, gUnknown_08376CD4, 12 * 2); + + vramPtr = (u16 *)(BG_VRAM + 0x3C30); + for (i = 0; i < PARTY_SIZE; i++) + { + vramPtr[i] = arr[i] + (a << 12); + vramPtr[i + 0x20] = arr[i + PARTY_SIZE] + (a << 12); + } +} + +void sub_806BBEC(u8 a) +{ + u8 i; + u16 *vramPtr; + const u16 arr[12]; + + memcpy(&arr, gUnknown_08376CEC, 12 * 2); + + vramPtr = (u16 *)(BG_VRAM + 0x3CB0); + for (i = 0; i < PARTY_SIZE; i++) + { + vramPtr[i] = arr[i] + (a << 12); + vramPtr[i + 0x20] = arr[i + PARTY_SIZE] + (a << 12); + } +} + +#ifdef NONMATCHING +// The original THUMB is preserving r8 for seemingly no reason. Unsure how to match. +void sub_806BC3C(u8 monIndex, u8 b) +{ + u16 *vramPtr = gUnknown_08376918[IsDoubleBattle()][monIndex]; + u8 i; + u16 var1; + + for (i = 0, var1 = (b / 7) * 32; i <= PARTY_SIZE; i++) + { + u32 offset = i + var1; + vramPtr[i] = gUnknown_08E9A300[offset] + 0x10C; + vramPtr[i + 0x20] = gUnknown_08E9A300[offset + 0x20] + 0x10C; + } +} +#else +__attribute__((naked)) +void sub_806BC3C(u8 monIndex, u8 b) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r4, r0, 0\n\ + adds r5, r1, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldr r6, _0806BCB0 @ =gUnknown_08376918\n\ + bl IsDoubleBattle\n\ + lsls r4, 2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r4, r1\n\ + adds r4, r6\n\ + ldr r7, [r4]\n\ + movs r6, 0\n\ + adds r0, r5, 0\n\ + movs r1, 0x7\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 19\n\ + ldr r5, _0806BCB4 @ =gUnknown_08E9A300\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r3, r0, 0\n\ +_0806BC7C:\n\ + adds r1, r6, r4\n\ + lsls r2, r6, 1\n\ + adds r2, r7\n\ + lsls r0, r1, 1\n\ + adds r0, r5\n\ + ldrh r0, [r0]\n\ + adds r0, r3, r0\n\ + strh r0, [r2]\n\ + adds r2, 0x40\n\ + adds r1, 0x20\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + ldrh r1, [r1]\n\ + adds r0, r3, r1\n\ + strh r0, [r2]\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x6\n\ + bls _0806BC7C\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806BCB0: .4byte gUnknown_08376918\n\ +_0806BCB4: .4byte gUnknown_08E9A300\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void unref_sub_806BCB8(u8 a) +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + sub_806BC3C(i, a); + } +} + +void sub_806BCE8() +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + u8 gender = GetMonGender(&gPlayerParty[i]); + switch (gender) + { + case MON_MALE: + sub_806BC3C(i, 0x54); + break; + case MON_FEMALE: + sub_806BC3C(i, 0x62); + break; + default: + sub_806BC3C(i, 0x46); + break; + } + } + else + { + sub_806BC3C(i, 0x46); + } + } +} + +u8 sub_806BD58(u8 taskId, u8 b) +{ + u8 spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + sub_806CA18(taskId, spriteId); + return 1; +} + +#ifdef NONMATCHING +u16 sub_806BD80(u8 taskId) +{ + s8 menuDirectionPressed = 0x0; + + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + menuDirectionPressed = 0xFF; + break; + case DPAD_DOWN: + menuDirectionPressed = 0x1; + break; + case DPAD_LEFT: + menuDirectionPressed = 0xFE; + break; + case DPAD_RIGHT: + menuDirectionPressed = 0x2; + break; + } + + if (menuDirectionPressed == 0) + { + u8 var1 = sub_80F92BC(); + switch (var1) + { + case 1: + menuDirectionPressed = 0xFF; + break; + case 2: + menuDirectionPressed = 0x1; + break; + } + + if (menuDirectionPressed == 0) + { + if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data0 == 7) + { + // Selected "CANCEL" + return B_BUTTON; + } + else + { + return gMain.newKeys & (A_BUTTON | B_BUTTON); + } + } + } + + sub_806BF74(taskId, menuDirectionPressed); + return gMain.newAndRepeatedKeys; +} +#else +__attribute__((naked)) +u16 sub_806BD80(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _0806BD9C @ =gMain\n\ + ldrh r0, [r0, 0x30]\n\ + cmp r0, 0x20\n\ + beq _0806BDB2\n\ + cmp r0, 0x20\n\ + bgt _0806BDA0\n\ + cmp r0, 0x10\n\ + beq _0806BDB6\n\ + b _0806BDB8\n\ + .align 2, 0\n\ +_0806BD9C: .4byte gMain\n\ +_0806BDA0:\n\ + cmp r0, 0x40\n\ + beq _0806BDAA\n\ + cmp r0, 0x80\n\ + beq _0806BDAE\n\ + b _0806BDB8\n\ +_0806BDAA:\n\ + movs r4, 0xFF\n\ + b _0806BDB8\n\ +_0806BDAE:\n\ + movs r4, 0x1\n\ + b _0806BDB8\n\ +_0806BDB2:\n\ + movs r4, 0xFE\n\ + b _0806BDB8\n\ +_0806BDB6:\n\ + movs r4, 0x2\n\ +_0806BDB8:\n\ + lsls r0, r4, 24\n\ + cmp r0, 0\n\ + bne _0806BDDC\n\ + bl sub_80F92BC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _0806BDD0\n\ + cmp r0, 0x2\n\ + beq _0806BDD4\n\ + b _0806BDD6\n\ +_0806BDD0:\n\ + movs r4, 0xFF\n\ + b _0806BDD6\n\ +_0806BDD4:\n\ + movs r4, 0x1\n\ +_0806BDD6:\n\ + lsls r0, r4, 24\n\ + cmp r0, 0\n\ + beq _0806BDF0\n\ +_0806BDDC:\n\ + asrs r1, r0, 24\n\ + adds r0, r5, 0\n\ + bl sub_806BF74\n\ + ldr r0, _0806BDEC @ =gMain\n\ + ldrh r0, [r0, 0x30]\n\ + b _0806BE2C\n\ + .align 2, 0\n\ +_0806BDEC: .4byte gMain\n\ +_0806BDF0:\n\ + ldr r0, _0806BE1C @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0806BE24\n\ + ldr r4, _0806BE20 @ =gSprites\n\ + adds r0, r5, 0\n\ + bl sub_806CA00\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + movs r2, 0x2E\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0x7\n\ + bne _0806BE24\n\ + movs r0, 0x2\n\ + b _0806BE2C\n\ + .align 2, 0\n\ +_0806BE1C: .4byte gMain\n\ +_0806BE20: .4byte gSprites\n\ +_0806BE24:\n\ + ldr r0, _0806BE34 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ +_0806BE2C:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_0806BE34: .4byte gMain\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +u16 sub_806BE38(u8 taskId) +{ + u8 menuDirectionPressed = 0x0; + + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + menuDirectionPressed = 0xFF; + break; + case DPAD_DOWN: + menuDirectionPressed = 0x1; + break; + case DPAD_LEFT: + menuDirectionPressed = 0xFE; + break; + case DPAD_RIGHT: + menuDirectionPressed = 0x2; + break; + } + + if (menuDirectionPressed == 0) + { + u8 var1 = sub_80F92BC(); + switch (var1) + { + case 1: + menuDirectionPressed = 0xFF; + break; + case 2: + menuDirectionPressed = 0x1; + break; + } + } + + if (gMain.newKeys & START_BUTTON) + { + sub_806C890(taskId); + return START_BUTTON; + } + else + { + s8 signedMenuDirection = menuDirectionPressed; + if (signedMenuDirection) + { + sub_806C658(taskId, signedMenuDirection); + return gMain.newAndRepeatedKeys; + } + else + { + if (gMain.newKeys & A_BUTTON) + { + if (gSprites[sub_806CA00(taskId)].data0 == 7) + { + return B_BUTTON; + } + } + } + } + + return gMain.newKeys & (A_BUTTON | B_BUTTON); +} + +void task_pc_turn_off(const u8 *a, u8 b) +{ + if (a[0]) + sub_806BA94(a[0], a[1], 0, b); + else + sub_806B9A4(a[0], a[1], b); +} + +void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d) +{ + if (GetMonData(&gPlayerParty[monIndex], MON_DATA_SPECIES) && GetMonData(&gPlayerParty[monIndex], MON_DATA_HP) == 0) + c = PARTY_SIZE - 1; + + if (d == 1) + c += 4; + + task_pc_turn_off(a, c); +} + +void sub_806BF74(u8 taskId, s8 directionPressed) +{ + bool8 isLinkDoubleBattle; + u8 spriteId = sub_806CA00(taskId); + u8 menuIndex = gSprites[spriteId].data0; + + UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); + + isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == 1) + { + if (menuIndex == 0 || menuIndex == 2 || menuIndex == 3) + sub_806BF24(&gUnknown_083769C0[menuIndex * 2], menuIndex, 3, 0); + if (menuIndex == 1 || menuIndex == 4 || menuIndex == 5) + sub_806BF24(&gUnknown_083769C0[menuIndex * 2], menuIndex, 4, 0); + if (menuIndex == 7) + sub_806BBEC(1); + + sub_806C490(spriteId, menuIndex, directionPressed); + + if (gSprites[spriteId].data0 == 0 || gSprites[spriteId].data0 == 2 || gSprites[spriteId].data0 == 3) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); + if (gSprites[spriteId].data0 == 1 || gSprites[spriteId].data0 == 4 || gSprites[spriteId].data0 == 5) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 4, 1); + if (gSprites[spriteId].data0 == 7) + sub_806BBEC(2); + + ewram1B000.unk261 = 2; + + gSprites[spriteId].pos1.x = gUnknown_083768B8[2][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[2][gSprites[spriteId].data0].y; + } + else + { + u8 isDoubleBattle = IsDoubleBattle(); + + if (menuIndex <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + menuIndex * 2], menuIndex, 3, 0); + } + else + { + sub_806BBEC(1); + } + + if (!isDoubleBattle) + { + sub_806C1E4(spriteId, menuIndex, directionPressed); + } + else + { + sub_806C310(spriteId, menuIndex, directionPressed); + } + + if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); + } + else + { + sub_806BBEC(2); + } + + ewram1B000.unk261 = 2; + + gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].y; + } + + UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data0, 1); + + if (menuIndex != gSprites[spriteId].data0) + { + PlaySE(5); + } +} + +void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + u8 var1; + s8 menuMovement = directionPressed + 2; + + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (gPlayerPartyCount > 1 && menuIndex == 0) + { + if (gSprites[spriteId].data1 == 0) + gSprites[spriteId].data1 = 1; + + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + break; + case 0: + var1 = menuIndex - 1; + if (var1 <= 4) { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } + break; + } +} + +void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + u8 var3; + s8 menuMovement = directionPressed + 2; + + switch(menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 7; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (menuIndex == 0) { + if (gPlayerPartyCount > 2) { + u16 var1 = gSprites[spriteId].data1 - 2; + if (var1 > 1) + gSprites[spriteId].data0 = 2; + else + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + } + else if (menuIndex == 1) { + if (gPlayerPartyCount > 4) { + u16 var1 = gSprites[spriteId].data1 - 4; + if (var1 <= 1) + gSprites[spriteId].data0 = gSprites[spriteId].data1; + else + gSprites[spriteId].data0 = 4; + } + } + break; + case 0: + var3 = menuIndex - 2; + if (var3 <= 1) { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } else { + u8 var2 = menuIndex - 4; + if (var2 <= 1) { + gSprites[spriteId].data0 = 1; + gSprites[spriteId].data1 = menuIndex; + } + } + break; + } +} + +/*void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + s8 menuMovement; + s16 var1; + u8 var2; + + menuMovement = directionPressed + 2; + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else if (menuIndex == PARTY_SIZE - 1) { + gSprites[spriteId].data0 = 7; + } else { + // Put if statment here + while (menuIndex++ != PARTY_SIZE - 1) { + if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES)) + { + gSprites[spriteId].data0 = menuIndex; + gSprites[spriteId].data1 = 0; + return; + } + } + + gSprites[spriteId].data0 = 7; + } + + gSprites[spriteId].data1 = 0; + break; + case 1: + while (menuIndex-- != 0) { + if (GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) + { + gSprites[spriteId].data0 = menuIndex; + gSprites[spriteId].data1 = 0; + return; + } + } + + gSprites[spriteId].data0 = 7; + gSprites[spriteId].data1 = 0; + break; + case 4: + if (menuIndex == 0) { + var1 = gSprites[spriteId].data1 - 2; + if (var1 > 1) { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 2; + } else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 3; + } + } else { + gSprites[spriteId].data0 = 1; + } + } else if (menuIndex == 1) { + var1 = gSprites[spriteId].data1 - 4; + if (var1 <= 1) { + gSprites[spriteId].data0 = var1; + } else { + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 4; + } else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 5; + } + } + } + break; + case 0: + var2 = menuIndex - 2; + if (var2 <= 1) { + gSprites[spriteId].data0 = 0; + } else { + var2 = menuIndex - 4; + if (var2 <= 1) { + gSprites[spriteId].data0 = 1; + } + } + + gSprites[spriteId].data1 = menuIndex; + break; + } +}*/ +__attribute__((naked)) +void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r1, 24\n\ + lsrs r4, r1, 24\n\ + lsls r2, 24\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + adds r2, r0\n\ + asrs r0, r2, 24\n\ + cmp r0, 0x4\n\ + bls _0806C4AA\n\ + b _0806C64E\n\ +_0806C4AA:\n\ + lsls r0, 2\n\ + ldr r1, _0806C4B4 @ =_0806C4B8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806C4B4: .4byte _0806C4B8\n\ + .align 2, 0\n\ +_0806C4B8:\n\ + .4byte _0806C618\n\ + .4byte _0806C524\n\ + .4byte _0806C4CC\n\ + .4byte _0806C4E0\n\ + .4byte _0806C57C\n\ +_0806C4CC:\n\ + ldr r0, _0806C4DC @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0\n\ + strh r0, [r1, 0x30]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C4DC: .4byte gSprites\n\ +_0806C4E0:\n\ + cmp r4, 0x7\n\ + bne _0806C4FC\n\ + ldr r2, _0806C4F8 @ =gSprites\n\ + lsls r3, r5, 4\n\ + adds r0, r3, r5\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + adds r1, r2, 0\n\ + adds r6, r3, 0\n\ + b _0806C566\n\ + .align 2, 0\n\ +_0806C4F8: .4byte gSprites\n\ +_0806C4FC:\n\ + lsls r6, r5, 4\n\ + b _0806C518\n\ +_0806C500:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _0806C520 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0806C528\n\ +_0806C518:\n\ + cmp r4, 0x5\n\ + bne _0806C500\n\ + b _0806C558\n\ + .align 2, 0\n\ +_0806C520: .4byte gPlayerParty\n\ +_0806C524:\n\ + lsls r6, r5, 4\n\ + b _0806C554\n\ +_0806C528:\n\ + ldr r1, _0806C534 @ =gSprites\n\ + adds r0, r6, r5\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + strh r4, [r0, 0x2E]\n\ + b _0806C566\n\ + .align 2, 0\n\ +_0806C534: .4byte gSprites\n\ +_0806C538:\n\ + subs r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x6\n\ + beq _0806C554\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _0806C574 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0806C528\n\ +_0806C554:\n\ + cmp r4, 0\n\ + bne _0806C538\n\ +_0806C558:\n\ + ldr r0, _0806C578 @ =gSprites\n\ + adds r1, r6, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r2, 0x7\n\ + strh r2, [r1, 0x2E]\n\ + adds r1, r0, 0\n\ +_0806C566:\n\ + adds r0, r6, r5\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strh r1, [r0, 0x30]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C574: .4byte gPlayerParty\n\ +_0806C578: .4byte gSprites\n\ +_0806C57C:\n\ + cmp r4, 0\n\ + bne _0806C5C8\n\ + ldr r0, _0806C5AC @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r4, r1, r0\n\ + ldrh r1, [r4, 0x30]\n\ + subs r0, r1, 0x2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bls _0806C5E2\n\ + ldr r5, _0806C5B0 @ =gPlayerParty + 2 * 0x64\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C5B4\n\ + movs r0, 0x2\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C5AC: .4byte gSprites\n\ +_0806C5B0: .4byte gPlayerParty + 2 * 0x64\n\ +_0806C5B4:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C64E\n\ + movs r0, 0x3\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ +_0806C5C8:\n\ + cmp r4, 0x1\n\ + bne _0806C64E\n\ + ldr r0, _0806C5E8 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r4, r1, r0\n\ + ldrh r1, [r4, 0x30]\n\ + subs r0, r1, 0x4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bhi _0806C5EC\n\ +_0806C5E2:\n\ + strh r1, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C5E8: .4byte gSprites\n\ +_0806C5EC:\n\ + ldr r5, _0806C600 @ =gPlayerParty + 4 * 0x64\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C604\n\ + movs r0, 0x4\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C600: .4byte gPlayerParty + 4 * 0x64\n\ +_0806C604:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C64E\n\ + movs r0, 0x5\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ +_0806C618:\n\ + subs r0, r4, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _0806C634\n\ + ldr r0, _0806C630 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0\n\ + b _0806C64A\n\ + .align 2, 0\n\ +_0806C630: .4byte gSprites\n\ +_0806C634:\n\ + subs r0, r4, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _0806C64E\n\ + ldr r0, _0806C654 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0x1\n\ +_0806C64A:\n\ + strh r0, [r1, 0x2E]\n\ + strh r4, [r1, 0x30]\n\ +_0806C64E:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806C654: .4byte gSprites\n\ + .syntax divided\n"); +} -struct Unk201C000 -{ - /*0x00*/ struct Pokemon *pokemon; - /*0x04*/ u8 unk4; - /*0x05*/ u8 unk5; - /*0x06*/ u16 unk6; - /*0x08*/ u16 unk8; - /*0x0A*/ u8 pad_0A[2]; - /*0x0C*/ s32 unkC; - /*0x10*/ TaskFunc unk10; - /*0x14*/ TaskFunc unk14; -}; -struct Unk201F000 +// directionPressed = -2 for left, 2 for right, 1 for down, -1 for up +void sub_806C658(u8 taskId, s8 directionPressed) { - u8 filler0[0xE00]; - u8 unkE00[3]; // not sure if this is an array or struct, or how big it is -}; + u16 newMenuIndex; + u8 newMenuIndex2; + u8 newMenuIndex3; + s8 menuMovement; + u8 spriteId = sub_806CA00(taskId); + u8 menuIndex = gSprites[spriteId].data0; -struct UnknownStruct5 -{ - u8 unk0; - u8 unk1; - u16 *unk4; -}; + UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); -struct GenderIconCoords -{ - u8 x; - u8 y; -}; + if (menuIndex < PARTY_SIZE) + { + sub_806BF24(&gUnknown_083769A8[menuIndex * 2], menuIndex, 3, 0); + } + else if (menuIndex == PARTY_SIZE) + { + sub_806BB9C(1); + } + else + { + sub_806BBEC(1); + } -struct PartyMenuWindowCoords + menuMovement = directionPressed + 2; + + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == PARTY_SIZE) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + gSprites[spriteId].data0 += directionPressed; + } + + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 6; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else { + gSprites[spriteId].data0 += directionPressed; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (gPlayerPartyCount > 1 && menuIndex == 0) + { + if (gSprites[spriteId].data1 == 0) { + gSprites[spriteId].data1 = 1; + } + + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + break; + case 0: + newMenuIndex3 = menuIndex - 1; + if (newMenuIndex3 <= 4) + { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } + break; + } + + gSprites[spriteId].pos1.x = gUnknown_083768B8[0][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[0][gSprites[spriteId].data0].y; + + + newMenuIndex = gSprites[spriteId].data0; + if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data0 * 2], newMenuIndex, 3, 1); + } + else if (gSprites[spriteId].data0 == PARTY_SIZE) + { + sub_806BB9C(2); + } + else + { + sub_806BBEC(2); + } + + ewram1B000.unk261 = 2; + + newMenuIndex2 = gSprites[spriteId].data0; + UpdateMonIconFrame_806DA44(taskId, newMenuIndex2, 1); + + if (menuIndex != gSprites[spriteId].data0) + { + PlaySE(5); + } +} + +void sub_806C890(u8 taskId) { - u8 left; - u8 top; - u8 right; - u8 bottom; -}; + u8 spriteId = sub_806CA00(taskId); -struct UnknownPokemonStruct2 + u8 monIndex = gSprites[spriteId].data0; + if (monIndex != 6) + { + UpdateMonIconFrame_806DA44(taskId, monIndex, 0); + + if (monIndex < PARTY_SIZE) + { + sub_806BF24(&gUnknown_083769A8[monIndex * 2], monIndex, 3, 0); + } + else + { + sub_806BBEC(1); + } + + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data0 = 6; + gSprites[spriteId].pos1.x = gUnknown_083768B8[0][6].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[0][6].y; + + sub_806BB9C(2); + + ewram1B000.unk261 = 2; + PlaySE(5); + } +} + +void sub_806C92C(u8 spriteId) { - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; + u8 monIndex1 = gSprites[spriteId].data0; + u8 monIndex2 = gSprites[spriteId].data1; -#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) -#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) + if (!IsDoubleBattle()) + { + if (monIndex1 < 1) { + if (monIndex2 < 1) { + monIndex2 = 1; + } + } else { + if (monIndex2 >= 1) { + monIndex2 = 0; + } + } + } else { + if (monIndex1 < 2) { + if (monIndex2 < 2) { + monIndex2 = 2; + } + } else { + if (monIndex2 >= 2) { + monIndex2 = 0; + } + } + } -extern u8 gUnknown_0202E8F4; -extern u8 gUnknown_0202E8F6; -extern u16 gUnknown_0202E8F8; -extern u8 gUnknown_0202E8FA; -extern u8 gLastFieldPokeMenuOpened; -extern u8 gPlayerPartyCount; -extern s32 gBattleMoveDamage; -extern u16 gMoveToLearn; + gSprites[spriteId].data1 = monIndex2; +} -extern struct GenderIconCoords const gUnknown_08376738[12][6]; -extern struct GenderIconCoords const gUnknown_08376678[12][6]; -extern struct PartyMenuWindowCoords const gUnknown_08376948[2][6]; -extern struct PartyMenuWindowCoords const gUnknown_08376978[2][6]; -extern u8 *const gUnknown_08376624[]; -extern const u8 gUnknown_083769C0[]; -//extern const u16 gUnknown_083769A8[][6]; -//extern const u8 gUnknown_083769A8[][12]; -extern u16 *const gUnknown_08376858[][6]; -extern const u8 gUnknown_083769A8[]; -extern const u8 gUnknown_08376D1C[NUM_STATS]; -extern const u16 gUnknown_08376504[]; -extern const struct SpriteSheet gUnknown_083765DC; -extern const struct SpritePalette gUnknown_083765E4; -extern void (*const gUnknown_08376B54[])(u8); -extern const u8 *const gUnknown_08376D04[NUM_STATS]; -extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; -extern u8 gUnknown_02039460[]; -extern u8 gTileBuffer[]; -extern const struct SpriteTemplate gSpriteTemplate_837660C[]; -extern struct Window gUnknown_03004210; +void sub_806C994(u8 taskId, u8 b) +{ + u8 spriteId = sub_806CA00(taskId); -extern const u8 gPartyMenuMisc_Gfx[]; -extern const u8 gPartyMenuMisc_Tilemap[]; -extern const u8 gPartyMenuMisc_Pal[]; -extern const u8 gFontDefaultPalette[]; -extern const u8 gPartyMenuHpBar_Gfx[]; -extern const u8 gPartyMenuOrderText_Gfx[]; -extern const u8 gStatusGfx_Icons[]; -extern const u8 gStatusPal_Icons[]; + gSprites[spriteId].data0 = b; + sub_806C92C(spriteId); +} -static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); -static void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon); -static void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon); -static void sub_806D05C(u8 taskId); -static void sub_806D15C(u8 taskId); -static void sub_806D198(u8 taskId); -static void sub_806E884(u8 taskId); -static void sub_8070D90(u8 taskId); -static void sub_806D5B8(u8 taskId); -static void sub_806D014(u8 taskId); -static void sub_806D118(u8 taskId); +void sub_806C9C4(u8 taskId, u8 spriteId) +{ + u8 spriteId2 = sub_806CA00(taskId); -/* -void sub_806AEDC(void) + gSprites[spriteId].pos1.x = gSprites[spriteId2].pos1.x; + gSprites[spriteId].pos1.y = gSprites[spriteId2].pos1.y; + gSprites[spriteId].data0 = gSprites[spriteId2].data0; +} + +u8 sub_806CA00(u8 taskId) { - const struct UnknownStruct5 *r5; - s32 i; + return gTasks[taskId].data[3] >> 8; +} - AnimateSprites(); - BuildOamBuffer(); - r5 = gUnknown_08376BB4[gUnknown_0202E8FA]; - for (i = 0; i < 6; i++) - sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200); - RunTasks(); - UpdatePaletteFade(); +void sub_806CA18(u8 taskId, u8 b) +{ + u8 var1 = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = var1 | (b << 8); } -*/ -#if ENGLISH -#define WINDOW_LEFT (3) -#define WINDOW_RIGHT (26) -#elif GERMAN -#define WINDOW_LEFT (0) -#define WINDOW_RIGHT (29) -#endif +u8 sub_806CA38(u8 taskId) +{ + u8 spriteId = sub_806CA00(taskId); + return gSprites[spriteId].data0; +} -extern u8 UpdateMonIconFrame(struct Sprite *sprite); -extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); -extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); -extern void sub_809D62C(struct Sprite *sprite); -extern void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); -extern void UpdateMonIconFrame_806DA38(struct Sprite *sprite); -extern void sub_806BB3C(s16 a, u8 b); -extern void sub_806BA94(s16 a, u8 b, u8 c, u8 d); -extern void sub_806B9A4(s16 a, u8 b, u8 c); -extern void SpriteCB_sub_806D37C(struct Sprite *sprite); -extern void sub_806BA34(s16 a, u8 b); -extern void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); -extern void sub_806CD44(u8 taskId); +void sub_806CA60(u8 taskId) +{ + gTasks[taskId].func = TaskDummy; + ewram01000.unk0 = taskId; + + CreateTask(sub_806CB74, 0); + ewram01000.unk1 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + + sub_806C9C4(taskId, ewram01000.unk1); + ewram01000.unk2 = sub_806CA00(taskId); + + sub_806D538(ewram1B000_alt.unk272, 0); + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 6, 0); + ewram1B000.unk261 = 2; +} void sub_806CAFC(u8 a, s16 b) { @@ -1282,7 +3816,7 @@ void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES)) { - u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { PrintPartyMenuMonNickname(monIndex, 2, pokemon); @@ -1326,7 +3860,7 @@ void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status) static void PartyMenuClearLevelStatusTilemap(u8 monIndex) { - u8 isLinkDoubleBattle; + bool8 isLinkDoubleBattle; u8 b; u8 x; u8 y; @@ -1392,7 +3926,7 @@ void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { u8 statusAndPkrs; - u8 isLinkDoubleBattle; + bool8 isLinkDoubleBattle; u8 b; statusAndPkrs = GetMonStatusAndPokerus(pokemon); @@ -1490,7 +4024,7 @@ void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { PartyMenuPrintHP(monIndex, 2, pokemon); @@ -1565,7 +4099,7 @@ void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 isDoubleBattle = IsLinkDoubleBattle(); + bool8 isDoubleBattle = IsLinkDoubleBattle(); if (isDoubleBattle == TRUE) { PartyMenuDrawHPBar(monIndex, 2, pokemon); diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 249146b37..6e5926a6a 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -111,6 +111,8 @@ extern struct OamMatrix gOamMatrices[]; extern struct Struct_2017810 unk_2017810[]; extern u8 gHappinessMoveAnim; +extern u8 UpdateMonIconFrame(struct Sprite *sprite); + EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; EWRAM_DATA u32 filler_0202F7D8[3] = {0}; -- cgit v1.2.3 From 6093e4f33ade76a8abcc258a420a7fa09749ab7b Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 7 Oct 2017 16:53:00 -0700 Subject: Cleanup externs in party_menu.c --- src/choose_party.c | 1 - src/party_menu.c | 31 ++++++++++++------------------- 2 files changed, 12 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index cd63947a4..ea310b0e3 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -47,7 +47,6 @@ extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); extern u8 sub_806B124(); -extern void sub_806C658(); extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); diff --git a/src/party_menu.c b/src/party_menu.c index b84b139bc..bcc5ece9f 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -160,6 +160,18 @@ static void sub_806D014(u8 taskId); static void sub_806D118(u8 taskId); static void sub_806B460(void); static void sub_806B548(void); +static void sub_806BA94(s16 a, u16 b, u8 c, u8 d); +static void sub_806B9A4(s16 a, u16 b, u8 c); +static void sub_806CA18(u8 taskId, u8 b); +static void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); +static void UpdateMonIconFrame_806DA38(struct Sprite *sprite); +static void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); +static u8 sub_806CA00(u8 taskId); +static void SpriteCB_sub_806D37C(struct Sprite *sprite); +static u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); #if ENGLISH #define WINDOW_LEFT (3) @@ -169,25 +181,6 @@ static void sub_806B548(void); #define WINDOW_RIGHT (29) #endif -extern u8 UpdateMonIconFrame(struct Sprite *sprite); -extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); -extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); -extern void sub_809D62C(struct Sprite *sprite); -extern void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); -extern void UpdateMonIconFrame_806DA38(struct Sprite *sprite); -extern void SpriteCB_sub_806D37C(struct Sprite *sprite); -extern void sub_806CD44(u8 taskId); -extern u8 sub_806CA00(u8 taskId); -extern void sub_806BA34(s16 a, u16 b); -extern void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); -extern void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); -extern void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); -extern void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); -extern void sub_806C658(u8 taskId, s8 directionPressed); -extern void sub_806CA18(u8 taskId, u8 b); -extern void sub_806B9A4(s16 a, u16 b, u8 c); -extern void sub_806BA94(s16 a, u16 b, u8 c, u8 d); - #ifdef NONMATCHING void sub_806AEDC(void) -- cgit v1.2.3 From 36732986679e93a4ceb454d494fc2aa1d5e95f6c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 7 Oct 2017 20:21:11 -0700 Subject: Move all data/party_menu.s data into party_menu.c --- src/battle_party_menu.c | 2 +- src/party_menu.c | 532 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 435 insertions(+), 99 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index fdc1d503d..34af8147e 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -348,7 +348,7 @@ void sub_8094E4C(void) sub_8094E20(3); } -int SetUpBattlePartyMenu(void) +bool8 SetUpBattlePartyMenu(void) { switch (EWRAM_1B000.unk264) //switch (ewram1B000.unk264[0]) diff --git a/src/party_menu.c b/src/party_menu.c index bcc5ece9f..4a5773f11 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3,6 +3,7 @@ #include "battle.h" #include "battle_interface.h" #include "battle_party_menu.h" +#include "choose_party.h" #include "data2.h" #include "decompress.h" #include "event_data.h" @@ -15,6 +16,7 @@ #include "main.h" #include "menu.h" #include "menu_helpers.h" +#include "moves.h" #include "palette.h" #include "pokemon.h" #include "pokemon_icon.h" @@ -23,6 +25,7 @@ #include "pokemon_summary_screen.h" #include "rom_8077ABC.h" #include "rom_8094928.h" +#include "script_pokemon_80F9.h" #include "songs.h" #include "sound.h" #include "species.h" @@ -32,6 +35,418 @@ #include "task.h" #include "util.h" +struct Coords8 +{ + u8 x; + u8 y; +}; + +struct PartyMenuWindowCoords +{ + u8 left; + u8 top; + u8 right; + u8 bottom; +}; + +struct UnknownStruct5 +{ + u8 unk0; + u8 unk1; + const u16 *unk4; +}; + +struct PartyMenuFunctionsStruct +{ + /*0x0*/TaskFunc func1; + /*0x4*/bool8 (*func2)(void); + /*0x8*/u8 unk8; +}; + +static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); +static void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon); +static void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon); +static void sub_806D05C(u8 taskId); +static void sub_806D15C(u8 taskId); +static void sub_806D198(u8 taskId); +static void sub_806E884(u8 taskId); +static void sub_8070D90(u8 taskId); +static void sub_806D5B8(u8 taskId); +static void sub_806D014(u8 taskId); +static void sub_806D118(u8 taskId); +static void sub_806B460(void); +static void sub_806B548(void); +static void sub_806BA94(s16 a, u16 b, u8 c, u8 d); +static void sub_806B9A4(s16 a, u16 b, u8 c); +static void sub_806CA18(u8 taskId, u8 b); +static void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); +static void UpdateMonIconFrame_806DA38(struct Sprite *sprite); +static void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); +static u8 sub_806CA00(u8 taskId); +static void SpriteCB_sub_806D37C(struct Sprite *sprite); +static u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); +static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite); +static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId); +static void ItemUseMoveMenu_HandleCancel(u8 taskId); +static bool8 sub_806AFD0(void); + +const u16 TMHMMoves[] = { + MOVE_FOCUS_PUNCH, + MOVE_DRAGON_CLAW, + MOVE_WATER_PULSE, + MOVE_CALM_MIND, + MOVE_ROAR, + MOVE_TOXIC, + MOVE_HAIL, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_HIDDEN_POWER, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_ICE_BEAM, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_GIGA_DRAIN, + MOVE_SAFEGUARD, + MOVE_FRUSTRATION, + MOVE_SOLAR_BEAM, + MOVE_IRON_TAIL, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_RETURN, + MOVE_DIG, + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_REFLECT, + MOVE_SHOCK_WAVE, + MOVE_FLAMETHROWER, + MOVE_SLUDGE_BOMB, + MOVE_SANDSTORM, + MOVE_FIRE_BLAST, + MOVE_ROCK_TOMB, + MOVE_AERIAL_ACE, + MOVE_TORMENT, + MOVE_FACADE, + MOVE_SECRET_POWER, + MOVE_REST, + MOVE_ATTRACT, + MOVE_THIEF, + MOVE_STEEL_WING, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_OVERHEAT, + MOVE_CUT, + MOVE_FLY, + MOVE_SURF, + MOVE_STRENGTH, + MOVE_FLASH, + MOVE_ROCK_SMASH, + MOVE_WATERFALL, + MOVE_DIVE, +}; + +//FIXME +//const u8 *unrefTileBuffer = gTileBuffer; +asm(".4byte gTileBuffer\n"); + +static const u8 MenuGfx_HoldIcons[] = INCBIN_U8("graphics/interface/hold_icons.4bpp"); +static const u16 MenuPal_HoldIcons[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); + +static const struct SpriteSheet gUnknown_083765DC = { + MenuGfx_HoldIcons, + sizeof MenuGfx_HoldIcons, + 0xd750 +}; + +static const struct SpritePalette gUnknown_083765E4 = { + MenuPal_HoldIcons, + 0xd750 +}; + +static const struct OamData gOamData_83765EC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_83765F4[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83765FC[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8376604[] = { + gSpriteAnim_83765F4, + gSpriteAnim_83765FC, +}; + +static const struct SpriteTemplate gSpriteTemplate_837660C = { + 55120, + 55120, + &gOamData_83765EC, + gSpriteAnimTable_8376604, + NULL, + gDummySpriteAffineAnimTable, + SpriteCB_UpdateHeldItemIconPosition +}; + +static const u8 *const gUnknown_08376624[] = { + OtherText_ChoosePoke, + OtherText_MovePokeTo, + OtherText_TeachWhat, + OtherText_UseWhat, + OtherText_GiveWhat, + OtherText_DoWhat, + OtherText_NothingToCut, + OtherText_CantSurf, + OtherText_AlreadySurfing, + OtherText_CantUseThatHere, + OtherText_RestoreWhatMove, + OtherText_BoostPP, + gOtherText_CancelWithTerminator, + OtherText_DoWhatWithItem, + OtherText_NoPokeForBattle, + OtherText_ChoosePoke2, + OtherText_NotEnoughHP, + OtherText_ThreePokeNeeded, + OtherText_PokeCantBeSame, + OtherText_NoIdenticalHoldItems, + OtherText_TeachWhichPoke, +}; + +static const struct Coords8 gUnknown_08376678[8][6] = { + {{16, 40}, {104, 18}, {104, 42}, {104, 66}, {104, 90}, {104, 114}}, + {{16, 24}, { 16, 80}, {104, 18}, {104, 50}, {104, 82}, {104, 114}}, + {{16, 24}, { 16, 80}, {104, 26}, {104, 50}, {104, 82}, {104, 106}}, + {{16, 24}, {104, 26}, {104, 50}, { 16, 80}, {104, 82}, {104, 106}}, + {{ 5, 4}, { 16, 1}, { 16, 4}, { 16, 7}, { 16, 10}, { 16, 13}}, + {{ 5, 2}, { 5, 9}, { 16, 1}, { 16, 5}, { 16, 9}, { 16, 13}}, + {{ 5, 2}, { 5, 9}, { 16, 2}, { 16, 5}, { 16, 9}, { 16, 12}}, + {{ 5, 2}, { 16, 2}, { 16, 5}, { 5, 9}, { 16, 9}, { 16, 12}}, +}; + +static const struct Coords8 gUnknown_08376738[12][6] = { + {{6, 5}, {17, 2}, {17, 5}, {17, 8}, {17, 11}, {17, 14}}, + {{6, 3}, { 6, 10}, {17, 2}, {17, 6}, {17, 10}, {17, 14}}, + {{6, 3}, { 6, 10}, {17, 3}, {17, 6}, {17, 10}, {17, 13}}, + {{6, 3}, {17, 3}, {17, 6}, { 6, 10}, {17, 10}, {17, 13}}, + {{3, 7}, {22, 2}, {22, 5}, {22, 8}, {22, 11}, {22, 14}}, + {{3, 5}, { 3, 12}, {22, 2}, {22, 6}, {22, 10}, {22, 14}}, + {{3, 5}, { 3, 12}, {22, 3}, {22, 6}, {22, 10}, {22, 13}}, + {{3, 5}, {22, 3}, {22, 6}, { 3, 12}, {22, 10}, {22, 13}}, + {{7, 7}, {26, 2}, {26, 5}, {26, 8}, {26, 11}, {26, 14}}, + {{7, 5}, { 7, 12}, {26, 2}, {26, 6}, {26, 10}, {26, 14}}, + {{7, 5}, { 7, 12}, {26, 3}, {26, 6}, {26, 10}, {26, 13}}, + {{7, 5}, {26, 3}, {26, 6}, { 7, 12}, {26, 10}, {26, 13}}, +}; + +static u16 *const gUnknown_08376858[4][6] = { + {(u16*)(BG_VRAM + 0xF1C8), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF16E), (u16*)(BG_VRAM + 0xF22E), (u16*)(BG_VRAM + 0xF2EE), (u16*)(BG_VRAM + 0xF3AE)}, + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF3AE)}, + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, +}; + +static const struct Coords8 gUnknown_083768B8[3][8] = { + {{8, 44}, {92, 22}, {92, 46}, {92, 70}, {92, 94}, {92, 118}, {196, 136}, {196, 152}}, + {{8, 28}, { 8, 84}, {92, 22}, {92, 54}, {92, 86}, {92, 118}, {196, 136}, {196, 152}}, + {{8, 28}, { 8, 84}, {92, 30}, {92, 54}, {92, 86}, {92, 110}, {196, 136}, {196, 152}}, +}; + +static u16 *const gUnknown_08376918[2][PARTY_SIZE] = { + {(u16*)(BG_VRAM + 0xF1C6), (u16*)(BG_VRAM + 0xF06C), (u16*)(BG_VRAM + 0xF12C), (u16*)(BG_VRAM + 0xF1EC), (u16*)(BG_VRAM + 0xF2AC), (u16*)(BG_VRAM + 0xF36C)}, + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF3AE)}, +}; + +static const struct PartyMenuWindowCoords gUnknown_08376948[2][6] = { + {{2, 4, 10, 9}, {16, 1, 29, 3}, {16, 4, 29, 6}, {16, 7, 29, 9}, {16, 10, 29, 12}, {16, 13, 29, 15}}, + {{2, 2, 10, 7}, { 2, 9, 10, 14}, {16, 1, 29, 3}, {16, 5, 29, 7}, {16, 9, 29, 11}, {16, 13, 29, 15}}, +}; + +static const struct PartyMenuWindowCoords gUnknown_08376978[2][6] = { + {{2, 7, 10, 9}, {21, 1, 29, 3}, {21, 4, 29, 6}, {21, 7, 29, 9}, {21, 10, 29, 12}, {21, 13, 29, 15}}, + {{2, 2, 10, 7}, { 2, 9, 10, 14}, {16, 1, 29, 3}, {16, 5, 29, 7}, {16, 9, 29, 11}, {16, 13, 29, 15}}, +}; + +// This is actually a 2x6x2 array, but the code reads it as a flat array. +static const u8 gUnknown_083769A8[] = { + 0, 3, 11, 1, 11, 4, 11, 7, 11, 10, 11, 13, + 0, 1, 0, 8, 11, 1, 11, 5, 11, 9, 11, 13, // Double battle +}; + +// This is actually a 2x6x2 array, but the code reads it as a flat array. +static const u8 gUnknown_083769C0[] = { + 0, 1, 0, 8, 11, 2, 11, 5, 11, 9, 11, 12, + 0, 1, 0, 8, 11, 2, 11, 5, 11, 9, 11, 12, // Double battle +}; + +static const u8 gUnknown_083769D8[] = { + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x27, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x37, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x37, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x37, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x47, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x47, + 0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x57, +}; + +static const u8 gUnknown_08376A25[] = { + 0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x53, + 0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x63, + 0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x73, +}; + +static const u8 gUnknown_08376A5E[] = { + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x23, + 0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x43, +}; + +static const u8 gUnusedData_08376A97[] = { + 0x0C,0x0D,0x0E,0x0F,0x00,0x01,0x02,0x03,0x04,0x05,0x0F, + 0x10,0x11,0x12,0x13,0x14,0x15,0x0F,0x06,0x05,0x01,0x07, + 0x08,0x09,0x0F,0x16,0x15,0x11,0x17,0x18,0x19,0x0F,0x09, + 0x0A,0x0B,0x05,0x0C,0x0F,0x0F,0x19,0x1A,0x1B,0x15,0x1C, + 0x0F,0x0F,0x0D,0x0B,0x05,0x0C,0x0F,0x0F,0x0F,0x1D,0x1B, + 0x15,0x1C,0x0F,0x0F,0x0F,0x06,0x05,0x0B,0x05,0x0C,0x0F, + 0x0F,0x16,0x15,0x1B,0x15,0x1C,0x0F,0x0F,0x0F,0x0F,0x20, + 0x0C,0x09,0x0F,0x0F,0x0F,0x1F,0x30,0x1C,0x19,0x0F,0x0F, + 0x0F,0x25,0x0F,0x22,0x24,0x0F,0x0F,0x0F,0x35,0x41,0x32, + 0x34,0x0F,0x0F,0x0F,0x26,0x0F,0x23,0x0E,0x0F,0x0F,0x0F, + 0x36,0x43,0x33,0x1E,0x0F,0x0F,0x27,0x28,0x29,0x03,0x2A, + 0x0F,0x0F,0x37,0x38,0x39,0x13,0x3A,0x0F,0x0F,0x27,0x28, + 0x29,0x03,0x04,0x05,0x0F,0x37,0x38,0x39,0x13,0x14,0x15, + 0x0F,0x2B,0x2C,0x02,0x28,0x29,0x2D,0x21,0x3B,0x3C,0x12, + 0x38,0x39,0x3D,0x31,0x2B,0x2C,0x02,0x28,0x29,0x08,0x09, + 0x3B,0x3C,0x12,0x38,0x39,0x18,0x19,0x2E,0x2F,0x2B,0x2C, + 0x02,0x27,0x2D,0x3E,0x3F,0x3B,0x3C,0x12,0x45,0x3D, +}; + +static const TaskFunc gUnknown_08376B54[] = { + ItemUseMoveMenu_HandleMoveSelection, + ItemUseMoveMenu_HandleCancel, +}; + +static const u16 Unknown_08376B5C[] = { + 0x4000, 0x4018, 0xF400, + 0x4000, 0x4038, 0xF404, + 0x4008, 0x4018, 0xF408, + 0x4008, 0x4038, 0xF40C, + 0x4010, 0x4020, 0xF410, + 0x4020, 0x4025, 0xF418, + 0x4020, 0x4045, 0xF41C, + 0xFFFF, +}; + +static const u16 Unknown_08376B88[] = { + 0x4000, 0x4018, 0xF400, + 0x4000, 0x4038, 0xF404, + 0x4008, 0x4018, 0xF408, + 0x4008, 0x4038, 0xF40C, + 0x4010, 0x4020, 0xF410, + 0x4010, 0x4065, 0xF418, + 0x4010, 0x4085, 0xF41C, + 0xFFFF, +}; + +static struct UnknownStruct5 const gUnknown_08376BB4[4][6] = { + { + { 1, 4, Unknown_08376B5C}, + {12, 1, Unknown_08376B88}, + {12, 4, Unknown_08376B88}, + {12, 7, Unknown_08376B88}, + {12, 10, Unknown_08376B88}, + {12, 13, Unknown_08376B88}, + }, + { + { 1, 2, Unknown_08376B5C}, + { 1, 9, Unknown_08376B5C}, + {12, 1, Unknown_08376B88}, + {12, 5, Unknown_08376B88}, + {12, 9, Unknown_08376B88}, + {12, 13, Unknown_08376B88}, + }, + { + { 1, 2, Unknown_08376B5C}, + { 1, 9, Unknown_08376B5C}, + {12, 2, Unknown_08376B88}, + {12, 5, Unknown_08376B88}, + {12, 9, Unknown_08376B88}, + {12, 12, Unknown_08376B88}, + }, + { + { 1, 2, Unknown_08376B5C}, + {12, 2, Unknown_08376B88}, + {12, 5, Unknown_08376B88}, + { 1, 9, Unknown_08376B5C}, + {12, 9, Unknown_08376B88}, + {12, 12, Unknown_08376B88}, + }, +}; + +static const struct PartyMenuFunctionsStruct gUnknown_08376C74[] = { + {sub_8089CD4, sub_806AFD0, 0}, + {SetUpBattlePokemonMenu, SetUpBattlePartyMenu, 0}, + {sub_80F9C6C, sub_80F9ACC, 0}, + {sub_80F9C6C, sub_806AFD0, 0}, + {sub_81222B0, sub_8121E78, 0}, + {sub_8122A48, sub_8122854, 0xFF}, + {sub_8122E0C, sub_806AFD0, 0x0F}, + {sub_80F9E64, sub_80F9CE8, 0}, +}; + +static const u16 gUnknown_08376CD4[] = { + 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, +}; + +static const u16 gUnknown_08376CEC[] = { + 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x2F, + 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, +}; + +static const u8 *const StatNames[] = { + gOtherText_HP, + gOtherText_Attack, + gOtherText_Defense, + gOtherText_SpAtk, + gOtherText_SpDef, + gOtherText_Speed, +}; + +static const u8 StatDataTypes[] = { + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SPATK, + MON_DATA_SPDEF, + MON_DATA_SPD, +}; + struct Unk201C000 { /*0x00*/ struct Pokemon *pokemon; @@ -51,27 +466,6 @@ struct Unk201F000 u8 unkE00[3]; // not sure if this is an array or struct, or how big it is }; -struct UnknownStruct5 -{ - u8 unk0; - u8 unk1; - u16 *unk4; -}; - -struct Coords8 -{ - u8 x; - u8 y; -}; - -struct PartyMenuWindowCoords -{ - u8 left; - u8 top; - u8 right; - u8 bottom; -}; - struct UnknownPokemonStruct2 { /*0x00*/ u16 species; @@ -86,18 +480,11 @@ struct UnknownPokemonStruct2 /*0x1D*/ u8 language; }; -struct PartyMenuFunctionsStruct -{ - /*0x0*/TaskFunc func1; - /*0x4*/TaskFunc func2; - /*0x8*/u8 unk8; -}; - #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) extern u16 gBattleTypeFlags; - +extern u8 gTileBuffer[]; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F6; extern u16 gUnknown_0202E8F8; @@ -107,35 +494,10 @@ extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; extern u16 gMoveToLearn; -extern struct PartyMenuFunctionsStruct const gUnknown_08376C74[]; -extern u8 gUnknown_083769D8[]; -extern u8 gUnknown_08376A25[]; -extern u8 gUnknown_08376A5E[]; extern u16 gUnknown_08E9A300[]; -extern const u16 gUnknown_08376CD4[]; -extern const u16 gUnknown_08376CEC[]; -extern u16 *const gUnknown_08376918[2][PARTY_SIZE]; extern struct Coords8 const gUnknown_08376738[12][6]; -extern struct Coords8 const gUnknown_08376678[12][6]; -extern struct PartyMenuWindowCoords const gUnknown_08376948[2][6]; -extern struct PartyMenuWindowCoords const gUnknown_08376978[2][6]; -extern struct Coords8 const gUnknown_083768B8[3][8]; -extern u8 *const gUnknown_08376624[]; extern const u8 gUnknown_083769C0[]; -//extern const u16 gUnknown_083769A8[][6]; -//extern const u8 gUnknown_083769A8[][12]; -extern u16 *const gUnknown_08376858[][6]; -extern const u8 gUnknown_083769A8[]; -extern const u8 gUnknown_08376D1C[NUM_STATS]; -extern const u16 gUnknown_08376504[]; -extern const struct SpriteSheet gUnknown_083765DC; -extern const struct SpritePalette gUnknown_083765E4; -extern void (*const gUnknown_08376B54[])(u8); -extern const u8 *const gUnknown_08376D04[NUM_STATS]; -extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; extern u8 gUnknown_02039460[]; -extern u8 gTileBuffer[]; -extern const struct SpriteTemplate gSpriteTemplate_837660C[]; extern struct Window gUnknown_03004210; extern const u8 gPartyMenuMisc_Gfx[]; @@ -147,32 +509,6 @@ extern const u8 gPartyMenuOrderText_Gfx[]; extern const u8 gStatusGfx_Icons[]; extern const u8 gStatusPal_Icons[]; -static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); -static void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon); -static void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon); -static void sub_806D05C(u8 taskId); -static void sub_806D15C(u8 taskId); -static void sub_806D198(u8 taskId); -static void sub_806E884(u8 taskId); -static void sub_8070D90(u8 taskId); -static void sub_806D5B8(u8 taskId); -static void sub_806D014(u8 taskId); -static void sub_806D118(u8 taskId); -static void sub_806B460(void); -static void sub_806B548(void); -static void sub_806BA94(s16 a, u16 b, u8 c, u8 d); -static void sub_806B9A4(s16 a, u16 b, u8 c); -static void sub_806CA18(u8 taskId, u8 b); -static void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); -static void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); -static void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); -static void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); -static void UpdateMonIconFrame_806DA38(struct Sprite *sprite); -static void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); -static u8 sub_806CA00(u8 taskId); -static void SpriteCB_sub_806D37C(struct Sprite *sprite); -static u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); - #if ENGLISH #define WINDOW_LEFT (3) #define WINDOW_RIGHT (26) @@ -1514,7 +1850,7 @@ void sub_806BA34(s16 a, u16 b) void sub_806BA94(s16 a, u16 b, u8 c, u8 d) { u8 i; - u8 *arr; + const u8 *arr; u16 var1; arr = gUnknown_08376A5E; @@ -1573,7 +1909,7 @@ void sub_806BB9C(u8 a) u16 *vramPtr; const u16 arr[12]; - memcpy(&arr, gUnknown_08376CD4, 12 * 2); + memcpy(&arr, gUnknown_08376CD4, sizeof gUnknown_08376CD4); vramPtr = (u16 *)(BG_VRAM + 0x3C30); for (i = 0; i < PARTY_SIZE; i++) @@ -1589,7 +1925,7 @@ void sub_806BBEC(u8 a) u16 *vramPtr; const u16 arr[12]; - memcpy(&arr, gUnknown_08376CEC, 12 * 2); + memcpy(&arr, gUnknown_08376CEC, sizeof gUnknown_08376CEC); vramPtr = (u16 *)(BG_VRAM + 0x3CB0); for (i = 0; i < PARTY_SIZE; i++) @@ -3413,7 +3749,7 @@ void CreateHeldItemIcon(u8 a, u8 b) u8 spriteId; subPriority = gSprites[a].subpriority; - spriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, subPriority - 1); + spriteId = CreateSprite(&gSpriteTemplate_837660C, 0xFA, 0xAA, subPriority - 1); gSprites[spriteId].pos2.x = 4; gSprites[spriteId].pos2.y = 10; @@ -3471,7 +3807,7 @@ void CreateHeldItemIcons_806DC34(u8 taskId) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { monIconSpriteId = GetMonIconSpriteId_maybe(taskId, i); - heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4); + heldItemSpriteId = CreateSprite(&gSpriteTemplate_837660C, 0xFA, 0xAA, 4); gSprites[heldItemSpriteId].pos2.x = 4; gSprites[heldItemSpriteId].pos2.y = 10; @@ -4555,9 +4891,8 @@ void Task_ConfirmTakeHeldMail(u8 taskId) u16 ItemIdToBattleMoveId(u16 item) { - u16 moveId = item - 289; - - return gUnknown_08376504[moveId]; + u16 machineNumber = item - ITEM_TM01; + return TMHMMoves[machineNumber]; } bool8 pokemon_has_move(struct Pokemon *pkmn, u16 move) @@ -4812,11 +5147,12 @@ bool8 IsHMMove(u16 move) { u8 i; - for (i = 0; i < 8; i++) + for (i = 0; i < NUM_HIDDEN_MACHINES; i++) { - if (gUnknown_08376504[50 + i] == move) + if (TMHMMoves[NUM_TECHNICAL_MACHINES + i] == move) return TRUE; } + return FALSE; } @@ -5334,7 +5670,7 @@ void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100) { for (i = 0; i < 6; i++) - ewram1B000.statGrowths[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + ewram1B000.statGrowths[i] = GetMonData(ewram1C000.pokemon, StatDataTypes[i]); r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0); } else @@ -5400,7 +5736,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) u8 y; u32 stat; - stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + stat = GetMonData(ewram1C000.pokemon, StatDataTypes[i]); ewram1B000.statGrowths[i + NUM_STATS] = stat; ewram1B000.statGrowths[i] = stat - ewram1B000.statGrowths[i]; @@ -5408,7 +5744,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) x = (i / 3) * 9 + 11; y = ((i % 3) << 1) + 1; - MenuPrint_PixelCoords(gUnknown_08376D04[i], (x + 1) * 8, y * 8, 1); + MenuPrint_PixelCoords(StatNames[i], (x + 1) * 8, y * 8, 1); if (i == 2) MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0); @@ -5448,7 +5784,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) { _0807086C:\n\ ldr r1, _08070930 @ =0x0201c000\n\ ldr r0, [r1]\n\ - ldr r1, _08070934 @ =gUnknown_08376D1C\n\ + ldr r1, _08070934 @ =StatDataTypes\n\ adds r1, r7, r1\n\ ldrb r1, [r1]\n\ bl GetMonData\n\ @@ -5480,7 +5816,7 @@ _0807086C:\n\ adds r5, 0x1\n\ lsls r5, 24\n\ lsrs r5, 24\n\ - ldr r1, _0807093C @ =gUnknown_08376D04\n\ + ldr r1, _0807093C @ =StatNames\n\ lsls r0, r7, 2\n\ adds r0, r1\n\ ldr r1, [r0]\n\ @@ -5537,9 +5873,9 @@ _0807086C:\n\ .align 2, 0\n\ _0807092C: .4byte gStringVar1\n\ _08070930: .4byte 0x0201c000\n\ -_08070934: .4byte gUnknown_08376D1C\n\ +_08070934: .4byte StatDataTypes\n\ _08070938: .4byte 0x0201b264\n\ -_0807093C: .4byte gUnknown_08376D04\n\ +_0807093C: .4byte StatNames\n\ _08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ .syntax divided\n"); } @@ -5556,7 +5892,7 @@ void PrintNewStatsInLevelUpWindow(u8 taskId) u32 stat; u32 newStatIndex; - stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + stat = GetMonData(ewram1C000.pokemon, StatDataTypes[i]); newStatIndex = i + 6; ewram1B000.statGrowths[newStatIndex] = stat; -- cgit v1.2.3 From 7a5ed07949551b9c6e6bfc1885ce50e673f1a476 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 7 Oct 2017 23:42:28 -0700 Subject: Decompile sub_806AFD0 --- src/party_menu.c | 239 +++++++++++++++++-------------------------------------- 1 file changed, 71 insertions(+), 168 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 4a5773f11..a27f29482 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -614,175 +614,78 @@ void OpenPartyMenu(u8 a, u8 battleFlags) sub_806AF8C(a, battleFlags, gUnknown_08376C74[a].func1, gUnknown_08376C74[a].unk8); } -__attribute__((naked)) bool8 sub_806AFD0(void) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r1, _0806AFF0 @ =0x0201b000\n\ - movs r2, 0x99\n\ - lsls r2, 2\n\ - adds r0, r1, r2\n\ - movs r2, 0\n\ - ldrsh r0, [r0, r2]\n\ - adds r4, r1, 0\n\ - cmp r0, 0x9\n\ - bls _0806AFE6\n\ - b _0806B11A\n\ -_0806AFE6:\n\ - lsls r0, 2\n\ - ldr r1, _0806AFF4 @ =_0806AFF8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0806AFF0: .4byte 0x0201b000\n\ -_0806AFF4: .4byte _0806AFF8\n\ - .align 2, 0\n\ -_0806AFF8:\n\ - .4byte _0806B020\n\ - .4byte _0806B060\n\ - .4byte _0806B066\n\ - .4byte _0806B07A\n\ - .4byte _0806B0A4\n\ - .4byte _0806B0AA\n\ - .4byte _0806B0BC\n\ - .4byte _0806B0C2\n\ - .4byte _0806B0D4\n\ - .4byte _0806B0EC\n\ -_0806B020:\n\ - ldr r0, _0806B048 @ =0x00000266\n\ - adds r5, r4, r0\n\ - movs r1, 0\n\ - ldrsh r3, [r5, r1]\n\ - ldr r0, _0806B04C @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r3, r0\n\ - bge _0806B054\n\ - movs r2, 0x98\n\ - lsls r2, 2\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - ldrb r1, [r5]\n\ - movs r2, 0x64\n\ - muls r2, r3\n\ - ldr r3, _0806B050 @ =gPlayerParty\n\ - adds r2, r3\n\ - bl TryCreatePartyMenuMonIcon\n\ - b _0806B114\n\ - .align 2, 0\n\ -_0806B048: .4byte 0x00000266\n\ -_0806B04C: .4byte gPlayerPartyCount\n\ -_0806B050: .4byte gPlayerParty\n\ -_0806B054:\n\ - movs r0, 0\n\ - strh r0, [r5]\n\ - movs r0, 0x99\n\ - lsls r0, 2\n\ - adds r1, r4, r0\n\ - b _0806B0E0\n\ -_0806B060:\n\ - bl LoadHeldItemIconGraphics\n\ - b _0806B0D8\n\ -_0806B066:\n\ - movs r1, 0x98\n\ - lsls r1, 2\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - bl CreateHeldItemIcons_806DC34\n\ - movs r2, 0x99\n\ - lsls r2, 2\n\ - adds r1, r4, r2\n\ - b _0806B0E0\n\ -_0806B07A:\n\ - movs r1, 0x98\n\ - lsls r1, 2\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - ldr r2, _0806B0A0 @ =0x00000266\n\ - adds r5, r4, r2\n\ - ldrb r1, [r5]\n\ - bl sub_806BD58\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B114\n\ - movs r0, 0\n\ - strh r0, [r5]\n\ - movs r0, 0x99\n\ - lsls r0, 2\n\ - adds r1, r4, r0\n\ - b _0806B0E0\n\ - .align 2, 0\n\ -_0806B0A0: .4byte 0x00000266\n\ -_0806B0A4:\n\ - bl PartyMenuPrintMonsLevelOrStatus\n\ - b _0806B0D8\n\ -_0806B0AA:\n\ - bl PrintPartyMenuMonNicknames\n\ - ldr r1, _0806B0B8 @ =0x0201b000\n\ - movs r0, 0x99\n\ - lsls r0, 2\n\ - adds r1, r0\n\ - b _0806B0E0\n\ - .align 2, 0\n\ -_0806B0B8: .4byte 0x0201b000\n\ -_0806B0BC:\n\ - bl PartyMenuTryPrintMonsHP\n\ - b _0806B0D8\n\ -_0806B0C2:\n\ - bl nullsub_13\n\ - ldr r1, _0806B0D0 @ =0x0201b000\n\ - movs r0, 0x99\n\ - lsls r0, 2\n\ - adds r1, r0\n\ - b _0806B0E0\n\ - .align 2, 0\n\ -_0806B0D0: .4byte 0x0201b000\n\ -_0806B0D4:\n\ - bl PartyMenuDrawHPBars\n\ -_0806B0D8:\n\ - ldr r1, _0806B0E8 @ =0x0201b000\n\ - movs r2, 0x99\n\ - lsls r2, 2\n\ - adds r1, r2\n\ -_0806B0E0:\n\ - ldrh r0, [r1]\n\ - adds r0, 0x1\n\ - strh r0, [r1]\n\ - b _0806B11A\n\ - .align 2, 0\n\ -_0806B0E8: .4byte 0x0201b000\n\ -_0806B0EC:\n\ - ldr r0, _0806B110 @ =0x00000266\n\ - adds r5, r4, r0\n\ - ldrb r0, [r5]\n\ - bl sub_806B58C\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B114\n\ - movs r1, 0\n\ - strh r1, [r5]\n\ - movs r2, 0x99\n\ - lsls r2, 2\n\ - adds r0, r4, r2\n\ - strh r1, [r0]\n\ - movs r0, 0x1\n\ - b _0806B11C\n\ - .align 2, 0\n\ -_0806B110: .4byte 0x00000266\n\ -_0806B114:\n\ - ldrh r0, [r5]\n\ - adds r0, 0x1\n\ - strh r0, [r5]\n\ -_0806B11A:\n\ - movs r0, 0\n\ -_0806B11C:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + switch (ewram1B000_alt.unk264) + { + case 0: + if (ewram1B000_alt.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); + ewram1B000_alt.unk266++; + } + else + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + + break;; + case 1: + LoadHeldItemIconGraphics(); + ewram1B000_alt.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); + ewram1B000_alt.unk264++; + break; + case 3: + if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) != 1) + { + ewram1B000_alt.unk266++; + } + else + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + ewram1B000_alt.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + ewram1B000_alt.unk264++; + break; + case 6: + PartyMenuTryPrintMonsHP(); + ewram1B000_alt.unk264++; + break; + case 7: + nullsub_13(); + ewram1B000_alt.unk264++; + break; + case 8: + PartyMenuDrawHPBars(); + ewram1B000_alt.unk264++; + break; + case 9: + if (sub_806B58C(ewram1B000_alt.unk266) == 1) + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264 = 0; + return TRUE; + } + else + { + ewram1B000_alt.unk266++; + break; + } + } + + return FALSE; } __attribute__((naked)) @@ -4283,7 +4186,7 @@ void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) } } -void PartyMenuPrintMonsLevelOrStatus() +void PartyMenuPrintMonsLevelOrStatus(void) { u8 i; -- cgit v1.2.3 From 62eb504ec9371ab8505d4da030412fab30a87982 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 8 Oct 2017 12:44:03 -0700 Subject: Decompile InitPartyMenu --- src/battle_party_menu.c | 2 +- src/choose_party.c | 5 +- src/party_menu.c | 506 ++++++++++++------------------------------------ src/pokemon_menu.c | 16 +- src/sprite.c | 4 +- 5 files changed, 142 insertions(+), 391 deletions(-) (limited to 'src') diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 34af8147e..dc7c5db5b 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -566,7 +566,7 @@ static void Task_809538C(void) { do { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); sub_806BF74(EWRAM_1B000.unk260, 0); diff --git a/src/choose_party.c b/src/choose_party.c index ea310b0e3..475f96695 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -46,7 +46,6 @@ extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); -extern u8 sub_806B124(); extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); @@ -422,7 +421,7 @@ static void sub_8122530(void) { while (1) { - if (sub_806B124() == 1) + if (InitPartyMenu() == TRUE) { sub_806C994(ewram1B000.unk260, gUnknown_020384F0); sub_806C658(ewram1B000.unk260, 0); @@ -873,7 +872,7 @@ static void sub_8122F90(void) { while (1) { - if (sub_806B124() == 1) + if (InitPartyMenu() == TRUE) { sub_806C994(ewram1B000.unk260, gUnknown_020384F0); sub_806BF74(ewram1B000.unk260, 0); diff --git a/src/party_menu.c b/src/party_menu.c index a27f29482..db1fde55a 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -33,6 +33,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "unknown_task.h" #include "util.h" struct Coords8 @@ -92,6 +93,9 @@ static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite); static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId); static void ItemUseMoveMenu_HandleCancel(u8 taskId); static bool8 sub_806AFD0(void); +static void sub_806B4A8(void); +static void sub_806AF34(void); +static bool8 LoadPartyMenuGraphics(u8 a); const u16 TMHMMoves[] = { MOVE_FOCUS_PUNCH, @@ -688,385 +692,133 @@ bool8 sub_806AFD0(void) return FALSE; } -__attribute__((naked)) -bool8 sub_806B124(void) +bool8 InitPartyMenu(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0xC\n\ - ldr r0, _0806B144 @ =gMain\n\ - ldr r1, _0806B148 @ =0x0000043c\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - bls _0806B13A\n\ - b _0806B450\n\ -_0806B13A:\n\ - lsls r0, 2\n\ - ldr r1, _0806B14C @ =_0806B150\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0806B144: .4byte gMain\n\ -_0806B148: .4byte 0x0000043c\n\ -_0806B14C: .4byte _0806B150\n\ - .align 2, 0\n\ -_0806B150:\n\ - .4byte _0806B198\n\ - .4byte _0806B240\n\ - .4byte _0806B246\n\ - .4byte _0806B27C\n\ - .4byte _0806B282\n\ - .4byte _0806B2AC\n\ - .4byte _0806B2B2\n\ - .4byte _0806B2D0\n\ - .4byte _0806B2EC\n\ - .4byte _0806B318\n\ - .4byte _0806B344\n\ - .4byte _0806B37C\n\ - .4byte _0806B382\n\ - .4byte _0806B3C0\n\ - .4byte _0806B3CC\n\ - .4byte _0806B3E4\n\ - .4byte _0806B40C\n\ - .4byte _0806B440\n\ -_0806B198:\n\ - movs r0, 0\n\ - bl SetVBlankCallback\n\ - movs r3, 0xC0\n\ - lsls r3, 19\n\ - movs r4, 0xC0\n\ - lsls r4, 9\n\ - add r2, sp, 0x8\n\ - mov r8, r2\n\ - add r2, sp, 0x4\n\ - movs r6, 0\n\ - ldr r1, _0806B22C @ =0x040000d4\n\ - movs r5, 0x80\n\ - lsls r5, 5\n\ - ldr r7, _0806B230 @ =0x81000800\n\ - movs r0, 0x81\n\ - lsls r0, 24\n\ - mov r12, r0\n\ -_0806B1BC:\n\ - strh r6, [r2]\n\ - add r0, sp, 0x4\n\ - str r0, [r1]\n\ - str r3, [r1, 0x4]\n\ - str r7, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - adds r3, r5\n\ - subs r4, r5\n\ - cmp r4, r5\n\ - bhi _0806B1BC\n\ - strh r6, [r2]\n\ - add r2, sp, 0x4\n\ - str r2, [r1]\n\ - str r3, [r1, 0x4]\n\ - lsrs r0, r4, 1\n\ - mov r3, r12\n\ - orrs r0, r3\n\ - str r0, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - movs r0, 0xE0\n\ - lsls r0, 19\n\ - movs r3, 0x80\n\ - lsls r3, 3\n\ - movs r4, 0\n\ - str r4, [sp, 0x8]\n\ - ldr r2, _0806B22C @ =0x040000d4\n\ - mov r1, r8\n\ - str r1, [r2]\n\ - str r0, [r2, 0x4]\n\ - lsrs r0, r3, 2\n\ - movs r1, 0x85\n\ - lsls r1, 24\n\ - orrs r0, r1\n\ - str r0, [r2, 0x8]\n\ - ldr r0, [r2, 0x8]\n\ - movs r1, 0xA0\n\ - lsls r1, 19\n\ - add r0, sp, 0x4\n\ - strh r4, [r0]\n\ - str r0, [r2]\n\ - str r1, [r2, 0x4]\n\ - lsrs r3, 1\n\ - movs r0, 0x81\n\ - lsls r0, 24\n\ - orrs r3, r0\n\ - str r3, [r2, 0x8]\n\ - ldr r0, [r2, 0x8]\n\ - ldr r2, _0806B234 @ =gPaletteFade\n\ - ldrb r0, [r2, 0x8]\n\ - movs r1, 0x80\n\ - orrs r0, r1\n\ - strb r0, [r2, 0x8]\n\ - ldr r1, _0806B238 @ =gMain\n\ - ldr r2, _0806B23C @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B22C: .4byte 0x040000d4\n\ -_0806B230: .4byte 0x81000800\n\ -_0806B234: .4byte gPaletteFade\n\ -_0806B238: .4byte gMain\n\ -_0806B23C: .4byte 0x0000043c\n\ -_0806B240:\n\ - bl remove_some_task\n\ - b _0806B426\n\ -_0806B246:\n\ - bl sub_806B4A8\n\ - ldr r1, _0806B26C @ =0x0201b000\n\ - movs r2, 0x99\n\ - lsls r2, 2\n\ - adds r0, r1, r2\n\ - movs r2, 0\n\ - strh r2, [r0]\n\ - ldr r3, _0806B270 @ =0x00000266\n\ - adds r0, r1, r3\n\ - strh r2, [r0]\n\ - movs r0, 0x9A\n\ - lsls r0, 2\n\ - adds r1, r0\n\ - strh r2, [r1]\n\ - ldr r1, _0806B274 @ =gMain\n\ - ldr r2, _0806B278 @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B26C: .4byte 0x0201b000\n\ -_0806B270: .4byte 0x00000266\n\ -_0806B274: .4byte gMain\n\ -_0806B278: .4byte 0x0000043c\n\ -_0806B27C:\n\ - bl ResetSpriteData\n\ - b _0806B426\n\ -_0806B282:\n\ - ldr r0, _0806B2A0 @ =0x0201b000\n\ - movs r1, 0x96\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - beq _0806B298\n\ - cmp r0, 0x5\n\ - beq _0806B298\n\ - bl ResetTasks\n\ -_0806B298:\n\ - ldr r1, _0806B2A4 @ =gMain\n\ - ldr r2, _0806B2A8 @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B2A0: .4byte 0x0201b000\n\ -_0806B2A4: .4byte gMain\n\ -_0806B2A8: .4byte 0x0000043c\n\ -_0806B2AC:\n\ - bl FreeAllSpritePalettes\n\ - b _0806B426\n\ -_0806B2B2:\n\ - ldr r4, _0806B2CC @ =0x0201b000\n\ - movs r1, 0x97\n\ - lsls r1, 2\n\ - adds r0, r4, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0\n\ - bl CreateTask\n\ - movs r2, 0x98\n\ - lsls r2, 2\n\ - adds r1, r4, r2\n\ - strb r0, [r1]\n\ - b _0806B426\n\ - .align 2, 0\n\ -_0806B2CC: .4byte 0x0201b000\n\ -_0806B2D0:\n\ - ldr r0, _0806B2E0 @ =gWindowConfig_81E6C90\n\ - bl SetUpWindowConfig\n\ - ldr r1, _0806B2E4 @ =gMain\n\ - ldr r0, _0806B2E8 @ =0x0000043c\n\ - adds r1, r0\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B2E0: .4byte gWindowConfig_81E6C90\n\ -_0806B2E4: .4byte gMain\n\ -_0806B2E8: .4byte 0x0000043c\n\ -_0806B2EC:\n\ - ldr r4, _0806B308 @ =gUnknown_03004210\n\ - ldr r1, _0806B30C @ =gWindowConfig_81E6C90\n\ - adds r0, r4, 0\n\ - bl InitWindowFromConfig\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - bl MultistepInitWindowTileData\n\ - ldr r1, _0806B310 @ =gMain\n\ - ldr r2, _0806B314 @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B308: .4byte gUnknown_03004210\n\ -_0806B30C: .4byte gWindowConfig_81E6C90\n\ -_0806B310: .4byte gMain\n\ -_0806B314: .4byte 0x0000043c\n\ -_0806B318:\n\ - bl MultistepLoadFont\n\ - cmp r0, 0\n\ - bne _0806B322\n\ - b _0806B450\n\ -_0806B322:\n\ - ldr r0, _0806B338 @ =0x0201b000\n\ - movs r3, 0x99\n\ - lsls r3, 2\n\ - adds r0, r3\n\ - movs r1, 0x1\n\ - strh r1, [r0]\n\ - ldr r1, _0806B33C @ =gMain\n\ - ldr r0, _0806B340 @ =0x0000043c\n\ - adds r1, r0\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B338: .4byte 0x0201b000\n\ -_0806B33C: .4byte gMain\n\ -_0806B340: .4byte 0x0000043c\n\ -_0806B344:\n\ - ldr r0, _0806B368 @ =0x0201b000\n\ - movs r1, 0x99\n\ - lsls r1, 2\n\ - adds r4, r0, r1\n\ - ldrb r0, [r4]\n\ - bl LoadPartyMenuGraphics\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B374\n\ - movs r0, 0\n\ - strh r0, [r4]\n\ - ldr r1, _0806B36C @ =gMain\n\ - ldr r2, _0806B370 @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B368: .4byte 0x0201b000\n\ -_0806B36C: .4byte gMain\n\ -_0806B370: .4byte 0x0000043c\n\ -_0806B374:\n\ - ldrh r0, [r4]\n\ - adds r0, 0x1\n\ - strh r0, [r4]\n\ - b _0806B450\n\ -_0806B37C:\n\ - bl sub_809D51C\n\ - b _0806B426\n\ -_0806B382:\n\ - ldr r2, _0806B3B0 @ =gUnknown_08376C74\n\ - ldr r0, _0806B3B4 @ =0x0201b000\n\ - movs r1, 0x96\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, 0x4\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - bl _call_via_r0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B450\n\ - ldr r1, _0806B3B8 @ =gMain\n\ - ldr r2, _0806B3BC @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B3B0: .4byte gUnknown_08376C74\n\ -_0806B3B4: .4byte 0x0201b000\n\ -_0806B3B8: .4byte gMain\n\ -_0806B3BC: .4byte 0x0000043c\n\ -_0806B3C0:\n\ - ldr r0, _0806B3C8 @ =gWindowConfig_81E6CC8\n\ - bl MultistepInitMenuWindowBegin\n\ - b _0806B426\n\ - .align 2, 0\n\ -_0806B3C8: .4byte gWindowConfig_81E6CC8\n\ -_0806B3CC:\n\ - bl MultistepInitMenuWindowContinue\n\ - cmp r0, 0\n\ - beq _0806B450\n\ - ldr r1, _0806B3DC @ =gMain\n\ - ldr r0, _0806B3E0 @ =0x0000043c\n\ - adds r1, r0\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B3DC: .4byte gMain\n\ -_0806B3E0: .4byte 0x0000043c\n\ -_0806B3E4:\n\ - ldr r0, _0806B3FC @ =0x0201b000\n\ - ldr r1, _0806B400 @ =0x00000259\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - movs r1, 0\n\ - bl sub_806D538\n\ - ldr r1, _0806B404 @ =gMain\n\ - ldr r2, _0806B408 @ =0x0000043c\n\ - adds r1, r2\n\ - b _0806B42C\n\ - .align 2, 0\n\ -_0806B3FC: .4byte 0x0201b000\n\ -_0806B400: .4byte 0x00000259\n\ -_0806B404: .4byte gMain\n\ -_0806B408: .4byte 0x0000043c\n\ -_0806B40C:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - movs r1, 0\n\ - str r1, [sp]\n\ - movs r2, 0x10\n\ - movs r3, 0\n\ - bl BeginNormalPaletteFade\n\ - ldr r2, _0806B434 @ =gPaletteFade\n\ - ldrb r1, [r2, 0x8]\n\ - movs r0, 0x7F\n\ - ands r0, r1\n\ - strb r0, [r2, 0x8]\n\ -_0806B426:\n\ - ldr r1, _0806B438 @ =gMain\n\ - ldr r3, _0806B43C @ =0x0000043c\n\ - adds r1, r3\n\ -_0806B42C:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _0806B450\n\ - .align 2, 0\n\ -_0806B434: .4byte gPaletteFade\n\ -_0806B438: .4byte gMain\n\ -_0806B43C: .4byte 0x0000043c\n\ -_0806B440:\n\ - ldr r0, _0806B44C @ =sub_806AF34\n\ - bl SetVBlankCallback\n\ - movs r0, 0x1\n\ - b _0806B452\n\ - .align 2, 0\n\ -_0806B44C: .4byte sub_806AF34\n\ -_0806B450:\n\ - movs r0, 0\n\ -_0806B452:\n\ - add sp, 0xC\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + u8 *addr; + u32 size; + + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + addr = (u8 *)VRAM; + size = VRAM_SIZE; + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } + + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); + + gPaletteFade.bufferTransferDisabled = 1; + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + sub_806B4A8(); + ewram1B000_alt.unk264 = 0; + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk268 = 0; + gMain.state++; + break; + case 3: + ResetSpriteData(); + gMain.state++; + break; + case 4: + if (ewram1B000.unk258 != 1 && ewram1B000.unk258 != 5) + { + ResetTasks(); + } + + gMain.state++; + break; + case 5: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 6: + ewram1B000.unk260 = CreateTask(ewram1B000.taskFunc, 0); + gMain.state++; + break; + case 7: + SetUpWindowConfig(&gWindowConfig_81E6C90); + gMain.state++; + break; + case 8: + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C90); + MultistepInitWindowTileData(&gUnknown_03004210, 1); + gMain.state++; + break; + case 9: + if (MultistepLoadFont()) + { + ewram1B000_alt.unk264 = 1; + gMain.state++; + } + break; + case 10: + if (LoadPartyMenuGraphics(ewram1B000_alt.unk264) == TRUE) + { + ewram1B000_alt.unk264 = 0; + gMain.state++; + } + else + { + ewram1B000_alt.unk264++; + } + break; + case 11: + sub_809D51C(); + gMain.state++; + break; + case 12: + if (gUnknown_08376C74[ewram1B000.unk258].func2() == TRUE) + { + gMain.state++; + } + break; + case 13: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6CC8); + gMain.state++; + break; + case 14: + if (MultistepInitMenuWindowContinue()) + { + gMain.state++; + } + break; + case 15: + sub_806D538(ewram1B000.unk259, 0); + gMain.state++; + break; + case 16: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + gMain.state++; + break; + case 17: + SetVBlankCallback(sub_806AF34); + return TRUE; + } + + return FALSE; } void sub_806B460(void) { - while (sub_806B124() != TRUE) + while (InitPartyMenu() != TRUE) { if (sub_80F9344() == TRUE) { @@ -3446,10 +3198,10 @@ void sub_806D668(u8 monIndex) CpuFastSet(&var1, (void *)(OBJ_VRAM1 + 0x300 + monIndex * 0x400), 0x1000040); } -u8 LoadPartyMenuGraphics(u8 a) +bool8 LoadPartyMenuGraphics(u8 a) { u16 palette = 0x7FFF; - u8 retVal = 0; + bool8 retVal = FALSE; if (a < 2) { @@ -3490,7 +3242,7 @@ u8 LoadPartyMenuGraphics(u8 a) if (a == 8 || a == 0) { LoadCompressedPalette(gStatusPal_Icons, 0xB0, 0x20); - retVal = 1; + retVal = TRUE; } return retVal; diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index dc5d018d4..5baf180a1 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -324,7 +324,7 @@ static void sub_8089EBC(void) { do { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -475,7 +475,7 @@ static void sub_808A358(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -491,7 +491,7 @@ static void sub_808A3A4(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -539,7 +539,7 @@ static void sub_808A4D4(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -848,7 +848,7 @@ static void sub_808AD0C(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -951,7 +951,7 @@ static void sub_808AF80(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { if (gUnknown_02038561 == 0) { @@ -1103,7 +1103,7 @@ static void sub_808B3A0(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); @@ -1163,7 +1163,7 @@ static void sub_808B518(void) { while (1) { - if (sub_806B124() == TRUE) + if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); sub_806BF74(EWRAM_1B000.unk260, 0); diff --git a/src/sprite.c b/src/sprite.c index fb8c2b648..5700bc86b 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -916,9 +916,9 @@ void DestroySpriteAndFreeResources(struct Sprite *sprite) DestroySprite(sprite); } -void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5) +void sub_800142C(u32 a1, u32 a2, const u16 *a3, u16 a4, u32 a5) { - u16 *d = a3; + const u16 *d = a3; struct OamData *oam = &gMain.oamBuffer[gMain.objCount]; while (!(gMain.objCount & 0x80) && (s16)(d[0] + 1) != 0) { -- cgit v1.2.3 From 7cd0852caa22ec3b2ea7d67768b5afc2744f7aad Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 8 Oct 2017 13:26:55 -0700 Subject: Match sub_806B548 --- src/party_menu.c | 50 +++++--------------------------------------------- 1 file changed, 5 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index db1fde55a..2288da452 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -303,6 +303,8 @@ static const u8 gUnknown_083769A8[] = { }; // This is actually a 2x6x2 array, but the code reads it as a flat array. +//FIXME: sub_806B908() accesses this data via gUnknown_083769A8 (directly above this). This means these +// two arrays might be a struct, rather than separate arrays. static const u8 gUnknown_083769C0[] = { 0, 1, 0, 8, 11, 2, 11, 5, 11, 9, 11, 12, 0, 1, 0, 8, 11, 2, 11, 5, 11, 9, 11, 12, // Double battle @@ -862,17 +864,13 @@ bool8 IsLinkDoubleBattle() return FALSE; } -#ifdef NONMATCHING void sub_806B548(void) { if (ewram1B000.unk261) { - u32 src = (u32)&gBGTilemapBuffers[2]; - u32 dest = BG_VRAM + 0x3000; - - REG_DMA3SAD = src; - REG_DMA3DAD = dest; - REG_DMA3CNT = ((DMA_ENABLE) << 16) | 0x400; + const void *src = gBGTilemapBuffers[2]; + void *dest = (void *)(BG_VRAM + 0x3000); + DmaCopy16(3, src, dest, 0x800); if (ewram1B000.unk261 == 2) { @@ -880,44 +878,6 @@ void sub_806B548(void) } } } -#else -__attribute__((naked)) -void sub_806B548(void) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - ldr r0, _0806B574 @ =0x0201b000\n\ - ldr r1, _0806B578 @ =0x00000261\n\ - adds r4, r0, r1\n\ - ldrb r3, [r4]\n\ - cmp r3, 0\n\ - beq _0806B56E\n\ - ldr r1, _0806B57C @ =gBGTilemapBuffers + 0x1000\n\ - ldr r2, _0806B580 @ =0x06003000\n\ - ldr r0, _0806B584 @ =0x040000d4\n\ - str r1, [r0]\n\ - str r2, [r0, 0x4]\n\ - ldr r1, _0806B588 @ =0x80000400\n\ - str r1, [r0, 0x8]\n\ - ldr r0, [r0, 0x8]\n\ - cmp r3, 0x2\n\ - bne _0806B56E\n\ - movs r0, 0\n\ - strb r0, [r4]\n\ -_0806B56E:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806B574: .4byte 0x0201b000\n\ -_0806B578: .4byte 0x00000261\n\ -_0806B57C: .4byte gBGTilemapBuffers + 0x1000\n\ -_0806B580: .4byte 0x06003000\n\ -_0806B584: .4byte 0x040000d4\n\ -_0806B588: .4byte 0x80000400\n\ - .syntax divided\n"); -} -#endif // NONMATCHING __attribute__((naked)) u8 sub_806B58C(u8 a) -- cgit v1.2.3 From 254d1f08f38c76f1b5444676dcd68404b1d06c77 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 8 Oct 2017 16:56:57 -0700 Subject: Decompile sub_806B58C --- src/party_menu.c | 584 ++++++++++++++----------------------------------------- 1 file changed, 146 insertions(+), 438 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index 2288da452..eb1f06f59 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -96,6 +96,9 @@ static bool8 sub_806AFD0(void); static void sub_806B4A8(void); static void sub_806AF34(void); static bool8 LoadPartyMenuGraphics(u8 a); +static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); +static void sub_806BB9C(u8 a); +static void sub_806BBEC(u8 a); const u16 TMHMMoves[] = { MOVE_FOCUS_PUNCH, @@ -879,445 +882,150 @@ void sub_806B548(void) } } -__attribute__((naked)) -u8 sub_806B58C(u8 a) +bool8 sub_806B58C(u8 a) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r2, 0\n\ - bne _0806B5A8\n\ - ldr r0, _0806B5A4 @ =gUnknown_0202E8FA\n\ - strb r2, [r0]\n\ - b _0806B5C8\n\ - .align 2, 0\n\ -_0806B5A4: .4byte gUnknown_0202E8FA\n\ -_0806B5A8:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B5C0\n\ - ldr r1, _0806B5BC @ =gUnknown_0202E8FA\n\ - movs r0, 0x2\n\ - b _0806B5C4\n\ - .align 2, 0\n\ -_0806B5BC: .4byte gUnknown_0202E8FA\n\ -_0806B5C0:\n\ - ldr r1, _0806B5E4 @ =gUnknown_0202E8FA\n\ - movs r0, 0x1\n\ -_0806B5C4:\n\ - strb r0, [r1]\n\ - adds r0, r1, 0\n\ -_0806B5C8:\n\ - ldrb r0, [r0]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - ldr r0, _0806B5E8 @ =gUnknown_083769A8\n\ - adds r4, r1, r0\n\ - cmp r5, 0x8\n\ - bls _0806B5DA\n\ - b _0806B900\n\ -_0806B5DA:\n\ - lsls r0, r5, 2\n\ - ldr r1, _0806B5EC @ =_0806B5F0\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0806B5E4: .4byte gUnknown_0202E8FA\n\ -_0806B5E8: .4byte gUnknown_083769A8\n\ -_0806B5EC: .4byte _0806B5F0\n\ - .align 2, 0\n\ -_0806B5F0:\n\ - .4byte _0806B614\n\ - .4byte _0806B628\n\ - .4byte _0806B638\n\ - .4byte _0806B694\n\ - .4byte _0806B71A\n\ - .4byte _0806B7A2\n\ - .4byte _0806B832\n\ - .4byte _0806B8C6\n\ - .4byte _0806B8E8\n\ -_0806B614:\n\ - ldr r0, _0806B624 @ =gBGTilemapBuffers + 0x1000\n\ - movs r2, 0x80\n\ - lsls r2, 4\n\ - movs r1, 0\n\ - bl memset\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B624: .4byte gBGTilemapBuffers + 0x1000\n\ -_0806B628:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r4, 0x1]\n\ - movs r2, 0x3\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - b _0806B8A8\n\ -_0806B638:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B666\n\ - ldr r0, _0806B65C @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bls _0806B660\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B65C: .4byte gPlayerPartyCount\n\ -_0806B660:\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - b _0806B8BC\n\ -_0806B666:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B684\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0x4\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ -_0806B684:\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0x3\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - b _0806B8A8\n\ -_0806B694:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B6C2\n\ - ldr r0, _0806B6B8 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bls _0806B6BC\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B6B8: .4byte gPlayerPartyCount\n\ -_0806B6BC:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B6C2:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B6F6\n\ - ldr r0, _0806B6EC @ =gPlayerParty + 2 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B6F0\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B6EC: .4byte gPlayerParty + 2 * 0x64\n\ -_0806B6F0:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B6F6:\n\ - ldr r0, _0806B710 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bls _0806B714\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B710: .4byte gPlayerPartyCount\n\ -_0806B714:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B71A:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B74A\n\ - ldr r0, _0806B740 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - bls _0806B744\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B740: .4byte gPlayerPartyCount\n\ -_0806B744:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B74A:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B77E\n\ - ldr r0, _0806B774 @ =gPlayerParty + 3 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B778\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B774: .4byte gPlayerParty + 3 * 0x64\n\ -_0806B778:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B77E:\n\ - ldr r0, _0806B798 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - bls _0806B79C\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B798: .4byte gPlayerPartyCount\n\ -_0806B79C:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B7A2:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B7D2\n\ - ldr r0, _0806B7C8 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _0806B7CC\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B7C8: .4byte gPlayerPartyCount\n\ -_0806B7CC:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B8BC\n\ -_0806B7D2:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B80A\n\ - ldr r0, _0806B800 @ =gPlayerParty + 4 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B804\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ - .align 2, 0\n\ -_0806B800: .4byte gPlayerParty + 4 * 0x64\n\ -_0806B804:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B884\n\ -_0806B80A:\n\ - ldr r0, _0806B828 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _0806B82C\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B828: .4byte gPlayerPartyCount\n\ -_0806B82C:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B8BC\n\ -_0806B832:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B84C\n\ - ldr r0, _0806B848 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bhi _0806B896\n\ - b _0806B8B8\n\ - .align 2, 0\n\ -_0806B848: .4byte gPlayerPartyCount\n\ -_0806B84C:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B88E\n\ - ldr r0, _0806B87C @ =gPlayerParty + 5 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B880\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0xA\n\ - movs r1, 0x5\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ - .align 2, 0\n\ -_0806B87C: .4byte gPlayerParty + 5 * 0x64\n\ -_0806B880:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ -_0806B884:\n\ - movs r2, 0x1\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - b _0806B900\n\ -_0806B88E:\n\ - ldr r0, _0806B8B4 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bls _0806B8B8\n\ -_0806B896:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0xA\n\ - movs r1, 0x5\n\ -_0806B8A8:\n\ - movs r2, 0x3\n\ -_0806B8AA:\n\ - movs r3, 0\n\ - bl sub_806BF24\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B8B4: .4byte gPlayerPartyCount\n\ -_0806B8B8:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ -_0806B8BC:\n\ - movs r2, 0x1\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - b _0806B900\n\ -_0806B8C6:\n\ - ldr r0, _0806B8E4 @ =0x0201b000\n\ - movs r1, 0x96\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0806B8DA\n\ - movs r0, 0x1\n\ - bl sub_806BB9C\n\ -_0806B8DA:\n\ - movs r0, 0x1\n\ - bl sub_806BBEC\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B8E4: .4byte 0x0201b000\n\ -_0806B8E8:\n\ - ldr r0, _0806B8F8 @ =0x0201b000\n\ - ldr r1, _0806B8FC @ =0x00000261\n\ - adds r0, r1\n\ - movs r1, 0x2\n\ - strb r1, [r0]\n\ - movs r0, 0x1\n\ - b _0806B902\n\ - .align 2, 0\n\ -_0806B8F8: .4byte 0x0201b000\n\ -_0806B8FC: .4byte 0x00000261\n\ -_0806B900:\n\ - movs r0, 0\n\ -_0806B902:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + const u8 *arr; + + if (!IsDoubleBattle()) + gUnknown_0202E8FA = 0; + else if (IsLinkDoubleBattle() == TRUE) + gUnknown_0202E8FA = 2; + else + gUnknown_0202E8FA = 1; + + arr = &gUnknown_083769A8[gUnknown_0202E8FA * 12]; + + switch (a) + { + case 0: + memset(&gBGTilemapBuffers[2], 0, 0x800); + break; + case 1: + sub_806B9A4(arr[0], arr[1], 3); + sub_806BF24(&arr[0], 0, 3, 0); + break; + case 2: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 1) { + sub_806BA94(arr[2], arr[3], 0, 3); + sub_806BF24(&arr[2], 1, 3, 0); + } else { + sub_806BA94(arr[2], arr[3], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + sub_806B9A4(arr[2], arr[3], 4); + sub_806BF24(&arr[2], 1, 4, 0); + } else { + sub_806B9A4(arr[2], arr[3], 3); + sub_806BF24(&arr[2], 1, 3, 0); + } + + break; + case 3: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 2) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + } else if (gPlayerPartyCount > 2) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + + break; + case 4: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 3) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + } else if (gPlayerPartyCount > 3) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + + break; + case 5: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 4) { + sub_806BA94(arr[8], arr[9], 0, 3); + sub_806BF24(&arr[8], 4, 3, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { + sub_806BA94(arr[8], arr[9], 0, 4); + sub_806BF24(&arr[8], 4, 4, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 4); + } + } else if (gPlayerPartyCount > 4) { + sub_806BA94(arr[8], arr[9], 0, 3); + sub_806BF24(&arr[8], 4, 3, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 3); + } + + break; + case 6: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 5) { + sub_806BA94(arr[10], arr[11], 0, 3); + sub_806BF24(&arr[10], 5, 3, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { + sub_806BA94(arr[10], arr[11], 0, 4); + sub_806BF24(&arr[10], 5, 4, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 4); + } + } else if (gPlayerPartyCount > 5) { + sub_806BA94(arr[10], arr[11], 0, 3); + sub_806BF24(&arr[10], 5, 3, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 3); + } + + break; + case 7: + if (ewram1B000.unk258 == 4) { + sub_806BB9C(1); + } + + sub_806BBEC(1); + break; + case 8: + ewram1B000.unk261 = 2; + return TRUE; + } + + return FALSE; } #ifdef NONMATCHING -- cgit v1.2.3 From a871ce87a74421df64a9ad381d37dc32ff9bdc6d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 9 Oct 2017 09:56:57 -0700 Subject: Match PartyMenuTryGiveMonMail --- src/choose_party.c | 1 - src/party_menu.c | 363 ++++++++++++++++++++++------------------------------- 2 files changed, 147 insertions(+), 217 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index 475f96695..2384f3c71 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -50,7 +50,6 @@ extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); -extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); diff --git a/src/party_menu.c b/src/party_menu.c index eb1f06f59..1ca739ac1 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -469,10 +469,11 @@ struct Unk201C000 /*0x14*/ TaskFunc unk14; }; -struct Unk201F000 +struct Unk201FE00 { - u8 filler0[0xE00]; - u8 unkE00[3]; // not sure if this is an array or struct, or how big it is + u8 unkE00; // not sure if this is an array or struct, or how big it is + u8 unkE01; + u8 unkE02; }; struct UnknownPokemonStruct2 @@ -490,7 +491,7 @@ struct UnknownPokemonStruct2 }; #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) -#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) +#define ewram1FE00 (*(struct Unk201FE00 *)(ewram + 0x1FE00)) extern u16 gBattleTypeFlags; extern u8 gTileBuffer[]; @@ -1826,10 +1827,11 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) } } -/*void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +#ifdef NONMATCHING +void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) { s8 menuMovement; - s16 var1; + u16 var1; u8 var2; menuMovement = directionPressed + 2; @@ -1841,11 +1843,9 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) case 3: if (menuIndex == 7) { gSprites[spriteId].data0 = 0; - } else if (menuIndex == PARTY_SIZE - 1) { - gSprites[spriteId].data0 = 7; } else { - // Put if statment here - while (menuIndex++ != PARTY_SIZE - 1) { + while (menuIndex != PARTY_SIZE - 1) { + menuIndex++; if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES)) { gSprites[spriteId].data0 = menuIndex; @@ -1860,8 +1860,9 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; case 1: - while (menuIndex-- != 0) { - if (GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) + while (menuIndex != 0) { + menuIndex--; + if (menuIndex != PARTY_SIZE && GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) { gSprites[spriteId].data0 = menuIndex; gSprites[spriteId].data1 = 0; @@ -1887,7 +1888,7 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) } else if (menuIndex == 1) { var1 = gSprites[spriteId].data1 - 4; if (var1 <= 1) { - gSprites[spriteId].data0 = var1; + gSprites[spriteId].data0 = gSprites[spriteId].data1; } else { if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { gSprites[spriteId].data0 = 4; @@ -1901,17 +1902,20 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) var2 = menuIndex - 2; if (var2 <= 1) { gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; } else { var2 = menuIndex - 4; if (var2 <= 1) { gSprites[spriteId].data0 = 1; + gSprites[spriteId].data1 = menuIndex; } } - gSprites[spriteId].data1 = menuIndex; break; } -}*/ +} + +#else __attribute__((naked)) void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) { @@ -2153,7 +2157,7 @@ _0806C64E:\n\ _0806C654: .4byte gSprites\n\ .syntax divided\n"); } - +#endif // NONMATCHING // directionPressed = -2 for left, 2 for right, 1 for down, -1 for up void sub_806C658(u8 taskId, s8 directionPressed) @@ -3144,7 +3148,7 @@ void CreateHeldItemIcons_806DC34(u8 taskId) } #ifdef NONMATCHING -void CreateHeldItemIcon_806DCD4(int taskId, u8 monIndex, int item) +void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) { u8 monIconSpriteId; u8 heldItemSpriteId; @@ -3179,7 +3183,7 @@ void CreateHeldItemIcon_806DCD4(int taskId, u8 monIndex, int item) } #else __attribute__((naked)) -void CreateHeldItemIcon_806DCD4(u8 a, u8 monIndex) +void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -3985,19 +3989,19 @@ void DisplayGiveHeldItemMessage(u8 a, u16 b, u8 c) sub_806E834(gStringVar4, c); } - -// Not sure about this one for now. -/* void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) { + u32 var1; u16 currentItem; - struct MailStruct *r4; + struct MailStruct *mail; gTasks[taskId].func = TaskDummy; sub_806E8D0(taskId, 0, func); currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); gUnknown_0202E8F4 = 0; - r4 = &gSaveBlock1.mail[ewram1F000.unkE00[0] + ewram1F000.unkE00[2]]; + var1 = ewram1FE00.unkE00 + 6; + mail = &gSaveBlock1.mail[var1 + ewram1FE00.unkE02]; + if (currentItem != 0) { sub_806E834(gOtherText_PokeHoldingItemCantMail, 1); @@ -4005,88 +4009,12 @@ void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) } else { - GiveMailToMon2(ewram1C000.pokemon, r4); - ClearMailStruct(r4); + GiveMailToMon2(ewram1C000.pokemon, mail); + ClearMailStruct(mail); sub_806E834(gOtherText_MailTransferredMailbox, 1); CreateTask(party_menu_link_mon_held_item_object, 5); } } -*/ -__attribute__((naked)) -void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r2, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r3, _0806ECA0 @ =gTasks\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r3\n\ - ldr r3, _0806ECA4 @ =TaskDummy\n\ - str r3, [r1]\n\ - movs r1, 0\n\ - bl sub_806E8D0\n\ - ldr r5, _0806ECA8 @ =0x0201c000\n\ - ldr r0, [r5]\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - ldr r2, _0806ECAC @ =gUnknown_0202E8F4\n\ - movs r1, 0\n\ - strb r1, [r2]\n\ - movs r1, 0xF8\n\ - lsls r1, 6\n\ - adds r2, r5, r1\n\ - ldrb r1, [r2]\n\ - adds r1, 0x6\n\ - ldrb r2, [r2, 0x2]\n\ - adds r1, r2\n\ - lsls r2, r1, 3\n\ - adds r2, r1\n\ - lsls r2, 2\n\ - ldr r1, _0806ECB0 @ =gSaveBlock1 + 0x2B4C\n\ - adds r4, r2, r1\n\ - cmp r0, 0\n\ - beq _0806ECBC\n\ - ldr r0, _0806ECB4 @ =gOtherText_PokeHoldingItemCantMail\n\ - movs r1, 0x1\n\ - bl sub_806E834\n\ - ldr r0, _0806ECB8 @ =party_menu_link_mon_held_item_object\n\ - movs r1, 0x5\n\ - bl CreateTask\n\ - b _0806ECDA\n\ - .align 2, 0\n\ -_0806ECA0: .4byte gTasks\n\ -_0806ECA4: .4byte TaskDummy\n\ -_0806ECA8: .4byte 0x0201c000\n\ -_0806ECAC: .4byte gUnknown_0202E8F4\n\ -_0806ECB0: .4byte gSaveBlock1 + 0x2B4C\n\ -_0806ECB4: .4byte gOtherText_PokeHoldingItemCantMail\n\ -_0806ECB8: .4byte party_menu_link_mon_held_item_object\n\ -_0806ECBC:\n\ - ldr r0, [r5]\n\ - adds r1, r4, 0\n\ - bl GiveMailToMon2\n\ - adds r0, r4, 0\n\ - bl ClearMailStruct\n\ - ldr r0, _0806ECE0 @ =gOtherText_MailTransferredMailbox\n\ - movs r1, 0x1\n\ - bl sub_806E834\n\ - ldr r0, _0806ECE4 @ =party_menu_link_mon_held_item_object\n\ - movs r1, 0x5\n\ - bl CreateTask\n\ -_0806ECDA:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806ECE0: .4byte gOtherText_MailTransferredMailbox\n\ -_0806ECE4: .4byte party_menu_link_mon_held_item_object\n\ - .syntax divided\n"); -} void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func) { @@ -5398,121 +5326,123 @@ void DoEvolutionStoneItemEffect(u8 taskId, u16 evolutionStoneItem, TaskFunc c) } } -// u8 GetItemEffectType(u16 item) -// { -// const u8 *itemEffect; -// register u8 itemEffect0 asm("r1"); -// u8 mask; - -// // Read the item's effect properties. -// if (item == ITEM_ENIGMA_BERRY) -// { -// itemEffect = gSaveBlock1.enigmaBerry.itemEffect; -// } -// else -// { -// itemEffect = gItemEffectTable[item - ITEM_POTION]; -// } - -// itemEffect0 = itemEffect[0]; -// mask = 0x3F; - -// if ((itemEffect0 & mask) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & 0x80)) -// { -// return 0; -// } -// else if (itemEffect0 & 0x40) -// { -// return 10; -// } -// else if (itemEffect[3] & 0x40) -// { -// return 1; -// } -// else if ((itemEffect[3] & mask) || (itemEffect0 >> 7)) -// { -// if ((itemEffect[3] & mask) == 0x20) -// { -// return 4; -// } -// else if ((itemEffect[3] & mask) == 0x10) -// { -// return 3; -// } -// else if ((itemEffect[3] & mask) == 0x8) -// { -// return 5; -// } -// else if ((itemEffect[3] & mask) == 0x4) -// { -// return 6; -// } -// else if ((itemEffect[3] & mask) == 0x2) -// { -// return 7; -// } -// else if ((itemEffect[3] & mask) == 0x1) -// { -// return 8; -// } -// else if ((itemEffect0 >> 7) != 0 && (itemEffect[3] & mask) == 0) -// { -// return 9; -// } -// else -// { -// return 11; -// } -// } -// else if (itemEffect[4] & 0x44) -// { -// return 2; -// } -// else if (itemEffect[4] & 0x2) -// { -// return 12; -// } -// else if (itemEffect[4] & 0x1) -// { -// return 13; -// } -// else if (itemEffect[5] & 0x8) -// { -// return 14; -// } -// else if (itemEffect[5] & 0x4) -// { -// return 15; -// } -// else if (itemEffect[5] & 0x2) -// { -// return 16; -// } -// else if (itemEffect[5] & 0x1) -// { -// return 17; -// } -// else if (itemEffect[4] & 0x80) -// { -// return 18; -// } -// else if (itemEffect[4] & 0x20) -// { -// return 19; -// } -// else if (itemEffect[5] & 0x10) -// { -// return 20; -// } -// else if (itemEffect[4] & 0x18) -// { -// return 21; -// } -// else -// { -// return 22; -// } -// } +#ifdef NONMATCHING +u8 GetItemEffectType(u16 item) +{ + const u8 *itemEffect; + register u8 itemEffect0 asm("r1"); + u8 mask; + + // Read the item's effect properties. + if (item == ITEM_ENIGMA_BERRY) + { + itemEffect = gSaveBlock1.enigmaBerry.itemEffect; + } + else + { + itemEffect = gItemEffectTable[item - ITEM_POTION]; + } + + itemEffect0 = itemEffect[0]; + mask = 0x3F; + + if ((itemEffect0 & mask) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & 0x80)) + { + return 0; + } + else if (itemEffect0 & 0x40) + { + return 10; + } + else if (itemEffect[3] & 0x40) + { + return 1; + } + else if ((itemEffect[3] & mask) || (itemEffect0 >> 7)) + { + if ((itemEffect[3] & mask) == 0x20) + { + return 4; + } + else if ((itemEffect[3] & mask) == 0x10) + { + return 3; + } + else if ((itemEffect[3] & mask) == 0x8) + { + return 5; + } + else if ((itemEffect[3] & mask) == 0x4) + { + return 6; + } + else if ((itemEffect[3] & mask) == 0x2) + { + return 7; + } + else if ((itemEffect[3] & mask) == 0x1) + { + return 8; + } + else if ((itemEffect0 >> 7) != 0 && (itemEffect[3] & mask) == 0) + { + return 9; + } + else + { + return 11; + } + } + else if (itemEffect[4] & 0x44) + { + return 2; + } + else if (itemEffect[4] & 0x2) + { + return 12; + } + else if (itemEffect[4] & 0x1) + { + return 13; + } + else if (itemEffect[5] & 0x8) + { + return 14; + } + else if (itemEffect[5] & 0x4) + { + return 15; + } + else if (itemEffect[5] & 0x2) + { + return 16; + } + else if (itemEffect[5] & 0x1) + { + return 17; + } + else if (itemEffect[4] & 0x80) + { + return 18; + } + else if (itemEffect[4] & 0x20) + { + return 19; + } + else if (itemEffect[5] & 0x10) + { + return 20; + } + else if (itemEffect[4] & 0x18) + { + return 21; + } + else + { + return 22; + } +} +#else __attribute__((naked)) u8 GetItemEffectType(u16 item) { @@ -5709,6 +5639,7 @@ _08070F8A:\n\ bx r1\n\ .syntax divided\n"); } +#endif // NONMATCHING void unref_sub_8070F90(void) { -- cgit v1.2.3 From 4079d8ac4ff9df6de997e3c68540e8302474b9fa Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 9 Oct 2017 12:41:15 -0700 Subject: Fix German build for party_menu --- src/field/party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 1ca739ac1..d3e585fe2 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -5197,7 +5197,7 @@ void Task_RareCandy3(u8 taskId) u16 learnedMove; u16 evolutionSpecies; - MenuZeroFillWindowRect(WINDOW_LEFT + 8, 0, WINDOW_RIGHT + 3, 7); + MenuZeroFillWindowRect(11, 0, 29, 7); learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, TRUE); ewram1B000.unk282 = 1; -- cgit v1.2.3 From 1c16828c55265e9b68b55778c3ff320b3e975965 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 9 Oct 2017 18:43:44 -0700 Subject: Document party menu handlers, text oam, and menu types --- src/battle/battle_2.c | 2 +- src/battle/battle_party_menu.c | 14 ++- src/engine/sprite.c | 5 +- src/field/choose_party.c | 26 +++-- src/field/daycare.c | 2 +- src/field/party_menu.c | 209 ++++++++++++++++++++------------------ src/pokemon/pokemon_menu.c | 34 +++---- src/script_pokemon_util_80F99CC.c | 22 ++-- 8 files changed, 162 insertions(+), 152 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 770aa1209..75358e636 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -612,7 +612,7 @@ void sub_800F104(void) *pSavedCallback = gMain.savedCallback; *pSavedBattleTypeFlags = gBattleTypeFlags; gMain.savedCallback = sub_800F104; - OpenPartyMenu(5, 0); + OpenPartyMenu(PARTY_MENU_TYPE_LINK_MULTI_BATTLE, 0); } break; case 2: diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index dc7c5db5b..cc938a054 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -28,8 +28,6 @@ extern void nullsub_13(void); extern u8 sub_806B58C(u8); extern void sub_802E414(void); extern void sub_80A6DCC(void); -extern void sub_806AF4C(); -extern void sub_806AEDC(void); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); extern void nullsub_14(); @@ -340,7 +338,7 @@ void sub_8094E20(u8 a) gUnknown_02038473 = a; nullsub_14(); pokemon_change_order(); - OpenPartyMenu(1, 0xFF); + OpenPartyMenu(PARTY_MENU_TYPE_BATTLE, 0xFF); } void sub_8094E4C(void) @@ -465,7 +463,7 @@ static void sub_8095050(u8 a, u8 b) ShowPartyPopupMenu(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); } -void SetUpBattlePokemonMenu(u8 a) +void HandleBattlePartyMenu(u8 a) { if (!gPaletteFade.active) { @@ -493,7 +491,7 @@ void SetUpBattlePokemonMenu(u8 a) PlaySE(SE_SELECT); GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); sub_8095050(a, sub_806CA38(a)); - SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); + SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, HandleBattlePartyMenu); } break; case 2: @@ -558,7 +556,7 @@ static void Task_8095330(u8 taskId) static void Task_809535C(void) { gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); + sub_806AF4C(1, 0xFF, HandleBattlePartyMenu, 5); SetMainCallback2(Task_809538C); } @@ -572,8 +570,8 @@ static void Task_809538C(void) 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); + SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, HandleBattlePartyMenu); + SetMainCallback2(CB2_PartyMenuMain); return; } } while (sub_80F9344() != 1); diff --git a/src/engine/sprite.c b/src/engine/sprite.c index 5700bc86b..5d394502a 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -916,7 +916,8 @@ void DestroySpriteAndFreeResources(struct Sprite *sprite) DestroySprite(sprite); } -void sub_800142C(u32 a1, u32 a2, const u16 *a3, u16 a4, u32 a5) +// Loads the mon name, level, and hp sprites into OAM. +void DrawPartyMenuMonText(u32 a1, u32 a2, const u16 *a3, u16 a4, u32 baseTileNumber) { const u16 *d = a3; struct OamData *oam = &gMain.oamBuffer[gMain.objCount]; @@ -925,7 +926,7 @@ void sub_800142C(u32 a1, u32 a2, const u16 *a3, u16 a4, u32 a5) u16 *x = (u16 *)oam; x[0] = (d[0] & sOamBitmasks[0]) | ((d[0] + a2) & sOamBitmasks[1]) | ((a4 & sOamBitmasks[2]) << 8); x[1] = (d[1] & sOamBitmasks[3]) | ((d[1] + a1) & sOamBitmasks[4]) | ((a4 & sOamBitmasks[5]) << 4); - x[2] = (d[2] & sOamBitmasks[6]) | ((d[2] + a5) & sOamBitmasks[7]) | (a4 & sOamBitmasks[8]); + x[2] = (d[2] & sOamBitmasks[6]) | ((d[2] + baseTileNumber) & sOamBitmasks[7]) | (a4 & sOamBitmasks[8]); oam++; gMain.objCount++; d += 3; diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 2384f3c71..feceb930c 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -46,8 +46,6 @@ extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); -extern void sub_806AEDC(void); -extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); extern u8 GetMonStatusAndPokerus(); @@ -76,14 +74,14 @@ void sub_8121E10(void) { ClearPartySelection(); ewram1B000.unk263 = 0; - OpenPartyMenu(4, 0); + OpenPartyMenu(PARTY_MENU_TYPE_BATTLE_TOWER, 0); } void sub_8121E34(void) { ClearPartySelection(); ewram1B000.unk263 = 1; - OpenPartyMenu(4, 0); + OpenPartyMenu(PARTY_MENU_TYPE_BATTLE_TOWER, 0); } static void ClearPartySelection(void) @@ -94,7 +92,7 @@ static void ClearPartySelection(void) gSelectedOrderFromParty[i] = 0; } -bool8 sub_8121E78(void) +bool8 SetupBattleTowerPartyMenu(void) { u8 i; @@ -298,7 +296,7 @@ static void sub_81221F8(u8 taskId) } } -void sub_81222B0(u8 taskId) +void HandleBattleTowerPartyMenu(u8 taskId) { if (!gPaletteFade.active) { @@ -427,7 +425,7 @@ static void sub_8122530(void) GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_81221F8(ewram1B000.unk260); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == 1) @@ -536,7 +534,7 @@ static void sub_81227FC(u8 taskId) MenuZeroFillWindowRect(20, 10, 29, 19); HandleDestroyMenuCursors(); sub_806D538(0, 0); - gTasks[taskId].func = sub_81222B0; + gTasks[taskId].func = HandleBattleTowerPartyMenu; } static void BattleTowerEntryMenuCallback_Exit(u8 taskId) @@ -545,7 +543,7 @@ static void BattleTowerEntryMenuCallback_Exit(u8 taskId) sub_81227FC(taskId); } -bool8 sub_8122854(void) +bool8 SetupLinkMultiBattlePartyMenu(void) { switch (ewram1B000_alt.unk264) { @@ -628,7 +626,7 @@ static void sub_81229B8(void) } } -void sub_8122A48(u8 taskId) +void HandleLinkMultiBattlePartyMenu(u8 taskId) { if (!gPaletteFade.active) { @@ -693,7 +691,7 @@ static void sub_8122C18(u8 taskId) } } -// Exactly the same as sub_8121E78 except for case 6 +// Exactly the same as SetupBattleTowerPartyMenu except for case 6 bool8 unref_sub_8122C60(void) { switch (ewram1B000_alt.unk264) @@ -795,7 +793,7 @@ static void sub_8122D94(u8 taskId) } } -void sub_8122E0C(u8 taskId) +void HandleDaycarePartyMenu(u8 taskId) { if (!gPaletteFade.active) { @@ -878,7 +876,7 @@ static void sub_8122F90(void) GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_8122D94(ewram1B000.unk260); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == 1) @@ -917,7 +915,7 @@ static void DaycareStorageMenuCallback_Exit(u8 taskId) MenuZeroFillWindowRect(20, 10, 29, 19); HandleDestroyMenuCursors(); sub_806D538(15, 0); - gTasks[taskId].func = sub_8122E0C; + gTasks[taskId].func = HandleDaycarePartyMenu; } void sub_8123138(u8 taskId) diff --git a/src/field/daycare.c b/src/field/daycare.c index 591b5b188..60cc61e40 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -1685,6 +1685,6 @@ void ShowDaycareLevelMenu(void) void ChooseSendDaycareMon(void) { - OpenPartyMenu(6, 0); + OpenPartyMenu(PARTY_MENU_TYPE_DAYCARE, 0); gMain.savedCallback = c2_exit_to_overworld_2_switch; } diff --git a/src/field/party_menu.c b/src/field/party_menu.c index d3e585fe2..2eb635f1e 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -50,18 +50,18 @@ struct PartyMenuWindowCoords u8 bottom; }; -struct UnknownStruct5 +struct PartyMonTextSettingsStruct { - u8 unk0; - u8 unk1; - const u16 *unk4; + u8 xOffset; + u8 yOffset; + const u16 *oamSettings; }; -struct PartyMenuFunctionsStruct +struct PartyMenuHandlersStruct { - /*0x0*/TaskFunc func1; - /*0x4*/bool8 (*func2)(void); - /*0x8*/u8 unk8; + /*0x0*/TaskFunc menuHandler; + /*0x4*/bool8 (*menuSetup)(void); + /*0x8*/u8 initialPromptTextId; // element in gUnknown_08376624 }; static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); @@ -92,9 +92,9 @@ static u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite); static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId); static void ItemUseMoveMenu_HandleCancel(u8 taskId); -static bool8 sub_806AFD0(void); +static bool8 SetupDefaultPartyMenu(void); static void sub_806B4A8(void); -static void sub_806AF34(void); +static void VBlankCB_PartyMenu(void); static bool8 LoadPartyMenuGraphics(u8 a); static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); static void sub_806BB9C(u8 a); @@ -360,72 +360,78 @@ static const TaskFunc gUnknown_08376B54[] = { ItemUseMoveMenu_HandleCancel, }; -static const u16 Unknown_08376B5C[] = { - 0x4000, 0x4018, 0xF400, - 0x4000, 0x4038, 0xF404, - 0x4008, 0x4018, 0xF408, - 0x4008, 0x4038, 0xF40C, - 0x4010, 0x4020, 0xF410, - 0x4020, 0x4025, 0xF418, - 0x4020, 0x4045, 0xF41C, +#define PartyMonOAMSettings(x, y, palette, shape, size, priority, tileOffset) \ + ((shape) << 14) | (y), \ + ((size) << 14) | (x), \ + ((palette) << 12) | ((priority) << 10) | (tileOffset) + +static const u16 PartyMonOAMSettings_LeftColumn[] = { + PartyMonOAMSettings(24, 0, 15, ST_OAM_H_RECTANGLE, 1, 1, 0), + PartyMonOAMSettings(56, 0, 15, ST_OAM_H_RECTANGLE, 1, 1, 4), + PartyMonOAMSettings(24, 8, 15, ST_OAM_H_RECTANGLE, 1, 1, 8), + PartyMonOAMSettings(56, 8, 15, ST_OAM_H_RECTANGLE, 1, 1, 12), + PartyMonOAMSettings(32, 16, 15, ST_OAM_H_RECTANGLE, 1, 1, 16), + PartyMonOAMSettings(37, 32, 15, ST_OAM_H_RECTANGLE, 1, 1, 24), + PartyMonOAMSettings(69, 32, 15, ST_OAM_H_RECTANGLE, 1, 1, 28), 0xFFFF, }; -static const u16 Unknown_08376B88[] = { - 0x4000, 0x4018, 0xF400, - 0x4000, 0x4038, 0xF404, - 0x4008, 0x4018, 0xF408, - 0x4008, 0x4038, 0xF40C, - 0x4010, 0x4020, 0xF410, - 0x4010, 0x4065, 0xF418, - 0x4010, 0x4085, 0xF41C, +static const u16 PartyMonOAMSettings_RightColumn[] = { + PartyMonOAMSettings( 24, 0, 15, ST_OAM_H_RECTANGLE, 1, 1, 0), + PartyMonOAMSettings( 56, 0, 15, ST_OAM_H_RECTANGLE, 1, 1, 4), + PartyMonOAMSettings( 24, 8, 15, ST_OAM_H_RECTANGLE, 1, 1, 8), + PartyMonOAMSettings( 56, 8, 15, ST_OAM_H_RECTANGLE, 1, 1, 12), + PartyMonOAMSettings( 32, 16, 15, ST_OAM_H_RECTANGLE, 1, 1, 16), + PartyMonOAMSettings(101, 16, 15, ST_OAM_H_RECTANGLE, 1, 1, 24), + PartyMonOAMSettings(133, 16, 15, ST_OAM_H_RECTANGLE, 1, 1, 28), 0xFFFF, }; -static struct UnknownStruct5 const gUnknown_08376BB4[4][6] = { - { - { 1, 4, Unknown_08376B5C}, - {12, 1, Unknown_08376B88}, - {12, 4, Unknown_08376B88}, - {12, 7, Unknown_08376B88}, - {12, 10, Unknown_08376B88}, - {12, 13, Unknown_08376B88}, +// Controls where and how the mons' text appears in the party menu screen (nickname, HP, and level). +static struct PartyMonTextSettingsStruct const PartyMonTextSettings[4][6] = { + { // PARTY_MENU_LAYOUT_STANDARD + { 1, 4, PartyMonOAMSettings_LeftColumn}, + {12, 1, PartyMonOAMSettings_RightColumn}, + {12, 4, PartyMonOAMSettings_RightColumn}, + {12, 7, PartyMonOAMSettings_RightColumn}, + {12, 10, PartyMonOAMSettings_RightColumn}, + {12, 13, PartyMonOAMSettings_RightColumn}, }, - { - { 1, 2, Unknown_08376B5C}, - { 1, 9, Unknown_08376B5C}, - {12, 1, Unknown_08376B88}, - {12, 5, Unknown_08376B88}, - {12, 9, Unknown_08376B88}, - {12, 13, Unknown_08376B88}, + { // PARTY_MENU_LAYOUT_DOUBLE_BATTLE + { 1, 2, PartyMonOAMSettings_LeftColumn}, + { 1, 9, PartyMonOAMSettings_LeftColumn}, + {12, 1, PartyMonOAMSettings_RightColumn}, + {12, 5, PartyMonOAMSettings_RightColumn}, + {12, 9, PartyMonOAMSettings_RightColumn}, + {12, 13, PartyMonOAMSettings_RightColumn}, }, - { - { 1, 2, Unknown_08376B5C}, - { 1, 9, Unknown_08376B5C}, - {12, 2, Unknown_08376B88}, - {12, 5, Unknown_08376B88}, - {12, 9, Unknown_08376B88}, - {12, 12, Unknown_08376B88}, + { // PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE + { 1, 2, PartyMonOAMSettings_LeftColumn}, + { 1, 9, PartyMonOAMSettings_LeftColumn}, + {12, 2, PartyMonOAMSettings_RightColumn}, + {12, 5, PartyMonOAMSettings_RightColumn}, + {12, 9, PartyMonOAMSettings_RightColumn}, + {12, 12, PartyMonOAMSettings_RightColumn}, }, - { - { 1, 2, Unknown_08376B5C}, - {12, 2, Unknown_08376B88}, - {12, 5, Unknown_08376B88}, - { 1, 9, Unknown_08376B5C}, - {12, 9, Unknown_08376B88}, - {12, 12, Unknown_08376B88}, + { // PARTY_MENU_LAYOUT_MULTI_BATTLE + { 1, 2, PartyMonOAMSettings_LeftColumn}, + {12, 2, PartyMonOAMSettings_RightColumn}, + {12, 5, PartyMonOAMSettings_RightColumn}, + { 1, 9, PartyMonOAMSettings_LeftColumn}, + {12, 9, PartyMonOAMSettings_RightColumn}, + {12, 12, PartyMonOAMSettings_RightColumn}, }, }; -static const struct PartyMenuFunctionsStruct gUnknown_08376C74[] = { - {sub_8089CD4, sub_806AFD0, 0}, - {SetUpBattlePokemonMenu, SetUpBattlePartyMenu, 0}, - {sub_80F9C6C, sub_80F9ACC, 0}, - {sub_80F9C6C, sub_806AFD0, 0}, - {sub_81222B0, sub_8121E78, 0}, - {sub_8122A48, sub_8122854, 0xFF}, - {sub_8122E0C, sub_806AFD0, 0x0F}, - {sub_80F9E64, sub_80F9CE8, 0}, +static const struct PartyMenuHandlersStruct PartyMenuHandlers[] = { + {HandleDefaultPartyMenu, SetupDefaultPartyMenu, 0}, // PARTY_MENU_TYPE_STANDARD + {HandleBattlePartyMenu, SetUpBattlePartyMenu, 0}, // PARTY_MENU_TYPE_BATTLE + {HandleSelectPartyMenu, SetupContestPartyMenu, 0}, // PARTY_MENU_TYPE_CONTEST + {HandleSelectPartyMenu, SetupDefaultPartyMenu, 0}, // PARTY_MENU_TYPE_IN_GAME_TRADE + {HandleBattleTowerPartyMenu, SetupBattleTowerPartyMenu, 0}, // PARTY_MENU_TYPE_BATTLE_TOWER + {HandleLinkMultiBattlePartyMenu, SetupLinkMultiBattlePartyMenu, 0xFF}, // PARTY_MENU_TYPE_LINK_MULTI_BATTLE + {HandleDaycarePartyMenu, SetupDefaultPartyMenu, 0x0F}, // PARTY_MENU_TYPE_DAYCARE + {HandleMoveTutorPartyMenu, SetupMoveTutorPartyMenu, 0}, // PARTY_MENU_TYPE_MOVE_TUTOR }; static const u16 gUnknown_08376CD4[] = { @@ -498,7 +504,7 @@ extern u8 gTileBuffer[]; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F6; extern u16 gUnknown_0202E8F8; -extern u8 gUnknown_0202E8FA; +extern u8 gPartyMenuType; extern u8 gLastFieldPokeMenuOpened; extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; @@ -529,18 +535,25 @@ extern const u8 gStatusPal_Icons[]; #ifdef NONMATCHING -void sub_806AEDC(void) +// Main handler for the party menu. +void CB2_PartyMenuMain(void) { - const struct UnknownStruct5 *var1; + const struct PartyMonTextSettingsStruct *textSettings; s32 i; AnimateSprites(); BuildOamBuffer(); - var1 = gUnknown_08376BB4[gUnknown_0202E8FA]; - for (i = 0; i < 6; i++) + textSettings = PartyMonTextSettings[gPartyMenuType]; + for (i = 0; i < PARTY_SIZE; i++) { - sub_800142C(var1[i].unk0 * 8, var1[i].unk1 * 8, var1[i].unk4, 0, (i << 5) | 0x200); + // Draw mon name, level, and hp sprites + DrawPartyMenuMonText( + textSettings[i].xOffset * 8, + textSettings[i].yOffset * 8, + textSettings[i].oamSettings, + 0, + (i << 5) | 0x200); } RunTasks(); @@ -548,19 +561,19 @@ void sub_806AEDC(void) } #else __attribute__((naked)) -void sub_806AEDC(void) +void CB2_PartyMenuMain(void) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ sub sp, 0x4\n\ bl AnimateSprites\n\ bl BuildOamBuffer\n\ - ldr r0, _0806AF2C @ =gUnknown_0202E8FA\n\ + ldr r0, _0806AF2C @ =gPartyMenuType\n\ ldrb r1, [r0]\n\ lsls r0, r1, 1\n\ adds r0, r1\n\ lsls r0, 4\n\ - ldr r1, _0806AF30 @ =gUnknown_08376BB4\n\ + ldr r1, _0806AF30 @ =PartyMonTextSettings\n\ adds r5, r0, r1\n\ movs r6, 0\n\ _0806AEF8:\n\ @@ -575,7 +588,7 @@ _0806AEF8:\n\ orrs r3, r4\n\ str r3, [sp]\n\ movs r3, 0\n\ - bl sub_800142C\n\ + bl DrawPartyMenuMonText\n\ adds r5, 0x8\n\ adds r6, 0x1\n\ cmp r6, 0x5\n\ @@ -587,13 +600,13 @@ _0806AEF8:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_0806AF2C: .4byte gUnknown_0202E8FA\n\ -_0806AF30: .4byte gUnknown_08376BB4\n\ +_0806AF2C: .4byte gPartyMenuType\n\ +_0806AF30: .4byte PartyMonTextSettings\n\ .syntax divided\n"); } #endif // NONMATCHING -void sub_806AF34(void) +void VBlankCB_PartyMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -601,11 +614,11 @@ void sub_806AF34(void) sub_806B548(); } -void sub_806AF4C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +void sub_806AF4C(u8 a, u8 battleTypeFlags, TaskFunc func, u8 d) { - if (battleFlags != 0xFF) + if (battleTypeFlags != 0xFF) { - gBattleTypeFlags = battleFlags; + gBattleTypeFlags = battleTypeFlags; } ewram1B000.unk258 = a; @@ -619,12 +632,12 @@ void sub_806AF8C(u8 a, u8 battleFlags, TaskFunc func, u8 d) SetMainCallback2(sub_806B460); } -void OpenPartyMenu(u8 a, u8 battleFlags) +void OpenPartyMenu(u8 menuType, u8 battleFlags) { - sub_806AF8C(a, battleFlags, gUnknown_08376C74[a].func1, gUnknown_08376C74[a].unk8); + sub_806AF8C(menuType, battleFlags, PartyMenuHandlers[menuType].menuHandler, PartyMenuHandlers[menuType].initialPromptTextId); } -bool8 sub_806AFD0(void) +bool8 SetupDefaultPartyMenu(void) { switch (ewram1B000_alt.unk264) { @@ -790,7 +803,7 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 12: - if (gUnknown_08376C74[ewram1B000.unk258].func2() == TRUE) + if (PartyMenuHandlers[ewram1B000.unk258].menuSetup() == TRUE) { gMain.state++; } @@ -815,7 +828,7 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 17: - SetVBlankCallback(sub_806AF34); + SetVBlankCallback(VBlankCB_PartyMenu); return TRUE; } @@ -837,7 +850,7 @@ void sub_806B460(void) sub_806BF74(ewram1B000.unk260, 0); } - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); } void sub_806B4A8(void) @@ -888,13 +901,13 @@ bool8 sub_806B58C(u8 a) const u8 *arr; if (!IsDoubleBattle()) - gUnknown_0202E8FA = 0; + gPartyMenuType = PARTY_MENU_LAYOUT_STANDARD; else if (IsLinkDoubleBattle() == TRUE) - gUnknown_0202E8FA = 2; + gPartyMenuType = PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE; else - gUnknown_0202E8FA = 1; + gPartyMenuType = PARTY_MENU_LAYOUT_DOUBLE_BATTLE; - arr = &gUnknown_083769A8[gUnknown_0202E8FA * 12]; + arr = &gUnknown_083769A8[gPartyMenuType * 12]; switch (a) { @@ -1033,7 +1046,7 @@ bool8 sub_806B58C(u8 a) void sub_806B908(void) { memset(&gBGTilemapBuffers[2], 0, 0x800); - gUnknown_0202E8FA = 3; + gPartyMenuType = PARTY_MENU_LAYOUT_MULTI_BATTLE; sub_806B9A4(gUnknown_083769C0[12], gUnknown_083769C0[13], 3); if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES)) @@ -1059,7 +1072,7 @@ void sub_806B908(void) lsls r2, 4\n\ movs r1, 0\n\ bl memset\n\ - ldr r1, _0806B94C @ =gUnknown_0202E8FA\n\ + ldr r1, _0806B94C @ =gPartyMenuType\n\ movs r0, 0x3\n\ strb r0, [r1]\n\ ldr r0, _0806B950 @ =gUnknown_083769A8\n\ @@ -1083,7 +1096,7 @@ void sub_806B908(void) b _0806B964\n\ .align 2, 0\n\ _0806B948: .4byte gBGTilemapBuffers + 0x1000\n\ -_0806B94C: .4byte gUnknown_0202E8FA\n\ +_0806B94C: .4byte gPartyMenuType\n\ _0806B950: .4byte gUnknown_083769A8\n\ _0806B954: .4byte gPlayerParty + 1 * 0x64\n\ _0806B958:\n\ @@ -4828,18 +4841,18 @@ void Task_HandleItemUseMoveMenuInput(u8 taskId) } } -void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c) +void DoPPRecoveryItemEffect(u8 taskId, u16 item, TaskFunc c) { const u8 *itemEffect; u8 taskId2; - if (b == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY) itemEffect = gSaveBlock1.enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[b - ITEM_POTION]; + itemEffect = gItemEffectTable[item - ITEM_POTION]; gTasks[taskId].func = TaskDummy; taskId2 = CreateTask(TaskDummy, 5); - sub_806E8D0(taskId, b, c); + sub_806E8D0(taskId, item, c); if (!(itemEffect[4] & 0x10)) { gTasks[taskId2].data[11] = 0; @@ -4869,7 +4882,7 @@ void ItemUseMoveMenu_HandleCancel(u8 taskId) HandleDestroyMenuCursors(); MenuZeroFillWindowRect(19, 10, 29, 19); if (gMain.inBattle) - gTasks[ewram1C000.unk4].func = SetUpBattlePokemonMenu; + gTasks[ewram1C000.unk4].func = HandleBattlePartyMenu; else gTasks[ewram1C000.unk4].func = sub_808B0C0; sub_806D538(3, 0); diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 5baf180a1..2c3d4b61d 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -183,7 +183,7 @@ static const struct PokeMenuFieldMoveFunc sFieldMoveFuncs[] = void sub_8089A70(void) { gPaletteFade.bufferTransferDisabled = 1; - OpenPartyMenu(0, 0); + OpenPartyMenu(PARTY_MENU_TYPE_STANDARD, 0); } static void sub_8089A8C(void) @@ -247,7 +247,7 @@ static void sub_8089C7C(u8 arg0) InitMenu(0, 20, r4, sPokeMenuOptionsNo, arg0, 9); } -void sub_8089CD4(u8 taskID) +void HandleDefaultPartyMenu(u8 taskID) { if (!gPaletteFade.active) { @@ -330,7 +330,7 @@ static void sub_8089EBC(void) sub_806BF74(EWRAM_1B000.unk260, 0); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_8089E84(); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } } while (sub_80F9344() != TRUE); @@ -362,7 +362,7 @@ static void PokemonMenu_Summary(u8 taskID) void sub_808A004(u8 taskID) { - SetTaskFuncWithFollowupFunc(taskID, sub_806CA60, sub_8089CD4); + SetTaskFuncWithFollowupFunc(taskID, sub_806CA60, HandleDefaultPartyMenu); MenuZeroFillWindowRect(19, 0, 29, 19); } @@ -429,7 +429,7 @@ static void sub_808A1E0(u8 taskID) { SetHeldItemIconVisibility(taskID, sub_806CA38(taskID)); sub_806D538(0, 0); - gTasks[taskID].func = sub_8089CD4; + gTasks[taskID].func = HandleDefaultPartyMenu; } } @@ -444,7 +444,7 @@ static void sub_808A228(u8 taskID) { MenuZeroFillWindowRect(0, 0, 29, 19); sub_806D538(0, 0); - gTasks[taskID].func = sub_8089CD4; + gTasks[taskID].func = HandleDefaultPartyMenu; } } @@ -479,7 +479,7 @@ static void sub_808A358(void) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -497,7 +497,7 @@ static void sub_808A3A4(void) sub_806BF74(EWRAM_1B000.unk260, 0); EWRAM_1B000.unk262 = 3; sub_8089E84(); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -543,7 +543,7 @@ static void sub_808A4D4(void) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -561,7 +561,7 @@ void sub_808A520(void) AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1); TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]); SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8); - sub_806AF4C(0, 0xFF, sub_8089CD4, 0); + sub_806AF4C(0, 0xFF, HandleDefaultPartyMenu, 0); } else sub_806AF4C(0, 0xFF, sub_808A5BC, 0xFF); @@ -681,7 +681,7 @@ static void sub_808A8D4(u8 taskID) sPokeMenuCursorPos = 0; MenuZeroFillWindowRect(19, 0, 29, 19); sub_806D538(0, 0); - gTasks[taskID].func = sub_8089CD4; + gTasks[taskID].func = HandleDefaultPartyMenu; } static void PokemonMenu_Cancel(u8 taskID) @@ -852,7 +852,7 @@ static void sub_808AD0C(void) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -863,7 +863,7 @@ static void sub_808AD0C(void) void sub_808AD58(void) { gPaletteFade.bufferTransferDisabled = 1; - sub_806AF4C(0, 0xFF, sub_8089CD4, 0); + sub_806AF4C(0, 0xFF, HandleDefaultPartyMenu, 0); SetMainCallback2(sub_808AD0C); } @@ -969,7 +969,7 @@ static void sub_808AF80(void) gLastFieldPokeMenuOpened = 0; sub_806C994(ewram1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(ewram1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -1107,7 +1107,7 @@ static void sub_808B3A0(void) { sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); sub_806BF74(EWRAM_1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) @@ -1129,7 +1129,7 @@ static void sub_808B3EC(void) SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8); CreateTask(sub_808B25C, 5); gPaletteFade.bufferTransferDisabled = 0; - callback = sub_806AEDC; + callback = CB2_PartyMenuMain; } else { @@ -1167,7 +1167,7 @@ static void sub_808B518(void) { sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); sub_806BF74(EWRAM_1B000.unk260, 0); - SetMainCallback2(sub_806AEDC); + SetMainCallback2(CB2_PartyMenuMain); break; } if (sub_80F9344() == TRUE) diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index f930df8e2..73fafa184 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -31,8 +31,8 @@ void sub_80F99CC(void) u8 taskId; ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 2; + taskId = CreateTask((void *)OpenPartyMenuFromScriptContext, 0xA); + gTasks[taskId].data[0] = PARTY_MENU_TYPE_CONTEST; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } @@ -41,8 +41,8 @@ void sub_80F9A0C(void) u8 taskId; ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 3; + taskId = CreateTask((void *)OpenPartyMenuFromScriptContext, 0xA); + gTasks[taskId].data[0] = PARTY_MENU_TYPE_IN_GAME_TRADE; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } @@ -51,12 +51,12 @@ void sub_80F9A4C(void) u8 taskId; ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 7; + taskId = CreateTask((void *)OpenPartyMenuFromScriptContext, 0xA); + gTasks[taskId].data[0] = PARTY_MENU_TYPE_MOVE_TUTOR; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } -void sub_80F9A8C(u8 taskId) +void OpenPartyMenuFromScriptContext(u8 taskId) { if (!gPaletteFade.active) { @@ -66,7 +66,7 @@ void sub_80F9A8C(u8 taskId) } } -bool8 sub_80F9ACC(void) +bool8 SetupContestPartyMenu(void) { switch (EWRAM_1B000.unk264) { @@ -151,7 +151,7 @@ void sub_80F9C00(void) } } -void sub_80F9C6C(u8 var) +void HandleSelectPartyMenu(u8 var) { if (!gPaletteFade.active) { @@ -173,7 +173,7 @@ void sub_80F9C6C(u8 var) } } -bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why +bool8 SetupMoveTutorPartyMenu(void) { switch (EWRAM_1B000.unk264) { @@ -250,7 +250,7 @@ void sub_80F9E1C(void) } } -void sub_80F9E64(u8 var) +void HandleMoveTutorPartyMenu(u8 var) { if (!gPaletteFade.active) { -- cgit v1.2.3 From c5687e5324c243e5043b040bf9920ea39481adc3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 9 Oct 2017 23:37:32 -0700 Subject: Document part of menu setup struct and accompanying functions --- src/battle/battle_party_menu.c | 82 ++++++------ src/field/choose_party.c | 120 ++++++++--------- src/field/fldeff_softboiled.c | 4 +- src/field/party_menu.c | 265 +++++++++++++++++++------------------- src/pokemon/pokemon_menu.c | 76 +++++------ src/script_pokemon_util_80F99CC.c | 80 ++++++------ 6 files changed, 313 insertions(+), 314 deletions(-) (limited to 'src') diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index cc938a054..961be6d02 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -348,91 +348,91 @@ void sub_8094E4C(void) bool8 SetUpBattlePartyMenu(void) { - switch (EWRAM_1B000.unk264) + switch (EWRAM_1B000.setupState) //switch (ewram1B000.unk264[0]) { case 0: //TODO: try to get rid of this duplicate code if (IsLinkDoubleBattle() == TRUE) { - if (EWRAM_1B000.unk266 != 6) + if (EWRAM_1B000.monIndex != 6) { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; + TryCreatePartyMenuMonIcon(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex, &gPlayerParty[EWRAM_1B000.monIndex]); + EWRAM_1B000.monIndex++; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } } else { - if (EWRAM_1B000.unk266 < 6) + if (EWRAM_1B000.monIndex < 6) { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; + TryCreatePartyMenuMonIcon(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex, &gPlayerParty[EWRAM_1B000.monIndex]); + EWRAM_1B000.monIndex++; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } } break; case 1: LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; + CreateHeldItemIcons_806DC34(EWRAM_1B000.menuHandlerTaskId); + EWRAM_1B000.setupState++; break; case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) + if (sub_806BD58(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex) == 1) { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } else - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; case 4: PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 6: PartyMenuTryPrintMonsHP(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 7: nullsub_13(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 8: PartyMenuDrawHPBars(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 9: - if (sub_806B58C(EWRAM_1B000.unk266) == 1) + if (sub_806B58C(EWRAM_1B000.monIndex) == 1) { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } else - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; case 10: if (gUnknown_02038473 == 3) { if (GetItemEffectType(gScriptItemId) == 10) - ewram1B000.unk259 = 0xFF; + ewram1B000.promptTextId = 0xFF; else - ewram1B000.unk259 = 3; + ewram1B000.promptTextId = 3; } return TRUE; } @@ -445,19 +445,19 @@ static void sub_8095050(u8 a, u8 b) { if (gUnknown_02038473 == 1) { - gTasks[EWRAM_1B000.unk260].data[4] = 1; - gTasks[EWRAM_1B000.unk260].data[5] = 1; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[4] = 1; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[5] = 1; } else { - gTasks[EWRAM_1B000.unk260].data[4] = 0; - gTasks[EWRAM_1B000.unk260].data[5] = 0; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[4] = 0; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[5] = 0; } } else { - gTasks[EWRAM_1B000.unk260].data[4] = 2; - gTasks[EWRAM_1B000.unk260].data[5] = 2; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[4] = 2; + gTasks[EWRAM_1B000.menuHandlerTaskId].data[5] = 2; } ShowPartyPopupMenu(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); @@ -556,7 +556,7 @@ static void Task_8095330(u8 taskId) static void Task_809535C(void) { gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(1, 0xFF, HandleBattlePartyMenu, 5); + SetPartyMenuSettings(PARTY_MENU_TYPE_BATTLE, 0xFF, HandleBattlePartyMenu, 5); SetMainCallback2(Task_809538C); } @@ -566,11 +566,11 @@ static void Task_809538C(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); - sub_8095050(EWRAM_1B000.unk260, gUnknown_020384F0); - SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, HandleBattlePartyMenu); + sub_8095050(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); + SetTaskFuncWithFollowupFunc(EWRAM_1B000.menuHandlerTaskId, Task_HandlePopupMenuInput, HandleBattlePartyMenu); SetMainCallback2(CB2_PartyMenuMain); return; } @@ -729,6 +729,6 @@ static void Task_BattlePartyMenuCancel(u8 taskId) HandleDestroyMenuCursors(); ClosePartyPopupMenu(gTasks[taskId].data[4], sBattlePartyPopupMenus); gTasks[taskId].data[4] = gTasks[taskId].data[5]; - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); SwitchTaskToFollowupFunc(taskId); } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index feceb930c..2b5407753 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -96,46 +96,46 @@ bool8 SetupBattleTowerPartyMenu(void) { u8 i; - switch (ewram1B000_alt.unk264) + switch (ewram1B000_alt.setupState) { case 0: - if (ewram1B000_alt.unk266 < gPlayerPartyCount) + if (ewram1B000_alt.monIndex < gPlayerPartyCount) { - TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); - ewram1B000_alt.unk266++; + TryCreatePartyMenuMonIcon(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex, &gPlayerParty[ewram1B000_alt.monIndex]); + ewram1B000_alt.monIndex++; } else { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } break; case 1: LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; + CreateHeldItemIcons_806DC34(ewram1B000_alt.menuHandlerTaskId); + ewram1B000_alt.setupState++; break; case 3: - if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) + if (sub_806BD58(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex) == 1) { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } else { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; } break; case 4: PartyMenuPrintMonsLevelOrStatus(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 6: for (i = 0; i < gPlayerPartyCount; i++) @@ -158,18 +158,18 @@ bool8 SetupBattleTowerPartyMenu(void) sub_806BC3C(i, 0x7E); } } - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 7: - if (sub_806B58C(ewram1B000_alt.unk266) == 1) + if (sub_806B58C(ewram1B000_alt.monIndex) == 1) { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264 = 0; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState = 0; return TRUE; } else { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; } break; } @@ -275,7 +275,7 @@ static bool8 IsPartyMemberAlreadySelected(u8 partyMember) static void sub_81221F8(u8 taskId) { - sub_806D538(5, 1); + PrintPartyMenuPromptText(5, 1); if (IsMonAllowedInBattleTower(&gPlayerParty[gLastFieldPokeMenuOpened]) == TRUE) { if (IsPartyMemberAlreadySelected(gLastFieldPokeMenuOpened + 1) == TRUE) @@ -394,7 +394,7 @@ static void sub_81224A8(u8 taskId) if (val != 0xFF) { - sub_806D538(val, 0); + PrintPartyMenuPromptText(val, 0); gTasks[taskId].func = sub_8122480; } else @@ -407,7 +407,7 @@ static void sub_81224A8(u8 taskId) else { PlaySE(SE_HAZURE); - sub_806D538(14, 0); + PrintPartyMenuPromptText(14, 0); gTasks[taskId].func = sub_8122480; } } @@ -420,11 +420,11 @@ static void sub_8122530(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(ewram1B000.unk260, gUnknown_020384F0); - sub_806C658(ewram1B000.unk260, 0); + sub_806C994(ewram1B000.menuHandlerTaskId, gUnknown_020384F0); + sub_806C658(ewram1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; - sub_81221F8(ewram1B000.unk260); + sub_81221F8(ewram1B000.menuHandlerTaskId); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -436,7 +436,7 @@ static void sub_8122530(void) static void sub_81225A4(void) { gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(4, 0xFF, sub_812238C, 5); + SetPartyMenuSettings(PARTY_MENU_TYPE_BATTLE_TOWER, 0xFF, sub_812238C, 5); SetMainCallback2(sub_8122530); } @@ -533,7 +533,7 @@ static void sub_81227FC(u8 taskId) { MenuZeroFillWindowRect(20, 10, 29, 19); HandleDestroyMenuCursors(); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); gTasks[taskId].func = HandleBattleTowerPartyMenu; } @@ -545,23 +545,23 @@ static void BattleTowerEntryMenuCallback_Exit(u8 taskId) bool8 SetupLinkMultiBattlePartyMenu(void) { - switch (ewram1B000_alt.unk264) + switch (ewram1B000_alt.setupState) { case 0: - sub_81228E8(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; + sub_81228E8(ewram1B000_alt.menuHandlerTaskId); + ewram1B000_alt.setupState++; break; case 1: LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 2: - sub_8122950(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; + sub_8122950(ewram1B000_alt.menuHandlerTaskId); + ewram1B000_alt.setupState++; break; case 3: sub_81229B8(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 4: sub_806B908(); @@ -694,61 +694,61 @@ static void sub_8122C18(u8 taskId) // Exactly the same as SetupBattleTowerPartyMenu except for case 6 bool8 unref_sub_8122C60(void) { - switch (ewram1B000_alt.unk264) + switch (ewram1B000_alt.setupState) { case 0: - if (ewram1B000_alt.unk266 < gPlayerPartyCount) + if (ewram1B000_alt.monIndex < gPlayerPartyCount) { - TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); - ewram1B000_alt.unk266++; + TryCreatePartyMenuMonIcon(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex, &gPlayerParty[ewram1B000_alt.monIndex]); + ewram1B000_alt.monIndex++; } else { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } break; case 1: LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; + CreateHeldItemIcons_806DC34(ewram1B000_alt.menuHandlerTaskId); + ewram1B000_alt.setupState++; break; case 3: - if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) + if (sub_806BD58(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex) == 1) { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } else { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; } break; case 4: PartyMenuPrintMonsLevelOrStatus(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 6: sub_806BCE8(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 7: - if (sub_806B58C(ewram1B000_alt.unk266) == 1) + if (sub_806B58C(ewram1B000_alt.monIndex) == 1) { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264 = 0; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState = 0; return TRUE; } else { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; } break; } @@ -871,11 +871,11 @@ static void sub_8122F90(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(ewram1B000.unk260, gUnknown_020384F0); - sub_806BF74(ewram1B000.unk260, 0); + sub_806C994(ewram1B000.menuHandlerTaskId, gUnknown_020384F0); + sub_806BF74(ewram1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; - sub_8122D94(ewram1B000.unk260); + sub_8122D94(ewram1B000.menuHandlerTaskId); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -887,7 +887,7 @@ static void sub_8122F90(void) static void sub_8123004(void) { gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(6, 0xFF, Task_DaycareStorageMenu8122EAC, 5); + SetPartyMenuSettings(PARTY_MENU_TYPE_DAYCARE, 0xFF, Task_DaycareStorageMenu8122EAC, 5); SetMainCallback2(sub_8122F90); } @@ -914,7 +914,7 @@ static void DaycareStorageMenuCallback_Exit(u8 taskId) PlaySE(SE_SELECT); MenuZeroFillWindowRect(20, 10, 29, 19); HandleDestroyMenuCursors(); - sub_806D538(15, 0); + PrintPartyMenuPromptText(15, 0); gTasks[taskId].func = HandleDaycarePartyMenu; } diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index cb26d9966..d4a757145 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -132,7 +132,7 @@ static void sub_8133E74(u8 taskId) { } MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - sub_806D538(3, 0); + PrintPartyMenuPromptText(3, 0); gTasks[taskId].func = sub_806CB74; } @@ -148,6 +148,6 @@ static void sub_8133EF8(void) { EWRAM_1B000_2.unk261 = 2; DestroySprite(&gSprites[EWRAM_1000.unk1]); MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); SwitchTaskToFollowupFunc(EWRAM_1000.unk0); } diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 2eb635f1e..834a5b09d 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -75,8 +75,8 @@ static void sub_8070D90(u8 taskId); static void sub_806D5B8(u8 taskId); static void sub_806D014(u8 taskId); static void sub_806D118(u8 taskId); -static void sub_806B460(void); -static void sub_806B548(void); +static void CB2_InitPartyMenu(void); +static void DrawPartyMonBackgrounds(void); static void sub_806BA94(s16 a, u16 b, u8 c, u8 d); static void sub_806B9A4(s16 a, u16 b, u8 c); static void sub_806CA18(u8 taskId, u8 b); @@ -168,13 +168,13 @@ asm(".4byte gTileBuffer\n"); static const u8 MenuGfx_HoldIcons[] = INCBIN_U8("graphics/interface/hold_icons.4bpp"); static const u16 MenuPal_HoldIcons[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); -static const struct SpriteSheet gUnknown_083765DC = { +static const struct SpriteSheet HeldItemsSpriteSheet = { MenuGfx_HoldIcons, sizeof MenuGfx_HoldIcons, 0xd750 }; -static const struct SpritePalette gUnknown_083765E4 = { +static const struct SpritePalette HeldItemsPalette = { MenuPal_HoldIcons, 0xd750 }; @@ -246,14 +246,14 @@ static const u8 *const gUnknown_08376624[] = { }; static const struct Coords8 gUnknown_08376678[8][6] = { - {{16, 40}, {104, 18}, {104, 42}, {104, 66}, {104, 90}, {104, 114}}, - {{16, 24}, { 16, 80}, {104, 18}, {104, 50}, {104, 82}, {104, 114}}, - {{16, 24}, { 16, 80}, {104, 26}, {104, 50}, {104, 82}, {104, 106}}, - {{16, 24}, {104, 26}, {104, 50}, { 16, 80}, {104, 82}, {104, 106}}, - {{ 5, 4}, { 16, 1}, { 16, 4}, { 16, 7}, { 16, 10}, { 16, 13}}, - {{ 5, 2}, { 5, 9}, { 16, 1}, { 16, 5}, { 16, 9}, { 16, 13}}, - {{ 5, 2}, { 5, 9}, { 16, 2}, { 16, 5}, { 16, 9}, { 16, 12}}, - {{ 5, 2}, { 16, 2}, { 16, 5}, { 5, 9}, { 16, 9}, { 16, 12}}, + {{16, 40}, {104, 18}, {104, 42}, {104, 66}, {104, 90}, {104, 114}}, // PARTY_MENU_TYPE_STANDARD + {{16, 24}, { 16, 80}, {104, 18}, {104, 50}, {104, 82}, {104, 114}}, // PARTY_MENU_TYPE_BATTLE + {{16, 24}, { 16, 80}, {104, 26}, {104, 50}, {104, 82}, {104, 106}}, // PARTY_MENU_TYPE_CONTEST + {{16, 24}, {104, 26}, {104, 50}, { 16, 80}, {104, 82}, {104, 106}}, // PARTY_MENU_TYPE_IN_GAME_TRADE + {{ 5, 4}, { 16, 1}, { 16, 4}, { 16, 7}, { 16, 10}, { 16, 13}}, // PARTY_MENU_TYPE_BATTLE_TOWER + {{ 5, 2}, { 5, 9}, { 16, 1}, { 16, 5}, { 16, 9}, { 16, 13}}, // PARTY_MENU_TYPE_LINK_MULTI_BATTLE + {{ 5, 2}, { 5, 9}, { 16, 2}, { 16, 5}, { 16, 9}, { 16, 12}}, // PARTY_MENU_TYPE_DAYCARE + {{ 5, 2}, { 16, 2}, { 16, 5}, { 5, 9}, { 16, 9}, { 16, 12}}, // PARTY_MENU_TYPE_MOVE_TUTOR }; static const struct Coords8 gUnknown_08376738[12][6] = { @@ -272,16 +272,16 @@ static const struct Coords8 gUnknown_08376738[12][6] = { }; static u16 *const gUnknown_08376858[4][6] = { - {(u16*)(BG_VRAM + 0xF1C8), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF16E), (u16*)(BG_VRAM + 0xF22E), (u16*)(BG_VRAM + 0xF2EE), (u16*)(BG_VRAM + 0xF3AE)}, - {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF3AE)}, - {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, - {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, + {(u16*)(BG_VRAM + 0xF1C8), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF16E), (u16*)(BG_VRAM + 0xF22E), (u16*)(BG_VRAM + 0xF2EE), (u16*)(BG_VRAM + 0xF3AE)}, // PARTY_MENU_STANDARD + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0AE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF3AE)}, // PARTY_MENU_LAYOUT_DOUBLE_BATTLE + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, // PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE + {(u16*)(BG_VRAM + 0xF148), (u16*)(BG_VRAM + 0xF0EE), (u16*)(BG_VRAM + 0xF1AE), (u16*)(BG_VRAM + 0xF308), (u16*)(BG_VRAM + 0xF2AE), (u16*)(BG_VRAM + 0xF36E)}, // PARTY_MENU_LAYOUT_MULTI_BATTLE }; static const struct Coords8 gUnknown_083768B8[3][8] = { - {{8, 44}, {92, 22}, {92, 46}, {92, 70}, {92, 94}, {92, 118}, {196, 136}, {196, 152}}, - {{8, 28}, { 8, 84}, {92, 22}, {92, 54}, {92, 86}, {92, 118}, {196, 136}, {196, 152}}, - {{8, 28}, { 8, 84}, {92, 30}, {92, 54}, {92, 86}, {92, 110}, {196, 136}, {196, 152}}, + {{8, 44}, {92, 22}, {92, 46}, {92, 70}, {92, 94}, {92, 118}, {196, 136}, {196, 152}}, // PARTY_MENU_LAYOUT_STANDARD + {{8, 28}, { 8, 84}, {92, 22}, {92, 54}, {92, 86}, {92, 118}, {196, 136}, {196, 152}}, // PARTY_MENU_LAYOUT_DOUBLE_BATTLE + {{8, 28}, { 8, 84}, {92, 30}, {92, 54}, {92, 86}, {92, 110}, {196, 136}, {196, 152}}, // PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE }; static u16 *const gUnknown_08376918[2][PARTY_SIZE] = { @@ -611,99 +611,97 @@ void VBlankCB_PartyMenu(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_806B548(); + DrawPartyMonBackgrounds(); } -void sub_806AF4C(u8 a, u8 battleTypeFlags, TaskFunc func, u8 d) +void SetPartyMenuSettings(u8 menuType, u8 battleTypeFlags, TaskFunc menuHandlerFunc, u8 textId) { if (battleTypeFlags != 0xFF) { gBattleTypeFlags = battleTypeFlags; } - ewram1B000.unk258 = a; - ewram1B000.taskFunc = func; - ewram1B000.unk259 = d; + ewram1B000.menuType = menuType; + ewram1B000.menuHandler = menuHandlerFunc; + ewram1B000.promptTextId = textId; } -void sub_806AF8C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +void DoOpenPartyMenu(u8 menuType, u8 battleFlags, TaskFunc menuHandlerFunc, u8 textId) { - sub_806AF4C(a, battleFlags, func, d); - SetMainCallback2(sub_806B460); + SetPartyMenuSettings(menuType, battleFlags, menuHandlerFunc, textId); + SetMainCallback2(CB2_InitPartyMenu); } void OpenPartyMenu(u8 menuType, u8 battleFlags) { - sub_806AF8C(menuType, battleFlags, PartyMenuHandlers[menuType].menuHandler, PartyMenuHandlers[menuType].initialPromptTextId); + DoOpenPartyMenu(menuType, battleFlags, PartyMenuHandlers[menuType].menuHandler, PartyMenuHandlers[menuType].initialPromptTextId); } +// This is a Task which is repeatedly called until it eventually returns TRUE when finished. bool8 SetupDefaultPartyMenu(void) { - switch (ewram1B000_alt.unk264) + switch (ewram1B000_alt.setupState) { case 0: - if (ewram1B000_alt.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); - ewram1B000_alt.unk266++; - } - else - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + if (ewram1B000_alt.monIndex < gPlayerPartyCount) { + TryCreatePartyMenuMonIcon(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex, &gPlayerParty[ewram1B000_alt.monIndex]); + ewram1B000_alt.monIndex++; + } else { + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } - break;; + break; case 1: LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; + CreateHeldItemIcons_806DC34(ewram1B000_alt.menuHandlerTaskId); + ewram1B000_alt.setupState++; break; case 3: - if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) != 1) + if (sub_806BD58(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex) != 1) { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; } else { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState++; } break; case 4: PartyMenuPrintMonsLevelOrStatus(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 6: PartyMenuTryPrintMonsHP(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 7: nullsub_13(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 8: PartyMenuDrawHPBars(); - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; break; case 9: - if (sub_806B58C(ewram1B000_alt.unk266) == 1) + if (sub_806B58C(ewram1B000_alt.monIndex) == 1) { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264 = 0; + ewram1B000_alt.monIndex = 0; + ewram1B000_alt.setupState = 0; return TRUE; } else { - ewram1B000_alt.unk266++; + ewram1B000_alt.monIndex++; break; } } @@ -746,8 +744,8 @@ bool8 InitPartyMenu(void) break; case 2: sub_806B4A8(); - ewram1B000_alt.unk264 = 0; - ewram1B000_alt.unk266 = 0; + ewram1B000_alt.setupState = 0; + ewram1B000_alt.monIndex = 0; ewram1B000_alt.unk268 = 0; gMain.state++; break; @@ -756,7 +754,7 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 4: - if (ewram1B000.unk258 != 1 && ewram1B000.unk258 != 5) + if (ewram1B000.menuType != PARTY_MENU_TYPE_BATTLE && ewram1B000.menuType != PARTY_MENU_TYPE_LINK_MULTI_BATTLE) { ResetTasks(); } @@ -768,7 +766,7 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 6: - ewram1B000.unk260 = CreateTask(ewram1B000.taskFunc, 0); + ewram1B000.menuHandlerTaskId = CreateTask(ewram1B000.menuHandler, 0); gMain.state++; break; case 7: @@ -783,19 +781,19 @@ bool8 InitPartyMenu(void) case 9: if (MultistepLoadFont()) { - ewram1B000_alt.unk264 = 1; + ewram1B000_alt.setupState = 1; gMain.state++; } break; case 10: - if (LoadPartyMenuGraphics(ewram1B000_alt.unk264) == TRUE) + if (LoadPartyMenuGraphics(ewram1B000_alt.setupState) == TRUE) { - ewram1B000_alt.unk264 = 0; + ewram1B000_alt.setupState = 0; gMain.state++; } else { - ewram1B000_alt.unk264++; + ewram1B000_alt.setupState++; } break; case 11: @@ -803,7 +801,7 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 12: - if (PartyMenuHandlers[ewram1B000.unk258].menuSetup() == TRUE) + if (PartyMenuHandlers[ewram1B000.menuType].menuSetup() == TRUE) { gMain.state++; } @@ -819,7 +817,7 @@ bool8 InitPartyMenu(void) } break; case 15: - sub_806D538(ewram1B000.unk259, 0); + PrintPartyMenuPromptText(ewram1B000.promptTextId, 0); gMain.state++; break; case 16: @@ -835,7 +833,7 @@ bool8 InitPartyMenu(void) return FALSE; } -void sub_806B460(void) +void CB2_InitPartyMenu(void) { while (InitPartyMenu() != TRUE) { @@ -845,9 +843,9 @@ void sub_806B460(void) } } - if (ewram1B000.unk258 != 5) + if (ewram1B000.menuType != PARTY_MENU_TYPE_LINK_MULTI_BATTLE) { - sub_806BF74(ewram1B000.unk260, 0); + sub_806BF74(ewram1B000.menuHandlerTaskId, 0); } SetMainCallback2(CB2_PartyMenuMain); @@ -881,7 +879,8 @@ bool8 IsLinkDoubleBattle() return FALSE; } -void sub_806B548(void) +// Draws the blue rectangular regions surrounding each of the party mons. +void DrawPartyMonBackgrounds(void) { if (ewram1B000.unk261) { @@ -896,7 +895,7 @@ void sub_806B548(void) } } -bool8 sub_806B58C(u8 a) +bool8 sub_806B58C(u8 monIndex) { const u8 *arr; @@ -909,7 +908,7 @@ bool8 sub_806B58C(u8 a) arr = &gUnknown_083769A8[gPartyMenuType * 12]; - switch (a) + switch (monIndex) { case 0: memset(&gBGTilemapBuffers[2], 0, 0x800); @@ -1028,7 +1027,7 @@ bool8 sub_806B58C(u8 a) break; case 7: - if (ewram1B000.unk258 == 4) { + if (ewram1B000.menuType == PARTY_MENU_TYPE_BATTLE_TOWER) { sub_806BB9C(1); } @@ -1669,8 +1668,8 @@ void sub_806BF74(u8 taskId, s8 directionPressed) ewram1B000.unk261 = 2; - gSprites[spriteId].pos1.x = gUnknown_083768B8[2][gSprites[spriteId].data0].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[2][gSprites[spriteId].data0].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].y; } else { @@ -2246,8 +2245,8 @@ void sub_806C658(u8 taskId, s8 directionPressed) break; } - gSprites[spriteId].pos1.x = gUnknown_083768B8[0][gSprites[spriteId].data0].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[0][gSprites[spriteId].data0].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].y; newMenuIndex = gSprites[spriteId].data0; @@ -2295,8 +2294,8 @@ void sub_806C890(u8 taskId) gSprites[spriteId].data1 = 0; gSprites[spriteId].data0 = 6; - gSprites[spriteId].pos1.x = gUnknown_083768B8[0][6].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[0][6].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].y; sub_806BB9C(2); @@ -2381,7 +2380,7 @@ void sub_806CA60(u8 taskId) sub_806C9C4(taskId, ewram01000.unk1); ewram01000.unk2 = sub_806CA00(taskId); - sub_806D538(ewram1B000_alt.unk272, 0); + PrintPartyMenuPromptText(ewram1B000_alt.unk272, 0); sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 6, 0); ewram1B000.unk261 = 2; @@ -2438,7 +2437,7 @@ void sub_806CB74(u8 taskId) void sub_806CC2C(u8 taskId) { DestroySprite(&gSprites[ewram01000.unk1]); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); ewram1B000.unk261 = 2; SwitchTaskToFollowupFunc(ewram01000.unk0); @@ -2826,7 +2825,7 @@ void sub_806D50C(u8 taskId, u8 monIndex) gSprites[GetMonIconSpriteId_maybe(taskId, monIndex)].pos1.x += 0xF0; } -void sub_806D538(u8 textId, u8 b) +void PrintPartyMenuPromptText(u8 textId, u8 b) { if (textId != 0xFF) { @@ -2969,10 +2968,10 @@ void SetMonIconAnim(u8 spriteId, struct Pokemon *pokemon) SetMonIconAnimByHP(spriteId, currentHP, maxHP); } -void CreatePartyMenuMonIcon(u8 taskId, u8 monIndex, u8 c, struct Pokemon *pokemon) +void CreatePartyMenuMonIcon(u8 taskId, u8 monIndex, u8 menuType, struct Pokemon *pokemon) { - u8 x = gUnknown_08376678[c][monIndex].x; - u8 y = gUnknown_08376678[c][monIndex].y; + u8 x = gUnknown_08376678[menuType][monIndex].x; + u8 y = gUnknown_08376678[menuType][monIndex].y; u16 species2 = GetMonData(pokemon, MON_DATA_SPECIES2); u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY); @@ -2982,39 +2981,39 @@ void CreatePartyMenuMonIcon(u8 taskId, u8 monIndex, u8 c, struct Pokemon *pokemo SetMonIconAnim(spriteId, pokemon); } -void TryCreatePartyMenuMonIcon(u8 a, u8 monIndex, struct Pokemon *pokemon) +void TryCreatePartyMenuMonIcon(u8 taskId, u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES)) { bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { - CreatePartyMenuMonIcon(a, monIndex, 2, pokemon); + CreatePartyMenuMonIcon(taskId, monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); } else { - CreatePartyMenuMonIcon(a, monIndex, IsDoubleBattle(), pokemon); + CreatePartyMenuMonIcon(taskId, monIndex, IsDoubleBattle(), pokemon); } } } -void unref_sub_806D964(u8 a) +void unref_sub_806D964(u8 taskId) { u8 i; for (i = 0; i < gPlayerPartyCount; i++) { - TryCreatePartyMenuMonIcon(a, i, &gPlayerParty[i]); + TryCreatePartyMenuMonIcon(taskId, i, &gPlayerParty[i]); } } -void CreateMonIcon_806D99C(u8 taskId, u8 monIndex, u8 c, struct UnknownPokemonStruct2 *d) +void CreateMonIcon_806D99C(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) { - u8 x = gUnknown_08376678[c][monIndex].x; - u8 y = gUnknown_08376678[c][monIndex].y; + u8 x = gUnknown_08376678[menuType][monIndex].x; + u8 y = gUnknown_08376678[menuType][monIndex].y; - u8 spriteId = CreateMonIcon(d->species, sub_809D62C, x, y, 5, d->personality); + u8 spriteId = CreateMonIcon(pokemon->species, sub_809D62C, x, y, 5, pokemon->personality); SetMonIconSpriteId_maybe(taskId, monIndex, spriteId); - SetMonIconAnimByHP(spriteId, d->hp, d->maxhp); + SetMonIconAnimByHP(spriteId, pokemon->hp, pokemon->maxhp); } void UpdateMonIconFrame_806DA0C(struct Sprite *sprite) @@ -3063,8 +3062,8 @@ void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c) void LoadHeldItemIconGraphics(void) { - LoadSpriteSheet(&gUnknown_083765DC); - LoadSpritePalette(&gUnknown_083765E4); + LoadSpriteSheet(&HeldItemsSpriteSheet); + LoadSpritePalette(&HeldItemsPalette); } void SpriteCB_HeldItemIcon(struct Sprite *sprite) @@ -3488,7 +3487,7 @@ void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon) bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { - PrintPartyMenuMonNickname(monIndex, 2, pokemon); + PrintPartyMenuMonNickname(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); } else { @@ -3513,11 +3512,11 @@ u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer) return StringGetEnd10(stringBuffer); } -void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status) +void PartyMenuPutStatusTilemap(u8 monIndex, u8 menuLayout, u8 status) { u8 i; - u8 x = gUnknown_08376738[b][monIndex].x - 1; - u8 y = gUnknown_08376738[b][monIndex].y + 1; + u8 x = gUnknown_08376738[menuLayout][monIndex].x - 1; + u8 y = gUnknown_08376738[menuLayout][monIndex].y + 1; u16 *vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); u8 var1 = status * 4; @@ -3530,7 +3529,7 @@ void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status) static void PartyMenuClearLevelStatusTilemap(u8 monIndex) { bool8 isLinkDoubleBattle; - u8 b; + u8 menuLayout; u8 x; u8 y; u16 *vramPtr; @@ -3539,15 +3538,15 @@ static void PartyMenuClearLevelStatusTilemap(u8 monIndex) isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { - b = 2; + menuLayout = PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE; } else { - b = IsDoubleBattle(); + menuLayout = IsDoubleBattle(); } - x = gUnknown_08376738[b][monIndex].x - 1; - y = gUnknown_08376738[b][monIndex].y + 1; + x = gUnknown_08376738[menuLayout][monIndex].x - 1; + y = gUnknown_08376738[menuLayout][monIndex].y + 1; vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); for (i = 0; i < 4; i++) @@ -3562,12 +3561,12 @@ static void PartyMenuWriteTilemap(u8 a, u8 x, u8 y) *vramPtr = a + 0x10C; } -void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level) +void PartyMenuDoPrintLevel(u8 monIndex, u8 menuLayout, u8 level) { u8 *stringVar; u32 var1; - u8 x = gUnknown_08376738[b][monIndex].x; - u8 y = gUnknown_08376738[b][monIndex].y; + u8 x = gUnknown_08376738[menuLayout][monIndex].x; + u8 y = gUnknown_08376738[menuLayout][monIndex].y; PartyMenuWriteTilemap(0x40, x - 1, y + 1); @@ -3584,10 +3583,10 @@ void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level) CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x200 + (monIndex * 0x400)), 32); } -void PartyMenuPrintLevel(u8 monIndex, u8 b, struct Pokemon *pokemon) +void PartyMenuPrintLevel(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon) { u16 level = GetMonData(pokemon, MON_DATA_LEVEL); - PartyMenuDoPrintLevel(monIndex, b, level); + PartyMenuDoPrintLevel(monIndex, menuLayout, level); } void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) @@ -3596,30 +3595,30 @@ void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) { u8 statusAndPkrs; bool8 isLinkDoubleBattle; - u8 b; + u8 menuLayout; statusAndPkrs = GetMonStatusAndPokerus(pokemon); isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { - b = 2; + menuLayout = PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE; } else { - b = IsDoubleBattle(); + menuLayout = IsDoubleBattle(); } if (statusAndPkrs != 0 && statusAndPkrs != 6) { - PartyMenuPutStatusTilemap(monIndex, b, statusAndPkrs - 1); + PartyMenuPutStatusTilemap(monIndex, menuLayout, statusAndPkrs - 1); } else { - PartyMenuPrintLevel(monIndex, b, pokemon); + PartyMenuPrintLevel(monIndex, menuLayout, pokemon); } - PartyMenuPrintGenderIcon(monIndex, b, pokemon); + PartyMenuPrintGenderIcon(monIndex, menuLayout, pokemon); } } @@ -3633,12 +3632,12 @@ void PartyMenuPrintMonsLevelOrStatus(void) } } -void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 c, u8 monIndex, u8 *nickname) +void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 menuLayout, u8 monIndex, u8 *nickname) { if (!ShouldHideGenderIcon(species, nickname)) { - u8 x = gUnknown_08376738[c][monIndex].x + 3; - u8 y = gUnknown_08376738[c][monIndex].y + 1; + u8 x = gUnknown_08376738[menuLayout][monIndex].x + 3; + u8 y = gUnknown_08376738[menuLayout][monIndex].y + 1; switch (gender) { @@ -3652,7 +3651,7 @@ void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 c, u8 monIndex, u8 *n } } -void PartyMenuPrintGenderIcon(u8 monIndex, u8 b, struct Pokemon *pokemon) +void PartyMenuPrintGenderIcon(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon) { u16 species2; u8 gender; @@ -3660,7 +3659,7 @@ void PartyMenuPrintGenderIcon(u8 monIndex, u8 b, struct Pokemon *pokemon) GetMonNickname(pokemon, gStringVar1); species2 = GetMonData(pokemon, MON_DATA_SPECIES2); gender = GetMonGender(pokemon); - PartyMenuDoPrintGenderIcon(species2, gender, b, monIndex, gStringVar1); + PartyMenuDoPrintGenderIcon(species2, gender, menuLayout, monIndex, gStringVar1); } void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) @@ -3696,7 +3695,7 @@ void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { - PartyMenuPrintHP(monIndex, 2, pokemon); + PartyMenuPrintHP(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); } else { @@ -3720,7 +3719,7 @@ void unref_sub_806E568(void) { } void nullsub_12(u8 monIndex, struct Pokemon *pokemon) { } void nullsub_13(void) { } -void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) +void PartyMenuDoDrawHPBar(u8 monIndex, u8 menuLayout, u16 currentHP, u16 maxHP) { u8 hpBarLevel; u16 *vramPtr; @@ -3746,7 +3745,7 @@ void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) battleInterface.unk10 = 0x100; - vramPtr = gUnknown_08376858[b][monIndex]; + vramPtr = gUnknown_08376858[menuLayout][monIndex]; sub_80460C8(&battleInterface, &var, vramPtr, 0); vramPtr -= 2; @@ -3756,12 +3755,12 @@ void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) vramPtr[8] = 0x310B; } -void PartyMenuDrawHPBar(u8 monIndex, u8 b, struct Pokemon *pokemon) +void PartyMenuDrawHPBar(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon) { u16 currentHP = GetMonData(pokemon, MON_DATA_HP); u16 maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); - PartyMenuDoDrawHPBar(monIndex, b, currentHP, maxHP); + PartyMenuDoDrawHPBar(monIndex, menuLayout, currentHP, maxHP); } void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) @@ -3771,7 +3770,7 @@ void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) bool8 isDoubleBattle = IsLinkDoubleBattle(); if (isDoubleBattle == TRUE) { - PartyMenuDrawHPBar(monIndex, 2, pokemon); + PartyMenuDrawHPBar(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); } else { @@ -4539,10 +4538,10 @@ bool8 IsHPRecoveryItem(u16 item) return FALSE; } -void PartyMenuUpdateLevelOrStatus(struct Pokemon *pkmn, u8 b) +void PartyMenuUpdateLevelOrStatus(struct Pokemon *pkmn, u8 monIndex) { - PartyMenuClearLevelStatusTilemap(b); - PartyMenuPrintMonLevelOrStatus(b, pkmn); + PartyMenuClearLevelStatusTilemap(monIndex); + PartyMenuPrintMonLevelOrStatus(monIndex, pkmn); } void GetMedicineItemEffectMessage(u16 item) @@ -4861,7 +4860,7 @@ void DoPPRecoveryItemEffect(u8 taskId, u16 item, TaskFunc c) else { PlaySE(SE_SELECT); - sub_806D538(10, 3); + PrintPartyMenuPromptText(10, 3); CreateItemUseMoveMenu(ewram1C000.unk5); gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput; gMain.newKeys = 0; @@ -4885,7 +4884,7 @@ void ItemUseMoveMenu_HandleCancel(u8 taskId) gTasks[ewram1C000.unk4].func = HandleBattlePartyMenu; else gTasks[ewram1C000.unk4].func = sub_808B0C0; - sub_806D538(3, 0); + PrintPartyMenuPromptText(3, 0); DestroyTask(taskId); } @@ -4917,7 +4916,7 @@ void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) gTasks[taskId].func = TaskDummy; sub_806E8D0(taskId, b, c); PlaySE(SE_SELECT); - sub_806D538(11, 3); + PrintPartyMenuPromptText(11, 3); CreateItemUseMoveMenu(ewram1C000.unk5); CreateTask(Task_HandleItemUseMoveMenuInput, 5); gMain.newKeys = 0; diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 2c3d4b61d..5a13b99fb 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -228,7 +228,7 @@ static void sub_8089A8C(void) static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order, u8 arg6) { - sub_806D538(5, arg6); + PrintPartyMenuPromptText(5, arg6); MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (noOfOptions * 2) + arg1 + 1); PrintMenuItemsReordered(arg0 + 1, arg1 + 1, noOfOptions, menuActions, order); } @@ -326,8 +326,8 @@ static void sub_8089EBC(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_8089E84(); SetMainCallback2(CB2_PartyMenuMain); @@ -339,7 +339,7 @@ static void sub_8089EBC(void) static void sub_8089F14(void) { gPaletteFade.bufferTransferDisabled = 1; - sub_806AF4C(0, 0xFF, sub_8089D94, 5); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_8089D94, 5); SetMainCallback2(sub_8089EBC); } @@ -401,7 +401,7 @@ static void sub_808A060(u8 taskID) static void sub_808A100(u8 taskID) { ShowPartyPopupMenu(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0); - sub_806D538(0xD, 2); + PrintPartyMenuPromptText(0xD, 2); gTasks[taskID].func = sub_808A060; } @@ -428,7 +428,7 @@ static void sub_808A1E0(u8 taskID) if (gUnknown_0202E8F6 != 1) { SetHeldItemIconVisibility(taskID, sub_806CA38(taskID)); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); gTasks[taskID].func = HandleDefaultPartyMenu; } } @@ -443,7 +443,7 @@ static void sub_808A228(u8 taskID) else { MenuZeroFillWindowRect(0, 0, 29, 19); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); gTasks[taskID].func = HandleDefaultPartyMenu; } } @@ -477,8 +477,8 @@ static void sub_808A358(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -493,8 +493,8 @@ static void sub_808A3A4(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); EWRAM_1B000.unk262 = 3; sub_8089E84(); SetMainCallback2(CB2_PartyMenuMain); @@ -525,12 +525,12 @@ void sub_808A3F8(void) gPaletteFade.bufferTransferDisabled = 1; if (gScriptItemId) { - sub_806AF4C(0, 0xFF, sub_808A2AC, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A2AC, 0xFF); SetMainCallback2(sub_808A358); } else { - sub_806AF4C(0, 0xFF, sub_8089D94, 5); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_8089D94, 5); SetMainCallback2(sub_808A3A4); } } @@ -541,8 +541,8 @@ static void sub_808A4D4(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -561,10 +561,10 @@ void sub_808A520(void) AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1); TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]); SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8); - sub_806AF4C(0, 0xFF, HandleDefaultPartyMenu, 0); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, HandleDefaultPartyMenu, 0); } else - sub_806AF4C(0, 0xFF, sub_808A5BC, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A5BC, 0xFF); SetMainCallback2(sub_808A4D4); } @@ -680,7 +680,7 @@ static void sub_808A8D4(u8 taskID) { sPokeMenuCursorPos = 0; MenuZeroFillWindowRect(19, 0, 29, 19); - sub_806D538(0, 0); + PrintPartyMenuPromptText(0, 0); gTasks[taskID].func = HandleDefaultPartyMenu; } @@ -717,9 +717,9 @@ static void PokemonMenu_FieldMove(u8 taskID) { MenuZeroFillWindowRect(19, 0, 29, 19); if (IS_SOFTBOILED_MILKDRINK(tFieldMoveId)) - sub_806D538(9, 0); + PrintPartyMenuPromptText(9, 0); else - sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0); + PrintPartyMenuPromptText(sFieldMoveFuncs[tFieldMoveId].field_1, 0); gTasks[taskID].func = sub_808ABF4; } else if (tFieldMoveId <= 7 && FlagGet(BADGE01_GET + tFieldMoveId) != TRUE) @@ -747,9 +747,9 @@ static void PokemonMenu_FieldMove(u8 taskID) { MenuZeroFillWindowRect(19, 0, 29, 19); if (IS_SURF(tFieldMoveId) && TestPlayerAvatarFlags(8)) - sub_806D538(8, 0); + PrintPartyMenuPromptText(8, 0); else - sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0); + PrintPartyMenuPromptText(sFieldMoveFuncs[tFieldMoveId].field_1, 0); gTasks[taskID].func = sub_808ABF4; } } @@ -850,8 +850,8 @@ static void sub_808AD0C(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -863,7 +863,7 @@ static void sub_808AD0C(void) void sub_808AD58(void) { gPaletteFade.bufferTransferDisabled = 1; - sub_806AF4C(0, 0xFF, HandleDefaultPartyMenu, 0); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, HandleDefaultPartyMenu, 0); SetMainCallback2(sub_808AD0C); } @@ -967,8 +967,8 @@ static void sub_808AF80(void) } if (gLastFieldPokeMenuOpened > 5 || !GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES)) gLastFieldPokeMenuOpened = 0; - sub_806C994(ewram1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(ewram1B000.unk260, 0); + sub_806C994(ewram1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(ewram1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -984,16 +984,16 @@ void sub_808B020(void) { case 0: if (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId) == 1) - sub_806AF4C(0, 0, sub_808B0C0, 20); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 20); else - sub_806AF4C(0, 0, sub_808B0C0, 3); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 3); break; case 4: - sub_806AF4C(0, 0, sub_808B1EC, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B1EC, 0xFF); break; case 1: case 3: - sub_806AF4C(0, 0, sub_808B0C0, 4); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 4); break; } SetMainCallback2(sub_808AF80); @@ -1105,8 +1105,8 @@ static void sub_808B3A0(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -1133,7 +1133,7 @@ static void sub_808B3EC(void) } else { - sub_806AF4C(0, 0, sub_808B4A4, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B4A4, 0xFF); callback = sub_808B3A0; } SetMainCallback2(callback); @@ -1165,8 +1165,8 @@ static void sub_808B518(void) { if (InitPartyMenu() == TRUE) { - sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.unk260, 0); + sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -1179,9 +1179,9 @@ void sub_808B564(void) { gPaletteFade.bufferTransferDisabled = 1; if (sub_809FA30() != 4) - sub_806AF4C(0, 0, TaughtMove, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, TaughtMove, 0xFF); else - sub_806AF4C(0, 0, StopTryingToTeachMove_806F588, 0xFF); + SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, StopTryingToTeachMove_806F588, 0xFF); SetMainCallback2(sub_808B518); } diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 73fafa184..57b670de3 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -68,62 +68,62 @@ void OpenPartyMenuFromScriptContext(u8 taskId) bool8 SetupContestPartyMenu(void) { - switch (EWRAM_1B000.unk264) + switch (EWRAM_1B000.setupState) { case 0: - if (EWRAM_1B000.unk266 < gPlayerPartyCount) + if (EWRAM_1B000.monIndex < gPlayerPartyCount) { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; + TryCreatePartyMenuMonIcon(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex, &gPlayerParty[EWRAM_1B000.monIndex]); + EWRAM_1B000.monIndex++; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } break; case 1: LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; + CreateHeldItemIcons_806DC34(EWRAM_1B000.menuHandlerTaskId); + EWRAM_1B000.setupState++; break; case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + if (sub_806BD58(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex) != 1) { - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; break; } case 4: PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 6: sub_80F9C00(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.unk266) != 1) + if (sub_806B58C(EWRAM_1B000.monIndex) != 1) { - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState = 0; return TRUE; } } @@ -175,62 +175,62 @@ void HandleSelectPartyMenu(u8 var) bool8 SetupMoveTutorPartyMenu(void) { - switch (EWRAM_1B000.unk264) + switch (EWRAM_1B000.setupState) { case 0: - if (EWRAM_1B000.unk266 < gPlayerPartyCount) + if (EWRAM_1B000.monIndex < gPlayerPartyCount) { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; + TryCreatePartyMenuMonIcon(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex, &gPlayerParty[EWRAM_1B000.monIndex]); + EWRAM_1B000.monIndex++; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; } break; case 1: LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; + CreateHeldItemIcons_806DC34(EWRAM_1B000.menuHandlerTaskId); + EWRAM_1B000.setupState++; break; case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + if (sub_806BD58(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex) != 1) { - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState++; break; } case 4: PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 5: PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 6: sub_80F9E1C(); - EWRAM_1B000.unk264++; + EWRAM_1B000.setupState++; break; case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.unk266) != 1) + if (sub_806B58C(EWRAM_1B000.monIndex) != 1) { - EWRAM_1B000.unk266++; + EWRAM_1B000.monIndex++; break; } else { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; + EWRAM_1B000.monIndex = 0; + EWRAM_1B000.setupState = 0; return TRUE; } } -- cgit v1.2.3 From 3a5020764fe3f26e8003487eff5d25b425a277a7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 10 Oct 2017 19:21:23 -0700 Subject: Add more party_menu documentation --- src/battle/battle_2.c | 14 -- src/battle/battle_party_menu.c | 29 ++-- src/field/choose_party.c | 40 ++---- src/field/fldeff_softboiled.c | 4 +- src/field/party_menu.c | 274 ++++++++++++++++++-------------------- src/pokemon/pokemon_menu.c | 36 ++--- src/script_pokemon_util_80F99CC.c | 21 ++- 7 files changed, 188 insertions(+), 230 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 75358e636..a447cf498 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -53,20 +53,6 @@ struct UnknownStruct8 u8 unk1A; }; -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - struct UnknownStruct12 { u32 unk0; diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 961be6d02..2f6dc6816 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -25,7 +25,6 @@ extern u8 ewram[]; extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void nullsub_13(void); -extern u8 sub_806B58C(u8); extern void sub_802E414(void); extern void sub_80A6DCC(void); extern u8 *sub_8040D08(); @@ -418,7 +417,7 @@ bool8 SetUpBattlePartyMenu(void) EWRAM_1B000.setupState++; break; case 9: - if (sub_806B58C(EWRAM_1B000.monIndex) == 1) + if (DrawPartyMonBackground(EWRAM_1B000.monIndex) == 1) { EWRAM_1B000.monIndex = 0; EWRAM_1B000.setupState++; @@ -463,38 +462,38 @@ static void sub_8095050(u8 a, u8 b) ShowPartyPopupMenu(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); } -void HandleBattlePartyMenu(u8 a) +void HandleBattlePartyMenu(u8 taskId) { if (!gPaletteFade.active) { if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) { - gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); + gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4); return; } - switch (sub_806BD80(a)) + switch (HandleDefaultPartyMenuInput(taskId)) { - case 1: + case A_BUTTON: if (gUnknown_02038473 == 3) { - if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) + if (GetMonData(&gPlayerParty[sub_806CA38(taskId)], MON_DATA_IS_EGG)) PlaySE(SE_HAZURE); else { sub_806D5A4(); - gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); + gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4); } } else { PlaySE(SE_SELECT); - GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); - sub_8095050(a, sub_806CA38(a)); - SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, HandleBattlePartyMenu); + GetMonNickname(&gPlayerParty[sub_806CA38(taskId)], gStringVar1); + sub_8095050(taskId, sub_806CA38(taskId)); + SetTaskFuncWithFollowupFunc(taskId, Task_HandlePopupMenuInput, HandleBattlePartyMenu); } break; - case 2: + case B_BUTTON: if (gUnknown_02038473 == 1) PlaySE(SE_HAZURE); else @@ -503,12 +502,12 @@ void HandleBattlePartyMenu(u8 a) if (gUnknown_02038473 == 3) { gUnknown_0202E8F4 = 0; - gTasks[a].func = Task_80952E4; + gTasks[taskId].func = Task_80952E4; } else { gUnknown_0202E8F4 = 0; - gTasks[a].func = Task_809527C; + gTasks[taskId].func = Task_809527C; } } break; @@ -567,7 +566,7 @@ static void Task_809538C(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); sub_8095050(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); SetTaskFuncWithFollowupFunc(EWRAM_1B000.menuHandlerTaskId, Task_HandlePopupMenuInput, HandleBattlePartyMenu); diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 2b5407753..f35dcdf56 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -18,20 +18,6 @@ #include "task.h" #include "text.h" -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; extern u8 gUnknown_020384F0; @@ -45,9 +31,7 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); -extern u8 sub_806B58C(u8); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); -extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); @@ -161,7 +145,7 @@ bool8 SetupBattleTowerPartyMenu(void) ewram1B000_alt.setupState++; break; case 7: - if (sub_806B58C(ewram1B000_alt.monIndex) == 1) + if (DrawPartyMonBackground(ewram1B000_alt.monIndex) == 1) { ewram1B000_alt.monIndex = 0; ewram1B000_alt.setupState = 0; @@ -300,9 +284,9 @@ void HandleBattleTowerPartyMenu(u8 taskId) { if (!gPaletteFade.active) { - switch (sub_806BE38(taskId)) + switch (HandleBattleTowerPartyMenuInput(taskId)) { - case 1: + case A_BUTTON: PlaySE(SE_SELECT); gLastFieldPokeMenuOpened = sub_806CA38(taskId); if (gLastFieldPokeMenuOpened != 6) @@ -317,7 +301,7 @@ void HandleBattleTowerPartyMenu(u8 taskId) } sub_808B5B4(taskId); break; - case 2: + case B_BUTTON: PlaySE(SE_SELECT); ClearPartySelection(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); @@ -421,7 +405,7 @@ static void sub_8122530(void) if (InitPartyMenu() == TRUE) { sub_806C994(ewram1B000.menuHandlerTaskId, gUnknown_020384F0); - sub_806C658(ewram1B000.menuHandlerTaskId, 0); + ChangeBattleTowerPartyMenuSelection(ewram1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_81221F8(ewram1B000.menuHandlerTaskId); @@ -471,7 +455,7 @@ static void BattleTowerEntryMenuCallback_Enter(u8 taskId) gSelectedOrderFromParty[i] = gLastFieldPokeMenuOpened + 1; sub_806BC3C(gLastFieldPokeMenuOpened, i * 14 + 0x1C); if (i == 2) - sub_806C890(taskId); + SelectBattleTowerOKButton(taskId); BattleTowerEntryMenuCallback_Exit(taskId); return; } @@ -580,7 +564,7 @@ static void sub_81228E8(u8 a) CreatePartyMenuMonIcon(a, i, 3, &gPlayerParty[i]); if (gUnknown_02023A00[i].species != 0) { - CreateMonIcon_806D99C(a, i + 3, 3, &gUnknown_02023A00[i]); + CreateMonIcon_LinkMultiBattle(a, i + 3, 3, &gUnknown_02023A00[i]); sub_806D50C(a, i + 3); } } @@ -740,7 +724,7 @@ bool8 unref_sub_8122C60(void) ewram1B000_alt.setupState++; break; case 7: - if (sub_806B58C(ewram1B000_alt.monIndex) == 1) + if (DrawPartyMonBackground(ewram1B000_alt.monIndex) == 1) { ewram1B000_alt.monIndex = 0; ewram1B000_alt.setupState = 0; @@ -797,16 +781,16 @@ void HandleDaycarePartyMenu(u8 taskId) { if (!gPaletteFade.active) { - switch (sub_806BD80(taskId)) + switch (HandleDefaultPartyMenuInput(taskId)) { - case 1: + case A_BUTTON: PlaySE(SE_SELECT); gLastFieldPokeMenuOpened = sub_806CA38(taskId); GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); sub_8122D94(taskId); gTasks[taskId].func = Task_DaycareStorageMenu8122EAC; break; - case 2: + case B_BUTTON: PlaySE(SE_SELECT); gLastFieldPokeMenuOpened = 0xFF; gSpecialVar_0x8004 = 0xFF; @@ -872,7 +856,7 @@ static void sub_8122F90(void) if (InitPartyMenu() == TRUE) { sub_806C994(ewram1B000.menuHandlerTaskId, gUnknown_020384F0); - sub_806BF74(ewram1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(ewram1B000.menuHandlerTaskId, 0); GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_8122D94(ewram1B000.menuHandlerTaskId); diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index d4a757145..22f9c13f5 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -75,7 +75,7 @@ bool8 SetUpFieldMove_SoftBoiled(void) { void sub_8133D28(u8 taskid) { EWRAM_1000.unkC = sub_8133D50; EWRAM_1B000_2.unk272 = 3; - sub_808A004(taskid); + DoPokemonMenu_Switch(taskid); } static void sub_8133D50(u8 taskId) { @@ -133,7 +133,7 @@ static void sub_8133E74(u8 taskId) { MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); PrintPartyMenuPromptText(3, 0); - gTasks[taskId].func = sub_806CB74; + gTasks[taskId].func = HandlePartyMenuSwitchPokemonInput; } static void sub_8133EB8(u8 taskId) { diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 834a5b09d..86ad9ecc9 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -61,7 +61,7 @@ struct PartyMenuHandlersStruct { /*0x0*/TaskFunc menuHandler; /*0x4*/bool8 (*menuSetup)(void); - /*0x8*/u8 initialPromptTextId; // element in gUnknown_08376624 + /*0x8*/u8 initialPromptTextId; // element in PartyMenuPromptTexts }; static void nullsub_12(u8 monIndex, struct Pokemon *pokemon); @@ -76,19 +76,19 @@ static void sub_806D5B8(u8 taskId); static void sub_806D014(u8 taskId); static void sub_806D118(u8 taskId); static void CB2_InitPartyMenu(void); -static void DrawPartyMonBackgrounds(void); +static void ReDrawPartyMonBackgrounds(void); static void sub_806BA94(s16 a, u16 b, u8 c, u8 d); static void sub_806B9A4(s16 a, u16 b, u8 c); static void sub_806CA18(u8 taskId, u8 b); -static void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); -static void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); -static void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed); +static void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed); static void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); static void UpdateMonIconFrame_806DA38(struct Sprite *sprite); static void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); static u8 sub_806CA00(u8 taskId); static void SpriteCB_sub_806D37C(struct Sprite *sprite); -static u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex); +static u8 GetMonIconSpriteId(u8 taskId, u8 monIndex); static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite); static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId); static void ItemUseMoveMenu_HandleCancel(u8 taskId); @@ -221,7 +221,8 @@ static const struct SpriteTemplate gSpriteTemplate_837660C = { SpriteCB_UpdateHeldItemIconPosition }; -static const u8 *const gUnknown_08376624[] = { +// Texts that can be displayed in the bottom of the party menu. +static const u8 *const PartyMenuPromptTexts[] = { OtherText_ChoosePoke, OtherText_MovePokeTo, OtherText_TeachWhat, @@ -482,20 +483,6 @@ struct Unk201FE00 u8 unkE02; }; -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1FE00 (*(struct Unk201FE00 *)(ewram + 0x1FE00)) @@ -611,7 +598,7 @@ void VBlankCB_PartyMenu(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - DrawPartyMonBackgrounds(); + ReDrawPartyMonBackgrounds(); } void SetPartyMenuSettings(u8 menuType, u8 battleTypeFlags, TaskFunc menuHandlerFunc, u8 textId) @@ -693,7 +680,7 @@ bool8 SetupDefaultPartyMenu(void) ewram1B000_alt.setupState++; break; case 9: - if (sub_806B58C(ewram1B000_alt.monIndex) == 1) + if (DrawPartyMonBackground(ewram1B000_alt.monIndex) == 1) { ewram1B000_alt.monIndex = 0; ewram1B000_alt.setupState = 0; @@ -845,7 +832,7 @@ void CB2_InitPartyMenu(void) if (ewram1B000.menuType != PARTY_MENU_TYPE_LINK_MULTI_BATTLE) { - sub_806BF74(ewram1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(ewram1B000.menuHandlerTaskId, 0); } SetMainCallback2(CB2_PartyMenuMain); @@ -880,7 +867,7 @@ bool8 IsLinkDoubleBattle() } // Draws the blue rectangular regions surrounding each of the party mons. -void DrawPartyMonBackgrounds(void) +void ReDrawPartyMonBackgrounds(void) { if (ewram1B000.unk261) { @@ -895,7 +882,7 @@ void DrawPartyMonBackgrounds(void) } } -bool8 sub_806B58C(u8 monIndex) +bool8 DrawPartyMonBackground(u8 monIndex) { const u8 *arr; @@ -1364,6 +1351,7 @@ void unref_sub_806BCB8(u8 a) } } +// This is ultimately unreferenced, since it's caller is unreferenced. void sub_806BCE8() { u8 i; @@ -1401,23 +1389,23 @@ u8 sub_806BD58(u8 taskId, u8 b) } #ifdef NONMATCHING -u16 sub_806BD80(u8 taskId) +u16 HandleDefaultPartyMenuInput(u8 taskId) { s8 menuDirectionPressed = 0x0; switch (gMain.newAndRepeatedKeys) { case DPAD_UP: - menuDirectionPressed = 0xFF; + menuDirectionPressed = -1; break; case DPAD_DOWN: - menuDirectionPressed = 0x1; + menuDirectionPressed = 1; break; case DPAD_LEFT: - menuDirectionPressed = 0xFE; + menuDirectionPressed = -2; break; case DPAD_RIGHT: - menuDirectionPressed = 0x2; + menuDirectionPressed = 2; break; } @@ -1427,10 +1415,10 @@ u16 sub_806BD80(u8 taskId) switch (var1) { case 1: - menuDirectionPressed = 0xFF; + menuDirectionPressed = -1; break; case 2: - menuDirectionPressed = 0x1; + menuDirectionPressed = 1; break; } @@ -1448,12 +1436,12 @@ u16 sub_806BD80(u8 taskId) } } - sub_806BF74(taskId, menuDirectionPressed); + ChangePartyMenuSelection(taskId, menuDirectionPressed); return gMain.newAndRepeatedKeys; } #else __attribute__((naked)) -u16 sub_806BD80(u8 taskId) +u16 HandleDefaultPartyMenuInput(u8 taskId) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -1512,7 +1500,7 @@ _0806BDD6:\n\ _0806BDDC:\n\ asrs r1, r0, 24\n\ adds r0, r5, 0\n\ - bl sub_806BF74\n\ + bl ChangePartyMenuSelection\n\ ldr r0, _0806BDEC @ =gMain\n\ ldrh r0, [r0, 0x30]\n\ b _0806BE2C\n\ @@ -1558,7 +1546,7 @@ _0806BE34: .4byte gMain\n\ } #endif // NONMATCHING -u16 sub_806BE38(u8 taskId) +u16 HandleBattleTowerPartyMenuInput(u8 taskId) { u8 menuDirectionPressed = 0x0; @@ -1594,7 +1582,7 @@ u16 sub_806BE38(u8 taskId) if (gMain.newKeys & START_BUTTON) { - sub_806C890(taskId); + SelectBattleTowerOKButton(taskId); return START_BUTTON; } else @@ -1602,7 +1590,7 @@ u16 sub_806BE38(u8 taskId) s8 signedMenuDirection = menuDirectionPressed; if (signedMenuDirection) { - sub_806C658(taskId, signedMenuDirection); + ChangeBattleTowerPartyMenuSelection(taskId, signedMenuDirection); return gMain.newAndRepeatedKeys; } else @@ -1639,7 +1627,7 @@ void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d) task_pc_turn_off(a, c); } -void sub_806BF74(u8 taskId, s8 directionPressed) +void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) { bool8 isLinkDoubleBattle; u8 spriteId = sub_806CA00(taskId); @@ -1657,7 +1645,7 @@ void sub_806BF74(u8 taskId, s8 directionPressed) if (menuIndex == 7) sub_806BBEC(1); - sub_806C490(spriteId, menuIndex, directionPressed); + ChangeLinkDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed); if (gSprites[spriteId].data0 == 0 || gSprites[spriteId].data0 == 2 || gSprites[spriteId].data0 == 3) sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); @@ -1675,7 +1663,7 @@ void sub_806BF74(u8 taskId, s8 directionPressed) { u8 isDoubleBattle = IsDoubleBattle(); - if (menuIndex <= PARTY_SIZE - 1) + if (menuIndex < PARTY_SIZE) { sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + menuIndex * 2], menuIndex, 3, 0); } @@ -1686,14 +1674,14 @@ void sub_806BF74(u8 taskId, s8 directionPressed) if (!isDoubleBattle) { - sub_806C1E4(spriteId, menuIndex, directionPressed); + ChangeDefaultPartyMenuSelection(spriteId, menuIndex, directionPressed); } else { - sub_806C310(spriteId, menuIndex, directionPressed); + ChangeDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed); } - if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + if (gSprites[spriteId].data0 < PARTY_SIZE) { sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); } @@ -1716,17 +1704,17 @@ void sub_806BF74(u8 taskId, s8 directionPressed) } } -void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) +void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) { - u8 var1; + u8 nextIndex; s8 menuMovement = directionPressed + 2; switch (menuMovement) { - case 2: + case 2: // no movement gSprites[spriteId].data1 = 0; break; - case 1: + case 1: // moving up if (menuIndex == 0) { gSprites[spriteId].data0 = 7; } else if (menuIndex == 7) { @@ -1738,7 +1726,7 @@ void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 3: + case 3: // moving down if (menuIndex == gPlayerPartyCount - 1) { gSprites[spriteId].data0 = 7; } else if (menuIndex == 7) { @@ -1750,7 +1738,7 @@ void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 4: + case 4: // moving right if (gPlayerPartyCount > 1 && menuIndex == 0) { if (gSprites[spriteId].data1 == 0) @@ -1759,9 +1747,10 @@ void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data0 = gSprites[spriteId].data1; } break; - case 0: - var1 = menuIndex - 1; - if (var1 <= 4) { + case 0: // moving left + // Only move the selection to the left side if one of the mons in the right-hand column are currently selected + nextIndex = menuIndex - 1; + if (nextIndex <= 4) { gSprites[spriteId].data0 = 0; gSprites[spriteId].data1 = menuIndex; } @@ -1769,17 +1758,17 @@ void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) } } -void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) +void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) { - u8 var3; + u8 var1; s8 menuMovement = directionPressed + 2; switch(menuMovement) { - case 2: + case 2: // no movement gSprites[spriteId].data1 = 0; break; - case 3: + case 3: // moving down if (menuIndex == 7) { gSprites[spriteId].data0 = 0; } else if (menuIndex == gPlayerPartyCount - 1) { @@ -1791,7 +1780,7 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 1: + case 1: // moving up if (menuIndex == 0) { gSprites[spriteId].data0 = 7; } else if (menuIndex == 7) { @@ -1803,7 +1792,7 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 4: + case 4: // moving right if (menuIndex == 0) { if (gPlayerPartyCount > 2) { u16 var1 = gSprites[spriteId].data1 - 2; @@ -1823,9 +1812,9 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) } } break; - case 0: - var3 = menuIndex - 2; - if (var3 <= 1) { + case 0: // moving left + var1 = menuIndex - 2; + if (var1 <= 1) { gSprites[spriteId].data0 = 0; gSprites[spriteId].data1 = menuIndex; } else { @@ -1840,7 +1829,7 @@ void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) } #ifdef NONMATCHING -void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) { s8 menuMovement; u16 var1; @@ -1849,10 +1838,10 @@ void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) menuMovement = directionPressed + 2; switch (menuMovement) { - case 2: + case 2: // no movement gSprites[spriteId].data1 = 0; break; - case 3: + case 3: // moving down if (menuIndex == 7) { gSprites[spriteId].data0 = 0; } else { @@ -1871,7 +1860,7 @@ void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 1: + case 1: // moving up while (menuIndex != 0) { menuIndex--; if (menuIndex != PARTY_SIZE && GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) @@ -1885,7 +1874,7 @@ void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) gSprites[spriteId].data0 = 7; gSprites[spriteId].data1 = 0; break; - case 4: + case 4: // moving right if (menuIndex == 0) { var1 = gSprites[spriteId].data1 - 2; if (var1 > 1) { @@ -1910,7 +1899,7 @@ void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) } } break; - case 0: + case 0: // moving left var2 = menuIndex - 2; if (var2 <= 1) { gSprites[spriteId].data0 = 0; @@ -1929,7 +1918,7 @@ void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) #else __attribute__((naked)) -void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -2171,8 +2160,7 @@ _0806C654: .4byte gSprites\n\ } #endif // NONMATCHING -// directionPressed = -2 for left, 2 for right, 1 for down, -1 for up -void sub_806C658(u8 taskId, s8 directionPressed) +void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) { u16 newMenuIndex; u8 newMenuIndex2; @@ -2200,10 +2188,10 @@ void sub_806C658(u8 taskId, s8 directionPressed) switch (menuMovement) { - case 2: + case 2: // no movement gSprites[spriteId].data1 = 0; break; - case 1: + case 1: // moving up if (menuIndex == 0) { gSprites[spriteId].data0 = 7; } else if (menuIndex == PARTY_SIZE) { @@ -2214,7 +2202,7 @@ void sub_806C658(u8 taskId, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 3: + case 3: // moving down if (menuIndex == gPlayerPartyCount - 1) { gSprites[spriteId].data0 = 6; } else if (menuIndex == 7) { @@ -2225,7 +2213,7 @@ void sub_806C658(u8 taskId, s8 directionPressed) gSprites[spriteId].data1 = 0; break; - case 4: + case 4: // moving right if (gPlayerPartyCount > 1 && menuIndex == 0) { if (gSprites[spriteId].data1 == 0) { @@ -2235,7 +2223,7 @@ void sub_806C658(u8 taskId, s8 directionPressed) gSprites[spriteId].data0 = gSprites[spriteId].data1; } break; - case 0: + case 0: // moving left newMenuIndex3 = menuIndex - 1; if (newMenuIndex3 <= 4) { @@ -2250,7 +2238,7 @@ void sub_806C658(u8 taskId, s8 directionPressed) newMenuIndex = gSprites[spriteId].data0; - if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + if (gSprites[spriteId].data0 < PARTY_SIZE) { sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data0 * 2], newMenuIndex, 3, 1); } @@ -2274,18 +2262,19 @@ void sub_806C658(u8 taskId, s8 directionPressed) } } -void sub_806C890(u8 taskId) +// Selects the "OK" button in the Battle Tower party menu. +void SelectBattleTowerOKButton(u8 taskId) { u8 spriteId = sub_806CA00(taskId); - u8 monIndex = gSprites[spriteId].data0; - if (monIndex != 6) + u8 menuIndex = gSprites[spriteId].data0; + if (menuIndex != 6) { - UpdateMonIconFrame_806DA44(taskId, monIndex, 0); + UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); - if (monIndex < PARTY_SIZE) + if (menuIndex < PARTY_SIZE) { - sub_806BF24(&gUnknown_083769A8[monIndex * 2], monIndex, 3, 0); + sub_806BF24(&gUnknown_083769A8[menuIndex * 2], menuIndex, 3, 0); } else { @@ -2306,33 +2295,33 @@ void sub_806C890(u8 taskId) void sub_806C92C(u8 spriteId) { - u8 monIndex1 = gSprites[spriteId].data0; - u8 monIndex2 = gSprites[spriteId].data1; + u8 menuIndex1 = gSprites[spriteId].data0; + u8 menuIndex2 = gSprites[spriteId].data1; if (!IsDoubleBattle()) { - if (monIndex1 < 1) { - if (monIndex2 < 1) { - monIndex2 = 1; + if (menuIndex1 < 1) { + if (menuIndex2 < 1) { + menuIndex2 = 1; } } else { - if (monIndex2 >= 1) { - monIndex2 = 0; + if (menuIndex2 >= 1) { + menuIndex2 = 0; } } } else { - if (monIndex1 < 2) { - if (monIndex2 < 2) { - monIndex2 = 2; + if (menuIndex1 < 2) { + if (menuIndex2 < 2) { + menuIndex2 = 2; } } else { - if (monIndex2 >= 2) { - monIndex2 = 0; + if (menuIndex2 >= 2) { + menuIndex2 = 0; } } } - gSprites[spriteId].data1 = monIndex2; + gSprites[spriteId].data1 = menuIndex2; } void sub_806C994(u8 taskId, u8 b) @@ -2369,12 +2358,12 @@ u8 sub_806CA38(u8 taskId) return gSprites[spriteId].data0; } -void sub_806CA60(u8 taskId) +void SetupDefaultPartyMenuSwitchPokemon(u8 taskId) { gTasks[taskId].func = TaskDummy; ewram01000.unk0 = taskId; - CreateTask(sub_806CB74, 0); + CreateTask(HandlePartyMenuSwitchPokemonInput, 0); ewram01000.unk1 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); sub_806C9C4(taskId, ewram01000.unk1); @@ -2386,12 +2375,13 @@ void sub_806CA60(u8 taskId) ewram1B000.unk261 = 2; } -void sub_806CAFC(u8 a, s16 b) +// Handles changing the the current mon selection when choosing mons to swap places. +void ChangePartyMenuSwitchPokemonSelection(u8 taskId, s16 menuDirectionPressed) { struct Sprite *sprite1 = &gSprites[ewram01000.unk1]; struct Sprite *sprite2 = &gSprites[ewram01000.unk2]; - sub_806BF74(a, b); + ChangePartyMenuSelection(taskId, menuDirectionPressed); if (sprite1->data0 != sprite2->data0) { @@ -2403,21 +2393,21 @@ void sub_806CAFC(u8 a, s16 b) } } -void sub_806CB74(u8 taskId) +void HandlePartyMenuSwitchPokemonInput(u8 taskId) { switch (gMain.newAndRepeatedKeys) { case DPAD_UP: - sub_806CAFC(ewram01000.unk0, -1); + ChangePartyMenuSwitchPokemonSelection(ewram01000.unk0, -1); break; case DPAD_DOWN: - sub_806CAFC(ewram01000.unk0, 1); + ChangePartyMenuSwitchPokemonSelection(ewram01000.unk0, 1); break; case DPAD_LEFT: - sub_806CAFC(ewram01000.unk0, -2); + ChangePartyMenuSwitchPokemonSelection(ewram01000.unk0, -2); break; case DPAD_RIGHT: - sub_806CAFC(ewram01000.unk0, 2); + ChangePartyMenuSwitchPokemonSelection(ewram01000.unk0, 2); break; } @@ -2500,8 +2490,8 @@ void sub_806CD5C(u8 taskId) ewram01000.unk6 = monIndex2; } - ewram01000.unk3 = GetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk5); - ewram01000.unk4 = GetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk6); + ewram01000.unk3 = GetMonIconSpriteId(ewram01000.unk0, ewram01000.unk5); + ewram01000.unk4 = GetMonIconSpriteId(ewram01000.unk0, ewram01000.unk6); var1 = ewram01000.unk5; if (!var1) @@ -2536,20 +2526,20 @@ void sub_806CD5C(u8 taskId) } } -void sub_806CEF8(s16 *x, s16 *y) +void SwapValues_s16(s16 *a, s16 *b) { - s16 temp = *x; - *x = *y; - *y = temp; + s16 temp = *a; + *a = *b; + *b = temp; } #ifdef NONMATCHING void sub_806CF04(void) { - sub_806CEF8(&gSprites[ewram01000.unk3].pos1.x, &gSprites[ewram01000.unk4].pos1.x); - sub_806CEF8(&gSprites[ewram01000.unk3].pos1.y, &gSprites[ewram01000.unk4].pos1.y); - sub_806CEF8(&gSprites[ewram01000.unk3].pos2.x, &gSprites[ewram01000.unk4].pos2.x); - sub_806CEF8(&gSprites[ewram01000.unk3].data0, &gSprites[ewram01000.unk4].data0); + SwapValues_s16(&gSprites[ewram01000.unk3].pos1.x, &gSprites[ewram01000.unk4].pos1.x); + SwapValues_s16(&gSprites[ewram01000.unk3].pos1.y, &gSprites[ewram01000.unk4].pos1.y); + SwapValues_s16(&gSprites[ewram01000.unk3].pos2.x, &gSprites[ewram01000.unk4].pos2.x); + SwapValues_s16(&gSprites[ewram01000.unk3].data0, &gSprites[ewram01000.unk4].data0); gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C; gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C; @@ -2572,7 +2562,7 @@ void sub_806CF04(void) adds r1, r2\n\ lsls r1, 2\n\ adds r1, r5\n\ - bl sub_806CEF8\n\ + bl SwapValues_s16\n\ ldrb r1, [r4, 0x3]\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ @@ -2584,7 +2574,7 @@ void sub_806CF04(void) adds r1, r2\n\ lsls r1, 2\n\ adds r1, r3\n\ - bl sub_806CEF8\n\ + bl SwapValues_s16\n\ ldrb r1, [r4, 0x3]\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ @@ -2596,7 +2586,7 @@ void sub_806CF04(void) adds r1, r2\n\ lsls r1, 2\n\ adds r1, r3\n\ - bl sub_806CEF8\n\ + bl SwapValues_s16\n\ ldrb r1, [r4, 0x3]\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ @@ -2609,7 +2599,7 @@ void sub_806CF04(void) adds r1, r2\n\ lsls r1, 2\n\ adds r1, r3\n\ - bl sub_806CEF8\n\ + bl SwapValues_s16\n\ ldrb r1, [r4, 0x3]\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ @@ -2726,8 +2716,8 @@ void sub_806D198(u8 taskId) { u8 spriteId; - SetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk5, ewram01000.unk4); - SetMonIconSpriteId_maybe(ewram01000.unk0, ewram01000.unk6, ewram01000.unk3); + SetMonIconSpriteId(ewram01000.unk0, ewram01000.unk5, ewram01000.unk4); + SetMonIconSpriteId(ewram01000.unk0, ewram01000.unk6, ewram01000.unk3); gSprites[ewram01000.unk3].pos1.x = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk6].x; gSprites[ewram01000.unk3].pos1.y = gUnknown_08376678[IsDoubleBattle()][ewram01000.unk6].y; @@ -2741,7 +2731,7 @@ void sub_806D198(u8 taskId) gSprites[ewram01000.unk4].pos2.y = 0; gSprites[ewram01000.unk4].callback = UpdateMonIconFrame_806DA38; - spriteId = GetMonIconSpriteId_maybe(ewram01000.unk0, gSprites[ewram01000.unk2].data0); + spriteId = GetMonIconSpriteId(ewram01000.unk0, gSprites[ewram01000.unk2].data0); gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C; SwapPokemon(&gPlayerParty[ewram01000.unk5], &gPlayerParty[ewram01000.unk6]); @@ -2812,7 +2802,7 @@ void sub_806D4AC(u8 taskId, u16 species, u8 c) if (species) { u8 monIndex = c + 3; - u8 spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + u8 spriteId = GetMonIconSpriteId(taskId, monIndex); gSprites[spriteId].data0 = -8; gSprites[spriteId].data2 = gTasks[taskId].data[0] * -8; @@ -2822,7 +2812,7 @@ void sub_806D4AC(u8 taskId, u16 species, u8 c) void sub_806D50C(u8 taskId, u8 monIndex) { - gSprites[GetMonIconSpriteId_maybe(taskId, monIndex)].pos1.x += 0xF0; + gSprites[GetMonIconSpriteId(taskId, monIndex)].pos1.x += 0xF0; } void PrintPartyMenuPromptText(u8 textId, u8 b) @@ -2845,7 +2835,7 @@ void PrintPartyMenuPromptText(u8 textId, u8 b) break; } - MenuPrint(gUnknown_08376624[textId], 1, 17); + MenuPrint(PartyMenuPromptTexts[textId], 1, 17); } } @@ -2977,7 +2967,7 @@ void CreatePartyMenuMonIcon(u8 taskId, u8 monIndex, u8 menuType, struct Pokemon u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY); u8 spriteId = CreateMonIcon(species2, sub_809D62C, x, y, 5, personality); - SetMonIconSpriteId_maybe(taskId, monIndex, spriteId); + SetMonIconSpriteId(taskId, monIndex, spriteId); SetMonIconAnim(spriteId, pokemon); } @@ -3006,13 +2996,13 @@ void unref_sub_806D964(u8 taskId) } } -void CreateMonIcon_806D99C(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) +void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) { u8 x = gUnknown_08376678[menuType][monIndex].x; u8 y = gUnknown_08376678[menuType][monIndex].y; u8 spriteId = CreateMonIcon(pokemon->species, sub_809D62C, x, y, 5, pokemon->personality); - SetMonIconSpriteId_maybe(taskId, monIndex, spriteId); + SetMonIconSpriteId(taskId, monIndex, spriteId); SetMonIconAnimByHP(spriteId, pokemon->hp, pokemon->maxhp); } @@ -3045,7 +3035,7 @@ void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c) if (monIndex < PARTY_SIZE) { - spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + spriteId = GetMonIconSpriteId(taskId, monIndex); gSprites[spriteId].pos2.y = 0; gSprites[spriteId].data0 = 0; @@ -3145,7 +3135,7 @@ void CreateHeldItemIcons_806DC34(u8 taskId) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { - monIconSpriteId = GetMonIconSpriteId_maybe(taskId, i); + monIconSpriteId = GetMonIconSpriteId(taskId, i); heldItemSpriteId = CreateSprite(&gSpriteTemplate_837660C, 0xFA, 0xAA, 4); gSprites[heldItemSpriteId].pos2.x = 4; @@ -3165,7 +3155,7 @@ void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) u8 monIconSpriteId; u8 heldItemSpriteId; - monIconSpriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + monIconSpriteId = GetMonIconSpriteId(taskId, monIndex); heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4); gSprites[heldItemSpriteId].pos2.x = 4; @@ -3205,7 +3195,7 @@ void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) lsrs r1, 24\n\ lsls r2, 16\n\ lsrs r7, r2, 16\n\ - bl GetMonIconSpriteId_maybe\n\ + bl GetMonIconSpriteId\n\ adds r4, r0, 0\n\ lsls r4, 24\n\ lsrs r4, 24\n\ @@ -3292,7 +3282,7 @@ void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite) sprite->pos1.y = gSprites[spriteId].pos1.y; } -u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex) +u8 GetMonIconSpriteId(u8 taskId, u8 monIndex) { switch (monIndex) { @@ -3318,7 +3308,7 @@ u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex) } } -void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 spriteId) +void SetMonIconSpriteId(u8 taskId, u8 monIndex, u8 spriteId) { switch (monIndex) { @@ -3343,9 +3333,9 @@ void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 spriteId) } } -u16 GetHeldItemIconSpriteIdByMon_maybe(u8 taskId, u8 monIndex) +u16 GetMonHeldItemIconSpriteId(u8 taskId, u8 monIndex) { - u8 spriteId = GetMonIconSpriteId_maybe(taskId, monIndex); + u8 spriteId = GetMonIconSpriteId(taskId, monIndex); u8 retVal = gSprites[spriteId].data7; return retVal; } @@ -3356,7 +3346,7 @@ void SetHeldItemIconVisibility(u8 taskId, u8 monIndex) u8 spriteId; u16 heldItem; - spriteId = GetHeldItemIconSpriteIdByMon_maybe(taskId, monIndex); + spriteId = GetMonHeldItemIconSpriteId(taskId, monIndex); if (!GetMonData(&gPlayerParty[monIndex], MON_DATA_HELD_ITEM)) { gSprites[spriteId].invisible = 1; @@ -3391,7 +3381,7 @@ void SetHeldItemIconVisibility(u8 a, u8 monIndex) lsls r4, 24\n\ lsrs r4, 24\n\ adds r1, r4, 0\n\ - bl GetHeldItemIconSpriteIdByMon_maybe\n\ + bl GetMonHeldItemIconSpriteId\n\ lsls r0, 24\n\ lsrs r5, r0, 24\n\ adds r6, r5, 0\n\ @@ -4462,7 +4452,7 @@ void sub_806F8AC(u8 taskId) StringExpandPlaceholders(gStringVar4, gOtherText_HPRestoredBy); else StringExpandPlaceholders(gStringVar4, gOtherText_RegainedHealth); - SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon); + SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon); task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 7); ewram1B000.unk261 = 2; sub_806E834(gStringVar4, 1); @@ -4489,7 +4479,7 @@ void sub_806FA18(u8 taskId) ewram1C000.unkC = 0; gTasks[taskId].data[11] -= gTasks[taskId].data[12]; SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]); - SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); + SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); ewram1C000.unk5 = gSprites[ewram01000.unk2].data0; ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); @@ -5193,7 +5183,7 @@ void RedrawPokemonInfoInMenu(u8 monIndex, struct Pokemon *pokemon) PartyMenuDoPrintHP(monIndex, isDoubleBattle, currentHP, maxHP); PartyMenuTryDrawHPBar(monIndex, pokemon); - icon = GetMonIconSpriteId_maybe(ewram1C000.unk4, monIndex); + icon = GetMonIconSpriteId(ewram1C000.unk4, monIndex); SetMonIconAnim(icon, pokemon); task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + monIndex * 2], 7); diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 5a13b99fb..7d70e7708 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -251,9 +251,9 @@ void HandleDefaultPartyMenu(u8 taskID) { if (!gPaletteFade.active) { - switch (sub_806BD80(taskID)) + switch (HandleDefaultPartyMenuInput(taskID)) { - case 1: + case A_BUTTON: PlaySE(SE_SELECT); gLastFieldPokeMenuOpened = sub_806CA38(taskID); GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); @@ -263,7 +263,7 @@ void HandleDefaultPartyMenu(u8 taskID) gTasks[taskID].func = sub_8089D94; sub_808B5B4(taskID); break; - case 2: + case B_BUTTON: PlaySE(SE_SELECT); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskID].func = sub_8089E4C; @@ -327,7 +327,7 @@ static void sub_8089EBC(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); gLastFieldPokeMenuOpened = gUnknown_020384F0; sub_8089E84(); SetMainCallback2(CB2_PartyMenuMain); @@ -360,9 +360,9 @@ static void PokemonMenu_Summary(u8 taskID) gTasks[taskID].func = sub_8089F44; } -void sub_808A004(u8 taskID) +void DoPokemonMenu_Switch(u8 taskID) { - SetTaskFuncWithFollowupFunc(taskID, sub_806CA60, HandleDefaultPartyMenu); + SetTaskFuncWithFollowupFunc(taskID, SetupDefaultPartyMenuSwitchPokemon, HandleDefaultPartyMenu); MenuZeroFillWindowRect(19, 0, 29, 19); } @@ -371,7 +371,7 @@ static void PokemonMenu_Switch(u8 taskID) HandleDestroyMenuCursors(); ewram01000.unkC = sub_806CD5C; ewram01000.array[53553] = 1; - sub_808A004(taskID); + DoPokemonMenu_Switch(taskID); } static void sub_808A060(u8 taskID) @@ -478,7 +478,7 @@ static void sub_808A358(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -494,7 +494,7 @@ static void sub_808A3A4(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); EWRAM_1B000.unk262 = 3; sub_8089E84(); SetMainCallback2(CB2_PartyMenuMain); @@ -513,7 +513,7 @@ void sub_808A3F8(void) gPaletteFade.bufferTransferDisabled = 1; sub_806BD58(taskID, 0); sub_806C994(taskID, gLastFieldPokeMenuOpened); - sub_806BF74(taskID, 0); + ChangePartyMenuSelection(taskID, 0); if (!(bool8)(GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_HELD_ITEM))) { SetMainCallback2(sub_808A34C); @@ -542,7 +542,7 @@ static void sub_808A4D4(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -851,7 +851,7 @@ static void sub_808AD0C(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -968,7 +968,7 @@ static void sub_808AF80(void) if (gLastFieldPokeMenuOpened > 5 || !GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES)) gLastFieldPokeMenuOpened = 0; sub_806C994(ewram1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(ewram1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(ewram1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -1003,9 +1003,9 @@ void sub_808B0C0(u8 taskID) { if (!gPaletteFade.active) { - switch (sub_806BD80(taskID)) + switch (HandleDefaultPartyMenuInput(taskID)) { - case 1: + case A_BUTTON: gLastFieldPokeMenuOpened = sub_806CA38(taskID); if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) PlaySE(SE_HAZURE); @@ -1026,7 +1026,7 @@ void sub_808B0C0(u8 taskID) } } break; - case 2: + case B_BUTTON: gLastFieldPokeMenuOpened = sub_806CA38(taskID); PlaySE(SE_SELECT); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); @@ -1106,7 +1106,7 @@ static void sub_808B3A0(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } @@ -1166,7 +1166,7 @@ static void sub_808B518(void) if (InitPartyMenu() == TRUE) { sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.menuHandlerTaskId, 0); + ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0); SetMainCallback2(CB2_PartyMenuMain); break; } diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 57b670de3..e303d5173 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -115,7 +115,7 @@ bool8 SetupContestPartyMenu(void) EWRAM_1B000.setupState++; break; case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.monIndex) != 1) + if (DrawPartyMonBackground(EWRAM_1B000.monIndex) != 1) { EWRAM_1B000.monIndex++; break; @@ -155,15 +155,15 @@ void HandleSelectPartyMenu(u8 var) { if (!gPaletteFade.active) { - switch (sub_806BD80(var)) + switch (HandleDefaultPartyMenuInput(var)) { - case 1: + case A_BUTTON: PlaySE(SE_SELECT); gUnknown_02038694 = sub_806CA38(var); gSpecialVar_0x8004 = gUnknown_02038694; sub_8123138(var); break; - case 2: + case B_BUTTON: PlaySE(SE_SELECT); gUnknown_02038694 = 0xFF; gSpecialVar_0x8004 = 0xFF; @@ -201,14 +201,13 @@ bool8 SetupMoveTutorPartyMenu(void) if (sub_806BD58(EWRAM_1B000.menuHandlerTaskId, EWRAM_1B000.monIndex) != 1) { EWRAM_1B000.monIndex++; - break; } else { EWRAM_1B000.monIndex = 0; EWRAM_1B000.setupState++; - break; } + break; case 4: PartyMenuPrintMonsLevelOrStatus(); EWRAM_1B000.setupState++; @@ -222,10 +221,9 @@ bool8 SetupMoveTutorPartyMenu(void) EWRAM_1B000.setupState++; break; case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.monIndex) != 1) + if (DrawPartyMonBackground(EWRAM_1B000.monIndex) != 1) { EWRAM_1B000.monIndex++; - break; } else { @@ -234,6 +232,7 @@ bool8 SetupMoveTutorPartyMenu(void) return TRUE; } } + return FALSE; } @@ -254,15 +253,15 @@ void HandleMoveTutorPartyMenu(u8 var) { if (!gPaletteFade.active) { - switch (sub_806BD80(var)) + switch (HandleDefaultPartyMenuInput(var)) { - case 1: + case A_BUTTON: PlaySE(SE_SELECT); gSpecialVar_0x8004 = sub_806CA38(var); gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); sub_8123138(var); break; - case 2: + case B_BUTTON: PlaySE(SE_SELECT); gSpecialVar_0x8004 = 0xFF; sub_8123138(var); -- cgit v1.2.3