diff options
Diffstat (limited to 'include/pokemon_storage_system_internal.h')
-rw-r--r-- | include/pokemon_storage_system_internal.h | 460 |
1 files changed, 460 insertions, 0 deletions
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h new file mode 100644 index 000000000..caec69019 --- /dev/null +++ b/include/pokemon_storage_system_internal.h @@ -0,0 +1,460 @@ +#ifndef GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H +#define GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H + +#include "pokemon_storage_system.h" +#include "mon_markings.h" + +#define IN_BOX_COLUMNS 5 +#define IN_BOX_ROWS 6 + +#define MAX_MON_ICONS 40 + +enum +{ + MODE_PARTY, + MODE_BOX, + MODE_2, +}; + +enum +{ + BOX_OPTION_WITHDRAW, + BOX_OPTION_DEPOSIT, + BOX_OPTION_MOVE_MONS, + BOX_OPTION_MOVE_ITEMS, + BOX_OPTION_EXIT, +}; + +enum +{ + PC_TEXT_EXIT_BOX, + PC_TEXT_WHAT_YOU_DO, + PC_TEXT_PICK_A_THEME, + PC_TEXT_PICK_A_WALLPAPER, + PC_TEXT_IS_SELECTED, + PC_TEXT_JUMP_TO_WHICH_BOX, + PC_TEXT_DEPOSIT_IN_WHICH_BOX, + PC_TEXT_WAS_DEPOSITED, + PC_TEXT_BOX_IS_FULL, + PC_TEXT_RELEASE_POKE, + PC_TEXT_WAS_RELEASED, + PC_TEXT_BYE_BYE, + PC_TEXT_MARK_POKE, + PC_TEXT_LAST_POKE, + PC_TEXT_PARTY_FULL, + PC_TEXT_HOLDING_POKE, + PC_TEXT_WHICH_ONE_WILL_TAKE, + PC_TEXT_CANT_RELEASE_EGG, + PC_TEXT_CONTINUE_BOX, + PC_TEXT_CAME_BACK, + PC_TEXT_WORRIED, + PC_TEXT_SURPRISE, + PC_TEXT_PLEASE_REMOVE_MAIL, + PC_TEXT_IS_SELECTED2, + PC_TEXT_GIVE_TO_MON, + PC_TEXT_PLACED_IN_BAG, + PC_TEXT_BAG_FULL, + PC_TEXT_PUT_IN_BAG, + PC_TEXT_ITEM_IS_HELD, + PC_TEXT_CHANGED_TO_ITEM, + PC_TEXT_CANT_STORE_MAIL, +}; + +enum +{ + PC_TEXT_FMT_NORMAL, + PC_TEXT_FMT_MON_NAME_1, + PC_TEXT_FMT_MON_NAME_2, + PC_TEXT_FMT_MON_NAME_3, + PC_TEXT_FMT_MON_NAME_4, + PC_TEXT_FMT_MON_NAME_5, + PC_TEXT_FMT_MON_NAME_6, + PC_TEXT_FMT_ITEM_NAME, +}; + +enum +{ + CURSOR_AREA_IN_BOX, + CURSOR_AREA_IN_PARTY, + CURSOR_AREA_BOX, + CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box +}; + +enum +{ + SCREEN_CHANGE_EXIT_BOX, + SCREEN_CHANGE_SUMMARY_SCREEN, + SCREEN_CHANGE_NAME_BOX, + SCREEN_CHANGE_ITEM_FROM_BAG, +}; + +#define TAG_PAL_WAVEFORM 0xDACA +#define TAG_PAL_DAC8 0xDAC8 +#define TAG_PAL_DAC6 0xDAC6 +#define TAG_PAL_DACE 0xDACE +#define TAG_PAL_DAC7 0xDAC7 +#define TAG_PAL_DAC9 0xDAC9 +#define TAG_PAL_DAC0 0xDAC0 +#define TAG_PAL_DACB 0xDACB + +#define TAG_TILE_WAVEFORM 0x5 +#define TAG_TILE_10 0x10 +#define TAG_TILE_2 0x2 +#define TAG_TILE_D 0xD +#define TAG_TILE_A 0xA +#define TAG_TILE_3 0x3 +#define TAG_TILE_4 0x4 +#define TAG_TILE_12 0x12 +#define TAG_TILE_7 0x7 +#define TAG_TILE_0 0x0 +#define TAG_TILE_1 0x1 +#define TAG_TILE_6 0x6 + +struct WallpaperTable +{ + const u32 *tiles; + const u32 *tileMap; + const u16 *palettes; +}; + +struct StorageAction +{ + const u8 *text; + u8 format; +}; + +struct UnkPSSStruct_2002370 +{ + struct Sprite *unk_0000; + struct Sprite *unk_0004[4]; + u32 unk_0014[3]; + struct Sprite *unk_0020[2]; + u8 filler_0028[0x200]; + u8 unk_0228[20]; + u32 unk_023c; + u16 unk_0240; + u16 unk_0242; + u8 curBox; + u8 unk_0245; + u8 unk_0246; +}; + +struct StorageMenu +{ + const u8 *text; + int textId; +}; + +struct UnkStruct_2000028 +{ + const u8 *unk_00; + u8 *unk_04; + u16 unk_08; + u16 unk_0a; + u16 newField; + void (*unk_0c)(struct UnkStruct_2000028 *data); +}; + +struct UnkStruct_2000020 +{ + struct UnkStruct_2000028 *unk_00; + u8 unk_04; + u8 unk_05; +}; + +struct UnkStorageStruct +{ + struct Sprite *sprite; + u8 *tiles; + u16 palIndex; + u8 unk8; + u8 unk9; + u8 unk10; +}; + +struct PssQuestLogBuffer +{ + u16 species; + u16 species2; + u8 fromBox; + u8 toBox; +}; + +struct PokemonStorageSystemData +{ + u8 state; + u8 boxOption; + u8 screenChangeType; + bool8 isReshowingPSS; + u8 taskId; + struct UnkStruct_2000020 unk_0020; + struct UnkStruct_2000028 unk_0028[8]; + u16 field_B0[528 / 2]; + u16 field_2C0; + u16 field_2C2; + u8 field_2C4; + u8 field_2C5; + u8 showPartyMenuState; + bool8 unk_02C7; + u8 unk_02C8; + bool8 unk_02C9; + s16 newCurrBoxId; + u16 bg2_X; + s16 field_2CE; + u16 field_2D0; + u8 field_2D2; + u8 field_2D3; + u8 field_2D4; + u16 field_2D6; + s16 field_2D8; + u16 field_2DA; + u16 field_2DC; + u16 field_2DE; + u16 field_2E0; + u8 filler[22]; + u8 field_2F8[512]; + u8 field_4F8[512]; + u8 field_6F8; + u8 field_6F9; + u8 field_6FA; + s8 field_6FB; + u16 field_6FC[16]; + u16 field_71C; + u16 field_71E; + struct Sprite *field_720[2]; + struct Sprite *field_728[2]; + struct Sprite *field_730[2]; + u32 field_738; + u8 field_73C[80]; + u16 field_78C; + s16 wallpaperSetId; + s16 wallpaperId; + u16 field_792[360]; + u8 wallpaperChangeState; + u8 field_A63; + u8 field_A64; + s8 field_A65; + // u8 *wallpaperTiles; // used only in Emerald for Walda + /* 0a68 */ struct Sprite *movingMonSprite; + /* 0a6c */ struct Sprite *partySprites[PARTY_SIZE]; + /* 0a84 */ struct Sprite *boxMonsSprites[IN_BOX_COUNT]; + /* 0afc */ struct Sprite **field_B00; + /* 0b00 */ struct Sprite **field_B04; + /* 0b04 */ u16 field_B08[MAX_MON_ICONS]; + /* 0b54 */ u16 field_B58[MAX_MON_ICONS]; + /* 0ba4 */ u16 boxSpecies[IN_BOX_COUNT]; + /* 0be0 */ u32 boxPersonalities[IN_BOX_COUNT]; + /* 0c58 */ u8 field_C5C; + /* 0c59 */ u8 field_C5D; + /* 0c5a */ u8 field_C5E; + /* 0c5c */ u16 field_C60; + /* 0c5e */ s16 field_C62; + /* 0c60 */ s16 field_C64; + /* 0c62 */ u16 field_C66; + /* 0c64 */ u8 field_C68; + /* 0c65 */ s8 field_C69; + /* 0c66 */ u8 field_C6A; + /* 0c67 */ u8 field_C6B; + /* 0c68 */ struct WindowTemplate menuWindow; + /* 0c70 */ struct StorageMenu menuItems[7]; + /* 0ca8 */ u8 menuItemsCount; + /* 0ca9 */ u8 menuWidth; + /* 0caa */ u8 field_CAE; + /* 0cac */ u16 field_CB0; + /* 0cb0 */ struct Sprite *field_CB4; + /* 0cb4 */ struct Sprite *field_CB8; + /* 0cb8 */ s32 field_CBC; + /* 0cbc */ s32 field_CC0; + /* 0cc0 */ u32 field_CC4; + /* 0cc4 */ u32 field_CC8; + /* 0cc8 */ s16 field_CCC; + /* 0cca */ s16 field_CCE; + /* 0ccc */ u16 field_CD0; + /* 0cce */ s8 field_CD2; + /* 0ccf */ s8 field_CD3; + /* 0cd0 */ u8 field_CD4; + /* 0cd1 */ u8 field_CD5; + /* 0cd2 */ u8 field_CD6; + /* 0cd3 */ u8 field_CD7; + /* 0cd4 */ u8 field_CD8[2]; + /* 0cd8 */ const u32 *cursorMonPalette; + /* 0cdc */ u32 cursorMonPersonality; + /* 0ce0 */ u16 cursorMonSpecies; + /* 0ce2 */ u16 cursorMonItem; + /* 0ce4 */ u16 field_CE8; + /* 0ce6 */ bool8 setMosaic; + /* 0ce7 */ u8 cursorMonMarkings; + /* 0ce8 */ u8 cursorMonLevel; + /* 0ce9 */ bool8 cursorMonIsEgg; + /* 0cea */ u8 cursorMonNick[POKEMON_NAME_LENGTH + 1]; + /* 0cf5 */ u8 cursorMonTexts[4][36]; + /* 0d88 */ bool8 (*monPlaceChangeFunc)(void); + /* 0d8c */ u8 monPlaceChangeState; + /* 0d8d */ u8 field_D91; + /* 0d90 */ struct Sprite *field_D94; + /* 0d94 */ struct Sprite *field_D98[2]; + /* 0d9c */ u16 *field_DA0; + /* 0da0 */ struct PokemonMarkMenu field_DA4; + /* 1e58 */ struct UnkPSSStruct_2002370 field_1E5C; + /* 20a0 */ struct Pokemon movingMon; + /* 2104 */ struct Pokemon field_2108; + /* 2168 */ u8 field_216C; + /* 2169 */ u8 field_216D; + /* 216c */ bool8 isSurfMon; + /* 216d */ bool8 isDiveMon; + /* 216a */ s8 field_216E; + /* 216b */ s8 field_216F; + /* 216e */ s8 field_2170; + /* 216f */ s8 field_2171; + /* 2170 */ u16 field_2172; + /* 2172 */ u16 field_2176[3]; + /* 2178 */ u8 field_2186; + /* 2179 */ u8 field_2187; + /* 217a */ u8 field_2188; + /* 217c */ union + { + struct Pokemon *mon; + struct BoxPokemon *box; + } field_218C; + /* 2180 */ u8 field_2190[40]; + /* 21a8 */ u8 field_21B8[40]; + /* 21d0 */ u8 field_21E0[POKEMON_NAME_LENGTH + 1]; + /* 21db */ u8 itemName[20]; + /* 21ef */ u8 inBoxMovingMode; + /* 21f0 */ u16 field_2200; + /* 21f4 */ struct UnkStorageStruct field_2204[3]; + /* 2224 */ u16 movingItem; + /* 2226 */ u16 field_2236; + /* 2228 */ struct PssQuestLogBuffer qlogBuffer; + /* 2230 */ u16 field_2238; + /* 2232 */ u16 field_223A; + /* 2234 */ u16 *field_223C; + /* 2238 */ struct Sprite *cursorMonSprite; + /* 223c */ u16 field_2244[0x40]; + /* 22bc */ u8 field_22C4[0x800]; + /* 2abc */ u8 field_2AC4[0x1800]; + /* 42bc */ u8 field_42C4[0x800]; + /* 4abc */ u8 field_4AC4[0x1000]; + /* 5abc */ u8 field_5AC4[0x800]; +}; // size=62bc + +extern struct PokemonStorageSystemData *sPSSData; + +void Cb2_EnterPSS(u8 a0); +u8 GetCurrentBoxOption(void); +struct Sprite *sub_809223C(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority); +void SetBoxWallpaper(u8 boxId, u8 wallpaperId); +void SetCurrentBox(u8 boxId); +void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst); +void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src); + +void Cb2_ExitPSS(void); +void sub_808C8FC(void); +void sub_808C940(u8 curBox); +void sub_808C950(void); +u8 HandleBoxChooseSelectionInput(void); +void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal); +void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value); +u32 GetCurrentBoxMonData(u8 boxPosition, s32 request); +u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst); + +void sub_80922C0(void); +void sub_8092340(void); +bool8 sub_80924A8(void); +void sub_8092AE4(void); +void sub_8092B3C(u8 a0); +void sub_8092B50(void); +void sub_8092B5C(void); +u8 sub_8092B70(void); +void sub_8092F54(void); +void sub_8093174(void); +void sub_8093194(void); +bool8 sub_80931EC(void); +void sub_8093264(void); +void sub_8093630(void); +void sub_8093660(void); +void sub_80936B8(void); +void sub_80937B4(void); +void sub_8094D14(u8 a0); +u8 sub_8094D34(void); +void sub_8094D60(void); +void sub_8094D84(void); +bool8 sub_8094F90(void); +s16 sub_8094F94(void); +void sub_8095024(void); +bool8 sub_8095050(void); +void sub_80950A4(void); +void sub_80950BC(u8 a0); +bool8 sub_80950D0(void); +void sub_8095B5C(void); +void sub_8096088(void); +void sub_80960C0(void); +bool8 sub_809610C(void); +const u8 *GetMovingItemName(void); +void sub_80966F4(void); +bool8 sub_8096728(void); +bool8 sub_80967C0(void); +void sub_8096BE4(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2); +void sub_8096BF8(void); +void AddMenu(void); +bool8 CanMovePartyMon(void); +bool8 CanShiftMon(void); +bool8 DoMonPlaceChange(void); +bool8 DoWallpaperGfxChange(void); +u8 GetBoxCursorPosition(void); +u16 GetMovingItem(void); +u8 HandleInput(void); +void InitCanReleaseMonVars(void); +void InitMonPlaceChange(u8 a0); +bool8 IsActiveItemMoving(void); +bool8 IsCursorOnCloseBox(void); +bool8 IsMonBeingMoved(void); +void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos); +void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos); +void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos); +void Item_TakeMons(u8 cursorArea, u8 cursorPos); +void PrintItemDescription(void); +void ReleaseMon(void); +s8 RunCanReleaseMon(void); +bool8 ScrollToBox(void); +void SetMonMarkings(u8 markings); +void SetMovingMonPriority(u8 priority); +void SetUpScrollToBox(u8 targetBox); +void SetWallpaperForCurrentBox(u8 wallpaper); +bool8 TryStorePartyMonInBox(u8 boxId); +void InitMenu(void); +void SetMenuText(u8 textId); +void sub_8095C84(u8 cursorArea, u8 cursorPos); +void sub_8095E2C(u16 itemId); +u8 GetBoxWallpaper(u8 boxId); +bool8 IsCursorOnBox(void); +bool8 IsCursorInBox(void); + +void sub_808FFAC(void); +struct Sprite * CreateMonIconSprite(u16 species, u32 pid, s16 x, s16 y, u8 priority, u8 subpriority); +void CreatePartyMonsSprites(bool8 species); +void sub_80909F4(void); +bool8 sub_8090A60(void); +void sub_8090B98(s16 yDelta); +void DestroyAllPartyMonIcons(void); +void sub_8091114(void); +bool8 sub_8091150(void); +void sub_80913DC(u8 box); +bool8 sub_809140C(void); +void sub_80920FC(bool8 species); +void CreateMovingMonIcon(void); +void sub_8090E08(u8 boxId, u8 cursorPos); +bool8 sub_8090E74(void); +void sub_8090CC0(u8 cursorArea, u8 cursorPos); +void sub_8090D58(u8 cursorArea, u8 cursorPos); +void DestroyPartyMonIcon(u8 partyId); +void DestroyMovingMonIcon(void); +s16 GetFirstFreeBoxSpot(u8 boxId); +void sub_80901EC(u8 boxPosition); +void sub_8090FC4(u8 mode, u8 position); +bool8 sub_8091084(void); +void sub_80910CC(void); +u8 CountPartyMons(void); +u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore); + +#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H |