diff options
Diffstat (limited to 'src/pokemon_summary_screen.c')
-rw-r--r-- | src/pokemon_summary_screen.c | 278 |
1 files changed, 260 insertions, 18 deletions
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a271c4edf..0ca6b2633 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3,46 +3,110 @@ #include "pokemon.h" #include "pokemon_summary_screen.h" #include "help_system.h" +#include "task.h" +#include "menu_helpers.h" +#include "link.h" +#include "overworld.h" +#include "constants/songs.h" extern void sub_8138B8C(struct Pokemon * mon); extern void sub_8135C34(void); +extern void sub_813B784(void); +extern void sub_8138414(u8 curPageIndex); +extern void sub_8134BAC(u8 taskId); +extern void sub_8134E84(u8 taskId); +extern void sub_813B3F0(u8 taskId); +extern void sub_813B120(u8, s8); +extern void sub_8137E64(u8 taskId); struct PokemonSummaryScreenData { - u8 temp0[0x3024]; + u16 unk0[0x800]; + u16 unk1000[0x800]; + u16 unk2000[0x800]; + u8 ALIGNED(4) unk3000[7]; + + u8 ALIGNED(4) unk3008; + u8 ALIGNED(4) unk300C; + u8 ALIGNED(4) unk3010; + u8 ALIGNED(4) unk3014; + + u8 ALIGNED(4) unk3018; + u8 ALIGNED(4) unk301C; + + u8 ALIGNED(4) unk3020; + bool32 isEnemyParty; /* 0x3024 */ - u8 temp3028[0x1d8]; + struct PokeSummary { + u8 ALIGNED(4) unk3028[POKEMON_NAME_LENGTH]; + u8 ALIGNED(4) unk3034[POKEMON_NAME_LENGTH + 1]; + + u8 ALIGNED(4) unk3040[OT_NAME_LENGTH + 1]; + u8 ALIGNED(4) unk3048[2][OT_NAME_LENGTH + 1]; + + u8 ALIGNED(4) unk3058[5]; + u8 ALIGNED(4) unk3060[7]; + u8 ALIGNED(4) unk3068[16]; + + u8 ALIGNED(4) unk3078[3]; + u8 ALIGNED(4) unk307C[7]; + u8 ALIGNED(4) unk3084[9]; + u8 ALIGNED(4) unk3090[5][5]; + + u8 ALIGNED(4) unk30AC[5][11]; + u8 ALIGNED(4) unk30E4[5][11]; + u8 ALIGNED(4) unk311C[5][13]; + u8 ALIGNED(4) pssd4[5][5]; + u8 ALIGNED(4) pssd5[5][5]; + + u8 ALIGNED(4) pssd6[9]; + u8 ALIGNED(4) pssd7[9]; + + u8 ALIGNED(4) pssd8[13]; + u8 ALIGNED(4) pssd9[20]; + u8 ALIGNED(4) tempPadRemoveLater[0x2c]; + } summary; u8 ALIGNED(4) isEgg; /* 0x3200 */ u8 ALIGNED(4) isBadEgg; /* 0x3204 */ + u8 ALIGNED(4) mode; /* 0x3208 */ u8 ALIGNED(4) unk320C; /* 0x320C */ u8 ALIGNED(4) lastIndex; /* 0x3210 */ u8 ALIGNED(4) curPageIndex; /* 0x3214 */ u8 ALIGNED(4) unk3218; /* 0x3218 */ u8 ALIGNED(4) isBoxMon; /* 0x321C */ - u8 ALIGNED(4) unk3220; /* 0x3220 */ + u8 ALIGNED(4) unk3220[2]; /* 0x3220 */ + u8 ALIGNED(4) unk3224; /* 0x3224 */ u8 ALIGNED(4) unk3228; /* 0x3228 */ u8 ALIGNED(4) unk322C; /* 0x322C */ u8 ALIGNED(4) unk3230; /* 0x3230 */ + u8 ALIGNED(4) lockMovesFlag; /* 0x3234 */ + u8 ALIGNED(4) unk3238; /* 0x3238 */ u8 ALIGNED(4) unk323C; /* 0x323C */ u8 ALIGNED(4) unk3240; /* 0x3240 */ u8 ALIGNED(4) unk3244; /* 0x3244 */ + u8 ALIGNED(4) unk3248; /* 0x3248 */ + s16 ALIGNED(4) unk324C; /* 0x324C */ - u8 temp3248[0x18]; - u16 ALIGNED(4) unk3260; /* 0x3260 */ + u16 unk3250[5]; /* 0x3250 */ + u16 unk325A[5]; /* 0x325A */ + u8 ALIGNED(4) unk3264; /* 0x3264 */ + u8 ALIGNED(4) unk3268; /* 0x3268 */ - u8 temp3264[0xc]; + u8 ALIGNED(4) unk326C; /* 0x326C */ - u8 ALIGNED(4) unk3270; /* 0x3270 */ + u8 ALIGNED(4) state3270; /* 0x3270 */ u8 ALIGNED(4) unk3274; /* 0x3274 */ u8 ALIGNED(4) unk3278; /* 0x3278 */ u8 ALIGNED(4) unk327C; /* 0x327C */ - - u8 temp3280[0x10]; + u8 ALIGNED(4) unk3280; /* 0x3280 */ + u8 ALIGNED(4) unk3284; /* 0x3284 */ + u8 ALIGNED(4) unk3288; /* 0x3288 */ + u8 ALIGNED(4) unk328C; /* 0x328C */ struct Pokemon currentMon; @@ -54,8 +118,8 @@ struct PokemonSummaryScreenData { MainCallback savedCallback; struct Sprite * markingSprite; - u8 ALIGNED(4) unk3300; /* 0x3300 */ - u8 ALIGNED(4) unk3304; /* 0x3304 */ + u8 ALIGNED(4) unk3300[2]; /* 0x3300 */ + u8 ALIGNED(4) unk3304[3]; /* 0x3304 */ }; struct Struct203B144 { @@ -93,7 +157,8 @@ void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, gMonSummaryScreen->lastIndex = lastIdx; gMonSummaryScreen->mode = mode; - switch (gMonSummaryScreen->mode) { + switch (gMonSummaryScreen->mode) + { case PSS_MODE_NORMAL: default: SetHelpContext(HELPCONTEXT_POKEMON_INFO); @@ -116,7 +181,7 @@ void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, break; } - gMonSummaryScreen->unk3270 = 0; + gMonSummaryScreen->state3270 = 0; gMonSummaryScreen->unk3274 = 0; gMonSummaryScreen->unk3278 = 0; gMonSummaryScreen->unk327C = 0; @@ -133,15 +198,192 @@ void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, gMonSummaryScreen->isEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_IS_EGG); gMonSummaryScreen->isBadEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SANITY_IS_BAD_EGG); - if (gMonSummaryScreen->isBadEgg == TRUE) { + if (gMonSummaryScreen->isBadEgg == TRUE) gMonSummaryScreen->isEgg = TRUE; - } - gMonSummaryScreen->unk3300 = 0xff; + gMonSummaryScreen->unk3300[0] = 0xff; SetMainCallback2(sub_8135C34); } -void ShowSelectMovePokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, MainCallback savedCallback, u16 a4) { +void ShowSelectMovePokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, MainCallback savedCallback, u16 a4) +{ ShowPokemonSummaryScreen(party, cursorPos, lastIdx, savedCallback, PSS_MODE_SELECT_MOVE); - gMonSummaryScreen->unk3260 = a4; + gMonSummaryScreen->unk325A[4] = a4; +} + +u8 sub_813476C(u8 a0) +{ + if (gMonSummaryScreen->unk301C == TRUE && gMonSummaryScreen->unk3224 != a0) + return TRUE; + + return FALSE; +} + +u32 sub_81347A4(u8 a0) +{ + if (gMonSummaryScreen->isEgg) + return FALSE; + + if (gMonSummaryScreen->unk3300[0] != 0xff && gMonSummaryScreen->unk3300[0] == a0) + { + gMonSummaryScreen->unk3300[0] = 0xff; + return TRUE; + } + + if (sub_813476C(a0)) + return FALSE; + + switch (a0) + { + case 1: + if (JOY_NEW(DPAD_RIGHT)) + return TRUE; + + if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR && JOY_NEW(R_BUTTON)) + return TRUE; + + break; + case 0: + if (JOY_NEW(DPAD_LEFT)) + return TRUE; + + if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR && JOY_NEW(L_BUTTON)) + return TRUE; + + break; + } + + return FALSE; +} + +void sub_8134840(u8 taskId) +{ + switch (gMonSummaryScreen->state3270) { + case PSS_STATE3270_0: + BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0); + gMonSummaryScreen->state3270 = PSS_STATE3270_1; + break; + case PSS_STATE3270_1: + if (!gPaletteFade.active) + { + sub_813B784(); + gMonSummaryScreen->state3270 = PSS_STATE3270_2; + return; + } + + gMonSummaryScreen->state3270 = PSS_STATE3270_1; + break; + case PSS_STATE3270_2: + if (MenuHelpers_CallLinkSomething() == TRUE) + return; + else if (sub_800B270() == TRUE) + return; + else if (FuncIsActiveTask(sub_813B3F0)) + return; + + if (gMonSummaryScreen->curPageIndex != PSS_PAGE_MOVES_INFO) + { + if (sub_81347A4(1) == TRUE) + { + if (FuncIsActiveTask(sub_8134BAC)) + { + gMonSummaryScreen->unk3300[0] = 1; + return; + } + else if (gMonSummaryScreen->curPageIndex < PSS_PAGE_MOVES) + { + PlaySE(SE_SELECT); + HideBg(0); + gMonSummaryScreen->unk3224 = 1; + sub_8138414(gMonSummaryScreen->curPageIndex); + gMonSummaryScreen->curPageIndex++; + gMonSummaryScreen->state3270 = PSS_STATE3270_3; + } + return; + } + else if (sub_81347A4(0) == TRUE) + { + if (FuncIsActiveTask(sub_8134BAC)) + { + gMonSummaryScreen->unk3300[0] = 0; + return; + } + else if (gMonSummaryScreen->curPageIndex > PSS_PAGE_INFO) + { + PlaySE(SE_SELECT); + HideBg(0); + gMonSummaryScreen->unk3224 = 0; + sub_8138414(gMonSummaryScreen->curPageIndex); + gMonSummaryScreen->curPageIndex--; + gMonSummaryScreen->state3270 = PSS_STATE3270_3; + } + return; + } + } + + if ((!FuncIsActiveTask(sub_8134BAC)) || FuncIsActiveTask(sub_813B3F0)) + { + if (JOY_NEW(DPAD_UP)) + { + sub_813B120(taskId, -1); + return; + } + else if (JOY_NEW(DPAD_DOWN)) + { + sub_813B120(taskId, 1); + return; + } + else if (JOY_NEW(A_BUTTON)) + { + if (gMonSummaryScreen->curPageIndex == PSS_PAGE_INFO) + { + PlaySE(SE_SELECT); + gMonSummaryScreen->state3270 = PSS_STATE3270_4; + } + else if (gMonSummaryScreen->curPageIndex == PSS_PAGE_MOVES) + { + PlaySE(SE_SELECT); + gMonSummaryScreen->unk3224 = 1; + sub_8138414(gMonSummaryScreen->curPageIndex); + gMonSummaryScreen->curPageIndex++; + gMonSummaryScreen->state3270 = PSS_STATE3270_3; + } + return; + } + else if (JOY_NEW(B_BUTTON)) + { + gMonSummaryScreen->state3270 = PSS_STATE3270_4; + } + } + break; + case PSS_STATE3270_3: + if (gMonSummaryScreen->curPageIndex != PSS_PAGE_MOVES_INFO) + { + CreateTask(sub_8134BAC, 0); + gMonSummaryScreen->state3270 = PSS_STATE3270_2; + } + else + { + gTasks[gMonSummaryScreen->unk3018].func = sub_8134E84; + gMonSummaryScreen->state3270 = PSS_STATE3270_2; + } + break; + case PSS_STATE3270_4: + BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); + gMonSummaryScreen->state3270 = PSS_STATE3270_5; + break; + case PSS_STATE3270_5: + if (Overworld_LinkRecvQueueLengthMoreThan2() == TRUE) + return; + else if (sub_800B270() == TRUE) + return; + + gMonSummaryScreen->state3270 = PSS_STATE3270_6; + break; + default: + if (!gPaletteFade.active) + sub_8137E64(taskId); + + break; + } } |