summaryrefslogtreecommitdiff
path: root/src/pokemon
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon')
-rw-r--r--src/pokemon/learn_move.c1066
-rw-r--r--src/pokemon/mail.c599
-rw-r--r--src/pokemon/mail_data.c208
-rw-r--r--src/pokemon/mon_markings.c635
-rw-r--r--src/pokemon/pokeblock_feed.c1012
-rw-r--r--src/pokemon/pokedex.c5519
-rw-r--r--src/pokemon/pokedex_cry_screen.c82
-rw-r--r--src/pokemon/pokemon_1.c727
-rw-r--r--src/pokemon/pokemon_2.c1236
-rw-r--r--src/pokemon/pokemon_3.c1401
-rw-r--r--src/pokemon/pokemon_icon.c1276
-rw-r--r--src/pokemon/pokemon_item_effect.c550
-rw-r--r--src/pokemon/pokemon_menu.c1199
-rw-r--r--src/pokemon/pokemon_size_record.c219
-rw-r--r--src/pokemon/pokemon_storage_system.c93
-rw-r--r--src/pokemon/pokemon_summary_screen.c5334
16 files changed, 0 insertions, 21156 deletions
diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c
deleted file mode 100644
index 356a31b00..000000000
--- a/src/pokemon/learn_move.c
+++ /dev/null
@@ -1,1066 +0,0 @@
-#include "global.h"
-#include "contest.h"
-#include "data2.h"
-#include "field_fadetransition.h"
-#include "main.h"
-#include "menu.h"
-#include "menu_cursor.h"
-#include "learn_move.h"
-#include "palette.h"
-#include "pokemon.h"
-#include "pokemon_summary_screen.h"
-#include "overworld.h"
-#include "script.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings.h"
-#include "strings2.h"
-#include "task.h"
-#include "trig.h"
-#include "ewram.h"
-
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u8 gTileBuffer[];
-
-extern const struct WindowTemplate gWindowTemplate_81E6CE4;
-extern const struct WindowTemplate gWindowTemplate_81E7240;
-extern const u8 *const gContestEffectStrings[];
-extern const u8 *const gMoveDescriptions[];
-extern const u8 gTypeNames[][7];
-extern const u8 *const gUnknown_083CAF70[];
-
-#ifdef GERMAN
-extern const u8 deuOtherText_ForgotAndLearned[];
-#endif
-
-
-struct LearnMoveStruct
-{
- u8 state;
- u8 filler1;
- u8 unk2;
- u8 spriteIDs[20];
- u8 filler17[1];
- u8 unk18;
- u8 unk19;
- u8 numMenuChoices;
- u8 menuSelection;
- u8 unk1C;
- bool8 unk1D;
- u8 unk1E;
- u8 filler1F;
- /*0x020*/ u16 movesToLearn[20];
- u8 filler48[0x52-0x48];
- u8 moveNames[6][0x19];
- u8 fillerE8[0x2C3-0xE8];
- bool8 unk2C3;
- bool8 showContestInfo;
- /*0x2C5*/ u8 partyMon;
- u8 unk2C6;
-};
-
-static struct LearnMoveStruct *sLearnMoveStruct;
-
-const u16 gDexArrows_Pal[] = INCBIN_U16("graphics/pokedex/arrows.gbapal");
-
-const u8 gDexArrows_Gfx[] = INCBIN_U8("graphics/pokedex/arrows.4bpp");
-
-const u8 gUnknown_08402CF8[][4] =
-{
- { 0, 0, 9, 13},
- {10, 0, 29, 7},
- { 2, 14, 27, 19},
- {10, 8, 29, 13},
-};
-
-struct UnknownStruct1
-{
- const u8 *unk0;
- u8 unk4;
- u8 unk5;
- u8 unk6;
-};
-
-const struct UnknownStruct1 gUnknown_08402D08[][4] =
-{
- {
- {OtherText_Battle, 1, 1, 0},
- {OtherText_Power, 1, 4, 1},
- {OtherText_Accuracy, 1, 9, 2},
- {NULL, 0, 0, 0},
- },
- {
- {OtherText_Contest, 1, 1, 0},
- {OtherText_Appeal, 1, 4, 1},
- {OtherText_Jam, 1, 9, 2},
- {NULL, 0, 0, 0},
- },
-};
-
-// XXX: What are these for?
-const u32 unkDataFF00FFEF = 0xFF00FFEF;
-const u8 *const gTileBuffer_ = gTileBuffer;
-
-const struct OamData gOamData_8402D50 = {.shape = 0};
-const struct OamData gOamData_8402D58 = {.shape = 2};
-const struct OamData gOamData_8402D60 = {.shape = 1};
-
-const union AnimCmd gSpriteAnim_8402D68[] =
-{
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_8402D70[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_8402D78[] =
-{
- gSpriteAnim_8402D68,
- gSpriteAnim_8402D70,
-};
-
-const struct SpriteSheet gUnknown_08402D80 = {gDexArrows_Gfx, sizeof(gDexArrows_Gfx), 5525};
-const struct SpritePalette gUnknown_08402D88 = {gDexArrows_Pal, 5526};
-
-void sub_8133300(struct Sprite *);
-const struct SpriteTemplate gSpriteTemplate_8402D90 =
-{
- .tileTag = 5525,
- .paletteTag = 5526,
- .oam = &gOamData_8402D58,
- .anims = gSpriteAnimTable_8402D78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8133300,
-};
-
-const union AnimCmd gSpriteAnim_8402DA8[] =
-{
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_8402DB0[] =
-{
- ANIMCMD_FRAME(6, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_8402DB8[] =
-{
- gSpriteAnim_8402DA8,
- gSpriteAnim_8402DB0,
-};
-
-const struct SpriteTemplate gSpriteTemplate_8402DC0 =
-{
- .tileTag = 5525,
- .paletteTag = 5526,
- .oam = &gOamData_8402D60,
- .anims = gSpriteAnimTable_8402DB8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8133300,
-};
-
-const union AnimCmd gSpriteAnim_8402DD8[] =
-{
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_8402DE0[] =
-{
- ANIMCMD_FRAME(9, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_8402DE8[] =
-{
- ANIMCMD_FRAME(10, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_8402DF0[] =
-{
- ANIMCMD_FRAME(11, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_8402DF8[] =
-{
- gSpriteAnim_8402DD8,
- gSpriteAnim_8402DE0,
- gSpriteAnim_8402DE8,
- gSpriteAnim_8402DF0,
-};
-
-const struct SpriteTemplate gSpriteTemplate_8402E08 =
-{
- .tileTag = 5525,
- .paletteTag = 5526,
- .oam = &gOamData_8402D50,
- .anims = gSpriteAnimTable_8402DF8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8133300,
-};
-
-const u8 gString_AkitoMori[] = _("あきと"); // programmer Akito Mori?
-
-void sub_813269C(u8);
-void CB2_InitLearnMove(void);
-void CB2_LearnMove(void);
-void LearnMoveMain(void);
-void DrawLearnMoveMenuWindow(void);
-void sub_8133030(bool8);
-u8 sub_81330E8(void);
-void sub_8133140(u8);
-u8 sub_8133248(void);
-void ClearLearnMoveVars(void);
-void sub_8133358(void);
-void sub_8133558(void);
-void sub_813362C(void);
-void sub_8133800(void);
-void sub_8133AEC(bool8, int);
-void sub_8133CA4(void);
-
-void VBlankCB_LearnMove(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void TeachMoveTutorMove(void)
-{
- ScriptContext2_Enable();
- CreateTask(sub_813269C, 10);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
-}
-
-void sub_813269C(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(CB2_InitLearnMove);
- gFieldCallback = sub_8080990;
- DestroyTask(taskId);
- }
-}
-
-void CB2_InitLearnMove(void)
-{
- REG_DISPCNT = 0;
- ResetSpriteData();
- FreeAllSpritePalettes();
- ResetTasks();
- sLearnMoveStruct = eLearnMoveStruct;
- ClearLearnMoveVars();
- sLearnMoveStruct->partyMon = gSpecialVar_0x8004;
- sub_8133558();
- SetVBlankCallback(VBlankCB_LearnMove);
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E7240);
- InitMenuWindow(&gWindowTemplate_81E7240);
- Menu_EraseScreen();
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- Menu_EraseScreen();
-
- REG_BG0VOFS = 0;
- REG_BG0VOFS = 0; // huh?
- REG_BG1HOFS = 0;
- REG_BG1HOFS = 0; // huh?
-
- LoadSpriteSheet(&gUnknown_08402D80);
- LoadSpritePalette(&gUnknown_08402D88);
- sub_8133358();
- FillPalette(0, 0, 2);
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- SetMainCallback2(CB2_LearnMove);
-}
-
-void sub_81327A4(void)
-{
- ResetSpriteData();
- FreeAllSpritePalettes();
- ResetTasks();
- sLearnMoveStruct = eLearnMoveStruct;
- sub_8133558();
- sLearnMoveStruct->unk2C6 = gSpecialVar_0x8005;
- SetVBlankCallback(VBlankCB_LearnMove);
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E7240);
- InitMenuWindow(&gWindowTemplate_81E7240);
- Menu_EraseScreen();
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- Menu_EraseScreen();
-
- REG_DISPCNT = 0x1340;
- REG_BG0VOFS = 0;
- REG_BG0HOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1HOFS = 0; // huh?
-
- LoadSpriteSheet(&gUnknown_08402D80);
- LoadSpritePalette(&gUnknown_08402D88);
- sub_8133358();
- FillPalette(0, 0, 2);
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- SetMainCallback2(CB2_LearnMove);
-}
-
-void CB2_LearnMove(void)
-{
- LearnMoveMain();
- if (sLearnMoveStruct->unk1D)
- {
- sLearnMoveStruct->unk1D = FALSE;
- MenuCursor_SetPos814AD7C(0x58, (sLearnMoveStruct->unk18 * 2 + 1) * 8);
- }
- if (sLearnMoveStruct->unk1E != 0)
- {
- sLearnMoveStruct->unk1E = 0;
- sub_8133800();
- }
- if (sLearnMoveStruct->unk2C3)
- {
- sub_8133AEC(sLearnMoveStruct->showContestInfo, 1);
- sLearnMoveStruct->unk2C3 = FALSE;
- }
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_81328E8(const u8 *a)
-{
- StringExpandPlaceholders(gStringVar4, a);
- MenuPrintMessage(gStringVar4, 3, 15);
-}
-
-void LearnMoveMain(void)
-{
- switch (sLearnMoveStruct->state)
- {
- case 0:
- sLearnMoveStruct->state++;
- DrawLearnMoveMenuWindow();
- sub_8133030(FALSE);
- sub_8133800();
- gSprites[1].pos1.x = 0x48;
- sLearnMoveStruct->unk2C3 = TRUE;
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- REG_DISPCNT = 0x1340;
- break;
- case 1:
- if (!gPaletteFade.active)
- sLearnMoveStruct->state = 4;
- break;
- case 2:
- sLearnMoveStruct->state++;
- break;
- case 3:
- sub_8133030(FALSE);
- sub_8133800();
- sLearnMoveStruct->unk2C3 = TRUE;
- sLearnMoveStruct->state++;
- gSprites[1].pos1.x = 0x48;
- break;
- case 4:
- if (sub_81330E8() == 0)
- sub_813362C();
- return;
- case 5:
- sub_8133140(0);
- sub_8133800();
- sLearnMoveStruct->unk2C3 = TRUE;
- gSprites[1].pos1.x = 0x48;
- sLearnMoveStruct->state++;
- break;
- case 6:
- if (sub_8133248() == 0)
- sub_813362C();
- break;
- case 8:
- if (Menu_UpdateWindowText())
- {
- DisplayYesNoMenu(21, 7, 1);
- sLearnMoveStruct->state++;
- }
- break;
- case 9:
- {
- s8 selection = Menu_ProcessInputNoWrap_();
-
- if (selection == 0)
- {
- sub_8133CA4();
- if (GiveMoveToMon(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]) != 0xFFFF)
- {
- sub_81328E8(gOtherText_PokeLearnedMove);
- gSpecialVar_0x8004 = 1;
- sLearnMoveStruct->state = 31;
- }
- else
- {
- sLearnMoveStruct->state = 16;
- }
- }
- else if (selection == -1 || selection == 1)
- {
- sub_8133CA4();
- if (sLearnMoveStruct->showContestInfo == FALSE)
- sLearnMoveStruct->state = 3;
- if (sLearnMoveStruct->showContestInfo == TRUE)
- sLearnMoveStruct->state = 5;
- }
- }
- break;
- case 12:
- if (Menu_UpdateWindowText())
- {
- DisplayYesNoMenu(21, 7, 1);
- sLearnMoveStruct->state++;
- }
- break;
- case 13:
- {
- s8 selection = Menu_ProcessInputNoWrap_();
-
- if (selection == 0)
- {
- sub_8133CA4();
- gSpecialVar_0x8004 = selection;
- sLearnMoveStruct->state = 14;
- }
- else if (selection == -1 || selection == 1)
- {
- sub_8133CA4();
- if (sLearnMoveStruct->showContestInfo == FALSE)
- sLearnMoveStruct->state = 3;
- if (sLearnMoveStruct->showContestInfo == TRUE)
- sLearnMoveStruct->state = 5;
- }
- }
- break;
- case 16:
- sub_81328E8(gOtherText_DeleteOlderMove);
- sLearnMoveStruct->state++;
- break;
- case 17:
- if (Menu_UpdateWindowText())
- {
- DisplayYesNoMenu(21, 7, 1);
- sLearnMoveStruct->state = 18;
- }
- break;
- case 18:
- {
- s8 var = Menu_ProcessInputNoWrap_();
-
- if (var == 0)
- {
- sub_8133CA4();
- sub_81328E8(gOtherText_WhichMoveToForget);
- sLearnMoveStruct->state = 19;
- }
- else if (var == -1 || var == 1)
- {
- sub_8133CA4();
- sLearnMoveStruct->state = 24;
- }
- }
- break;
- case 24:
- sub_81328E8(gOtherText_StopLearningMove);
- sLearnMoveStruct->state++;
- break;
- case 25:
- if (Menu_UpdateWindowText())
- {
- sLearnMoveStruct->state = 26;
- DisplayYesNoMenu(21, 7, 1);
- }
- break;
- case 26:
- {
- s8 var = Menu_ProcessInputNoWrap_();
-
- if (var == 0)
- {
- sub_8133CA4();
- sLearnMoveStruct->state = 27;
- }
- else if (var == -1 || var == 1)
- {
- sub_8133CA4();
-
- // What's the point? It gets set to 16, anyway.
- if (sLearnMoveStruct->showContestInfo == FALSE)
- sLearnMoveStruct->state = 3;
- if (sLearnMoveStruct->showContestInfo == TRUE)
- sLearnMoveStruct->state = 5;
- sLearnMoveStruct->state = 16;
- }
- }
- break;
- case 27:
- if (Menu_UpdateWindowText())
- {
- if (sLearnMoveStruct->showContestInfo == FALSE)
- sLearnMoveStruct->state = 3;
- if (sLearnMoveStruct->showContestInfo == TRUE)
- sLearnMoveStruct->state = 5;
- }
- break;
- case 19:
- if (Menu_UpdateWindowText())
- {
- sLearnMoveStruct->state = 20;
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- }
- break;
- case 20:
- if (!gPaletteFade.active)
- {
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]);
- sLearnMoveStruct->state = 28;
- }
- break;
- case 21:
- if (Menu_UpdateWindowText())
- sLearnMoveStruct->state = 14;
- break;
- case 22:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- break;
- case 14:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- sLearnMoveStruct->state++;
- break;
- case 15:
- if (!gPaletteFade.active)
- SetMainCallback2(c2_exit_to_overworld_2_switch);
- break;
- case 28:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- sLearnMoveStruct->state++;
- DrawLearnMoveMenuWindow();
- sub_8133800();
- if (sLearnMoveStruct->showContestInfo == FALSE)
- sub_8133030(TRUE);
- if (sLearnMoveStruct->showContestInfo == TRUE)
- {
- gSprites[1].pos1.x = 0x48;
- sub_8133140(1);
- }
- sub_8133AEC(sLearnMoveStruct->showContestInfo, 1);
- break;
- case 29:
- if (!gPaletteFade.active)
- {
- if (sLearnMoveStruct->unk2C6 == 4)
- {
- sLearnMoveStruct->state = 24;
- }
- else
- {
- u16 moveId = GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_MOVE1 + sLearnMoveStruct->unk2C6);
-
- StringCopy(gStringVar3, gMoveNames[moveId]);
- RemoveMonPPBonus(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->unk2C6);
- SetMonMoveSlot(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection], sLearnMoveStruct->unk2C6);
- StringCopy(gStringVar2, gMoveNames[sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]]);
- sub_81328E8(gOtherText_ForgotMove123);
- sLearnMoveStruct->state = 30;
- gSpecialVar_0x8004 = 1;
- }
- }
- break;
- case 30:
- if (Menu_UpdateWindowText())
- {
-#ifdef ENGLISH
- sub_81328E8(gOtherText_ForgotOrDidNotLearnMove);
-#else
- sub_81328E8(deuOtherText_ForgotAndLearned);
-#endif
- sLearnMoveStruct->state = 31;
- PlayFanfare(BGM_FANFA1);
- }
- break;
- case 31:
- if (Menu_UpdateWindowText())
- {
- PlayFanfare(BGM_FANFA1);
- sLearnMoveStruct->state = 32;
- }
- break;
- case 32:
- if (IsFanfareTaskInactive())
- sLearnMoveStruct->state = 33;
- break;
- case 33:
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->state = 14;
- }
- break;
- }
-}
-
-void DrawLearnMoveMenuWindow(void)
-{
- u32 i;
-
- BasicInitMenuWindow(&gWindowTemplate_81E7240);
- for (i = 0; i < 4; i++)
- {
- Menu_DrawStdWindowFrame(
- gUnknown_08402CF8[i][0],
- gUnknown_08402CF8[i][1],
- gUnknown_08402CF8[i][2],
- gUnknown_08402CF8[i][3]);
- }
- BasicInitMenuWindow(&gWindowTemplate_81E6CE4);
-}
-
-void sub_8133030(bool8 a)
-{
- s32 i;
-
- gSprites[sLearnMoveStruct->spriteIDs[0]].invisible = FALSE;
- gSprites[sLearnMoveStruct->spriteIDs[1]].invisible = FALSE;
-
- for (i = 0; i < 16; i++)
- gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = TRUE;
-
- for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++)
- {
- sub_8072C74(gTileBuffer, gUnknown_08402D08[0][i].unk0, 64, 2);
- Menu_PrintText(gTileBuffer, gUnknown_08402D08[0][i].unk4, gUnknown_08402D08[0][i].unk5);
- }
-
- if (!a)
- sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1);
-}
-
-u8 sub_81330E8(void)
-{
- u32 result = (gMain.newKeys & DPAD_LEFT) || (gMain.newKeys & DPAD_RIGHT);
-
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR
- && ((gMain.newKeys & L_BUTTON) || (gMain.newKeys & R_BUTTON)))
- result++;
-
- if (result != 0)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->state = 5;
- sLearnMoveStruct->showContestInfo = TRUE;
- }
-
- return result;
-}
-
-void sub_8133140(bool8 a)
-{
- s32 i;
-
- gSprites[sLearnMoveStruct->spriteIDs[0]].invisible = FALSE;
- gSprites[sLearnMoveStruct->spriteIDs[1]].invisible = FALSE;
-
- for (i = 0; i < 16; i++)
- gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE;
-
- for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++)
- {
- sub_8072C74(gTileBuffer, gUnknown_08402D08[1][i].unk0, 64, 2);
- Menu_PrintText(gTileBuffer, gUnknown_08402D08[1][i].unk4, gUnknown_08402D08[1][i].unk5);
- if (i != 0)
- {
- Menu_EraseWindowRect(
- gUnknown_08402D08[1][i].unk4,
- gUnknown_08402D08[1][i].unk5 + 2,
- gUnknown_08402D08[1][i].unk4 + 7,
- gUnknown_08402D08[1][i].unk5 + 3);
- }
- }
-
- if (!a)
- sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1);
-}
-
-u8 sub_8133248(void)
-{
- u32 result = (gMain.newKeys & DPAD_LEFT) || (gMain.newKeys & DPAD_RIGHT);
-
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR
- && ((gMain.newKeys & L_BUTTON) || (gMain.newKeys & R_BUTTON)))
- result++;
-
- if (result != 0)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->state = 3;
- sLearnMoveStruct->showContestInfo = FALSE;
- }
-
- return result;
-}
-
-void ClearLearnMoveVars(void)
-{
- s32 i;
-
- sLearnMoveStruct->state = 0;
- sLearnMoveStruct->unk2 = 0;
- sLearnMoveStruct->unk19 = 0;
- sLearnMoveStruct->unk18 = 0;
- sLearnMoveStruct->unk1C = 0;
- sLearnMoveStruct->numMenuChoices = 0;
- sLearnMoveStruct->menuSelection = 0;
- sLearnMoveStruct->unk1D = FALSE;
- sLearnMoveStruct->unk1E = 0;
- sLearnMoveStruct->unk2C3 = FALSE;
- sLearnMoveStruct->showContestInfo = FALSE;
- for (i = 0; i < 20; i++)
- sLearnMoveStruct->movesToLearn[i] = 0;
-}
-
-void sub_8133300(struct Sprite *sprite)
-{
- s16 var = (sprite->data[1] * 10) & 0xFF;
-
- switch (sprite->data[0])
- {
- case 0:
- break;
- case 1:
- sprite->pos2.x = Sin(var, 3) * sprite->data[2];
- break;
- case 2:
- sprite->pos2.y = Sin(var, 1) * sprite->data[2];
- break;
- }
- sprite->data[1]++;
-}
-
-void sub_8133358(void)
-{
- s32 i;
-
- sLearnMoveStruct->spriteIDs[0] = CreateSprite(&gSpriteTemplate_8402D90, 8, 16, 0);
- gSprites[sLearnMoveStruct->spriteIDs[0]].data[0] = 1;
- gSprites[sLearnMoveStruct->spriteIDs[0]].data[2] = -1;
-
- sLearnMoveStruct->spriteIDs[1] = CreateSprite(&gSpriteTemplate_8402D90, 72, 16, 0);
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[1]], 1);
- gSprites[sLearnMoveStruct->spriteIDs[1]].data[0] = 1;
- gSprites[sLearnMoveStruct->spriteIDs[1]].data[2] = 1;
-
- sLearnMoveStruct->spriteIDs[2] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 4, 0);
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[2]], 1);
- gSprites[sLearnMoveStruct->spriteIDs[2]].data[0] = 2;
- gSprites[sLearnMoveStruct->spriteIDs[2]].data[2] = -1;
-
- sLearnMoveStruct->spriteIDs[3] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 60, 0);
- gSprites[sLearnMoveStruct->spriteIDs[3]].data[0] = 2;
- gSprites[sLearnMoveStruct->spriteIDs[3]].data[2] = 1;
-
- for (i = 0; i < 8; i++)
- {
- sLearnMoveStruct->spriteIDs[i + 4] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x34, 0);
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 2);
- }
-
- for (i = 0; i < 8; i++)
- {
- sLearnMoveStruct->spriteIDs[i + 12] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x5C, 0);
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 2);
- }
-
- for (i = 0; i < 20; i++)
- gSprites[sLearnMoveStruct->spriteIDs[i]].invisible = TRUE;
-
- CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 18);
-}
-
-void sub_8133558(void)
-{
- s32 i;
- u8 nickname[POKEMON_NAME_LENGTH + 1];
-
- sLearnMoveStruct->numMenuChoices = GetMoveRelearnerMoves(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn);
- for (i = 0; i < sLearnMoveStruct->numMenuChoices; i++)
- StringCopy(sLearnMoveStruct->moveNames[i], gMoveNames[sLearnMoveStruct->movesToLearn[i]]);
- GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_NICKNAME, nickname);
- StringCopy10(gStringVar1, nickname);
- StringCopy(sLearnMoveStruct->moveNames[sLearnMoveStruct->numMenuChoices], gUnknownText_Exit);
- sLearnMoveStruct->numMenuChoices++;
-}
-
-void sub_813360C(s8 delta)
-{
- sLearnMoveStruct->unk1C = sLearnMoveStruct->unk18;
- sLearnMoveStruct->unk18 += delta;
- sLearnMoveStruct->unk1D = TRUE;
-}
-
-void sub_813362C(void)
-{
- if (gMain.newAndRepeatedKeys & DPAD_UP)
- {
- if (sLearnMoveStruct->menuSelection != 0)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->menuSelection--;
- sLearnMoveStruct->unk2C3 = TRUE;
- if (sLearnMoveStruct->unk18 != 0)
- {
- sub_813360C(-1);
- }
- else if (sLearnMoveStruct->unk19 != 0)
- {
- sLearnMoveStruct->unk19--;
- sLearnMoveStruct->unk1E++;
- }
- }
- }
- else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
- {
- if (sLearnMoveStruct->menuSelection < sLearnMoveStruct->numMenuChoices - 1)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->menuSelection++;
- sLearnMoveStruct->unk2C3 = TRUE;
- if (sLearnMoveStruct->unk18 != 2)
- {
- sub_813360C(1);
- }
- else if (sLearnMoveStruct->unk19 != sLearnMoveStruct->numMenuChoices - 3)
- {
- sLearnMoveStruct->unk19++;
- sLearnMoveStruct->unk1E++;
- }
- }
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- if (sLearnMoveStruct->menuSelection != sLearnMoveStruct->numMenuChoices - 1)
- {
- sLearnMoveStruct->state = 8;
- StringCopy(gStringVar2, sLearnMoveStruct->moveNames[sLearnMoveStruct->menuSelection]);
- StringExpandPlaceholders(gStringVar4, gOtherText_TeachSpecificMove);
- MenuPrintMessage(gStringVar4, 3, 15);
- }
- else
- {
- StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove);
- MenuPrintMessage(gStringVar4, 3, 15);
- sLearnMoveStruct->state = 12;
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- sLearnMoveStruct->state = 12;
- StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove);
- MenuPrintMessage(gStringVar4, 3, 15);
- }
- if (sLearnMoveStruct->numMenuChoices > 3)
- {
- gSprites[2].invisible = FALSE;
- gSprites[3].invisible = FALSE;
- if (sLearnMoveStruct->unk19 == 0)
- gSprites[2].invisible = TRUE;
- else if (sLearnMoveStruct->unk19 == sLearnMoveStruct->numMenuChoices - 3)
- gSprites[3].invisible = TRUE;
- }
-}
-
-void sub_8133800(void)
-{
- u8 r6 = sLearnMoveStruct->unk19;
- u8 *str = gTileBuffer;
- s32 i;
-
- for (i = 0; i < 3; i++)
- {
- if (r6 >= sLearnMoveStruct->numMenuChoices)
- {
- str = sub_8072C74(str, gEmptyString_81E72B0, 0x90, 0);
- }
- else if (r6 == sLearnMoveStruct->numMenuChoices - 1)
- {
- str = sub_8072C74(str, gUnknownText_Exit, 0x90, 0);
- }
- else
- {
- u16 moveId = sLearnMoveStruct->movesToLearn[r6];
-
- if (sLearnMoveStruct->showContestInfo)
- str = sub_8072C74(str, gUnknown_083CAF70[gContestMoves[moveId].contestCategory], 0x27, 0);
- else
- str = sub_8072C74(str, gTypeNames[gBattleMoves[moveId].type], 0x27, 0);
-
- str = sub_8072C74(str, sLearnMoveStruct->moveNames[r6], 0x72, 0);
-
- str[0] = CHAR_P;
- str[1] = CHAR_P;
- str[2] = CHAR_SLASH;
- str += 3;
-
- str = sub_8072C14(str, gBattleMoves[moveId].pp, 0x90, 0);
- }
- *str++ = CHAR_NEWLINE;
- r6++;
- }
- *str = EOS;
- Menu_PrintText(gTileBuffer, 11, 1);
- sub_813360C(0);
-}
-
-const u8 gUnknown_08402E24[7][3] =
-{
- {11, 1, 1},
- { 3, 6, 2},
- {24, 1, 3},
- { 3, 11, 4},
- { 5, 4, 5},
- { 3, 6, 6},
- { 3, 11, 7},
-};
-
-const u8 gUnknown_08402E39[] = {0, 1, 2, 3};
-const u8 gUnknown_08402E3D[] = {4, 5, 6};
-
-void PrintMoveInfo(u16 moveId, const u8 *b)
-{
- u8 str[0x34];
- u8 numHearts;
- u8 i;
-
- StringCopy(str, gExpandedPlaceholder_Empty);
- switch (b[2])
- {
- case 1:
- break;
- case 2:
- if (gBattleMoves[moveId].power < 2)
- sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2);
- else
- sub_8072C14(str, gBattleMoves[moveId].power, 32, 2);
- Menu_PrintText(str, b[0], b[1]);
- break;
- case 4:
- if (gBattleMoves[moveId].accuracy == 0)
- sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2);
- else
- sub_8072C14(str, gBattleMoves[moveId].accuracy, 32, 2);
- Menu_PrintText(str, b[0], b[1]);
- break;
- case 6:
- Menu_EraseWindowRect(b[0], b[1], b[0], b[1] + 1);
- numHearts = gContestEffects[gContestMoves[moveId].effect].appeal / 10;
- if (numHearts == 255)
- numHearts = 0;
- for (i = 0; i < 8; i++)
- {
- if (i < numHearts)
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 1);
- else
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 0);
- }
- break;
- case 7:
- Menu_EraseWindowRect(b[0], b[1], b[0], b[1] + 1);
- numHearts = gContestEffects[gContestMoves[moveId].effect].jam / 10;
- if (numHearts == 255)
- numHearts = 0;
- for (i = 0; i < 8; i++)
- {
- if (i < numHearts)
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 3);
- else
- StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 2);
- }
- break;
- }
-}
-
-void sub_8133AEC(bool8 contestInfo, int unused)
-{
- u16 i;
-
- if (sLearnMoveStruct->menuSelection != sLearnMoveStruct->numMenuChoices - 1)
- {
- u16 moveId = sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection];
-
- if (contestInfo)
- {
- for (i = 0; i < 16; i++)
- gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE;
- for (i = 0; i < 3; i++)
- PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E3D[i]]);
- sub_8072AB0(gContestEffectStrings[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1);
- }
- else
- {
- u8 var;
-
- for (i = 0; i < 4; i++)
- PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E39[i]]);
- var = sub_8072A18(gMoveDescriptions[moveId - 1], 0x58, 0x48, 0x90, 1);
- if (var < 2)
- {
- u8 r1 = var * 2 + 9;
-
- Menu_BlankWindowRect(11, r1, 28, 12);
- }
- }
- }
- else
- {
- if (contestInfo)
- {
- Menu_EraseWindowRect(gUnknown_08402E24[5][0], gUnknown_08402E24[5][1], gUnknown_08402E24[5][0], gUnknown_08402E24[5][1] + 1);
- Menu_EraseWindowRect(gUnknown_08402E24[6][0], gUnknown_08402E24[6][1], gUnknown_08402E24[6][0], gUnknown_08402E24[6][1] + 1);
- for (i = 0; i < 16; i++)
- gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = TRUE;
- }
- else
- {
- Menu_EraseWindowRect(gUnknown_08402E24[1][0], gUnknown_08402E24[1][1], gUnknown_08402E24[1][0] + 3, gUnknown_08402E24[1][1] + 1);
- Menu_EraseWindowRect(gUnknown_08402E24[3][0], gUnknown_08402E24[3][1], gUnknown_08402E24[3][0] + 3, gUnknown_08402E24[3][1] + 1);
- }
- Menu_EraseWindowRect(11, 9, 28, 12);
- }
-}
-
-void sub_8133CA4(void)
-{
- Menu_EraseWindowRect(21, 7, 27, 12);
- sub_8133AEC(sLearnMoveStruct->showContestInfo, 0);
-}
diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c
deleted file mode 100644
index 921a3ad93..000000000
--- a/src/pokemon/mail.c
+++ /dev/null
@@ -1,599 +0,0 @@
-#include "global.h"
-#include "mail.h"
-#include "easy_chat.h"
-#include "constants/items.h"
-#include "graphics.h"
-#include "mail_data.h"
-#include "menu.h"
-#include "menu_helpers.h"
-#include "name_string_util.h"
-#include "palette.h"
-#include "pokemon_icon.h"
-#include "overworld.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "task.h"
-#include "text.h"
-#include "scanline_effect.h"
-#include "ewram.h"
-
-struct UnkMailStruct
-{
- u8 unk_0_0:2;
- u8 unk_0_2:2;
- u8 unk_0_4:4;
-};
-
-struct MailLayout
-{
- u8 var0;
- u8 var1;
- u8 var2;
- u8 var3_0:4;
- u8 var3_4:4;
- const struct UnkMailStruct *var4;
-};
-
-struct Unk2000000
-{
- /* 0x00*/ u8 words[8][27];
- /* 0xD8*/ u8 varD8[20];
- /* 0xEC*/ MainCallback varEC;
- /* 0xF0*/ MainCallback varF0;
- /* 0xF4*/ struct MailStruct *varF4;
- /* 0xF8*/ u8 varF8;
- /* 0xF9*/ u8 varF9;
- /* 0xFA*/ u8 varFA;
- /* 0xFB*/ u8 varFB;
- /* 0xFC*/ u8 varFC;
- u8 padFD[1];
- /* 0xFE*/ u8 varFE;
- /* 0xFF*/ u8 varFF;
- /*0x100*/ u8 var100;
- u8 pad101[3];
- /*0x104*/ MainCallback var104;
- /*0x108*/ MainCallback var108;
- /*0x10C*/ const struct MailLayout *var10C;
-};
-
-struct MailGraphics
-{
- const u16 *palette;
- const u8 *tiles;
- const u8 *tileMap;
- u16 var0C;
- u16 var0E;
- u16 color10;
- u16 color12;
-};
-
-const u16 gUnknown_083E562C[][2] =
-{
- {0x6ACD, 0x51A5},
- {0x45FC, 0x38D4},
-};
-
-const struct MailGraphics gMailGraphicsTable[] =
-{
- {
- .palette = gMailPalette_Orange,
- .tiles = gMailTiles_Orange,
- .tileMap = gMailTilemap_Orange,
- .var0C = 0x2C0,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Harbor,
- .tiles = gMailTiles_Harbor,
- .tileMap = gMailTilemap_Harbor,
- .var0C = 0x2E0,
- .var0E = 0,
- .color10 = 0x7FFF,
- .color12 = 0x4631,
- },
- {
- .palette = gMailPalette_Glitter,
- .tiles = gMailTiles_Glitter,
- .tileMap = gMailTilemap_Glitter,
- .var0C = 0x400,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Mech,
- .tiles = gMailTiles_Mech,
- .tileMap = gMailTilemap_Mech,
- .var0C = 0x1E0,
- .var0E = 0,
- .color10 = 0x7FFF,
- .color12 = 0x4631,
- },
- {
- .palette = gMailPalette_Wood,
- .tiles = gMailTiles_Wood,
- .tileMap = gMailTilemap_Wood,
- .var0C = 0x2E0,
- .var0E = 0,
- .color10 = 0x7FFF,
- .color12 = 0x4631,
- },
- {
- .palette = gMailPalette_Wave,
- .tiles = gMailTiles_Wave,
- .tileMap = gMailTilemap_Wave,
- .var0C = 0x300,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Bead,
- .tiles = gMailTiles_Bead,
- .tileMap = gMailTilemap_Bead,
- .var0C = 0x140,
- .var0E = 0,
- .color10 = 0x7FFF,
- .color12 = 0x4631,
- },
- {
- .palette = gMailPalette_Shadow,
- .tiles = gMailTiles_Shadow,
- .tileMap = gMailTilemap_Shadow,
- .var0C = 0x300,
- .var0E = 0,
- .color10 = 0x7FFF,
- .color12 = 0x4631,
- },
- {
- .palette = gMailPalette_Tropic,
- .tiles = gMailTiles_Tropic,
- .tileMap = gMailTilemap_Tropic,
- .var0C = 0x220,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Dream,
- .tiles = gMailTiles_Dream,
- .tileMap = gMailTilemap_Dream,
- .var0C = 0x340,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Fab,
- .tiles = gMailTiles_Fab,
- .tileMap = gMailTilemap_Fab,
- .var0C = 0x2A0,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
- {
- .palette = gMailPalette_Retro,
- .tiles = gMailTiles_Retro,
- .tileMap = gMailTilemap_Retro,
- .var0C = 0x520,
- .var0E = 0,
- .color10 = 0x294A,
- .color12 = 0x6739,
- },
-};
-
-const struct UnkMailStruct Unknown_3E5724[] =
-{
- {0, 3, 0},
- {0, 3, 0},
- {0, 3, 0},
-};
-
-const struct MailLayout gUnknown_083E5730[] =
-{
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
- {3, 16, 27, 4, 3, Unknown_3E5724},
- {3, 15, 27, 4, 3, Unknown_3E5724},
-};
-
-const struct UnkMailStruct Unknown_3E5790[] =
-{
- {0, 2, 0},
- {0, 2, 0},
- {0, 2, 0},
- {0, 2, 0},
- {0, 1, 0},
-};
-
-const struct MailLayout gUnknown_083E57A4[] =
-{
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 16, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 16, 4, 3, Unknown_3E5790},
- {5, 15, 16, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
- {5, 16, 15, 4, 3, Unknown_3E5790},
- {5, 15, 15, 4, 3, Unknown_3E5790},
-};
-
-// XXX: what is this?
-static u8 *const sSharedMemPtr = gSharedMem;
-
-static u8 sub_80F8A28(void);
-static void sub_80F8D50(void);
-static void sub_80F8DA0(void);
-static void sub_80F8E80(void);
-static void sub_80F8F18(void);
-static void sub_80F8F2C(void);
-static void sub_80F8F58(void);
-static void sub_80F8F78(void);
-static void sub_80F8FB4(void);
-
-void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2)
-{
- u16 mailDesign;
- u16 buffer[2];
-
- ewram0_4.varFF = GAME_LANGUAGE;
- ewram0_4.var100 = 1;
- ewram0_4.var104 = (MainCallback)EasyChat_GetWordText;
- ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString;
-
- mailDesign = arg0->itemId - ITEM_ORANGE_MAIL;
-
- if (mailDesign <= 11)
- {
- ewram0_4.varFA = arg0->itemId - ITEM_ORANGE_MAIL;
- }
- else
- {
- ewram0_4.varFA = 0;
- arg2 = FALSE;
- }
-
- switch (ewram0_4.var100)
- {
- case 0:
- default:
- ewram0_4.var10C = &gUnknown_083E5730[ewram0_4.varFA];
- break;
-
- case 1:
- ewram0_4.var10C = &gUnknown_083E57A4[ewram0_4.varFA];
- break;
- }
-
- if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16))
- {
- switch (ewram0_4.varFA)
- {
- case 6:
- ewram0_4.varFB = 1;
- break;
-
- case 9:
- ewram0_4.varFB = 2;
- break;
-
- default:
- ewram0_4.varFB = 0;
- break;
- }
- }
- else
- {
- ewram0_4.varFB = 0;
- }
-
-
- ewram0_4.varF4 = arg0;
- ewram0_4.varEC = arg1;
- ewram0_4.varF8 = arg2;
-
- SetMainCallback2(sub_80F8D50);
-}
-
-#define RETURN_UP_STATE break
-#define RETURN_SKIP_STATE return FALSE
-
-static u8 sub_80F8A28(void)
-{
- switch (gMain.state)
- {
- case 0:
- SetVBlankCallback(NULL);
- ScanlineEffect_Stop();
- REG_DISPCNT = 0;
- RETURN_UP_STATE;
-
- case 1: CpuFill16(0, (void *)OAM, OAM_SIZE);
- RETURN_UP_STATE;
-
- case 2:
- ResetPaletteFade();
- RETURN_UP_STATE;
-
- case 3:
- ResetTasks();
- RETURN_UP_STATE;
-
- case 4:
- ResetSpriteData();
- RETURN_UP_STATE;
-
- case 5:
- FreeAllSpritePalettes();
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- RETURN_UP_STATE;
-
- case 6:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6DFC);
- RETURN_UP_STATE;
-
- case 7:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E6DFC);
- RETURN_UP_STATE;
-
- case 8:
- if (MultistepInitMenuWindowContinue() == 0)
- {
- return FALSE;
- }
- RETURN_UP_STATE;
-
- case 9:
- Menu_EraseScreen();
- RETURN_UP_STATE;
-
- case 10: CpuFill16(1, (void *)(VRAM + 0x4800), 0x800);
- RETURN_UP_STATE;
-
- case 11:
- LoadPalette(gMailGraphicsTable[ewram0_4.varFA].palette, 0, 16 * 2);
- RETURN_UP_STATE;
-
- case 12:
- LZ77UnCompVram(gMailGraphicsTable[ewram0_4.varFA].tileMap, (void *)(VRAM + 0x4000));
- RETURN_UP_STATE;
-
- case 13:
- LZ77UnCompVram(gMailGraphicsTable[ewram0_4.varFA].tiles, (void *)(VRAM));
-
- gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0_4.varFA].color10;
- gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0_4.varFA].color12;
- gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0];
- gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1];
- RETURN_UP_STATE;
-
- case 14:
- if (ewram0_4.varF8 != 0)
- {
- sub_80F8DA0();
- }
- RETURN_UP_STATE;
-
- case 15:
- if (ewram0_4.varF8 != 0)
- {
- sub_80F8E80();
- }
-
- SetVBlankCallback(sub_80F8F18);
- gPaletteFade.bufferTransferDisabled = 1;
- RETURN_UP_STATE;
-
- case 16:
- {
- u16 local1;
-
- local1 = sub_809D4A8(ewram0_4.varF4->species);
-
- switch (ewram0_4.varFB)
- {
- case 1:
- sub_809D580(local1);
- ewram0_4.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0);
- break;
-
- case 2:
- sub_809D580(local1);
- ewram0_4.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0);
- break;
- }
- RETURN_UP_STATE;
- }
-
- case 17:
- if (sub_8055870() != TRUE)
- {
- RETURN_UP_STATE;
- }
- RETURN_SKIP_STATE;
-
- case 18:
- REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x512;
- REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BLDCNT = 0;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
- BeginNormalPaletteFade(-1, 0, 16, 0, 0);
- gPaletteFade.bufferTransferDisabled = 0;
- ewram0_4.varF0 = sub_80F8F58;
- return TRUE;
-
- default:
- return FALSE;
- }
-
- gMain.state += 1;
- return FALSE;
-}
-
-static void sub_80F8D50(void)
-{
- do
- {
- if (sub_80F8A28() == 1)
- {
- SetMainCallback2(sub_80F8F2C);
- return;
- }
- } while (sub_80F9344() != 1);
-}
-
-static u8 *sub_80F8D7C(u8 *dest, u8 *src)
-{
- u16 length;
-
- StringCopy(dest, src);
- SanitizeNameString(dest);
-
- length = StringLength(dest);
-
- return dest + length;
-}
-
-static void sub_80F8DA0(void)
-{
- u16 i;
- u8 r6;
- u8 *ptr;
-
- r6 = 0;
- for (i = 0; i < ewram0_4.var10C->var0; i++)
- {
- ConvertEasyChatWordsToString(ewram0_4.words[i], &ewram0_4.varF4->words[r6], ewram0_4.var10C->var4[i].unk_0_2, 1);
- r6 += ewram0_4.var10C->var4[i].unk_0_2;
- }
- ptr = ewram0_4.varD8;
- if (ewram0_4.var100 == 0)
- {
- ptr = sub_80F8D7C(ptr, ewram0_4.varF4->playerName);
- StringCopy(ptr, gOtherText_From);
- ewram0_4.varF9 = ewram0_4.var10C->var2 - StringLength(ewram0_4.varD8);
-
- }
- else
- {
- ptr = StringCopy(ptr, gOtherText_From);
- sub_80F8D7C(ptr, ewram0_4.varF4->playerName);
- ewram0_4.varF9 = ewram0_4.var10C->var2;
- }
-}
-
-static void sub_80F8E80(void)
-{
- u16 pos;
- u8 x;
- u8 y = 0;
-
- for (pos = 0; pos < ewram0_4.var10C->var0; pos++)
- {
- if (ewram0_4.words[pos][0] == 0xFF)
- {
- continue;
- }
-
- if (ewram0_4.words[pos][0] == 0x00)
- {
- continue;
- }
-
- x = ewram0_4.var10C->var4[pos].unk_0_4;
- y += ewram0_4.var10C->var4[pos].unk_0_0;
- Menu_PrintText(ewram0_4.words[pos], ewram0_4.var10C->var3_4 + x, ewram0_4.var10C->var3_0 + y);
- y += 2;
- }
-
- Menu_PrintText(ewram0_4.varD8, ewram0_4.varF9, ewram0_4.var10C->var1);
-}
-
-static void sub_80F8F18(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void sub_80F8F2C(void)
-{
- if (ewram0_4.varFB != 0)
- {
- AnimateSprites();
- BuildOamBuffer();
- }
-
- ewram0_4.varF0();
-}
-
-static void sub_80F8F58(void)
-{
- u8 local0;
-
- local0 = UpdatePaletteFade();
- if (local0 == 0)
- {
- ewram0_4.varF0 = sub_80F8F78;
- }
-}
-
-static void sub_80F8F78(void)
-{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- ewram0_4.varF0 = sub_80F8FB4;
- }
-}
-
-static void sub_80F8FB4(void)
-{
- u16 local1;
-
- if (UpdatePaletteFade())
- {
- return;
- }
-
- SetMainCallback2(ewram0_4.varEC);
- switch (ewram0_4.varFB)
- {
- case 2:
- case 1:
- local1 = sub_809D4A8(ewram0_4.varF4->species);
- sub_809D608(local1);
-
- sub_809D510(&gSprites[ewram0_4.varFC]);
- break;
- }
-
- memset(&ewram0_4, 0, 0x110);
- ResetPaletteFade();
-}
diff --git a/src/pokemon/mail_data.c b/src/pokemon/mail_data.c
deleted file mode 100644
index 4249b9f48..000000000
--- a/src/pokemon/mail_data.c
+++ /dev/null
@@ -1,208 +0,0 @@
-#include "global.h"
-#include "mail_data.h"
-#include "constants/items.h"
-#include "name_string_util.h"
-#include "pokemon.h"
-#include "pokemon_icon.h"
-#include "constants/species.h"
-#include "text.h"
-
-void ClearMailData(void)
-{
- u8 i;
-
- for (i = 0; i < 16; i++)
- ClearMailStruct(&gSaveBlock1.mail[i]);
-}
-
-void ClearMailStruct(struct MailStruct *mail)
-{
- int i;
-
- for (i = 0; i < 9; i++)
- mail->words[i] = -1;
-
- for (i = 0; i < 8; i++)
- mail->playerName[i] = -1;
-
- for (i = 0; i < 4; i++)
- mail->trainerId[i] = 0;
-
- mail->species = 1;
- mail->itemId = 0;
-}
-
-bool8 MonHasMail(struct Pokemon *mon)
-{
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
- if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF)
- return TRUE;
- else
- return FALSE;
-}
-
-u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
-{
- u16 _itemId;
- u8 heldItem[2];
- u8 id;
- u8 i;
- u16 species;
- u32 personality;
-
- _itemId = itemId;
- heldItem[0] = _itemId;
- heldItem[1] = _itemId >> 8;
- id = 0;
-
- while (id < 6)
- {
- if (gSaveBlock1.mail[id].itemId == 0)
- {
- for (i = 0; i < 9; i++)
- gSaveBlock1.mail[id].words[i] = -1;
-
- for (i = 0; i < 7; i++)
- gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i];
- gSaveBlock1.mail[id].playerName[i] = EOS;
- PadNameString(gSaveBlock1.mail[id].playerName, 0);
-
- for (i = 0; i < 4; i++)
- gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i];
-
- species = GetBoxMonData(&mon->box, MON_DATA_SPECIES);
- personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY);
- gSaveBlock1.mail[id].species = SpeciesToMailSpecies(species, personality);
- gSaveBlock1.mail[id].itemId = _itemId;
- SetMonData(mon, MON_DATA_MAIL, &id);
- SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
- return id;
- }
- id++;
- }
-
- return -1;
-}
-
-u16 SpeciesToMailSpecies(u16 species, u32 personality)
-{
- if (species == SPECIES_UNOWN)
- {
- int mailSpecies = GetUnownLetterByPersonality(personality) + 30000;
- return mailSpecies;
- }
-
- return species;
-}
-
-u16 MailSpeciesToSpecies(u16 a1, u16 *a2)
-{
- u16 result;
-
- if (a1 >= 30000 && a1 < (30000 + UNOWN_FORM_COUNT))
- {
- result = SPECIES_UNOWN;
- *a2 = a1 - 30000;
- }
- else
- {
- result = a1;
- }
-
- return result;
-}
-
-u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail)
-{
- u8 heldItem[2];
- u16 itemId = mail->itemId;
- u8 mailId = GiveMailToMon(mon, itemId);
-
- if (mailId == 0xFF)
- return 0xFF;
-
- gSaveBlock1.mail[mailId] = *mail;
-
- SetMonData(mon, MON_DATA_MAIL, &mailId);
-
- heldItem[0] = itemId;
- heldItem[1] = itemId >> 8;
-
- SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
-
- return mailId;
-}
-
-int unref_sub_80A2DF4(void)
-{
- return 0;
-}
-
-void TakeMailFromMon(struct Pokemon *mon)
-{
- u8 heldItem[2];
- u8 mailId;
-
- if (MonHasMail(mon))
- {
- mailId = GetMonData(mon, MON_DATA_MAIL);
- gSaveBlock1.mail[mailId].itemId = 0;
- mailId = 0xFF;
- heldItem[0] = 0;
- heldItem[1] = 0;
- SetMonData(mon, MON_DATA_MAIL, &mailId);
- SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
- }
-}
-
-void DeleteMail(u8 mailId)
-{
- gSaveBlock1.mail[mailId].itemId = 0;
-}
-
-u8 TakeMailFromMon2(struct Pokemon *mon)
-{
- u8 i;
- u8 newHeldItem[2];
- u8 newMailId;
-
- newHeldItem[0] = 0;
- newHeldItem[1] = 0;
- newMailId = 0xFF;
-
- for (i = 6; i < 16; i++)
- {
- if (gSaveBlock1.mail[i].itemId == 0)
- {
- memcpy(&gSaveBlock1.mail[i], &gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct));
- gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)].itemId = 0;
- SetMonData(mon, MON_DATA_MAIL, &newMailId);
- SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem);
- return i;
- }
- }
-
- return 0xFF;
-}
-
-bool8 ItemIsMail(u16 itemId)
-{
- switch (itemId)
- {
- case ITEM_ORANGE_MAIL:
- case ITEM_HARBOR_MAIL:
- case ITEM_GLITTER_MAIL:
- case ITEM_MECH_MAIL:
- case ITEM_WOOD_MAIL:
- case ITEM_WAVE_MAIL:
- case ITEM_BEAD_MAIL:
- case ITEM_SHADOW_MAIL:
- case ITEM_TROPIC_MAIL:
- case ITEM_DREAM_MAIL:
- case ITEM_FAB_MAIL:
- case ITEM_RETRO_MAIL:
- return TRUE;
- default:
- return FALSE;
- }
-}
diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c
deleted file mode 100644
index 66c82a706..000000000
--- a/src/pokemon/mon_markings.c
+++ /dev/null
@@ -1,635 +0,0 @@
-#include "global.h"
-#include "main.h"
-#include "menu_cursor.h"
-#include "text_window.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "sprite.h"
-
-#ifdef GERMAN
-#define MENU_TEXT_SPRITE_X_OFFSET 24
-#else
-#define MENU_TEXT_SPRITE_X_OFFSET 32
-#endif
-
-struct PokemonMarkMenu
-{
- /*0x0000*/ u16 baseTileTag;
- /*0x0002*/ u16 basePaletteTag;
- /*0x0004*/ u8 markings; // bit flags
- /*0x0005*/ s8 cursorPos;
- /*0x0006*/ bool8 markingsArray[4];
- /*0x000A*/ u8 cursorBaseY;
- /*0x000B*/ bool8 spriteSheetLoadRequired;
- /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window
- /*0x0014*/ struct Sprite *menuMarkingSprites[4];
- /*0x0024*/ struct Sprite *menuTextSprite;
- /*0x0028*/ const u8 *frameTiles;
- /*0x002C*/ const u16 *framePalette;
- /*0x0030*/ u8 menuWindowSpriteTiles[0x1000];
- /*0x1030*/ u8 filler1030[0x80];
- /*0x10B0*/ u8 tileLoadState;
-};
-
-extern u8 gPokenavConditionMenuMisc_Gfx[];
-extern u16 gUnknown_08E966B8[];
-
-const u16 gUnknown_083E49F4[] = INCBIN_U16("graphics/misc/mon_markings.gbapal");
-const u8 gUnknown_083E4A14[] = INCBIN_U8("graphics/misc/mon_markings.4bpp");
-
-const struct OamData gOamData_83E5214 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-const struct OamData gOamData_83E521C =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 0,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-const union AnimCmd gSpriteAnim_83E5224[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E522C[] =
-{
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5234[] =
-{
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E523C[] =
-{
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5244[] =
-{
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E524C[] =
-{
- ANIMCMD_FRAME(5, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5254[] =
-{
- ANIMCMD_FRAME(6, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E525C[] =
-{
- ANIMCMD_FRAME(7, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5264[] =
-{
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E526C[] =
-{
- ANIMCMD_FRAME(9, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_83E5274[] =
-{
- gSpriteAnim_83E5224,
- gSpriteAnim_83E522C,
- gSpriteAnim_83E5234,
- gSpriteAnim_83E523C,
- gSpriteAnim_83E5244,
- gSpriteAnim_83E524C,
- gSpriteAnim_83E5254,
- gSpriteAnim_83E525C,
- gSpriteAnim_83E5264,
- gSpriteAnim_83E526C,
-};
-
-const union AnimCmd gSpriteAnim_83E529C[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52A4[] =
-{
- ANIMCMD_FRAME(64, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_83E52AC[] =
-{
- gSpriteAnim_83E529C,
- gSpriteAnim_83E52A4,
-};
-
-const struct OamData gOamData_83E52B4 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-const union AnimCmd gSpriteAnim_83E52BC[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52C4[] =
-{
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52CC[] =
-{
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52D4[] =
-{
- ANIMCMD_FRAME(12, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52DC[] =
-{
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52E4[] =
-{
- ANIMCMD_FRAME(20, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52EC[] =
-{
- ANIMCMD_FRAME(24, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52F4[] =
-{
- ANIMCMD_FRAME(28, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E52FC[] =
-{
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5304[] =
-{
- ANIMCMD_FRAME(36, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E530C[] =
-{
- ANIMCMD_FRAME(40, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5314[] =
-{
- ANIMCMD_FRAME(44, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E531C[] =
-{
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5324[] =
-{
- ANIMCMD_FRAME(52, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E532C[] =
-{
- ANIMCMD_FRAME(56, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_83E5334[] =
-{
- ANIMCMD_FRAME(60, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_83E533C[] =
-{
- gSpriteAnim_83E52BC,
- gSpriteAnim_83E52C4,
- gSpriteAnim_83E52CC,
- gSpriteAnim_83E52D4,
- gSpriteAnim_83E52DC,
- gSpriteAnim_83E52E4,
- gSpriteAnim_83E52EC,
- gSpriteAnim_83E52F4,
- gSpriteAnim_83E52FC,
- gSpriteAnim_83E5304,
- gSpriteAnim_83E530C,
- gSpriteAnim_83E5314,
- gSpriteAnim_83E531C,
- gSpriteAnim_83E5324,
- gSpriteAnim_83E532C,
- gSpriteAnim_83E5334,
-};
-
-static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL;
-
-static void sub_80F761C(s16, s16, u16, u16);
-static void nullsub_65(struct Sprite *);
-static void sub_80F78CC(struct Sprite *);
-static void sub_80F7908(struct Sprite *);
-static struct Sprite *sub_80F7960(u16, u16, const u16 *, u16);
-
-void sub_80F727C(struct PokemonMarkMenu *ptr)
-{
- sMenu = ptr;
- sMenu->spriteSheetLoadRequired = FALSE;
-}
-
-void sub_80F728C(void)
-{
- const struct FrameGraphics *frame = TextWindow_GetFrameGraphics(gSaveBlock2.optionsWindowFrameType);
- sMenu->frameTiles = frame->tiles;
- sMenu->framePalette = frame->palette;
- sMenu->tileLoadState = 0;
- CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles));
-}
-
-bool8 sub_80F72D4(void)
-{
- u16 i;
- u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100;
-
- switch (sMenu->tileLoadState)
- {
- case 0:
- CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP);
- for (i = 0; i < 6; i++)
- {
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
- }
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
- sMenu->tileLoadState++;
- break;
- default:
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP);
- for (i = 0; i < 6; i++)
- {
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
- }
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
- sMenu->tileLoadState++;
- break;
- case 13:
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP);
- for (i = 0; i < 6; i++)
- {
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
- }
- CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
- sMenu->tileLoadState++;
- return FALSE;
- case 14:
- return FALSE;
- }
-
- return TRUE;
-}
-
-void sub_80F7404(void)
-{
- sub_80F728C();
- while (sub_80F72D4())
- ;
-}
-
-void sub_80F7418(u8 markings, s16 x, s16 y)
-{
- u16 i;
- sMenu->cursorPos = 0;
- sMenu->markings = markings;
- for (i = 0; i < 4; i++)
- sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
- DestroyMenuCursor();
- sub_80F761C(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
-}
-
-void sub_80F7470(void)
-{
- u16 i;
-
- for (i = 0; i < 3; i++)
- {
- FreeSpriteTilesByTag(sMenu->baseTileTag + i);
- }
-
- FreeSpritePaletteByTag(sMenu->basePaletteTag);
- FreeSpritePaletteByTag(sMenu->basePaletteTag + 1);
-
- for (i = 0; i < 2; i++)
- {
- if (!sMenu->menuWindowSprites[i])
- return;
- DestroySprite(sMenu->menuWindowSprites[i]);
- }
-
- for (i = 0; i < 4; i++)
- {
- if (!sMenu->menuMarkingSprites[i])
- return;
- DestroySprite(sMenu->menuMarkingSprites[i]);
- }
-
- DestroyMenuCursor();
-
- if (sMenu->menuTextSprite)
- DestroySprite(sMenu->menuTextSprite);
-}
-
-bool8 sub_80F7500(void)
-{
- u16 i;
- struct SpriteSheet sheets[3] =
- {
- { sMenu->menuWindowSpriteTiles, 0x1000, sMenu->baseTileTag },
- { gPokenavConditionMenuMisc_Gfx, 0x520, sMenu->baseTileTag + 1 },
- { NULL, 0, 0 }
- };
-
- if (sMenu->spriteSheetLoadRequired)
- {
- LoadTilesForSpriteSheets(sheets);
- sMenu->spriteSheetLoadRequired = FALSE;
- }
-
- if (gMain.newKeys & DPAD_UP)
- {
- s8 pos;
- PlaySE(SE_SELECT);
- pos = --sMenu->cursorPos;
- if (pos < 0)
- sMenu->cursorPos = 5;
- return TRUE;
- }
-
- if (gMain.newKeys & DPAD_DOWN)
- {
- s8 pos;
- PlaySE(SE_SELECT);
- pos = ++sMenu->cursorPos;
- if (pos > 5)
- sMenu->cursorPos = 0;
- return TRUE;
- }
-
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
-
- switch (sMenu->cursorPos)
- {
- case 4:
- sMenu->markings = 0;
- for (i = 0; i < 4; i++)
- sMenu->markings |= sMenu->markingsArray[i] << i;
- return FALSE;
- case 5:
- return FALSE;
- }
-
- sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos];
- return TRUE;
- }
-
- if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- return FALSE;
- }
-
- return TRUE;
-}
-
-void sub_80F761C(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
-{
- u16 i;
- u8 spriteId;
-
- struct SpriteSheet sheets[] =
- {
- { sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag },
- { gPokenavConditionMenuMisc_Gfx, 0x520, baseTileTag + 1 },
- { NULL, 0 }
- };
-
- struct SpritePalette palettes[] =
- {
- { sMenu->framePalette, basePaletteTag },
- { gUnknown_08E966B8, basePaletteTag + 1},
- { NULL, 0 }
- };
-
- struct SpriteTemplate sprTemplate =
- {
- baseTileTag,
- basePaletteTag,
- &gOamData_83E5214,
- gSpriteAnimTable_83E52AC,
- NULL,
- gDummySpriteAffineAnimTable,
- nullsub_65,
- };
-
- sMenu->spriteSheetLoadRequired = TRUE;
- AllocTilesForSpriteSheets(sheets);
- LoadSpritePalettes(palettes);
-
- for (i = 0; i < 2; i++)
- {
- spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 2);
- if (spriteId != 64)
- {
- sMenu->menuWindowSprites[i] = &gSprites[spriteId];
- StartSpriteAnim(&gSprites[spriteId], i);
- }
- else
- {
- sMenu->menuWindowSprites[i] = NULL;
- return;
- }
- }
-
- sMenu->menuWindowSprites[1]->pos1.y = y + 96;
-
- sprTemplate.tileTag++;
- sprTemplate.paletteTag++;
- sprTemplate.anims = gSpriteAnimTable_83E5274;
- sprTemplate.callback = sub_80F78CC;
- sprTemplate.oam = &gOamData_83E521C;
-
- for (i = 0; i < 4; i++)
- {
- spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 1);
- if (spriteId != 64)
- {
- sMenu->menuMarkingSprites[i] = &gSprites[spriteId];
- gSprites[spriteId].data[0] = i;
- }
- else
- {
- sMenu->menuMarkingSprites[i] = NULL;
- return;
- }
- }
-
- sprTemplate.callback = SpriteCallbackDummy;
-
- spriteId = CreateSprite(&sprTemplate, 0, 0, 1);
-
- if (spriteId != 64)
- {
- sMenu->menuTextSprite = &gSprites[spriteId];
- sMenu->menuTextSprite->oam.shape = ST_OAM_H_RECTANGLE;
- sMenu->menuTextSprite->oam.size = 3;
- StartSpriteAnim(sMenu->menuTextSprite, 9);
- sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET;
- sMenu->menuTextSprite->pos1.y = y + 80;
- CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0);
- }
- else
- {
- sMenu->menuTextSprite = NULL;
- }
-
- sMenu->cursorBaseY = y + 8;
- MenuCursor_Create814A5C0(0, basePaletteTag + 1, 15, 0, 0x30);
- MenuCursor_SetPos814A880(x + 8, sMenu->cursorBaseY);
- sub_814AABC(sub_80F7908);
-}
-
-void nullsub_65(struct Sprite *sprite)
-{
-}
-
-void sub_80F78CC(struct Sprite *sprite)
-{
- if (sMenu->markingsArray[sprite->data[0]])
- StartSpriteAnim(sprite, 2 * sprite->data[0] + 1);
- else
- StartSpriteAnim(sprite, 2 * sprite->data[0]);
-}
-
-void sub_80F7908(struct Sprite *sprite)
-{
- sprite->pos1.y = 16 * sMenu->cursorPos + sMenu->cursorBaseY;
-}
-
-struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, const u16 *palette)
-{
- if (!palette)
- palette = gUnknown_083E49F4;
- return sub_80F7960(tileTag, paletteTag, palette, 16);
-}
-
-struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, const u16 *palette)
-{
- if (!palette)
- palette = gUnknown_083E49F4;
- return sub_80F7960(tileTag, paletteTag, palette, 1);
-}
-
-struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size)
-{
- u8 spriteId;
- struct SpriteTemplate sprTemplate;
- struct SpriteSheet sheet = { gUnknown_083E4A14, 0x80, tileTag };
- struct SpritePalette sprPalette = { palette, paletteTag };
-
- sprTemplate.tileTag = tileTag;
- sprTemplate.paletteTag = paletteTag;
- sprTemplate.oam = &gOamData_83E52B4;
- sprTemplate.anims = gSpriteAnimTable_83E533C;
- sprTemplate.images = NULL;
- sprTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sprTemplate.callback = nullsub_65;
-
- sheet.size = size * 0x80;
-
- LoadSpriteSheet(&sheet);
- LoadSpritePalette(&sprPalette);
-
- spriteId = CreateSprite(&sprTemplate, 0, 0, 0);
- if (spriteId != 64)
- return &gSprites[spriteId];
- else
- return NULL;
-}
-
-void sub_80F7A10(u8 markings, void *dest)
-{
- DmaCopy16Defvars(3, gUnknown_083E4A14 + markings * 0x80, dest, 0x80);
-}
diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c
deleted file mode 100644
index 2f2ce2f8f..000000000
--- a/src/pokemon/pokeblock_feed.c
+++ /dev/null
@@ -1,1012 +0,0 @@
-#include "global.h"
-#include "task.h"
-#include "palette.h"
-#include "main.h"
-#include "menu_helpers.h"
-#include "text.h"
-#include "text_window.h"
-#include "menu.h"
-#include "overworld.h"
-#include "decompress.h"
-#include "data2.h"
-#include "sprite.h"
-#include "item_use.h"
-#include "pokeblock.h"
-#include "party_menu.h"
-#include "strings.h"
-#include "string_util.h"
-#include "m4a.h"
-#include "field_effect.h"
-#include "sound.h"
-#include "trig.h"
-#include "ewram.h"
-
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gPokeblockMonID;
-extern s16 gPokeblockGain;
-
-extern const u8 gPokeblockRed_Pal[];
-extern const u8 gPokeblockBlue_Pal[];
-extern const u8 gPokeblockPink_Pal[];
-extern const u8 gPokeblockGreen_Pal[];
-extern const u8 gPokeblockYellow_Pal[];
-extern const u8 gPokeblockPurple_Pal[];
-extern const u8 gPokeblockIndigo_Pal[];
-extern const u8 gPokeblockBrown_Pal[];
-extern const u8 gPokeblockLiteBlue_Pal[];
-extern const u8 gPokeblockOlive_Pal[];
-extern const u8 gPokeblockGray_Pal[];
-extern const u8 gPokeblockBlack_Pal[];
-extern const u8 gPokeblockWhite_Pal[];
-extern const u8 gPokeblockGold_Pal[];
-extern const u8 gPokeblock_Gfx[];
-extern const u8 gBattleTerrainTiles_Building[];
-extern const u8 gUnknown_08E782FC[];
-extern const u8 gBattleTerrainPalette_BattleTower[];
-extern const struct CompressedSpriteSheet gUnknown_083F7F74;
-extern const struct CompressedSpritePalette gUnknown_083F7F7C;
-
-bool8 IsPokeSpriteNotFlipped(u16 species);
-
-// this file's functions
-static void sub_8147B04(void);
-static void sub_81481DC(void);
-static void sub_814825C(void);
-static u8 sub_81480B4(void);
-static u8 CreatePokeblockSprite(void);
-static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon);
-static bool8 sub_8147B20(struct Pokemon* mon);
-static void LaunchPokeblockFeedTask(u8);
-static void sub_8148044(u8);
-static void sub_8148078(struct Sprite* sprite);
-static void Task_PrintAtePokeblockText(u8 taskID);
-static void Task_PaletteFadeToReturn(u8 taskID);
-static void SetPokeblockFeedSpritePal(u8);
-static void sub_8148108(u8, bool8);
-static bool8 sub_8148540(void);
-static bool8 sub_81485CC(void);
-static bool8 FreePokeSpriteMatrix(void);
-void sub_8148710(void);
-static void SpriteCB_ThrownPokeblock(struct Sprite* sprite);
-static void sub_814862C(void);
-
-// EWRAM
-EWRAM_DATA static struct CompressedSpritePalette sPokeblockFeedSpritePal = {0};
-
-// IWRAM common
-struct Sprite* gPokeblockFeedPokeSprite;
-u16 gPokeblockFeedMonSpecies;
-bool8 gPokeblockMonNotFlipped;
-u8 gPokeblockFeedMonSpriteID;
-u8 gPokeblockFeedMonNature;
-u16 gUnknown_03005F34;
-u8 gPokeblockFeedUnused0;
-u8 gUnknown_03005F3C;
-u8 gUnknown_03005F40;
-struct Sprite gPokeblockFeedPokeSpriteCopy;
-u16 gUnknown_03005F94;
-s16 gUnknown_03005FA0[24];
-
-// rodata
-
-static const u8 sNatureToMonPokeblockAnim[][2] =
-{
- { 0, 0 }, // HARDY
- { 3, 0 }, // LONELY
- { 4, 1 }, // BRAVE
- { 5, 0 }, // ADAMANT
- { 10, 0 }, // NAUGHTY
- { 13, 0 }, // BOLD
- { 15, 0 }, // DOCILE
- { 16, 2 }, // RELAXED
- { 18, 0 }, // IMPISH
- { 19, 0 }, // LAX
- { 20, 0 }, // TIMID
- { 25, 0 }, // HASTY
- { 27, 3 }, // SERIOUS
- { 28, 0 }, // JOLLY
- { 29, 0 }, // NAIVE
- { 33, 4 }, // MODEST
- { 36, 0 }, // MILD
- { 37, 0 }, // QUIET
- { 39, 0 }, // BASHFUL
- { 42, 0 }, // RASH
- { 45, 0 }, // CALM
- { 46, 5 }, // GENTLE
- { 47, 6 }, // SASSY
- { 48, 0 }, // CAREFUL
- { 53, 0 }, // QUIRKY
-};
-
-static const s16 sMonPokeblockAnims[][10] =
-{
- // HARDY
- { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0},
- { 0, 4, 0, 16, 24, 0, 0, 0, 12, 0},
- { 0, 4, 0, 32, 32, 0, 0, 0, 16, 1},
-
- // LONELY
- { 0, 3, 6, 0, 48, 0, 0, 0, 24, 1},
-
- // BRAVE
- { 64, 16, -24, 0, 32, 0, 0, 0, 0, 1},
-
- // ADAMANT
- { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0},
- { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0},
- { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0},
- { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0},
- { 0, 4, -16, 0, 4, 0, 16, 0, 0, 1},
-
- // NAUGHTY
- { 0, 3, 6, 0, 12, 0, 0, 0, 6, 0},
- { 0, 3, -6, 0, 12, 0, 0, 0, 6, 0},
- { 0, 16, 16, 0, 45, 1, 0, 0, 0, 1},
-
- // BOLD
- { 0, 16, 0, 24, 32, 0, 0, 0, 16, 0},
- { 0, 16, 0, 23, 32, 0, 0, 0, 16, 1},
-
- // DOCILE
- { 0, 0, 0, 0, 80, 0, 0, 0, 0, 1},
-
- // RELAXED
- { 0, 2, 8, 0, 32, 0, 0, 0, 0, 0},
- { 0, 2, -8, 0, 32, 0, 0, 0, 0, 1},
-
- // IMPISH
- { 0, 32, 2, 1, 48, 1, 0, 0, 24, 1},
-
- // LAX
- { 0, 2, 16, 16, 128, 0, 0, 0, 0, 1},
-
- // TIMID
- { 0, 2, -8, 0, 48, 0, -24, 0, 0, 0},
- { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
- { 64, 32, 2, 0, 36, 0, 0, 0, 0, 0},
- { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
- { 0, 2, 8, 0, 48, 0, 24, 0, 0, 1},
-
- // HASTY
- { 64, 24, 16, 0, 32, 0, 0, 0, 0, 0},
- { 0, 28, 2, 1, 32, 1, 0, 0, 16, 1},
-
- // SERIOUS
- { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1},
-
- // JOLLY
- { 64, 16, -16, 2, 48, 0, 0, 0, 32, 1},
-
- // NAIVE
- { 0, 12, -8, 4, 24, 0, 8, 0, 12, 0},
- { 0, 12, 8, 8, 24, 0, -16, 0, 12, 0},
- { 0, 12, -8, 16, 24, 0, 16, 0, 12, 0},
- { 0, 12, 8, 28, 24, 0, -8, 0, 12, 1},
-
- // MODEST
- { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
- { 64, 16, -4, 0, 32, 0, 0, 0, 0, 0},
- { 0, 0, 0, 0, 8, 0, 0, 0, 0, 1},
-
- // MILD
- { 128, 4, 0, 8, 64, 0, 0, 0, 0, 1},
-
- // QUIET
- { 0, 2, 16, 0, 48, 0, 0, 0, 0, 0},
- { 128, 2, 16, 0, 48, 0, 0, 0, 0, 1},
-
- // BASHFUL
- { 0, 2, -4, 0, 48, 0, -48, 0, 0, 0},
- { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0},
- { 0, 2, 8, 0, 24, 0, 48, 0, 0, 1},
-
- // RASH
- { 64, 4, 64, 58, 52, 0, -88, 0, 0, 0},
- { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0},
- { 0, 24, 80, 0, 32, 0, 88, 0, 0, 1},
-
- // CALM
- { 0, 2, 16, 4, 64, 0, 0, 0, 0, 1},
-
- // GENTLE
- { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1},
-
- // SASSY
- { 0, 0, 0, 0, 42, 0, 0, 0, 0, 1},
-
- // CAREFUL
- { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0},
- { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0},
- { 0, 4, 0, 12, 24, 0, 0, 0, 12, 0},
- { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0},
- { 0, 4, 0, 4, 24, 0, 0, 0, 12, 1},
-
- // QUIRKY
- { 0, 4, 16, 12, 64, 0, 0, 0, 0, 0},
- { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1},
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411E90[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411EA0[] =
-{
- AFFINEANIMCMD_FRAME(0, 0, 12, 1),
- AFFINEANIMCMD_FRAME(0, 0, 0, 30),
- AFFINEANIMCMD_FRAME(0, 0, -12, 1),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411EC0[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, 12, 1),
- AFFINEANIMCMD_FRAME(0, 0, 0, 28),
- AFFINEANIMCMD_FRAME(0, 0, -4, 3),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411EE8[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411F08[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411F30[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411F50[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411F78[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411F98[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411FC0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8411FE0[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8412008[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8412028[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_8412050[] =
-{
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411EA0,
- sSpriteAffineAnim_8411EE8,
- sSpriteAffineAnim_8411F30,
- sSpriteAffineAnim_8411F78,
- sSpriteAffineAnim_8411FC0,
- sSpriteAffineAnim_8412008,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411EC0,
- sSpriteAffineAnim_8411F08,
- sSpriteAffineAnim_8411F50,
- sSpriteAffineAnim_8411F98,
- sSpriteAffineAnim_8411FE0,
- sSpriteAffineAnim_8412028,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
- sSpriteAffineAnim_8411E90,
-};
-
-static const u8* const sPokeblocksPals[] =
-{
- gPokeblockRed_Pal,
- gPokeblockBlue_Pal,
- gPokeblockPink_Pal,
- gPokeblockGreen_Pal,
- gPokeblockYellow_Pal,
- gPokeblockPurple_Pal,
- gPokeblockIndigo_Pal,
- gPokeblockBrown_Pal,
- gPokeblockLiteBlue_Pal,
- gPokeblockOlive_Pal,
- gPokeblockGray_Pal,
- gPokeblockBlack_Pal,
- gPokeblockWhite_Pal,
- gPokeblockGold_Pal
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_84120EC[] =
-{
- sSpriteAffineAnim_84120DC
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_8412148[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A0[] =
-{
- sSpriteAffineAnim_84120DC
-};
-
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A4[] =
-{
- sSpriteAffineAnim_84120F0
-};
-
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A8[] =
-{
- sSpriteAffineAnim_8412148
-};
-
-static const struct OamData sThrownPokeblockOamData =
-{
- .y = 0,
- .affineMode = 3,
- .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 sThrownPokeblockSpriteAnim[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sThrownPokeblockAnimTable[] =
-{
- sThrownPokeblockSpriteAnim,
-};
-
-static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(-8, -8, 0, 1),
- AFFINEANIMCMD_JUMP(1)
-};
-
-static const union AffineAnimCmd *const sThrownPokeblockAffineAnimTable[] =
-{
- sSpriteAffineAnim_84121C0
-};
-
-static const struct CompressedSpriteSheet sUnknown_084121DC =
-{
- gPokeblock_Gfx, 0x20, 14818
-};
-
-static const struct SpriteTemplate sThrownPokeblockSpriteTemplate =
-{
- .tileTag = 14818,
- .paletteTag = 14818,
- .oam = &sThrownPokeblockOamData,
- .anims = sThrownPokeblockAnimTable,
- .images = NULL,
- .affineAnims = sThrownPokeblockAffineAnimTable,
- .callback = SpriteCB_ThrownPokeblock
-};
-
-// code
-
-static void CB2_PokeblockFeed(void)
-{
- AnimateSprites();
- BuildOamBuffer();
- RunTasks();
- UpdatePaletteFade();
-}
-
-static void VBlankCB_PokeblockFeed(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static bool8 TransitionToPokeblockFeedScene(void)
-{
- switch (gMain.state)
- {
- case 0:
- ClearVideoCallbacks();
- sub_80F9368();
- sub_8147B04();
- gMain.state++;
- break;
- case 1:
- ResetPaletteFade();
- gPaletteFade.bufferTransferDisabled = 1;
- gMain.state++;
- break;
- case 2:
- ResetSpriteData();
- gMain.state++;
- break;
- case 3:
- FreeAllSpritePalettes();
- gMain.state++;
- break;
- case 4:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6E50);
- gMain.state++;
- break;
- case 5:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E6E50);
- gMain.state++;
- break;
- case 6:
- if (MultistepInitMenuWindowContinue())
- {
- ewram1FFFF = 0;
- gMain.state++;
- }
- break;
- case 7:
- if (sub_8147B20(&gPlayerParty[gPokeblockMonID]))
- {
- gMain.state++;
- }
- break;
- case 8:
- ewram1FFFD = sub_81480B4();
- gMain.state++;
- break;
- case 9:
- ewram1FFFE = PokeblockFeed_CreatePokeSprite(&gPlayerParty[gPokeblockMonID]);
- gMain.state++;
- break;
- case 10:
- Menu_DrawStdWindowFrame(0, 14, 29, 19);
- gMain.state++;
- break;
- case 11:
- if (sub_8055870() != 1)
- {
- gMain.state++;
- }
- break;
- case 12:
- {
- u16 savedIME = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIME;
- REG_DISPSTAT |= 8;
- SetVBlankCallback(VBlankCB_PokeblockFeed);
- gMain.state++;
- }
- case 13:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- gPaletteFade.bufferTransferDisabled = 0;
- SetMainCallback2(CB2_PokeblockFeed);
- return TRUE;
- }
- return FALSE;
-}
-
-void CB2_PreparePokeblockFeedScene(void)
-{
- while (1)
- {
- if (TransitionToPokeblockFeedScene() == 1)
- {
- LaunchPokeblockFeedTask(1);
- break;
- }
- if (sub_80F9344() == 1)
- break;
- }
-}
-
-static void sub_8147B04(void)
-{
- REG_BG1CNT = 0x1D02l;
- REG_DISPCNT = 0x1340;
-}
-
-static bool8 sub_8147B20(struct Pokemon* mon)
-{
- u16 species;
- u32 PiD, TiD;
- switch (ewram1FFFF)
- {
- case 0:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- PiD = GetMonData(mon, MON_DATA_PERSONALITY);
- HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_081FAF4C[1], species, PiD);
- ewram1FFFF++;
- break;
- case 1:
- {
- const struct CompressedSpritePalette* palette;
-
- species = GetMonData(mon, MON_DATA_SPECIES2);
- PiD = GetMonData(mon, MON_DATA_PERSONALITY);
- TiD = GetMonData(mon, MON_DATA_OT_ID);
- palette = GetMonSpritePalStructFromOtIdPersonality(species, TiD, PiD);
- LoadCompressedObjectPalette(palette);
- GetMonSpriteTemplate_803C56C(palette->tag, 1);
- ewram1FFFF++;
- }
- break;
- case 2:
- LoadCompressedObjectPic(&gUnknown_083F7F74);
- ewram1FFFF++;
- break;
- case 3:
- LoadCompressedObjectPalette(&gUnknown_083F7F7C);
- ewram1FFFF++;
- break;
- case 4:
- LoadCompressedObjectPic(&sUnknown_084121DC);
- ewram1FFFF++;
- break;
- case 5:
- SetPokeblockFeedSpritePal(gSpecialVar_ItemId);
- LoadCompressedObjectPalette(&sPokeblockFeedSpritePal);
- ewram1FFFF++;
- break;
- case 6:
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM));
- ewram1FFFF++;
- break;
- case 7:
- LZDecompressVram(gUnknown_08E782FC, (void*)(VRAM + 0xE800));
- ewram1FFFF++;
- break;
- case 8:
- LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
- ewram1FFFF = 0;
- return TRUE;
- }
- return FALSE;
-}
-
-static void SetPokeblockFeedSpritePal(u8 pkbID)
-{
- u8 color = GetPokeblockData(&gSaveBlock1.pokeblocks[pkbID], PBLOCK_COLOR);
- sPokeblockFeedSpritePal.data = sPokeblocksPals[color - 1];
- sPokeblockFeedSpritePal.tag = 0x39E2;
-}
-
-static void sub_8147CC8(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- switch (gTasks[taskID].data[0])
- {
- case 0:
- gUnknown_03005F3C = 0;
- gUnknown_03005F94 = 0;
- sub_81481DC();
- break;
- case 255:
- sub_8148108(ewram1FFFD, gTasks[taskID].data[1]);
- break;
- case 269:
- ewram1FFFC = CreatePokeblockSprite();
- break;
- case 281:
- sub_8148044(ewram1FFFE);
- break;
- case 297:
- gTasks[taskID].func = Task_PrintAtePokeblockText;
- return;
- }
- if (gUnknown_03005F94 < gUnknown_03005F34)
- sub_814825C();
- else if (gUnknown_03005F94 == gUnknown_03005F34)
- gTasks[taskID].data[0] = 254;
-
- gUnknown_03005F94++;
- gTasks[taskID].data[0]++;
- }
-}
-
-static void LaunchPokeblockFeedTask(u8 a0)
-{
- u8 taskID = CreateTask(sub_8147CC8, 0);
- gTasks[taskID].data[0] = 0;
- gTasks[taskID].data[1] = a0;
-}
-
-static void Task_WaitForAtePokeblockText(u8 taskID)
-{
- if (Menu_UpdateWindowText() == 1)
- gTasks[taskID].func = Task_PaletteFadeToReturn;
-}
-
-static void Task_PrintAtePokeblockText(u8 taskID)
-{
- struct Pokemon* mon = &gPlayerParty[gPokeblockMonID];
- struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gSpecialVar_ItemId];
-
- gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock);
- GetMonNickname(mon, gStringVar1);
- PokeblockCopyName(pokeblock, gStringVar2);
-
- if (gPokeblockGain == 0)
- StringExpandPlaceholders(gStringVar4, gContestStatsText_NormallyAte);
- else if (gPokeblockGain > 0)
- StringExpandPlaceholders(gStringVar4, gContestStatsText_HappilyAte);
- else
- StringExpandPlaceholders(gStringVar4, gContestStatsText_DisdainfullyAte);
-
- MenuPrintMessage(gStringVar4, 1, 15);
- gTasks[taskID].func = Task_WaitForAtePokeblockText;
-}
-
-static void Task_ReturnAfterPaletteFade(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- m4aMPlayVolumeControl(&gMPlay_BGM, -1, 256);
- SetMainCallback2(gMain.savedCallback);
- DestroyTask(taskID);
- }
-}
-
-static void Task_PaletteFadeToReturn(u8 taskID)
-{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = Task_ReturnAfterPaletteFade;
-}
-
-static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2);
- u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2);
-
- gPokeblockFeedMonSpecies = species;
- gPokeblockFeedMonSpriteID = spriteID;
- gPokeblockFeedMonNature = GetNature(mon);
- gSprites[spriteID].data[2] = species;
- gSprites[spriteID].callback = SpriteCallbackDummy;
- gPokeblockMonNotFlipped = 1;
- if (!IsPokeSpriteNotFlipped(species))
- {
- gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84120EC;
- gSprites[spriteID].oam.affineMode = 3;
- CalcCenterToCornerVec(&gSprites[spriteID], gSprites[spriteID].oam.shape, gSprites[spriteID].oam.size, gSprites[spriteID].oam.affineMode);
- gPokeblockMonNotFlipped = 0;
- }
- return spriteID;
-}
-
-static void sub_8148044(u8 spriteID)
-{
- gSprites[spriteID].pos1.x = 48;
- gSprites[spriteID].pos1.y = 80;
- gSprites[spriteID].data[0] = -8;
- gSprites[spriteID].data[1] = 1;
- gSprites[spriteID].callback = sub_8148078;
-}
-
-static void sub_8148078(struct Sprite* sprite)
-{
- sprite->pos1.x += 4;
- sprite->pos1.y += sprite->data[0];
- sprite->data[0] += sprite->data[1];
- if (sprite->data[0] == 0)
- PlayCry1(sprite->data[2], 0);
- if (sprite->data[0] == 9)
- sprite->callback = SpriteCallbackDummy;
-}
-
-static u8 sub_81480B4(void)
-{
- u8 spriteID = sub_810BA50(188, 100, 2);
- gSprites[spriteID].oam.affineMode = 1;
- gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A0;
- gSprites[spriteID].callback = SpriteCallbackDummy;
- InitSpriteAffineAnim(&gSprites[spriteID]);
- return spriteID;
-}
-
-static void sub_8148108(u8 spriteID, bool8 a1)
-{
- FreeOamMatrix(gSprites[spriteID].oam.matrixNum);
- gSprites[spriteID].oam.affineMode = 3;
- if (!a1)
- gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A4;
- else
- gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A8;
- InitSpriteAffineAnim(&gSprites[spriteID]);
-}
-
-static u8 CreatePokeblockSprite(void)
-{
- u8 spriteID = CreateSprite(&sThrownPokeblockSpriteTemplate, 174, 84, 1);
- gSprites[spriteID].data[0] = -12;
- gSprites[spriteID].data[1] = 1;
- return spriteID;
-}
-
-static void SpriteCB_ThrownPokeblock(struct Sprite* sprite)
-{
- sprite->pos1.x -= 4;
- sprite->pos1.y += sprite->data[0];
- sprite->data[0] += sprite->data[1];
- if (sprite->data[0] == 10)
- DestroySprite(sprite);
-}
-
-static void sub_81481DC(void)
-{
- u8 animID, i;
-
- gUnknown_03005F34 = 1;
- animID = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0];
- for (i = 0; i < 8; i++, animID++)
- {
- gUnknown_03005F34 += sMonPokeblockAnims[animID][4];
- if (sMonPokeblockAnims[animID][9] == 1)
- break;
- }
-}
-
-static void sub_814825C(void)
-{
- switch (gUnknown_03005F3C)
- {
- case 0:
- gUnknown_03005F40 = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0];
- gPokeblockFeedPokeSprite = &gSprites[gPokeblockFeedMonSpriteID];
- gPokeblockFeedPokeSpriteCopy = *gPokeblockFeedPokeSprite;
- gUnknown_03005F3C = 10;
- break;
- case 1 ... 9:
- break;
- case 10:
- sub_8148540();
- if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0)
- {
- gPokeblockFeedPokeSprite->oam.affineMode = 3;
- gPokeblockFeedPokeSprite->oam.matrixNum = 0;
- gPokeblockFeedPokeSprite->affineAnims = sSpriteAffineAnimTable_8412050;
- InitSpriteAffineAnim(gPokeblockFeedPokeSprite);
- }
- gUnknown_03005F3C = 50;
- case 50:
- if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0)
- {
- if (gPokeblockMonNotFlipped == 0)
- StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10);
- else
- StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]);
- }
- gUnknown_03005F3C = 60;
- break;
- case 60:
- if (sub_81485CC() == 1)
- {
- if (gUnknown_03005FA0[9] == 0)
- {
- gUnknown_03005F40++;
- sub_8148540();
- gUnknown_03005F3C = 60;
- }
- else
- {
- FreeOamMatrix(gPokeblockFeedPokeSprite->oam.matrixNum);
- gUnknown_03005F3C = 70;
- }
- }
- break;
- case 70:
- FreePokeSpriteMatrix();
- gUnknown_03005F40 = 0;
- gUnknown_03005F3C = 0;
- break;
- case 71 ... 90:
- break;
- }
-}
-
-static bool8 sub_8148540(void)
-{
- u8 i;
- for (i = 0; i < 10; i++)
- gUnknown_03005FA0[i] = sMonPokeblockAnims[gUnknown_03005F40][i];
- if (gUnknown_03005FA0[4] == 0)
- return TRUE;
- else
- {
- gUnknown_03005FA0[10] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2]);
- gUnknown_03005FA0[11] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3]);
- gUnknown_03005FA0[12] = gUnknown_03005FA0[4];
- gUnknown_03005FA0[13] = gPokeblockFeedPokeSprite->pos2.x;
- gUnknown_03005FA0[14] = gPokeblockFeedPokeSprite->pos2.y;
- sub_8148710();
- gUnknown_03005FA0[4] = gUnknown_03005FA0[12];
- sub_814862C();
- gUnknown_03005FA0[4] = gUnknown_03005FA0[12];
- return FALSE;
- }
-}
-
-static bool8 sub_81485CC(void)
-{
- u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4];
-
- gPokeblockFeedPokeSprite->pos2.x = ewram1D000_2[var];
- gPokeblockFeedPokeSprite->pos2.y = ewram1D400[var];
-
- if (--gUnknown_03005FA0[4] == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-static bool8 FreePokeSpriteMatrix(void)
-{
- FreeSpriteOamMatrix(gPokeblockFeedPokeSprite);
- return FALSE;
-}
-
-static void sub_814862C(void)
-{
- u16 i;
- u16 r8 = gUnknown_03005FA0[8];
- u16 r7 = gUnknown_03005FA0[12] - r8;
- s16 var3 = gUnknown_03005FA0[13] + gUnknown_03005FA0[6];
- s16 r9 = gUnknown_03005FA0[14] + gUnknown_03005FA0[7];
-
- for (i = 0; i < r7 - 1; i++)
- {
- s16* r3 = &ewram1D000_2[r8 + i];
- s16 r1 = *r3 - (var3);
-
- s16* r5 = &ewram1D400[r8 + i];
- s16 r4 = *r5 - r9;
-
- *r3 -= r1 * (i + 1) / r7;
- *r5 -= r4 * (i + 1) / r7;
- }
-
- ewram1D000_2[(r8 + r7) - 1] = var3;
- ewram1D400[(r8 + r7) - 1] = r9;
-}
-
-void sub_8148710(void)
-{
- bool8 var_24 = FALSE;
- s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10];
- s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11];
- while (1)
- {
- u16 r5;
- u16 r4;
- u16 var;
-
- var = abs(gUnknown_03005FA0[5]);
- r5 = var + gUnknown_03005FA0[3];
- gUnknown_03005FA0[3] = r5;
-
- if (gUnknown_03005FA0[2] < 0)
- var_24 = TRUE;
-
- r4 = gUnknown_03005FA0[12] - gUnknown_03005FA0[4];
-
- if (gUnknown_03005FA0[4] == 0)
- break;
-
- if (!var_24)
- {
- ewram1D000_2[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8;
- ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7;
- }
- else
- {
- ewram1D000_2[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8;
- ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7;
- }
-
- gUnknown_03005FA0[0] += gUnknown_03005FA0[1];
- gUnknown_03005FA0[0] &= 0xFF;
- gUnknown_03005FA0[4]--;
- }
-}
diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c
deleted file mode 100644
index cbd816206..000000000
--- a/src/pokemon/pokedex.c
+++ /dev/null
@@ -1,5519 +0,0 @@
-#include "global.h"
-#include "gba/m4a_internal.h"
-#include "pokedex.h"
-#include "battle.h"
-#include "data2.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "graphics.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu.h"
-#include "menu_cursor.h"
-#include "palette.h"
-#include "pokedex_area_screen.h"
-#include "pokedex_cry_screen.h"
-#include "pokemon.h"
-#include "random.h"
-#include "overworld.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "string_util.h"
-#include "strings.h"
-#include "task.h"
-#include "trig.h"
-#include "scanline_effect.h"
-#include "ewram.h"
-
-#define NATIONAL_DEX_COUNT 386
-
-struct PokedexListItem
-{
- u16 dexNum;
- u16 seen:1;
- u16 owned:1;
-};
-
-struct PokedexView
-{
- struct PokedexListItem unk0[NATIONAL_DEX_COUNT];
- u16 unk608;
- u8 unk60A_1:1;
- u8 unk60A_2:1;
- u8 unk60B;
- u16 pokemonListCount;
- u16 selectedPokemon;
- u16 unk610;
- u16 dexMode;
- u16 unk614;
- u16 dexOrder;
- u16 unk618;
- u16 unk61A;
- u16 unk61C;
- u16 unk61E[4];
- u16 selectedMonSpriteId;
- u16 unk628;
- u16 unk62A;
- u8 unk62C;
- u8 unk62D;
- u8 unk62E;
- u8 unk62F;
- s16 unk630;
- s16 unk632;
- u16 unk634;
- u16 unk636;
- u16 unk638;
- u16 unk63A[4];
- u8 filler642[8];
- u8 unk64A;
- u8 unk64B;
- u8 unk64C_1:1;
- u8 selectedScreen;
- u8 descriptionPageNum;
- u8 unk64F;
- u8 menuIsOpen; //menuIsOpen
- u8 unk651;
- u16 menuCursorPos; //Menu cursor position
- s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this)
- u8 unk656[8];
- u8 unk65E[8];
-};
-
-enum
-{
- DEX_MODE_HOENN,
- DEX_MODE_NATIONAL
-};
-
-enum
-{
- PAGE_SCREEN,
- AREA_SCREEN,
- CRY_SCREEN,
- SIZE_SCREEN
-};
-
-struct PokedexEntry
-{
- /*0x00*/ u8 categoryName[12];
- /*0x0C*/ u16 height; //in decimeters
- /*0x0E*/ u16 weight; //in hectograms
- /*0x10*/ const u8 *descriptionPage1;
- /*0x14*/ const u8 *descriptionPage2;
- /*0x18*/ u16 unused;
- /*0x1A*/ u16 pokemonScale;
- /*0x1C*/ u16 pokemonOffset;
- /*0x1E*/ u16 trainerScale;
- /*0x20*/ u16 trainerOffset;
-}; /*size = 0x24*/
-
-struct UnknownStruct2
-{
- const u8 *text1;
- const u8 *text2;
-};
-
-struct UnknownStruct1
-{
- const struct UnknownStruct2 *unk0;
- u8 unk4;
- u8 unk5;
- u16 unk6;
-};
-
-struct UnknownStruct3
-{
- const u8 *text;
- u8 unk4;
- u8 unk5;
- u8 unk6;
-};
-
-struct UnknownStruct4
-{
- const u8 *text;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- u8 unk7;
- u8 unk8;
- u8 unk9;
-};
-
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gReservedSpritePaletteCount;
-extern struct SpriteTemplate gUnknown_02024E8C;
-extern u8 gUnknown_03005E98;
-extern const u8 gPokedexMenu_Gfx[];
-extern const u8 gUnknown_08E96738[];
-extern const u8 gUnknown_08E96888[];
-extern const u8 gUnknown_08E96994[];
-extern const u8 gUnknown_08E9C6DC[];
-extern const u8 gUnknown_08E96BD4[];
-extern const u8 gUnknown_08E96ACC[];
-extern const u8 gUnknown_08E96B58[];
-extern const u16 gPokedexMenu_Pal[];
-extern const u16 gPokedexMenu2_Pal[];
-extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
-extern const struct MonCoords gTrainerFrontPicCoords[];
-extern const struct PokedexEntry gPokedexEntries[];
-extern const u8 gPokedexMenuSearch_Gfx[];
-extern const u8 gUnknown_08E96D2C[];
-extern const u16 gPokedexMenuSearch_Pal[];
-extern const u8 gTypeNames[][7];
-extern const u8 gPokedexMenu2_Gfx[];
-
-static EWRAM_DATA struct PokedexView *gPokedexView = NULL;
-static EWRAM_DATA u16 gUnknown_0202FFB8 = 0;
-static EWRAM_DATA u8 gUnknown_0202FFBA = 0;
-static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL;
-
-u8 gUnknown_03005CE8;
-IntrCallback gUnknown_03005CEC;
-
-static u8 sub_8091E3C(void);
-
-static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal");
-static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal");
-const u8 gEmptySpacce_839F7FC[0xA4] = {0};
-static const u8 gUnknown_0839F8A0[] = INCBIN_U8("graphics/pokedex/pokedex_cry_layout.bin.lz");
-static const u8 gUnknown_0839F988[] = INCBIN_U8("graphics/pokedex/pokedex_size_layout.bin.lz");
-#if ENGLISH
-static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz");
-#elif GERMAN
-extern const u8 gUnknown_0839FA7C[];
-#endif
-
-#include "../data/pokedex_orders.h"
-static const struct OamData gOamData_83A0404 =
-{
- .y = 160,
- .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 struct OamData gOamData_83A040C =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 0,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const struct OamData gOamData_83A0414 =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const struct OamData gOamData_83A041C =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 2,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const struct OamData gOamData_83A0424 =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const struct OamData gOamData_83A042C =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 2,
- .x = 0,
- .matrixNum = 0,
- .size = 0,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const union AnimCmd gSpriteAnim_83A0434[] =
-{
- ANIMCMD_FRAME(3, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A043C[] =
-{
- ANIMCMD_FRAME(1, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0444[] =
-{
- ANIMCMD_FRAME(16, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A044C[] =
-{
- ANIMCMD_FRAME(32, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0454[] =
-{
- ANIMCMD_FRAME(64, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A045C[] =
-{
- ANIMCMD_FRAME(96, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0464[] =
-{
- ANIMCMD_FRAME(128, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A046C[] =
-{
- ANIMCMD_FRAME(160, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0474[] =
-{
- ANIMCMD_FRAME(192, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A047C[] =
-{
- ANIMCMD_FRAME(224, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0484[] =
-{
- ANIMCMD_FRAME(226, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A048C[] =
-{
- ANIMCMD_FRAME(228, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A0494[] =
-{
- ANIMCMD_FRAME(230, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A049C[] =
-{
- ANIMCMD_FRAME(232, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04A4[] =
-{
- ANIMCMD_FRAME(234, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04AC[] =
-{
- ANIMCMD_FRAME(236, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04B4[] =
-{
- ANIMCMD_FRAME(238, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04BC[] =
-{
- ANIMCMD_FRAME(240, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04C4[] =
-{
- ANIMCMD_FRAME(242, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_83A04CC[] =
-{
- ANIMCMD_FRAME(4, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04D4[] =
-{
- gSpriteAnim_83A0434,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04D8[] =
-{
- gSpriteAnim_83A043C,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04DC[] =
-{
- gSpriteAnim_83A0444,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04E0[] =
-{
- gSpriteAnim_83A044C,
- gSpriteAnim_83A0454,
- gSpriteAnim_83A045C,
- gSpriteAnim_83A0464,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04F0[] =
-{
- gSpriteAnim_83A046C,
- gSpriteAnim_83A0474,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A04F8[] =
-{
- gSpriteAnim_83A047C,
- gSpriteAnim_83A0484,
- gSpriteAnim_83A048C,
- gSpriteAnim_83A0494,
- gSpriteAnim_83A049C,
- gSpriteAnim_83A04A4,
- gSpriteAnim_83A04AC,
- gSpriteAnim_83A04B4,
- gSpriteAnim_83A04BC,
- gSpriteAnim_83A04C4,
-};
-static const union AnimCmd *const gSpriteAnimTable_83A0520[] =
-{
- gSpriteAnim_83A04CC,
-};
-static void sub_808EF38(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A0524 =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A0404,
- .anims = gSpriteAnimTable_83A04D4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808EF38,
-};
-static void sub_808EF8C(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A053C =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A040C,
- .anims = gSpriteAnimTable_83A04D8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808EF8C,
-};
-static void sub_808F08C(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A0554 =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A0414,
- .anims = gSpriteAnimTable_83A04E0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808F08C,
-};
-static void sub_808F0B4(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A056C =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A041C,
- .anims = gSpriteAnimTable_83A04DC,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808F0B4,
-};
-static void sub_808ED94(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A0584 =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A0424,
- .anims = gSpriteAnimTable_83A04F0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808ED94,
-};
-static const struct SpriteTemplate gSpriteTemplate_83A059C =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A042C,
- .anims = gSpriteAnimTable_83A04F8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808ED94,
-};
-static void sub_808F168(struct Sprite *);
-static const struct SpriteTemplate gSpriteTemplate_83A05B4 =
-{
- .tileTag = 4096,
- .paletteTag = 4096,
- .oam = &gOamData_83A042C,
- .anims = gSpriteAnimTable_83A0520,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_808F168,
-};
-static const struct CompressedSpriteSheet gUnknown_083A05CC[] =
-{
- {gPokedexMenu2_Gfx, 0x1F00, 0x1000},
- {NULL, 0, 0},
-};
-static const struct SpritePalette gUnknown_083A05DC[] =
-{
- {gPokedexMenu_Pal, 0x1000},
- {NULL, 0},
-};
-static const u8 gUnknown_083A05EC[] = {2, 4, 8, 16, 32};
-static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1};
-const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe?
-static const u8 gUnknown_083A05F8[] = _("");
-#if ENGLISH
-#include "../data/pokedex_entries_en.h"
-#elif GERMAN
-#include "../data/pokedex_entries_de.h"
-#endif
-static const u16 gUnknown_083B4EC4[16] = {0};
-static const u8 *const sMonFootprintTable[] =
-{
- gMonFootprint_Bulbasaur,
- gMonFootprint_Bulbasaur,
- gMonFootprint_Ivysaur,
- gMonFootprint_Venusaur,
- gMonFootprint_Charmander,
- gMonFootprint_Charmeleon,
- gMonFootprint_Charizard,
- gMonFootprint_Squirtle,
- gMonFootprint_Wartortle,
- gMonFootprint_Blastoise,
- gMonFootprint_Caterpie,
- gMonFootprint_Metapod,
- gMonFootprint_Butterfree,
- gMonFootprint_Weedle,
- gMonFootprint_Kakuna,
- gMonFootprint_Beedrill,
- gMonFootprint_Pidgey,
- gMonFootprint_Pidgeotto,
- gMonFootprint_Pidgeot,
- gMonFootprint_Rattata,
- gMonFootprint_Raticate,
- gMonFootprint_Spearow,
- gMonFootprint_Fearow,
- gMonFootprint_Ekans,
- gMonFootprint_Arbok,
- gMonFootprint_Pikachu,
- gMonFootprint_Raichu,
- gMonFootprint_Sandshrew,
- gMonFootprint_Sandslash,
- gMonFootprint_NidoranF,
- gMonFootprint_Nidorina,
- gMonFootprint_Nidoqueen,
- gMonFootprint_NidoranM,
- gMonFootprint_Nidorino,
- gMonFootprint_Nidoking,
- gMonFootprint_Clefairy,
- gMonFootprint_Clefable,
- gMonFootprint_Vulpix,
- gMonFootprint_Ninetales,
- gMonFootprint_Jigglypuff,
- gMonFootprint_Wigglytuff,
- gMonFootprint_Zubat,
- gMonFootprint_Golbat,
- gMonFootprint_Oddish,
- gMonFootprint_Gloom,
- gMonFootprint_Vileplume,
- gMonFootprint_Paras,
- gMonFootprint_Parasect,
- gMonFootprint_Venonat,
- gMonFootprint_Venomoth,
- gMonFootprint_Diglett,
- gMonFootprint_Dugtrio,
- gMonFootprint_Meowth,
- gMonFootprint_Persian,
- gMonFootprint_Psyduck,
- gMonFootprint_Golduck,
- gMonFootprint_Mankey,
- gMonFootprint_Primeape,
- gMonFootprint_Growlithe,
- gMonFootprint_Arcanine,
- gMonFootprint_Poliwag,
- gMonFootprint_Poliwhirl,
- gMonFootprint_Poliwrath,
- gMonFootprint_Abra,
- gMonFootprint_Kadabra,
- gMonFootprint_Alakazam,
- gMonFootprint_Machop,
- gMonFootprint_Machoke,
- gMonFootprint_Machamp,
- gMonFootprint_Bellsprout,
- gMonFootprint_Weepinbell,
- gMonFootprint_Victreebel,
- gMonFootprint_Tentacool,
- gMonFootprint_Tentacruel,
- gMonFootprint_Geodude,
- gMonFootprint_Graveler,
- gMonFootprint_Golem,
- gMonFootprint_Ponyta,
- gMonFootprint_Rapidash,
- gMonFootprint_Slowpoke,
- gMonFootprint_Slowbro,
- gMonFootprint_Magnemite,
- gMonFootprint_Magneton,
- gMonFootprint_Farfetchd,
- gMonFootprint_Doduo,
- gMonFootprint_Dodrio,
- gMonFootprint_Seel,
- gMonFootprint_Dewgong,
- gMonFootprint_Grimer,
- gMonFootprint_Muk,
- gMonFootprint_Shellder,
- gMonFootprint_Cloyster,
- gMonFootprint_Gastly,
- gMonFootprint_Haunter,
- gMonFootprint_Gengar,
- gMonFootprint_Onix,
- gMonFootprint_Drowzee,
- gMonFootprint_Hypno,
- gMonFootprint_Krabby,
- gMonFootprint_Kingler,
- gMonFootprint_Voltorb,
- gMonFootprint_Electrode,
- gMonFootprint_Exeggcute,
- gMonFootprint_Exeggutor,
- gMonFootprint_Cubone,
- gMonFootprint_Marowak,
- gMonFootprint_Hitmonlee,
- gMonFootprint_Hitmonchan,
- gMonFootprint_Lickitung,
- gMonFootprint_Koffing,
- gMonFootprint_Weezing,
- gMonFootprint_Rhyhorn,
- gMonFootprint_Rhydon,
- gMonFootprint_Chansey,
- gMonFootprint_Tangela,
- gMonFootprint_Kangaskhan,
- gMonFootprint_Horsea,
- gMonFootprint_Seadra,
- gMonFootprint_Goldeen,
- gMonFootprint_Seaking,
- gMonFootprint_Staryu,
- gMonFootprint_Starmie,
- gMonFootprint_Mrmime,
- gMonFootprint_Scyther,
- gMonFootprint_Jynx,
- gMonFootprint_Electabuzz,
- gMonFootprint_Magmar,
- gMonFootprint_Pinsir,
- gMonFootprint_Tauros,
- gMonFootprint_Magikarp,
- gMonFootprint_Gyarados,
- gMonFootprint_Lapras,
- gMonFootprint_Ditto,
- gMonFootprint_Eevee,
- gMonFootprint_Vaporeon,
- gMonFootprint_Jolteon,
- gMonFootprint_Flareon,
- gMonFootprint_Porygon,
- gMonFootprint_Omanyte,
- gMonFootprint_Omastar,
- gMonFootprint_Kabuto,
- gMonFootprint_Kabutops,
- gMonFootprint_Aerodactyl,
- gMonFootprint_Snorlax,
- gMonFootprint_Articuno,
- gMonFootprint_Zapdos,
- gMonFootprint_Moltres,
- gMonFootprint_Dratini,
- gMonFootprint_Dragonair,
- gMonFootprint_Dragonite,
- gMonFootprint_Mewtwo,
- gMonFootprint_Mew,
- gMonFootprint_Chikorita,
- gMonFootprint_Bayleef,
- gMonFootprint_Meganium,
- gMonFootprint_Cyndaquil,
- gMonFootprint_Quilava,
- gMonFootprint_Typhlosion,
- gMonFootprint_Totodile,
- gMonFootprint_Croconaw,
- gMonFootprint_Feraligatr,
- gMonFootprint_Sentret,
- gMonFootprint_Furret,
- gMonFootprint_Hoothoot,
- gMonFootprint_Noctowl,
- gMonFootprint_Ledyba,
- gMonFootprint_Ledian,
- gMonFootprint_Spinarak,
- gMonFootprint_Ariados,
- gMonFootprint_Crobat,
- gMonFootprint_Chinchou,
- gMonFootprint_Lanturn,
- gMonFootprint_Pichu,
- gMonFootprint_Cleffa,
- gMonFootprint_Igglybuff,
- gMonFootprint_Togepi,
- gMonFootprint_Togetic,
- gMonFootprint_Natu,
- gMonFootprint_Xatu,
- gMonFootprint_Mareep,
- gMonFootprint_Flaaffy,
- gMonFootprint_Ampharos,
- gMonFootprint_Bellossom,
- gMonFootprint_Marill,
- gMonFootprint_Azumarill,
- gMonFootprint_Sudowoodo,
- gMonFootprint_Politoed,
- gMonFootprint_Hoppip,
- gMonFootprint_Skiploom,
- gMonFootprint_Jumpluff,
- gMonFootprint_Aipom,
- gMonFootprint_Sunkern,
- gMonFootprint_Sunflora,
- gMonFootprint_Yanma,
- gMonFootprint_Wooper,
- gMonFootprint_Quagsire,
- gMonFootprint_Espeon,
- gMonFootprint_Umbreon,
- gMonFootprint_Murkrow,
- gMonFootprint_Slowking,
- gMonFootprint_Misdreavus,
- gMonFootprint_Unown,
- gMonFootprint_Wobbuffet,
- gMonFootprint_Girafarig,
- gMonFootprint_Pineco,
- gMonFootprint_Forretress,
- gMonFootprint_Dunsparce,
- gMonFootprint_Gligar,
- gMonFootprint_Steelix,
- gMonFootprint_Snubbull,
- gMonFootprint_Granbull,
- gMonFootprint_Qwilfish,
- gMonFootprint_Scizor,
- gMonFootprint_Shuckle,
- gMonFootprint_Heracross,
- gMonFootprint_Sneasel,
- gMonFootprint_Teddiursa,
- gMonFootprint_Ursaring,
- gMonFootprint_Slugma,
- gMonFootprint_Magcargo,
- gMonFootprint_Swinub,
- gMonFootprint_Piloswine,
- gMonFootprint_Corsola,
- gMonFootprint_Remoraid,
- gMonFootprint_Octillery,
- gMonFootprint_Delibird,
- gMonFootprint_Mantine,
- gMonFootprint_Skarmory,
- gMonFootprint_Houndour,
- gMonFootprint_Houndoom,
- gMonFootprint_Kingdra,
- gMonFootprint_Phanpy,
- gMonFootprint_Donphan,
- gMonFootprint_Porygon2,
- gMonFootprint_Stantler,
- gMonFootprint_Smeargle,
- gMonFootprint_Tyrogue,
- gMonFootprint_Hitmontop,
- gMonFootprint_Smoochum,
- gMonFootprint_Elekid,
- gMonFootprint_Magby,
- gMonFootprint_Miltank,
- gMonFootprint_Blissey,
- gMonFootprint_Raikou,
- gMonFootprint_Entei,
- gMonFootprint_Suicune,
- gMonFootprint_Larvitar,
- gMonFootprint_Pupitar,
- gMonFootprint_Tyranitar,
- gMonFootprint_Lugia,
- gMonFootprint_HoOh,
- gMonFootprint_Celebi,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_QuestionMark,
- gMonFootprint_Treecko,
- gMonFootprint_Grovyle,
- gMonFootprint_Sceptile,
- gMonFootprint_Torchic,
- gMonFootprint_Combusken,
- gMonFootprint_Blaziken,
- gMonFootprint_Mudkip,
- gMonFootprint_Marshtomp,
- gMonFootprint_Swampert,
- gMonFootprint_Poochyena,
- gMonFootprint_Mightyena,
- gMonFootprint_Zigzagoon,
- gMonFootprint_Linoone,
- gMonFootprint_Wurmple,
- gMonFootprint_Silcoon,
- gMonFootprint_Beautifly,
- gMonFootprint_Cascoon,
- gMonFootprint_Dustox,
- gMonFootprint_Lotad,
- gMonFootprint_Lombre,
- gMonFootprint_Ludicolo,
- gMonFootprint_Seedot,
- gMonFootprint_Nuzleaf,
- gMonFootprint_Shiftry,
- gMonFootprint_Nincada,
- gMonFootprint_Ninjask,
- gMonFootprint_Shedinja,
- gMonFootprint_Taillow,
- gMonFootprint_Swellow,
- gMonFootprint_Shroomish,
- gMonFootprint_Breloom,
- gMonFootprint_Spinda,
- gMonFootprint_Wingull,
- gMonFootprint_Pelipper,
- gMonFootprint_Surskit,
- gMonFootprint_Masquerain,
- gMonFootprint_Wailmer,
- gMonFootprint_Wailord,
- gMonFootprint_Skitty,
- gMonFootprint_Delcatty,
- gMonFootprint_Kecleon,
- gMonFootprint_Baltoy,
- gMonFootprint_Claydol,
- gMonFootprint_Nosepass,
- gMonFootprint_Torkoal,
- gMonFootprint_Sableye,
- gMonFootprint_Barboach,
- gMonFootprint_Whiscash,
- gMonFootprint_Luvdisc,
- gMonFootprint_Corphish,
- gMonFootprint_Crawdaunt,
- gMonFootprint_Feebas,
- gMonFootprint_Milotic,
- gMonFootprint_Carvanha,
- gMonFootprint_Sharpedo,
- gMonFootprint_Trapinch,
- gMonFootprint_Vibrava,
- gMonFootprint_Flygon,
- gMonFootprint_Makuhita,
- gMonFootprint_Hariyama,
- gMonFootprint_Electrike,
- gMonFootprint_Manectric,
- gMonFootprint_Numel,
- gMonFootprint_Camerupt,
- gMonFootprint_Spheal,
- gMonFootprint_Sealeo,
- gMonFootprint_Walrein,
- gMonFootprint_Cacnea,
- gMonFootprint_Cacturne,
- gMonFootprint_Snorunt,
- gMonFootprint_Glalie,
- gMonFootprint_Lunatone,
- gMonFootprint_Solrock,
- gMonFootprint_Azurill,
- gMonFootprint_Spoink,
- gMonFootprint_Grumpig,
- gMonFootprint_Plusle,
- gMonFootprint_Minun,
- gMonFootprint_Mawile,
- gMonFootprint_Meditite,
- gMonFootprint_Medicham,
- gMonFootprint_Swablu,
- gMonFootprint_Altaria,
- gMonFootprint_Wynaut,
- gMonFootprint_Duskull,
- gMonFootprint_Dusclops,
- gMonFootprint_Roselia,
- gMonFootprint_Slakoth,
- gMonFootprint_Vigoroth,
- gMonFootprint_Slaking,
- gMonFootprint_Gulpin,
- gMonFootprint_Swalot,
- gMonFootprint_Tropius,
- gMonFootprint_Whismur,
- gMonFootprint_Loudred,
- gMonFootprint_Exploud,
- gMonFootprint_Clamperl,
- gMonFootprint_Huntail,
- gMonFootprint_Gorebyss,
- gMonFootprint_Absol,
- gMonFootprint_Shuppet,
- gMonFootprint_Banette,
- gMonFootprint_Seviper,
- gMonFootprint_Zangoose,
- gMonFootprint_Relicanth,
- gMonFootprint_Aron,
- gMonFootprint_Lairon,
- gMonFootprint_Aggron,
- gMonFootprint_Castform,
- gMonFootprint_Volbeat,
- gMonFootprint_Illumise,
- gMonFootprint_Lileep,
- gMonFootprint_Cradily,
- gMonFootprint_Anorith,
- gMonFootprint_Armaldo,
- gMonFootprint_Ralts,
- gMonFootprint_Kirlia,
- gMonFootprint_Gardevoir,
- gMonFootprint_Bagon,
- gMonFootprint_Shelgon,
- gMonFootprint_Salamence,
- gMonFootprint_Beldum,
- gMonFootprint_Metang,
- gMonFootprint_Metagross,
- gMonFootprint_Regirock,
- gMonFootprint_Regice,
- gMonFootprint_Registeel,
- gMonFootprint_Kyogre,
- gMonFootprint_Groudon,
- gMonFootprint_Rayquaza,
- gMonFootprint_Latias,
- gMonFootprint_Latios,
- gMonFootprint_Jirachi,
- gMonFootprint_Deoxys,
- gMonFootprint_Chimecho,
- gMonFootprint_Bulbasaur,
-};
-static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}");
-const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin");
-static const struct OamData gOamData_83B557C =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static void *const gUnknown_083B5584[] =
-{
- ePokedexPalAddr1,
- ePokedexPalAddr2,
- ePokedexPalAddr3,
- ePokedexPalAddr4,
-};
-static const struct SpriteFrameImage gSpriteImageTable_83B5594[] =
-{
- {ewram8000, 0x800},
- {ewram8800, 0x800},
- {ewram9000, 0x800},
- {ewram9800, 0x800},
- {ewramA000, 0x800},
- {ewramA800, 0x800},
- {ewramB000, 0x800},
- {ewramB800, 0x800},
- {ewramC000, 0x800},
- {ewramC800, 0x800},
- {ewramD000, 0x800},
- {ewramD800, 0x800},
- {ewramE000, 0x800},
- {ewramE800, 0x800},
- {ewramF000, 0x800},
- {ewramF800, 0x800},
-};
-static const struct SpriteFrameImage gSpriteImageTable_83B5614[] =
-{
- {ewramC000, 0x800},
- {ewramC800, 0x800},
- {ewramD000, 0x800},
- {ewramD800, 0x800},
- {ewramE000, 0x800},
- {ewramE800, 0x800},
- {ewramF000, 0x800},
- {ewramF800, 0x800},
- {ewram10000, 0x800},
- {ewram10800, 0x800},
- {ewram11000, 0x800},
- {ewram11800, 0x800},
- {ewram12000, 0x800},
- {ewram12800, 0x800},
- {ewram13000, 0x800},
- {ewram13800, 0x800},
-};
-static const struct SpriteFrameImage gSpriteImageTable_83B5694[] =
-{
- {ewram10000, 0x800},
- {ewram10800, 0x800},
- {ewram11000, 0x800},
- {ewram11800, 0x800},
- {ewram12000, 0x800},
- {ewram12800, 0x800},
- {ewram13000, 0x800},
- {ewram13800, 0x800},
- {ewram14000, 0x800},
- {ewram14800, 0x800},
- {ewram15000, 0x800},
- {ewram15800, 0x800},
- {ewram16000_2, 0x800},
- {ewram16800, 0x800},
- {ewram17000, 0x800},
- {ewram17800_2, 0x800},
-};
-static const struct SpriteFrameImage gSpriteImageTable_83B5714[] =
-{
- {ewram14000, 0x800},
- {ewram14800, 0x800},
- {ewram15000, 0x800},
- {ewram15800, 0x800},
- {ewram16000_2, 0x800},
- {ewram16800, 0x800},
- {ewram17000, 0x800},
- {ewram17800_2, 0x800},
- {ewram18000_2, 0x800},
- {ewram18800, 0x800},
- {ewram19000, 0x800},
- {ewram19800, 0x800},
- {ewram1A000, 0x800},
- {ewram1A800, 0x800},
- {ewram1B000_2, 0x800},
- {ewram1B800, 0x800},
-};
-static const struct SpriteFrameImage *const gUnknown_083B5794[] =
-{
- gSpriteImageTable_83B5594,
- gSpriteImageTable_83B5614,
- gSpriteImageTable_83B5694,
- gSpriteImageTable_83B5714,
-};
-static void nullsub_59(struct Sprite *);
-static const struct SpriteTemplate gUnknown_083B57A4 =
-{
- .tileTag = 0xFFFF,
- .paletteTag = 0,
- .oam = &gOamData_83B557C,
- .anims = NULL,
- .images = gSpriteImageTable_83B5594,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = nullsub_59,
-};
-static const u8 gUnknown_083B57BC[][4] =
-{
- {0, 0, 0, 0},
- {CHAR_A, 3, CHAR_a, 3},
- {CHAR_D, 3, CHAR_d, 3},
- {CHAR_G, 3, CHAR_g, 3},
- {CHAR_J, 3, CHAR_j, 3},
- {CHAR_M, 3, CHAR_m, 3},
- {CHAR_P, 3, CHAR_p, 3},
- {CHAR_S, 3, CHAR_s, 3},
- {CHAR_V, 3, CHAR_v, 3},
- {CHAR_Y, 2, CHAR_y, 2},
-};
-static const struct UnknownStruct3 gUnknown_083B57E4[] =
-{
- {DexText_SearchForPoke, 0, 0, 5},
- {DexText_SwitchDex, 6, 0, 5},
- {DexText_ReturnToDex, 12, 0, 5},
-};
-static const struct UnknownStruct4 gUnknown_083B57FC[] =
-{
- {DexText_ListByABC, 0, 2, 5, 5, 2, 12},
- {DexText_ListByColor, 0, 4, 5, 5, 4, 12},
- {DexText_ListByType, 0, 6, 5, 5, 6, 6},
- {DexText_ListByType, 0, 6, 5, 11, 6, 6},
- {DexText_SelectDexList, 0, 8, 5, 5, 8, 12},
- {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12},
- {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0},
-};
-static const u8 gUnknown_083B5850[][4] =
-{
- {0xFF, 0xFF, 0xFF, 1},
- {0xFF, 0xFF, 0, 2},
- {0xFF, 3, 1, 4},
- { 2, 0xFF, 1, 4},
- {0xFF, 0xFF, 2, 5},
- {0xFF, 0xFF, 4, 6},
- {0xFF, 0xFF, 5, 0xFF},
-};
-static const u8 gUnknown_083B586C[][4] =
-{
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 5},
- {0xFF, 0xFF, 4, 6},
- {0xFF, 0xFF, 5, 0xFF},
-};
-static const u8 gUnknown_083B5888[][4] =
-{
- {0xFF, 0xFF, 0xFF, 1},
- {0xFF, 0xFF, 0, 2},
- {0xFF, 3, 1, 4},
- { 2, 0xFF, 1, 4},
- {0xFF, 0xFF, 2, 6},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 4, 0xFF},
-};
-static const u8 gUnknown_083B58A4[][4] =
-{
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 6},
- {0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 4, 0xFF},
-};
-static const struct UnknownStruct2 gUnknown_083B58C0[] =
-{
- {DexText_HoennDex2, DexText_HoennDex},
- {DexText_NationalDex2, DexText_NationalDex},
- {NULL, NULL},
-};
-static const struct UnknownStruct2 gUnknown_083B58D8[] =
-{
- {DexText_ListByNumber, DexText_NumericalMode},
- {DexText_ListByABC2, DexText_ABCMode},
- {DexText_ListByHeavyToLightest, DexText_HeaviestMode},
- {DexText_ListByLightToHeaviest, DexText_LightestMode},
- {DexText_ListByTallToSmallest, DexText_TallestMode},
- {DexText_ListBySmallToTallest, DexText_SmallestMode},
- {NULL, NULL},
-};
-static const struct UnknownStruct2 gUnknown_083B5910[] =
-{
- {DexText_Terminator5, DexText_DontSpecify},
- {DexText_Terminator5, DexText_ABC},
- {DexText_Terminator5, DexText_DEF},
- {DexText_Terminator5, DexText_GHI},
- {DexText_Terminator5, DexText_JKL},
- {DexText_Terminator5, DexText_MNO},
- {DexText_Terminator5, DexText_PQR},
- {DexText_Terminator5, DexText_STU},
- {DexText_Terminator5, DexText_VWX},
- {DexText_Terminator5, DexText_YZ},
- {NULL, NULL},
-};
-static const struct UnknownStruct2 gUnknown_083B5968[] =
-{
- {DexText_Terminator5, DexText_DontSpecify},
- {DexText_Terminator5, DexText_Red},
- {DexText_Terminator5, DexText_Blue},
- {DexText_Terminator5, DexText_Yellow},
- {DexText_Terminator5, DexText_Green},
- {DexText_Terminator5, DexText_Black},
- {DexText_Terminator5, DexText_Brown},
- {DexText_Terminator5, DexText_Purple},
- {DexText_Terminator5, DexText_Gray},
- {DexText_Terminator5, DexText_White},
- {DexText_Terminator5, DexText_Pink},
- {NULL, NULL},
-};
-static const struct UnknownStruct2 gUnknown_083B59C8[] =
-{
- {DexText_Terminator5, DexText_None},
- {DexText_Terminator5, gTypeNames[TYPE_NORMAL]},
- {DexText_Terminator5, gTypeNames[TYPE_FIGHTING]},
- {DexText_Terminator5, gTypeNames[TYPE_FLYING]},
- {DexText_Terminator5, gTypeNames[TYPE_POISON]},
- {DexText_Terminator5, gTypeNames[TYPE_GROUND]},
- {DexText_Terminator5, gTypeNames[TYPE_ROCK]},
- {DexText_Terminator5, gTypeNames[TYPE_BUG]},
- {DexText_Terminator5, gTypeNames[TYPE_GHOST]},
- {DexText_Terminator5, gTypeNames[TYPE_STEEL]},
- {DexText_Terminator5, gTypeNames[TYPE_FIRE]},
- {DexText_Terminator5, gTypeNames[TYPE_WATER]},
- {DexText_Terminator5, gTypeNames[TYPE_GRASS]},
- {DexText_Terminator5, gTypeNames[TYPE_ELECTRIC]},
- {DexText_Terminator5, gTypeNames[TYPE_PSYCHIC]},
- {DexText_Terminator5, gTypeNames[TYPE_ICE]},
- {DexText_Terminator5, gTypeNames[TYPE_DRAGON]},
- {DexText_Terminator5, gTypeNames[TYPE_DARK]},
- {NULL, NULL},
-};
-static const u8 gUnknown_083B5A60[] = {0, 1};
-static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5};
-static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
-static const struct UnknownStruct1 gUnknown_083B5A7C[] =
-{
- {gUnknown_083B5910, 6, 7, 10},
- {gUnknown_083B5968, 8, 9, 11},
- {gUnknown_083B59C8, 10, 11, 18},
- {gUnknown_083B59C8, 12, 13, 18},
- {gUnknown_083B58D8, 4, 5, 6},
- {gUnknown_083B58C0, 2, 3, 2},
-};
-static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}");
-static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}");
-
-static void MainCB(void);
-static void Task_PokedexShowMainScreen(u8 taskId);
-static void Task_PokedexMainScreen(u8 taskId);
-static void sub_808C898(u8 taskId);
-static void Task_PokedexMainScreenMenu(u8 taskId);
-static void sub_808CA64(u8 taskId);
-static void sub_808CAE4(u8 taskId);
-static void sub_808CB8C(u8 taskId);
-static void Task_ClosePokedex(u8 taskId);
-static void sub_808CCC4(u8 taskId);
-static void Task_PokedexResultsScreen(u8 taskId);
-static void sub_808CEF8(u8 taskId);
-static void Task_PokedexResultsScreenMenu(u8 taskId);
-static void sub_808D118(u8 taskId);
-static void sub_808D198(u8 taskId);
-static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId);
-static void Task_PokedexResultsScreenExitPokedex(u8 taskId);
-static bool8 sub_808D344(u8 a);
-static void sub_808D640(void);
-static void SortPokedex(u8 dexMode, u8 sortMode);
-static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d);
-static void sub_808DF88(u16 a, u8 b, u8 c, u16 d);
-static u8 sub_808DFE4(u16 num, u8 b, u8 c);
-static void sub_808E090(u8 a, u8 b, u16 c);
-static void sub_808E0CC(u16 a, u16 b);
-static bool8 sub_808E208(u8 a, u8 b, u8 c);
-static u16 sub_808E48C(u16 a, u16 b);
-static void sub_808E6BC(void);
-static u8 sub_808E71C(void);
-static u8 sub_808E82C(void);
-static u16 sub_808E888(u16 a1);
-static u32 sub_808E8C8(u16 a, s16 b, s16 c);
-static void sub_808E978(u8 a);
-static void sub_808EDB8(struct Sprite *sprite);
-static void sub_808EE28(struct Sprite *sprite);
-static u8 sub_808F210(struct PokedexListItem *, u8);
-static bool8 sub_808F250(u8 taskId);
-static u8 sub_808F284(struct PokedexListItem *, u8);
-static void Task_InitPageScreenMultistep(u8 taskId);
-static void Task_PageScreenProcessInput(u8 taskId);
-static void sub_808F888(u8 taskId);
-static void Task_ClosePageScreen(u8 taskId);
-static void Task_InitAreaScreenMultistep(u8 taskId);
-static void Task_AreaScreenProcessInput(u8 taskId);
-static void sub_808FA00(u8 taskId);
-static void Task_InitCryScreenMultistep(u8 taskId);
-static void Task_CryScreenProcessInput(u8 taskId);
-static void sub_808FFBC(u8 taskId);
-static void sub_8090040(u8 a);
-static void Task_InitSizeScreenMultistep(u8 taskId);
-static void Task_SizeScreenProcessInput(u8 taskId);
-static void sub_8090498(u8 taskId);
-static void sub_80904FC(u16 a);
-static void sub_8090540(u16 a);
-static void sub_8090584(u8 a, u16 b);
-static void sub_8090644(u8 a, u16 b);
-static void sub_8090750(u8);
-static void sub_8090A3C(u8);
-static void sub_8090B8C(u8);
-static void sub_8090C28(struct Sprite *);
-static void sub_8090C68(void);
-static void sub_8091060(u16);
-static void sub_8091154(u16 order, u8, u8);
-static u8 sub_80911C8(u16 num, u8, u8);
-static u8 sub_8091260(u16 num, u8, u8, u8);
-static void sub_8091304(const u8 *name, u8, u8);
-static void sub_8091458(u16 height, u8 i, u8 i1);
-static void sub_8091564(u16 weight, u8 i, u8 i1);
-static void sub_8091738(u16, u16, u16);
-static void sub_80917CC(u16 i, u16 i1);
-static u16 sub_8091818(u8, u16, u16, u16);
-u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d);
-u8 sub_8091A4C(u16 gender, s16, s16, u16);
-static void sub_8091E54(u8);
-static void sub_809204C(u8);
-static void sub_809207C(u8);
-static void sub_809217C(u8);
-static void sub_80921B0(u8);
-static void sub_80923FC(u8);
-static void sub_80924A4(u8);
-static void sub_8092508(u8);
-static void sub_80925CC(u8);
-static void sub_8092644(u8);
-static void sub_80927B8(u8);
-static void sub_80927F0(u8);
-static void sub_8092AB0(u8);
-static void sub_8092AD4(u8, u8);
-static void sub_8092B68(u8);
-static void sub_8092C8C(u8);
-static void sub_8092D78(u8);
-static u8 sub_8092E10(u8, u8);
-static void sub_8092EB0(u8);
-static void sub_809308C(u8);
-
-
-void ResetPokedex(void)
-{
- u16 i;
-
- gUnknown_0202FFB8 = 0;
- gUnknown_0202FFBA = 0x40;
- gUnknown_03005CE8 = 0;
- gSaveBlock2.pokedex.unknown1 = 0;
- gSaveBlock2.pokedex.order = 0;
- gSaveBlock2.pokedex.nationalMagic = 0;
- gSaveBlock2.pokedex.unknown2 = 0;
- gSaveBlock2.pokedex.unownPersonality = 0;
- gSaveBlock2.pokedex.spindaPersonality = 0;
- gSaveBlock2.pokedex.unknown3 = 0;
- DisableNationalPokedex();
- for (i = 0; i <= 51; i++)
- {
- gSaveBlock2.pokedex.owned[i] = 0;
- gSaveBlock2.pokedex.seen[i] = 0;
- gSaveBlock1.dexSeen2[i] = 0;
- gSaveBlock1.dexSeen3[i] = 0;
- }
-}
-
-void sub_808C0A0(void)
-{
- gUnknown_0202FFB8 = 0;
- gUnknown_0202FFBA = 0x40;
-}
-
-static void sub_808C0B8(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void ClearPokedexView(struct PokedexView *pokedexView)
-{
- u16 i;
-
- for (i = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- pokedexView->unk0[i].dexNum |= 0xFFFF;
- pokedexView->unk0[i].seen = 0;
- pokedexView->unk0[i].owned = 0;
- }
- pokedexView->unk608 = 0;
- pokedexView->unk60A_1 = 0;
- pokedexView->unk60A_2 = 0;
- pokedexView->pokemonListCount = 0;
- pokedexView->selectedPokemon = 0;
- pokedexView->unk610 = 0;
- pokedexView->dexMode = 0;
- pokedexView->unk614 = 0;
- pokedexView->dexOrder = 0;
- pokedexView->unk618 = 0;
- pokedexView->unk61A = 0;
- pokedexView->unk61C = 0;
- for (i = 0; i <= 3; i++)
- pokedexView->unk61E[i] |= 0xFFFF;
- pokedexView->unk628 = 0;
- pokedexView->unk62A = 0;
- pokedexView->unk62C = 0;
- pokedexView->unk62D = 0;
- pokedexView->unk62E = 0;
- pokedexView->unk62F = 0;
- pokedexView->unk630 = 0;
- pokedexView->unk632 = 0;
- pokedexView->unk634 = 0;
- pokedexView->unk636 = 0;
- pokedexView->unk638 = 0;
- for (i = 0; i <= 3; i++)
- pokedexView->unk63A[i] = 0;
- pokedexView->unk64A = 0;
- pokedexView->unk64B = 0;
- pokedexView->unk64C_1 = 0;
- pokedexView->selectedScreen = 0;
- pokedexView->unk64F = 0;
- pokedexView->menuIsOpen = 0;
- pokedexView->menuCursorPos = 0;
- pokedexView->menuY = 0;
- for (i = 0; i <= 7; i++)
- pokedexView->unk656[i] = 0;
- for (i = 0; i <= 7; i++)
- pokedexView->unk65E[i] = 0;
-}
-
-void CB2_InitPokedex(void)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- SetVBlankCallback(NULL);
- sub_8091060(0);
- DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000);
- DmaClear32(3, OAM, OAM_SIZE);
- DmaClear16(3, PLTT, PLTT_SIZE);
- gMain.state = 1;
- break;
- case 1:
- ScanlineEffect_Stop();
- ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- Text_LoadWindowTemplate(&gWindowTemplate_81E7048);
- InitMenuWindow(&gWindowTemplate_81E7048);
- gMain.state++;
- break;
- case 2:
- switch (Random() & 3)
- {
- case 0:
- default:
- gPokedexView = ePokedexView1;
- break;
- case 1:
- gPokedexView = ePokedexView2;
- break;
- case 2:
- gPokedexView = ePokedexView3;
- break;
- case 3:
- gPokedexView = ePokedexView4;
- break;
- }
- ClearPokedexView(gPokedexView);
- CreateTask(Task_PokedexShowMainScreen, 0);
- gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gSaveBlock2.pokedex.order;
- gPokedexView->selectedPokemon = gUnknown_0202FFB8;
- gPokedexView->unk62C = gUnknown_0202FFBA;
- gPokedexView->selectedScreen = PAGE_SCREEN;
- gPokedexView->descriptionPageNum = 0;
- if (!IsNationalPokedexEnabled())
- {
- gPokedexView->unk61A = GetHoennPokedexCount(0);
- gPokedexView->unk61C = GetHoennPokedexCount(1);
- }
- else
- {
- gPokedexView->unk61A = GetNationalPokedexCount(0);
- gPokedexView->unk61C = GetNationalPokedexCount(1);
- }
- gPokedexView->unk62D = 8;
- gMain.state++;
- break;
- case 3:
- {
- u16 savedIme;
-
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIme;
- REG_DISPSTAT |= 8;
- SetVBlankCallback(sub_808C0B8);
- SetMainCallback2(MainCB);
- SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder);
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80);
- }
- break;
- }
-}
-
-u8 unref_sub_808C540(void (*func)(u8))
-{
- u16 savedIme;
- u8 taskId;
-
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- ScanlineEffect_Stop();
- ResetTasks();
- ResetPaletteFade();
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIme;
- REG_DISPSTAT |= 0x8;
- SetVBlankCallback(sub_808C0B8);
- SetMainCallback2(MainCB);
- if (!gPokedexView->unk64B)
- taskId = CreateTask(sub_808CAE4, 0);
- else
- taskId = CreateTask(sub_808D198, 0);
- gTasks[taskId].data[0] = CreateTask(func, 0);
- return gTasks[taskId].data[0];
-}
-
-static void MainCB(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void Task_PokedexShowMainScreen(u8 taskId)
-{
- gPokedexView->unk64C_1 = 0;
- if (sub_808D344(0))
- gTasks[taskId].func = Task_PokedexMainScreen;
-}
-
-//Hide menu and process input on main screen
-void Task_PokedexMainScreen(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- //If menu is open, slide it down, off screen
- if (gPokedexView->menuY)
- gPokedexView->menuY -= 8;
- else
- {
- if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen)
- {
- sub_808E6BC();
- BeginNormalPaletteFade(
- ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)),
- 0, 0, 0x10, 0);
- gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8;
- gTasks[taskId].func = sub_808CA64;
- PlaySE(SE_PIN);
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- //Open menu
- gPokedexView->menuY = 0;
- gPokedexView->menuIsOpen = 1;
- gPokedexView->menuCursorPos = 0;
- gTasks[taskId].func = Task_PokedexMainScreenMenu;
- PlaySE(SE_SELECT);
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].data[0] = sub_8091E3C();
- gPokedexView->unk64F = 0;
- gPokedexView->unk62A = gPokedexView->unk62C;
- gPokedexView->unk610 = gPokedexView->selectedPokemon;
- gPokedexView->unk614 = gPokedexView->dexMode;
- gPokedexView->unk618 = gPokedexView->dexOrder;
- gTasks[taskId].func = sub_808CB8C;
- PlaySE(SE_PC_LOGON);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ClosePokedex;
- PlaySE(SE_PC_OFF);
- }
- else
- {
- //Handle D-pad
- gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE);
- if (gPokedexView->unk62E)
- gTasks[taskId].func = sub_808C898;
- }
- }
-}
-
-static void sub_808C898(u8 taskId)
-{
- if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636))
- gTasks[taskId].func = Task_PokedexMainScreen;
-}
-
-//Bring up menu and process menu input
-static void Task_PokedexMainScreenMenu(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- //If menu is not open, slide it up, on screen
- if (gPokedexView->menuY != 80)
- gPokedexView->menuY += 8;
- else
- {
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->menuCursorPos)
- {
- case 0: //BACK TO LIST
- default:
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 1: //LIST TOP
- gPokedexView->selectedPokemon = 0;
- gPokedexView->unk62C = 0x40;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
- gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 3: //CLOSE POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ClosePokedex;
- PlaySE(SE_PC_OFF);
- break;
- }
- }
-
- //Exit menu when Start or B is pressed
- if (gMain.newKeys & (START_BUTTON | B_BUTTON))
- {
- gPokedexView->menuIsOpen = 0;
- gTasks[taskId].func = Task_PokedexMainScreen;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos != 0)
- {
- gPokedexView->menuCursorPos--;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 2)
- {
- gPokedexView->menuCursorPos++;
- PlaySE(SE_SELECT);
- }
- }
-}
-
-static void sub_808CA64(u8 taskId)
-{
- if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48
- && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56)
- {
- gPokedexView->unk64B = gPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId);
- gTasks[taskId].func = sub_808CAE4;
- }
-}
-
-static void sub_808CAE4(u8 taskId)
-{
- if (gTasks[gTasks[taskId].data[0]].isActive)
- {
- if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C())
- sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
- else
- {
- gUnknown_0202FFB8 = gPokedexView->selectedPokemon;
- gUnknown_0202FFBA = gPokedexView->unk62C;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
-}
-
-static void sub_808CB8C(u8 taskId)
-{
- bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive;
-
- if (!isActive)
- {
- if (gPokedexView->unk64F != 0)
- {
- gPokedexView->selectedPokemon = isActive;
- gPokedexView->unk62C = 0x40;
- gTasks[taskId].func = sub_808CCC4;
- }
- else
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
- }
-}
-
-static void Task_ClosePokedex(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode;
- if (!IsNationalPokedexEnabled())
- gSaveBlock2.pokedex.unknown1 = 0;
- gSaveBlock2.pokedex.order = gPokedexView->dexOrder;
- DestroyTask(taskId);
- SetMainCallback2(sub_805469C);
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- }
-}
-
-static void sub_808CCC4(u8 taskId)
-{
- gPokedexView->unk64C_1 = 1;
- if (sub_808D344(3))
- gTasks[taskId].func = Task_PokedexResultsScreen;
-}
-
-static void Task_PokedexResultsScreen(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- if (gPokedexView->menuY)
- {
- gPokedexView->menuY -= 8;
- }
- else
- {
- if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen)
- {
- u32 a;
-
- sub_808E6BC();
- a = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16));
- gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8;
- BeginNormalPaletteFade(~a, 0, 0, 0x10, 0);
- gTasks[taskId].func = sub_808D118;
- PlaySE(SE_PIN);
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- gPokedexView->menuY = 0;
- gPokedexView->menuIsOpen = 1;
- gPokedexView->menuCursorPos = 0;
- gTasks[taskId].func = Task_PokedexResultsScreenMenu;
- PlaySE(SE_SELECT);
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].data[0] = sub_8091E3C();
- gPokedexView->unk64F = 0;
- gTasks[taskId].func = sub_808CB8C;
- PlaySE(SE_PC_LOGON);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen;
- PlaySE(SE_PC_OFF);
- }
- else
- {
- //Handle D-pad
- gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE);
- if (gPokedexView->unk62E)
- gTasks[taskId].func = sub_808CEF8;
- }
- }
-}
-
-static void sub_808CEF8(u8 taskId)
-{
- if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636))
- gTasks[taskId].func = Task_PokedexResultsScreen;
-}
-
-static void Task_PokedexResultsScreenMenu(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- if (gPokedexView->menuY != 96)
- {
- gPokedexView->menuY += 8;
- }
- else
- {
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->menuCursorPos)
- {
- case 0: //BACK TO LIST
- default:
- gMain.newKeys |= START_BUTTON;
- break;
- case 1: //LIST TOP
- gPokedexView->selectedPokemon = 0;
- gPokedexView->unk62C = 0x40;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON;
- break;
- case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
- gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON;
- break;
- case 3: //BACK TO POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen;
- PlaySE(SE_TRACK_DOOR);
- break;
- case 4: //CLOSE POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenExitPokedex;
- PlaySE(SE_PC_OFF);
- break;
- }
- }
-
- //Exit menu when Start or B is pressed
- if (gMain.newKeys & (START_BUTTON | B_BUTTON))
- {
- gPokedexView->menuIsOpen = 0;
- gTasks[taskId].func = Task_PokedexResultsScreen;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos)
- {
- gPokedexView->menuCursorPos--;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 3)
- {
- gPokedexView->menuCursorPos++;
- PlaySE(SE_SELECT);
- }
- }
-}
-
-static void sub_808D118(u8 taskId)
-{
- if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48
- && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56)
- {
- gPokedexView->unk64B = gPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId);
- gTasks[taskId].func = sub_808D198;
- }
-}
-
-static void sub_808D198(u8 taskId)
-{
- if (gTasks[gTasks[taskId].data[0]].isActive)
- {
- if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C())
- sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
- else
- {
- gTasks[taskId].func = sub_808CCC4;
- }
-}
-
-static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
-}
-
-static void Task_PokedexResultsScreenExitPokedex(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_ClosePokedex;
- }
-}
-
-static bool8 sub_808D344(u8 a)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (gPaletteFade.active)
- return 0;
- SetVBlankCallback(NULL);
- gPokedexView->unk64A = a;
- sub_8091060(0);
- REG_BG2VOFS = gPokedexView->unk62D;
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM));
- LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800));
- LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800));
- DmaClear16(3, VRAM + 0x6000, 0x500);
- if (a == 0)
- LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500));
- else
- LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500));
- ResetPaletteFade();
- if (a == 0)
- gPokedexView->unk64C_1 = 0;
- else
- gPokedexView->unk64C_1 = 1;
- sub_808D640();
- gMain.state = 1;
- break;
- case 1:
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- LoadCompressedObjectPic(&gUnknown_083A05CC[0]);
- LoadSpritePalettes(gUnknown_083A05DC);
- sub_808E978(a);
- gMain.state++;
- break;
- case 2:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7048);
- InitMenuWindow(&gWindowTemplate_81E7048);
- LZ77UnCompVram(gUnknown_0839FA7C, (void *)(VRAM + 0xFF80));
- gMain.state++;
- break;
- case 3:
- if (a == 0)
- SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder);
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gPokedexView->menuIsOpen = 0;
- gPokedexView->menuY = 0;
- gMain.state++;
- break;
- case 4:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- SetVBlankCallback(sub_808C0B8);
- gMain.state++;
- break;
- case 5:
- REG_WININ = 0x3F3F;
- REG_WINOUT = 0x1D3F;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_OBJWIN_ON;
- gMain.state++;
- break;
- case 6:
- if (!gPaletteFade.active)
- {
- gMain.state = 0;
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-static void sub_808D640(void)
-{
- if (gPokedexView->unk64C_1)
- LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16));
- else if (!IsNationalPokedexEnabled())
- LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE);
- else
- LoadPalette(sNationalPokedexPalette + 1, 1, sizeof(sNationalPokedexPalette) - sizeof(u16));
-}
-
-static void SortPokedex(u8 dexMode, u8 sortMode)
-{
- u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
- s16 i;
-
- gPokedexView->pokemonListCount = 0;
-
- switch (dexMode)
- {
- default:
- case DEX_MODE_HOENN:
- vars[0] = 202;
- vars[1] = 1;
- break;
- case DEX_MODE_NATIONAL:
- if (IsNationalPokedexEnabled())
- {
- vars[0] = NATIONAL_DEX_COUNT;
- vars[1] = 0;
- }
- else
- {
- vars[0] = 202;
- vars[1] = 1;
- }
- break;
- }
-
- switch (sortMode)
- {
- case 0:
- if (vars[1])
- {
- for (i = 0; i < vars[0]; i++)
- {
- vars[2] = HoennToNationalOrder(i + 1);
- gPokedexView->unk0[i].dexNum = vars[2];
- gPokedexView->unk0[i].seen = GetSetPokedexFlag(vars[2], 0);
- gPokedexView->unk0[i].owned = GetSetPokedexFlag(vars[2], 1);
- if (gPokedexView->unk0[i].seen)
- gPokedexView->pokemonListCount = i + 1;
- }
- }
- else
- {
- bool32 r10;
- s16 r5;
-
- r10 = r5 = i = 0;
- for (i = 0; i < vars[0]; i++)
- {
- vars[2] = i + 1;
- if (GetSetPokedexFlag(vars[2], 0))
- r10 = 1;
- if (r10)
- {
- asm(""); //Needed to match for some reason
- gPokedexView->unk0[r5].dexNum = vars[2];
- gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0);
- gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1);
- if (gPokedexView->unk0[r5].seen)
- gPokedexView->pokemonListCount = r5 + 1;
- r5++;
- }
- }
- }
- break;
- case 1:
- for (i = 0; i < 411; i++)
- {
- vars[2] = gPokedexOrder_Alphabetical[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0))
- {
- gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1);
- gPokedexView->pokemonListCount++;
- }
- }
- break;
- case 2:
- for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
- {
- vars[2] = gPokedexOrder_Weight[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
- {
- gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
- gPokedexView->pokemonListCount++;
- }
- }
- break;
- case 3:
- for (i = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- vars[2] = gPokedexOrder_Weight[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
- {
- gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
- gPokedexView->pokemonListCount++;
- }
- }
- break;
- case 4:
- for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--)
- {
- vars[2] = gPokedexOrder_Height[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
- {
- gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
- gPokedexView->pokemonListCount++;
- }
- }
- break;
- case 5:
- for (i = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- vars[2] = gPokedexOrder_Height[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
- {
- gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
- gPokedexView->pokemonListCount++;
- }
- }
- break;
- }
-
- for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
- {
- gPokedexView->unk0[i].dexNum |= 0xFFFF;
- gPokedexView->unk0[i].seen = 0;
- gPokedexView->unk0[i].owned = 0;
- }
-}
-
-static void sub_808DBE8(u8 a, u16 b, u16 c)
-{
- s16 _b;
- u16 i;
- u16 r2;
-
- switch (a)
- {
- case 0:
- default:
- _b = b - 5;
- for (i = 0; i <= 10; i++)
- {
- if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
- {
- sub_808E090(0x11, i * 2, c);
- }
- else
- {
- sub_808E090(0x11, i * 2, c);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, i * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, i * 2, c);
- sub_808DF88(0, 0x11, i * 2, c);
- sub_808DFE4(0, 0x17, i * 2);
- }
- }
- _b++;
- }
- break;
- case 1:
- _b = b - 5;
- if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
- {
- sub_808E090(0x11, gPokedexView->unk630 * 2, c);
- }
- else
- {
- sub_808E090(0x11, gPokedexView->unk630 * 2, c);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c);
- sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c);
- sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2);
- }
- }
- break;
- case 2:
- _b = b + 5;
- r2 = gPokedexView->unk630 + 10;
- if (r2 > 15)
- r2 -= 16;
- if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
- sub_808E090(0x11, r2 * 2, c);
- else
- {
- sub_808E090(0x11, r2 * 2, c);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, r2 * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, r2 * 2, c);
- sub_808DF88(0, 0x11, r2 * 2, c);
- sub_808DFE4(0, 0x17, r2 * 2);
- }
- }
- break;
- }
-}
-
-static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
-{
- u8 text[4];
- u16 unk[2];
- u16 r7 = gPokedexView->unk0[a].dexNum;
-
- if (gPokedexView->dexMode == DEX_MODE_HOENN)
- r7 = NationalToHoennOrder(r7);
- unk[0] = 0x3FC;
- unk[1] = 0x3FD;
- text[0] = CHAR_0 + r7 / 100;
- text[1] = CHAR_0 + (r7 % 100) / 10;
- text[2] = CHAR_0 + (r7 % 100) % 10;
- text[3] = EOS;
- *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
- *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
- Menu_PrintText(text, b - 15, c);
-}
-
-static void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
-{
- u16 unk[2];
-
- if (a)
- {
- unk[0] = 0x3FE;
- unk[1] = 0x3FF;
- }
- else
- {
- unk[0] = 0;
- unk[1] = 0;
- }
- *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
- *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
-}
-
-static u8 sub_808DFE4(u16 num, u8 b, u8 c)
-{
- u8 text[10];
- u8 i;
-
- for (i = 0; i < 10; i++)
- text[i] = CHAR_SPACE;
- text[i] = EOS;
-
- num = NationalPokedexNumToSpecies(num);
- switch (num)
- {
- default:
- for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
- text[i] = gSpeciesNames[num][i];
- break;
- case 0:
- for (i = 0; i < 10; i++)
- text[i] = CHAR_HYPHEN;
- break;
- }
- Menu_PrintTextPixelCoords(text, (b - 0x11) * 8 + 0xFC, c * 8, 0);
- return i;
-}
-
-static void sub_808E090(u8 a, u8 b, u16 c)
-{
- u8 i;
-
- for (i = 0; i < 12; i++)
- {
- *(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0;
- *(u16 *)(VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0;
- }
-}
-
-static void sub_808E0CC(u16 a, u16 b)
-{
- u8 i;
- u16 unk;
- u8 spriteId;
-
- for (i = 0; i < 4; i++)
- gPokedexView->unk61E[i] = 0xFFFF;
- gPokedexView->selectedMonSpriteId = 0xFFFF;
- sub_808DBE8(0, a, b);
- REG_BG2VOFS = gPokedexView->unk62D;
-
- unk = sub_808E888(a - 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data[5] = -32;
- }
-
- unk = sub_808E888(a);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data[5] = 0;
- }
-
- unk = sub_808E888(a + 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data[5] = 32;
- }
-
- gPokedexView->unk630 = 0;
- gPokedexView->unk632 = 0;
-}
-
-static bool8 sub_808E208(u8 a, u8 b, u8 c)
-{
- u16 i;
- u8 foo;
-
- if (gPokedexView->unk62E)
- {
- gPokedexView->unk62E--;
- switch (a)
- {
- case 1:
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- gSprites[gPokedexView->unk61E[i]].data[5] += b;
- }
- foo = 16 * (c - gPokedexView->unk62E) / c;
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo;
- gPokedexView->unk62C -= gPokedexView->unk628;
- break;
- case 2:
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- gSprites[gPokedexView->unk61E[i]].data[5] -= b;
- }
- foo = 16 * (c - gPokedexView->unk62E) / c;
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo;
- gPokedexView->unk62C += gPokedexView->unk628;
- break;
- }
- return FALSE;
- }
- else
- {
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16;
- return TRUE;
- }
-}
-
-static void sub_808E398(u8 a, u16 b)
-{
- u16 unk;
- u8 spriteId;
-
- gPokedexView->unk632 = gPokedexView->unk630;
- switch (a)
- {
- case 1:
- unk = sub_808E888(b - 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data[5] = -64;
- }
- if (gPokedexView->unk630 > 0)
- gPokedexView->unk630--;
- else
- gPokedexView->unk630 = 15;
- break;
- case 2:
- unk = sub_808E888(b + 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data[5] = 0x40;
- }
- if (gPokedexView->unk630 <= 0xE)
- gPokedexView->unk630++;
- else
- gPokedexView->unk630 = 0;
- break;
- }
-}
-
-// Ugly, ugly, ugly. I couldn't get it to match otherwise.
-static u16 sub_808E48C(u16 a, u16 b)
-{
- u8 r3;
- u8 r5;
- u8 i;
- u16 r6;
- u8 r10 = 0;
-
- if (!((gMain.heldKeys & 0x40) && (a > 0)))
- {
- //_0808E4B6
- if (!((gMain.heldKeys & 0x80) && (a < gPokedexView->pokemonListCount - 1)))
- //_0808E4CE
- {
- if ((gMain.newKeys & 0x20) && (a > 0))
- {
- r6 = a;
- //_0808E4E0
- for (i = 0; i < 7; i++)
- a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1);
- gPokedexView->unk62C += 16 * (a - r6);
- sub_808E82C();
- sub_808E0CC(a, 0xE);
- PlaySE(0x6D);
- }
- //_0808E53C
- else if ((gMain.newKeys & 0x10) && (a < gPokedexView->pokemonListCount - 1))
- {
- r6 = a;
- for (i = 0; i < 7; i++)
- a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1);
- gPokedexView->unk62C += (a - r6) * 16;
- sub_808E82C();
- sub_808E0CC(a, 0xE);
- PlaySE(0x6D);
- }
- _0808E5A2:
- if (r10 == 0)
- {
- gPokedexView->unk638 = 0;
- return a;
- }
- }
- else
- {
- // to _0808E5C4
- r10 = 2;
- a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1);
- sub_808E398(2, a);
- //goto _0808E60E
- sub_808DBE8(2, a, b);
- PlaySE(0x6C);
- goto _0808E5A2;
- }
- }
- else
- {
- //to _0808E5E4
- r10 = 1;
- a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1);
- sub_808E398(1, a);
- //_0808E60E
- sub_808DBE8(1, a, b);
- PlaySE(0x6C);
- goto _0808E5A2;
- }
- //_0808E628
- r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4];
- r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4];
- gPokedexView->unk62E = r3;
- gPokedexView->unk636 = r3;
- gPokedexView->unk634 = r5;
- gPokedexView->unk62F = r10;
- gPokedexView->unk628 = r5 / 2;
- sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636);
- if (gPokedexView->unk638 <= 0xB)
- gPokedexView->unk638++;
- return a;
-}
-
-static void sub_808E6BC(void)
-{
- u16 i;
-
- for (i = 0; i < 4; i++)
- {
- u16 spriteId = gPokedexView->unk61E[i];
-
- if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF)
- gPokedexView->selectedMonSpriteId = spriteId;
- }
-}
-
-static u8 sub_808E71C(void)
-{
- u16 r2;
- u16 r4 = gPokedexView->selectedPokemon;
-
- if ((gMain.newKeys & DPAD_UP) && r4)
- {
- r2 = r4;
- while (r2 != 0)
- {
- r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1);
-
- if (gPokedexView->unk0[r2].seen)
- {
- r4 = r2;
- break;
- }
- }
-
- if (gPokedexView->selectedPokemon == r4)
- return 0;
- else
- {
- gPokedexView->selectedPokemon = r4;
- gPokedexView->unk62C -= 16;
- return 1;
- }
- }
- else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->pokemonListCount - 1)
- {
- r2 = r4;
- while (r2 < gPokedexView->pokemonListCount - 1)
- {
- r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1);
-
- if (gPokedexView->unk0[r2].seen)
- {
- r4 = r2;
- break;
- }
- }
-
- if (gPokedexView->selectedPokemon == r4)
- return 0;
- else
- {
- gPokedexView->selectedPokemon = r4;
- gPokedexView->unk62C += 16;
- return 1;
- }
- }
- return 0;
-}
-
-static u8 sub_808E82C(void)
-{
- u16 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- {
- DestroySprite(&gSprites[gPokedexView->unk61E[i]]);
- gPokedexView->unk61E[i] |= 0xFFFF;
- }
- }
- return 0;
-}
-
-static u16 sub_808E888(u16 a1)
-{
- if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF)
- return 0xFFFF;
- else if (gPokedexView->unk0[a1].seen)
- return gPokedexView->unk0[a1].dexNum;
- else
- return 0;
-}
-
-static u32 sub_808E8C8(u16 a, s16 b, s16 c)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] == 0xFFFF)
- {
- u8 spriteId = sub_80918EC(a, b, c, i);
-
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.priority = 3;
- gSprites[spriteId].data[0] = 0;
- gSprites[spriteId].data[1] = i;
- gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(a);
- gPokedexView->unk61E[i] = spriteId;
- return spriteId;
- }
- }
- return 0xFFFF;
-}
-
-static void sub_808E978(u8 a)
-{
- u8 spriteId;
- u16 r5;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0);
- gSprites[spriteId].data[1] = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0);
- gSprites[spriteId].data[1] = 1;
- gSprites[spriteId].vFlip = TRUE;
-
- CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0);
- CreateSprite(&gSpriteTemplate_83A0554, 16, 138, 0);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 138, 0);
- StartSpriteAnim(&gSprites[spriteId], 3);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0);
- StartSpriteAnim(&gSprites[spriteId], 2);
- gSprites[spriteId].data[2] = 0x80;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0);
- StartSpriteAnim(&gSprites[spriteId], 1);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2);
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.matrixNum = 30;
- gSprites[spriteId].data[0] = 0x1E;
- gSprites[spriteId].data[1] = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2);
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.matrixNum = 31;
- gSprites[spriteId].data[0] = 0x1F;
- gSprites[spriteId].data[1] = 0x80;
-
- if (a == 0)
- {
- u32 _a;
-
- CreateSprite(&gSpriteTemplate_83A0584, 32, 40, 1);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0584, 32, 72, 1);
- StartSpriteAnim(&gSprites[spriteId], 1);
- _a = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1);
- r5 = gPokedexView->unk61A / 100;
- StartSpriteAnim(&gSprites[spriteId], r5);
- if (r5 != 0)
- _a = 1;
- else
- gSprites[spriteId].invisible = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1);
- r5 = (gPokedexView->unk61A % 100) / 10;
- if (r5 != 0 || _a != 0)
- StartSpriteAnim(&gSprites[spriteId], r5);
- else
- gSprites[spriteId].invisible = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1);
- r5 = (gPokedexView->unk61A % 100) % 10;
- StartSpriteAnim(&gSprites[spriteId], r5);
- _a = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1);
- r5 = gPokedexView->unk61C / 100;
- StartSpriteAnim(&gSprites[spriteId], r5);
- if (r5 != 0)
- _a = 1;
- else
- gSprites[spriteId].invisible = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1);
- r5 = (gPokedexView->unk61C % 100) / 10;
- if (r5 != 0 || _a != 0)
- StartSpriteAnim(&gSprites[spriteId], r5);
- else
- gSprites[spriteId].invisible = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1);
- r5 = (gPokedexView->unk61C % 100) % 10;
- StartSpriteAnim(&gSprites[spriteId], r5);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1);
- gSprites[spriteId].invisible = TRUE;
- }
- else
- {
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 80, 1);
- gSprites[spriteId].invisible = TRUE;
- }
-}
-
-static void nullsub_58(struct Sprite *sprite)
-{
-}
-
-static void sub_808ED94(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0)
- DestroySprite(sprite);
-}
-
-//Move Pokemon into position for description page
-static void sub_808EDB8(struct Sprite *sprite)
-{
- sprite->oam.priority = 0;
- sprite->oam.affineMode = 0;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- if (sprite->pos1.x != 48 || sprite->pos1.y != 56)
- {
- if (sprite->pos1.x > 48)
- sprite->pos1.x--;
- if (sprite->pos1.x < 48)
- sprite->pos1.x++;
-
- if (sprite->pos1.y > 56)
- sprite->pos1.y--;
- if (sprite->pos1.y < 56)
- sprite->pos1.y++;
- }
- else
- {
- sprite->callback = nullsub_58;
- }
-}
-
-static void sub_808EE28(struct Sprite *sprite)
-{
- u8 data1 = sprite->data[1];
-
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- gPokedexView->unk61E[data1] = 0xFFFF;
- }
- else
- {
- u32 var;
-
- sprite->pos2.y = gSineTable[(u8)sprite->data[5]] * 76 / 256;
- var = 0x10000 / gSineTable[sprite->data[5] + 0x40];
- if (var > 0xFFFF)
- var = 0xFFFF;
- SetOamMatrix(sprite->data[1] + 1, 0x100, 0, 0, var);
- sprite->oam.matrixNum = data1 + 1;
-
- if (sprite->data[5] > -64 && sprite->data[5] < 64)
- {
- sprite->invisible = FALSE;
- sprite->data[0] = 1;
- }
- else
- {
- sprite->invisible = TRUE;
- }
-
- if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0)
- {
- DestroySprite(sprite);
- gPokedexView->unk61E[data1] = 0xFFFF;
- }
- }
-}
-
-static void sub_808EF38(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- DestroySprite(sprite);
- else
- sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1);
-}
-
-static void sub_808EF8C(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- }
- else
- {
- u8 r0;
-
- if (sprite->data[1] != 0)
- {
- if (gPokedexView->selectedPokemon == gPokedexView->pokemonListCount - 1)
- sprite->invisible = TRUE;
- else
- sprite->invisible = FALSE;
- r0 = sprite->data[2];
- }
- else
- {
- if (gPokedexView->selectedPokemon == 0)
- sprite->invisible = TRUE;
- else
- sprite->invisible = FALSE;
- r0 = sprite->data[2] - 128;
- }
- sprite->pos2.y = gSineTable[r0] / 64;
- sprite->data[2] = sprite->data[2] + 8;
- if (gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0)
- sprite->invisible = FALSE;
- else
- sprite->invisible = TRUE;
- }
-}
-
-static void sub_808F08C(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- DestroySprite(sprite);
-}
-
-static void sub_808F0B4(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- }
- else
- {
- u8 val;
- s16 r3;
- s16 r0;
-
- val = gPokedexView->unk62C + sprite->data[1];
- r3 = gSineTable[val];
- r0 = gSineTable[val + 0x40];
- SetOamMatrix(sprite->data[0], r0, r3, -r3, r0);
-
- val = gPokedexView->unk62C + (sprite->data[1] + 0x40);
- r3 = gSineTable[val];
- r0 = gSineTable[val + 0x40];
- sprite->pos2.x = r0 * 40 / 256;
- sprite->pos2.y = r3 * 40 / 256;
- }
-}
-
-static void sub_808F168(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- }
- else
- {
- u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96;
-
- if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1)
- {
- sprite->invisible = FALSE;
- sprite->pos2.y = gPokedexView->menuCursorPos * 16;
- sprite->pos2.x = gSineTable[(u8)sprite->data[2]] / 64;
- sprite->data[2] += 8;
- }
- else
- {
- sprite->invisible = TRUE;
- }
- }
-}
-
-static u8 sub_808F210(struct PokedexListItem *item, u8 b)
-{
- u8 taskId;
-
- gUnknown_0202FFBC = item;
- taskId = CreateTask(Task_InitPageScreenMultistep, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 1;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[4] = b;
- return taskId;
-}
-
-static bool8 sub_808F250(u8 taskId)
-{
- if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput)
- return FALSE;
- else
- return TRUE;
-}
-
-static u8 sub_808F284(struct PokedexListItem *item, u8 b)
-{
- gUnknown_0202FFBC = item;
- gTasks[b].data[0] = 1;
- gTasks[b].data[1] = 0;
- gTasks[b].data[2] = 0;
- gTasks[b].data[3] = 0;
- return b;
-}
-
-#if ENGLISH
-#define CATEGORY_LEFT (11)
-#elif GERMAN
-#define CATEGORY_LEFT (16)
-#endif
-
-static void Task_InitPageScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- u16 r2;
-
- gPokedexView->unk64A = 1;
- gPokedexView->descriptionPageNum = 0;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- r2 = 0;
- if (gTasks[taskId].data[1] != 0)
- r2 += 0x1000;
- if (gTasks[taskId].data[2] != 0)
- r2 |= 0x200;
- sub_8091060(r2);
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800));
- sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC);
- gMain.state++;
- break;
- case 2:
- sub_80904FC(0xD);
- sub_8090584(gPokedexView->selectedScreen, 0xD);
- sub_808D640();
- gMain.state++;
- break;
- case 3:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7064);
- InitMenuWindow(&gWindowTemplate_81E7064);
- gMain.state++;
- break;
- case 4:
- if (gPokedexView->dexMode == DEX_MODE_HOENN)
- sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3);
- else
- sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3);
- sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3);
- Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
- Menu_PrintText(gDexText_UnknownHeight, 16, 7);
- Menu_PrintText(gDexText_UnknownWeight, 16, 9);
- if (gUnknown_0202FFBC->owned)
- {
- sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5);
- sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7);
- sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9);
- Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
- sub_80917CC(14, 0x3FC);
- }
- else
- {
- Menu_PrintText(gUnknown_083A05F8, 2, 13);
- LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E);
- }
- gMain.state++;
- break;
- case 5:
- if (gTasks[taskId].data[1] == 0)
- {
- gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0);
- gSprites[gTasks[taskId].data[4]].oam.priority = 0;
- }
- gMain.state++;
- break;
- case 6:
- {
- u32 r3 = 0;
-
- if (gTasks[taskId].data[2] != 0)
- r3 = 0x14;
- if (gTasks[taskId].data[1] != 0)
- r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16));
- BeginNormalPaletteFade(~r3, 0, 16, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- }
- break;
- case 7:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 8:
- if (!gPaletteFade.active)
- {
- gMain.state++;
- if (gTasks[taskId].data[3] == 0)
- {
- StopCryAndClearCrySongs();
- PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA);
- }
- else
- {
- gMain.state++;
- }
- }
- break;
- case 9:
- if (!IsCryPlayingOrClearCrySongs())
- gMain.state++;
- break;
- case 10:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 1;
- gTasks[taskId].data[3] = 1;
- gTasks[taskId].func = Task_PageScreenProcessInput;
- gMain.state = 0;
- break;
- }
-}
-
-static void Task_PageScreenProcessInput(u8 taskId)
-{
- if (gTasks[taskId].data[0] != 0)
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = sub_808F888;
- PlaySE(SE_Z_SCROLL);
- return;
- }
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = Task_ClosePageScreen;
- PlaySE(SE_PC_OFF);
- return;
- }
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->selectedScreen)
- {
- case PAGE_SCREEN:
- sub_8090C68();
- break;
- case AREA_SCREEN:
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitAreaScreenMultistep;
- PlaySE(SE_PIN);
- break;
- case CRY_SCREEN:
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- PlaySE(SE_PIN);
- break;
- case SIZE_SCREEN:
- if (!gUnknown_0202FFBC->owned)
- {
- PlaySE(SE_HAZURE);
- }
- else
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitSizeScreenMultistep;
- PlaySE(SE_PIN);
- }
- break;
- }
- return;
- }
- if (((gMain.newKeys & DPAD_LEFT)
- || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- && gPokedexView->selectedScreen > 0)
- {
- gPokedexView->selectedScreen--;
- sub_8090584(gPokedexView->selectedScreen, 0xD);
- PlaySE(SE_Z_PAGE);
- return;
- }
- if (((gMain.newKeys & DPAD_RIGHT)
- || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- && gPokedexView->selectedScreen < 3)
- {
- gPokedexView->selectedScreen++;
- sub_8090584(gPokedexView->selectedScreen, 0xD);
- PlaySE(SE_Z_PAGE);
- return;
- }
-}
-
-static void sub_808F888(u8 taskId)
-{
- if (!gPaletteFade.active)
- gTasks[taskId].func = Task_InitPageScreenMultistep;
-}
-
-static void Task_ClosePageScreen(u8 taskId)
-{
- if (!gPaletteFade.active)
- DestroyTask(taskId);
-}
-
-static void Task_InitAreaScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64A = 5;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = AREA_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- sub_8090540(0xD);
- sub_8090644(1, 0xD);
- sub_808D640();
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- gMain.state++;
- break;
- case 2:
- ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F);
- SetVBlankCallback(gUnknown_03005CEC);
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_AreaScreenProcessInput;
- break;
- }
-}
-
-static void Task_AreaScreenProcessInput(u8 taskId)
-{
- if (gPokedexView->unk64F != 0)
- gTasks[taskId].func = sub_808FA00;
-}
-
-static void sub_808FA00(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- switch (gPokedexView->unk64F)
- {
- case 1:
- default:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- break;
- }
- }
-}
-
-static void Task_InitCryScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- m4aMPlayStop(&gMPlay_BGM);
- gPokedexView->unk64A = 6;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = CRY_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_0839F8A0, (void *)(VRAM + 0x7000));
- gMain.state++;
- break;
- case 2:
- sub_8090540(0xD);
- sub_8090644(2, 0xD);
- sub_808D640();
- DmaClear16(3, (void *)(VRAM + 0xF800), 0x500);
- gMain.state++;
- break;
- case 3:
- Text_LoadWindowTemplate(&gWindowTemplate_81E702C);
- InitMenuWindow(&gWindowTemplate_81E702C);
- ResetPaletteFade();
- gMain.state++;
- break;
- case 4:
- Menu_PrintText(gDexText_CryOf, 10, 4);
- sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2);
- gMain.state++;
- break;
- case 5:
- gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0);
- gSprites[gTasks[taskId].data[4]].oam.priority = 0;
- gUnknown_03005E98 = 0;
- gMain.state++;
- break;
- case 6:
- {
- struct CryRelatedStruct sp8;
-
- sp8.unk0 = 0x4020;
- sp8.unk2 = 0x1F;
- sp8.paletteNo = 8;
- sp8.yPos = 0x1E;
- sp8.xPos = 0xC;
- if (sub_8119E3C(&sp8, 0) != 0)
- {
- gMain.state++;
- gUnknown_03005E98 = 0;
- }
- }
- break;
- case 7:
- {
- struct CryRelatedStruct sp10;
-
- sp10.unk0 = 0x3000;
- sp10.unk2 = 0xE;
- sp10.paletteNo = 9;
- sp10.xPos = 0x12;
- sp10.yPos = 3;
- if (ShowPokedexCryScreen(&sp10, 1) != 0)
- gMain.state++;
- }
- break;
- case 8:
- BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- break;
- case 9:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 10:
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_CryScreenProcessInput;
- break;
- }
-}
-
-static void Task_CryScreenProcessInput(u8 taskId)
-{
- sub_8119F88(0);
-
- if (IsCryPlaying())
- sub_8090040(1);
- else
- sub_8090040(0);
-
- if (gMain.newKeys & A_BUTTON)
- {
- sub_8090040(1);
- sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum));
- return;
- }
- else if (!gPaletteFade.active)
- {
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 1;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_PC_OFF);
- return;
- }
- if ((gMain.newKeys & DPAD_LEFT)
- || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 2;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_Z_PAGE);
- return;
- }
- if ((gMain.newKeys & DPAD_RIGHT)
- || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- {
- if (!gUnknown_0202FFBC->owned)
- {
- PlaySE(SE_HAZURE);
- }
- else
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 3;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_Z_PAGE);
- }
- return;
- }
- }
-}
-
-static void sub_808FFBC(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyCryMeterNeedleSprite();
- switch (gPokedexView->unk64F)
- {
- default:
- case 1:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitAreaScreenMultistep;
- break;
- case 3:
- gTasks[taskId].func = Task_InitSizeScreenMultistep;
- break;
- }
- }
-}
-
-static void sub_8090040(u8 a)
-{
- u16 unk;
-
- if (a != 0)
- unk = 0x392;
- else
- unk = 0x2AF;
- LoadPalette(&unk, 0x5D, 2);
-}
-
-static void Task_InitSizeScreenMultistep(u8 taskId)
-{
- u8 spriteId;
-
- switch (gMain.state)
- {
- default:
- case 0:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64A = 7;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = SIZE_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_0839F988, (void *)(VRAM + 0x7000));
- gMain.state++;
- break;
- case 2:
- sub_8090540(0xD);
- sub_8090644(3, 0xD);
- sub_808D640();
- gMain.state++;
- break;
- case 3:
- {
- u8 string[40]; //I hope this is the correct size
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E702C);
- InitMenuWindow(&gWindowTemplate_81E702C);
- string[0] = EOS;
- StringAppend(string, gDexText_SizeComparedTo);
- StringAppend(string, gSaveBlock2.playerName);
- sub_8072BD8(string, 3, 15, 0xC0);
- gMain.state++;
- }
- break;
- case 4:
- ResetPaletteFade();
- gMain.state++;
- break;
- case 5:
- spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0);
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.matrixNum = 1;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset;
- SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale);
- LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4));
- gMain.state++;
- break;
- case 6:
- spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1);
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.matrixNum = 2;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset;
- SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale);
- LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4));
- gMain.state++;
- break;
- case 7:
- BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- break;
- case 8:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 9:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_SizeScreenProcessInput;
- }
- break;
- }
-}
-
-static void Task_SizeScreenProcessInput(u8 taskId)
-{
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gPokedexView->unk64F = 1;
- gTasks[taskId].func = sub_8090498;
- PlaySE(SE_PC_OFF);
- }
- else if ((gMain.newKeys & DPAD_LEFT)
- || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gPokedexView->unk64F = 2;
- gTasks[taskId].func = sub_8090498;
- PlaySE(SE_Z_PAGE);
- }
-}
-
-static void sub_8090498(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- switch (gPokedexView->unk64F)
- {
- default:
- case 1:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- break;
- }
- }
-}
-
-static void sub_80904FC(u16 a)
-{
- LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800));
- DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
-}
-
-static void sub_8090540(u16 a)
-{
- LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800));
- DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
-}
-
-#ifdef NONMATCHING
-static void sub_8090584(u8 a, u16 b)
-{
- u8 i; //r1
- u8 j; //r3
- u32 r6;
- register u8 r7;
-
- for (i = 0; i < 4; i++)
- {
- r7 = i * 5 + 1;
- r6 = 0x4000;
-
- if (i == a)
- r6 = 0x2000;
-
- for (j = 0; j < 5; j++)
- {
- u32 r0 = b * 0x800 + (r7 + j) * 2;
- u8 *ptr;
-
- ptr = VRAM;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- ptr = VRAM + 0x40;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- }
- }
- r6 = 0x4000;
- for (j = 0; j < 5; j++)
- {
- u32 r0 = b * 0x800 + j * 2;
- u8 *ptr;
-
- ptr = VRAM + 0x32;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- ptr = VRAM + 0x72;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- }
-}
-#else
-__attribute__((naked))
-static void sub_8090584(u8 a, u16 b)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r9, r1\n\
- movs r1, 0\n\
-_0809059C:\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- movs r6, 0x80\n\
- lsls r6, 7\n\
- cmp r1, r10\n\
- bne _080905B2\n\
- movs r6, 0x80\n\
- lsls r6, 6\n\
-_080905B2:\n\
- movs r3, 0\n\
- mov r0, r9\n\
- lsls r0, 11\n\
- mov r12, r0\n\
- adds r1, 0x1\n\
- mov r8, r1\n\
- mov r5, r12\n\
- ldr r4, _08090634 @ =0x00000fff\n\
-_080905C2:\n\
- adds r0, r7, r3\n\
- lsls r0, 1\n\
- adds r0, r5, r0\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r1]\n\
- ldr r1, _08090638 @ =0x06000040\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _080905C2\n\
- mov r2, r8\n\
- lsls r0, r2, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x3\n\
- bls _0809059C\n\
- movs r6, 0x80\n\
- lsls r6, 7\n\
- movs r3, 0\n\
- mov r5, r12\n\
- ldr r4, _08090634 @ =0x00000fff\n\
-_08090600:\n\
- lsls r0, r3, 1\n\
- adds r0, r5, r0\n\
- ldr r2, _0809063C @ =0x06000032\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r1]\n\
- ldr r1, _08090640 @ =0x06000072\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _08090600\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08090634: .4byte 0x00000fff\n\
-_08090638: .4byte 0x06000040\n\
-_0809063C: .4byte 0x06000032\n\
-_08090640: .4byte 0x06000072\n\
- .syntax divided\n");
-}
-#endif
-
-//Nope, can't get this one to match, either.
-#ifdef NONMATCHING
-static void sub_8090644(u8 a, u16 b)
-{
- u8 i;
- u8 j;
-
- for (i = 0; i < 4; i++)
- {
- u8 r8 = i * 5 + 1;
- u32 r5;
-
- if (i == a || i == 0)
- r5 = 0x2000;
- else if (a != 0)
- r5 = 0x4000;
-
- for (j = 0; j < 5; j++)
- {
- u16 (*vramData)[0x400];
-
- vramData = (u16 (*)[])VRAM;
- vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5;
- vramData = (u16 (*)[])(VRAM + 0x40);
- vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5;
- }
- }
-
- for (j = 0; j < 5; j++)
- {
- u16 (*vramData)[0x400];
-
- vramData = (u16 (*)[])(VRAM + 0x32);
- vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000;
- vramData = (u16 (*)[])(VRAM + 0x72);
- vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000;
- }
-}
-#else
-__attribute__((naked))
-static void sub_8090644(u8 a, u16 b)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r9, r1\n\
- movs r1, 0\n\
-_0809065C:\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- cmp r1, r10\n\
- beq _08090670\n\
- cmp r1, 0\n\
- bne _08090676\n\
-_08090670:\n\
- movs r5, 0x80\n\
- lsls r5, 6\n\
- b _0809067A\n\
-_08090676:\n\
- movs r5, 0x80\n\
- lsls r5, 7\n\
-_0809067A:\n\
- movs r3, 0\n\
- mov r0, r9\n\
- lsls r7, r0, 11\n\
- adds r1, 0x1\n\
- mov r12, r1\n\
- adds r6, r7, 0\n\
- ldr r4, _080906FC @ =0x00000fff\n\
-_08090688:\n\
- mov r1, r8\n\
- adds r0, r1, r3\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r1]\n\
- ldr r1, _08090700 @ =0x06000040\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _08090688\n\
- mov r2, r12\n\
- lsls r0, r2, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x3\n\
- bls _0809065C\n\
- movs r5, 0x80\n\
- lsls r5, 7\n\
- movs r3, 0\n\
- adds r6, r7, 0\n\
- ldr r4, _080906FC @ =0x00000fff\n\
-_080906C8:\n\
- lsls r0, r3, 1\n\
- adds r0, r6, r0\n\
- ldr r2, _08090704 @ =0x06000032\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r1]\n\
- ldr r1, _08090708 @ =0x06000072\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _080906C8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080906FC: .4byte 0x00000fff\n\
-_08090700: .4byte 0x06000040\n\
-_08090704: .4byte 0x06000032\n\
-_08090708: .4byte 0x06000072\n\
- .syntax divided\n");
-}
-#endif
-
-u8 sub_809070C(u16 dexNum, u32 b, u32 c)
-{
- u8 taskId = CreateTask(sub_8090750, 0);
-
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = dexNum;
- gTasks[taskId].data[12] = b;
- gTasks[taskId].data[13] = b >> 16;
- gTasks[taskId].data[14] = c;
- gTasks[taskId].data[15] = c >> 16;
- return taskId;
-}
-
-static void sub_8090750(u8 taskId)
-{
- u8 spriteId;
- u16 dexNum = gTasks[taskId].data[1];
- u16 i;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x100);
- gTasks[taskId].data[0] = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000));
- LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800));
- for (i = 0; i < 0x280; i++)
- {
-#ifndef NONMATCHING
- asm("");
-#endif
- *(u16 *)(VRAM + 0x7800 + 2 * i) += 0x2000;
- }
- sub_8091738(gTasks[taskId].data[1], 2, 0x3FC);
- ResetPaletteFade();
- LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E);
- gTasks[taskId].data[0]++;
- break;
- case 2:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7064);
- InitMenuWindow(&gWindowTemplate_81E7064);
- DmaClear16(3, (void *)(VRAM + 0xC000), 0x200);
- gTasks[taskId].data[0]++;
- break;
- case 3:
- sub_8072BD8(gDexText_RegisterComplete, 2, 0, 0xD0);
- if (!IsNationalPokedexEnabled())
- sub_8091154(NationalToHoennOrder(dexNum), 13, 3);
- else
- sub_8091154(dexNum, 13, 3);
- sub_80911C8(dexNum, 16, 3);
- Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
- Menu_PrintText(gDexText_UnknownHeight, 16, 7);
- Menu_PrintText(gDexText_UnknownWeight, 16, 9);
- sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5);
- sub_8091458(gPokedexEntries[dexNum].height, 16, 7);
- sub_8091564(gPokedexEntries[dexNum].weight, 16, 9);
- Menu_PrintText(gPokedexEntries[dexNum].descriptionPage1, 2, 13);
- sub_80917CC(14, 0x3FC);
- gTasks[taskId].data[0]++;
- break;
- case 4:
- spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0);
- gSprites[spriteId].oam.priority = 0;
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gTasks[taskId].data[3] = spriteId;
- gTasks[taskId].data[0]++;
- break;
- case 5:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gTasks[taskId].data[0]++;
- break;
- case 6:
- if (!gPaletteFade.active)
- {
- PlayCry1(NationalPokedexNumToSpecies(dexNum), 0);
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[4] = 0;
- gTasks[taskId].func = sub_8090A3C;
- }
- break;
- }
-}
-
-static void sub_8090A3C(u8 taskId)
-{
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0);
- gSprites[gTasks[taskId].data[3]].callback = sub_8090C28;
- gTasks[taskId].func = sub_8090B8C;
- return;
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (gTasks[taskId].data[4] == 0)
- {
- u16 r4 = gTasks[taskId].data[1];
-
- Menu_EraseWindowRect(2, 13, 27, 19);
- Menu_PrintText(gPokedexEntries[r4].descriptionPage2, 2, 13);
- (*(u16 *)(VRAM + 0x7ACA))++;
- (*(u16 *)(VRAM + 0x7B0A))++;
- gTasks[taskId].data[4] = 1;
- PlaySE(SE_PIN);
- }
- else
- {
- BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0);
- gSprites[gTasks[taskId].data[3]].callback = sub_8090C28;
- gTasks[taskId].func = sub_8090B8C;
- return;
- }
- }
- gTasks[taskId].data[2]++;
- if (gTasks[taskId].data[2] & 0x10)
- LoadPalette(gPokedexMenu_Pal + 1, 0x51, 14);
- else
- LoadPalette(gPokedexMenu2_Pal + 1, 0x51, 14);
-}
-
-static void sub_8090B8C(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- u16 species;
- u32 otId;
- u32 personality;
- u8 paletteNum;
- const u8 *lzPaletteData;
-
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000);
- sub_800D74C();
- species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]);
- otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12];
- personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14];
- paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum;
- lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality);
- LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32);
- DestroyTask(taskId);
- }
-}
-
-static void sub_8090C28(struct Sprite *sprite)
-{
- if (sprite->pos1.x < 0x78)
- sprite->pos1.x += 2;
- if (sprite->pos1.x > 0x78)
- sprite->pos1.x -= 2;
-
- if (sprite->pos1.y < 0x50)
- sprite->pos1.y += 1;
- if (sprite->pos1.y > 0x50)
- sprite->pos1.y -= 1;
-}
-
-static void sub_8090C68(void)
-{
- if (gUnknown_0202FFBC->owned)
- {
- if (gPokedexView->descriptionPageNum == 0)
- {
- Menu_EraseWindowRect(2, 13, 27, 19);
- Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13);
- gPokedexView->descriptionPageNum = 1;
- (*(u16 *)(VRAM + 0x7ACA))++;
- (*(u16 *)(VRAM + 0x7B0A))++;
- PlaySE(SE_PIN);
- }
- else
- {
- Menu_EraseWindowRect(2, 13, 27, 19);
- Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
- gPokedexView->descriptionPageNum = 0;
- (*(u16 *)(VRAM + 0x7ACA))--;
- (*(u16 *)(VRAM + 0x7B0A))--;
- PlaySE(SE_PIN);
- }
- }
-}
-
-const u8 *GetPokemonCategory(u16 dexNum)
-{
- return gPokedexEntries[dexNum].categoryName;
-}
-
-u16 GetPokedexHeightWeight(u16 dexNum, u8 data)
-{
- switch (data)
- {
- case 0: // height
- return gPokedexEntries[dexNum].height;
- case 1: // weight
- return gPokedexEntries[dexNum].weight;
- default:
- return 1;
- }
-}
-
-s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID)
-{
- u8 index;
- u8 bit;
- u8 mask;
- s8 retVal;
-
- nationalDexNo--;
- index = nationalDexNo / 8;
- bit = nationalDexNo % 8;
- mask = 1 << bit;
- retVal = 0;
- switch (caseID)
- {
- case FLAG_GET_SEEN:
- if (gSaveBlock2.pokedex.seen[index] & mask)
- {
- if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask)
- && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask))
- retVal = 1;
- else
- {
- gSaveBlock2.pokedex.seen[index] &= ~mask;
- gSaveBlock1.dexSeen2[index] &= ~mask;
- gSaveBlock1.dexSeen3[index] &= ~mask;
- retVal = 0;
- }
- }
- break;
- case FLAG_GET_CAUGHT:
- if (gSaveBlock2.pokedex.owned[index] & mask)
- {
- if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask)
- && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask)
- && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask))
- retVal = 1;
- else
- {
- gSaveBlock2.pokedex.owned[index] &= ~mask;
- gSaveBlock2.pokedex.seen[index] &= ~mask;
- gSaveBlock1.dexSeen2[index] &= ~mask;
- gSaveBlock1.dexSeen3[index] &= ~mask;
- retVal = 0;
- }
- }
- break;
- case FLAG_SET_SEEN:
- gSaveBlock2.pokedex.seen[index] |= mask;
- gSaveBlock1.dexSeen2[index] |= mask;
- gSaveBlock1.dexSeen3[index] |= mask;
- break;
- case FLAG_SET_CAUGHT:
- gSaveBlock2.pokedex.owned[index] |= mask;
- break;
- }
- return retVal;
-}
-
-u16 GetNationalPokedexCount(u8 caseID)
-{
- u16 count = 0;
- u16 i;
-
- for (i = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- switch (caseID)
- {
- case FLAG_GET_SEEN:
- if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
- count++;
- break;
- case FLAG_GET_CAUGHT:
- if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
- count++;
- break;
- }
- }
- return count;
-}
-
-u16 GetHoennPokedexCount(u8 caseID)
-{
- u16 count = 0;
- u16 i;
-
- for (i = 0; i < 202; i++)
- {
- switch (caseID)
- {
- case FLAG_GET_SEEN:
- if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN))
- count++;
- break;
- case FLAG_GET_CAUGHT:
- if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
- count++;
- break;
- }
- }
- return count;
-}
-
-bool8 CompletedHoennPokedex(void)
-{
- u16 i;
-
- for (i = 0; i < 200; i++)
- {
- if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
- return FALSE;
- }
- return TRUE;
-}
-
-bool16 CompletedNationalPokedex(void)
-{
- u16 i;
-
- // BUG: This function indexes pokemon checks by 0, but adds
- // 1 before passing to GetSetPokedexFlag. Normally, this is
- // fine, because GetSetPokedexFlag subtracts by 1 to get the
- // array index value, but since the array is 0 indexed
- // starting with Bulbasaur, values passed actually means that
- // dex entries 152 (Chikorita) and 252 (Treecko) are skipped.
- // Because an earlier Hoenn Dex check prevented Treecko from
- // being skippable, it means that Chikorita is not required
- // to obtain the National Diploma. This was fixed in Emerald.
- for (i = 0; i < 150; i++)
- {
- if (GetSetPokedexFlag(i + 1, 1) == 0)
- return FALSE;
- }
- for (i = 152; i < 250; i++)
- {
- if (GetSetPokedexFlag(i + 1, 1) == 0)
- return FALSE;
- }
- for (i = 252; i < 384; i++)
- {
- if (GetSetPokedexFlag(i + 1, 1) == 0)
- return FALSE;
- }
- return TRUE;
-}
-
-static void sub_8091060(u16 a)
-{
- if (!(a & 0x100))
- {
- REG_DISPCNT &= 0xFEFF;
- REG_BG0CNT = 0;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- }
- if (!(a & 0x200))
- {
- REG_DISPCNT &= 0xFDFF;
- REG_BG1CNT = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- }
- if (!(a & 0x400))
- {
- REG_DISPCNT &= 0xFBFF;
- REG_BG2CNT = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- }
- if (!(a & 0x800))
- {
- REG_DISPCNT &= 0xF7FF;
- REG_BG3CNT = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
- }
- if (!(a & 0x1000))
- {
- REG_DISPCNT &= 0xEFFF;
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- }
-}
-
-static void sub_8091154(u16 order, u8 b, u8 c)
-{
- u8 str[4];
-
- str[0] = CHAR_0 + order / 100;
- str[1] = CHAR_0 + (order % 100) / 10;
- str[2] = CHAR_0 + (order % 100) % 10;
- str[3] = EOS;
- Menu_PrintText(str, b, c);
-}
-
-static u8 sub_80911C8(u16 num, u8 b, u8 c)
-{
- u8 str[11];
- u8 i;
-
- for (i = 0; i < 11; i++)
- str[i] = EOS;
- num = NationalPokedexNumToSpecies(num);
- switch (num)
- {
- default:
- for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
- str[i] = gSpeciesNames[num][i];
- break;
- case 0:
- for (i = 0; i < 10; i++)
- str[i] = 0xAE;
- break;
- }
- Menu_PrintText(str, b, c);
- return i;
-}
-
-static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d)
-{
- u8 str[40];
- u8 *end;
- u8 i;
-
- end = StringCopy(str, gUnknown_083B5558);
- str[2] = d;
- num = NationalPokedexNumToSpecies(num);
- switch (num)
- {
- default:
- for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
- end[i] = gSpeciesNames[num][i];
- break;
- case 0:
- for (i = 0; i < 10; i++)
- end[i] = 0xAE;
- break;
- }
- end[i] = EOS;
- Menu_PrintText(str, b, c);
- return i;
-}
-
-static void sub_8091304(const u8 *name, u8 left, u8 top)
-{
- u8 str[32];
- u8 i;
-#if ENGLISH
- u8 j;
-#endif
-
- for (i = 0; name[i] != EOS && i < 11; i++)
- str[i] = name[i];
-#if ENGLISH
- for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++)
- ;
- j--;
- while (gDexText_UnknownPoke[j] != EOS)
- str[i++] = gDexText_UnknownPoke[j++];
-#endif
- str[i] = EOS;
- sub_8072B80(str, left, top, gDexText_UnknownPoke);
-}
-
-#if ENGLISH
-void unref_sub_80913A4(u16 a, u8 left, u8 top)
-{
- u8 str[6];
- bool8 outputted = FALSE;
- u8 result;
-
- result = a / 1000;
- if (result == 0)
- {
- str[0] = CHAR_SPACE;
- outputted = FALSE;
- }
- else
- {
- str[0] = CHAR_0 + result;
- outputted = TRUE;
- }
-
- result = (a % 1000) / 100;
- if (result == 0 && !outputted)
- {
- str[1] = CHAR_SPACE;
- outputted = FALSE;
- }
- else
- {
- str[1] = CHAR_0 + result;
- outputted = TRUE;
- }
-
- str[2] = CHAR_0 + ((a % 1000) % 100) / 10;
- str[3] = CHAR_PERIOD;
- str[4] = CHAR_0 + ((a % 1000) % 100) % 10;
- str[5] = EOS;
- Menu_PrintText(str, left, top);
-}
-#elif GERMAN
-void unref_sub_80913A4(u16 arg0, u8 left, u8 top) {
- u8 buffer[8];
- int offset;
- u8 result;
-
- u8 r6 = 0;
- offset = 0;
-
-
- buffer[r6++] = 0xFC;
- buffer[r6++] = 0x13;
- r6++;
-
- result = (arg0 / 1000);
- if (result == 0)
- {
- offset = 6;
- }
- else
- {
- buffer[r6++] = result + CHAR_0;
- }
-
-
- result = (arg0 % 1000) / 100;
-
- if (result == 0 && offset != 0)
- {
- offset += 6;
- }
- else
- {
- buffer[r6++] = result + CHAR_0;
- }
-
- buffer[r6++] = (((arg0 % 1000) % 100) / 10) + CHAR_0;
- buffer[r6++] = CHAR_COMMA;
- buffer[r6++] = (((arg0 % 1000) % 100) % 10) + CHAR_0;
-
- buffer[r6++] = EOS;
- buffer[2] = offset;
- Menu_PrintText(buffer, left, top);
-}
-#endif
-
-#ifdef UNITS_IMPERIAL
-#define CHAR_PRIME (0xB4)
-#define CHAR_DOUBLE_PRIME (0xB2)
-static void sub_8091458(u16 height, u8 left, u8 top)
-{
- u8 buffer[16];
- u32 inches, feet;
- u8 i = 0;
-
- inches = (height * 10000) / 254;
- if (inches % 10 >= 5)
- inches += 10;
- feet = inches / 120;
- inches = (inches - (feet * 120)) / 10;
-
- buffer[i++] = EXT_CTRL_CODE_BEGIN;
- buffer[i++] = 0x13;
- if (feet / 10 == 0)
- {
- buffer[i++] = 18;
- buffer[i++] = feet + CHAR_0;
- }
- else
- {
- buffer[i++] = 12;
- buffer[i++] = feet / 10 + CHAR_0;
- buffer[i++] = (feet % 10) + CHAR_0;
- }
- buffer[i++] = CHAR_PRIME;
- buffer[i++] = (inches / 10) + CHAR_0;
- buffer[i++] = (inches % 10) + CHAR_0;
- buffer[i++] = CHAR_DOUBLE_PRIME;
- buffer[i++] = EOS;
- Menu_PrintText(buffer, left, top);
-}
-#else
-static void sub_8091458(u16 height, u8 left, u8 top)
-{
- unref_sub_80913A4(height, left, top);
-}
-#endif
-
-#ifdef UNITS_IMPERIAL
-static void sub_8091564(u16 weight, u8 left, u8 top)
-{
- u8 buffer[16];
- u32 lbs;
- u8 i = 0;
- bool8 output;
-
- lbs = (weight * 100000) / 4536;
- if (lbs % 10 >= 5)
- lbs += 10;
- output = FALSE;
-
- buffer[i] = (lbs / 100000) + CHAR_0;
- if (buffer[i] == CHAR_0 && output == FALSE)
- {
- buffer[i++] = CHAR_SPACE;
- buffer[i++] = CHAR_SPACE;
- }
- else
- {
- output = TRUE;
- i++;
- }
-
- lbs = (lbs % 100000);
- buffer[i] = (lbs / 10000) + CHAR_0;
- if (buffer[i] == CHAR_0 && output == FALSE)
- {
- buffer[i++] = CHAR_SPACE;
- buffer[i++] = CHAR_SPACE;
- }
- else
- {
- output = TRUE;
- i++;
- }
-
- lbs = (lbs % 10000);
- buffer[i] = (lbs / 1000) + CHAR_0;
- if (buffer[i] == CHAR_0 && output == FALSE)
- {
- buffer[i++] = CHAR_SPACE;
- buffer[i++] = CHAR_SPACE;
- }
- else
- {
- output = TRUE;
- i++;
- }
- lbs = (lbs % 1000);
- buffer[i++] = (lbs / 100) + CHAR_0;
- lbs = (lbs % 100);
- buffer[i++] = CHAR_PERIOD;
- buffer[i++] = (lbs / 10) + CHAR_0;
- buffer[i++] = CHAR_SPACE;
- buffer[i++] = CHAR_l;
- buffer[i++] = CHAR_b;
- buffer[i++] = CHAR_s;
- buffer[i++] = CHAR_PERIOD;
- buffer[i++] = EOS;
- Menu_PrintText(buffer, left, top);
-}
-#else
-static void sub_8091564(u16 arg0, u8 left, u8 top)
-{
- unref_sub_80913A4(arg0, left, top);
-}
-#endif
-
-static void sub_8091738(u16 num, u16 b, u16 c)
-{
- u8 arr[0x80];
- u16 i;
- u16 j;
- const u8 *r12;
- u16 r7;
- u8 r3;
-
- r12 = sMonFootprintTable[NationalPokedexNumToSpecies(num)];
- for (r7 = 0, i = 0; i < 32; i++)
- {
- r3 = r12[i];
- for (j = 0; j < 4; j++)
- {
- u32 r1 = j * 2;
- s32 r2 = (r3 >> r1) & 1;
-
- if (r3 & (2 << r1))
- r2 |= 0x10;
-
-// Needed to match
-#ifndef NONMATCHING
- asm("");asm("");asm("");asm("");asm("");
-#endif
-
- arr[r7] = r2;
- r7++;
- }
- }
- CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80);
-}
-
-static void sub_80917CC(u16 a, u16 b)
-{
- *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0;
- *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1;
- *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2;
- *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3;
-}
-
-static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d)
-{
- switch (a)
- {
- case 1:
- if (b > c)
- b--;
- break;
- case 0:
- if (b < d)
- b++;
- break;
- case 3:
- if (b > c)
- b--;
- else
- b = d;
- break;
- case 2:
- if (b < d)
- b++;
- else
- b = c;
- break;
- }
- return b;
-}
-
-static void nullsub_59(struct Sprite *sprite)
-{
-}
-
-static void sub_8091878(u16 a, u8 b)
-{
- gUnknown_02024E8C = gUnknown_083B57A4;
- gUnknown_02024E8C.paletteTag = a;
- gUnknown_02024E8C.images = gUnknown_083B5794[b];
- gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64;
-}
-
-static void sub_80918B0(u16 a, u8 b)
-{
- gUnknown_02024E8C = gUnknown_083B57A4;
- gUnknown_02024E8C.paletteTag = a;
- gUnknown_02024E8C.images = gUnknown_083B5794[b];
- gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
-}
-
-u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum)
-{
- u8 spriteId;
-
- num = NationalPokedexNumToSpecies(num);
- switch (num)
- {
- default:
- DecompressPicFromTable_2(
- &gMonFrontPicTable[num],
- gMonFrontPicCoords[num].coords,
- gMonFrontPicCoords[num].y_offset,
- (void*)ewram_addr,
- gUnknown_083B5584[paletteNum],
- num);
- break;
- case SPECIES_SPINDA:
- LoadSpecialPokePic(
- &gMonFrontPicTable[num],
- gMonFrontPicCoords[num].coords,
- gMonFrontPicCoords[num].y_offset,
- ewram_addr,
- gUnknown_083B5584[paletteNum],
- num,
- gSaveBlock2.pokedex.spindaPersonality,
- 1);
- break;
- case SPECIES_UNOWN:
- LoadSpecialPokePic(
- &gMonFrontPicTable[num],
- gMonFrontPicCoords[num].coords,
- gMonFrontPicCoords[num].y_offset,
- ewram_addr,
- gUnknown_083B5584[paletteNum],
- num,
- gSaveBlock2.pokedex.unownPersonality,
- 1);
- break;
- }
- LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32);
- sub_8091878(paletteNum, paletteNum);
- spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
- gSprites[spriteId].oam.paletteNum = paletteNum;
- return spriteId;
-}
-
-u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum)
-{
- u8 spriteId;
-
- DecompressPicFromTable_2(
- &gTrainerFrontPicTable[gender],
- gTrainerFrontPicCoords[gender].coords,
- gTrainerFrontPicCoords[gender].y_offset,
- (void*)ewram_addr,
- gUnknown_083B5584[0],
- gender);
- sub_80918B0(gender, 0);
- spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
- gSprites[spriteId].oam.paletteNum = paletteNum;
- return spriteId;
-}
-
-int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2)
-{
- u16 species;
- u16 i;
- u16 resultsCount;
- u8 types[2];
-
- SortPokedex(a, b);
-
- for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- if (gPokedexView->unk0[i].seen)
- {
- gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
- resultsCount++;
- }
- }
- gPokedexView->pokemonListCount = resultsCount;
-
- // Search by name
- if (abcGroup != 0xFF)
- {
- for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
- {
- u8 r3;
-
- species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
- r3 = gSpeciesNames[species][0];
- if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1])
- || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3]))
- {
- gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
- resultsCount++;
- }
- }
- gPokedexView->pokemonListCount = resultsCount;
- }
-
- // Search by body color
- if (bodyColor != 0xFF)
- {
- for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
- {
- species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
-
- if (bodyColor == gBaseStats[species].bodyColor)
- {
- gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
- resultsCount++;
- }
- }
- gPokedexView->pokemonListCount = resultsCount;
- }
-
- // Search by type
- if (type1 != 0xFF || type2 != 0xFF)
- {
- if (type1 == 0xFF)
- {
- type1 = type2;
- type2 = 0xFF;
- }
-
- if (type2 == 0xFF)
- {
- for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
- {
- if (gPokedexView->unk0[i].owned)
- {
- species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
-
- types[0] = gBaseStats[species].type1;
- types[1] = gBaseStats[species].type2;
- if (types[0] == type1 || types[1] == type1)
- {
- gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
- resultsCount++;
- }
- }
- }
- }
- else
- {
- for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
- {
- if (gPokedexView->unk0[i].owned)
- {
- species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
-
- types[0] = gBaseStats[species].type1;
- types[1] = gBaseStats[species].type2;
- if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1))
- {
- gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
- resultsCount++;
- }
- }
- }
- }
- gPokedexView->pokemonListCount = resultsCount;
- }
-
- if (gPokedexView->pokemonListCount != 0)
- {
- for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
- {
- gPokedexView->unk0[i].dexNum = 0xFFFF;
- gPokedexView->unk0[i].seen = FALSE;
- gPokedexView->unk0[i].owned = FALSE;
-
- }
- }
-
- return resultsCount;
-}
-
-#if ENGLISH
-#define SUB_8091E20_WIDTH (208)
-#elif GERMAN
-#define SUB_8091E20_WIDTH (216)
-#endif
-
-void sub_8091E20(const u8 *str)
-{
- sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1);
-}
-
-u8 sub_8091E3C(void)
-{
- return CreateTask(sub_8091E54, 0);
-}
-
-static void sub_8091E54(u8 taskId)
-{
- u16 i;
-
- switch (gMain.state)
- {
- default:
- case 0:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64A = 2;
- sub_8091060(0);
- LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800));
- LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E);
- if (!IsNationalPokedexEnabled())
- {
- for (i = 0; i < 17; i++)
- {
- ((u16 *)(VRAM + 0x7A80))[i] = ((u16 *)(VRAM + 0x7B00))[i];
- ((u16 *)(VRAM + 0x7AC0))[i] = ((u16 *)(VRAM + 0x7B40))[i];
- ((u16 *)(VRAM + 0x7B00))[i] = 1;
- ((u16 *)(VRAM + 0x7B40))[i] = 1;
- }
- }
- gMain.state = 1;
- }
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7064);
- InitMenuWindow(&gWindowTemplate_81E7064);
- LoadCompressedObjectPic(&gUnknown_083A05CC[0]);
- LoadSpritePalettes(gUnknown_083A05DC);
- sub_809308C(taskId);
- for (i = 0; i < 16; i++)
- gTasks[taskId].data[i] = 0;
- sub_8092EB0(taskId);
- sub_8092AB0(0);
- sub_8092B68(taskId);
- gMain.state++;
- break;
- case 2:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- gMain.state++;
- break;
- case 3:
- REG_BG3CNT = 0x0F03;
- REG_DISPCNT = 0x1C40;
- gMain.state++;
- break;
- case 4:
- if (!gPaletteFade.active)
- {
- gTasks[taskId].func = sub_809204C;
- gMain.state = 0;
- }
- break;
- }
-}
-
-static void sub_809204C(u8 taskId)
-{
- sub_8092AB0(gTasks[taskId].data[0]);
- sub_8092B68(taskId);
- gTasks[taskId].func = sub_809207C;
-}
-
-static void sub_809207C(u8 taskId)
-{
- if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_PC_OFF);
- gTasks[taskId].func = sub_80927B8;
- return;
- }
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gTasks[taskId].data[0])
- {
- case 0:
- PlaySE(SE_PIN);
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_809217C;
- break;
- case 1:
- PlaySE(SE_PIN);
- gTasks[taskId].data[1] = 4;
- gTasks[taskId].func = sub_809217C;
- break;
- case 2:
- PlaySE(SE_PC_OFF);
- gTasks[taskId].func = sub_80927B8;
- break;
- }
- return;
- }
- if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].data[0] > 0)
- {
- PlaySE(SE_Z_PAGE);
- gTasks[taskId].data[0]--;
- sub_8092AB0(gTasks[taskId].data[0]);
- }
- if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2)
- {
- PlaySE(SE_Z_PAGE);
- gTasks[taskId].data[0]++;
- sub_8092AB0(gTasks[taskId].data[0]);
- }
-}
-
-static void sub_809217C(u8 taskId)
-{
- sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
- sub_8092B68(taskId);
- gTasks[taskId].func = sub_80921B0;
-}
-
-static void sub_80921B0(u8 taskId)
-{
- const u8 (*r6)[4];
-
- if (gTasks[taskId].data[0] != 0)
- {
- if (!IsNationalPokedexEnabled())
- r6 = gUnknown_083B58A4;
- else
- r6 = gUnknown_083B586C;
- }
- else
- {
- if (!IsNationalPokedexEnabled())
- r6 = gUnknown_083B5888;
- else
- r6 = gUnknown_083B5850;
- }
-
- if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_BOWA);
- sub_8092EB0(taskId);
- gTasks[taskId].func = sub_809204C;
- return;
- }
- if (gMain.newKeys & A_BUTTON)
- {
- if (gTasks[taskId].data[1] == 6)
- {
- if (gTasks[taskId].data[0] != 0)
- {
- gUnknown_0202FFBA = 0x40;
- gPokedexView->unk62A = 0x40;
- gUnknown_0202FFB8 = 0;
- gPokedexView->unk610 = 0;
- gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5);
- if (!IsNationalPokedexEnabled())
- gSaveBlock2.pokedex.unknown1 = 0;
- gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1;
- gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4);
- gPokedexView->unk618 = gSaveBlock2.pokedex.order;
- PlaySE(SE_PC_OFF);
- gTasks[taskId].func = sub_80927B8;
- }
- else
- {
- sub_8091E20(gDexText_Searching);
- gTasks[taskId].func = sub_80923FC;
- PlaySE(SE_Z_SEARCH);
- }
- }
- else
- {
- PlaySE(SE_PIN);
- gTasks[taskId].func = sub_80925CC;
- }
- return;
- }
-
- if ((gMain.newKeys & DPAD_LEFT) && r6[gTasks[taskId].data[1]][0] != 0xFF)
- {
- PlaySE(SE_SELECT);
- gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0];
- sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
- }
- if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF)
- {
- PlaySE(SE_SELECT);
- gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1];
- sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
- }
- if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF)
- {
- PlaySE(SE_SELECT);
- gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2];
- sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
- }
- if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF)
- {
- PlaySE(SE_SELECT);
- gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3];
- sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
- }
-}
-
-static void sub_80923FC(u8 taskId)
-{
- u8 r10 = sub_8092E10(taskId, 5);
- u8 r9 = sub_8092E10(taskId, 4);
- u8 r8 = sub_8092E10(taskId, 0);
- u8 r6 = sub_8092E10(taskId, 1);
- u8 r4 = sub_8092E10(taskId, 2);
- u8 r0 = sub_8092E10(taskId, 3);
-
- sub_8091AF8(r10, r9, r8, r6, r4, r0);
- gTasks[taskId].func = sub_80924A4;
-}
-
-static void sub_80924A4(u8 taskId)
-{
- if (!IsSEPlaying())
- {
- if (gPokedexView->pokemonListCount != 0)
- {
- PlaySE(SE_SEIKAI);
- sub_8091E20(gDexText_SearchComplete);
- }
- else
- {
- PlaySE(SE_HAZURE);
- sub_8091E20(gDexText_NoMatching);
- }
- gTasks[taskId].func = sub_8092508;
- }
-}
-
-static void sub_8092508(u8 taskId)
-{
- if (gMain.newKeys & A_BUTTON)
- {
- if (gPokedexView->pokemonListCount != 0)
- {
- gPokedexView->unk64F = 1;
- gPokedexView->dexMode = sub_8092E10(taskId, 5);
- gPokedexView->dexOrder = sub_8092E10(taskId, 4);
- gTasks[taskId].func = sub_80927B8;
- PlaySE(SE_PC_OFF);
- }
- else
- {
- gTasks[taskId].func = sub_809217C;
- PlaySE(SE_BOWA);
- }
- }
-}
-
-static void sub_80925B4(u16 a, int unused)
-{
- MenuCursor_SetPos814AD7C(0x90, (a * 2 + 1) * 8);
-}
-
-static void sub_80925CC(u8 taskId)
-{
- u8 r0;
- u16 *p1;
- u16 *p2;
-
- sub_8092C8C(0);
- r0 = gTasks[taskId].data[1];
- p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4];
- p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5];
- gTasks[taskId].data[14] = *p1;
- gTasks[taskId].data[15] = *p2;
- sub_8092D78(taskId);
- CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11);
- sub_80925B4(*p1, 1);
- gTasks[taskId].func = sub_8092644;
-}
-
-static void sub_8092644(u8 taskId)
-{
- u8 r1;
- const struct UnknownStruct2 *r8;
- u16 *p1;
- u16 *p2;
- u16 r2;
- bool8 r3;
-
- r1 = gTasks[taskId].data[1];
- r8 = gUnknown_083B5A7C[r1].unk0;
- p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4];
- p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5];
- r2 = gUnknown_083B5A7C[r1].unk6 - 1;
- if (gMain.newKeys & A_BUTTON)
- {
- sub_814ADC8();
- PlaySE(SE_PIN);
- Menu_EraseWindowRect(18, 1, 28, 12);
- sub_8092C8C(1);
- gTasks[taskId].func = sub_809217C;
- return;
- }
- if (gMain.newKeys & B_BUTTON)
- {
- sub_814ADC8();
- PlaySE(SE_BOWA);
- Menu_EraseWindowRect(18, 1, 28, 12);
- sub_8092C8C(1);
- *p1 = gTasks[taskId].data[14];
- *p2 = gTasks[taskId].data[15];
- gTasks[taskId].func = sub_809217C;
- return;
- }
- r3 = FALSE;
- if (gMain.newAndRepeatedKeys & DPAD_UP)
- {
- if (*p1 != 0)
- {
- sub_80925B4(*p1, 0);
- (*p1)--;
- sub_80925B4(*p1, 1);
- r3 = TRUE;
- }
- else if (*p2 != 0)
- {
- (*p2)--;
- sub_8092D78(taskId);
- sub_80925B4(*p1, 1);
- r3 = TRUE;
- }
- if (r3)
- {
- PlaySE(SE_SELECT);
- sub_8091E20(r8[*p1 + *p2].text1);
- }
- return;
- }
- if (gMain.newAndRepeatedKeys & DPAD_DOWN)
- {
- if (*p1 < 5 && *p1 < r2)
- {
- sub_80925B4(*p1, 0);
- (*p1)++;
- sub_80925B4(*p1, 1);
- r3 = TRUE;
- }
- else if (r2 > 5 && *p2 < r2 - 5)
- {
- (*p2)++;
- sub_8092D78(taskId);
- sub_80925B4(5, 1);
- r3 = TRUE;
- }
- if (r3)
- {
- PlaySE(SE_SELECT);
- sub_8091E20(r8[*p1 + *p2].text1);
- }
- return;
- }
-}
-
-static void sub_80927B8(u8 taskId)
-{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gTasks[taskId].func = sub_80927F0;
-}
-
-static void sub_80927F0(u8 taskId)
-{
- if (!gPaletteFade.active)
- DestroyTask(taskId);
-}
-
-#ifdef NONMATCHING
-void sub_8092810(u8 a, u8 b, u8 c, u8 d)
-{
- u16 i;
-
- for (i = 0; i < d; i++)
- {
- ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] &= 0xFFF;
- ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] |= a << 12;
-
- ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] &= 0xFFF;
- ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] |= a << 12;
- }
-}
-#else
-__attribute__((naked))
-void sub_8092810(u8 a, u8 b, u8 c, u8 d)
-{
- 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\
- mov r12, r1\n\
- lsls r2, 24\n\
- lsrs r1, r2, 24\n\
- lsls r3, 24\n\
- lsrs r5, r3, 8\n\
- movs r3, 0\n\
- cmp r5, 0\n\
- beq _0809285A\n\
- lsls r7, r1, 6\n\
- ldr r6, _08092860 @ =0x00000fff\n\
- lsls r4, r0, 12\n\
-_08092830:\n\
- mov r0, r12\n\
- adds r1, r0, r3\n\
- lsls r1, 1\n\
- adds r1, r7, r1\n\
- ldr r0, _08092864 @ =0x06007800\n\
- adds r2, r1, r0\n\
- ldrh r0, [r2]\n\
- ands r0, r6\n\
- orrs r0, r4\n\
- strh r0, [r2]\n\
- ldr r0, _08092868 @ =0x06007840\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- ands r0, r6\n\
- orrs r0, r4\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r0, r5\n\
- bcc _08092830\n\
-_0809285A:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08092860: .4byte 0x00000fff\n\
-_08092864: .4byte 0x06007800\n\
-_08092868: .4byte 0x06007840\n\
- .syntax divided\n");
-}
-#endif
-
-static void sub_809286C(u8 a, u8 b, u8 c)
-{
- u8 r5 = (b & 1) | ((c & 1) << 1);
-
- switch (a)
- {
- case 0:
- case 1:
- case 2:
- sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6);
- break;
- case 3:
- case 4:
- case 7:
- case 8:
- sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6);
- // fall through
- case 5:
- case 6:
- sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9);
- break;
- case 10:
- sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6);
- break;
- case 9:
- if (!IsNationalPokedexEnabled())
- sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6);
- else
- sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6);
- break;
- }
-}
-
-static void sub_8092964(u8 a)
-{
- switch (a)
- {
- case 0:
- sub_809286C(0, 0, 0);
- sub_809286C(1, 1, 0);
- sub_809286C(2, 1, 0);
- sub_809286C(3, 1, 0);
- sub_809286C(4, 1, 0);
- sub_809286C(10, 1, 0);
- sub_809286C(5, 1, 0);
- sub_809286C(6, 1, 0);
- sub_809286C(7, 1, 0);
- sub_809286C(8, 1, 0);
- sub_809286C(9, 1, 0);
- break;
- case 1:
- sub_809286C(0, 1, 0);
- sub_809286C(1, 0, 0);
- sub_809286C(2, 1, 0);
- sub_809286C(3, 1, 1);
- sub_809286C(4, 1, 1);
- sub_809286C(10, 1, 1);
- sub_809286C(5, 1, 1);
- sub_809286C(6, 1, 1);
- sub_809286C(7, 1, 0);
- sub_809286C(8, 1, 0);
- sub_809286C(9, 1, 0);
- break;
- case 2:
- sub_809286C(0, 1, 0);
- sub_809286C(1, 1, 0);
- sub_809286C(2, 0, 0);
- sub_809286C(3, 1, 1);
- sub_809286C(4, 1, 1);
- sub_809286C(10, 1, 1);
- sub_809286C(5, 1, 1);
- sub_809286C(6, 1, 1);
- sub_809286C(7, 1, 1);
- sub_809286C(8, 1, 1);
- sub_809286C(9, 1, 1);
- break;
- }
-}
-
-static void sub_8092AB0(u8 a)
-{
- sub_8092964(a);
- sub_8091E20(gUnknown_083B57E4[a].text);
-}
-
-static void sub_8092AD4(u8 a, u8 b)
-{
- sub_8092964(a);
- switch (b)
- {
- case 0:
- sub_809286C(3, 0, 0);
- break;
- case 1:
- sub_809286C(4, 0, 0);
- break;
- case 2:
- sub_809286C(10, 0, 0);
- sub_809286C(5, 0, 0);
- break;
- case 3:
- sub_809286C(10, 0, 0);
- sub_809286C(6, 0, 0);
- break;
- case 4:
- sub_809286C(7, 0, 0);
- break;
- case 5:
- sub_809286C(8, 0, 0);
- break;
- case 6:
- sub_809286C(9, 0, 0);
- break;
- }
- sub_8091E20(gUnknown_083B57FC[b].text);
-}
-
-static void sub_8092B68(u8 taskId)
-{
- u16 var;
-
- var = gTasks[taskId].data[6] + gTasks[taskId].data[7];
- StringCopy(gStringVar1, gUnknown_083B5910[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 16, 1);
-
- var = gTasks[taskId].data[8] + gTasks[taskId].data[9];
- StringCopy(gStringVar1, gUnknown_083B5968[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 32, 1);
-
- var = gTasks[taskId].data[10] + gTasks[taskId].data[11];
- StringCopy(gStringVar1, gUnknown_083B59C8[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 45, 48, 1);
-
- var = gTasks[taskId].data[12] + gTasks[taskId].data[13];
- StringCopy(gStringVar1, gUnknown_083B59C8[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 93, 48, 1);
-
- var = gTasks[taskId].data[4] + gTasks[taskId].data[5];
- StringCopy(gStringVar1, gUnknown_083B58D8[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 64, 1);
-
- if (IsNationalPokedexEnabled())
- {
- var = gTasks[taskId].data[2] + gTasks[taskId].data[3];
- StringCopy(gStringVar1, gUnknown_083B58C0[var].text2);
- Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 80, 1);
- }
-}
-
-static void sub_8092C8C(u8 a)
-{
- u16 i;
- u16 j;
-
- if (a == 0)
- {
- *((u16 *)(VRAM + 0x7800 + 0x22)) = 0xC0B;
- for (i = 0x12; i < 0x1D; i++)
- *((u16 *)(VRAM + 0x7800 + i * 2)) = 0x80D;
- *((u16 *)(VRAM + 0x7800 + 0x3A)) = 0x80B;
- for (j = 1; j < 13; j++)
- {
- *((u16 *)(VRAM + 0x7800 + 0x22 + j * 64)) = 0x40A;
- for (i = 0x12; i < 0x1D; i++)
- *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 2;
- *((u16 *)(VRAM + 0x7800 + 0x3A + j * 64)) = 0xA;
- }
- *((u16 *)(VRAM + 0x7800 + 0x362)) = 0x40B;
- for (i = 0x12; i < 0x1D; i++)
- *((u16 *)(VRAM + 0x7800 + 0x340 + i * 2)) = 0xD;
- *((u16 *)(VRAM + 0x7800 + 0x37A)) = 0xB;
- }
- else
- {
- for (j = 0; j < 14; j++)
- {
- for (i = 0x11; i < 0x1E; i++)
- {
- *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 0x4F;
- }
- }
- }
-}
-
-static void sub_8092D78(u8 taskId)
-{
- const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0;
- const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4];
- const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5];
- u16 i;
- u16 j;
-
- Menu_EraseWindowRect(18, 1, 28, 12);
- for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++)
- {
-#ifndef NONMATCHING
- j += 0; // Useless statement needed to match
-#endif
- Menu_PrintText(r6[j].text2, 18, i * 2 + 1);
- }
- sub_8091E20(r6[*r8 + *r7].text1);
-}
-
-static u8 sub_8092E10(u8 taskId, u8 b)
-{
- const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4];
- const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5];
- u16 r2 = *ptr1 + *ptr2;
-
- switch (b)
- {
- default:
- return 0;
- case 5:
- return gUnknown_083B5A60[r2];
- case 4:
- return gUnknown_083B5A62[r2];
- case 0:
- if (r2 == 0)
- return 0xFF;
- else
- return r2;
- case 1:
- if (r2 == 0)
- return 0xFF;
- else
- return r2 - 1;
- case 2:
- case 3:
- return gUnknown_083B5A68[r2];
- }
-}
-
-static void sub_8092EB0(u8 taskId)
-{
- u16 r3;
-
- switch (gPokedexView->unk614)
- {
- default:
- case 0:
- r3 = 0;
- break;
- case 1:
- r3 = 1;
- break;
- }
- gTasks[taskId].data[2] = r3;
-
- switch (gPokedexView->unk618)
- {
- default:
- case 0:
- r3 = 0;
- break;
- case 1:
- r3 = 1;
- break;
- case 2:
- r3 = 2;
- break;
- case 3:
- r3 = 3;
- break;
- case 4:
- r3 = 4;
- break;
- case 5:
- r3 = 5;
- break;
- }
- gTasks[taskId].data[4] = r3;
-}
-
-static bool8 sub_8092F44(u8 taskId)
-{
- u8 val1 = gTasks[taskId].data[1];
- const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5];
- u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1;
-
- if (val2 > 5 && *ptr != 0)
- return FALSE;
- else
- return TRUE;
-}
-
-static bool8 sub_8092F8C(u8 taskId)
-{
- u8 val1 = gTasks[taskId].data[1];
- const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5];
- u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1;
-
- if (val2 > 5 && *ptr < val2 - 5)
- return FALSE;
- else
- return TRUE;
-}
-
-static void sub_8092FD8(struct Sprite *sprite)
-{
- if (gTasks[sprite->data[0]].func == sub_8092644)
- {
- u8 val;
-
- if (sprite->data[1] != 0)
- {
- if (sub_8092F8C(sprite->data[0]))
- sprite->invisible = TRUE;
- else
- sprite->invisible = FALSE;
- }
- else
- {
- if (sub_8092F44(sprite->data[0]))
- sprite->invisible = TRUE;
- else
- sprite->invisible = FALSE;
- }
- val = sprite->data[2] + sprite->data[1] * 128;
- sprite->pos2.y = gSineTable[val] / 128;
- sprite->data[2] += 8;
- }
- else
- {
- sprite->invisible = TRUE;
- }
-}
-
-static void sub_809308C(u8 taskId)
-{
- u8 spriteId;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].callback = sub_8092FD8;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 1;
- gSprites[spriteId].vFlip = TRUE;
- gSprites[spriteId].callback = sub_8092FD8;
-}
diff --git a/src/pokemon/pokedex_cry_screen.c b/src/pokemon/pokedex_cry_screen.c
deleted file mode 100644
index 912b9aabd..000000000
--- a/src/pokemon/pokedex_cry_screen.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "global.h"
-#include "pokedex_cry_screen.h"
-#include "palette.h"
-#include "sprite.h"
-#include "ewram.h"
-
-struct Unk201C800 {
- u8 unk_0;
- u8 unk_1;
- u8 unk_2;
- u8 filler_3;
- u16 unk_4;
-};
-
-extern u8 gUnknown_03005E98;
-
-// data/pokedex_cry_screen.o
-extern const u16 gUnknown_083FAE7C[];
-extern const u16 gUnknown_083FAF1C[];
-extern const u8 gUnknown_083FAF3C[];
-extern struct SpriteTemplate gSpriteTemplate_83FB774;
-extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[];
-extern const struct SpritePalette gCryMeterNeedleSpritePalettes[];
-
-#if ENGLISH
-#define CRY_METER_MAP_WIDTH 10
-#elif GERMAN
-#define CRY_METER_MAP_WIDTH 32
-#endif
-
-u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
- int returnVal = FALSE;
-
- switch (gUnknown_03005E98)
- {
- case 0:
- LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0));
- LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20);
- gUnknown_03005E98 += 1;
- break;
-
- case 1:
- {
- void *vram;
- u8 row, col;
- u32 r12;
- int x, y;
-
- vram = BG_SCREEN_ADDR(cry->unk2);
-
- r12 = (u32) (cry->unk0 << 18) >> 23;
-
- for (row = 0; row < 8; row++)
- {
- for (col = 0; col < 10; col++)
- {
- y = row + cry->yPos;
- x = col + cry->xPos;
- *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12;
- }
- }
-
- gUnknown_03005E98 += 1;
- break;
- }
-
- case 2:
- {
- LoadSpriteSheets(gCryMeterNeedleSpriteSheets);
- LoadSpritePalettes(gCryMeterNeedleSpritePalettes);
- EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1);
- EWRAM_1C800.unk_0 = 0x20;
- EWRAM_1C800.unk_1 = 0x20;
- EWRAM_1C800.unk_2 = 0;
-
- returnVal = TRUE;
- break;
- }
- }
-
- return returnVal;
-}
diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c
deleted file mode 100644
index 0242e7444..000000000
--- a/src/pokemon/pokemon_1.c
+++ /dev/null
@@ -1,727 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/species.h"
-#include "main.h"
-#include "pokemon.h"
-#include "random.h"
-#include "overworld.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "trainer.h"
-#include "text.h"
-#include "ewram.h"
-
-//Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-//Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
-extern u16 gMoveToLearn;
-
-static EWRAM_DATA u8 sLearningMoveTableID = 0;
-
-u8 gPlayerPartyCount;
-struct Pokemon gPlayerParty[6];
-u8 gEnemyPartyCount;
-struct Pokemon gEnemyParty[6];
-
-const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
-const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
-const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
-
-const struct SpindaSpot gSpindaSpotGraphics[] =
-{
- {16, 14, INCBIN_U16("graphics/spinda_spots/spot_0.bin")},
- {40, 15, INCBIN_U16("graphics/spinda_spots/spot_1.bin")},
- {22, 32, INCBIN_U16("graphics/spinda_spots/spot_2.bin")},
- {34, 33, INCBIN_U16("graphics/spinda_spots/spot_3.bin")}
-};
-
-#include "../data/pokemon/item_effects.h"
-
-const s8 gNatureStatTable[][5] =
-{
- // Atk Def Spd Sp.Atk Sp.Def
- { 0, 0, 0, 0, 0}, // Hardy
- { +1, -1, 0, 0, 0}, // Lonely
- { +1, 0, -1, 0, 0}, // Brave
- { +1, 0, 0, -1, 0}, // Adamant
- { +1, 0, 0, 0, -1}, // Naughty
- { -1, +1, 0, 0, 0}, // Bold
- { 0, 0, 0, 0, 0}, // Docile
- { 0, +1, -1, 0, 0}, // Relaxed
- { 0, +1, 0, -1, 0}, // Impish
- { 0, +1, 0, 0, -1}, // Lax
- { -1, 0, +1, 0, 0}, // Timid
- { 0, -1, +1, 0, 0}, // Hasty
- { 0, 0, 0, 0, 0}, // Serious
- { 0, 0, +1, -1, 0}, // Jolly
- { 0, 0, +1, 0, -1}, // Naive
- { -1, 0, 0, +1, 0}, // Modest
- { 0, -1, 0, +1, 0}, // Mild
- { 0, 0, -1, +1, 0}, // Quiet
- { 0, 0, 0, 0, 0}, // Bashful
- { 0, 0, 0, +1, -1}, // Rash
- { -1, 0, 0, 0, +1}, // Calm
- { 0, -1, 0, 0, +1}, // Gentle
- { 0, 0, -1, 0, +1}, // Sassy
- { 0, 0, 0, -1, +1}, // Careful
- { 0, 0, 0, 0, 0} // Quirky
-};
-
-#include "../data/pokemon/tmhm_learnsets.h"
-#include "../data/pokemon/trainer_class_lookups.h"
-#include "../data/pokemon/cry_ids.h"
-#include "../data/pokemon/experience_tables.h"
-#include "../data/pokemon/base_stats.h"
-#include "../data/pokemon/level_up_learnsets.h"
-#include "../data/pokemon/evolution.h"
-#include "../data/pokemon/level_up_learnset_pointers.h"
-
-void ZeroBoxMonData(struct BoxPokemon *boxMon)
-{
- u8 *raw = (u8 *)boxMon;
- u32 i;
- for (i = 0; i < sizeof(struct BoxPokemon); i++)
- raw[i] = 0;
-}
-
-void ZeroMonData(struct Pokemon *mon)
-{
- u32 arg;
- ZeroBoxMonData(&mon->box);
- arg = 0;
- SetMonData(mon, MON_DATA_STATUS, &arg);
- SetMonData(mon, MON_DATA_LEVEL, &arg);
- SetMonData(mon, MON_DATA_HP, &arg);
- SetMonData(mon, MON_DATA_MAX_HP, &arg);
- SetMonData(mon, MON_DATA_ATK, &arg);
- SetMonData(mon, MON_DATA_DEF, &arg);
- SetMonData(mon, MON_DATA_SPEED, &arg);
- SetMonData(mon, MON_DATA_SPATK, &arg);
- SetMonData(mon, MON_DATA_SPDEF, &arg);
- arg = 255;
- SetMonData(mon, MON_DATA_MAIL, &arg);
-}
-
-void ZeroPlayerPartyMons(void)
-{
- s32 i;
- for (i = 0; i < 6; i++)
- ZeroMonData(&gPlayerParty[i]);
-}
-
-void ZeroEnemyPartyMons(void)
-{
- s32 i;
- for (i = 0; i < 6; i++)
- ZeroMonData(&gEnemyParty[i]);
-}
-
-void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
-{
- u32 arg;
-
- ZeroMonData(mon);
- CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
- SetMonData(mon, MON_DATA_LEVEL, &level);
- arg = 255;
- SetMonData(mon, MON_DATA_MAIL, &arg);
- CalculateMonStats(mon);
-}
-
-void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
-{
- u8 speciesName[POKEMON_NAME_LENGTH + 1];
- u32 personality;
- u32 value;
- u16 checksum;
-
- ZeroBoxMonData(boxMon);
-
- if (hasFixedPersonality)
- personality = fixedPersonality;
- else
- personality = Random32();
-
- SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
-
- //Determine original trainer ID
- if (otIdType == 2) //Pokemon cannot be shiny
- {
- u32 shinyValue;
- do
- {
- value = Random32();
- shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
- } while (shinyValue < 8);
- }
- else if (otIdType == 1) //Pokemon has a preset OT ID
- {
- value = fixedOtId;
- }
- else //Player is the OT
- {
- value = gSaveBlock2.playerTrainerId[0]
- | (gSaveBlock2.playerTrainerId[1] << 8)
- | (gSaveBlock2.playerTrainerId[2] << 16)
- | (gSaveBlock2.playerTrainerId[3] << 24);
- }
-
- SetBoxMonData(boxMon, MON_DATA_OT_ID, &value);
-
- checksum = CalculateBoxMonChecksum(boxMon);
- SetBoxMonData(boxMon, MON_DATA_CHECKSUM, &checksum);
- EncryptBoxMon(boxMon);
- GetSpeciesName(speciesName, species);
- SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
- SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
- SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName);
- SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
- SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
- SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
- value = sav1_map_get_name();
- SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
- SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
- SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
- value = 4;
- SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value);
- SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender);
-
- if (fixedIV < 32)
- {
- SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
- }
- else
- {
- u32 iv;
- value = Random();
-
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
-
- value = Random();
-
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
- }
-
- if (gBaseStats[species].ability2)
- {
- value = personality & 1;
- SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value);
- }
-
- GiveBoxMonInitialMoveset(boxMon);
-}
-
-void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature)
-{
- u32 personality;
-
- do
- {
- personality = Random32();
- }
- while (nature != GetNatureFromPersonality(personality));
-
- CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0);
-}
-
-void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter)
-{
- u32 personality;
-
- if ((u8)(unownLetter - 1) < 28)
- {
- u16 actualLetter;
-
- do
- {
- personality = Random32();
- actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28);
- }
- while (nature != GetNatureFromPersonality(personality)
- || gender != GetGenderFromSpeciesAndPersonality(species, personality)
- || actualLetter != unownLetter - 1);
- }
- else
- {
- do
- {
- personality = Random32();
- }
- while (nature != GetNatureFromPersonality(personality)
- || gender != GetGenderFromSpeciesAndPersonality(species, personality));
- }
-
- CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0);
-}
-
-// This is only used to create Wally's Ralts.
-void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level)
-{
- u32 personality;
- u32 otId;
-
- do
- {
- otId = Random32();
- personality = Random32();
- }
- while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE);
- CreateMon(mon, species, level, 32, 1, personality, 1, otId);
-}
-
-void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality)
-{
- CreateMon(mon, species, level, 0, 1, personality, 0, 0);
- SetMonData(mon, MON_DATA_IVS, &ivs);
- CalculateMonStats(mon);
-}
-
-void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId)
-{
- CreateMon(mon, species, level, 0, 0, 0, 1, otId);
- SetMonData(mon, MON_DATA_HP_IV, &ivs[0]);
- SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]);
- SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]);
- SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]);
- SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]);
- SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]);
- CalculateMonStats(mon);
-}
-
-void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread)
-{
- s32 i;
- s32 statCount = 0;
- u16 evAmount;
- u8 temp;
-
- CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0);
-
- temp = evSpread;
-
- for (i = 0; i < 6; i++)
- {
- if (temp & 1)
- statCount++;
- temp >>= 1;
- }
-
- evAmount = 510 / statCount;
-
- temp = 1;
-
- for (i = 0; i < 6; i++)
- {
- if (evSpread & temp)
- SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
- temp <<= 1;
- }
-
- CalculateMonStats(mon);
-}
-
-void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src)
-{
- s32 i;
- u8 nickname[POKEMON_NAME_LENGTH + 1];
- u8 language;
- u8 value;
-
- CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId);
-
- for (i = 0; i < 4; i++)
- SetMonMoveSlot(mon, src->moves[i], i);
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
- SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
-
- StringCopy(nickname, src->nickname);
-
- if (nickname[0] == 0xFC && nickname[1] == 0x15)
- language = LANGUAGE_JAPANESE;
- else
- language = GAME_LANGUAGE;
-
- SetMonData(mon, MON_DATA_LANGUAGE, &language);
- Text_StripExtCtrlCodes(nickname);
- SetMonData(mon, MON_DATA_NICKNAME, nickname);
- SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
- SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
- SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
- SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
- SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
- SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
- SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
- value = src->altAbility;
- SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
- value = src->hpIV;
- SetMonData(mon, MON_DATA_HP_IV, &value);
- value = src->attackIV;
- SetMonData(mon, MON_DATA_ATK_IV, &value);
- value = src->defenseIV;
- SetMonData(mon, MON_DATA_DEF_IV, &value);
- value = src->speedIV;
- SetMonData(mon, MON_DATA_SPEED_IV, &value);
- value = src->spAttackIV;
- SetMonData(mon, MON_DATA_SPATK_IV, &value);
- value = src->spDefenseIV;
- SetMonData(mon, MON_DATA_SPDEF_IV, &value);
- CalculateMonStats(mon);
-}
-
-void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
-{
- s32 i;
- u16 heldItem;
-
- dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- heldItem = 0;
-
- dest->heldItem = heldItem;
-
- for (i = 0; i < 4; i++)
- dest->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
-
- dest->level = GetMonData(mon, MON_DATA_LEVEL, NULL);
- dest->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
- dest->otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
- dest->hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL);
- dest->attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
- dest->defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
- dest->speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL);
- dest->spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
- dest->spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL);
- dest->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
- dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
- dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
- dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
- dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
- dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
- dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
- dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
- GetMonData(mon, MON_DATA_NICKNAME, dest->nickname);
-}
-
-u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon)
-{
- u16 checksum = 0;
- union PokemonSubstruct *substruct0 = GetSubstruct(boxMon, boxMon->personality, 0);
- union PokemonSubstruct *substruct1 = GetSubstruct(boxMon, boxMon->personality, 1);
- union PokemonSubstruct *substruct2 = GetSubstruct(boxMon, boxMon->personality, 2);
- union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3);
- s32 i;
-
- for (i = 0; i < 6; i++)
- checksum += substruct0->raw[i];
-
- for (i = 0; i < 6; i++)
- checksum += substruct1->raw[i];
-
- for (i = 0; i < 6; i++)
- checksum += substruct2->raw[i];
-
- for (i = 0; i < 6; i++)
- checksum += substruct3->raw[i];
-
- return checksum;
-}
-
-#define CALC_STAT(base, iv, ev, statIndex, field) \
-{ \
- u8 baseStat = gBaseStats[species].base; \
- s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \
- u8 nature = GetNature(mon); \
- n = nature_stat_mod(nature, n, statIndex); \
- SetMonData(mon, field, &n); \
-}
-
-void CalculateMonStats(struct Pokemon *mon)
-{
- s32 oldMaxHP = GetMonData(mon, MON_DATA_MAX_HP, NULL);
- s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL);
- s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
- s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL);
- s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
- s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
- s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
- s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
- s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
- s32 speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL);
- s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
- s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
- s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
- s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL);
- u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- s32 level = GetLevelFromMonExp(mon);
- s32 newMaxHP;
-
- SetMonData(mon, MON_DATA_LEVEL, &level);
-
- if (species == SPECIES_SHEDINJA)
- {
- newMaxHP = 1;
- }
- else
- {
- s32 n = 2 * gBaseStats[species].baseHP + hpIV;
- newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10;
- }
-
- eStatHp = newMaxHP - oldMaxHP;
- if (eStatHp == 0)
- eStatHp = 1;
-
- SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP);
-
- CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK)
- CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF)
- CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED)
- CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK)
- CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF)
-
- if (species == SPECIES_SHEDINJA)
- {
- if (currentHP != 0 || oldMaxHP == 0)
- currentHP = 1;
- else
- return;
- }
- else
- {
- if (currentHP == 0 && oldMaxHP == 0)
- currentHP = newMaxHP;
- else if (currentHP != 0)
- currentHP += newMaxHP - oldMaxHP;
- else
- return;
- }
-
- SetMonData(mon, MON_DATA_HP, &currentHP);
-}
-
-void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest)
-{
- u32 value = 0;
- dest->box = *src;
- SetMonData(dest, MON_DATA_STATUS, &value);
- SetMonData(dest, MON_DATA_HP, &value);
- SetMonData(dest, MON_DATA_MAX_HP, &value);
- value = 255;
- SetMonData(dest, MON_DATA_MAIL, &value);
- CalculateMonStats(dest);
-}
-
-u8 GetLevelFromMonExp(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- u32 exp = GetMonData(mon, MON_DATA_EXP, NULL);
- s32 level = 1;
-
- while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
- level++;
-
- return level - 1;
-}
-
-u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon)
-{
- u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
- u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL);
- s32 level = 1;
-
- while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
- level++;
-
- return level - 1;
-}
-
-u16 GiveMoveToMon(struct Pokemon *mon, u16 move)
-{
- return GiveMoveToBoxMon(&mon->box, move);
-}
-
-u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
-{
- s32 i;
- for (i = 0; i < 4; i++)
- {
- u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL);
- if (!existingMove)
- {
- SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &move);
- SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp);
- return move;
- }
- if (existingMove == move)
- return -2;
- }
- return -1;
-}
-
-u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (!mon->moves[i])
- {
- mon->moves[i] = move;
- mon->pp[i] = gBattleMoves[move].pp;
- return move;
- }
- }
-
- return -1;
-}
-
-void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot)
-{
- SetMonData(mon, MON_DATA_MOVE1 + slot, &move);
- SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp);
-}
-
-void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot)
-{
- mon->moves[slot] = move;
- mon->pp[slot] = gBattleMoves[move].pp;
-}
-
-void GiveMonInitialMoveset(struct Pokemon *mon)
-{
- GiveBoxMonInitialMoveset(&mon->box);
-}
-
-void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
-{
- u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
- s32 level = GetLevelFromBoxMonExp(boxMon);
- s32 i;
-
- for (i = 0; gLevelUpLearnsets[species][i] != (u16)-1; i++)
- {
- u16 moveLevel;
- u16 move;
-
- moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00);
-
- if (moveLevel > (level << 9))
- break;
-
- move = (gLevelUpLearnsets[species][i] & 0x1FF);
-
- if (GiveMoveToBoxMon(boxMon, move) == (u16)-1)
- DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move);
- }
-}
-
-u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
-{
- u32 retVal = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
-
- // since you can learn more than one move per level
- // the game needs to know whether you decided to
- // learn it or keep the old set to avoid asking
- // you to learn the same move over and over again
- if (firstMove)
- {
- sLearningMoveTableID = 0;
-
- while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9))
- {
- sLearningMoveTableID++;
- if (gLevelUpLearnsets[species][sLearningMoveTableID] == 0xFFFF)
- return 0;
- }
- }
-
- if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9))
- {
- gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF);
- sLearningMoveTableID++;
- retVal = GiveMoveToMon(mon, gMoveToLearn);
- }
-
- return retVal;
-}
-
-void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
-{
- s32 i;
- u16 moves[4];
- u8 pp[4];
- u8 ppBonuses;
-
- for (i = 0; i < 3; i++)
- {
- moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL);
- pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL);
- }
-
- ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
- ppBonuses >>= 2;
- moves[3] = move;
- pp[3] = gBattleMoves[move].pp;
-
- for (i = 0; i < 4; i++)
- {
- SetMonData(mon, MON_DATA_MOVE1 + i, &moves[i]);
- SetMonData(mon, MON_DATA_PP1 + i, &pp[i]);
- }
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
-{
- s32 i;
- u16 moves[4];
- u8 pp[4];
- u8 ppBonuses;
-
- for (i = 0; i < 3; i++)
- {
- moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL);
- pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL);
- }
-
- ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL);
- ppBonuses >>= 2;
- moves[3] = move;
- pp[3] = gBattleMoves[move].pp;
-
- for (i = 0; i < 4; i++)
- {
- SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &moves[i]);
- SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]);
- }
-
- SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses);
-}
diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c
deleted file mode 100644
index b941ed2ab..000000000
--- a/src/pokemon/pokemon_2.c
+++ /dev/null
@@ -1,1236 +0,0 @@
-#include "global.h"
-#include "constants/hold_effects.h"
-#include "battle.h"
-#include "battle_util.h"
-#include "data2.h"
-#include "event_data.h"
-#include "main.h"
-#include "pokemon.h"
-#include "random.h"
-#include "rom_8077ABC.h"
-#include "constants/species.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "text.h"
-#include "trainer.h"
-#include "util.h"
-#include "ewram.h"
-
-extern u8 gPlayerPartyCount;
-extern u8 gEnemyPartyCount;
-
-extern u16 gBattleTypeFlags;
-extern u8 gActiveBank;
-extern struct BattlePokemon gBattleMons[4];
-extern u16 gCurrentMove;
-extern u8 gLastUsedAbility;
-extern u8 gBankAttacker;
-extern u8 gBankTarget;
-extern u8 gAbsentBankFlags;
-extern u8 gXXX_CritRelated;
-extern u16 gBattleWeather;
-extern struct BattleEnigmaBerry gEnigmaBerries[];
-extern u16 gBattleMovePower;
-extern u16 gTrainerBattleOpponent;
-extern struct PokemonStorage gPokemonStorage;
-
-EWRAM_DATA struct SpriteTemplate gUnknown_02024E8C = {0};
-
-extern u8 gBadEggNickname[];
-extern const struct SpriteTemplate gSpriteTemplate_8208288[];
-//array of pointers to arrays of pointers to union AnimCmd (We probably need to typedef this.)
-extern u8 gTrainerClassToPicIndex[];
-extern u8 gTrainerClassToNameIndex[];
-
-extern const u8 gUnknown_08208238[];
-extern const u8 gUnknown_0820823C[];
-
-extern void sub_80105A0(struct Sprite *);
-extern void oac_poke_opponent(struct Sprite *);
-
-u8 CountAliveMons(u8 a1)
-{
- s32 i;
- u8 retVal = 0;
-
- switch (a1)
- {
- case 0:
- for (i = 0; i < 4; i++)
- {
- if (i != gActiveBank && !(gAbsentBankFlags & gBitTable[i]))
- retVal++;
- }
- break;
- case 1:
- for (i = 0; i < 4; i++)
- {
- if (GetBankSide(i) == GetBankSide(gBankAttacker) && !(gAbsentBankFlags & gBitTable[i]))
- retVal++;
- }
- break;
- case 2:
- for (i = 0; i < 4; i++)
- {
- if (GetBankSide(i) == GetBankSide(gBankTarget) && !(gAbsentBankFlags & gBitTable[i]))
- retVal++;
- }
- break;
- }
-
- return retVal;
-}
-
-u8 sub_803C434(u8 a1)
-{
- u8 status = GetBankIdentity(a1) & 1;
-
- status ^= 1;
- if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
- return GetBankByIdentity(status);
- if (CountAliveMons(0) > 1)
- {
- u8 val;
-
- if ((Random() & 1) == 0)
- val = status ^ 2;
- else
- val = status;
- return GetBankByIdentity(val);
- }
- else
- {
- if ((gAbsentBankFlags & gBitTable[status]))
- return GetBankByIdentity(status ^ 2);
- else
- return GetBankByIdentity(status);
- }
-}
-
-u8 GetMonGender(struct Pokemon *mon)
-{
- return GetBoxMonGender(&mon->box);
-}
-
-u8 GetBoxMonGender(struct BoxPokemon *boxMon)
-{
- u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
- u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL);
-
- switch (gBaseStats[species].genderRatio)
- {
- case MON_MALE:
- case MON_FEMALE:
- case MON_GENDERLESS:
- return gBaseStats[species].genderRatio;
- }
-
- if (gBaseStats[species].genderRatio > (personality & 0xFF))
- return MON_FEMALE;
- else
- return MON_MALE;
-}
-
-u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
-{
- switch (gBaseStats[species].genderRatio)
- {
- case MON_MALE:
- case MON_FEMALE:
- case MON_GENDERLESS:
- return gBaseStats[species].genderRatio;
- }
-
- if (gBaseStats[species].genderRatio > (personality & 0xFF))
- return MON_FEMALE;
- else
- return MON_MALE;
-}
-
-const struct SpriteTemplate gSpriteTemplate_8208288[] =
-{
- {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0},
- {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent},
- {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0},
- {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent},
-};
-
-void GetMonSpriteTemplate_803C56C(u16 species, u8 a2)
-{
- gUnknown_02024E8C = gSpriteTemplate_8208288[a2];
- gUnknown_02024E8C.paletteTag = species;
- gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this?
-}
-
-void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2)
-{
- gUnknown_02024E8C = gSpriteTemplate_8208288[a2];
- gUnknown_02024E8C.paletteTag = species;
- if (a2 == 0 || a2 == 2)
- gUnknown_02024E8C.anims = gUnknown_081ECACC[species];
- else
- gUnknown_02024E8C.anims = gUnknown_081EC2A4[species];
-}
-
-void EncryptBoxMon(struct BoxPokemon *boxMon)
-{
- u32 i;
- for (i = 0; i < 12; i++)
- {
- boxMon->secure.raw[i] ^= boxMon->personality;
- boxMon->secure.raw[i] ^= boxMon->otId;
- }
-}
-
-void DecryptBoxMon(struct BoxPokemon *boxMon)
-{
- u32 i;
- for (i = 0; i < 12; i++)
- {
- boxMon->secure.raw[i] ^= boxMon->otId;
- boxMon->secure.raw[i] ^= boxMon->personality;
- }
-}
-
-#define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \
-case n: \
- switch (substructType) \
- { \
- case 0: \
- substruct = &substructs ## n [v1]; \
- break; \
- case 1: \
- substruct = &substructs ## n [v2]; \
- break; \
- case 2: \
- substruct = &substructs ## n [v3]; \
- break; \
- case 3: \
- substruct = &substructs ## n [v4]; \
- break; \
- } \
- break;
-
-union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType)
-{
- union PokemonSubstruct *substruct = NULL;
-
- union PokemonSubstruct *substructs0 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs1 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs2 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs3 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs4 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs5 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs6 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs7 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs8 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs9 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs10 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs11 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs12 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs13 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs14 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs15 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs16 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs17 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs18 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs19 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs20 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs21 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs22 = boxMon->secure.substructs;
- union PokemonSubstruct *substructs23 = boxMon->secure.substructs;
-
- switch (personality % 24)
- {
- SUBSTRUCT_CASE( 0,0,1,2,3)
- SUBSTRUCT_CASE( 1,0,1,3,2)
- SUBSTRUCT_CASE( 2,0,2,1,3)
- SUBSTRUCT_CASE( 3,0,3,1,2)
- SUBSTRUCT_CASE( 4,0,2,3,1)
- SUBSTRUCT_CASE( 5,0,3,2,1)
- SUBSTRUCT_CASE( 6,1,0,2,3)
- SUBSTRUCT_CASE( 7,1,0,3,2)
- SUBSTRUCT_CASE( 8,2,0,1,3)
- SUBSTRUCT_CASE( 9,3,0,1,2)
- SUBSTRUCT_CASE(10,2,0,3,1)
- SUBSTRUCT_CASE(11,3,0,2,1)
- SUBSTRUCT_CASE(12,1,2,0,3)
- SUBSTRUCT_CASE(13,1,3,0,2)
- SUBSTRUCT_CASE(14,2,1,0,3)
- SUBSTRUCT_CASE(15,3,1,0,2)
- SUBSTRUCT_CASE(16,2,3,0,1)
- SUBSTRUCT_CASE(17,3,2,0,1)
- SUBSTRUCT_CASE(18,1,2,3,0)
- SUBSTRUCT_CASE(19,1,3,2,0)
- SUBSTRUCT_CASE(20,2,1,3,0)
- SUBSTRUCT_CASE(21,3,1,2,0)
- SUBSTRUCT_CASE(22,2,3,1,0)
- SUBSTRUCT_CASE(23,3,2,1,0)
- }
-
- return substruct;
-}
-
-u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data)
-{
- switch (field)
- {
- case MON_DATA_STATUS:
- return mon->status;
- case MON_DATA_LEVEL:
- return mon->level;
- case MON_DATA_HP:
- return mon->hp;
- case MON_DATA_MAX_HP:
- return mon->maxHP;
- case MON_DATA_ATK:
- return mon->attack;
- case MON_DATA_DEF:
- return mon->defense;
- case MON_DATA_SPEED:
- return mon->speed;
- case MON_DATA_SPATK:
- return mon->spAttack;
- case MON_DATA_SPDEF:
- return mon->spDefense;
- case MON_DATA_MAIL:
- return mon->mail;
- default:
- return GetBoxMonData(&mon->box, field, data);
- }
-}
-
-u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
-{
- u32 retVal = 0;
- struct PokemonSubstruct0 *substruct0 = NULL;
- struct PokemonSubstruct1 *substruct1 = NULL;
- struct PokemonSubstruct2 *substruct2 = NULL;
- struct PokemonSubstruct3 *substruct3 = NULL;
-
- if (field > MON_DATA_10)
- {
- substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
- substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
- substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
- substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
-
- DecryptBoxMon(boxMon);
-
- if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
- {
- boxMon->isBadEgg = 1;
- boxMon->isEgg = 1;
- substruct3->isEgg = 1;
- }
- }
-
- switch (field)
- {
- case MON_DATA_PERSONALITY:
- retVal = boxMon->personality;
- break;
- case MON_DATA_OT_ID:
- retVal = boxMon->otId;
- break;
- case MON_DATA_NICKNAME:
- {
- if (boxMon->isBadEgg)
- {
- StringCopy(data, gBadEggNickname);
- retVal = StringLength(data);
- }
- else if (boxMon->isEgg)
- {
- StringCopy(data, gEggNickname);
- retVal = StringLength(data);
- }
- else
- {
- retVal = 0;
-
- while (retVal < POKEMON_NAME_LENGTH && boxMon->nickname[retVal] != EOS)
- {
- data[retVal] = boxMon->nickname[retVal];
- retVal++;
- }
-
- data[retVal] = EOS;
- ConvertInternationalString(data, boxMon->language);
- retVal = StringLength(data);
- }
- break;
- }
- case MON_DATA_LANGUAGE:
- retVal = boxMon->language;
- break;
- case MON_DATA_SANITY_BIT1:
- retVal = boxMon->isBadEgg;
- break;
- case MON_DATA_SANITY_BIT2:
- retVal = boxMon->hasSpecies;
- break;
- case MON_DATA_SANITY_BIT3:
- retVal = boxMon->isEgg;
- break;
- case MON_DATA_OT_NAME:
- {
- retVal = 0;
-
- while (retVal < OT_NAME_LENGTH && boxMon->otName[retVal] != EOS)
- {
- data[retVal] = boxMon->otName[retVal];
- retVal++;
- }
-
- data[retVal] = EOS;
- break;
- }
- case MON_DATA_MARKINGS:
- retVal = boxMon->markings;
- break;
- case MON_DATA_CHECKSUM:
- retVal = boxMon->checksum;
- break;
- case MON_DATA_10:
- retVal = boxMon->unknown;
- break;
- case MON_DATA_SPECIES:
- retVal = boxMon->isBadEgg ? SPECIES_EGG : substruct0->species;
- break;
- case MON_DATA_HELD_ITEM:
- retVal = substruct0->heldItem;
- break;
- case MON_DATA_EXP:
- retVal = substruct0->experience;
- break;
- case MON_DATA_PP_BONUSES:
- retVal = substruct0->ppBonuses;
- break;
- case MON_DATA_FRIENDSHIP:
- retVal = substruct0->friendship;
- break;
- case MON_DATA_MOVE1:
- case MON_DATA_MOVE2:
- case MON_DATA_MOVE3:
- case MON_DATA_MOVE4:
- retVal = substruct1->moves[field - MON_DATA_MOVE1];
- break;
- case MON_DATA_PP1:
- case MON_DATA_PP2:
- case MON_DATA_PP3:
- case MON_DATA_PP4:
- retVal = substruct1->pp[field - MON_DATA_PP1];
- break;
- case MON_DATA_HP_EV:
- retVal = substruct2->hpEV;
- break;
- case MON_DATA_ATK_EV:
- retVal = substruct2->attackEV;
- break;
- case MON_DATA_DEF_EV:
- retVal = substruct2->defenseEV;
- break;
- case MON_DATA_SPEED_EV:
- retVal = substruct2->speedEV;
- break;
- case MON_DATA_SPATK_EV:
- retVal = substruct2->spAttackEV;
- break;
- case MON_DATA_SPDEF_EV:
- retVal = substruct2->spDefenseEV;
- break;
- case MON_DATA_COOL:
- retVal = substruct2->cool;
- break;
- case MON_DATA_BEAUTY:
- retVal = substruct2->beauty;
- break;
- case MON_DATA_CUTE:
- retVal = substruct2->cute;
- break;
- case MON_DATA_SMART:
- retVal = substruct2->smart;
- break;
- case MON_DATA_TOUGH:
- retVal = substruct2->tough;
- break;
- case MON_DATA_SHEEN:
- retVal = substruct2->sheen;
- break;
- case MON_DATA_POKERUS:
- retVal = substruct3->pokerus;
- break;
- case MON_DATA_MET_LOCATION:
- retVal = substruct3->metLocation;
- break;
- case MON_DATA_MET_LEVEL:
- retVal = substruct3->metLevel;
- break;
- case MON_DATA_MET_GAME:
- retVal = substruct3->metGame;
- break;
- case MON_DATA_POKEBALL:
- retVal = substruct3->pokeball;
- break;
- case MON_DATA_OT_GENDER:
- retVal = substruct3->otGender;
- break;
- case MON_DATA_HP_IV:
- retVal = substruct3->hpIV;
- break;
- case MON_DATA_ATK_IV:
- retVal = substruct3->attackIV;
- break;
- case MON_DATA_DEF_IV:
- retVal = substruct3->defenseIV;
- break;
- case MON_DATA_SPEED_IV:
- retVal = substruct3->speedIV;
- break;
- case MON_DATA_SPATK_IV:
- retVal = substruct3->spAttackIV;
- break;
- case MON_DATA_SPDEF_IV:
- retVal = substruct3->spDefenseIV;
- break;
- case MON_DATA_IS_EGG:
- retVal = substruct3->isEgg;
- break;
- case MON_DATA_ALT_ABILITY:
- retVal = substruct3->altAbility;
- break;
- case MON_DATA_COOL_RIBBON:
- retVal = substruct3->coolRibbon;
- break;
- case MON_DATA_BEAUTY_RIBBON:
- retVal = substruct3->beautyRibbon;
- break;
- case MON_DATA_CUTE_RIBBON:
- retVal = substruct3->cuteRibbon;
- break;
- case MON_DATA_SMART_RIBBON:
- retVal = substruct3->smartRibbon;
- break;
- case MON_DATA_TOUGH_RIBBON:
- retVal = substruct3->toughRibbon;
- break;
- case MON_DATA_CHAMPION_RIBBON:
- retVal = substruct3->championRibbon;
- break;
- case MON_DATA_WINNING_RIBBON:
- retVal = substruct3->winningRibbon;
- break;
- case MON_DATA_VICTORY_RIBBON:
- retVal = substruct3->victoryRibbon;
- break;
- case MON_DATA_ARTIST_RIBBON:
- retVal = substruct3->artistRibbon;
- break;
- case MON_DATA_EFFORT_RIBBON:
- retVal = substruct3->effortRibbon;
- break;
- case MON_DATA_GIFT_RIBBON_1:
- retVal = substruct3->giftRibbon1;
- break;
- case MON_DATA_GIFT_RIBBON_2:
- retVal = substruct3->giftRibbon2;
- break;
- case MON_DATA_GIFT_RIBBON_3:
- retVal = substruct3->giftRibbon3;
- break;
- case MON_DATA_GIFT_RIBBON_4:
- retVal = substruct3->giftRibbon4;
- break;
- case MON_DATA_GIFT_RIBBON_5:
- retVal = substruct3->giftRibbon5;
- break;
- case MON_DATA_GIFT_RIBBON_6:
- retVal = substruct3->giftRibbon6;
- break;
- case MON_DATA_GIFT_RIBBON_7:
- retVal = substruct3->giftRibbon7;
- break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- retVal = substruct3->fatefulEncounter;
- break;
- case MON_DATA_SPECIES2:
- retVal = substruct0->species;
- if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg))
- retVal = SPECIES_EGG;
- break;
- case MON_DATA_IVS:
- retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25);
- break;
- case MON_DATA_KNOWN_MOVES:
- if (substruct0->species && !substruct3->isEgg)
- {
- u16 *moves = (u16 *)data;
- s32 i = 0;
-
- while (moves[i] != 355)
- {
- u16 move = moves[i];
- if (substruct1->moves[0] == move
- || substruct1->moves[1] == move
- || substruct1->moves[2] == move
- || substruct1->moves[3] == move)
- retVal |= gBitTable[i];
- i++;
- }
- }
- break;
- case MON_DATA_RIBBON_COUNT:
- retVal = 0;
- if (substruct0->species && !substruct3->isEgg)
- {
- retVal += substruct3->coolRibbon;
- retVal += substruct3->beautyRibbon;
- retVal += substruct3->cuteRibbon;
- retVal += substruct3->smartRibbon;
- retVal += substruct3->toughRibbon;
- retVal += substruct3->championRibbon;
- retVal += substruct3->winningRibbon;
- retVal += substruct3->victoryRibbon;
- retVal += substruct3->artistRibbon;
- retVal += substruct3->effortRibbon;
- retVal += substruct3->giftRibbon1;
- retVal += substruct3->giftRibbon2;
- retVal += substruct3->giftRibbon3;
- retVal += substruct3->giftRibbon4;
- retVal += substruct3->giftRibbon5;
- retVal += substruct3->giftRibbon6;
- retVal += substruct3->giftRibbon7;
- }
- break;
- case MON_DATA_RIBBONS:
- retVal = 0;
- if (substruct0->species && !substruct3->isEgg)
- {
- retVal = substruct3->championRibbon
- | (substruct3->coolRibbon << 1)
- | (substruct3->beautyRibbon << 4)
- | (substruct3->cuteRibbon << 7)
- | (substruct3->smartRibbon << 10)
- | (substruct3->toughRibbon << 13)
- | (substruct3->winningRibbon << 16)
- | (substruct3->victoryRibbon << 17)
- | (substruct3->artistRibbon << 18)
- | (substruct3->effortRibbon << 19)
- | (substruct3->giftRibbon1 << 20)
- | (substruct3->giftRibbon2 << 21)
- | (substruct3->giftRibbon3 << 22)
- | (substruct3->giftRibbon4 << 23)
- | (substruct3->giftRibbon5 << 24)
- | (substruct3->giftRibbon6 << 25)
- | (substruct3->giftRibbon7 << 26);
- }
- break;
- default:
- break;
- }
-
- if (field > MON_DATA_10)
- EncryptBoxMon(boxMon);
-
- return retVal;
-}
-
-#define SET8(lhs) (lhs) = *data
-#define SET16(lhs) (lhs) = data[0] + (data[1] << 8)
-#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
-
-void SetMonData(struct Pokemon *mon, s32 field, const u8 *data)
-{
- switch (field)
- {
- case MON_DATA_STATUS:
- SET32(mon->status);
- break;
- case MON_DATA_LEVEL:
- SET8(mon->level);
- break;
- case MON_DATA_HP:
- SET16(mon->hp);
- break;
- case MON_DATA_MAX_HP:
- SET16(mon->maxHP);
- break;
- case MON_DATA_ATK:
- SET16(mon->attack);
- break;
- case MON_DATA_DEF:
- SET16(mon->defense);
- break;
- case MON_DATA_SPEED:
- SET16(mon->speed);
- break;
- case MON_DATA_SPATK:
- SET16(mon->spAttack);
- break;
- case MON_DATA_SPDEF:
- SET16(mon->spDefense);
- break;
- case MON_DATA_MAIL:
- SET8(mon->mail);
- break;
- case MON_DATA_SPECIES2:
- break;
- default:
- SetBoxMonData(&mon->box, field, data);
- break;
- }
-}
-
-void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data)
-{
- struct PokemonSubstruct0 *substruct0 = NULL;
- struct PokemonSubstruct1 *substruct1 = NULL;
- struct PokemonSubstruct2 *substruct2 = NULL;
- struct PokemonSubstruct3 *substruct3 = NULL;
-
- if (field > MON_DATA_10)
- {
- substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
- substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
- substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
- substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
-
- DecryptBoxMon(boxMon);
-
- if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
- {
- boxMon->isBadEgg = 1;
- boxMon->isEgg = 1;
- substruct3->isEgg = 1;
- EncryptBoxMon(boxMon);
- return;
- }
- }
-
- switch (field)
- {
- case MON_DATA_PERSONALITY:
- SET32(boxMon->personality);
- break;
- case MON_DATA_OT_ID:
- SET32(boxMon->otId);
- break;
- case MON_DATA_NICKNAME:
- {
- s32 i;
- for (i = 0; i < POKEMON_NAME_LENGTH; i++)
- boxMon->nickname[i] = data[i];
- break;
- }
- case MON_DATA_LANGUAGE:
- SET8(boxMon->language);
- break;
- case MON_DATA_SANITY_BIT1:
- SET8(boxMon->isBadEgg);
- break;
- case MON_DATA_SANITY_BIT2:
- SET8(boxMon->hasSpecies);
- break;
- case MON_DATA_SANITY_BIT3:
- SET8(boxMon->isEgg);
- break;
- case MON_DATA_OT_NAME:
- {
- s32 i;
- for (i = 0; i < OT_NAME_LENGTH; i++)
- boxMon->otName[i] = data[i];
- break;
- }
- case MON_DATA_MARKINGS:
- SET8(boxMon->markings);
- break;
- case MON_DATA_CHECKSUM:
- SET16(boxMon->checksum);
- break;
- case MON_DATA_10:
- SET16(boxMon->unknown);
- break;
- case MON_DATA_SPECIES:
- {
- SET16(substruct0->species);
- if (substruct0->species)
- boxMon->hasSpecies = 1;
- else
- boxMon->hasSpecies = 0;
- break;
- }
- case MON_DATA_HELD_ITEM:
- SET16(substruct0->heldItem);
- break;
- case MON_DATA_EXP:
- SET32(substruct0->experience);
- break;
- case MON_DATA_PP_BONUSES:
- SET8(substruct0->ppBonuses);
- break;
- case MON_DATA_FRIENDSHIP:
- SET8(substruct0->friendship);
- break;
- case MON_DATA_MOVE1:
- case MON_DATA_MOVE2:
- case MON_DATA_MOVE3:
- case MON_DATA_MOVE4:
- SET16(substruct1->moves[field - MON_DATA_MOVE1]);
- break;
- case MON_DATA_PP1:
- case MON_DATA_PP2:
- case MON_DATA_PP3:
- case MON_DATA_PP4:
- SET8(substruct1->pp[field - MON_DATA_PP1]);
- break;
- case MON_DATA_HP_EV:
- SET8(substruct2->hpEV);
- break;
- case MON_DATA_ATK_EV:
- SET8(substruct2->attackEV);
- break;
- case MON_DATA_DEF_EV:
- SET8(substruct2->defenseEV);
- break;
- case MON_DATA_SPEED_EV:
- SET8(substruct2->speedEV);
- break;
- case MON_DATA_SPATK_EV:
- SET8(substruct2->spAttackEV);
- break;
- case MON_DATA_SPDEF_EV:
- SET8(substruct2->spDefenseEV);
- break;
- case MON_DATA_COOL:
- SET8(substruct2->cool);
- break;
- case MON_DATA_BEAUTY:
- SET8(substruct2->beauty);
- break;
- case MON_DATA_CUTE:
- SET8(substruct2->cute);
- break;
- case MON_DATA_SMART:
- SET8(substruct2->smart);
- break;
- case MON_DATA_TOUGH:
- SET8(substruct2->tough);
- break;
- case MON_DATA_SHEEN:
- SET8(substruct2->sheen);
- break;
- case MON_DATA_POKERUS:
- SET8(substruct3->pokerus);
- break;
- case MON_DATA_MET_LOCATION:
- SET8(substruct3->metLocation);
- break;
- case MON_DATA_MET_LEVEL:
- {
- u8 metLevel = *data;
- substruct3->metLevel = metLevel;
- break;
- }
- case MON_DATA_MET_GAME:
- SET8(substruct3->metGame);
- break;
- case MON_DATA_POKEBALL:
- {
- u8 pokeball = *data;
- substruct3->pokeball = pokeball;
- break;
- }
- case MON_DATA_OT_GENDER:
- SET8(substruct3->otGender);
- break;
- case MON_DATA_HP_IV:
- SET8(substruct3->hpIV);
- break;
- case MON_DATA_ATK_IV:
- SET8(substruct3->attackIV);
- break;
- case MON_DATA_DEF_IV:
- SET8(substruct3->defenseIV);
- break;
- case MON_DATA_SPEED_IV:
- SET8(substruct3->speedIV);
- break;
- case MON_DATA_SPATK_IV:
- SET8(substruct3->spAttackIV);
- break;
- case MON_DATA_SPDEF_IV:
- SET8(substruct3->spDefenseIV);
- break;
- case MON_DATA_IS_EGG:
- SET8(substruct3->isEgg);
- if (substruct3->isEgg)
- boxMon->isEgg = 1;
- else
- boxMon->isEgg = 0;
- break;
- case MON_DATA_ALT_ABILITY:
- SET8(substruct3->altAbility);
- break;
- case MON_DATA_COOL_RIBBON:
- SET8(substruct3->coolRibbon);
- break;
- case MON_DATA_BEAUTY_RIBBON:
- SET8(substruct3->beautyRibbon);
- break;
- case MON_DATA_CUTE_RIBBON:
- SET8(substruct3->cuteRibbon);
- break;
- case MON_DATA_SMART_RIBBON:
- SET8(substruct3->smartRibbon);
- break;
- case MON_DATA_TOUGH_RIBBON:
- SET8(substruct3->toughRibbon);
- break;
- case MON_DATA_CHAMPION_RIBBON:
- SET8(substruct3->championRibbon);
- break;
- case MON_DATA_WINNING_RIBBON:
- SET8(substruct3->winningRibbon);
- break;
- case MON_DATA_VICTORY_RIBBON:
- SET8(substruct3->victoryRibbon);
- break;
- case MON_DATA_ARTIST_RIBBON:
- SET8(substruct3->artistRibbon);
- break;
- case MON_DATA_EFFORT_RIBBON:
- SET8(substruct3->effortRibbon);
- break;
- case MON_DATA_GIFT_RIBBON_1:
- SET8(substruct3->giftRibbon1);
- break;
- case MON_DATA_GIFT_RIBBON_2:
- SET8(substruct3->giftRibbon2);
- break;
- case MON_DATA_GIFT_RIBBON_3:
- SET8(substruct3->giftRibbon3);
- break;
- case MON_DATA_GIFT_RIBBON_4:
- SET8(substruct3->giftRibbon4);
- break;
- case MON_DATA_GIFT_RIBBON_5:
- SET8(substruct3->giftRibbon5);
- break;
- case MON_DATA_GIFT_RIBBON_6:
- SET8(substruct3->giftRibbon6);
- break;
- case MON_DATA_GIFT_RIBBON_7:
- SET8(substruct3->giftRibbon7);
- break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- SET8(substruct3->fatefulEncounter);
- break;
- case MON_DATA_IVS:
- {
-#ifdef BUGFIX_SETMONIVS
- u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
-#else
- u32 ivs = *data; // Bug: Only the HP IV and the lower 3 bits of the Attack IV are read. The rest become 0.
-#endif
- substruct3->hpIV = ivs & 0x1F;
- substruct3->attackIV = (ivs >> 5) & 0x1F;
- substruct3->defenseIV = (ivs >> 10) & 0x1F;
- substruct3->speedIV = (ivs >> 15) & 0x1F;
- substruct3->spAttackIV = (ivs >> 20) & 0x1F;
- substruct3->spDefenseIV = (ivs >> 25) & 0x1F;
- break;
- }
- default:
- break;
- }
-
- if (field > MON_DATA_10)
- {
- boxMon->checksum = CalculateBoxMonChecksum(boxMon);
- EncryptBoxMon(boxMon);
- }
-}
-
-void CopyMon(void *dest, void *src, size_t size)
-{
- memcpy(dest, src, size);
-}
-
-u8 GiveMonToPlayer(struct Pokemon *mon)
-{
- s32 i;
-
- SetMonData(mon, MON_DATA_OT_NAME, gSaveBlock2.playerName);
- SetMonData(mon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender);
- SetMonData(mon, MON_DATA_OT_ID, gSaveBlock2.playerTrainerId);
-
- i = 0;
-
- while (i < 6 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- i++;
-
- if (i >= 6)
- return SendMonToPC(mon);
-
- CopyMon(&gPlayerParty[i], mon, sizeof(*mon));
- gPlayerPartyCount = i + 1;
- return 0;
-}
-
-u8 SendMonToPC(struct Pokemon *mon)
-{
- s32 i = gPokemonStorage.currentBox;
-
- do
- {
- s32 j;
- for (j = 0; j < 30; j++)
- {
- if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- {
- MonRestorePP(mon);
- CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box));
- return 1;
- }
- }
-
- i++;
- if (i == 14)
- i = 0;
- } while (i != gPokemonStorage.currentBox);
-
- return 2;
-}
-
-u8 CalculatePlayerPartyCount(void)
-{
- gPlayerPartyCount = 0;
-
- while (gPlayerPartyCount < 6
- && GetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- {
- gPlayerPartyCount++;
- }
-
- return gPlayerPartyCount;
-}
-
-u8 CalculateEnemyPartyCount(void)
-{
- gEnemyPartyCount = 0;
-
- while (gEnemyPartyCount < 6
- && GetMonData(&gEnemyParty[gEnemyPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- {
- gEnemyPartyCount++;
- }
-
- return gEnemyPartyCount;
-}
-
-u8 sub_803DAA0(void)
-{
- s32 aliveCount = 0;
- s32 i;
- CalculatePlayerPartyCount();
-
- if (gPlayerPartyCount == 1)
- return gPlayerPartyCount;
-
- for (i = 0; i < gPlayerPartyCount; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0
- && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE
- && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG)
- aliveCount++;
- }
-
- return (aliveCount > 1) ? 0 : 2;
-}
-
-u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
-{
- if (altAbility)
- gLastUsedAbility = gBaseStats[species].ability2;
- else
- gLastUsedAbility = gBaseStats[species].ability1;
-
- return gLastUsedAbility;
-}
-
-u8 GetMonAbility(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
- return GetAbilityBySpecies(species, altAbility);
-}
-
-void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
-{
- s32 i, j;
-
- ZeroEnemyPartyMons();
- *eSecretBaseRecord = *secretBaseRecord;
-
- for (i = 0; i < 6; i++)
- {
- if (eSecretBaseRecord->partySpecies[i])
- {
- CreateMon(&gEnemyParty[i],
- eSecretBaseRecord->partySpecies[i],
- eSecretBaseRecord->partyLevels[i],
- 15,
- 1,
- eSecretBaseRecord->partyPersonality[i],
- 2,
- 0);
-
- // these two SetMonData calls require the (u8 *) cast since SetMonData is declared in this function.
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->partyHeldItems[i]);
-
- for (j = 0; j < 6; j++)
- SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->partyEVs[i]);
-
- for (j = 0; j < 4; j++)
- {
- SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->partyMoves[i * 4 + j]);
- SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->partyMoves[i * 4 + j]].pp);
- }
- }
- }
-
- gBattleTypeFlags = 8;
- gTrainerBattleOpponent = 1024;
-}
-
-const u8 gSecretBaseTrainerClasses[][5] = {
- // male
- {FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_CAMPER, FACILITY_CLASS_COOL_TRAINER_M},
- // female
- {FACILITY_CLASS_LASS, FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_LADY, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_COOL_TRAINER_F}
-};
-
-u8 GetSecretBaseTrainerPicIndex(void)
-{
- u8 trainerClass = gSecretBaseTrainerClasses[eSecretBaseRecord->gender][eSecretBaseRecord->trainerId[0] % 5];
- return gTrainerClassToPicIndex[trainerClass];
-}
-
-u8 GetSecretBaseTrainerNameIndex(void)
-{
- u8 trainerClass = gSecretBaseTrainerClasses[eSecretBaseRecord->gender][eSecretBaseRecord->trainerId[0] % 5];
- return gTrainerClassToNameIndex[trainerClass];
-}
-
-u8 PlayerPartyAndPokemonStorageFull(void)
-{
- s32 i;
-
- for (i = 0; i < 6; i++)
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- return 0;
-
- return PokemonStorageFull();
-}
-
-u8 PokemonStorageFull(void)
-{
- s32 i, j;
-
- for (i = 0; i < 14; i++)
- for (j = 0; j < 30; j++)
- if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- return 0;
-
- return 1;
-}
-
-void GetSpeciesName(u8 *name, u16 species)
-{
- s32 i;
-
- for (i = 0; i <= POKEMON_NAME_LENGTH; i++)
- {
- if (species > NUM_SPECIES)
- name[i] = gSpeciesNames[0][i];
- else
- name[i] = gSpeciesNames[species][i];
-
- if (name[i] == EOS)
- break;
- }
-
- name[i] = EOS;
-}
-
-u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex)
-{
- u8 basePP = gBattleMoves[move].pp;
- return basePP + ((basePP * 20 * ((gUnknown_08208238[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100);
-}
-
-void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex)
-{
- u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
- ppBonuses &= gUnknown_0820823C[moveIndex];
- SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
-{
- mon->ppBonuses &= gUnknown_0820823C[moveIndex];
-}
-
-void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex)
-{
- s32 i;
- s8 nickname[POKEMON_NAME_LENGTH * 2];
-
- gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
- gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);
-
- for (i = 0; i < 4; i++)
- {
- gBattleMons[battleIndex].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL);
- gBattleMons[battleIndex].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL);
- }
-
- gBattleMons[battleIndex].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL);
- gBattleMons[battleIndex].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL);
- gBattleMons[battleIndex].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL);
- gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
- gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
- gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
- gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL);
- gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
- gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
- gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
- gBattleMons[battleIndex].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL);
- gBattleMons[battleIndex].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL);
- gBattleMons[battleIndex].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL);
- gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
- gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
- gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
- gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL);
- gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
- gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
- gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
- gBattleMons[battleIndex].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL);
- gBattleMons[battleIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
- gBattleMons[battleIndex].type1 = gBaseStats[gBattleMons[battleIndex].species].type1;
- gBattleMons[battleIndex].type2 = gBaseStats[gBattleMons[battleIndex].species].type2;
- gBattleMons[battleIndex].ability = GetAbilityBySpecies(gBattleMons[battleIndex].species, gBattleMons[battleIndex].altAbility);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
- StringCopy10(gBattleMons[battleIndex].nickname, nickname);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName);
- ewram160BC[GetBankSide(battleIndex)] = gBattleMons[battleIndex].hp;
-
- for (i = 0; i < 8; i++)
- gBattleMons[battleIndex].statStages[i] = 6;
-
- gBattleMons[battleIndex].status2 = 0;
- sub_80157C4(battleIndex);
- sub_8032AA8(battleIndex, 0);
-}
diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c
deleted file mode 100644
index 9346031a6..000000000
--- a/src/pokemon/pokemon_3.c
+++ /dev/null
@@ -1,1401 +0,0 @@
-#include "global.h"
-#include "constants/hold_effects.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "battle.h"
-#include "battle_message.h"
-#include "data2.h"
-#include "event_data.h"
-#include "item.h"
-#include "link.h"
-#include "m4a.h"
-#include "main.h"
-#include "pokemon.h"
-#include "random.h"
-#include "overworld.h"
-#include "rom_8077ABC.h"
-#include "rom_8094928.h"
-#include "rtc.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "text.h"
-#include "util.h"
-#include "ewram.h"
-
-extern u8 gPlayerPartyCount;
-extern u8 gEnemyPartyCount;
-extern struct BattlePokemon gBattleMons[4];
-extern u8 gActiveBank;
-extern struct BattleEnigmaBerry gEnigmaBerries[];
-extern u16 gSpeciesToHoennPokedexNum[];
-extern u16 gSpeciesToNationalPokedexNum[];
-extern u16 gHoennToNationalOrder[];
-extern u16 gSpeciesIdToCryId[];
-extern u8 gBattleTextBuff1[];
-extern u8 gBattleTextBuff2[];
-extern u8 gDisplayedStringBattle[];
-extern u8 gBankAttacker;
-extern u8 gBankTarget;
-extern u8 gStringBank;
-extern u8 gBankInMenu;
-extern struct SpindaSpot gSpindaSpotGraphics[];
-extern s8 gNatureStatTable[][5];
-extern u16 gTrainerBattleOpponent;
-extern u16 gBattleTypeFlags;
-extern u32 gTMHMLearnsets[][2];
-extern u8 gBattleMonForms[];
-extern const u8 BattleText_Wally[];
-extern s8 gPokeblockFlavorCompatibilityTable[];
-extern u8 gLastUsedAbility;
-extern const u8 BattleText_PreventedSwitch[];
-extern u16 gBattlePartyID[];
-
-extern u8 BattleText_Rose[];
-extern u8 BattleText_UnknownString3[];
-extern u8 BattleText_MistShroud[];
-extern u8 BattleText_GetPumped[];
-extern u8 *gUnknown_08400F58[];
-
-bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId)
-{
- u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
-
- if (status & healMask)
- {
- status &= ~healMask;
- SetMonData(mon, MON_DATA_STATUS, &status);
- if (gMain.inBattle && battleId != 4)
- gBattleMons[battleId].status1 &= ~healMask;
- return FALSE;
- }
- else
- {
- return TRUE;
- }
-}
-
-u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
-{
- const u8 *temp;
- const u8 *itemEffect;
- u8 offset;
- int i;
- u8 j;
- u8 val;
-
- offset = 6;
-
- temp = gItemEffectTable[itemId - 13];
-
- if (!temp && itemId != ITEM_ENIGMA_BERRY)
- return 0;
-
- if (itemId == ITEM_ENIGMA_BERRY)
- {
- temp = gEnigmaBerries[gActiveBank].itemEffect;
- }
-
- itemEffect = temp;
-
- for (i = 0; i < 6; i++)
- {
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- if (i == effectByte)
- return 0;
- break;
- case 4:
- val = itemEffect[4];
- if (val & 0x20)
- val &= 0xDF;
- j = 0;
- while (val)
- {
- if (val & 1)
- {
- switch (j)
- {
- case 2:
- if (val & 0x10)
- val &= 0xEF;
- case 0:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 1:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 3:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 7:
- if (i == effectByte)
- return 0;
- break;
- }
- }
- j++;
- val >>= 1;
- if (i == effectByte)
- effectBit >>= 1;
- }
- break;
- case 5:
- val = itemEffect[5];
- j = 0;
- while (val)
- {
- if (val & 1)
- {
- switch (j)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 7:
- if (i == effectByte)
- return 0;
- break;
- }
- }
- j++;
- val >>= 1;
- if (i == effectByte)
- effectBit >>= 1;
- }
- break;
- }
- }
-
- return offset;
-}
-
-const u8 gUnknown_082082F8[] = {1, 1, 3, 2, 4, 6};
-
-void sub_803F324(int stat)
-{
- gBankTarget = gBankInMenu;
- StringCopy(gBattleTextBuff1, gUnknown_08400F58[gUnknown_082082F8[stat]]);
- StringCopy(gBattleTextBuff2, BattleText_Rose);
- StrCpyDecodeToDisplayedStringBattle(BattleText_UnknownString3);
-}
-
-u8 *sub_803F378(u16 itemId)
-{
- int i;
- const u8 *itemEffect;
-
- if (itemId == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- {
- itemEffect = gEnigmaBerries[gBankInMenu].itemEffect;
- }
- else
- {
- itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
- }
- }
- else
- {
- itemEffect = gItemEffectTable[itemId - 13];
- }
-
- gStringBank = gBankInMenu;
-
- for (i = 0; i < 3; i++)
- {
- if (itemEffect[i] & 0xF)
- sub_803F324(i * 2);
- if (itemEffect[i] & 0xF0)
- {
- if (i)
- {
- sub_803F324(i * 2 + 1);
- }
- else
- {
- gBankAttacker = gBankInMenu;
- StrCpyDecodeToDisplayedStringBattle(BattleText_GetPumped);
- }
- }
- }
-
- if (itemEffect[3] & 0x80)
- {
- gBankAttacker = gBankInMenu;
- StrCpyDecodeToDisplayedStringBattle(BattleText_MistShroud);
- }
-
- return gDisplayedStringBattle;
-}
-
-u8 GetNature(struct Pokemon *mon)
-{
- return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25;
-}
-
-u8 GetNatureFromPersonality(u32 personality)
-{
- return personality % 25;
-}
-
-u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
-{
- int i;
- u16 targetSpecies = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- u8 level;
- u16 friendship;
- u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0);
- u16 upperPersonality = personality >> 16;
- u8 holdEffect;
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(heldItem);
-
- if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
- return 0;
-
- switch (type)
- {
- case 0:
- level = GetMonData(mon, MON_DATA_LEVEL, 0);
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
-
- for (i = 0; i < 5; i++)
- {
- switch (gEvolutionTable[species][i].method)
- {
- case EVO_FRIENDSHIP:
- if (friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_FRIENDSHIP_DAY:
- RtcCalcLocalTime();
- if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_FRIENDSHIP_NIGHT:
- RtcCalcLocalTime();
- if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL:
- if (gEvolutionTable[species][i].param <= level)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_GT_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_EQ_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_LT_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_SILCOON:
- if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) <= 4)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_CASCOON:
- if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) > 4)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_NINJASK:
- if (gEvolutionTable[species][i].param <= level)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_BEAUTY:
- if (gEvolutionTable[species][i].param <= beauty)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- }
- }
- break;
- case 1:
- for (i = 0; i < 5; i++)
- {
- switch (gEvolutionTable[species][i].method)
- {
- case EVO_TRADE:
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_TRADE_ITEM:
- if (gEvolutionTable[species][i].param == heldItem)
- {
- heldItem = 0;
- SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem);
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- }
- break;
- }
- }
- break;
- case 2:
- case 3:
- for (i = 0; i < 5; i++)
- {
- if (gEvolutionTable[species][i].method == EVO_ITEM
- && gEvolutionTable[species][i].param == evolutionItem)
- {
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- }
- }
- break;
- }
-
- return targetSpecies;
-}
-
-u16 HoennPokedexNumToSpecies(u16 hoennNum)
-{
- u16 species;
-
- if (!hoennNum)
- return 0;
-
- species = 0;
-
- while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
- species++;
-
- if (species == 411)
- return 0;
-
- return species + 1;
-}
-
-u16 NationalPokedexNumToSpecies(u16 nationalNum)
-{
- u16 species;
-
- if (!nationalNum)
- return 0;
-
- species = 0;
-
- while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
- species++;
-
- if (species == 411)
- return 0;
-
- return species + 1;
-}
-
-u16 NationalToHoennOrder(u16 nationalNum)
-{
- u16 hoennNum;
-
- if (!nationalNum)
- return 0;
-
- hoennNum = 0;
-
- while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
- hoennNum++;
-
- if (hoennNum == 411)
- return 0;
-
- return hoennNum + 1;
-}
-
-u16 SpeciesToNationalPokedexNum(u16 species)
-{
- if (!species)
- return 0;
-
- return gSpeciesToNationalPokedexNum[species - 1];
-}
-
-u16 SpeciesToHoennPokedexNum(u16 species)
-{
- if (!species)
- return 0;
-
- return gSpeciesToHoennPokedexNum[species - 1];
-}
-
-u16 HoennToNationalOrder(u16 hoennNum)
-{
- if (!hoennNum)
- return 0;
-
- return gHoennToNationalOrder[hoennNum - 1];
-}
-
-u16 SpeciesToCryId(u16 species)
-{
- if (species <= 250)
- return species;
-
- if (species < 276)
- return 200;
-
- return gSpeciesIdToCryId[species - 276];
-}
-
-void unref_sub_803F938(u16 species, u32 personality, u8 *dest)
-{
- if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2])
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
-}
-
-void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
-{
- if (species == SPECIES_SPINDA && a4)
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
-}
-
-void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
-{
-#ifdef BUGFIX_EVO_NAME
- u8 language;
- GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
- language = GetMonData(mon, MON_DATA_LANGUAGE, &language);
- if (language == GAME_LANGUAGE && !StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1))
- SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
-#else
- GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
- if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1))
- SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
-#endif
-}
-
-bool8 sub_803FBBC(void)
-{
- bool8 retVal = FALSE;
- switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
- {
- case 0:
- case 3:
- retVal = FALSE;
- break;
- case 1:
- case 2:
- retVal = TRUE;
- break;
- }
- return retVal;
-}
-
-bool8 sub_803FBFC(u8 id)
-{
- bool8 retVal = FALSE;
- switch (gLinkPlayers[id].lp_field_18)
- {
- case 0:
- case 3:
- retVal = FALSE;
- break;
- case 1:
- case 2:
- retVal = TRUE;
- break;
- }
- return retVal;
-}
-
-s32 sub_803FC34(u16 a1)
-{
- s32 id;
- for (id = 0; id < MAX_LINK_PLAYERS; id++)
- if (gLinkPlayers[id].lp_field_18 == a1)
- break;
- return id;
-}
-
-u8 sub_803FC58(u16 trainer)
-{
- return gTrainers[trainer].encounterMusic_gender & 0x7F;
-}
-
-u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex)
-{
- if (statIndex < 1 || statIndex > 5)
- {
- // should just be "return n", but it wouldn't match without this
- u16 retVal = n;
- retVal++;
- retVal--;
- return retVal;
- }
-
- switch (gNatureStatTable[nature][statIndex - 1])
- {
- case 1:
- return (u16)(n * 110) / 100;
- case -1:
- return (u16)(n * 90) / 100;
- }
-
- return n;
-}
-
-const s8 gUnknown_082082FE[][3] =
-{
- // Happiness deltas
- { 5, 3, 2},
- { 5, 3, 2},
- { 1, 1, 0},
- { 3, 2, 1},
- { 1, 1, 0},
- { 1, 1, 1},
- {-1, -1, -1},
- {-5, -5, -10},
- {-5, -5, -10}
-};
-
-void AdjustFriendship(struct Pokemon *mon, u8 event)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- u8 holdEffect;
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[0].holdEffect;
- else
- holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
- }
-
- if (species && species != SPECIES_EGG)
- {
- u8 friendshipLevel = 0;
- s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
- if (friendship > 99)
- friendshipLevel++;
- if (friendship > 199)
- friendshipLevel++;
- if ((event != 5 || !(Random() & 1))
- && (event != 3
- || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && (gTrainers[gTrainerBattleOpponent].trainerClass == 24
- || gTrainers[gTrainerBattleOpponent].trainerClass == 25
- || gTrainers[gTrainerBattleOpponent].trainerClass == 32))))
- {
- s8 mod = gUnknown_082082FE[event][friendshipLevel];
- if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- mod = (150 * mod) / 100;
- friendship += mod;
- if (mod > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
- }
- }
-}
-
-void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
-{
- u8 evs[NUM_STATS];
- u16 evIncrease = 0;
- u16 totalEVs = 0;
- u16 heldItem;
- u8 holdEffect;
- int i;
-
- for (i = 0; i < NUM_STATS; i++)
- {
- evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0);
- totalEVs += evs[i];
- }
-
- for (i = 0; i < NUM_STATS; i++)
- {
- u8 hasHadPokerus;
- int multiplier;
-
- if (totalEVs >= MAX_TOTAL_EVS)
- break;
-
- hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
-
- if (hasHadPokerus)
- multiplier = 2;
- else
- multiplier = 1;
-
- switch (i)
- {
- case 0:
- evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
- break;
- case 1:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
- break;
- case 2:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
- break;
- case 3:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
- break;
- case 4:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
- break;
- case 5:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
- break;
- }
-
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[0].holdEffect;
- else
- holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
- }
-
- if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- evIncrease *= 2;
-
- if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
- evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
-
- if (evs[i] + (s16)evIncrease > 255)
- {
- int val1 = (s16)evIncrease + 255;
- int val2 = evs[i] + evIncrease;
- evIncrease = val1 - val2;
- }
-
- evs[i] += evIncrease;
- totalEVs += evIncrease;
- SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]);
- }
-}
-
-u16 GetMonEVCount(struct Pokemon *mon)
-{
- int i;
- u16 count = 0;
-
- for (i = 0; i < NUM_STATS; i++)
- count += GetMonData(mon, MON_DATA_HP_EV + i, 0);
-
- return count;
-}
-
-void RandomlyGivePartyPokerus(struct Pokemon *party)
-{
- u16 rnd = Random();
- if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000)
- {
- struct Pokemon *mon;
-
- do
- {
- do
- {
- rnd = Random() % PARTY_SIZE;
- mon = &party[rnd];
- }
- while (!GetMonData(mon, MON_DATA_SPECIES, 0));
- }
- while (GetMonData(mon, MON_DATA_IS_EGG, 0));
-
- if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd])))
- {
- u8 rnd2;
-
- do
- {
- rnd2 = Random();
- }
- while (rnd2 == 0);
-
- if (rnd2 & 0xF0)
- rnd2 &= 0x07;
-
- rnd2 |= (rnd2 << 4);
- rnd2 &= 0xF3;
- rnd2++;
-
- SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2);
- }
- }
-}
-
-u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
-{
- u8 retVal;
-
- int partyIndex = 0;
- unsigned curBit = 1;
- retVal = 0;
-
- if (selection)
- {
- do
- {
- if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF))
- retVal |= curBit;
- partyIndex++;
- curBit <<= 1;
- selection >>= 1;
- }
- while (selection);
- }
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF)
- {
- retVal = 1;
- }
-
- return retVal;
-}
-
-u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
-{
- u8 retVal;
-
- int partyIndex = 0;
- unsigned curBit = 1;
- retVal = 0;
-
- if (selection)
- {
- do
- {
- if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0))
- retVal |= curBit;
- partyIndex++;
- curBit <<= 1;
- selection >>= 1;
- }
- while (selection);
- }
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0))
- {
- retVal = 1;
- }
-
- return retVal;
-}
-
-void UpdatePartyPokerusTime(u16 days)
-{
- int i;
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0))
- {
- u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0);
- if (pokerus & 0xF)
- {
- if ((pokerus & 0xF) < days || days > 4)
- pokerus &= 0xF0;
- else
- pokerus -= days;
-
- SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus);
- }
- }
- }
-}
-
-void PartySpreadPokerus(struct Pokemon *party)
-{
- if ((Random() % 3) == 0)
- {
- int i;
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&party[i], MON_DATA_SPECIES, 0))
- {
- u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0);
- u8 curPokerus = pokerus;
- if (pokerus)
- {
- if (pokerus & 0xF)
- {
- // spread to adjacent party members
- if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
- SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
- if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
- {
- SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus);
- i++;
- }
- }
- }
- }
- }
- }
-}
-
-bool8 TryIncrementMonLevel(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1;
- if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel])
- {
- SetMonData(mon, MON_DATA_LEVEL, &nextLevel);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- if (species == SPECIES_EGG)
- {
- return 0;
- }
- else if (tm < 32)
- {
- u32 mask = 1 << tm;
- return gTMHMLearnsets[species][0] & mask;
- }
- else
- {
- u32 mask = 1 << (tm - 32);
- return gTMHMLearnsets[species][1] & mask;
- }
-}
-
-u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
-{
- u16 learnedMoves[4];
- u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
- int i, j, k;
-
- for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
-
- for (i = 0; i < 20; i++)
- {
- u16 moveLevel;
-
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
- break;
-
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
-
- if (moveLevel <= (level << 9))
- {
- for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
- ;
-
- if (j == 4)
- {
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
- ;
-
- if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
- }
- }
- }
-
- return numMoves;
-}
-
-u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
-{
- u8 numMoves = 0;
- int i;
-
- for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
-
- return numMoves;
-}
-
-u8 sub_8040574(struct Pokemon *mon)
-{
- u16 learnedMoves[4];
- u16 moves[20];
- u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
- int i, j, k;
-
- if (species == SPECIES_EGG)
- return 0;
-
- for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
-
- for (i = 0; i < 20; i++)
- {
- u16 moveLevel;
-
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
- break;
-
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
-
- if (moveLevel <= (level << 9))
- {
- for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
- ;
-
- if (j == 4)
- {
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
- ;
-
- if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
- }
- }
- }
-
- return numMoves;
-}
-
-u16 SpeciesToPokedexNum(u16 species)
-{
- if (IsNationalPokedexEnabled())
- {
- return SpeciesToNationalPokedexNum(species);
- }
- else
- {
- species = SpeciesToHoennPokedexNum(species);
- if (species <= 202)
- return species;
- return 0xFFFF;
- }
-}
-
-void ClearBattleMonForms(void)
-{
- int i;
- for (i = 0; i < 4; i++)
- gBattleMonForms[i] = 0;
-}
-
-u16 GetBGM_ForBattle(void)
-{
- if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
- return BGM_BATTLE34;
- if (gBattleTypeFlags & BATTLE_TYPE_REGI)
- return BGM_BATTLE36;
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- return BGM_BATTLE20;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- {
- switch (gTrainers[gTrainerBattleOpponent].trainerClass)
- {
- case 2:
- case 0x31:
- return BGM_BATTLE30;
- case 3:
- case 4:
- case 0x32:
- case 0x33:
- return BGM_BATTLE31;
- case 0x19:
- return BGM_BATTLE32;
- case 0x20:
- return BGM_BATTLE33;
- case 0x2E:
- if (!StringCompare(gTrainers[gTrainerBattleOpponent].trainerName, BattleText_Wally))
- return BGM_BATTLE20;
- return BGM_BATTLE35;
- case 0x18:
- return BGM_BATTLE38;
- default:
- return BGM_BATTLE20;
- }
- }
- return BGM_BATTLE27;
-}
-
-void sub_80408BC(void)
-{
- ResetMapMusic();
- m4aMPlayAllStop();
- PlayBGM(GetBGM_ForBattle());
-}
-
-void current_map_music_set__default_for_battle(u16 song)
-{
- ResetMapMusic();
- m4aMPlayAllStop();
- if (song)
- PlayNewMapMusic(song);
- else
- PlayNewMapMusic(GetBGM_ForBattle());
-}
-
-const u8 *GetMonSpritePal(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return GetMonSpritePalFromOtIdPersonality(species, otId, personality);
-}
-
-//Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-//Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
-const u8 *GetMonSpritePalFromOtIdPersonality(u16 species, u32 otId, u32 personality)
-{
- u32 shinyValue;
-
- if (species > SPECIES_EGG)
- return gMonPaletteTable[0].data;
-
- shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- return gMonShinyPaletteTable[species].data;
- else
- return gMonPaletteTable[species].data;
-}
-
-const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
-}
-
-const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
-{
- u32 shinyValue;
-
- shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- return &gMonShinyPaletteTable[species];
- else
- return &gMonPaletteTable[species];
-}
-
-const u16 gHMMoves[] =
-{
- MOVE_CUT,
- MOVE_FLY,
- MOVE_SURF,
- MOVE_STRENGTH,
- MOVE_FLASH,
- MOVE_ROCK_SMASH,
- MOVE_WATERFALL,
- MOVE_DIVE,
- 0xffff
-};
-
-bool32 IsHMMove2(u16 move)
-{
- int i = 0;
- while (gHMMoves[i] != 0xFFFF)
- {
- if (gHMMoves[i++] == move)
- return TRUE;
- }
- return FALSE;
-}
-
-bool8 IsPokeSpriteNotFlipped(u16 species)
-{
- return gBaseStats[species].noFlip;
-}
-
-s8 sub_8040A54(struct Pokemon *mon, u8 a2)
-{
- u8 nature = GetNature(mon);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
-}
-
-s8 GetPokeFlavourRelation(u32 personality, u8 a2)
-{
- u8 nature = GetNatureFromPersonality(personality);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
-}
-
-bool8 IsTradedMon(struct Pokemon *mon)
-{
- u8 otName[8];
- u32 otId;
- GetMonData(mon, MON_DATA_OT_NAME, otName);
- otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- return IsOtherTrainer(otId, otName);
-}
-
-bool8 IsOtherTrainer(u32 otId, u8 *otName)
-{
- if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24)))
- {
- int i;
-
- for (i = 0; otName[i] != EOS; i++)
- if (otName[i] != gSaveBlock2.playerName[i])
- return TRUE;
- return FALSE;
- }
-
- return TRUE;
-}
-
-void BoxMonRestorePP(struct BoxPokemon *);
-
-void MonRestorePP(struct Pokemon *mon)
-{
- BoxMonRestorePP(&mon->box);
-}
-
-void BoxMonRestorePP(struct BoxPokemon *boxMon)
-{
- int i;
-
- for (i = 0; i < 4; i++)
- {
- if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0))
- {
- u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0);
- u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0);
- u8 pp = CalculatePPWithBonus(move, bonus, i);
- SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp);
- }
- }
-}
-
-void sub_8040B8C(void)
-{
- gLastUsedAbility = gBattleStruct->unk160C0;;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = gBattleStruct->unk16054;
- gBattleTextBuff1[4] = EOS;
- if (!GetBankSide(gBattleStruct->unk16054))
- gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[gBattleStruct->unk16054]);
- else
- gBattleTextBuff1[3] = gBattlePartyID[gBattleStruct->unk16054];
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 4;
- gBattleTextBuff2[2] = gBankInMenu;
- gBattleTextBuff2[3] = pokemon_order_func(gBattlePartyID[gBankInMenu]);
- gBattleTextBuff2[4] = EOS;
- StrCpyDecodeBattle(BattleText_PreventedSwitch, gStringVar4);
-}
-
-void SetWildMonHeldItem(void)
-{
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER)))
- {
- u16 rnd = Random() % 100;
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
- if (gBaseStats[species].item1 == gBaseStats[species].item2)
- {
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
- return;
- }
-
- if (rnd > 44)
- {
- if (rnd <= 94)
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
- else
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2);
- }
- }
-}
-
-bool8 IsShinyOtIdPersonality(u32, u32);
-
-bool8 IsShiny(struct Pokemon *mon)
-{
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return IsShinyOtIdPersonality(otId, personality);
-}
-
-bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
-{
- bool8 retVal = FALSE;
- u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- retVal = TRUE;
- return retVal;
-}
-
-u8 *sub_8040D08(void)
-{
- u8 id = GetMultiplayerId();
- return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name;
-}
-
-const u8 gJapaneseNidoranNames[][11] = {_("ニドラン♂"), _("ニドラン♀")};
-
-bool32 ShouldHideGenderIconForLanguage(u16 species, u8 *name, u8 language)
-{
- bool32 retVal = FALSE;
- if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F)
- {
- const u8 *speciesName;
- if (language == GAME_LANGUAGE)
- {
- speciesName = gSpeciesNames[species];
- }
- else
- {
- if (species == SPECIES_NIDORAN_M)
- speciesName = gJapaneseNidoranNames[0];
- else
- speciesName = gJapaneseNidoranNames[1];
- }
- if (!StringCompareWithoutExtCtrlCodes(name, speciesName))
- retVal = TRUE;
- else
- retVal = FALSE;
- }
- return retVal;
-}
-
-bool32 ShouldHideGenderIcon(u16 species, u8 *name)
-{
- u8 language = GAME_LANGUAGE;
- if (name[0] == 0xFC && name[1] == 21)
- language = LANGUAGE_JAPANESE;
- return ShouldHideGenderIconForLanguage(species, name, language);
-}
-
-bool32 unref_sub_8040DAC(struct Pokemon *mon)
-{
- u8 name[12];
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0);
- GetMonData(mon, MON_DATA_NICKNAME, name);
- return ShouldHideGenderIconForLanguage(species, name, language);
-}
diff --git a/src/pokemon/pokemon_icon.c b/src/pokemon/pokemon_icon.c
deleted file mode 100644
index b1b462761..000000000
--- a/src/pokemon/pokemon_icon.c
+++ /dev/null
@@ -1,1276 +0,0 @@
-#include "global.h"
-#include "graphics.h"
-#include "mail_data.h"
-#include "constants/species.h"
-#include "sprite.h"
-
-#define POKE_ICON_BASE_PAL_TAG 56000
-
-struct MonIconSpriteTemplate
-{
- const struct OamData *oam;
- const u8 *image;
- const union AnimCmd *const *anims;
- const union AffineAnimCmd *const *affineAnims;
- void (*callback)(struct Sprite *);
- u16 paletteTag;
-};
-
-const u8 * const gMonIconTable[] =
-{
- gMonIcon_Bulbasaur,
- gMonIcon_Bulbasaur,
- gMonIcon_Ivysaur,
- gMonIcon_Venusaur,
- gMonIcon_Charmander,
- gMonIcon_Charmeleon,
- gMonIcon_Charizard,
- gMonIcon_Squirtle,
- gMonIcon_Wartortle,
- gMonIcon_Blastoise,
- gMonIcon_Caterpie,
- gMonIcon_Metapod,
- gMonIcon_Butterfree,
- gMonIcon_Weedle,
- gMonIcon_Kakuna,
- gMonIcon_Beedrill,
- gMonIcon_Pidgey,
- gMonIcon_Pidgeotto,
- gMonIcon_Pidgeot,
- gMonIcon_Rattata,
- gMonIcon_Raticate,
- gMonIcon_Spearow,
- gMonIcon_Fearow,
- gMonIcon_Ekans,
- gMonIcon_Arbok,
- gMonIcon_Pikachu,
- gMonIcon_Raichu,
- gMonIcon_Sandshrew,
- gMonIcon_Sandslash,
- gMonIcon_NidoranF,
- gMonIcon_Nidorina,
- gMonIcon_Nidoqueen,
- gMonIcon_NidoranM,
- gMonIcon_Nidorino,
- gMonIcon_Nidoking,
- gMonIcon_Clefairy,
- gMonIcon_Clefable,
- gMonIcon_Vulpix,
- gMonIcon_Ninetales,
- gMonIcon_Jigglypuff,
- gMonIcon_Wigglytuff,
- gMonIcon_Zubat,
- gMonIcon_Golbat,
- gMonIcon_Oddish,
- gMonIcon_Gloom,
- gMonIcon_Vileplume,
- gMonIcon_Paras,
- gMonIcon_Parasect,
- gMonIcon_Venonat,
- gMonIcon_Venomoth,
- gMonIcon_Diglett,
- gMonIcon_Dugtrio,
- gMonIcon_Meowth,
- gMonIcon_Persian,
- gMonIcon_Psyduck,
- gMonIcon_Golduck,
- gMonIcon_Mankey,
- gMonIcon_Primeape,
- gMonIcon_Growlithe,
- gMonIcon_Arcanine,
- gMonIcon_Poliwag,
- gMonIcon_Poliwhirl,
- gMonIcon_Poliwrath,
- gMonIcon_Abra,
- gMonIcon_Kadabra,
- gMonIcon_Alakazam,
- gMonIcon_Machop,
- gMonIcon_Machoke,
- gMonIcon_Machamp,
- gMonIcon_Bellsprout,
- gMonIcon_Weepinbell,
- gMonIcon_Victreebel,
- gMonIcon_Tentacool,
- gMonIcon_Tentacruel,
- gMonIcon_Geodude,
- gMonIcon_Graveler,
- gMonIcon_Golem,
- gMonIcon_Ponyta,
- gMonIcon_Rapidash,
- gMonIcon_Slowpoke,
- gMonIcon_Slowbro,
- gMonIcon_Magnemite,
- gMonIcon_Magneton,
- gMonIcon_Farfetchd,
- gMonIcon_Doduo,
- gMonIcon_Dodrio,
- gMonIcon_Seel,
- gMonIcon_Dewgong,
- gMonIcon_Grimer,
- gMonIcon_Muk,
- gMonIcon_Shellder,
- gMonIcon_Cloyster,
- gMonIcon_Gastly,
- gMonIcon_Haunter,
- gMonIcon_Gengar,
- gMonIcon_Onix,
- gMonIcon_Drowzee,
- gMonIcon_Hypno,
- gMonIcon_Krabby,
- gMonIcon_Kingler,
- gMonIcon_Voltorb,
- gMonIcon_Electrode,
- gMonIcon_Exeggcute,
- gMonIcon_Exeggutor,
- gMonIcon_Cubone,
- gMonIcon_Marowak,
- gMonIcon_Hitmonlee,
- gMonIcon_Hitmonchan,
- gMonIcon_Lickitung,
- gMonIcon_Koffing,
- gMonIcon_Weezing,
- gMonIcon_Rhyhorn,
- gMonIcon_Rhydon,
- gMonIcon_Chansey,
- gMonIcon_Tangela,
- gMonIcon_Kangaskhan,
- gMonIcon_Horsea,
- gMonIcon_Seadra,
- gMonIcon_Goldeen,
- gMonIcon_Seaking,
- gMonIcon_Staryu,
- gMonIcon_Starmie,
- gMonIcon_Mrmime,
- gMonIcon_Scyther,
- gMonIcon_Jynx,
- gMonIcon_Electabuzz,
- gMonIcon_Magmar,
- gMonIcon_Pinsir,
- gMonIcon_Tauros,
- gMonIcon_Magikarp,
- gMonIcon_Gyarados,
- gMonIcon_Lapras,
- gMonIcon_Ditto,
- gMonIcon_Eevee,
- gMonIcon_Vaporeon,
- gMonIcon_Jolteon,
- gMonIcon_Flareon,
- gMonIcon_Porygon,
- gMonIcon_Omanyte,
- gMonIcon_Omastar,
- gMonIcon_Kabuto,
- gMonIcon_Kabutops,
- gMonIcon_Aerodactyl,
- gMonIcon_Snorlax,
- gMonIcon_Articuno,
- gMonIcon_Zapdos,
- gMonIcon_Moltres,
- gMonIcon_Dratini,
- gMonIcon_Dragonair,
- gMonIcon_Dragonite,
- gMonIcon_Mewtwo,
- gMonIcon_Mew,
- gMonIcon_Chikorita,
- gMonIcon_Bayleef,
- gMonIcon_Meganium,
- gMonIcon_Cyndaquil,
- gMonIcon_Quilava,
- gMonIcon_Typhlosion,
- gMonIcon_Totodile,
- gMonIcon_Croconaw,
- gMonIcon_Feraligatr,
- gMonIcon_Sentret,
- gMonIcon_Furret,
- gMonIcon_Hoothoot,
- gMonIcon_Noctowl,
- gMonIcon_Ledyba,
- gMonIcon_Ledian,
- gMonIcon_Spinarak,
- gMonIcon_Ariados,
- gMonIcon_Crobat,
- gMonIcon_Chinchou,
- gMonIcon_Lanturn,
- gMonIcon_Pichu,
- gMonIcon_Cleffa,
- gMonIcon_Igglybuff,
- gMonIcon_Togepi,
- gMonIcon_Togetic,
- gMonIcon_Natu,
- gMonIcon_Xatu,
- gMonIcon_Mareep,
- gMonIcon_Flaaffy,
- gMonIcon_Ampharos,
- gMonIcon_Bellossom,
- gMonIcon_Marill,
- gMonIcon_Azumarill,
- gMonIcon_Sudowoodo,
- gMonIcon_Politoed,
- gMonIcon_Hoppip,
- gMonIcon_Skiploom,
- gMonIcon_Jumpluff,
- gMonIcon_Aipom,
- gMonIcon_Sunkern,
- gMonIcon_Sunflora,
- gMonIcon_Yanma,
- gMonIcon_Wooper,
- gMonIcon_Quagsire,
- gMonIcon_Espeon,
- gMonIcon_Umbreon,
- gMonIcon_Murkrow,
- gMonIcon_Slowking,
- gMonIcon_Misdreavus,
- gMonIcon_UnownA,
- gMonIcon_Wobbuffet,
- gMonIcon_Girafarig,
- gMonIcon_Pineco,
- gMonIcon_Forretress,
- gMonIcon_Dunsparce,
- gMonIcon_Gligar,
- gMonIcon_Steelix,
- gMonIcon_Snubbull,
- gMonIcon_Granbull,
- gMonIcon_Qwilfish,
- gMonIcon_Scizor,
- gMonIcon_Shuckle,
- gMonIcon_Heracross,
- gMonIcon_Sneasel,
- gMonIcon_Teddiursa,
- gMonIcon_Ursaring,
- gMonIcon_Slugma,
- gMonIcon_Magcargo,
- gMonIcon_Swinub,
- gMonIcon_Piloswine,
- gMonIcon_Corsola,
- gMonIcon_Remoraid,
- gMonIcon_Octillery,
- gMonIcon_Delibird,
- gMonIcon_Mantine,
- gMonIcon_Skarmory,
- gMonIcon_Houndour,
- gMonIcon_Houndoom,
- gMonIcon_Kingdra,
- gMonIcon_Phanpy,
- gMonIcon_Donphan,
- gMonIcon_Porygon2,
- gMonIcon_Stantler,
- gMonIcon_Smeargle,
- gMonIcon_Tyrogue,
- gMonIcon_Hitmontop,
- gMonIcon_Smoochum,
- gMonIcon_Elekid,
- gMonIcon_Magby,
- gMonIcon_Miltank,
- gMonIcon_Blissey,
- gMonIcon_Raikou,
- gMonIcon_Entei,
- gMonIcon_Suicune,
- gMonIcon_Larvitar,
- gMonIcon_Pupitar,
- gMonIcon_Tyranitar,
- gMonIcon_Lugia,
- gMonIcon_HoOh,
- gMonIcon_Celebi,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_QuestionMark,
- gMonIcon_Treecko,
- gMonIcon_Grovyle,
- gMonIcon_Sceptile,
- gMonIcon_Torchic,
- gMonIcon_Combusken,
- gMonIcon_Blaziken,
- gMonIcon_Mudkip,
- gMonIcon_Marshtomp,
- gMonIcon_Swampert,
- gMonIcon_Poochyena,
- gMonIcon_Mightyena,
- gMonIcon_Zigzagoon,
- gMonIcon_Linoone,
- gMonIcon_Wurmple,
- gMonIcon_Silcoon,
- gMonIcon_Beautifly,
- gMonIcon_Cascoon,
- gMonIcon_Dustox,
- gMonIcon_Lotad,
- gMonIcon_Lombre,
- gMonIcon_Ludicolo,
- gMonIcon_Seedot,
- gMonIcon_Nuzleaf,
- gMonIcon_Shiftry,
- gMonIcon_Nincada,
- gMonIcon_Ninjask,
- gMonIcon_Shedinja,
- gMonIcon_Taillow,
- gMonIcon_Swellow,
- gMonIcon_Shroomish,
- gMonIcon_Breloom,
- gMonIcon_Spinda,
- gMonIcon_Wingull,
- gMonIcon_Pelipper,
- gMonIcon_Surskit,
- gMonIcon_Masquerain,
- gMonIcon_Wailmer,
- gMonIcon_Wailord,
- gMonIcon_Skitty,
- gMonIcon_Delcatty,
- gMonIcon_Kecleon,
- gMonIcon_Baltoy,
- gMonIcon_Claydol,
- gMonIcon_Nosepass,
- gMonIcon_Torkoal,
- gMonIcon_Sableye,
- gMonIcon_Barboach,
- gMonIcon_Whiscash,
- gMonIcon_Luvdisc,
- gMonIcon_Corphish,
- gMonIcon_Crawdaunt,
- gMonIcon_Feebas,
- gMonIcon_Milotic,
- gMonIcon_Carvanha,
- gMonIcon_Sharpedo,
- gMonIcon_Trapinch,
- gMonIcon_Vibrava,
- gMonIcon_Flygon,
- gMonIcon_Makuhita,
- gMonIcon_Hariyama,
- gMonIcon_Electrike,
- gMonIcon_Manectric,
- gMonIcon_Numel,
- gMonIcon_Camerupt,
- gMonIcon_Spheal,
- gMonIcon_Sealeo,
- gMonIcon_Walrein,
- gMonIcon_Cacnea,
- gMonIcon_Cacturne,
- gMonIcon_Snorunt,
- gMonIcon_Glalie,
- gMonIcon_Lunatone,
- gMonIcon_Solrock,
- gMonIcon_Azurill,
- gMonIcon_Spoink,
- gMonIcon_Grumpig,
- gMonIcon_Plusle,
- gMonIcon_Minun,
- gMonIcon_Mawile,
- gMonIcon_Meditite,
- gMonIcon_Medicham,
- gMonIcon_Swablu,
- gMonIcon_Altaria,
- gMonIcon_Wynaut,
- gMonIcon_Duskull,
- gMonIcon_Dusclops,
- gMonIcon_Roselia,
- gMonIcon_Slakoth,
- gMonIcon_Vigoroth,
- gMonIcon_Slaking,
- gMonIcon_Gulpin,
- gMonIcon_Swalot,
- gMonIcon_Tropius,
- gMonIcon_Whismur,
- gMonIcon_Loudred,
- gMonIcon_Exploud,
- gMonIcon_Clamperl,
- gMonIcon_Huntail,
- gMonIcon_Gorebyss,
- gMonIcon_Absol,
- gMonIcon_Shuppet,
- gMonIcon_Banette,
- gMonIcon_Seviper,
- gMonIcon_Zangoose,
- gMonIcon_Relicanth,
- gMonIcon_Aron,
- gMonIcon_Lairon,
- gMonIcon_Aggron,
- gMonIcon_Castform,
- gMonIcon_Volbeat,
- gMonIcon_Illumise,
- gMonIcon_Lileep,
- gMonIcon_Cradily,
- gMonIcon_Anorith,
- gMonIcon_Armaldo,
- gMonIcon_Ralts,
- gMonIcon_Kirlia,
- gMonIcon_Gardevoir,
- gMonIcon_Bagon,
- gMonIcon_Shelgon,
- gMonIcon_Salamence,
- gMonIcon_Beldum,
- gMonIcon_Metang,
- gMonIcon_Metagross,
- gMonIcon_Regirock,
- gMonIcon_Regice,
- gMonIcon_Registeel,
- gMonIcon_Kyogre,
- gMonIcon_Groudon,
- gMonIcon_Rayquaza,
- gMonIcon_Latias,
- gMonIcon_Latios,
- gMonIcon_Jirachi,
- gMonIcon_Deoxys,
- gMonIcon_Chimecho,
- gMonIcon_Egg,
- gMonIcon_UnownB,
- gMonIcon_UnownC,
- gMonIcon_UnownD,
- gMonIcon_UnownE,
- gMonIcon_UnownF,
- gMonIcon_UnownG,
- gMonIcon_UnownH,
- gMonIcon_UnownI,
- gMonIcon_UnownJ,
- gMonIcon_UnownK,
- gMonIcon_UnownL,
- gMonIcon_UnownM,
- gMonIcon_UnownN,
- gMonIcon_UnownO,
- gMonIcon_UnownP,
- gMonIcon_UnownQ,
- gMonIcon_UnownR,
- gMonIcon_UnownS,
- gMonIcon_UnownT,
- gMonIcon_UnownU,
- gMonIcon_UnownV,
- gMonIcon_UnownW,
- gMonIcon_UnownX,
- gMonIcon_UnownY,
- gMonIcon_UnownZ,
- gMonIcon_UnownExclamationMark,
- gMonIcon_UnownQuestionMark,
-};
-
-const u8 gMonIconPaletteIndices[] =
-{
- 0, // ??????????
- 1, // Bulbasaur
- 1, // Ivysaur
- 1, // Venusaur
- 0, // Charmander
- 0, // Charmeleon
- 0, // Charizard
- 0, // Squirtle
- 2, // Wartortle
- 2, // Blastoise
- 1, // Caterpie
- 1, // Metapod
- 0, // Butterfree
- 1, // Weedle
- 2, // Kakuna
- 2, // Beedrill
- 0, // Pidgey
- 0, // Pidgeotto
- 0, // Pidgeot
- 2, // Rattata
- 1, // Raticate
- 0, // Spearow
- 0, // Fearow
- 2, // Ekans
- 2, // Arbok
- 2, // Pikachu
- 0, // Raichu
- 2, // Sandshrew
- 2, // Sandslash
- 2, // Nidoran♀
- 2, // Nidorina
- 2, // Nidoqueen
- 2, // Nidoran♂
- 2, // Nidorino
- 2, // Nidoking
- 0, // Clefairy
- 0, // Clefable
- 2, // Vulpix
- 1, // Ninetales
- 0, // Jigglypuff
- 0, // Wigglytuff
- 2, // Zubat
- 2, // Golbat
- 1, // Oddish
- 0, // Gloom
- 0, // Vileplume
- 0, // Paras
- 0, // Parasect
- 0, // Venonat
- 2, // Venomoth
- 2, // Diglett
- 2, // Dugtrio
- 1, // Meowth
- 1, // Persian
- 1, // Psyduck
- 2, // Golduck
- 1, // Mankey
- 2, // Primeape
- 0, // Growlithe
- 0, // Arcanine
- 0, // Poliwag
- 0, // Poliwhirl
- 0, // Poliwrath
- 2, // Abra
- 2, // Kadabra
- 2, // Alakazam
- 0, // Machop
- 2, // Machoke
- 0, // Machamp
- 1, // Bellsprout
- 1, // Weepinbell
- 1, // Victreebel
- 2, // Tentacool
- 2, // Tentacruel
- 1, // Geodude
- 1, // Graveler
- 1, // Golem
- 0, // Ponyta
- 0, // Rapidash
- 0, // Slowpoke
- 0, // Slowbro
- 0, // Magnemite
- 0, // Magneton
- 1, // Farfetch'd
- 2, // Doduo
- 2, // Dodrio
- 2, // Seel
- 2, // Dewgong
- 2, // Grimer
- 2, // Muk
- 2, // Shellder
- 2, // Cloyster
- 2, // Gastly
- 2, // Haunter
- 2, // Gengar
- 2, // Onix
- 2, // Drowzee
- 1, // Hypno
- 2, // Krabby
- 2, // Kingler
- 0, // Voltorb
- 0, // Electrode
- 0, // Exeggcute
- 1, // Exeggutor
- 1, // Cubone
- 1, // Marowak
- 2, // Hitmonlee
- 2, // Hitmonchan
- 1, // Lickitung
- 2, // Koffing
- 2, // Weezing
- 1, // Rhyhorn
- 1, // Rhydon
- 0, // Chansey
- 0, // Tangela
- 1, // Kangaskhan
- 0, // Horsea
- 0, // Seadra
- 0, // Goldeen
- 0, // Seaking
- 2, // Staryu
- 2, // Starmie
- 0, // Mr. mime
- 1, // Scyther
- 2, // Jynx
- 1, // Electabuzz
- 0, // Magmar
- 2, // Pinsir
- 2, // Tauros
- 0, // Magikarp
- 0, // Gyarados
- 2, // Lapras
- 2, // Ditto
- 2, // Eevee
- 0, // Vaporeon
- 0, // Jolteon
- 0, // Flareon
- 0, // Porygon
- 0, // Omanyte
- 0, // Omastar
- 2, // Kabuto
- 2, // Kabutops
- 0, // Aerodactyl
- 1, // Snorlax
- 0, // Articuno
- 0, // Zapdos
- 0, // Moltres
- 0, // Dratini
- 0, // Dragonair
- 2, // Dragonite
- 2, // Mewtwo
- 0, // Mew
- 1, // Chikorita
- 1, // Bayleef
- 1, // Meganium
- 1, // Cyndaquil
- 1, // Quilava
- 1, // Typhlosion
- 2, // Totodile
- 2, // Croconaw
- 2, // Feraligatr
- 2, // Sentret
- 2, // Furret
- 2, // Hoothoot
- 2, // Noctowl
- 0, // Ledyba
- 0, // Ledian
- 1, // Spinarak
- 0, // Ariados
- 2, // Crobat
- 2, // Chinchou
- 0, // Lanturn
- 0, // Pichu
- 0, // Cleffa
- 1, // Igglybuff
- 2, // Togepi
- 2, // Togetic
- 0, // Natu
- 0, // Xatu
- 2, // Mareep
- 0, // Flaaffy
- 0, // Ampharos
- 1, // Bellossom
- 2, // Marill
- 2, // Azumarill
- 1, // Sudowoodo
- 1, // Politoed
- 1, // Hoppip
- 1, // Skiploom
- 2, // Jumpluff
- 2, // Aipom
- 1, // Sunkern
- 1, // Sunflora
- 1, // Yanma
- 0, // Wooper
- 0, // Quagsire
- 2, // Espeon
- 2, // Umbreon
- 2, // Murkrow
- 0, // Slowking
- 0, // Misdreavus
- 0, // Unown A
- 0, // Wobbuffet
- 1, // Girafarig
- 0, // Pineco
- 2, // Forretress
- 2, // Dunsparce
- 2, // Gligar
- 0, // Steelix
- 0, // Snubbull
- 2, // Granbull
- 0, // Qwilfish
- 0, // Scizor
- 1, // Shuckle
- 2, // Heracross
- 0, // Sneasel
- 0, // Teddiursa
- 2, // Ursaring
- 0, // Slugma
- 0, // Magcargo
- 2, // Swinub
- 2, // Piloswine
- 0, // Corsola
- 0, // Remoraid
- 0, // Octillery
- 0, // Delibird
- 2, // Mantine
- 0, // Skarmory
- 0, // Houndour
- 0, // Houndoom
- 0, // Kingdra
- 0, // Phanpy
- 0, // Donphan
- 0, // Porygon2
- 2, // Stantler
- 1, // Smeargle
- 2, // Tyrogue
- 2, // Hitmontop
- 1, // Smoochum
- 1, // Elekid
- 1, // Magby
- 1, // Miltank
- 1, // Blissey
- 0, // Raikou
- 2, // Entei
- 0, // Suicune
- 1, // Larvitar
- 0, // Pupitar
- 1, // Tyranitar
- 0, // Lugia
- 1, // Ho-Oh
- 1, // Celebi
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 0, // ?
- 1, // Treecko
- 0, // Grovyle
- 1, // Sceptile
- 0, // Torchic
- 0, // Combusken
- 0, // Blaziken
- 0, // Mudkip
- 0, // Marshtomp
- 0, // Swampert
- 2, // Poochyena
- 2, // Mightyena
- 2, // Zigzagoon
- 2, // Linoone
- 0, // Wurmple
- 2, // Silcoon
- 0, // Beautifly
- 2, // Cascoon
- 1, // Dustox
- 1, // Lotad
- 1, // Lombre
- 1, // Ludicolo
- 1, // Seedot
- 1, // Nuzleaf
- 0, // Shiftry
- 1, // Nincada
- 1, // Ninjask
- 1, // Shedinja
- 2, // Taillow
- 2, // Swellow
- 1, // Shroomish
- 1, // Breloom
- 1, // Spinda
- 0, // Wingull
- 0, // Pelipper
- 2, // Surskit
- 0, // Masquerain
- 2, // Wailmer
- 0, // Wailord
- 0, // Skitty
- 2, // Delcatty
- 1, // Kecleon
- 1, // Baltoy
- 0, // Claydol
- 0, // Nosepass
- 1, // Torkoal
- 2, // Sableye
- 0, // Barboach
- 0, // Whiscash
- 0, // Luvdisc
- 0, // Corphish
- 0, // Crawdaunt
- 2, // Feebas
- 0, // Milotic
- 0, // Carvanha
- 0, // Sharpedo
- 1, // Trapinch
- 1, // Vibrava
- 1, // Flygon
- 2, // Makuhita
- 1, // Hariyama
- 1, // Electrike
- 0, // Manectric
- 1, // Numel
- 0, // Camerupt
- 2, // Spheal
- 2, // Sealeo
- 0, // Walrein
- 1, // Cacnea
- 1, // Cacturne
- 2, // Snorunt
- 0, // Glalie
- 1, // Lunatone
- 0, // Solrock
- 2, // Azurill
- 0, // Spoink
- 2, // Grumpig
- 0, // Plusle
- 0, // Minun
- 2, // Mawile
- 0, // Meditite
- 0, // Medicham
- 0, // Swablu
- 0, // Altaria
- 0, // Wynaut
- 0, // Duskull
- 0, // Dusclops
- 0, // Roselia
- 2, // Slakoth
- 2, // Vigoroth
- 1, // Slaking
- 1, // Gulpin
- 2, // Swalot
- 1, // Tropius
- 0, // Whismur
- 2, // Loudred
- 2, // Exploud
- 0, // Clamperl
- 0, // Huntail
- 0, // Gorebyss
- 0, // Absol
- 0, // Shuppet
- 0, // Banette
- 2, // Seviper
- 0, // Zangoose
- 1, // Relicanth
- 2, // Aron
- 2, // Lairon
- 2, // Aggron
- 0, // Castform
- 0, // Volbeat
- 2, // Illumise
- 2, // Lileep
- 0, // Cradily
- 0, // Anorith
- 0, // Armaldo
- 1, // Ralts
- 1, // Kirlia
- 1, // Gardevoir
- 2, // Bagon
- 2, // Shelgon
- 0, // Salamence
- 0, // Beldum
- 0, // Metang
- 0, // Metagross
- 2, // Regirock
- 2, // Regice
- 2, // Registeel
- 2, // Kyogre
- 0, // Groudon
- 1, // Rayquaza
- 0, // Latias
- 2, // Latios
- 0, // Jirachi
- 0, // Deoxys
- 0, // Chimecho
- 1, // Egg
- 0, // Unown B
- 0, // Unown C
- 0, // Unown D
- 0, // Unown E
- 0, // Unown F
- 0, // Unown G
- 0, // Unown H
- 0, // Unown I
- 0, // Unown J
- 0, // Unown K
- 0, // Unown L
- 0, // Unown M
- 0, // Unown N
- 0, // Unown O
- 0, // Unown P
- 0, // Unown Q
- 0, // Unown R
- 0, // Unown S
- 0, // Unown T
- 0, // Unown U
- 0, // Unown V
- 0, // Unown W
- 0, // Unown X
- 0, // Unown Y
- 0, // Unown Z
- 0, // Unown Exclamation Mark
- 0, // Unown Question Mark
-};
-
-const struct SpritePalette gMonIconPaletteTable[] =
-{
- { gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 },
- { gMonIconPalettes[1], POKE_ICON_BASE_PAL_TAG + 1 },
- { gMonIconPalettes[2], POKE_ICON_BASE_PAL_TAG + 2 },
-
-// There are only 3 actual palettes. The following are unused
-// and don't point to valid data.
- { gMonIconPalettes[3], POKE_ICON_BASE_PAL_TAG + 3 },
- { gMonIconPalettes[4], POKE_ICON_BASE_PAL_TAG + 4 },
- { gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 },
-};
-
-static const struct OamData sMonIconOamData =
-{
- .size = 2,
- .priority = 1,
-};
-
-// fastest to slowest
-
-static const union AnimCmd sAnim_0[] =
-{
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(1, 6),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd sAnim_1[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(1, 8),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd sAnim_2[] =
-{
- ANIMCMD_FRAME(0, 14),
- ANIMCMD_FRAME(1, 14),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd sAnim_3[] =
-{
- ANIMCMD_FRAME(0, 22),
- ANIMCMD_FRAME(1, 22),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd sAnim_4[] =
-{
- ANIMCMD_FRAME(0, 29),
- ANIMCMD_FRAME(0, 29), // frame 0 is repeated
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd *const sMonIconAnims[] =
-{
- sAnim_0,
- sAnim_1,
- sAnim_2,
- sAnim_3,
- sAnim_4,
-};
-
-static const union AffineAnimCmd sAffineAnim_0[] =
-{
- AFFINEANIMCMD_FRAME(0, 0, 0, 10),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd sAffineAnim_1[] =
-{
- AFFINEANIMCMD_FRAME(-2, -2, 0, 122),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sMonIconAffineAnims[] =
-{
- sAffineAnim_0,
- sAffineAnim_1,
-};
-
-const u16 sSpriteImageSizes[3][4] =
-{
- // square
- {
- 0x20, // 1×1
- 0x80, // 2×2
- 0x200, // 4×4
- 0x800, // 8×8
- },
-
- // horizontal rectangle
- {
- 0x40, // 2×1
- 0x80, // 4×1
- 0x100, // 4×2
- 0x400, // 8×4
- },
-
- // vertical rectangle
- {
- 0x40, // 1×2
- 0x80, // 1×4
- 0x100, // 2×4
- 0x400, // 4×8
- },
-};
-
-u16 GetUnownLetterByPersonality(u32);
-const u8 *GetMonIconPtr(u16, u32 personality);
-u8 UpdateMonIconFrame(struct Sprite *);
-u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
-void sub_809D7E8(struct Sprite *);
-
-// duplicate of sub_809D3A4
-u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
-{
- u8 spriteId;
- struct MonIconSpriteTemplate iconTemplate =
- {
- .oam = &sMonIconOamData,
- .image = gMonIconTable[species],
- .anims = sMonIconAnims,
- .affineAnims = sMonIconAffineAnims,
- .callback = callback,
- .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
- };
-
- spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
-
- UpdateMonIconFrame(&gSprites[spriteId]);
-
- return spriteId;
-}
-
-u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality)
-{
- u8 spriteId;
- struct MonIconSpriteTemplate iconTemplate =
- {
- .oam = &sMonIconOamData,
- .image = GetMonIconPtr(species, personality),
- .anims = sMonIconAnims,
- .affineAnims = sMonIconAffineAnims,
- .callback = callback,
- .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
- };
-
- if (species > SPECIES_EGG)
- iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
-
- spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
-
- UpdateMonIconFrame(&gSprites[spriteId]);
-
- return spriteId;
-}
-
-u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
-{
- u8 spriteId;
- struct MonIconSpriteTemplate iconTemplate =
- {
- .oam = &sMonIconOamData,
- .image = gMonIconTable[species],
- .anims = sMonIconAnims,
- .affineAnims = sMonIconAffineAnims,
- .callback = callback,
- .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
- };
-
- spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
-
- UpdateMonIconFrame(&gSprites[spriteId]);
-
- return spriteId;
-}
-
-u16 mon_icon_convert_unown_species_id(u16 species, u32 personality)
-{
- u16 result;
-
- if (species == SPECIES_UNOWN)
- {
- u16 letter = GetUnownLetterByPersonality(personality);
- if (letter == 0)
- letter = SPECIES_UNOWN;
- else
- letter += (SPECIES_UNOWN_B - 1);
- result = letter;
- }
- else
- {
- if (species > SPECIES_EGG)
- result = 260;
- else
- result = species;
- }
-
- return result;
-}
-
-u16 GetUnownLetterByPersonality(u32 personality)
-{
- return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
-}
-
-u16 sub_809D4A8(u16 species)
-{
- u16 value;
-
- if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN)
- {
- if (value == 0)
- value += SPECIES_UNOWN;
- else
- value += (SPECIES_UNOWN_B - 1);
- return value;
- }
- else
- {
- return mon_icon_convert_unown_species_id(species, 0);
- }
-}
-
-const u8 *GetMonIconPtr(u16 species, u32 personality)
-{
- u16 convertedSpecies = mon_icon_convert_unown_species_id(species, personality);
- return gMonIconTable[convertedSpecies];
-}
-
-void sub_809D510(struct Sprite *sprite)
-{
- sub_809D7E8(sprite);
-}
-
-void sub_809D51C(void)
-{
- u8 i;
- for (i = 0; i < 6; i++)
- LoadSpritePalette(&gMonIconPaletteTable[i]);
-}
-
-// unused
-void SafeLoadMonIconPalette(u16 species)
-{
- u8 palIndex;
- if (species > SPECIES_EGG)
- species = 260;
- palIndex = gMonIconPaletteIndices[species];
- if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
- LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
-}
-
-void sub_809D580(u16 species)
-{
- u8 palIndex = gMonIconPaletteIndices[species];
- if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
- LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
-}
-
-// unused
-void FreeMonIconPalettes(void)
-{
- u8 i;
- for (i = 0; i < 6; i++)
- FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag);
-}
-
-// unused
-void SafeFreeMonIconPalette(u16 species)
-{
- u8 palIndex;
- if (species > SPECIES_EGG)
- species = 260;
- palIndex = gMonIconPaletteIndices[species];
- FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
-}
-
-void sub_809D608(u16 species)
-{
- u8 palIndex;
- palIndex = gMonIconPaletteIndices[species];
- FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
-}
-
-void sub_809D62C(struct Sprite *sprite)
-{
- UpdateMonIconFrame(sprite);
-}
-
-// TODO: try to find a way to avoid using asm statement
-u8 UpdateMonIconFrame(struct Sprite *sprite)
-{
- u8 result = 0;
-
- if (sprite->animDelayCounter == 0)
- {
- s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
-
- switch (frame)
- {
- case -1:
- break;
- case -2:
- sprite->animCmdIndex = 0;
- break;
- default:
- RequestSpriteCopy(
- // pointer arithmetic is needed to get the correct pointer to perform the sprite copy on.
- // because sprite->images is a struct def, it has to be casted to (u8 *) before any
- // arithmetic can be performed.
- (u8 *)sprite->images + (sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame),
- OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
- sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
- {
- register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- sprite->animDelayCounter = duration;
- }
- sprite->animCmdIndex++;
- result = sprite->animCmdIndex;
- break;
- }
- }
- else
- {
- sprite->animDelayCounter--;
- }
- return result;
-}
-
-u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority)
-{
- u8 spriteId;
-
- struct SpriteFrameImage image = { NULL, sSpriteImageSizes[iconTemplate->oam->shape][iconTemplate->oam->size] };
-
- struct SpriteTemplate spriteTemplate =
- {
- .tileTag = 0xFFFF,
- .paletteTag = iconTemplate->paletteTag,
- .oam = iconTemplate->oam,
- .anims = iconTemplate->anims,
- .images = &image,
- .affineAnims = iconTemplate->affineAnims,
- .callback = iconTemplate->callback,
- };
-
- spriteId = CreateSprite(&spriteTemplate, x, y, subpriority);
- gSprites[spriteId].animPaused = TRUE;
- gSprites[spriteId].animBeginning = FALSE;
- gSprites[spriteId].images = (const struct SpriteFrameImage *)iconTemplate->image;
- return spriteId;
-}
-
-void sub_809D7E8(struct Sprite *sprite)
-{
- struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] };
- sprite->images = &image;
- DestroySprite(sprite);
-}
-
-void sub_809D824(struct Sprite *sprite, u8 animNum)
-{
- sprite->animNum = animNum;
- sprite->animDelayCounter = 0;
- sprite->animCmdIndex = 0;
-}
diff --git a/src/pokemon/pokemon_item_effect.c b/src/pokemon/pokemon_item_effect.c
deleted file mode 100644
index 4ebece3b3..000000000
--- a/src/pokemon/pokemon_item_effect.c
+++ /dev/null
@@ -1,550 +0,0 @@
-#include "global.h"
-#include "constants/battle_constants.h"
-#include "constants/hold_effects.h"
-#include "constants/items.h"
-#include "constants/species.h"
-#include "battle.h"
-#include "evolution_scene.h"
-#include "ewram.h"
-#include "item.h"
-#include "main.h"
-#include "overworld.h"
-#include "pokemon.h"
-#include "pokemon_item_effect.h"
-#include "rom_8077ABC.h"
-#include "rom_8094928.h"
-#include "util.h"
-
-extern s32 gBattleMoveDamage;
-extern u8 gAbsentBankFlags;
-extern u8 gBankInMenu;
-extern u8 gNoOfAllBanks;
-extern u16 gBattlePartyID[];
-extern u8 gActiveBank;
-extern u8 gStringBank;
-extern struct BattlePokemon gBattleMons[];
-extern struct BattleEnigmaBerry gEnigmaBerries[];
-
-static const u8 sGetMonDataEVConstants[] =
-{
- MON_DATA_HP_EV,
- MON_DATA_ATK_EV,
- MON_DATA_DEF_EV,
- MON_DATA_SPEED_EV,
- MON_DATA_SPDEF_EV,
- MON_DATA_SPATK_EV
-};
-
-extern u8 gUnknown_08208238[];
-extern u8 gUnknown_0820823C[];
-extern u8 gUnknown_08208240[];
-
-bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
-
-bool8 ExecuteTableBasedItemEffect_(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex)
-{
- return PokemonUseItemEffects(pkmn, item, partyIndex, moveIndex, 0);
-}
-
-bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
-{
- u32 data;
- s32 friendship;
- s32 cmdIndex;
- bool8 retVal = TRUE;
- const u8 *itemEffect;
- u8 sp24 = 6;
- u32 sp28;
- s8 sp2C = 0;
- u8 holdEffect;
- u8 sp34 = 4;
- u16 heldItem;
- u8 r10;
- u32 r4;
-
- heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL);
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[gBankInMenu].holdEffect;
- else
- holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
- }
-
- gStringBank = gBankInMenu;
- if (gMain.inBattle)
- {
- gActiveBank = gBankInMenu;
- cmdIndex = (GetBankSide(gActiveBank) != 0);
- while (cmdIndex < gNoOfAllBanks)
- {
- if (gBattlePartyID[cmdIndex] == partyIndex)
- {
- sp34 = cmdIndex;
- break;
- }
- cmdIndex += 2;
- }
- }
- else
- {
- gActiveBank = 0;
- sp34 = 4;
- }
-
- if (!IS_POKEMON_ITEM(item))
- return TRUE;
- if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
- return TRUE;
-
- if (item == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- itemEffect = gEnigmaBerries[gActiveBank].itemEffect;
- else
- itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
- }
- else
- {
- itemEffect = gItemEffectTable[item - 13];
- }
-
- for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
- {
- switch (cmdIndex)
- {
- // status healing effects
- case 0:
- if ((itemEffect[cmdIndex] & 0x80)
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION))
- {
- gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x30)
- && !(gBattleMons[gActiveBank].status2 & STATUS2_FOCUS_ENERGY))
- {
- gBattleMons[gActiveBank].status2 |= STATUS2_FOCUS_ENERGY;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0xF)
- && gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] < 12)
- {
- gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF;
- if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] > 12)
- gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] = 12;
- retVal = FALSE;
- }
- break;
- // in-battle stat boosting effects?
- case 1:
- if ((itemEffect[cmdIndex] & 0xF0)
- && gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] < 12)
- {
- gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4;
- if (gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] > 12)
- gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] = 12;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0xF)
- && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] < 12)
- {
- gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF;
- if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] > 12)
- gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] = 12;
- retVal = FALSE;
- }
- break;
- // more stat boosting effects?
- case 2:
- if ((itemEffect[cmdIndex] & 0xF0)
- && gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] < 12)
- {
- gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4;
- if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] > 12)
- gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] = 12;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0xF)
- && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] < 12)
- {
- gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF;
- if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] > 12)
- gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] = 12;
- retVal = FALSE;
- }
- break;
- case 3:
- if ((itemEffect[cmdIndex] & 0x80)
- && gSideTimers[GetBankSide(gActiveBank)].mistTimer == 0)
- {
- gSideTimers[GetBankSide(gActiveBank)].mistTimer = 5;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x40) // raise level
- && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100)
- {
- data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1];
- SetMonData(pkmn, MON_DATA_EXP, &data);
- CalculateMonStats(pkmn);
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x20)
- && HealStatusConditions(pkmn, partyIndex, 7, sp34) == 0)
- {
- if (sp34 != 4)
- gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE;
- retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(pkmn, partyIndex, 0xF88, sp34) == 0)
- retVal = FALSE;
- if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(pkmn, partyIndex, 16, sp34) == 0)
- retVal = FALSE;
- if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(pkmn, partyIndex, 32, sp34) == 0)
- retVal = FALSE;
- if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(pkmn, partyIndex, 64, sp34) == 0)
- retVal = FALSE;
- if ((itemEffect[cmdIndex] & 1) // heal confusion
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION))
- {
- gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION;
- retVal = FALSE;
- }
- break;
- // EV, HP, and PP raising effects
- case 4:
- r10 = itemEffect[cmdIndex];
- if (r10 & 0x20)
- {
- r10 &= ~0x20;
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2);
- sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- if (data <= 2 && sp28 > 4)
- {
- data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gUnknown_08208240[moveIndex];
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
-
- data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
- retVal = FALSE;
- }
- }
- sp28 = 0;
- while (r10 != 0)
- {
- if (r10 & 1)
- {
- u16 evCount;
- s32 r5;
-
- switch (sp28)
- {
- case 0:
- case 1:
- evCount = GetMonEVCount(pkmn);
- if (evCount >= 510)
- return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL);
- if (data < 100)
- {
- if (data + itemEffect[sp24] > 100)
- r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
- else
- r4 = itemEffect[sp24];
- if (evCount + r4 > 510)
- r4 += 510 - (evCount + r4);
- data += r4;
- SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data);
- CalculateMonStats(pkmn);
- sp24++;
- retVal = FALSE;
- }
- break;
- case 2:
- // revive?
- if (r10 & 0x10)
- {
- if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0)
- {
- sp24++;
- break;
- }
- if (gMain.inBattle)
- {
- if (sp34 != 4)
- {
- gAbsentBankFlags &= ~gBitTable[sp34];
- CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlePartyID[sp34]));
- if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
- }
- else
- {
- gAbsentBankFlags &= ~gBitTable[gActiveBank ^ 2];
- if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
- }
- }
- }
- else
- {
- if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0)
- {
- sp24++;
- break;
- }
- }
- data = itemEffect[sp24++];
- switch (data)
- {
- case 0xFF:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL);
- break;
- case 0xFE:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2;
- if (data == 0)
- data = 1;
- break;
- case 0xFD:
- data = eStatHp;
- break;
- }
- if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL))
- {
- if (e == 0)
- {
- data = GetMonData(pkmn, MON_DATA_HP, NULL) + data;
- if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL))
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL);
- SetMonData(pkmn, MON_DATA_HP, &data);
- if (gMain.inBattle && sp34 != 4)
- {
- gBattleMons[sp34].hp = data;
- if (!(r10 & 0x10) && GetBankSide(gActiveBank) == 0)
- {
- if (gBattleResults.unk3 < 255)
- gBattleResults.unk3++;
- // I have to re-use this variable to match.
- r5 = gActiveBank;
- gActiveBank = sp34;
- EmitGetAttributes(0, 0, 0);
- MarkBufferBankForExecution(gActiveBank);
- gActiveBank = r5;
- }
- }
- }
- else
- {
- gBattleMoveDamage = -data;
- }
- retVal = FALSE;
- }
- r10 &= 0xEF;
- break;
- case 3:
- if (!(r10 & 2))
- {
- for (r5 = 0; r5 < 4; r5++)
- {
- u16 r4;
-
- data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
- {
- data += itemEffect[sp24];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
- {
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5);
- }
- SetMonData(pkmn, MON_DATA_PP1 + r5, &data);
- if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[r5]))
- gBattleMons[sp34].pp[r5] = data;
- retVal = FALSE;
- }
- }
- sp24++;
- }
- else
- {
- u16 r4;
-
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
- {
- data += itemEffect[sp24++];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
- {
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- }
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
- if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex]))
- gBattleMons[sp34].pp[moveIndex] = data;
- retVal = FALSE;
- }
- }
- break;
- case 7:
- {
- u16 targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item);
-
- if (targetSpecies != SPECIES_NONE)
- {
- BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex);
- return FALSE;
- }
- }
- break;
- }
- }
- sp28++;
- r10 >>= 1;
- }
- break;
- case 5:
- r10 = itemEffect[cmdIndex];
- sp28 = 0;
- while (r10 != 0)
- {
- if (r10 & 1)
- {
- u16 evCount;
-
- switch (sp28)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- evCount = GetMonEVCount(pkmn);
- if (evCount >= 510)
- return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL);
- if (data < 100)
- {
- if (data + itemEffect[sp24] > 100)
- r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
- else
- r4 = itemEffect[sp24];
- if (evCount + r4 > 510)
- r4 += 510 - (evCount + r4);
- data += r4;
- SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data);
- CalculateMonStats(pkmn);
- retVal = FALSE;
- sp24++;
- }
- break;
- case 4:
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2);
- if (data < 3)
- {
- r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL);
- data &= gUnknown_0820823C[moveIndex];
- data += gUnknown_08208240[moveIndex] * 3;
-
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
- retVal = FALSE;
- }
- break;
- case 5:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- }
- sp24++;
- break;
- case 6:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200
- && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- }
- sp24++;
- break;
- case 7:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- }
- sp24++;
- break;
- }
- }
- sp28++;
- r10 >>= 1;
- }
- break;
- }
- }
- return retVal;
-}
diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c
deleted file mode 100644
index c0cae9353..000000000
--- a/src/pokemon/pokemon_menu.c
+++ /dev/null
@@ -1,1199 +0,0 @@
-#include "global.h"
-#include "easy_chat.h"
-#include "pokemon.h"
-#include "pokemon_menu.h"
-#include "party_menu.h"
-#include "palette.h"
-#include "menu.h"
-#include "mail_data.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "main.h"
-#include "overworld.h"
-#include "menu_helpers.h"
-#include "pokemon_summary_screen.h"
-#include "constants/moves.h"
-#include "data2.h"
-#include "strings.h"
-#include "item_use.h"
-#include "item.h"
-#include "event_data.h"
-#include "mail.h"
-#include "field_player_avatar.h"
-#include "fldeff_softboiled.h"
-#include "braille_puzzles.h"
-#include "field_fadetransition.h"
-#include "field_weather.h"
-#include "field_effect.h"
-#include "field_control_avatar.h"
-#include "metatile_behavior.h"
-#include "fieldmap.h"
-#include "item_menu.h"
-#include "player_pc.h"
-#include "ewram.h"
-
-/*
-Pokemon menu:
- The menu that appears when you
- click on a pokemon in
- overworld 'pokemon' menu
-*/
-
-struct PokeMenuFieldMoveFunc
-{
- bool8 (*func)(void);
- u8 field_1;
-};
-
-extern u8 gUnknown_020384F0;
-extern u8 gUnknown_0202E8F4;
-extern u8 gUnknown_0202E8F5;
-extern u8 gUnknown_0202E8F6;
-extern u8 gUnknown_02038561;
-extern u16 gUnknown_0202E8F8;
-extern void (*gPokemonItemUseCallback)(u8 taskID, u16 itemID, TaskFunc func);
-extern TaskFunc gUnknown_03005CF0;
-
-void sub_808A520(void);
-void sub_80A61D0(void);
-void CB2_InitFlyRegionMap(void);
-bool8 SetUpFieldMove_Cut(void);
-bool8 SetUpFieldMove_Flash(void);
-bool8 SetUpFieldMove_RockSmash(void);
-bool8 SetUpFieldMove_Strength(void);
-bool8 SetUpFieldMove_Teleport(void);
-bool8 SetUpFieldMove_Dig(void);
-bool8 SetUpFieldMove_SecretPower(void);
-bool8 SetUpFieldMove_SoftBoiled(void);
-bool8 SetUpFieldMove_SoftBoiled(void);
-bool8 SetUpFieldMove_SweetScent(void);
-
-#define sFieldMovesTerminator 0xFF // note: should be changed to 0xFFFF, because currently it makes it impossible to add a field move with 0xFF index
-
-// this file's functions
-static void sub_808A8A8(void);
-static void sub_808B3EC(void);
-static void sub_8089D94(u8 taskID);
-static void sub_8089E4C(u8 taskID);
-static void sub_808A5BC(u8 taskID);
-static void sub_808A8D4(u8 taskID);
-static void sub_808A73C(u8 taskID);
-static void sub_808A848(u8 taskID);
-static void sub_808AAF0(u8 taskID);
-static void sub_808ABF4(u8 taskID);
-static void sub_808AB34(u8 taskID);
-static void sub_808ABA8(u8 taskID);
-static void sub_808B224(u8 taskID);
-static void sub_808B2EC(u8 taskID);
-static void sub_808B2B4(u8 taskID);
-static void sub_808B25C(u8 taskID);
-static void sub_808B1EC(u8 taskID);
-static void sub_808B338(u8 taskID);
-static void sub_808B4A4(u8 taskID);
-static void sub_808B4EC(u8 taskID);
-static void sub_808B5E4(u8 taskID);
-static void PokemonMenu_Summary(u8 taskID);
-static void PokemonMenu_Switch(u8 taskID);
-static void PokemonMenu_Item(u8 taskID);
-static void PokemonMenu_Cancel(u8 taskID);
-static void PokemonMenu_GiveItem(u8 taskID);
-static void PokemonMenu_TakeItem(u8 taskID);
-static void PokemonMenu_TakeMail(u8 taskID);
-static void PokemonMenu_Mail(u8 taskID);
-static void PokemonMenu_ReadMail(u8 taskID);
-static void PokemonMenu_CancelSubmenu(u8 taskID);
-static void PokemonMenu_FieldMove(u8 taskID);
-static bool8 SetUpFieldMove_Waterfall(void);
-static bool8 SetUpFieldMove_Surf(void);
-static bool8 SetUpFieldMove_Fly(void);
-static bool8 SetUpFieldMove_Dive(void);
-
-// ewram data
-
-EWRAM_DATA static u8 sPokeMenuCursorPos = 0;
-EWRAM_DATA static u8 sPokeMenuOptionsNo = 0;
-EWRAM_DATA static u8 sPokeMenuOptionsOrder[8] = {0}; // 4 possible field moves and 4 default options
-
-// iwram common
-u8 gLastFieldPokeMenuOpened;
-void (*gUnknown_03005CE4)(void);
-
-// const data
-
-static const struct MenuAction2 sPokemonMenuActions[] =
-{
- {OtherText_Summary, PokemonMenu_Summary},
- {OtherText_Switch2, PokemonMenu_Switch},
- {OtherText_Item, PokemonMenu_Item},
- {gOtherText_CancelNoTerminator, PokemonMenu_Cancel},
- {OtherText_Give2, PokemonMenu_GiveItem},
- {OtherText_Take2, PokemonMenu_TakeItem},
- {OtherText_Take, PokemonMenu_TakeMail},
- {OtherText_Mail, PokemonMenu_Mail},
- {OtherText_Read2, PokemonMenu_ReadMail},
- {gOtherText_CancelNoTerminator, PokemonMenu_CancelSubmenu},
- {gMoveNames[MOVE_CUT], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_FLASH], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_ROCK_SMASH], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_STRENGTH], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_SURF], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_FLY], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_DIVE], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_WATERFALL], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_TELEPORT], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_DIG], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_SECRET_POWER], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_MILK_DRINK], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_SOFT_BOILED], PokemonMenu_FieldMove},
- {gMoveNames[MOVE_SWEET_SCENT], PokemonMenu_FieldMove},
-};
-
-static const u16 sPokeMenuFieldMoves[] =
-{
- MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH,
- MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL,
- MOVE_TELEPORT, MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK,
- MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, sFieldMovesTerminator,
-};
-
-static const u8 sUnknown_39F572[] = {4, 5, 9, 0};
-static const struct PartyPopupMenu sUnknown_0839F578 = {3, 6, sUnknown_39F572};
-
-static const u8 sUnknown_39F580[] = {8, 6, 9, 0};
-static const struct PartyPopupMenu sUnknown_0839F584 = {3, 9, sUnknown_39F580};
-
-static const struct PokeMenuFieldMoveFunc sFieldMoveFuncs[] =
-{
- {SetUpFieldMove_Cut, 0x6},
- {SetUpFieldMove_Flash, 0x9},
- {SetUpFieldMove_RockSmash, 0x9},
- {SetUpFieldMove_Strength, 0x9},
- {SetUpFieldMove_Surf, 0x7},
- {SetUpFieldMove_Fly, 0x9},
- {SetUpFieldMove_Dive, 0x9},
- {SetUpFieldMove_Waterfall, 0x9},
- {SetUpFieldMove_Teleport, 0x9},
- {SetUpFieldMove_Dig, 0x9},
- {SetUpFieldMove_SecretPower, 0x9},
- {SetUpFieldMove_SoftBoiled, 0x10},
- {SetUpFieldMove_SoftBoiled, 0x10},
- {SetUpFieldMove_SweetScent, 0x9},
-};
-
-void sub_8089A70(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- OpenPartyMenu(PARTY_MENU_TYPE_STANDARD, 0);
-}
-
-static void sub_8089A8C(void)
-{
- sPokeMenuOptionsNo = 0;
- // if checking pokemon is an egg, we can't give it an item and it doesn't know any move
- if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG))
- {
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY);
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH);
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL);
- }
- else
- {
- u16 moveID, tableID;
- for (moveID = 0; moveID < 4; moveID++) // 4, max number of possible field moves
- {
- for (tableID = 0; sPokeMenuFieldMoves[tableID] != sFieldMovesTerminator; tableID++)
- {
- if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MOVE1 + moveID) == sPokeMenuFieldMoves[tableID])
- {
- u8 fieldID = tableID + POKEMENU_FIRST_FIELD_MOVE_ID;
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, fieldID);
- break;
- }
- }
- }
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY);
-
- // can't switch a pokemon if it's the only one in the party
- if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != 0)
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH);
-
- if (ItemIsMail(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM)))
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_MAIL);
- else
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_ITEM);
-
- AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL);
- }
-}
-
-static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order, u8 arg6)
-{
- PrintPartyMenuPromptText(5, arg6);
- Menu_DrawStdWindowFrame(arg0, arg1, arg0 + arg2, (noOfOptions * 2) + arg1 + 1);
- Menu_PrintItemsReordered(arg0 + 1, arg1 + 1, noOfOptions, menuActions, order);
-}
-
-void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order)
-{
- sub_8089BDC(arg0, arg1, arg2, noOfOptions, menuActions, order, 1);
-}
-
-static void sub_8089C7C(u8 arg0)
-{
- u32 r4 = (u8)(18 - (sPokeMenuOptionsNo << 1));
-
- sub_8089BDC(19, r4, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsOrder, 3);
- r4 |= 1;
- InitMenu(0, 20, r4, sPokeMenuOptionsNo, arg0, 9);
-}
-
-void HandleDefaultPartyMenu(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- switch (HandleDefaultPartyMenuInput(taskID))
- {
- case A_BUTTON:
- PlaySE(SE_SELECT);
- gLastFieldPokeMenuOpened = sub_806CA38(taskID);
- GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
- sub_8089A8C();
- sPokeMenuCursorPos = 0;
- sub_8089C7C(0);
- gTasks[taskID].func = sub_8089D94;
- sub_808B5B4(taskID);
- break;
- case B_BUTTON:
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_8089E4C;
- break;
- }
- }
-}
-
-static void sub_8089D94(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
- {
- PlaySE(SE_SELECT);
- sPokeMenuCursorPos = Menu_MoveCursor(-1);
- sub_808B5B4(taskID);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
- {
- PlaySE(SE_SELECT);
- sPokeMenuCursorPos = Menu_MoveCursor(1);
- sub_808B5B4(taskID);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- sPokemonMenuActions[sPokeMenuOptionsOrder[sPokeMenuCursorPos]].func(taskID);
- sub_808B5B4(taskID);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PokemonMenu_Cancel(taskID);
- sub_808B5B4(taskID);
- }
- }
-}
-
-static void sub_8089E4C(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- gLastFieldPokeMenuOpened = 0;
- SetMainCallback2(sub_805469C);
- DestroyTask(taskID);
- }
-}
-
-static void sub_8089E84(void)
-{
- GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
- sub_8089A8C();
- sPokeMenuCursorPos = 0;
- sub_8089C7C(0);
-}
-
-static void sub_8089EBC(void)
-{
- do
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- gLastFieldPokeMenuOpened = gUnknown_020384F0;
- sub_8089E84();
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- } while (sub_80F9344() != TRUE);
-}
-
-static void sub_8089F14(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_8089D94, 5);
- SetMainCallback2(sub_8089EBC);
-}
-
-static void sub_8089F44(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data[0];
- DestroyTask(taskID);
- ewram1B000_alt.unk262 = 1;
- ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, PSS_MODE_NORMAL);
- }
-}
-
-static void PokemonMenu_Summary(u8 taskID)
-{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_8089F44;
-}
-
-void DoPokemonMenu_Switch(u8 taskID)
-{
- SetTaskFuncWithFollowupFunc(taskID, SetupDefaultPartyMenuSwitchPokemon, HandleDefaultPartyMenu);
- Menu_EraseWindowRect(19, 0, 29, 19);
-}
-
-static void PokemonMenu_Switch(u8 taskID)
-{
- Menu_DestroyCursor();
- ewram01000.unkC = sub_806CD5C;
- ewram01000.array[53553] = 1;
- DoPokemonMenu_Switch(taskID);
-}
-
-static void sub_808A060(u8 taskID)
-{
- if (gMain.newKeys == DPAD_UP && sPokeMenuCursorPos != 0)
- {
- sPokeMenuCursorPos = Menu_MoveCursor(-1);
- PlaySE(SE_SELECT);
- }
- if (gMain.newKeys == DPAD_DOWN && sPokeMenuCursorPos != 2)
- {
- sPokeMenuCursorPos = Menu_MoveCursor(1);
- PlaySE(SE_SELECT);
- }
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, sPokemonMenuActions, sPokeMenuCursorPos)(taskID);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- ClosePartyPopupMenu(0, &sUnknown_0839F578);
- PokemonMenu_CancelSubmenu(taskID);
- }
-}
-
-static void sub_808A100(u8 taskID)
-{
- ShowPartyPopupMenu(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0);
- PrintPartyMenuPromptText(0xD, 2);
- gTasks[taskID].func = sub_808A060;
-}
-
-static void PokemonMenu_Item(u8 taskID)
-{
- Menu_DestroyCursor();
- sPokeMenuCursorPos = 0;
- Menu_EraseWindowRect(19, 0, 29, 19);
- gTasks[taskID].func = sub_808A100;
-}
-
-static void sub_808A180(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
- DestroyTask(taskID);
- sub_80E62A0(4, gSaveBlock1.mail[mailID].words, sub_808A520, 3);
- }
-}
-
-static void sub_808A1E0(u8 taskID)
-{
- if (gUnknown_0202E8F6 != 1)
- {
- SetHeldItemIconVisibility(taskID, sub_806CA38(taskID));
- PrintPartyMenuPromptText(0, 0);
- gTasks[taskID].func = HandleDefaultPartyMenu;
- }
-}
-
-static void sub_808A228(u8 taskID)
-{
- if (ItemIsMail(gSpecialVar_ItemId) && gUnknown_0202E8F4 != 0)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808A180;
- }
- else
- {
- Menu_EraseWindowRect(0, 0, 29, 19);
- PrintPartyMenuPromptText(0, 0);
- gTasks[taskID].func = HandleDefaultPartyMenu;
- }
-}
-
-static void sub_808A2AC(u8 taskID)
-{
- if (!gPaletteFade.active)
- PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A228);
-}
-
-static void sub_808A2DC(u8 taskID)
-{
- u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
- DestroyTask(taskID);
- sub_80E62A0(4, gSaveBlock1.mail[mailID].words, sub_808A520, 3);
-}
-
-static void sub_808A330(u8 taskID)
-{
- PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A2DC);
-}
-
-static void sub_808A34C(void)
-{
- RunTasks();
-}
-
-static void sub_808A358(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-static void sub_808A3A4(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- EWRAM_1B000.unk262 = 3;
- sub_8089E84();
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-void sub_808A3F8(void)
-{
- if (ItemIsMail(gSpecialVar_ItemId))
- {
- u8 taskID = CreateTask(sub_808A330, 0);
- gPaletteFade.bufferTransferDisabled = 1;
- sub_806BD58(taskID, 0);
- sub_806C994(taskID, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(taskID, 0);
- if (!(bool8)(GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_HELD_ITEM)))
- {
- SetMainCallback2(sub_808A34C);
- return;
- }
- else
- DestroyTask(taskID);
- }
- gPaletteFade.bufferTransferDisabled = 1;
- if (gSpecialVar_ItemId)
- {
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A2AC, 0xFF);
- SetMainCallback2(sub_808A358);
- }
- else
- {
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_8089D94, 5);
- SetMainCallback2(sub_808A3A4);
- }
-}
-
-static void sub_808A4D4(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-void sub_808A520(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- if (gSpecialVar_Result == 0)
- {
- if (gUnknown_0202E8F8)
- RemoveBagItem(gUnknown_0202E8F8, 1);
- AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1);
- TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]);
- SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8);
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, HandleDefaultPartyMenu, 0);
- }
- else
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A5BC, 0xFF);
- SetMainCallback2(sub_808A4D4);
-}
-
-static void sub_808A5BC(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 0);
- gTasks[taskID].func = sub_808A1E0;
- }
-}
-
-static void sub_808A604(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(sub_80A61D0);
- DestroyTask(taskID);
- }
-}
-
-static void PokemonMenu_GiveItem(u8 taskID)
-{
- gUnknown_0202E8F5 = sub_806CA38(taskID);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808A604;
-}
-
-static void sub_808A678(u8 taskID)
-{
- sub_808A8D4(taskID);
-}
-
-static void PokemonMenu_TakeItem(u8 taskID)
-{
- Menu_DestroyCursor();
- Menu_EraseWindowRect(19, 0, 29, 19);
- sub_806D5A4();
- PartyMenuTryGiveMonHeldItem_806ECE8(taskID, sub_808A678);
-}
-
-static void PokemonMenu_TakeMail(u8 taskID)
-{
- Menu_DestroyCursor();
- Menu_EraseWindowRect(19, 0, 29, 19);
- sub_806D5A4();
- DoTakeMail(taskID, sub_808A678);
-}
-
-static void PokemonMenu_Mail(u8 taskID)
-{
- Menu_DestroyCursor();
- sPokeMenuCursorPos = 0;
- Menu_EraseWindowRect(19, 0, 29, 19);
- ShowPartyPopupMenu(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, 0);
- gTasks[taskID].func = sub_808A73C;
-}
-
-static void sub_808A73C(u8 taskID)
-{
- if (gMain.newAndRepeatedKeys == DPAD_UP)
- {
- PlaySE(SE_SELECT);
- if (sPokeMenuCursorPos == 0)
- sPokeMenuCursorPos = Menu_MoveCursor(sUnknown_0839F584.numChoices - 1);
- else
- sPokeMenuCursorPos = Menu_MoveCursor(-1);
- }
- if (gMain.newAndRepeatedKeys == DPAD_DOWN)
- {
- PlaySE(SE_SELECT);
- if (sPokeMenuCursorPos == sUnknown_0839F584.numChoices - 1)
- sPokeMenuCursorPos = Menu_MoveCursor(1 - sUnknown_0839F584.numChoices);
- else
- sPokeMenuCursorPos = Menu_MoveCursor(1);
- }
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F584, sPokemonMenuActions, sPokeMenuCursorPos)(taskID);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- ClosePartyPopupMenu(0, &sUnknown_0839F584);
- PokemonMenu_Cancel(taskID);
- }
-}
-
-static void PokemonMenu_ReadMail(u8 taskID)
-{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808A848;
-}
-
-static void sub_808A848(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
- DestroyTask(taskID);
- HandleReadMail(&gSaveBlock1.mail[mailID], sub_808A8A8, 1);
- }
-}
-
-static void sub_808A8A8(void)
-{
- gUnknown_020384F0 = gLastFieldPokeMenuOpened;
- ewram1B000.unk262 = 4;
- sub_8089F14();
-}
-
-static void sub_808A8D4(u8 taskID)
-{
- sPokeMenuCursorPos = 0;
- Menu_EraseWindowRect(19, 0, 29, 19);
- PrintPartyMenuPromptText(0, 0);
- gTasks[taskID].func = HandleDefaultPartyMenu;
-}
-
-static void PokemonMenu_Cancel(u8 taskID)
-{
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- sub_808A8D4(taskID);
-}
-
-static void PokemonMenu_CancelSubmenu(u8 taskID)
-{
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- Menu_EraseWindowRect(19, 0, 29, 19);
- sub_806D5A4();
- sub_8089C7C(sPokeMenuCursorPos);
- gTasks[taskID].func = sub_8089D94;
-}
-
-#define IS_SOFTBOILED_MILKDRINK(ID)((ID == (POKEMENU_MILK_DRINK - POKEMENU_FIRST_FIELD_MOVE_ID) || ID == (POKEMENU_SOFT_BOILED - POKEMENU_FIRST_FIELD_MOVE_ID)))
-#define IS_SURF(ID)((ID == (POKEMENU_SURF - POKEMENU_FIRST_FIELD_MOVE_ID)))
-#define IS_FLY(ID)((ID == (POKEMENU_FLY - POKEMENU_FIRST_FIELD_MOVE_ID)))
-
-#define tFieldMoveId data[11]
-
-static void PokemonMenu_FieldMove(u8 taskID)
-{
- s16* data = gTasks[taskID].data;
-
- Menu_DestroyCursor();
- tFieldMoveId = sPokeMenuOptionsOrder[sPokeMenuCursorPos] - POKEMENU_FIRST_FIELD_MOVE_ID;
- if (sub_80F9344() == TRUE)
- {
- Menu_EraseWindowRect(19, 0, 29, 19);
- if (IS_SOFTBOILED_MILKDRINK(tFieldMoveId))
- PrintPartyMenuPromptText(9, 0);
- else
- PrintPartyMenuPromptText(sFieldMoveFuncs[tFieldMoveId].field_1, 0);
- gTasks[taskID].func = sub_808ABF4;
- }
- else if (tFieldMoveId <= 7 && FlagGet(FLAG_BADGE01_GET + tFieldMoveId) != TRUE)
- {
- // can't use a field HM move without a proper badge
- Menu_EraseWindowRect(19, 0, 29, 19);
- sub_806D5A4();
- sub_806E834(gOtherText_CantBeUsedBadge, 1);
- gTasks[taskID].func = sub_808AAF0;
- }
- else
- {
- if (sFieldMoveFuncs[tFieldMoveId].func() == TRUE)
- {
- sPokeMenuCursorPos = 0;
- if (!IS_SOFTBOILED_MILKDRINK(tFieldMoveId))
- {
- gTasks[taskID].func = sub_808AB34;
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- }
- else
- sub_8133D28(taskID);
- }
- else
- {
- Menu_EraseWindowRect(19, 0, 29, 19);
- if (IS_SURF(tFieldMoveId) && TestPlayerAvatarFlags(8))
- PrintPartyMenuPromptText(8, 0);
- else
- PrintPartyMenuPromptText(sFieldMoveFuncs[tFieldMoveId].field_1, 0);
- gTasks[taskID].func = sub_808ABF4;
- }
- }
-}
-
-static void sub_808AAF0(u8 taskID)
-{
- if (gUnknown_0202E8F6 != 1 && (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON))
- {
- Menu_EraseWindowRect(0, 14, 29, 19);
- PokemonMenu_Cancel(taskID);
- }
-}
-
-static void sub_808AB34(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- if (!IS_FLY(gTasks[taskID].tFieldMoveId) || ShouldDoBrailleFlyEffect())
- SetMainCallback2(c2_exit_to_overworld_2_switch);
- else
- SetMainCallback2(CB2_InitFlyRegionMap);
- DestroyTask(taskID);
- }
-}
-
-#undef tFieldMoveId
-
-void FieldCallback_Teleport(void)
-{
- pal_fill_black();
- CreateTask(sub_808ABA8, 8);
-}
-
-static void sub_808ABA8(u8 taskID)
-{
- if (IsWeatherNotFadingIn() == TRUE)
- {
- gFieldEffectArguments[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES);
- gUnknown_03005CE4();
- DestroyTask(taskID);
- }
-}
-
-static void sub_808ABF4(u8 taskID)
-{
- if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
- {
- Menu_EraseWindowRect(1, 17, 28, 18);
- PokemonMenu_Cancel(taskID);
- }
-}
-
-static void sub_808AC2C(void)
-{
- gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(FLDEFF_USE_SURF);
-}
-
-static bool8 SetUpFieldMove_Surf(void)
-{
- if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
- {
- gFieldCallback = FieldCallback_Teleport;
- gUnknown_03005CE4 = sub_808AC2C;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-static void sub_808AC8C(void)
-{
- gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(FLDEFF_USE_FLY);
-}
-
-static bool8 SetUpFieldMove_Fly(void)
-{
- if (ShouldDoBrailleFlyEffect())
- {
- gFieldCallback = FieldCallback_Teleport;
- gUnknown_03005CE4 = DoBrailleFlyEffect;
- return TRUE;
- }
- if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
- {
- gFieldCallback = FieldCallback_Teleport;
- gUnknown_03005CE4 = sub_808AC8C;
- return TRUE;
- }
- return FALSE;
-}
-
-static void sub_808AD0C(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-void sub_808AD58(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, HandleDefaultPartyMenu, 0);
- SetMainCallback2(sub_808AD0C);
-}
-
-u16 unref_sub_808AD88(void)
-{
- return GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES);
-}
-
-static void sub_808ADAC(void)
-{
- gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(FLDEFF_USE_DIVE);
-}
-
-static bool8 SetUpFieldMove_Dive(void)
-{
- gFieldEffectArguments[1] = sub_8068F18();
- if (gFieldEffectArguments[1])
- {
- gFieldCallback = FieldCallback_Teleport;
- gUnknown_03005CE4 = sub_808ADAC;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-static void sub_808AE08(void)
-{
- gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(FLDEFF_USE_WATERFALL);
-}
-
-static bool8 SetUpFieldMove_Waterfall(void)
-{
- s16 x, y;
- GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
- if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE
- && IsPlayerSurfingNorth() == TRUE)
- {
- gFieldCallback = FieldCallback_Teleport;
- gUnknown_03005CE4 = sub_808AE08;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-static void sub_808AE8C(void)
-{
- u8 i;
- u8 arg = gSpecialVar_ItemId - 33;
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
- {
- sub_806D668(i);
- if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg))
- sub_806BC3C(i, 0x9A);
- else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId)))
- sub_806BC3C(i, 0xA8);
- else
- sub_806BC3C(i, 0x8C);
- }
- }
-}
-
-static void sub_808AF20(void)
-{
- u8 i;
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gSpecialVar_ItemId))
- {
- sub_806D668(i);
- sub_806BC3C(i, 0);
- }
- }
- }
-}
-
-static void sub_808AF80(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- if (gUnknown_02038561 == 0)
- {
- switch (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId))
- {
- case 1:
- sub_808AE8C();
- break;
- case 2:
- sub_808AF20();
- break;
- }
- }
- if (gLastFieldPokeMenuOpened > 5 || !GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES))
- gLastFieldPokeMenuOpened = 0;
- sub_806C994(ewram1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(ewram1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-void sub_808B020(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- switch (gUnknown_02038561)
- {
- case 0:
- if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 1)
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 20);
- else
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 3);
- break;
- case 4:
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B1EC, 0xFF);
- break;
- case 1:
- case 3:
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 4);
- break;
- }
- SetMainCallback2(sub_808AF80);
-}
-
-void sub_808B0C0(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- switch (HandleDefaultPartyMenuInput(taskID))
- {
- case A_BUTTON:
- gLastFieldPokeMenuOpened = sub_806CA38(taskID);
- if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG))
- PlaySE(SE_HAZURE);
- else
- {
- sub_806D5A4();
- if (gUnknown_02038561 == 0)
- gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
- if (gUnknown_02038561 == 1)
- {
- PlaySE(SE_SELECT);
- PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808B2EC);
- }
- if (gUnknown_02038561 == 3)
- {
- PlaySE(SE_SELECT);
- PartyMenuTryGiveMonMail(taskID, sub_808B2B4);
- }
- }
- break;
- case B_BUTTON:
- gLastFieldPokeMenuOpened = sub_806CA38(taskID);
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- if (gUnknown_02038561 == 0 || gUnknown_02038561 == 1)
- gTasks[taskID].func = sub_808B25C;
- if (gUnknown_02038561 == 3)
- gTasks[taskID].func = sub_808B2B4;
- break;
- }
- }
-}
-
-static void sub_808B1EC(u8 taskID)
-{
- if (!gPaletteFade.active)
- gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
-}
-
-static void sub_808B224(u8 taskID)
-{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808B25C;
-}
-
-static void sub_808B25C(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(sub_80A5B40);
- DestroyTask(taskID);
- }
-}
-
-static void sub_808B288(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(Mailbox_ReturnToMailListAfterDeposit);
- DestroyTask(taskID);
- }
-}
-
-static void sub_808B2B4(u8 taskID)
-{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808B288;
-}
-
-static void sub_808B2EC(u8 taskID)
-{
- if (gUnknown_0202E8F4 == 2)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].func = sub_808B338;
- }
- else
- sub_808B224(taskID);
-}
-
-static void sub_808B338(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- u8 mailID;
-
- gLastFieldPokeMenuOpened = sub_806CA38(taskID);
- mailID = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MAIL);
- DestroyTask(taskID);
- sub_80E62A0(4, gSaveBlock1.mail[mailID].words, sub_808B3EC, 3);
- }
-}
-
-static void sub_808B3A0(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gLastFieldPokeMenuOpened);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-static void sub_808B3EC(void)
-{
- IntrCallback callback;
-
- gPaletteFade.bufferTransferDisabled = 1;
- if (gSpecialVar_Result == 0)
- {
- if (gUnknown_0202E8F8)
- RemoveBagItem(gUnknown_0202E8F8, 1);
- AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1);
- TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]);
- SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8);
- CreateTask(sub_808B25C, 5);
- gPaletteFade.bufferTransferDisabled = 0;
- callback = CB2_PartyMenuMain;
- }
- else
- {
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B4A4, 0xFF);
- callback = sub_808B3A0;
- }
- SetMainCallback2(callback);
-}
-
-static void sub_808B4A4(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 1);
- gTasks[taskID].func = sub_808B4EC;
- }
-}
-
-static void sub_808B4EC(u8 taskID)
-{
- if (gUnknown_0202E8F6 != 1)
- sub_808B224(taskID);
-}
-
-void sub_808B508(u8 taskID)
-{
- sub_808B224(taskID);
-}
-
-static void sub_808B518(void)
-{
- while (1)
- {
- if (InitPartyMenu() == TRUE)
- {
- sub_806C994(EWRAM_1B000.menuHandlerTaskId, gUnknown_020384F0);
- ChangePartyMenuSelection(EWRAM_1B000.menuHandlerTaskId, 0);
- SetMainCallback2(CB2_PartyMenuMain);
- break;
- }
- if (sub_80F9344() == TRUE)
- break;
- }
-}
-
-void sub_808B564(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- if (sub_809FA30() != 4)
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, TaughtMove, 0xFF);
- else
- SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, StopTryingToTeachMove_806F588, 0xFF);
- SetMainCallback2(sub_808B518);
-}
-
-void sub_808B5B4(u32 taskID)
-{
- gUnknown_03005CF0 = gTasks[taskID].func;
- gTasks[taskID].func = sub_808B5E4;
- sub_808B5E4(taskID);
-}
-
-static void sub_808B5E4(u8 taskID)
-{
- if (sub_8055870() != TRUE)
- gTasks[taskID].func = gUnknown_03005CF0;
-}
diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c
deleted file mode 100644
index 2ba4e57cc..000000000
--- a/src/pokemon/pokemon_size_record.c
+++ /dev/null
@@ -1,219 +0,0 @@
-#include "global.h"
-#include "pokemon_size_record.h"
-#include "data2.h"
-#include "event_data.h"
-#include "pokedex.h"
-#include "constants/species.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "text.h"
-
-const u16 Unknown_083D17EC[] = INCBIN_U16("graphics/unknown/unknown_3D17EC.gbapal");
-
-struct UnknownStruct
-{
- u16 unk0;
- u8 unk2;
- u16 unk4;
-};
-
-extern u16 gSpecialVar_Result;
-
-static const struct UnknownStruct sBigMonSizeTable[] =
-{
- { 290, 1, 0 },
- { 300, 1, 10 },
- { 400, 2, 110 },
- { 500, 4, 310 },
- { 600, 20, 710 },
- { 700, 50, 2710 },
- { 800, 100, 7710 },
- { 900, 150, 17710 },
- { 1000, 150, 32710 },
- { 1100, 100, -17826 },
- { 1200, 50, -7826 },
- { 1300, 20, -2826 },
- { 1400, 5, -826 },
- { 1500, 2, -326 },
- { 1600, 1, -126 },
- { 1700, 1, -26 },
-};
-
-#define CM_PER_INCH 2.54
-
-static u32 GetMonSizeHash(struct Pokemon *pkmn)
-{
- // UB: Too few arguments for function 'GetMonData'
- u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY);
- u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF;
- u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF;
- u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF;
- u16 speedIV = GetMonData(pkmn, MON_DATA_SPEED_IV) & 0xF;
- u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF;
- u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF;
- u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF);
- u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8);
-
- return (hibyte << 8) + lobyte;
-}
-
-static u8 TranslateBigMonSizeTableIndex(u16 a)
-{
- u8 i;
-
- for (i = 1; i < 15; i++)
- {
- if (a < sBigMonSizeTable[i].unk4)
- return i - 1;
- }
- return i;
-}
-
-static u32 GetMonSize(u16 species, u16 b)
-{
- u64 unk2;
- u64 unk4;
- u64 unk0;
- u32 height;
- u32 var;
-
- height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0);
- var = TranslateBigMonSizeTableIndex(b);
- unk0 = sBigMonSizeTable[var].unk0;
- unk2 = sBigMonSizeTable[var].unk2;
- unk4 = sBigMonSizeTable[var].unk4;
- unk0 += (b - unk4) / unk2;
- return height * unk0 / 10;
-}
-
-static void FormatMonSizeRecord(u8 *string, u32 size)
-{
-#if ENGLISH
- u8 decimalPoint[] = _(".");
-#elif GERMAN
- u8 decimalPoint[] = _(",");
-#endif
-
-#ifdef UNITS_IMPERIAL
- //Convert size from centimeters to inches
- size = (double)(size * 10) / (CM_PER_INCH * 10);
-#endif
-
- string = ConvertIntToDecimalStringN(string, size / 10, 0, 8);
- string = StringAppend(string, decimalPoint);
- ConvertIntToDecimalStringN(string, size % 10, 0, 1);
-}
-
-static u8 CompareMonSize(u16 species, u16 *sizeRecord)
-{
- if (gSpecialVar_Result == 0xFF)
- {
- return 0;
- }
- else
- {
- struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_Result];
-
- // UB: Too few arguments for function 'GetMonData'
- if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species)
- {
- return 1;
- }
- else
- {
- u32 oldSize;
- u32 newSize;
- u16 sizeParams;
-
- *(&sizeParams) = GetMonSizeHash(pkmn);
- newSize = GetMonSize(species, sizeParams);
- oldSize = GetMonSize(species, *sizeRecord);
- FormatMonSizeRecord(gStringVar2, newSize);
- if (newSize <= oldSize)
- {
- return 2;
- }
- else
- {
- *sizeRecord = sizeParams;
- return 3;
- }
- }
- }
-}
-
-//Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3
-static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord)
-{
- u32 size = GetMonSize(species, *sizeRecord);
-
- FormatMonSizeRecord(gStringVar3, size);
- StringCopy(gStringVar1, gSpeciesNames[species]);
- if (*sizeRecord == 0x8100)
- StringCopy(gStringVar2, gOtherText_Marco);
- else
- StringCopy(gStringVar2, gSaveBlock2.playerName);
-}
-
-void InitShroomishSizeRecord(void)
-{
- VarSet(VAR_SHROOMISH_SIZE_RECORD, 0x8100);
-}
-
-void GetShroomishSizeRecordInfo(void)
-{
- u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD);
-
- GetMonSizeRecordInfo(SPECIES_SHROOMISH, sizeRecord);
-}
-
-void CompareShroomishSize(void)
-{
- u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD);
-
- gSpecialVar_Result = CompareMonSize(SPECIES_SHROOMISH, sizeRecord);
-}
-
-void InitBarboachSizeRecord(void)
-{
- VarSet(VAR_BARBOACH_SIZE_RECORD, 0x8100);
-}
-
-void GetBarboachSizeRecordInfo(void)
-{
- u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD);
-
- GetMonSizeRecordInfo(SPECIES_BARBOACH, sizeRecord);
-}
-
-void CompareBarboachSize(void)
-{
- u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD);
-
- gSpecialVar_Result = CompareMonSize(SPECIES_BARBOACH, sizeRecord);
-}
-
-void GiveGiftRibbonToParty(u8 index, u8 ribbonId)
-{
- s32 i;
- bool32 gotRibbon = FALSE;
- u8 data = 1;
- u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E };
-
- if (index < 11 && ribbonId < 65)
- {
- gSaveBlock1.giftRibbons[index] = ribbonId;
- for (i = 0; i < 6; i++)
- {
- struct Pokemon *pkmn = &gPlayerParty[i];
-
- if (GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0)
- {
- SetMonData(pkmn, arr[index], &data);
- gotRibbon = TRUE;
- }
- }
- if (gotRibbon)
- FlagSet(FLAG_SYS_RIBBON_GET);
- }
-}
diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c
deleted file mode 100644
index 001cebe45..000000000
--- a/src/pokemon/pokemon_storage_system.c
+++ /dev/null
@@ -1,93 +0,0 @@
-#include "global.h"
-#include "pokemon_storage_system.h"
-#include "menu.h"
-#include "string_util.h"
-#include "ewram.h"
-
-struct StorageAction {
- u8 *text;
- u8 format;
-};
-
-extern const struct StorageAction gUnknown_083B6DF4[];
-
-EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
-
-void sub_8098898(u8 index) {
- u8 *ptr;
-
- Menu_DrawStdWindowFrame(10, 16, 29, 19);
-
- switch (gUnknown_083B6DF4[index].format)
- {
-
- case 2:
- ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text);
- ptr = StringCopy(ptr, gUnk20011fa);
- break;
-
- case 5:
- ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text);
- ptr = StringCopy(ptr, gUnk20026e4);
- break;
-
- case 1:
- // {var} + " is selected."
- ptr = StringCopy(gUnk2002694, gUnk20011fa);
- ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text);
- break;
-
- case 4:
- // {var} + " was released."
- ptr = StringCopy(gUnk2002694, gUnk20026e4);
-#if ENGLISH
- ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text);
-#elif GERMAN
- ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text);
-#endif
- break;
-
- case 3:
- {
- u8 *stringLength;
- u8 *text;
-
- text = gUnknown_083B6DF4[index].text;
- stringLength = &text[StringLength(text)] + 1;
-
- ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text);
- ptr = StringCopy(ptr, gUnk20011fa);
- ptr = StringCopy(ptr, stringLength);
- }
- break;
-
- case 6:
- // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1)
- {
- u8 *stringLength;
- u8 *text;
-
- text = gUnknown_083B6DF4[index].text;
- stringLength = &text[StringLength(text)] - 1;
-
- ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text);
- ptr = StringCopy(ptr - 1, gUnk20026e4);
- ptr = StringCopy(ptr, stringLength);
- }
- break;
-
- case 0:
- default:
- ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text);
- break;
- }
-
- while (ptr < gUnk20026A6)
- {
- ptr[0] = CHAR_SPACE;
- ptr++;
- }
-
- ptr[0] = EOS;
- Menu_PrintText(gUnk2002694, 11, 17);
-}
diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
deleted file mode 100644
index c85bed0fb..000000000
--- a/src/pokemon/pokemon_summary_screen.c
+++ /dev/null
@@ -1,5334 +0,0 @@
-#include "global.h"
-#include "constants/items.h"
-#include "constants/songs.h"
-#include "constants/species.h"
-#include "battle.h"
-#include "contest.h"
-#include "data2.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "ewram.h"
-#include "item.h"
-#include "learn_move.h"
-#include "link.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu.h"
-#include "menu_helpers.h"
-#include "overworld.h"
-#include "palette.h"
-#include "party_menu.h"
-#include "pokeball.h"
-#include "pokemon.h"
-#include "pokemon_summary_screen.h"
-#include "region_map.h"
-#include "sound.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings.h"
-#include "strings2.h"
-#include "task.h"
-#include "tv.h"
-#include "scanline_effect.h"
-
-static void sub_809FC0C(void);
-static void sub_809FEB8(void);
-static void sub_809F63C(struct Pokemon *);
-static void sub_809F650(struct Pokemon *);
-static void sub_809F664(struct Pokemon *);
-static void sub_809FE6C(struct Pokemon *);
-static void sub_80A0090(struct Pokemon *);
-static void sub_80A015C(struct Pokemon *);
-static void sub_809DE44(void);
-static void sub_809EB40(u8);
-static void sub_809EBC4(void);
-static void sub_809E044(void);
-static void sub_80A1D84(struct Pokemon *);
-static void sub_80A18C4(void);
-static bool8 LoadPokemonSummaryScreenGraphics(void);
-static bool8 MonKnowsMultipleMoves(struct Pokemon *);
-static void PrintSummaryWindowHeaderText(void);
-static void sub_80A1DCC(struct Pokemon *);
-static void sub_809FE80(void);
-static void sub_80A00A4(void);
-static void sub_80A0390(void);
-extern u8 sub_80A1808(struct Pokemon *);
-static void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32);
-static void sub_80A0958(struct Pokemon *);
-static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8);
-static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8);
-static void sub_80A1EF8(const u8 *, u8, u8, u16, s32);
-static void sub_80A1F48(const u8 *, u8, u8, u8, u16);
-static void PrintHeldItemName(u16, u8, u8);
-static void PrintNumRibbons(struct Pokemon *);
-static void DrawExperienceProgressBar(struct Pokemon *, u8, u8);
-static void sub_809E13C(u8 taskId);
-static void sub_80A1950(void);
-static void sub_809DE64(void);
-static void SummaryScreenHandleAButton(u8);
-static void SummaryScreenHandleUpDownInput(u8, s8);
-static bool8 sub_809F7D0(u8);
-static void sub_809F9D0(u8, u8);
-static void sub_809EAC8(u8);
-static void sub_809E534(u8);
-static void sub_809E83C(u8, s8);
-static void sub_80A1B40(u8);
-static void sub_80A2078(int);
-static void sub_809E3FC(u8);
-static void SummaryScreenHandleKeyInput(u8);
-static void sub_80A1B1C(u8);
-static void sub_80A16CC(u8);
-static void sub_80A1A30(u8);
-static void DrawSummaryScreenNavigationDots(void);
-static void sub_80A00F4(u8);
-static void sub_80A029C(struct Pokemon *);
-static void sub_809FBE4(void);
-static void sub_80A1500(u8);
-static void sub_80A1334(u8);
-extern void sub_809F43C(u8);
-extern s8 sub_809F284(s8);
-extern s8 sub_809F3CC(s8);
-static bool8 sub_809F5F8(void);
-static void sub_80A1DE8(struct Pokemon *);
-static u8 sub_809F6B4(struct Pokemon *, u8 *);
-static void DrawPokerusSurvivorDot(struct Pokemon *);
-static void sub_80A12D0(s8);
-static void sub_809FAC8(struct Pokemon *);
-static void SummaryScreenHandleLeftRightInput(u8, s8);
-static void sub_809E8F0();
-static void sub_80A1654(s8, u8);
-static void sub_80A1488(s8, u8);
-static void sub_809FC34(struct Pokemon *);
-static void sub_809FF64(struct Pokemon *);
-static void sub_80A1918(u8, u8);
-static void sub_80A198C(u8, u8, u8, u8);
-static u16 GetMonMove(struct Pokemon *, u8);
-static void sub_80A04CC(u16);
-static void sub_80A057C(u16);
-static void sub_80A0498(u16);
-static void sub_80A046C(u16);
-static void sub_80A20A8(u8);
-static void sub_809F678(struct Pokemon *);
-static void sub_80A1BC0(struct Sprite *sprite);
-static void sub_80A1888(struct Sprite *);
-static void sub_80A0428(struct Pokemon *, u8 *);
-static void sub_80A18E4(u8);
-static u8 *sub_80A1E58(u8 *, u8);
-static void sub_80A0A2C(struct Pokemon *, u8, u8);
-static void sub_80A1FF8(const u8 *, u8, u8, u8);
-
-extern u8 ball_number_to_ball_processing_index(u16);
-extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8);
-
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gUnknown_08208238[];
-extern TaskFunc gUnknown_03005CF0;
-extern struct SpriteTemplate gUnknown_02024E8C;
-
-extern const u8 gStatusPal_Icons[];
-extern const u8 gStatusGfx_Icons[];
-extern const u8 gMenuSummaryPal[];
-extern const u8 gMenuSummaryGfx[];
-extern const u8 gMoveTypes_Gfx[];
-extern const u8 gMoveTypes_Pal[];
-extern const u8 gStatusScreen_Pal[];
-extern const u8 gStatusScreen_Tilemap[];
-extern const u8 gUnknown_08E74688[];
-extern const u8 gUnknown_08E74E88[];
-extern const u8 gUnknown_08E73508[];
-extern const u8 gStatusScreen_Gfx[];
-extern const u8 gFontDefaultPalette[];
-extern const u8 gUnknownPalette_81E6692[];
-extern const u8 gAbilityNames[][13];
-extern const u8 * const gAbilityDescriptions[];
-extern const u8 * const gContestEffectStrings[];
-extern const struct ContestMove gContestMoves[];
-extern const struct ContestEffect gContestEffects[];
-extern const u16 gUnknown_08E94510[];
-extern const u16 gUnknown_08E94550[];
-extern const u16 gUnknown_08E94590[];
-extern const u8 gUnknown_08E73E88[];
-
-EWRAM_DATA u8 gUnknown_020384F0 = 0;
-EWRAM_DATA struct Sprite *gUnknown_020384F4 = NULL;
-
-#if ENGLISH
-#include "../data/text/move_descriptions_en.h"
-#include "../data/text/nature_names_en.h"
-#elif GERMAN
-#include "../data/text/move_descriptions_de.h"
-#include "../data/text/nature_names_de.h"
-#endif
-
-static const u8 * const sPageHeaderTexts[] = {
- gEmptyString_81E72B0,
- OtherText_PokeInfo,
- OtherText_PokeSkills,
- OtherText_BattleMoves,
- OtherText_ContestMoves,
- OtherText_Switch,
- OtherText_Info,
- gOtherText_CancelNoTerminator,
-};
-
-static const union AffineAnimCmd sUnusedSpriteAffineAnim[] = {
- AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sUnsuedSpriteAffineAnimTable[] = {
- sUnusedSpriteAffineAnim,
-};
-
-static const struct OamData sOamData_83C109C = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C10A4[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10AC[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10B4[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10BC[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10C4[] = {
- ANIMCMD_FRAME(32, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10CC[] = {
- ANIMCMD_FRAME(40, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10D4[] = {
- ANIMCMD_FRAME(48, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10DC[] = {
- ANIMCMD_FRAME(56, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10E4[] = {
- ANIMCMD_FRAME(64, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10EC[] = {
- ANIMCMD_FRAME(72, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10F4[] = {
- ANIMCMD_FRAME(80, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10FC[] = {
- ANIMCMD_FRAME(88, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1104[] = {
- ANIMCMD_FRAME(96, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C110C[] = {
- ANIMCMD_FRAME(104, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1114[] = {
- ANIMCMD_FRAME(112, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C111C[] = {
- ANIMCMD_FRAME(120, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1124[] = {
- ANIMCMD_FRAME(128, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C112C[] = {
- ANIMCMD_FRAME(136, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1134[] = {
- ANIMCMD_FRAME(144, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C113C[] = {
- ANIMCMD_FRAME(152, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1144[] = {
- ANIMCMD_FRAME(160, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C114C[] = {
- ANIMCMD_FRAME(168, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1154[] = {
- ANIMCMD_FRAME(176, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C115C[] = {
- sSpriteAnim_83C10A4,
- sSpriteAnim_83C10AC,
- sSpriteAnim_83C10B4,
- sSpriteAnim_83C10BC,
- sSpriteAnim_83C10C4,
- sSpriteAnim_83C10CC,
- sSpriteAnim_83C10D4,
- sSpriteAnim_83C10DC,
- sSpriteAnim_83C10E4,
- sSpriteAnim_83C10EC,
- sSpriteAnim_83C10F4,
- sSpriteAnim_83C10FC,
- sSpriteAnim_83C1104,
- sSpriteAnim_83C110C,
- sSpriteAnim_83C1114,
- sSpriteAnim_83C111C,
- sSpriteAnim_83C1124,
- sSpriteAnim_83C112C,
- sSpriteAnim_83C1134,
- sSpriteAnim_83C113C,
- sSpriteAnim_83C1144,
- sSpriteAnim_83C114C,
- sSpriteAnim_83C1154,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C11B8 = { gMoveTypes_Gfx, 0x1700, 30002 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C11C0 = {
- .tileTag = 30002,
- .paletteTag = 30002,
- .oam = &sOamData_83C109C,
- .anims = sSpriteAnimTable_83C115C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u8 sUnknown_PaletteNums[] = { 0xD, 0xD, 0xE, 0xE, 0xD, 0xD, 0xF, 0xE, 0xD, 0xF, 0xD, 0xE, 0xF, 0xD, 0xE, 0xE, 0xF, 0xD, 0xD, 0xE, 0xE, 0xF, 0xD };
-
-static const struct OamData sOamData_83C11F0 = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C11F8[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1200[] = {
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1208[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1210[] = {
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1218[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1220[] = {
- ANIMCMD_FRAME(16, 0, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1228[] = {
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1230[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1238[] = {
- ANIMCMD_FRAME(24, 0, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1240[] = {
- ANIMCMD_FRAME(28, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C1248[] = {
- sSpriteAnim_83C11F8,
- sSpriteAnim_83C1200,
- sSpriteAnim_83C1208,
- sSpriteAnim_83C1210,
- sSpriteAnim_83C1218,
- sSpriteAnim_83C1220,
- sSpriteAnim_83C1228,
- sSpriteAnim_83C1230,
- sSpriteAnim_83C1238,
- sSpriteAnim_83C1240,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C1270 = { gMenuSummaryGfx, 0x400, 30000 };
-static const struct CompressedSpritePalette sUnknown_083C1278 = { gMenuSummaryPal, 30000 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C1280 = {
- .tileTag = 30000,
- .paletteTag = 30000,
- .oam = &sOamData_83C11F0,
- .anims = sSpriteAnimTable_83C1248,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const struct OamData sOamData_83C1298 = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 3,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C12A0[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12A8[] = {
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12B0[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12B8[] = {
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12C0[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12C8[] = {
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12D0[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C12D8[] = {
- sSpriteAnim_83C12A0,
- sSpriteAnim_83C12A8,
- sSpriteAnim_83C12B0,
- sSpriteAnim_83C12B8,
- sSpriteAnim_83C12C0,
- sSpriteAnim_83C12C8,
- sSpriteAnim_83C12D0,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C12F4 = { gStatusGfx_Icons, 0x380, 30001 };
-static const struct CompressedSpritePalette sUnknown_083C12FC = { gStatusPal_Icons, 30001 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C1304 = {
- .tileTag = 30001,
- .paletteTag = 30001,
- .oam = &sOamData_83C1298,
- .anims = sSpriteAnimTable_83C12D8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal");
-
-#if ENGLISH
-static const u16 gSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp");
-#elif GERMAN
-extern const u16 gSummaryScreenTextTiles[];
-#endif
-
-static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp");
-
-static const u16 sUnknown_083C157C[] = { RGB(26, 26, 23) };
-static const u16 sUnknown_083C157E[] = { RGB(30, 30, 27) };
-
-static void (*const sUnknown_083C1580[])(void) = {
- sub_809FC0C,
- sub_809FEB8,
-};
-
-static void (*const sUnknown_083C1588[])(struct Pokemon *) = {
- sub_809F63C,
- sub_809F650,
- sub_809F664,
- sub_809F664,
-};
-
-static void (*const sUnknown_083C1598[])(struct Pokemon *) = {
- sub_809FE6C,
- sub_80A0090,
- sub_80A015C,
- sub_80A015C,
-};
-
-static const u8 sDoubleBattlePartyOrder[] = { 0, 2, 3, 1, 4, 5 };
-
-static const u8 sUnknown_083C15AE[] = _("{STR_VAR_1}{CLEAR_TO 64}");
-static const u8 sUnknown_083C15B4[] = _("{STR_VAR_1}{CLEAR_TO 72}");
-
-asm(".align 2"); // TODO: this array is probably not correctly-typed
-static const u8 sUnknown_083C15BC[] = {
- 9, 1, 0, 2,
- 10, 3, 0, 4,
- 8, 5, 0, 6,
- 11, 7, 0, 8,
- 14, 9, 0, 10,
- 12, 11, 0, 12,
- 13, 13, 0, 14,
- -1, 15, 0, 10,
-};
-
-
-void sub_809D844(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_809D85C(void)
-{
- REG_BG1HOFS = gBattle_BG1_X;
- REG_BG1VOFS = gBattle_BG1_Y;
- REG_BG2HOFS = gBattle_BG2_X;
- REG_BG2VOFS = gBattle_BG2_Y;
- REG_BG3HOFS = gBattle_BG3_X;
- REG_BG3VOFS = gBattle_BG3_Y;
-
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u8 mode)
-{
- gPaletteFade.bufferTransferDisabled = 1;
-
- pssData.monList.partyMons = party;
- pssData.mode = mode;
- pssData.monIndex = monIndex;
- pssData.maxMonIndex = maxMonIndex;
- pssData.callback = callback;
- pssData.loadGfxState = 0;
- pssData.selectedMoveIndex = 4;
- pssData.moveToLearn = 0;
- pssData.bgToggle = 0;
- pssData.disableMoveOrderEditing = FALSE;
-
- if (mode >= PSS_MODE_PC_NORMAL)
- {
- pssData.usingPC = TRUE;
- }
- else
- {
- pssData.usingPC = FALSE;
- }
-
- switch (mode)
- {
- case PSS_MODE_NORMAL:
- case PSS_MODE_PC_NORMAL:
- pssData.firstPage = PSS_PAGE_INFO;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 0;
- pssData.unk78 = 0;
- pssData.headerTextId = 1;
- pssData.headerActionTextId = 7;
- break;
- case PSS_MODE_NO_MOVE_ORDER_EDIT:
- pssData.firstPage = PSS_PAGE_INFO;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 0;
- pssData.unk78 = 0;
- pssData.headerTextId = 1;
- pssData.headerActionTextId = 7;
- pssData.disableMoveOrderEditing = TRUE;
- break;
- case PSS_MODE_SELECT_MOVE:
- pssData.firstPage = PSS_PAGE_BATTLE_MOVES;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 1;
- pssData.unk78 = 1;
- pssData.headerTextId = 3;
- pssData.headerActionTextId = 0;
- pssData.selectedMoveIndex = 0;
- break;
- case PSS_MODE_MOVES_ONLY:
- case PSS_MODE_PC_MOVES_ONLY:
- pssData.firstPage = PSS_PAGE_BATTLE_MOVES;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 1;
- pssData.unk78 = 1;
- break;
- }
-
- pssData.page = pssData.firstPage;
- SetMainCallback2(sub_809DE44);
-}
-
-void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move)
-{
- ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE);
- pssData.moveToLearn = move;
-}
-
-void sub_809DA1C(void)
-{
- switch (pssData.mode)
- {
- case PSS_MODE_NORMAL:
- case PSS_MODE_PC_NORMAL:
- pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0);
- break;
- case PSS_MODE_NO_MOVE_ORDER_EDIT:
- pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0);
- break;
- case PSS_MODE_SELECT_MOVE:
- case PSS_MODE_UNKNOWN:
- pssData.inputHandlingTaskId = CreateTask(sub_809EB40, 0);
- break;
- case PSS_MODE_MOVES_ONLY:
- case PSS_MODE_PC_MOVES_ONLY:
- pssData.inputHandlingTaskId = CreateTask(sub_809E3FC, 0);
- break;
- }
-}
-
-bool8 sub_809DA84(void)
-{
- switch (gMain.state)
- {
- case 0:
- SetVBlankCallback(NULL);
- ResetSpriteData();
- gMain.state++;
- break;
- case 1:
- ScanlineEffect_Stop();
- gMain.state++;
- break;
- case 2:
- FreeAllSpritePalettes();
- gMain.state++;
- break;
- case 3:
- DmaClearLarge(3, (void *)(VRAM + 0x0), 0x10000, 0x1000, 32);
- gMain.state++;
- break;
- case 4:
- sub_809DE64();
- gMain.state++;
- break;
- case 5:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6E6C);
- gMain.state++;
- break;
- case 6:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E6E6C);
- gMain.state++;
- break;
- case 7:
- if (MultistepInitMenuWindowContinue())
- {
- gMain.state++;
- }
- break;
- case 8:
- sub_809DA1C();
- gMain.state++;
- break;
- case 9:
- DmaCopy16Defvars(3, gSummaryScreenTextTiles, (void *)(VRAM + 0xD000), 320);
- DmaCopy16Defvars(3, sSummaryScreenButtonTiles, (void *)(VRAM + 0xD140), 256);
- pssData.loadGfxState = 0;
- gMain.state++;
- break;
- case 10:
- if (LoadPokemonSummaryScreenGraphics())
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- case 11:
- sub_80A18C4();
- gMain.state++;
- break;
- case 12:
- sub_809F678(&pssData.loadedMon);
- if (!GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(0);
- }
- else
- {
- sub_80A12D0(10);
- }
-
- DrawPokerusSurvivorDot(&pssData.loadedMon);
- gMain.state++;
- break;
- case 13:
- sub_80A1950();
- sub_80A1D84(&pssData.loadedMon);
- gMain.state++;
- break;
- case 14:
- sub_80A1DE8(&pssData.loadedMon);
- pssData.loadGfxState = 0;
- gMain.state++;
- break;
- case 15:
- if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF)
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- case 16:
- sub_809E044();
- DrawSummaryScreenNavigationDots();
- gMain.state++;
- break;
- case 17:
- if (pssData.page <= PSS_PAGE_SKILLS)
- {
- sUnknown_083C1580[pssData.page]();
- }
-
- gMain.state++;
- break;
- case 18:
- sub_809FAC8(&pssData.loadedMon);
- gMain.state++;
- break;
- case 19:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- gMain.state++;
- break;
- case 20:
- if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- gBattle_BG3_X = 256;
- }
- else
- {
- gBattle_BG3_X = 0;
- }
-
- gMain.state++;
- break;
- case 21:
- sub_809EBC4();
- if (pssData.selectedMoveIndex != 0)
- {
- sub_80A1488(0, 0);
- sub_80A1654(0, 0);
- }
- else
- {
- sub_80A1488(10, 0);
- sub_80A1654(10, 0);
- }
-
- PrintSummaryWindowHeaderText();
- gMain.state++;
- break;
- case 22:
- if (sub_8055870() != TRUE)
- {
- gMain.state++;
- }
- break;
- default:
- SetVBlankCallback(sub_809D85C);
- BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1);
- SetMainCallback2(sub_809D844);
- gPaletteFade.bufferTransferDisabled = 0;
- return TRUE;
- break;
- }
-
- return FALSE;
-}
-
-static void sub_809DE44(void)
-{
- while (sub_809DA84() != TRUE && sub_80F9344() != TRUE);
-}
-
-static void sub_809DE64(void)
-{
- REG_BG0CNT = 0x1E08;
- REG_BG1CNT = 0x4801;
- REG_BG2CNT = 0x4A02;
- REG_BG3CNT = 0x5C03;
-
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 0;
- gBattle_BG3_Y = 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_BLDCNT = 0;
- REG_DISPCNT = 0x1F40;
-}
-
-static bool8 LoadPokemonSummaryScreenGraphics(void)
-{
- switch (pssData.loadGfxState)
- {
- case 0:
- LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0);
- break;
- case 1:
- CpuSet(gUnknown_08E73508, (void *)VRAM + 0xE000, 0x400);
- break;
- case 2:
- LZDecompressVram(gUnknown_08E74E88, (void *)VRAM + 0xE800);
- break;
- case 3:
- LZDecompressVram(gStatusScreen_Tilemap, (void *)VRAM + 0x4800);
- break;
- case 4:
- CpuSet(gUnknown_08E73E88, (void *)VRAM + 0x5800, 0x400);
- break;
- case 5:
- CpuSet(gUnknown_08E74688, (void *)VRAM + 0x6800, 0x400);
- break;
- case 6:
- LoadCompressedPalette(gStatusScreen_Pal, 0, 160);
- break;
- case 7:
- LoadCompressedObjectPic(&sUnknown_083C11B8);
- break;
- case 8:
- LoadCompressedObjectPic(&sUnknown_083C1270);
- break;
- case 9:
- LoadCompressedObjectPic(&sUnknown_083C12F4);
- break;
- case 10:
- LoadCompressedObjectPalette(&sUnknown_083C12FC);
- break;
- case 11:
- LoadCompressedObjectPalette(&sUnknown_083C1278);
- break;
- case 12:
- LoadCompressedPalette(gMoveTypes_Pal, 464, 96);
- pssData.loadGfxState = 0;
- return TRUE;
- }
-
- pssData.loadGfxState++;
- return FALSE;
-}
-
-static void sub_809E044(void)
-{
- LoadPalette(&gUnknownPalette_81E6692[28], 129, 2);
- LoadPalette(&gUnknownPalette_81E6692[30], 136, 2);
- LoadPalette(&gUnknownPalette_81E6692[28], 143, 2);
- LoadPalette(&gUnknownPalette_81E6692[30], 137, 2);
- LoadPalette(&gUnknownPalette_81E6692[12], 209, 4);
- LoadPalette(&gUnknownPalette_81E6692[20], 211, 4);
- LoadPalette(&gUnknownPalette_81E6692[28], 213, 4);
- LoadPalette(&gUnknownPalette_81E6692[12], 215, 4);
- LoadPalette(&gUnknownPalette_81E6692[8], 217, 4);
- LoadPalette(&gUnknownPalette_81E6692[16], 219, 4);
- LoadPalette(&gUnknownPalette_81E6692[4], 221, 2);
- LoadPalette(&gUnknownPalette_81E6692[6], 222, 2);
- LoadPalette(&gUnknownPalette_81E6692[2], 223, 2);
- LoadPalette(gFontDefaultPalette, 240, 32);
- LoadPalette(&gUnknownPalette_81E6692[6], 249, 2);
-}
-
-static void SummaryScreenExit(u8 taskId)
-{
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = sub_809E13C;
-}
-
-static void sub_809E13C(u8 taskId)
-{
- if (sub_8055870() != TRUE && !gPaletteFade.active)
- {
- gUnknown_020384F0 = pssData.monIndex;
-
- ResetSpriteData();
- FreeAllSpritePalettes();
- StopCryAndClearCrySongs();
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- SetMainCallback2(pssData.callback);
- DestroyTask(taskId);
- }
-}
-
-static void SummaryScreenHandleKeyInput(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- SummaryScreenHandleUpDownInput(taskId, -1);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- SummaryScreenHandleUpDownInput(taskId, 1);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- SummaryScreenHandleLeftRightInput(taskId, -1);
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- SummaryScreenHandleLeftRightInput(taskId, 1);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES)
- {
- SummaryScreenHandleAButton(taskId);
- }
-
- if (pssData.page == PSS_PAGE_INFO)
- {
- SummaryScreenExit(taskId);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- SummaryScreenExit(taskId);
- }
-}
-
-static void sub_809E260(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- SummaryScreenHandleLeftRightInput(taskId, -1);
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- if (pssData.page != pssData.lastPage)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- SummaryScreenHandleLeftRightInput(taskId, 1);
- }
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (sub_809F7D0(taskId) == TRUE || pssData.selectedMoveIndex == 4)
- {
- pssData.switchMoveIndex = pssData.selectedMoveIndex;
- gSpecialVar_0x8005 = pssData.switchMoveIndex;
- SummaryScreenExit(taskId);
- }
- else
- {
- PlaySE(SE_HAZURE);
- sub_809F9D0(taskId, pssData.selectedMoveIndex);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- pssData.switchMoveIndex = 4;
- gSpecialVar_0x8005 = 4;
- SummaryScreenExit(taskId);
- }
-}
-
-static void sub_809E3FC(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (pssData.selectedMoveIndex != 4 && !pssData.disableMoveOrderEditing)
- {
- if (!MonKnowsMultipleMoves(&pssData.loadedMon))
- {
- PlaySE(SE_HAZURE);
- }
- else
- {
- PlaySE(SE_SELECT);
-
- pssData.switchMoveIndex = pssData.selectedMoveIndex;
- sub_80A1B40(1);
- sub_80A1A30(19);
-
- gTasks[taskId].func = sub_809E534;
- }
- }
- else
- {
- PlaySE(SE_SELECT);
- sub_809EAC8(taskId);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- sub_809EAC8(taskId);
- }
-
-}
-
-static bool8 MonKnowsMultipleMoves(struct Pokemon *mon)
-{
- u8 i;
-
- for (i = 1; i < 4; i++)
- {
- if (GetMonMove(mon, i))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static void sub_809E534(u8 taskId)
-{
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 3;
- sub_809E8F0(taskId, -1, &pssData.switchMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 3;
- sub_809E8F0(taskId, 1, &pssData.switchMoveIndex);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- sub_809E83C(taskId, 1);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- sub_809E83C(taskId, -1);
- }
-}
-
-static void sub_809E5C4(void)
-{
- struct Pokemon *party = pssData.monList.partyMons;
- struct Pokemon *pkmn = &party[pssData.monIndex];
- u8 moveIndex1 = pssData.selectedMoveIndex;
- u8 moveIndex2 = pssData.switchMoveIndex;
-
- u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1);
- u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2);
- u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1);
- u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2);
- u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES);
-
- // Calculate PP bonuses
- u8 r9 = gUnknown_08208238[moveIndex1];
- u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2);
- u8 r3 = gUnknown_08208238[moveIndex2];
- u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2);
- ppBonuses &= ~r9;
- ppBonuses &= ~r3;
- ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2));
-
- // Swap the moves
- SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2);
- SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1);
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp);
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp);
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-static void sub_809E6D8(void)
-{
- struct BoxPokemon *boxMons = pssData.monList.boxMons;
- struct BoxPokemon *pkmn = &boxMons[pssData.monIndex];
- u8 moveIndex1 = pssData.selectedMoveIndex;
- u8 moveIndex2 = pssData.switchMoveIndex;
-
- u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1);
- u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2);
- u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1);
- u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2);
- u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES);
-
- // Calculate PP bonuses
- u8 r9 = gUnknown_08208238[moveIndex1];
- u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2);
- u8 r3 = gUnknown_08208238[moveIndex2];
- u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2);
- ppBonuses &= ~r9;
- ppBonuses &= ~r3;
- ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2));
-
- // Swap the moves
- SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2);
- SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1);
- SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp);
- SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp);
- SetBoxMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-void sub_809E7F0(u8 taskId)
-{
- if (sub_809F5F8())
- {
- pssData.loadGfxState = 0;
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
- }
-}
-
-static void sub_809E83C(u8 taskId, s8 b)
-{
- PlaySE(SE_SELECT);
-
- sub_80A1B1C(19);
- sub_80A1B40(0);
-
- if (b == 1)
- {
- if (pssData.selectedMoveIndex != pssData.switchMoveIndex)
- {
- if (pssData.usingPC == FALSE)
- {
- sub_809E5C4();
- }
- else
- {
- sub_809E6D8();
- }
-
- pssData.selectedMoveIndex = pssData.switchMoveIndex;
- sub_809F678(&pssData.loadedMon);
- pssData.loadGfxState = 1;
-
- gTasks[taskId].func = sub_809E7F0;
- return;
- }
- }
- else
- {
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- }
-
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
-}
-
-__attribute__((naked))
-static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x8\n\
- adds r4, r1, 0\n\
- mov r9, r2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- mov r1, r9\n\
- ldrb r6, [r1]\n\
- ldr r1, _0809E944 @ =gTasks\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x8]\n\
- movs r2, 0\n\
- lsls r4, 24\n\
- asrs r4, 24\n\
- mov r10, r4\n\
- lsls r7, r0, 24\n\
-_0809E930:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- add r0, r10\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- asrs r1, r0, 24\n\
- cmp r0, r7\n\
- ble _0809E948\n\
- movs r6, 0\n\
- b _0809E94E\n\
- .align 2, 0\n\
-_0809E944: .4byte gTasks\n\
-_0809E948:\n\
- cmp r1, 0\n\
- bge _0809E94E\n\
- lsrs r6, r7, 24\n\
-_0809E94E:\n\
- lsls r4, r6, 24\n\
- lsrs r1, r4, 24\n\
- ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\
- str r2, [sp, 0x4]\n\
- bl GetMonMove\n\
- lsls r0, 16\n\
- adds r5, r4, 0\n\
- ldr r2, [sp, 0x4]\n\
- cmp r0, 0\n\
- bne _0809E97A\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E97A\n\
- lsls r0, r2, 24\n\
- movs r3, 0x80\n\
- lsls r3, 17\n\
- adds r0, r3\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _0809E930\n\
-_0809E97A:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- bne _0809E996\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E996\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- mov r2, r8\n\
- lsls r7, r2, 2\n\
- cmp r0, 0\n\
- beq _0809E9AC\n\
-_0809E996:\n\
- ldr r2, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- lsls r1, r3, 2\n\
- adds r0, r1, r3\n\
- lsls r0, 3\n\
- adds r0, r2\n\
- movs r2, 0x22\n\
- ldrsh r0, [r0, r2]\n\
- adds r7, r1, 0\n\
- cmp r0, 0x1\n\
- bne _0809E9D0\n\
-_0809E9AC:\n\
- lsrs r4, r5, 24\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1488\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1654\n\
- ldr r1, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- adds r0, r7, r3\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strh r1, [r0, 0x22]\n\
- movs r0, 0\n\
- str r0, [sp]\n\
-_0809E9D0:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- beq _0809E9FE\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- bne _0809E9FE\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _0809E9FE\n\
- movs r4, 0x2\n\
- negs r4, r4\n\
- lsrs r5, 24\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1488\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1654\n\
-_0809E9FE:\n\
- mov r2, r9\n\
- strb r6, [r2]\n\
- ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\
- cmp r9, r0\n\
- bne _0809EA20\n\
- movs r0, 0\n\
- bl sub_80A1C30\n\
- b _0809EA26\n\
- .align 2, 0\n\
-_0809EA10: .4byte gSharedMem + 0x18010\n\
-_0809EA14: .4byte gSharedMem + 0x18000\n\
-_0809EA18: .4byte gTasks\n\
-_0809EA1C: .4byte gSharedMem + 0x18079\n\
-_0809EA20:\n\
- movs r0, 0x1\n\
- bl sub_80A1C30\n\
-_0809EA26:\n\
- ldr r3, [sp]\n\
- cmp r3, 0\n\
- beq _0809EA34\n\
- ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\
- mov r1, r9\n\
- bl sub_80A0428\n\
-_0809EA34:\n\
- mov r0, r8\n\
- bl sub_80A2078\n\
- add sp, 0x8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809EA4C: .4byte gSharedMem + 0x18010\n\
- .syntax divided\n");
-}
-
-static void SummaryScreenHandleAButton(u8 taskId)
-{
- PlaySE(SE_SELECT);
-
- pssData.selectedMoveIndex = 0;
- sub_80A1488(2, 0);
- sub_80A1654(2, 0);
-
- if (!pssData.disableMoveOrderEditing)
- {
- pssData.headerActionTextId = 5;
- PrintSummaryWindowHeaderText();
- }
-
- sub_80A16CC(0);
- sub_80A029C(&pssData.loadedMon);
- sub_80A1A30(9);
-
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
-}
-
-static void sub_809EAC8(u8 taskId)
-{
- if (pssData.selectedMoveIndex != 4)
- {
- sub_80A1488(-2, 0);
- sub_80A1654(-2, 0);
- }
-
- sub_80A1B1C(9);
- sub_80A16CC(1);
-
- Menu_EraseWindowRect(15, 12, 28, 13);
- Menu_EraseWindowRect(11, 15, 28, 18);
-
- pssData.headerActionTextId = 6;
- PrintSummaryWindowHeaderText();
-
- gTasks[taskId].func = SummaryScreenHandleKeyInput;
-}
-
-static void sub_809EB40(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 5:
- sub_80A1A30(9);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_809E260;
- break;
- case 0:
- pssData.selectedMoveIndex = 0;
- if (pssData.moveToLearn != 0)
- {
- sub_80A1488(10, 0);
- sub_80A1654(10, pssData.selectedMoveIndex);
- }
-
- sub_80A16CC(0);
- sub_80A029C(&pssData.loadedMon);
- // fall through
- default:
- gTasks[taskId].data[0]++;
- break;
- }
-}
-
-static void sub_809EBC4(void)
-{
- if (pssData.page != PSS_PAGE_INFO)
- {
- DrawSummaryScreenNavigationDots();
- gBattle_BG1_X = 0x100;
-
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00;
- }
-}
-
-void sub_809EC38(u8 taskId)
-{
- u8 minus2;
- s16 *taskData = gTasks[taskId].data;
-
- switch (taskData[0])
- {
- case 0:
- if (pssData.bgToggle == 0)
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- gBattle_BG2_X = 0x100;
- }
-
- if (pssData.page == PSS_PAGE_SKILLS)
- {
- REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800;
- }
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00;
- }
- }
- else
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- gBattle_BG1_X = 0x100;
- }
-
- if (pssData.page == PSS_PAGE_SKILLS)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800;
- }
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00;
- }
- }
-
- taskData[0]++;
- break;
- case 1:
- if (pssData.bgToggle == 0)
- {
- int var2 = gBattle_BG1_X - 0x20;
- gBattle_BG1_X = var2;
- if (var2 << 16 == 0)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2;
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 1;
- taskData[0]++;
- }
- }
- else
- {
- int var2 = gBattle_BG2_X - 0x20;
- gBattle_BG2_X = var2;
- if (var2 << 16 == 0)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 1;
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2;
- taskData[0]++;
- }
- }
- break;
- case 2:
- pssData.headerTextId = pssData.page + 1;
- minus2 = pssData.mode - 2;
- if (minus2 < 2)
- {
- pssData.headerActionTextId = 0;
- sub_80A029C(&pssData.loadedMon);
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- sub_80A00F4(pssData.selectedMoveIndex);
- }
- else
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT))
- {
- pssData.headerActionTextId = 6;
- }
- else if (pssData.page == PSS_PAGE_INFO)
- {
- pssData.headerActionTextId = 7;
- }
- else
- {
- pssData.headerActionTextId = 0;
- }
- }
-
- taskData[0]++;
- break;
- case 3:
- DrawSummaryScreenNavigationDots();
- PrintSummaryWindowHeaderText();
- taskData[0]++;
- break;
- case 4:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- pssData.bgToggle ^= 1;
- taskData[0]++;
- break;
- case 5:
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
- break;
- }
-}
-
-void sub_809EE74(u8 taskId)
-{
- int var1;
- u8 minus2;
- s16 *taskData = gTasks[taskId].data;
-
- switch (taskData[0])
- {
- case 0:
- var1 = pssData.bgToggle;
- if (var1 == 0)
- {
- gBattle_BG2_X = pssData.bgToggle;
- taskData[0]++;
- }
- else
- {
- gBattle_BG1_X = 0;
- taskData[0]++;
- }
- break;
- case 1:
- if (pssData.bgToggle == 0)
- {
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01;
-
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2;
- }
- else
- {
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01;
-
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2;
- }
-
- taskData[0]++;
- break;
- case 2:
- if (pssData.bgToggle == 0)
- {
- int var2 = gBattle_BG2_X + 0x20;
- gBattle_BG2_X = var2;
- if ((var2 << 16) == 0x1000000)
- {
- taskData[0]++;
- }
- }
- else
- {
- int var2 = gBattle_BG1_X + 0x20;
- gBattle_BG1_X = var2;
- if ((var2 << 16) == 0x1000000)
- {
- taskData[0]++;
- }
- }
- break;
- case 3:
- pssData.headerTextId = pssData.page + 1;
- minus2 = pssData.mode - 2;
- if (minus2 < 2)
- {
- pssData.headerActionTextId = 0;
- sub_80A029C(&pssData.loadedMon);
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- sub_80A00F4(pssData.selectedMoveIndex);
- }
- else
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT))
- {
- pssData.headerActionTextId = 6;
- }
- else if (pssData.page == PSS_PAGE_INFO)
- {
- pssData.headerActionTextId = 7;
- }
- else
- {
- pssData.headerActionTextId = 0;
- }
- }
-
- taskData[0]++;
- break;
- case 4:
- DrawSummaryScreenNavigationDots();
- PrintSummaryWindowHeaderText();
- taskData[0]++;
- break;
- case 5:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- pssData.bgToggle ^= 1;
- taskData[0]++;
- break;
- case 6:
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
- break;
- }
-}
-
-void sub_809F0D0(u8 taskId, s8 direction)
-{
- pssData.page += direction;
- gUnknown_03005CF0 = gTasks[taskId].func;
- sub_809FBE4();
- gTasks[taskId].data[0] = 0;
-
- if (direction == -1)
- {
- gTasks[taskId].func = sub_809EC38;
- }
- else
- {
- gTasks[taskId].func = sub_809EE74;
- gTasks[taskId].func(taskId);
- }
-}
-
-static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction)
-{
- if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- if (direction == -1 && pssData.page == pssData.firstPage) return;
- if (direction == 1 && pssData.page == pssData.lastPage) return;
-
- if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF)
- {
- PlaySE(SE_SELECT);
- sub_809F0D0(taskId, direction);
- }
- }
-}
-
-#ifdef NONMATCHING
-static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- s8 var3;
- u8 var1 = direction;
-
- if (pssData.usingPC == TRUE)
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- var1 = (direction == 1) ? 0 : 1;
- }
- else
- {
- var1 = (direction == 1) ? 2 : 3;
- }
-
- var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1);
- }
- else
- {
- if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE)
- {
- var3 = sub_809F3CC(var1);
- }
- else
- {
- var3 = sub_809F284(var1);
- }
- }
-
- if (var3 != -1)
- {
- PlaySE(SE_SELECT);
- if (GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(-2);
- }
-
- pssData.monIndex = var3;
- pssData.unk84 = gTasks[taskId].func;
- gTasks[taskId].func = sub_809F43C;
- }
-}
-#else
-__attribute__((naked))
-static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\
- ldrb r1, [r0, 0xE]\n\
- adds r2, r0, 0\n\
- cmp r1, 0x1\n\
- bne _0809F202\n\
- ldrb r0, [r2, 0xB]\n\
- cmp r0, 0\n\
- beq _0809F1E8\n\
- lsls r1, r4, 24\n\
- asrs r1, 24\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- negs r0, r1\n\
- orrs r0, r1\n\
- lsrs r4, r0, 31\n\
- b _0809F1F4\n\
- .align 2, 0\n\
-_0809F1E4: .4byte gSharedMem + 0x18000\n\
-_0809F1E8:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r4, 0x3\n\
- cmp r0, 0x1\n\
- bne _0809F1F4\n\
- movs r4, 0x2\n\
-_0809F1F4:\n\
- ldr r0, [r2]\n\
- ldrb r1, [r2, 0x9]\n\
- ldrb r2, [r2, 0xA]\n\
- adds r3, r4, 0\n\
- bl StorageSystemGetNextMonIndex\n\
- b _0809F22C\n\
-_0809F202:\n\
- bl sub_80F9344\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- bl IsLinkDoubleBattle\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F3CC\n\
- b _0809F22C\n\
-_0809F224:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F284\n\
-_0809F22C:\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- beq _0809F270\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\
- adds r0, r5, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0809F258\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- bl sub_80A12D0\n\
-_0809F258:\n\
- adds r0, r5, 0\n\
- subs r0, 0x10\n\
- strb r4, [r0, 0x9]\n\
- ldr r1, _0809F27C @ =gTasks\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- str r1, [r5, 0x74]\n\
- ldr r1, _0809F280 @ =sub_809F43C\n\
- str r1, [r0]\n\
-_0809F270:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809F278: .4byte gSharedMem + 0x18010\n\
-_0809F27C: .4byte gTasks\n\
-_0809F280: .4byte sub_809F43C\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-#ifdef NONMATCHING
-s8 sub_809F284(s8 a)
-{
- struct Pokemon *mons = pssData.monList.partyMons;
- s8 r6 = 0;
-
- if (pssData.page == PSS_PAGE_INFO)
- {
- if (a == -1 && pssData.monIndex == 0)
- return -1;
- if (a == 1 && pssData.monIndex >= pssData.maxMonIndex)
- return -1;
- return pssData.monIndex + a;
- }
- else
- {
- do
- {
- r6 += a;
- if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
- return -1;
- } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0);
- return pssData.monIndex + r6;
- }
-}
-#else
-__attribute__((naked))
-s8 sub_809F284(s8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\
- ldr r7, [r0]\n\
- movs r6, 0\n\
- ldrb r1, [r0, 0xB]\n\
- adds r4, r0, 0\n\
- cmp r1, 0\n\
- bne _0809F2C4\n\
- lsls r0, r3, 24\n\
- asrs r2, r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- adds r5, r0, 0\n\
- cmp r2, r1\n\
- bne _0809F2AC\n\
- ldrb r0, [r4, 0x9]\n\
- cmp r0, 0\n\
- beq _0809F2E4\n\
-_0809F2AC:\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x1\n\
- bne _0809F2BA\n\
- ldrb r0, [r4, 0x9]\n\
- ldrb r1, [r4, 0xA]\n\
- cmp r0, r1\n\
- bcs _0809F2E4\n\
-_0809F2BA:\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r3\n\
- b _0809F304\n\
- .align 2, 0\n\
-_0809F2C0: .4byte gSharedMem + 0x18000\n\
-_0809F2C4:\n\
- lsls r5, r3, 24\n\
-_0809F2C6:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- asrs r1, r5, 24\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- ldrb r2, [r4, 0x9]\n\
- adds r1, r0, r2\n\
- cmp r1, 0\n\
- blt _0809F2E4\n\
- ldrb r0, [r4, 0xA]\n\
- cmp r1, r0\n\
- ble _0809F2F0\n\
-_0809F2E4:\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- b _0809F308\n\
- .align 2, 0\n\
-_0809F2EC: .4byte gSharedMem + 0x18000\n\
-_0809F2F0:\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0809F2C6\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r6\n\
-_0809F304:\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
-_0809F308:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-bool8 sub_809F310(struct Pokemon *mon)
-{
- if (GetMonData(mon, MON_DATA_SPECIES))
- {
- if (pssData.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-s8 sub_809F344(u8 partyIndex)
-{
- while (1)
- {
- partyIndex++;
- if (partyIndex == PARTY_SIZE)
- {
- return -1;
- }
-
- if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE)
- {
- return sDoubleBattlePartyOrder[partyIndex];
- }
- }
-}
-
-s8 sub_809F388(u8 partyIndex)
-{
- while (1)
- {
- if (partyIndex == 0)
- {
- return -1;
- }
-
- partyIndex--;
- if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE)
- {
- return sDoubleBattlePartyOrder[partyIndex];
- }
- }
-}
-
-s8 sub_809F3CC(s8 direction)
-{
- u8 i;
- u8 monIndex = 0;
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (sDoubleBattlePartyOrder[i] == pssData.monIndex)
- {
- monIndex = i;
- break;
- }
- }
-
- if ((direction == -1 && monIndex == 0) || (direction == 1 && monIndex == 5))
- {
- return -1;
- }
-
- if (direction != 1)
- {
- return sub_809F388(monIndex);
- }
- else if (monIndex != 5)
- {
- return sub_809F344(monIndex);
- }
-
- return -1;
-}
-
-void sub_809F43C(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- StopCryAndClearCrySongs();
- gMain.state++;
- break;
- case 1:
- DestroySpriteAndFreeResources(&gSprites[pssData.monSpriteId]);
- gMain.state++;
- break;
- case 2:
- DestroySpriteAndFreeResources(&gSprites[pssData.ballSpriteId]);
- gMain.state++;
- break;
- case 3:
- pssData.loadGfxState = 0;
- pssData.selectedMoveIndex = 0;
- gMain.state++;
- break;
- case 4:
- sub_809F678(&pssData.loadedMon);
- if (GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(2);
- }
-
- DrawPokerusSurvivorDot(&pssData.loadedMon);
- gMain.state++;
- break;
- case 5:
- if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF)
- {
- pssData.loadGfxState = 0;
- if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- gBattle_BG3_X = 256;
- }
- else
- {
- gBattle_BG3_X = 0;
- }
-
- gMain.state++;
- }
- break;
- case 6:
- sub_80A1DCC(&pssData.loadedMon);
- gMain.state++;
- break;
- case 7:
- sub_80A1DE8(&pssData.loadedMon);
- gMain.state++;
- break;
- case 8:
- if (sub_809F5F8())
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- default:
- if (sub_8055870() != TRUE)
- {
- gMain.state = 0;
- gTasks[taskId].func = pssData.unk84;
- }
- break;
- }
-}
-
-static bool8 sub_809F5F8(void)
-{
- if (pssData.loadGfxState == 0)
- {
- sub_809FAC8(&pssData.loadedMon);
- pssData.loadGfxState++;
- return FALSE;
- }
- else
- {
- sUnknown_083C1588[pssData.page](&pssData.loadedMon);
- return TRUE;
- }
-}
-
-static void sub_809F63C(struct Pokemon *mon)
-{
- sub_809FE80();
- sub_809FC34(mon);
-}
-
-static void sub_809F650(struct Pokemon *mon)
-{
- sub_80A00A4();
- sub_809FF64(mon);
-}
-
-static void sub_809F664(struct Pokemon *mon)
-{
- sub_80A0390();
- sub_80A015C(mon);
-}
-
-static void sub_809F678(struct Pokemon *mon)
-{
- if (pssData.usingPC == FALSE)
- {
- struct Pokemon *mons = pssData.monList.partyMons;
- *mon = mons[pssData.monIndex];
- }
- else
- {
- struct BoxPokemon *mons = pssData.monList.boxMons;
- sub_803B4B4(&mons[pssData.monIndex], mon);
- }
-}
-
-static u8 sub_809F6B4(struct Pokemon *mon, u8 *b)
-{
- u16 species;
- u32 personality;
- u32 otId;
- const struct CompressedSpritePalette *palette;
-
- switch (*b)
- {
- default:
- return sub_80A1808(mon);
- case 0:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- personality = GetMonData(mon, MON_DATA_PERSONALITY);
-
- HandleLoadSpecialPokePic(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].coords,
- gMonFrontPicCoords[species].y_offset,
- ewram_addr,
- gUnknown_081FAF4C[1],
- species,
- personality);
- *b += 1;
- return 0xFF;
- case 1:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- personality = GetMonData(mon, MON_DATA_PERSONALITY);
- otId = GetMonData(mon, MON_DATA_OT_ID);
-
- palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedObjectPalette(palette);
- GetMonSpriteTemplate_803C56C(palette->tag, 1);
- *b += 1;
- return 0xFF;
- }
-}
-
-static u16 GetMonMove(struct Pokemon *mon, u8 moveId)
-{
- switch (moveId)
- {
- case 0:
- return GetMonData(mon, MON_DATA_MOVE1);
- case 1:
- return GetMonData(mon, MON_DATA_MOVE2);
- case 2:
- return GetMonData(mon, MON_DATA_MOVE3);
- default:
- return GetMonData(mon, MON_DATA_MOVE4);
- }
-}
-
-static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId)
-{
- switch (moveId)
- {
- case 0:
- return GetMonData(mon, MON_DATA_PP1);
- case 1:
- return GetMonData(mon, MON_DATA_PP2);
- case 2:
- return GetMonData(mon, MON_DATA_PP3);
- default:
- return GetMonData(mon, MON_DATA_PP4);
- }
-}
-
-static bool8 sub_809F7D0(u8 taskId)
-{
- struct Pokemon mon;
- u16 move;
-
- sub_809F678(&mon);
- move = GetMonMove(&mon, pssData.selectedMoveIndex);
- if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN)
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-void sub_809F814(u8 taskId)
-{
- s16 *taskData = gTasks[taskId].data;
-
- if (taskData[14] < 4)
- {
- taskData[14]++;
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].func = sub_809E260;
- taskData[0] = 4;
- taskData[13] = 1;
- pssData.selectedMoveIndex = taskData[15];
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].func = sub_809E260;
- taskData[0] = 4;
- taskData[13] = 1;
- pssData.selectedMoveIndex = taskData[15];
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- if (pssData.page != PSS_PAGE_BATTLE_MOVES)
- {
- if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- gTasks[taskId].func = sub_809E260;
-
- SummaryScreenHandleLeftRightInput(taskId, -1);
- sub_80A1488(1, taskData[15]);
- sub_80A1654(1, taskData[15]);
- }
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- if (pssData.page != pssData.lastPage)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- gTasks[taskId].func = sub_809E260;
-
- SummaryScreenHandleLeftRightInput(taskId, 1);
- sub_80A1488(1, taskData[15]);
- sub_80A1654(1, taskData[15]);
- }
- }
- else if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
- {
- sub_80A1488(2, taskData[15]);
- sub_80A1654(2, taskData[15]);
-
- gTasks[taskId].func = sub_809E260;
- }
-}
-
-static void sub_809F9D0(u8 taskId, u8 b)
-{
- s16 *taskData = gTasks[taskId].data;
- taskData[14] = 0;
- taskData[15] = b;
-
- sub_80A1488(-2, 4);
- sub_80A1654(-2, 4);
- Menu_EraseWindowRect(11, 15, 28, 18);
- Menu_PrintText(gOtherText_CantForgetHMs, 11, 15);
-
- gTasks[taskId].func = sub_809F814;
-}
-
-u8 sub_809FA30(void)
-{
- return pssData.switchMoveIndex;
-}
-
-// void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d)
-// {
-// u16 *vramAddr = (u16 *)(VRAM + 0xF000);
-
-// vramAddr[(d * 32) + c] = (b * 0x1000) + (a * 2) + 0x200 + 0x80;
-// vramAddr[(d * 32) + c + 32] = (b * 0x1000) + (a * 2) + 0x200 + 0x81;
-// }
-__attribute__((naked))
-void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsls r1, 24\n\
- lsls r2, 24\n\
- lsls r3, 24\n\
- lsrs r2, 23\n\
- lsrs r3, 18\n\
- ldr r4, _0809FA70 @ =0x0600f000\n\
- adds r3, r4\n\
- adds r2, r3\n\
- lsrs r1, 12\n\
- lsrs r0, 23\n\
- movs r4, 0x80\n\
- lsls r4, 2\n\
- adds r3, r4, 0\n\
- adds r0, r3\n\
- adds r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, 0x80\n\
- strh r0, [r2]\n\
- adds r2, 0x40\n\
- adds r1, 0x81\n\
- strh r1, [r2]\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809FA70: .4byte 0x0600f000\n\
- .syntax divided\n");
-}
-
-void GetStringCenterAlignXOffset(u8 a, u8 b, u8 c)
-{
- GetStringCenterAlignXOffsetWithLetterSpacing(a, 15, b, c);
-}
-
-bool8 sub_809FA94(struct Pokemon *mon)
-{
- if (!IsShiny(mon))
- {
- LoadPalette(sUnknown_083C157C, 4, 2);
- return FALSE;
- }
- else
- {
- LoadPalette(sUnknown_083C157E, 4, 2);
- return TRUE;
- }
-}
-
-static void sub_809FAC8(struct Pokemon *mon)
-{
- bool8 shinyDexNum;
- u16 dexNum;
- u8 *buffer;
-
- if (GetMonData(mon, MON_DATA_IS_EGG))
- {
- Menu_EraseWindowRect(1, 2, 4, 3);
- Menu_EraseWindowRect(3, 16, 9, 17);
- Menu_EraseWindowRect(0, 12, 11, 15);
- GetMonNickname(mon, gStringVar1);
- sub_80A1FF8(gStringVar1, 13, 3, 16);
- LoadPalette(sUnknown_083C157C, 4, 2);
- }
- else
- {
- shinyDexNum = sub_809FA94(mon);
- dexNum = SpeciesToPokedexNum(GetMonData(mon, MON_DATA_SPECIES));
- if (dexNum != 0xFFFF)
- {
- if (!shinyDexNum)
- {
- GetStringCenterAlignXOffset(2, 1, 2);
- sub_80A1F98(dexNum, 13, 3, 2, 17, 16, 1);
- }
- else
- {
- GetStringCenterAlignXOffsetWithLetterSpacing(2, 8, 1, 2);
- sub_80A1F98(dexNum, 8, 3, 2, 17, 16, 1);
- }
- }
- else
- {
- Menu_EraseWindowRect(1, 2, 4, 3);
- }
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = GetMonNickname(mon, buffer);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x3C;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 1, 12);
-
- sub_80A0958(mon);
- }
-}
-
-static void sub_809FBE4(void)
-{
- u8 i;
-
- for (i = 0; i < 28; i++)
- {
- sub_80A1918(i, 1);
- }
-
- Menu_EraseWindowRect(11, 4, 29, 18);
-}
-
-static void sub_809FC0C(void)
-{
- Menu_PrintText(gOtherText_Type2, 11, 6);
- GetStringCenterAlignXOffset(0, 22, 4);
- GetStringCenterAlignXOffset(2, 23, 4);
-}
-
-static void sub_809FC34(struct Pokemon *mon)
-{
- u8 i;
- u8 *buffer;
- u16 friendship;
- u8 language;
- u16 species;
- u8 ability;
-
- for (i = 0; i < 5; i++)
- {
- sub_80A1918(i, 1);
- }
-
- Menu_EraseWindowRect(11, 9, 28, 12);
- if (GetMonData(mon, MON_DATA_IS_EGG))
- {
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, gOtherText_OriginalTrainer);
- buffer = StringCopy(buffer, gOtherText_FiveQuestionsAndSlash);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x4E;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 11, 4);
-
- sub_80A1EF8(gOtherText_FiveQuestionsAndSlash, 13, 193, 32, 1);
- sub_80A198C(9, 120, 48, 0);
-
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
- if (friendship < 6)
- {
- Menu_PrintText(gOtherText_EggAbout, 11, 9);
- }
- else if (friendship < 11)
- {
- Menu_PrintText(gOtherText_EggSoon, 11, 9);
- }
- else if (friendship < 41)
- {
- Menu_PrintText(gOtherText_EggSomeTime, 11, 9);
- }
- else
- {
- Menu_PrintText(gOtherText_EggLongTime, 11, 9);
- }
-
- PokemonSummaryScreen_PrintEggTrainerMemo(mon, 11, 14);
- }
- else
- {
- GetMonData(mon, MON_DATA_OT_NAME, gStringVar2);
- language = GetMonData(mon, MON_DATA_LANGUAGE);
- ConvertInternationalString(gStringVar2, language);
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, gOtherText_OriginalTrainer);
-
- if (GetMonData(mon, MON_DATA_OT_GENDER) == MALE)
- {
- buffer = sub_80A1E58(buffer, 9);
- }
- else
- {
- buffer = sub_80A1E58(buffer, 10);
- }
-
- buffer = StringCopy(buffer, gStringVar2);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x4E;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 11, 4);
-
- sub_80A1F98(GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF, 13, 5, 2, 193, 32, 1);
-
- species = GetMonData(mon, MON_DATA_SPECIES);
- sub_80A198C(gBaseStats[species].type1, 120, 48, 0);
- if (gBaseStats[species].type1 != gBaseStats[species].type2)
- {
- sub_80A198C(gBaseStats[species].type2, 160, 48, 1);
- }
-
- ability = GetAbilityBySpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_ALT_ABILITY));
- sub_80A1FF8(gAbilityNames[ability], 13, 11, 9);
- Menu_PrintText(gAbilityDescriptions[ability], 11, 11);
-
- PokemonSummaryScreen_PrintTrainerMemo(mon, 11, 14);
- }
-}
-
-static void sub_809FE6C(struct Pokemon *mon)
-{
- sub_809FC0C();
- sub_809FC34(mon);
-}
-
-static void sub_809FE80(void)
-{
- Menu_EraseWindowRect(14, 4, 18, 5);
- Menu_EraseWindowRect(25, 4, 30, 5);
- Menu_EraseWindowRect(11, 9, 28, 12);
- Menu_EraseWindowRect(11, 14, 28, 17);
-}
-
-static void sub_809FEB8(void)
-{
- sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14);
- sub_80A1FF8(gOtherText_NextLv, 13, 11, 16);
- Menu_PrintText(gOtherText_Terminator18, 21, 16);
-
- sub_80A1F48(gOtherText_HP, 13, 11, 7, 42);
- sub_80A1F48(gOtherText_Attack, 13, 11, 9, 42);
- sub_80A1F48(gOtherText_Defense, 13, 11, 11, 42);
- sub_80A1F48(gOtherText_SpAtk, 13, 22, 7, 36);
- sub_80A1F48(gOtherText_SpDef, 13, 22, 9, 36);
- sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36);
-}
-
-static void sub_809FF64(struct Pokemon *mon)
-{
- u8 i;
- u16 heldItem;
- u8 *buffer;
-
- for (i = 0; i < 5; i++)
- {
- sub_80A1918(i, 1);
- }
-
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
- PrintHeldItemName(heldItem, 11, 4);
- PrintNumRibbons(mon);
-
- buffer = gStringVar1;
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_EXP));
- MenuPrint_RightAligned(buffer, 29, 14);
- DrawExperienceProgressBar(mon, 23, 16);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_ATK));
- sub_8072BD8(buffer, 16, 9, 50);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_DEF));
- sub_8072BD8(buffer, 16, 11, 50);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPATK));
- sub_8072BD8(buffer, 27, 7, 18);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPDEF));
- sub_8072BD8(buffer, 27, 9, 18);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPEED));
- sub_8072BD8(buffer, 27, 11, 18);
-
- buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_HP), 24, 1);
- *buffer++ = CHAR_SLASH;
- buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_MAX_HP), 48, 1);
-
- Menu_PrintTextPixelCoords(gStringVar1, 126, 56, 1);
-}
-
-static void sub_80A0090(struct Pokemon *mon)
-{
- sub_809FEB8();
- sub_809FF64(mon);
-}
-
-static void sub_80A00A4(void)
-{
- Menu_EraseWindowRect(11, 4, 19, 5);
- Menu_EraseWindowRect(16, 7, 21, 8);
- Menu_EraseWindowRect(17, 9, 21, 12);
- Menu_EraseWindowRect(27, 7, 29, 12);
- Menu_EraseWindowRect(22, 14, 28, 15);
- Menu_EraseWindowRect(23, 16, 28, 17);
-}
-
-static void sub_80A00F4(u8 a)
-{
- if (pssData.moveToLearn != 0 || a != 4)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A1FF8(gOtherText_Power2, 13, 1, 15);
- sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17);
- }
- else
- {
- sub_80A1FF8(gOtherText_Appeal2, 13, 1, 15);
- sub_80A1FF8(gOtherText_Jam2, 13, 1, 17);
- }
- }
-}
-
-static void sub_80A015C(struct Pokemon *mon)
-{
- u8 i;
- u16 move;
- u16 curPP;
- u8 ppBonuses;
- u8 maxPP;
- u8 *buffer;
-
- for (i = 0; i < 4; i++)
- {
- move = GetMonMove(mon, i);
- curPP = GetMonMovePP(mon, i);
-
- if (move == 0)
- {
- sub_80A1918(i, 1);
- sub_80A1FF8(gOtherText_OneDash, 13, 15, (2 * i) + 4);
- Menu_PrintText(gOtherText_TwoDashes, 26, (2 * i) + 4);
- }
- else
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i);
- }
- else
- {
- sub_80A198C(gContestMoves[move].contestCategory + 18, 87, ((2 * i) + 4) * 8, i);
- }
-
- sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4);
- GetStringCenterAlignXOffset(1, 24, (2 * i) + 4);
-
- ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
- maxPP = CalculatePPWithBonus(move, ppBonuses, i);
-
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, curPP, 14, 1);
- *buffer++ = CHAR_SLASH;
- sub_8072C14(buffer, maxPP, 32, 1);
- Menu_PrintText(gStringVar1, 25, (2 * i) + 4);
- }
- }
-}
-
-static void sub_80A029C(struct Pokemon *mon)
-{
- u8 *buffer;
- u16 move;
- u8 pp;
-
- if (pssData.moveToLearn == 0)
- {
- sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12);
- return;
- }
-
- move = pssData.moveToLearn;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- sub_80A198C(gBattleMoves[move].type, 87, 96, 4);
- else
- sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- sub_80A1FF8(gMoveNames[move], 10, 15, 12);
- else
- sub_80A1FF8(gMoveNames[move], 9, 15, 12);
-
- GetStringCenterAlignXOffset(1, 24, 12);
-
- buffer = gStringVar1;
- pp = gBattleMoves[move].pp;
- buffer = sub_8072C14(buffer, pp, 14, 1);
- *buffer++ = CHAR_SLASH;
- buffer = sub_8072C14(buffer, pp, 32, 1);
- Menu_PrintText(gStringVar1, 25, 12);
-}
-
-static void sub_80A0390(void)
-{
- u8 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- Menu_EraseWindowRect(15, (i * 2) + 4, 28, (i * 2) + 5);
- }
-}
-
-u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex)
-{
- u16 move;
-
- if (selectedMoveIndex != MAX_MON_MOVES)
- {
- move = GetMonMove(mon, selectedMoveIndex);
- }
- else
- {
- if (pssData.moveToLearn != 0)
- {
- move = pssData.moveToLearn;
- }
- else
- {
- move = 0xFFFF;
- }
- }
-
- return move;
-}
-
-void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex)
-{
- u16 move = sub_80A03BC(mon, *selectedMoveIndex);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A04CC(move);
- sub_80A057C(0xFFFF);
- }
- else
- {
- sub_80A057C(move);
- }
-}
-
-static void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex)
-{
- u16 move = sub_80A03BC(mon, *selectedMoveIndex);
- Menu_EraseWindowRect(11, 15, 28, 18);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A046C(move);
- }
- else
- {
- sub_80A0498(move);
- }
-
- sub_80A03F0(mon, selectedMoveIndex);
-}
-
-static void sub_80A046C(u16 move)
-{
- if (move == 0xFFFF) return;
-
- Menu_PrintText(gMoveDescriptions[move - 1], 11, 15);
-}
-
-static void sub_80A0498(u16 move)
-{
- if (move == 0xFFFF) return;
-
- Menu_PrintText(gContestEffectStrings[gContestMoves[move].effect], 11, 15);
-}
-
-static void sub_80A04CC(u16 move)
-{
- u8 *buffer;
-
- if (move == 0xFFFF) return;
-
- if (gBattleMoves[move].power <= 1)
- {
- buffer = gStringVar1;
- buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1);
- Menu_PrintText(gStringVar1, 7, 15);
- }
- else
- {
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, gBattleMoves[move].power, 21, 1);
- Menu_PrintText(gStringVar1, 7, 15);
- }
-
- if (gBattleMoves[move].accuracy == 0)
- {
- buffer = gStringVar1;
- buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1);
- Menu_PrintText(gStringVar1, 7, 17);
- }
- else
- {
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, gBattleMoves[move].accuracy, 21, 1);
- Menu_PrintText(gStringVar1, 7, 17);
- }
-}
-
-#ifdef NONMATCHING // The two vramAddr lines are non-matching.
-static void sub_80A057C(u16 move)
-{
- u8 appeal;
- u8 jam;
- u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6800);
-
- if (move == 0xFFFF) return;
-
- appeal = gContestEffects[gContestMoves[move].effect].appeal;
- if (appeal != 0xFF)
- {
- appeal = appeal / 10;
- }
-
- for (i = 0; i < 8; i++)
- {
- u16 tile = 0x1039;
- int and = 3;
- int offset = 0x3CC / 2;
- if (appeal != 0xFF && i < appeal)
- {
- tile = 0x103A;
- }
-
- *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile;
- }
-
- if (move == 0xFFFF) return;
-
- jam = gContestEffects[gContestMoves[move].effect].jam;
- if (jam != 0xFF)
- {
- jam = jam / 10;
- }
-
- for (i = 0; i < 8; i++)
- {
- u16 tile = 0x103D;
- int and = 3;
- int offset = 0x226;
- if (jam != 0xFF && i < jam)
- {
- tile = 0x103C;
- }
-
- *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile;
- }
-}
-#else
-__attribute__((naked))
-static void sub_80A057C(u16 move)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldr r0, _080A0648 @ =0x06006800\n\
- mov r8, r0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- ldr r2, _080A0654 @ =gContestMoves\n\
- lsls r3, r5, 3\n\
- adds r0, r3, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x1]\n\
- mov r10, r2\n\
- mov r9, r3\n\
- cmp r4, 0xFF\n\
- beq _080A05B8\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A05B8:\n\
- movs r2, 0\n\
- movs r7, 0x3\n\
- movs r6, 0xF3\n\
- lsls r6, 2\n\
-_080A05C0:\n\
- ldr r3, _080A0658 @ =0x00001039\n\
- cmp r4, 0xFF\n\
- beq _080A05CC\n\
- cmp r2, r4\n\
- bcs _080A05CC\n\
- adds r3, 0x1\n\
-_080A05CC:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r7\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r6\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A05C0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- mov r0, r9\n\
- add r0, r10\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
- cmp r4, 0xFF\n\
- beq _080A060C\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A060C:\n\
- movs r2, 0\n\
- movs r6, 0x3\n\
- ldr r5, _080A065C @ =0x0000044c\n\
-_080A0612:\n\
- ldr r3, _080A0660 @ =0x0000103d\n\
- cmp r4, 0xFF\n\
- beq _080A061E\n\
- cmp r2, r4\n\
- bcs _080A061E\n\
- subs r3, 0x1\n\
-_080A061E:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r6\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r5\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A0612\n\
-_080A063A:\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A0648: .4byte 0x06006800\n\
-_080A064C: .4byte 0x0000ffff\n\
-_080A0650: .4byte gContestEffects\n\
-_080A0654: .4byte gContestMoves\n\
-_080A0658: .4byte 0x00001039\n\
-_080A065C: .4byte 0x0000044c\n\
-_080A0660: .4byte 0x0000103d\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon)
-{
- u32 trainerId;
-
- if (ewram18000_3 == gEnemyParty)
- {
- u8 enemyId = GetMultiplayerId() ^ 1;
- trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF;
- StringCopy(gStringVar1, gLinkPlayers[enemyId].name);
- Text_StripExtCtrlCodes(gStringVar1);
- }
- else
- {
- trainerId = GetPlayerTrainerId() & 0xFFFF;
- StringCopy(gStringVar1, gSaveBlock2.playerName);
- }
-
- if (trainerId != (GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF))
- return FALSE;
-
- GetMonData(mon, MON_DATA_OT_NAME, gStringVar2);
-
- if (!StringCompareWithoutExtCtrlCodes(gStringVar1, gStringVar2))
- return TRUE;
-
- return FALSE;
-}
-
-static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top)
-{
- u8 locationMet;
- u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME);
-
- if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD))
- {
- Menu_PrintText(gOtherText_EggObtainedInTrade, left, top);
- return;
- }
-
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
-
- if (locationMet == 255)
- {
- // Eggs received from Pokemon Box.
- Menu_PrintText(gOtherText_EggNicePlace, left, top);
- return;
- }
-
- if (!PokemonSummaryScreen_CheckOT(mon))
- {
- Menu_PrintText(gOtherText_EggObtainedInTrade, left, top);
- return;
- }
-
- asm(""); // needed to match for some reason
-
- if (locationMet == 253)
- {
- Menu_PrintText(gOtherText_EggHotSprings, left, top);
- return;
- }
-
- Menu_PrintText(gOtherText_EggDayCare, left, top);
-}
-
-static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *mon, u8 left, u8 top)
-{
- u8 locationMet;
- u8 gameMet;
- u8 *ptr = gStringVar4;
- u8 nature = GetNature(mon);
-
-#if ENGLISH
- ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
-
- if (nature != NATURE_BOLD && nature != NATURE_GENTLE)
- {
- ptr = StringCopy(ptr, gOtherText_Terminator4);
- }
-
- ptr = StringCopy(ptr, gOtherText_Nature);
-#elif GERMAN
- ptr = StringCopy(gStringVar4, gOtherText_Nature);
- ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
- ptr = StringCopy(ptr, gOtherText_Terminator4);
-#endif
-
- if (PokemonSummaryScreen_CheckOT(mon) == TRUE)
- {
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
-
- if (GetMonData(mon, MON_DATA_MET_LEVEL) == 0)
- {
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Egg2);
- }
- else if (locationMet >= 88)
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Met);
- }
- }
- else
- {
- gameMet = GetMonData(mon, MON_DATA_MET_GAME);
-
- if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD))
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
- if (locationMet == 0xFF)
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_FatefulEncounter);
- }
- else if (locationMet >= 88)
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Met2);
- }
- }
- }
-
- Menu_PrintText(gStringVar4, left++, top++);
-}
-
-static void sub_80A0958(struct Pokemon *mon)
-{
- u16 species;
- u8 *buffer;
- u8 level;
-
- species = GetMonData(mon, MON_DATA_SPECIES);
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x11;
- buffer[2] = 0x7;
- buffer[3] = CHAR_SLASH;
- buffer += 4;
- buffer = StringCopy(buffer, gSpeciesNames[species]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x50;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 0, 14);
- Menu_EraseWindowRect(3, 16, 9, 17);
-
- level = GetMonData(mon, MON_DATA_LEVEL);
-
- buffer = sub_80A1E58(gStringVar1, 13);
- buffer[0] = 0x34;
- buffer += 1;
- buffer = ConvertIntToDecimalString(buffer, level);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x20;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 3, 16);
- sub_80A0A2C(mon, 7, 16);
-}
-
-static void sub_80A0A2C(struct Pokemon *mon, u8 left, u8 top)
-{
- const u8 *genderSymbol;
- u8 var1;
- u8 bottom;
- u16 species = GetMonData(mon, MON_DATA_SPECIES2);
-
- if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
- {
- u8 gender = GetMonGender(mon);
- switch (gender)
- {
- default:
- bottom = top + 1;
- Menu_EraseWindowRect(left, top, left, bottom);
- return;
- case MON_MALE:
- genderSymbol = gOtherText_MaleSymbol2;
- var1 = 11;
- break;
- case MON_FEMALE:
- genderSymbol = gOtherText_FemaleSymbolAndLv;
- var1 = 12;
- break;
- }
-
- sub_80A1FF8(genderSymbol, var1, left, top);
- }
-}
-
-u8 GetNumRibbons(struct Pokemon *mon)
-{
- u8 numRibbons = GetMonData(mon, MON_DATA_COOL_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_BEAUTY_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_CUTE_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_SMART_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_TOUGH_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_CHAMPION_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_WINNING_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_VICTORY_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_ARTIST_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_EFFORT_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_1);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_2);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_3);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_4);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_5);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_6);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_7);
-
- return numRibbons;
-}
-
-static void PrintNumRibbons(struct Pokemon *mon)
-{
- u8 numRibbons = GetNumRibbons(mon);
-
- if (numRibbons == 0)
- {
- StringCopy(gStringVar1, gOtherText_None);
- }
- else
- {
- u8 ribbonsStringLength;
- u8 *text;
-
- StringCopy(gStringVar1, gOtherText_Ribbons00);
- ribbonsStringLength = StringLength(gStringVar1);
-
- text = &gStringVar1[ribbonsStringLength - 2];
-
- text[0] = EXT_CTRL_CODE_BEGIN;
- text[1] = 0x14;
- text[2] = 6;
- ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2);
- }
-
- Menu_PrintText(sUnknown_083C15AE, 21, 4);
-}
-
-static void PrintHeldItemName(u16 itemId, u8 left, u8 top)
-{
- if (itemId == ITEM_ENIGMA_BERRY
- && sub_80F9344() == TRUE
- && IsLinkDoubleBattle() == TRUE
- && (pssData.monIndex == 1 || pssData.monIndex == 4 || pssData.monIndex == 5))
- {
- StringCopy(gStringVar1, ItemId_GetItem(itemId)->name);
- }
- else if (itemId == 0)
- {
- StringCopy(gStringVar1, gOtherText_None);
- }
- else
- {
- CopyItemName(itemId, gStringVar1);
- }
-
- Menu_PrintText(sUnknown_083C15B4, left, top);
-}
-
-static void DrawExperienceProgressBar(struct Pokemon *mon, u8 left, u8 top)
-{
- u32 curExperience;
- u8 level;
- u16 species;
- u8 i;
- u16 *vramAddr;
- u32 expToNextLevel = 0;
- s64 numExpProgressBarTicks = 0;
-
- curExperience = GetMonData(mon, MON_DATA_EXP);
- level = GetMonData(mon, MON_DATA_LEVEL);
- species = GetMonData(mon, MON_DATA_SPECIES);
-
- // The experience progress bar is shown as empty when the Pokemon is already level 100.
- if (level < 100)
- {
- u32 nextLevelExp;
- u32 expSinceLastLevel;
- u32 expBetweenLevels;
- u32 curLevelExperience;
-
- nextLevelExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
- expToNextLevel = nextLevelExp - curExperience;
- curLevelExperience = gExperienceTables[gBaseStats[species].growthRate][level];
- expBetweenLevels = (nextLevelExp - curLevelExperience);
- expSinceLastLevel = curExperience - curLevelExperience;
-
- // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar.
- // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator
- // is multiplied by 64.
- numExpProgressBarTicks = (expSinceLastLevel * 64) / expBetweenLevels;
- if (numExpProgressBarTicks == 0 && expSinceLastLevel != 0)
- {
- // Ensure sure some exp. gain is visible in the progress bar.
- numExpProgressBarTicks = 1;
- }
- }
-
- ConvertIntToDecimalString(gStringVar1, expToNextLevel);
- MenuPrint_RightAligned(gStringVar1, left + 6, top);
-
-
- // Draw each of the 8 tiles that make up the experience progress bar.
- vramAddr = (u16 *)(VRAM + 0x4CAA);
- for (i = 0; i < 8; i++)
- {
- u16 tile;
- u16 baseTile = 0x2062;
-
- if (numExpProgressBarTicks > 7)
- {
- tile = 0x206A; // full exp. bar block
- }
- else
- {
- tile = (numExpProgressBarTicks % 8) + baseTile;
- }
-
- vramAddr[i] = tile;
-
- numExpProgressBarTicks -= 8;
- if (numExpProgressBarTicks < 0)
- {
- numExpProgressBarTicks = 0;
- }
- }
-}
-
-// Prints the text displayed in the top-left or top-right of the screen.
-// Each of the 4 summary screens displays different text.
-static void PrintSummaryWindowHeaderText(void)
-{
- u8 *buffer = gStringVar1;
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x12;
- buffer[2] = 0x2;
-
- buffer += 3;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerTextId]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x58;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 0, 0);
-
- if (pssData.headerActionTextId != 0)
- {
- GetStringCenterAlignXOffset(5, 23, 0);
- GetStringCenterAlignXOffset(6, 24, 0);
- }
- else
- {
- Menu_EraseWindowRect(23, 0, 24, 1);
- }
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerActionTextId]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x28;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 25, 0);
-}
-
-// If the given pokemon previously had the pokerus virus, a small
-// dot will be drawn in between the pokeball and the mon's level.
-static void DrawPokerusSurvivorDot(struct Pokemon *mon)
-{
- u16 *vram1 = (u16 *)(VRAM + 0xE444);
- u16 *vram2 = (u16 *)(VRAM + 0xEC44);
-
- if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0))
- {
- *vram1 = 0x2C;
- *vram2 = 0x2C;
- }
- else
- {
- *vram1 = 0x081A;
- *vram2 = 0x081A;
- }
-}
-
-// Draws the 4 small navigation circles at the top of the pokemon summary screen.
-#ifdef NONMATCHING
-static void DrawSummaryScreenNavigationDots(void)
-{
- void *dest;
- u16 arr[8];
- u8 i = 0;
- struct PokemonSummaryScreenStruct *SS = (struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000);
- u16 var1 = 0x4040;
- u16 var2 = 0x404A;
-
- for (i = 0; i < 4; i++)
- {
- if (i < SS->unk75)
- {
- arr[i * 2] = var1;
- arr[(i * 2) + 1] = var1 + 1;
- }
- else if (i > SS->unk76)
- {
- arr[i * 2] = var2;
- arr[(i * 2) + 1] = var2 + 1;
- }
- else
- {
- if (i < SS->unkB)
- {
- arr[i * 2] = 0x4046;
- arr[(i * 2) + 1] = 0x4046 + 1;
- }
-
- if (i == SS->unkB)
- {
- if (i != SS->unk76)
- {
- arr[i * 2] = 0x4041;
- arr[(i * 2) + 1] = 0x4041 + 1;
- }
- else
- {
- arr[i * 2] = 0x404B;
- arr[(i * 2) + 1] = 0x404B + 1;
- }
- }
-
- if (i > SS->unkB)
- {
- if (i != SS->unk76)
- {
- arr[i * 2] = 0x4043;
- arr[(i * 2) + 1] = 0x4043 + 1;
- }
- else
- {
- arr[i * 2] = 0x4048;
- arr[(i * 2) + 1] = 0x4048 + 1;
- }
- }
- }
- }
-
- DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE016), 16);
-
- for (i = 0; i < 8; i++)
- {
- arr[i] += 0x10;
- }
-
- DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE056), 16);
-}
-#else
-__attribute__((naked))
-static void DrawSummaryScreenNavigationDots(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x10\n\
- movs r3, 0\n\
- ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\
- adds r5, r6, 0\n\
- ldr r1, _080A0F28 @ =0x00004040\n\
- mov r8, r1\n\
- ldr r2, _080A0F2C @ =0x0000404a\n\
- mov r10, r2\n\
-_080A0F02:\n\
- adds r0, r5, 0\n\
- adds r0, 0x75\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- bcs _080A0F30\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r4, r8\n\
- strh r4, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r7, sp\n\
- adds r0, r7, r1\n\
- strh r4, [r0]\n\
- b _080A0FE2\n\
- .align 2, 0\n\
-_080A0F24: .4byte gSharedMem + 0x18000\n\
-_080A0F28: .4byte 0x00004040\n\
-_080A0F2C: .4byte 0x0000404a\n\
-_080A0F30:\n\
- movs r0, 0x76\n\
- adds r0, r6\n\
- mov r12, r0\n\
- ldrb r1, [r0]\n\
- cmp r3, r1\n\
- bls _080A0F52\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r4, sp\n\
- adds r0, r4, r1\n\
- strh r2, [r0]\n\
- b _080A0FE2\n\
-_080A0F52:\n\
- ldrb r4, [r5, 0xB]\n\
- cmp r3, r4\n\
- bcs _080A0F6E\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0F88 @ =0x00004046\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0F6E:\n\
- cmp r3, r4\n\
- bne _080A0FA6\n\
- mov r0, r12\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0F90\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0F8C @ =0x00004041\n\
- b _080A0F9A\n\
- .align 2, 0\n\
-_080A0F88: .4byte 0x00004046\n\
-_080A0F8C: .4byte 0x00004041\n\
-_080A0F90:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0FC4 @ =0x0000404b\n\
-_080A0F9A:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FA6:\n\
- ldrb r0, [r5, 0xB]\n\
- cmp r3, r0\n\
- bls _080A0FE2\n\
- adds r0, r6, 0\n\
- adds r0, 0x76\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0FCC\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0FC8 @ =0x00004043\n\
- b _080A0FD6\n\
- .align 2, 0\n\
-_080A0FC4: .4byte 0x0000404b\n\
-_080A0FC8: .4byte 0x00004043\n\
-_080A0FCC:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A1034 @ =0x00004048\n\
-_080A0FD6:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FE2:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x3\n\
- bls _080A0F02\n\
- ldr r1, _080A1038 @ =0x0600e016\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- mov r2, sp\n\
- str r2, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- movs r3, 0\n\
-_080A0FFE:\n\
- lsls r0, r3, 1\n\
- mov r4, sp\n\
- adds r1, r4, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x10\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x7\n\
- bls _080A0FFE\n\
- ldr r1, _080A1044 @ =0x0600e056\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- str r4, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- add sp, 0x10\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1034: .4byte 0x00004048\n\
-_080A1038: .4byte 0x0600e016\n\
-_080A103C: .4byte 0x040000d4\n\
-_080A1040: .4byte 0x80000008\n\
-_080A1044: .4byte 0x0600e056\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-__attribute__((naked))
-void sub_80A1048(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r0, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- ldr r1, _080A10A0 @ =gTasks + 0x8\n\
- adds r6, r0, r1\n\
- ldrh r0, [r6]\n\
- ldrh r1, [r6, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r6, 0x2]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080A106E\n\
- b _080A1224\n\
-_080A106E:\n\
- movs r5, 0x2\n\
- ldrsh r2, [r6, r5]\n\
- ldr r0, _080A10A4 @ =0x0000024a\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A10A8 @ =gUnknown_08E73508\n\
- adds r4, r0, r1\n\
- ldr r5, _080A10AC @ =0x0600e480\n\
- lsls r2, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r7, r1, 0\n\
- cmp r2, r0\n\
- bhi _080A10B4\n\
- ldr r0, _080A10B0 @ =0x040000d4\n\
- str r4, [r0]\n\
- str r5, [r0, 0x4]\n\
- lsrs r1, r2, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A10E0\n\
- .align 2, 0\n\
-_080A10A0: .4byte gTasks + 0x8\n\
-_080A10A4: .4byte 0x0000024a\n\
-_080A10A8: .4byte gUnknown_08E73508\n\
-_080A10AC: .4byte 0x0600e480\n\
-_080A10B0: .4byte 0x040000d4\n\
-_080A10B4:\n\
- ldr r3, _080A110C @ =0x040000d4\n\
- str r4, [r3]\n\
- str r5, [r3, 0x4]\n\
- ldr r0, _080A1110 @ =0x80000800\n\
- str r0, [r3, 0x8]\n\
- ldr r0, [r3, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r4, r0\n\
- adds r5, r0\n\
- ldr r1, _080A1114 @ =0xfffff000\n\
- adds r2, r1\n\
- cmp r2, r0\n\
- bhi _080A10B4\n\
- str r4, [r3]\n\
- str r5, [r3, 0x4]\n\
- lsrs r0, r2, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r3, 0x8]\n\
- ldr r0, [r3, 0x8]\n\
-_080A10E0:\n\
- movs r5, 0x2\n\
- ldrsh r0, [r6, r5]\n\
- ldr r1, _080A1118 @ =0x0000026a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A111C @ =0x0600e4c0\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A1120\n\
- ldr r0, _080A110C @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A114C\n\
- .align 2, 0\n\
-_080A110C: .4byte 0x040000d4\n\
-_080A1110: .4byte 0x80000800\n\
-_080A1114: .4byte 0xfffff000\n\
-_080A1118: .4byte 0x0000026a\n\
-_080A111C: .4byte 0x0600e4c0\n\
-_080A1120:\n\
- ldr r2, _080A1178 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A117C @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A1180 @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A1120\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A114C:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r6, r1]\n\
- ldr r1, _080A1184 @ =0x0000024a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A1188 @ =0x0600ec80\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A118C\n\
- ldr r0, _080A1178 @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A11B8\n\
- .align 2, 0\n\
-_080A1178: .4byte 0x040000d4\n\
-_080A117C: .4byte 0x80000800\n\
-_080A1180: .4byte 0xfffff000\n\
-_080A1184: .4byte 0x0000024a\n\
-_080A1188: .4byte 0x0600ec80\n\
-_080A118C:\n\
- ldr r2, _080A11E4 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A11E8 @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A11EC @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A118C\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A11B8:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r6, r1]\n\
- ldr r1, _080A11F0 @ =0x0000026a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A11F4 @ =0x0600ecc0\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A11F8\n\
- ldr r0, _080A11E4 @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A1224\n\
- .align 2, 0\n\
-_080A11E4: .4byte 0x040000d4\n\
-_080A11E8: .4byte 0x80000800\n\
-_080A11EC: .4byte 0xfffff000\n\
-_080A11F0: .4byte 0x0000026a\n\
-_080A11F4: .4byte 0x0600ecc0\n\
-_080A11F8:\n\
- ldr r2, _080A12B0 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A12B4 @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A12B8 @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A11F8\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A1224:\n\
- ldrb r4, [r6, 0x2]\n\
- ldrh r7, [r6, 0x2]\n\
- ldrh r0, [r6]\n\
- mov r12, r0\n\
- cmp r4, 0x9\n\
- bhi _080A1272\n\
- adds r3, r6, 0x4\n\
- ldr r2, _080A12B0 @ =0x040000d4\n\
- ldr r5, _080A12BC @ =0x80000001\n\
-_080A1236:\n\
- lsls r1, r4, 1\n\
- ldr r6, _080A12C0 @ =0x0600e480\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- adds r6, 0x40\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- ldr r6, _080A12C4 @ =0x0600ec80\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- ldr r0, _080A12C8 @ =0x0600ecc0\n\
- adds r1, r0\n\
- str r3, [r2]\n\
- str r1, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x9\n\
- bls _080A1236\n\
-_080A1272:\n\
- mov r1, r12\n\
- lsls r0, r1, 16\n\
- cmp r0, 0\n\
- beq _080A1286\n\
- lsls r0, r7, 16\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- ble _080A1286\n\
- cmp r0, 0x9\n\
- ble _080A12A4\n\
-_080A1286:\n\
- lsls r0, r7, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9\n\
- ble _080A129A\n\
- ldr r0, _080A12CC @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A129A:\n\
- bl sub_80A1D18\n\
- mov r0, r8\n\
- bl DestroyTask\n\
-_080A12A4:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A12B0: .4byte 0x040000d4\n\
-_080A12B4: .4byte 0x80000800\n\
-_080A12B8: .4byte 0xfffff000\n\
-_080A12BC: .4byte 0x80000001\n\
-_080A12C0: .4byte 0x0600e480\n\
-_080A12C4: .4byte 0x0600ec80\n\
-_080A12C8: .4byte 0x0600ecc0\n\
-_080A12CC: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-static void sub_80A12D0(s8 a)
-{
- u8 newTaskId;
-
- Menu_EraseWindowRect(1, 18, 5, 19);
- sub_80A18E4(29);
-
- newTaskId = CreateTask(sub_80A1048, 0);
- gTasks[newTaskId].data[0] = a;
-
- if (a < 0)
- {
- gTasks[newTaskId].data[1] = 10;
- }
- else
- {
- gTasks[newTaskId].data[1] = 0;
- }
-
- gTasks[newTaskId].data[2] = 1;
-}
-
-// void sub_80A1334(u8 taskId)
-// {
-// u8 i;
-// s16 var1;
-
-// gTasks[taskId].data[1] += gTasks[taskId].data[0];
-
-// var1 = 0;
-// if (gTasks[taskId].data[1] >= 0)
-// {
-// var1 = 10;
-// if (gTasks[taskId].data[1] < 10)
-// {
-// var1 = gTasks[taskId].data[1];
-// }
-// }
-
-// if (var1 > 0)
-// {
-// u8 *vramAddr = (u8 *)(VRAM + 0x5B40);
-// for (i = 0; i < 7; i++)
-// {
-// CpuSet(&gUnknown_08E73E88[(i + 13) * 64], vramAddr, var1 & 0x1FFFFF);
-// vramAddr += 64;
-// }
-// }
-
-// if (var1 <= 9)
-// {
-// u8 *vramAddr = (u8 *)(VRAM + 0x5B40);
-// for (i = 0; i < 64; i++)
-// {
-// u16 val = gTasks[taskId].data[2];
-// CpuSet(&val, vramAddr, ((10 - var1) & 0x1FFFFF) | 0x800000);
-// }
-// }
-// else
-// {
-// Menu_EraseWindowRect(0, 19, 9, 19);
-// }
-
-// if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0)
-// {
-// if (pssData.page == PSS_PAGE_BATTLE_MOVES)
-// {
-// Menu_EraseWindowRect(0, 14, 9, 18);
-// sub_80A0958(pssData.loadedMon);
-
-// if (GetMonStatusAndPokerus(pssData.loadedMon))
-// {
-// sub_80A1FF8(gOtherText_Status, 13, 1, 18);
-// }
-
-// DestroyTask(taskId);
-// }
-// }
-
-// if (gTasks[taskId].data[1] > 9)
-// {
-// if (pssData.page == PSS_PAGE_BATTLE_MOVES)
-// {
-// sub_80A00F4(gTasks[taskId].data[3]);
-// }
-
-// sub_80A0428(pssData.loadedMon, &gTasks[taskId].data[3]);
-// DestroyTask(taskId);
-// }
-// }
-__attribute__((naked))
-static void sub_80A1334(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r0, 2\n\
- add r0, r10\n\
- lsls r0, 3\n\
- ldr r1, _080A13E4 @ =gTasks + 0x8\n\
- adds r7, r0, r1\n\
- ldrh r0, [r7]\n\
- ldrh r1, [r7, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r7, 0x2]\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- movs r0, 0\n\
- cmp r1, 0\n\
- blt _080A136A\n\
- movs r0, 0xA\n\
- cmp r1, 0xA\n\
- bgt _080A136A\n\
- ldrh r0, [r7, 0x2]\n\
-_080A136A:\n\
- lsls r0, 16\n\
- asrs r2, r0, 16\n\
- mov r9, r0\n\
- cmp r2, 0\n\
- ble _080A13A6\n\
- movs r0, 0xA\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A13E8 @ =0x06005b40\n\
- adds r4, r0, r1\n\
- movs r5, 0\n\
- adds r6, r2, 0\n\
- ldr r0, _080A13EC @ =0x001fffff\n\
- mov r8, r0\n\
-_080A1386:\n\
- adds r0, r5, 0\n\
- adds r0, 0xD\n\
- lsls r0, 6\n\
- ldr r1, _080A13F0 @ =gUnknown_08E73E88\n\
- adds r0, r1\n\
- adds r1, r4, 0\n\
- mov r2, r8\n\
- ands r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A1386\n\
-_080A13A6:\n\
- mov r1, r9\n\
- asrs r2, r1, 16\n\
- cmp r2, 0x9\n\
- bgt _080A13F4\n\
- ldr r4, _080A13E8 @ =0x06005b40\n\
- movs r5, 0\n\
- mov r8, sp\n\
- movs r0, 0xA\n\
- subs r6, r0, r2\n\
- ldr r0, _080A13EC @ =0x001fffff\n\
- ands r6, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- mov r9, r0\n\
-_080A13C2:\n\
- ldrh r0, [r7, 0x4]\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- mov r2, r9\n\
- orrs r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A13C2\n\
- b _080A1400\n\
- .align 2, 0\n\
-_080A13E4: .4byte gTasks + 0x8\n\
-_080A13E8: .4byte 0x06005b40\n\
-_080A13EC: .4byte 0x001fffff\n\
-_080A13F0: .4byte gUnknown_08E73E88\n\
-_080A13F4:\n\
- movs r0, 0\n\
- movs r1, 0x13\n\
- movs r2, 0x9\n\
- movs r3, 0x13\n\
- bl Menu_EraseWindowRect\n\
-_080A1400:\n\
- movs r1, 0\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- beq _080A1410\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- bge _080A144A\n\
-_080A1410:\n\
- ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x2\n\
- bne _080A1444\n\
- movs r0, 0\n\
- movs r1, 0xE\n\
- movs r2, 0x9\n\
- movs r3, 0x12\n\
- bl Menu_EraseWindowRect\n\
- adds r4, 0x10\n\
- adds r0, r4, 0\n\
- bl sub_80A0958\n\
- adds r0, r4, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080A1444\n\
- ldr r0, _080A1484 @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A1444:\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A144A:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0x9\n\
- ble _080A1470\n\
- ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x2\n\
- bne _080A1460\n\
- ldrb r0, [r7, 0x6]\n\
- bl sub_80A00F4\n\
-_080A1460:\n\
- adds r0, r4, 0\n\
- adds r0, 0x10\n\
- adds r1, r7, 0x6\n\
- bl sub_80A0428\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A1470:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1480: .4byte gSharedMem + 0x18000\n\
-_080A1484: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-// Related to re-drawing the summary area underneath the pokemon's picture
-// in all of the summary screen tabs.
-static void sub_80A1488(s8 a, u8 b)
-{
- u8 taskId;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- Menu_EraseWindowRect(0, 14, 9, 19);
- }
-
- taskId = FindTaskIdByFunc(sub_80A1334);
- if (taskId == 0xFF)
- {
- taskId = CreateTask(sub_80A1334, 0);
- }
-
- gTasks[taskId].data[0] = (s8)a;
-
- if ((s8)a < 0)
- {
- gTasks[taskId].data[1] = 10;
- }
- else
- {
- gTasks[taskId].data[1] = 0;
- }
-
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = b;
-}
-
-__attribute__((naked))
-static void sub_80A1500(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r0, 2\n\
- add r0, r10\n\
- lsls r0, 3\n\
- ldr r1, _080A15B0 @ =gTasks + 0x8\n\
- adds r7, r0, r1\n\
- ldrh r0, [r7]\n\
- ldrh r1, [r7, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r7, 0x2]\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- movs r0, 0\n\
- cmp r1, 0\n\
- blt _080A1536\n\
- movs r0, 0xA\n\
- cmp r1, 0xA\n\
- bgt _080A1536\n\
- ldrh r0, [r7, 0x2]\n\
-_080A1536:\n\
- lsls r0, 16\n\
- asrs r2, r0, 16\n\
- mov r9, r0\n\
- cmp r2, 0\n\
- ble _080A1572\n\
- movs r0, 0xA\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A15B4 @ =0x06006b40\n\
- adds r4, r0, r1\n\
- movs r5, 0\n\
- adds r6, r2, 0\n\
- ldr r0, _080A15B8 @ =0x001fffff\n\
- mov r8, r0\n\
-_080A1552:\n\
- adds r0, r5, 0\n\
- adds r0, 0xD\n\
- lsls r0, 6\n\
- ldr r1, _080A15BC @ =gUnknown_08E74688\n\
- adds r0, r1\n\
- adds r1, r4, 0\n\
- mov r2, r8\n\
- ands r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A1552\n\
-_080A1572:\n\
- mov r1, r9\n\
- asrs r2, r1, 16\n\
- cmp r2, 0x9\n\
- bgt _080A15C0\n\
- ldr r4, _080A15B4 @ =0x06006b40\n\
- movs r5, 0\n\
- mov r8, sp\n\
- movs r0, 0xA\n\
- subs r6, r0, r2\n\
- ldr r0, _080A15B8 @ =0x001fffff\n\
- ands r6, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- mov r9, r0\n\
-_080A158E:\n\
- ldrh r0, [r7, 0x4]\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- mov r2, r9\n\
- orrs r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A158E\n\
- b _080A15CC\n\
- .align 2, 0\n\
-_080A15B0: .4byte gTasks + 0x8\n\
-_080A15B4: .4byte 0x06006b40\n\
-_080A15B8: .4byte 0x001fffff\n\
-_080A15BC: .4byte gUnknown_08E74688\n\
-_080A15C0:\n\
- movs r0, 0\n\
- movs r1, 0x13\n\
- movs r2, 0x9\n\
- movs r3, 0x13\n\
- bl Menu_EraseWindowRect\n\
-_080A15CC:\n\
- movs r1, 0\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- beq _080A15DC\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- bge _080A1616\n\
-_080A15DC:\n\
- ldr r4, _080A164C @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x3\n\
- bne _080A1610\n\
- movs r0, 0\n\
- movs r1, 0xE\n\
- movs r2, 0x9\n\
- movs r3, 0x12\n\
- bl Menu_EraseWindowRect\n\
- adds r4, 0x10\n\
- adds r0, r4, 0\n\
- bl sub_80A0958\n\
- adds r0, r4, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080A1610\n\
- ldr r0, _080A1650 @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A1610:\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A1616:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0x9\n\
- ble _080A163C\n\
- ldr r4, _080A164C @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x3\n\
- bne _080A162C\n\
- ldrb r0, [r7, 0x6]\n\
- bl sub_80A00F4\n\
-_080A162C:\n\
- adds r0, r4, 0\n\
- adds r0, 0x10\n\
- adds r1, r7, 0x6\n\
- bl sub_80A0428\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A163C:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A164C: .4byte gSharedMem + 0x18000\n\
-_080A1650: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-static void sub_80A1654(s8 a, u8 b)
-{
- u8 taskId;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- {
- Menu_EraseWindowRect(0, 14, 9, 19);
- }
-
- taskId = FindTaskIdByFunc(sub_80A1500);
- if (taskId == 0xFF)
- {
- taskId = CreateTask(sub_80A1500, 0);
- }
-
- gTasks[taskId].data[0] = (s8)a;
-
- if ((s8)a < 0)
- {
- gTasks[taskId].data[1] = 10;
- }
- else
- {
- gTasks[taskId].data[1] = 0;
- }
-
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = b;
-}
-
-#ifdef NONMATCHING
-static void sub_80A16CC(u8 a)
-{
- u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6AD4);
-
- if (a == 0)
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94510[i] + 0x1000;
- vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x1000;
- vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x1000;
- }
- }
- else
- {
- i = 0;
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94550[i] + 0x1000;
- vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x1000;
- vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x1000;
- }
- }
-
- vramAddr = (u16 *)(VRAM + 0x5AD4);
-
- if (a == 0)
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94510[i] + 0x3000;
- vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x3000;
- vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x3000;
- }
- }
- else
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94550[i] + 0x3000;
- vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x3000;
- vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x3000;
- }
- }
-}
-#else
-__attribute__((naked))
-static void sub_80A16CC(u8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- ldr r0, _080A1724 @ =0x06006ad4\n\
- mov r12, r0\n\
- mov r1, r9\n\
- cmp r1, 0\n\
- bne _080A172C\n\
- movs r5, 0\n\
- ldr r7, _080A1728 @ =gUnknown_08E94510\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r6, r0, 0\n\
- movs r1, 0x40\n\
- adds r1, r7\n\
- mov r8, r1\n\
-_080A16F4:\n\
- lsls r2, r5, 1\n\
- mov r0, r12\n\
- adds r3, r2, r0\n\
- adds r4, r2, r7\n\
- ldrh r1, [r4]\n\
- adds r0, r6, r1\n\
- strh r0, [r3]\n\
- adds r1, r3, 0\n\
- adds r1, 0x40\n\
- ldrh r4, [r4]\n\
- adds r0, r6, r4\n\
- strh r0, [r1]\n\
- adds r3, 0x80\n\
- add r2, r8\n\
- ldrh r2, [r2]\n\
- adds r0, r6, r2\n\
- strh r0, [r3]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A16F4\n\
- b _080A1768\n\
- .align 2, 0\n\
-_080A1724: .4byte 0x06006ad4\n\
-_080A1728: .4byte gUnknown_08E94510\n\
-_080A172C:\n\
- movs r5, 0\n\
- ldr r6, _080A17B0 @ =gUnknown_08E94550\n\
- movs r7, 0x80\n\
- lsls r7, 5\n\
- adds r4, r7, 0\n\
- movs r0, 0x40\n\
- adds r0, r6\n\
- mov r8, r0\n\
-_080A173C:\n\
- lsls r1, r5, 1\n\
- mov r7, r12\n\
- adds r2, r1, r7\n\
- adds r0, r1, r6\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r3, r2, 0\n\
- adds r3, 0x40\n\
- add r1, r8\n\
- ldrh r7, [r1]\n\
- adds r0, r4, r7\n\
- strh r0, [r3]\n\
- adds r2, 0x80\n\
- ldrh r1, [r1]\n\
- adds r0, r4, r1\n\
- strh r0, [r2]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A173C\n\
-_080A1768:\n\
- ldr r0, _080A17B4 @ =0x06005ad4\n\
- mov r12, r0\n\
- mov r1, r9\n\
- cmp r1, 0\n\
- bne _080A17BC\n\
- movs r5, 0\n\
- ldr r7, _080A17B8 @ =gUnknown_08E94510\n\
- movs r0, 0xC0\n\
- lsls r0, 6\n\
- adds r6, r0, 0\n\
- movs r1, 0x40\n\
- adds r1, r7\n\
- mov r8, r1\n\
-_080A1782:\n\
- lsls r2, r5, 1\n\
- mov r0, r12\n\
- adds r3, r2, r0\n\
- adds r4, r2, r7\n\
- ldrh r1, [r4]\n\
- adds r0, r6, r1\n\
- strh r0, [r3]\n\
- adds r1, r3, 0\n\
- adds r1, 0x40\n\
- ldrh r4, [r4]\n\
- adds r0, r6, r4\n\
- strh r0, [r1]\n\
- adds r3, 0x80\n\
- add r2, r8\n\
- ldrh r2, [r2]\n\
- adds r0, r6, r2\n\
- strh r0, [r3]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A1782\n\
- b _080A17F8\n\
- .align 2, 0\n\
-_080A17B0: .4byte gUnknown_08E94550\n\
-_080A17B4: .4byte 0x06005ad4\n\
-_080A17B8: .4byte gUnknown_08E94510\n\
-_080A17BC:\n\
- movs r5, 0\n\
- ldr r6, _080A1804 @ =gUnknown_08E94550\n\
- movs r7, 0xC0\n\
- lsls r7, 6\n\
- adds r4, r7, 0\n\
- movs r0, 0x40\n\
- adds r0, r6\n\
- mov r8, r0\n\
-_080A17CC:\n\
- lsls r1, r5, 1\n\
- mov r7, r12\n\
- adds r2, r1, r7\n\
- adds r0, r1, r6\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r3, r2, 0\n\
- adds r3, 0x40\n\
- add r1, r8\n\
- ldrh r7, [r1]\n\
- adds r0, r4, r7\n\
- strh r0, [r3]\n\
- adds r2, 0x80\n\
- ldrh r1, [r1]\n\
- adds r0, r4, r1\n\
- strh r0, [r2]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A17CC\n\
-_080A17F8:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1804: .4byte gUnknown_08E94550\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-u8 sub_80A1808(struct Pokemon *mon)
-{
- u16 species;
- u8 spriteId;
-
- species = GetMonData(mon, MON_DATA_SPECIES2);
- spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5);
-
- FreeSpriteOamMatrix(&gSprites[spriteId]);
-
- gSprites[spriteId].data[0] = species;
- gSprites[spriteId].callback = sub_80A1888;
-
- if (!IsPokeSpriteNotFlipped(species))
- {
- gSprites[spriteId].hFlip = 1;
- }
- else
- {
- gSprites[spriteId].hFlip = 0;
- }
-
- return spriteId;
-}
-
-static void sub_80A1888(struct Sprite *sprite)
-{
- if (!gPaletteFade.active)
- {
- sprite->callback = SpriteCallbackDummy;
-
- if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- PlayCry1(sprite->data[0], 0);
- }
- }
-}
-
-static void sub_80A18C4(void)
-{
- u8 i;
-
- for (i = 0; i < 30; i++)
- {
- ewram1A000[i] = 0xFF;
- }
-}
-
-static void sub_80A18E4(u8 a)
-{
- if (ewram1A000[a] != 0xFF)
- {
- DestroySprite(&gSprites[ewram1A000[a]]);
- ewram1A000[a] = 0xFF;
- }
-}
-
-static void sub_80A1918(u8 a, u8 invisible)
-{
- gSprites[ewram1A000[a]].invisible = invisible;
-}
-
-static void sub_80A1950(void)
-{
- u8 i;
-
- for (i = 0; i < 5; i++)
- {
- if (ewram1A000[i] == 0xFF)
- {
- ewram1A000[i] = CreateSprite(&sSpriteTemplate_83C11C0, 0, 0, 2);
- }
-
- sub_80A1918(i, 1);
- }
-}
-
-static void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d)
-{
- StartSpriteAnim(&gSprites[ewram1A000[d]], animNum);
-
- gSprites[ewram1A000[d]].oam.paletteNum = sUnknown_PaletteNums[animNum];
- gSprites[ewram1A000[d]].pos1.x = x + 16;
- gSprites[ewram1A000[d]].pos1.y = y + 8;
-
- sub_80A1918(d, 0);
-}
-
-static void sub_80A1A30(u8 a)
-{
- u8 i;
- s16 x;
- u8 subPriority = 0;
-
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES)
- {
- if (a == 9)
- {
- subPriority = 1;
- }
-
- for (i = 0; i < 10; i++)
- {
- x = (i * 16) + 0x58;
- ewram1A000[a + i] = CreateSprite(&sSpriteTemplate_83C1280, x, 40, subPriority);
-
- if (i == 0)
- {
- StartSpriteAnim(&gSprites[ewram1A000[a]], 4);
- }
- else if (i == 9)
- {
- StartSpriteAnim(&gSprites[ewram1A000[a + i]], 5);
- }
- else
- {
- StartSpriteAnim(&gSprites[ewram1A000[a + i]], 6);
- }
-
- gSprites[ewram1A000[a + i]].callback = sub_80A1BC0;
- gSprites[ewram1A000[a + i]].data[0] = a;
- gSprites[ewram1A000[a + i]].data[1] = 0;
- }
- }
-}
-
-static void sub_80A1B1C(u8 a)
-{
- u8 i;
-
- for (i = 0; i < 10; i++)
- {
- sub_80A18E4(a + i);
- }
-}
-
-static void sub_80A1B40(u8 a)
-{
- u8 i;
- a *= 3;
-
- StartSpriteAnim(&gSprites[ewram1A000[9]], a + 4);
-
- for (i = 0; i < 8; i++)
- {
- StartSpriteAnim(&gSprites[ewram1A000[10 + i]], a + 6);
- }
-
- StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5);
-}
-
-static void sub_80A1BC0(struct Sprite *sprite)
-{
- u8 animNum = sprite->animNum - 4;
- if (animNum < 3)
- {
- sprite->data[1] = (sprite->data[1] + 1) & 0x1F;
-
- if (sprite->data[1] > 24)
- {
- sprite->invisible = 1;
- }
- else
- {
- sprite->invisible = 0;
- }
- }
- else
- {
- sprite->data[1] = 0;
- sprite->invisible = 0;
- }
-
- if (sprite->data[0] == 9)
- {
- sprite->pos2.y = pssData.selectedMoveIndex * 16;
- }
- else
- {
- sprite->pos2.y = pssData.switchMoveIndex * 16;
- }
-}
-
-__attribute__((naked))
-void sub_80A1C30(u8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 25\n\
- lsrs r3, r0, 24\n\
- adds r4, r3, 0\n\
- adds r0, r3, 0\n\
- adds r0, 0xA\n\
- cmp r3, r0\n\
- bge _080A1C82\n\
- ldr r5, _080A1C88 @ =gSprites\n\
- movs r7, 0x5\n\
- negs r7, r7\n\
- ldr r6, _080A1C8C @ =gSharedMem + 0x1A009\n\
-_080A1C50:\n\
- adds r2, r3, r6\n\
- ldrb r1, [r2]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- movs r1, 0\n\
- strh r1, [r0, 0x30]\n\
- ldrb r0, [r2]\n\
- lsls r1, r0, 4\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- adds r1, 0x3E\n\
- ldrb r2, [r1]\n\
- adds r0, r7, 0\n\
- ands r0, r2\n\
- strb r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- adds r0, r4, 0\n\
- adds r0, 0xA\n\
- cmp r3, r0\n\
- blt _080A1C50\n\
-_080A1C82:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1C88: .4byte gSprites\n\
-_080A1C8C: .4byte gSharedMem + 0x1A009\n\
- .syntax divided\n");
-}
-
-u8 pokemon_ailments_get_primary(u32 status)
-{
- if (status & 0x88)
- return 1;
- if (status & 0x40)
- return 2;
- if (status & 0x7)
- return 3;
- if (status & 0x20)
- return 4;
- if (status & 0x10)
- return 5;
-
- return 0;
-}
-
-u8 GetMonStatusAndPokerus(struct Pokemon *mon)
-{
- u8 statusAilment;
-
- if (GetMonData(mon, MON_DATA_HP) == 0)
- {
- return 7;
- }
-
- statusAilment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS));
- if (statusAilment == 0)
- {
- if (!CheckPartyPokerus(mon, 0))
- {
- return 0;
- }
- else
- {
- return 6;
- }
- }
-
- return statusAilment;
-}
-
-#ifdef NONMATCHING
-void sub_80A1D18(void)
-{
- struct Pokemon mon;
- u8 statusAndPkrs;
- u8 statusAndPkrs2;
-
- sub_809F678(&mon);
- statusAndPkrs = GetMonStatusAndPokerus(&mon);
-
- if (statusAndPkrs)
- {
- statusAndPkrs2 = statusAndPkrs - 1;
-
- if (ewram1A000[29] == 0xFF)
- {
- ewram1A000[29] = CreateSprite(&sSpriteTemplate_83C1304, 64, 152, 0);
- }
- }
- else
- {
- sub_80A18E4(29);
- return;
- }
-
- StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2);
-}
-#else
-__attribute__((naked))
-void sub_80A1D18(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x64\n\
- mov r0, sp\n\
- bl sub_809F678\n\
- mov r0, sp\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _080A1D58\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- bne _080A1D60\n\
- ldr r0, _080A1D54 @ =sSpriteTemplate_83C1304\n\
- movs r1, 0x40\n\
- movs r2, 0x98\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- strb r0, [r4]\n\
- b _080A1D60\n\
- .align 2, 0\n\
-_080A1D50: .4byte gSharedMem + 0x1A01D\n\
-_080A1D54: .4byte sSpriteTemplate_83C1304\n\
-_080A1D58:\n\
- movs r0, 0x1D\n\
- bl sub_80A18E4\n\
- b _080A1D74\n\
-_080A1D60:\n\
- ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _080A1D80 @ =gSprites\n\
- adds r0, r1\n\
- adds r1, r5, 0\n\
- bl StartSpriteAnim\n\
-_080A1D74:\n\
- add sp, 0x64\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1D7C: .4byte gSharedMem + 0x1A01D\n\
-_080A1D80: .4byte gSprites\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-static void sub_80A1D84(struct Pokemon *mon)
-{
- struct Sprite *sprite;
-
- sprite = sub_80F7920(0x7533, 0x7533, sSummaryScreenMonMarkingsPalette);
- gUnknown_020384F4 = sprite;
-
- if (sprite != NULL)
- {
- u8 markings = GetMonData(mon, MON_DATA_MARKINGS);
- StartSpriteAnim(sprite, markings);
-
- gUnknown_020384F4->pos1.x = 60;
- gUnknown_020384F4->pos1.y = 26;
- }
-}
-
-static void sub_80A1DCC(struct Pokemon *mon)
-{
- DestroySprite(gUnknown_020384F4);
- sub_80A1D84(mon);
-}
-
-static void sub_80A1DE8(struct Pokemon *mon)
-{
- u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL));
- sub_80478DC(ball);
-
- pssData.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0);
- gSprites[pssData.ballSpriteId].callback = SpriteCallbackDummy;
- gSprites[pssData.ballSpriteId].oam.priority = 3;
-}
-
-static u8 *sub_80A1E58(u8 *text, u8 id)
-{
- if (id != 0xFF)
- {
- const u8 *ptr = sUnknown_083C15BC;
- while (*ptr != 0xFF && *ptr != id)
- {
- ptr += 4;
- }
-
- text[0] = EXT_CTRL_CODE_BEGIN;
- text[1] = 4;
- text[2] = ptr[1];
- text[3] = ptr[2];
- text[4] = ptr[3];
-
- text += 5;
- }
-
- return text;
-}
-
-u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id)
-{
- u8 arr[3];
-
- Menu_GetTextColors(&arr[0], &arr[1], &arr[2]);
-
- dest = sub_80A1E58(dest, id);
- dest = StringCopy(dest, src);
-
- if (id != 0xFF)
- {
- dest[0] = EXT_CTRL_CODE_BEGIN;
- dest[1] = 4;
- dest[2] = arr[0];
- dest[3] = arr[1];
- dest[4] = arr[2];
- dest[5] = 0xFF;
-
- dest += 5;
- }
-
- return dest;
-}
-
-static void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e)
-{
- sub_80A1E9C(gStringVar4, text, id);
- Menu_PrintTextPixelCoords(gStringVar4, left, top, (bool8)e);
-}
-
-static void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e)
-{
- sub_80A1E9C(gStringVar4, text, id);
- sub_8072BD8(gStringVar4, c, d, e);
-}
-
-static void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e)
-{
- ConvertIntToDecimalStringN(gStringVar1, value, mode, n);
- sub_80A1EF8(gStringVar1, id, left, top, e);
-}
-
-static void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top)
-{
- sub_80A1E9C(gStringVar4, text, id);
- Menu_PrintText(gStringVar4, left, top);
-}
-
-u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level)
-{
- u8 buffer[12];
-
- dest[0] = 0x34;
- dest++;
-
- if (level == 0)
- {
- level = 5;
- }
-
- ConvertIntToDecimalString(buffer, level);
- dest = sub_80A1E9C(dest, buffer, 14);
- dest = StringCopy(dest, gOtherText_Comma);
-
- return dest;
-}
-
-static void sub_80A2078(int taskId)
-{
- gUnknown_03005CF0 = gTasks[taskId].func;
- gTasks[taskId].func = sub_80A20A8;
- gTasks[taskId].func((u8)taskId);
-}
-
-static void sub_80A20A8(u8 taskId)
-{
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
-}