diff options
author | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2020-06-14 16:08:21 -0400 |
---|---|---|
committer | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2020-06-14 16:08:21 -0400 |
commit | bc143a695d54f7ac663b2b3f1ea98c53b21842e2 (patch) | |
tree | 68540a243b212f5657fc4a9ddbede12e89611a3f /src | |
parent | e2eb17dcbd8f9021b7e9fc805c8c03fac6b3b255 (diff) |
Initial work on pokemon_summary_screen.c
Diffstat (limited to 'src')
-rw-r--r-- | src/pokemon_summary_screen.c | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c new file mode 100644 index 000000000..a271c4edf --- /dev/null +++ b/src/pokemon_summary_screen.c @@ -0,0 +1,147 @@ +#include "global.h" +#include "gflib.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "help_system.h" + +extern void sub_8138B8C(struct Pokemon * mon); +extern void sub_8135C34(void); + +struct PokemonSummaryScreenData { + u8 temp0[0x3024]; + bool32 isEnemyParty; /* 0x3024 */ + + u8 temp3028[0x1d8]; + + 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) 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 temp3248[0x18]; + u16 ALIGNED(4) unk3260; /* 0x3260 */ + + u8 temp3264[0xc]; + + u8 ALIGNED(4) unk3270; /* 0x3270 */ + u8 ALIGNED(4) unk3274; /* 0x3274 */ + u8 ALIGNED(4) unk3278; /* 0x3278 */ + u8 ALIGNED(4) unk327C; /* 0x327C */ + + u8 temp3280[0x10]; + + struct Pokemon currentMon; + + union { + struct Pokemon * mons; + struct BoxPokemon * boxMons; + } monList; + + MainCallback savedCallback; + struct Sprite * markingSprite; + + u8 ALIGNED(4) unk3300; /* 0x3300 */ + u8 ALIGNED(4) unk3304; /* 0x3304 */ +}; + +struct Struct203B144 { + u8 unk0[0x28]; +}; + +extern struct PokemonSummaryScreenData * gMonSummaryScreen; +extern struct Struct203B144 * gUnknown_203B144; +extern u8 gUnknown_203B16D; +extern u8 gUnknown_203B16E; + +void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, MainCallback savedCallback, u8 mode) +{ + gMonSummaryScreen = AllocZeroed(sizeof(struct PokemonSummaryScreenData)); + gUnknown_203B144 = AllocZeroed(sizeof(struct Struct203B144)); + + if (gMonSummaryScreen == NULL) + { + SetMainCallback2(savedCallback); + return; + } + + gLastViewedMonIndex = cursorPos; + + gUnknown_203B16D = 0; + gUnknown_203B16E = 0; + gMonSummaryScreen->savedCallback = savedCallback; + gMonSummaryScreen->monList.mons = party; + + if (party == gEnemyParty) + gMonSummaryScreen->isEnemyParty = TRUE; + else + gMonSummaryScreen->isEnemyParty = FALSE; + + gMonSummaryScreen->lastIndex = lastIdx; + gMonSummaryScreen->mode = mode; + + switch (gMonSummaryScreen->mode) { + case PSS_MODE_NORMAL: + default: + SetHelpContext(HELPCONTEXT_POKEMON_INFO); + gMonSummaryScreen->curPageIndex = PSS_PAGE_INFO; + gMonSummaryScreen->isBoxMon = FALSE; + gMonSummaryScreen->lockMovesFlag = FALSE; + break; + case PSS_MODE_BOX: + SetHelpContext(HELPCONTEXT_POKEMON_INFO); + gMonSummaryScreen->curPageIndex = PSS_PAGE_INFO; + gMonSummaryScreen->isBoxMon = TRUE; + gMonSummaryScreen->lockMovesFlag = FALSE; + break; + case PSS_MODE_SELECT_MOVE: + case PSS_MODE_UNK3: + SetHelpContext(HELPCONTEXT_POKEMON_MOVES); + gMonSummaryScreen->curPageIndex = PSS_PAGE_MOVES_INFO; + gMonSummaryScreen->isBoxMon = FALSE; + gMonSummaryScreen->lockMovesFlag = TRUE; + break; + } + + gMonSummaryScreen->unk3270 = 0; + gMonSummaryScreen->unk3274 = 0; + gMonSummaryScreen->unk3278 = 0; + gMonSummaryScreen->unk327C = 0; + + gMonSummaryScreen->unk3238 = 0; + gMonSummaryScreen->unk323C = 2; + gMonSummaryScreen->unk3240 = 1; + gMonSummaryScreen->unk3244 = 0; + + gMonSummaryScreen->unk3228 = 0; + gMonSummaryScreen->unk322C = 1; + + sub_8138B8C(&gMonSummaryScreen->currentMon); + gMonSummaryScreen->isEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_IS_EGG); + gMonSummaryScreen->isBadEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SANITY_IS_BAD_EGG); + + if (gMonSummaryScreen->isBadEgg == TRUE) { + gMonSummaryScreen->isEgg = TRUE; + } + + gMonSummaryScreen->unk3300 = 0xff; + SetMainCallback2(sub_8135C34); +} + +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; +} |