pokefirered/include/pokemon_storage_system_internal.h
2020-03-15 18:25:20 -04:00

517 lines
13 KiB
C

#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
#define MAX_ITEM_ICONS 3
#define MAX_MENU_ITEMS 7
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
{
PC_TEXT_CANCEL,
PC_TEXT_STORE,
PC_TEXT_WITHDRAW,
PC_TEXT_MOVE,
PC_TEXT_SHIFT,
PC_TEXT_PLACE,
PC_TEXT_SUMMARY,
PC_TEXT_RELEASE,
PC_TEXT_MARK,
PC_TEXT_JUMP,
PC_TEXT_WALLPAPER,
PC_TEXT_NAME,
PC_TEXT_TAKE,
PC_TEXT_GIVE,
PC_TEXT_GIVE2,
PC_TEXT_SWITCH,
PC_TEXT_BAG,
PC_TEXT_INFO,
PC_TEXT_SCENERY1,
PC_TEXT_SCENERY2,
PC_TEXT_SCENERY3,
PC_TEXT_ETCETERA,
PC_TEXT_FOREST,
PC_TEXT_CITY,
PC_TEXT_DESERT,
PC_TEXT_SAVANNA,
PC_TEXT_CRAG,
PC_TEXT_VOLCANO,
PC_TEXT_SNOW,
PC_TEXT_CAVE,
PC_TEXT_BEACH,
PC_TEXT_SEAFLOOR,
PC_TEXT_RIVER,
PC_TEXT_SKY,
PC_TEXT_POLKADOT,
PC_TEXT_POKECENTER,
PC_TEXT_MACHINE,
PC_TEXT_SIMPLE,
};
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 PSS_ItemIconSprite
{
struct Sprite *sprite;
u8 *tiles;
u16 palIndex;
u8 cursorArea;
u8 cursorPos;
u8 active;
};
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[MAX_MENU_ITEMS];
/* 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 PSS_ItemIconSprite itemIconSprites[MAX_ITEM_ICONS];
/* 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);
s8 sub_8094E50(u8 a0);
bool8 sub_8095474(u8 action);
u8 sub_8095AA0(void);
bool8 sub_8095ABC(void);
void sub_8095D44(u8 cursorArea, u8 cursorPos);
void sub_8094CD4(u8 *arg0, u8 *arg1);
void sub_8094D40(void);
void sub_8092BAC(bool8 arg0);
void DestroyBoxMonIconAtPosition(u8 boxPosition);
void SetBoxMonIconObjMode(u8 cursorPos, u8 objMode);
void SetPartyMonIconObjMode(u8 cursorPos, u8 objMode);
#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H