summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/box_party_pokemon_dropdown.h28
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/pokemon.h1
-rw-r--r--include/graphics.h7
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_icon.h4
-rw-r--r--include/pokemon_storage_system.h33
-rw-r--r--include/pokemon_storage_system_internal.h516
-rw-r--r--include/sprite.h1
-rw-r--r--include/string_util.h4
-rw-r--r--include/strings.h83
-rw-r--r--include/text.h1
-rw-r--r--include/window.h6
13 files changed, 666 insertions, 22 deletions
diff --git a/include/box_party_pokemon_dropdown.h b/include/box_party_pokemon_dropdown.h
index e1ca7256f..52e620956 100644
--- a/include/box_party_pokemon_dropdown.h
+++ b/include/box_party_pokemon_dropdown.h
@@ -1,14 +1,24 @@
#ifndef GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
#define GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
-void sub_80F7AD8(u8 num);
-void sub_80F7B2C(void);
-void sub_80F7B40(void);
-void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4);
-void sub_80F7C7C(u8 a0, const void * a1);
-void sub_80F7CAC(u8 a0, u16 a1, u16 a2);
-void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4);
-void sub_80F7D30(u8 a0, u8 a1, s8 a2);
-void sub_80F7E54(u8 a0);
+enum
+{
+ BPPD_MOVE_INNER_LEFT = 0,
+ BPPD_MOVE_OUTER_LEFT,
+ BPPD_MOVE_INNER_TOP,
+ BPPD_MOVE_OUTER_TOP,
+ BPPD_MOVE_INNER_X,
+ BPPD_MOVE_INNER_Y
+};
+
+void AllocBoxPartyPokemonDropdowns(u8 num);
+void FreeBoxPartyPokemonDropdowns(void);
+void CopyAllBoxPartyPokemonDropdownsToVram(void);
+void SetBoxPartyPokemonDropdownMap2(u8 idx, u8 bgId, const void * src, u16 width, u16 height);
+void SetBoxPartyPokemonDropdownMap1Tiles(u8 idx, const void * src);
+void SetBoxPartyPokemonDropdownMap2Pos(u8 idx, u16 x, u16 y);
+void SetBoxPartyPokemonDropdownMap2Rect(u8 idx, u16 x, u16 y, u16 width, u16 height);
+void AdjustBoxPartyPokemonDropdownPos(u8 a0, u8 a1, s8 a2);
+void CopyBoxPartyPokemonDropdownToBgTilemapBuffer(u8 idx);
#endif //GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 85d704680..0bc96eb35 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1365,7 +1365,7 @@
#define FLAG_SYS_NATIONAL_DEX (SYS_FLAGS + 0x40)
#define FLAG_SYS_PC_STORAGE_DISABLED (SYS_FLAGS + 0x41)
#define FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER (SYS_FLAGS + 0x42)
-#define FLAG_SYS_CHANGED_BOX_TO_STORE_MON (SYS_FLAGS + 0x43)
+#define FLAG_SHOWN_BOX_WAS_FULL_MESSAGE (SYS_FLAGS + 0x43)
#define FLAG_SYS_CAN_LINK_WITH_RS (SYS_FLAGS + 0x44)
#define FLAG_SYS_SEVII_MAP_123 (SYS_FLAGS + 0x45)
#define FLAG_SYS_SEVII_MAP_4567 (SYS_FLAGS + 0x46)
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index a8009f1ff..bc02bffdd 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -212,5 +212,6 @@
#define MAX_TOTAL_EVS 510
#define UNOWN_FORM_COUNT 28
#define MAX_MON_LEVEL 100
+#define BOX_NAME_LENGTH 8
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/graphics.h b/include/graphics.h
index d84371e3a..3930861f8 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4917,4 +4917,11 @@ extern const u16 gUnknown_8E98F38[];
extern const u16 gUnknown_8E990D8[];
extern const u16 gUnknown_8E990F8[];
+// pokemon_storage_system
+extern const u32 gPSSMenu_Gfx[];
+extern const u32 gUnknown_8E9CAEC[];
+extern const u16 gPSSMenu_Pal[];
+extern const u16 gUnknown_8E9C3F8[];
+extern const u16 gUnknown_8E9C418[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/pokemon.h b/include/pokemon.h
index be0a35877..3cefcfcf2 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -126,7 +126,7 @@ struct PokemonStorage
{
/*0x0000*/ u8 currentBox;
/*0x0001*/ struct BoxPokemon boxes[14][30];
- /*0x8344*/ u8 boxNames[14][9];
+ /*0x8344*/ u8 boxNames[14][BOX_NAME_LENGTH + 1];
/*0x83C2*/ u8 boxWallpapers[14];
};
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index 5b9876677..e2eebc62b 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -4,6 +4,7 @@
#include "global.h"
extern const u16 gMonIconPalettes[][16];
+extern const u8 gMonIconPaletteIndices[];
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra);
@@ -26,5 +27,8 @@ void LoadMonIconPalette(u16 iconId);
void FreeMonIconPalette(u16 iconId);
void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
+u16 GetIconSpecies(u16 species, u32 personality);
+void LoadMonIconPalettesAt(u16 offset);
+u8 GetValidMonIconPalIndex(u16 species);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index c636651f3..7422b4522 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -6,15 +6,36 @@
#define TOTAL_BOXES_COUNT 14
#define IN_BOX_COUNT 30
+enum
+{
+ WALLPAPER_FOREST,
+ WALLPAPER_CITY,
+ WALLPAPER_DESERT,
+ WALLPAPER_SAVANNA,
+ WALLPAPER_CRAG,
+ WALLPAPER_VOLCANO,
+ WALLPAPER_SNOW,
+ WALLPAPER_CAVE,
+ WALLPAPER_BEACH,
+ WALLPAPER_SEAFLOOR,
+ WALLPAPER_RIVER,
+ WALLPAPER_SKY,
+ WALLPAPER_POLKADOT,
+ WALLPAPER_POKECENTER,
+ WALLPAPER_MACHINE,
+ WALLPAPER_PLAIN,
+ WALLPAPER_COUNT
+};
+
u8 *GetBoxNamePtr(u8 boxNumber);
struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition);
-void SetBoxMonNickFromAnyBox(u8 boxId, u8 monPosition, u8 * newNick);
-void CompactPartySlots(void);
-u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request);
-void sub_808BCB4(u8 boxId, u8 monPosition);
-void sub_808CE60(void);
+void SetBoxMonNickAt(u8 boxId, u8 monPosition, const u8 *newNick);
+s16 CompactPartySlots(void);
+u32 GetBoxMonDataAt(u8 boxId, u8 monPosition, s32 request);
+void ZeroBoxMonAt(u8 boxId, u8 monPosition);
+void Cb2_ReturnToPSS(void);
void ResetPokemonStorageSystem(void);
u8 StorageGetCurrentBox(void);
-void PSS_RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 a2, u8 a3, u8 *buffer, u8 a5);
+void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h
new file mode 100644
index 000000000..ea76354c6
--- /dev/null
+++ b/include/pokemon_storage_system_internal.h
@@ -0,0 +1,516 @@
+#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]; // unused
+ struct Sprite *unk_0020[2];
+ u8 buffer[0x200]; // passed but not used
+ u8 strbuf[20];
+ bool32 loadPal;
+ u16 tilesTag;
+ u16 paletteTag;
+ u8 curBox;
+ u8 unk_0245; // unused
+ u8 subpriority;
+};
+
+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 FreeBoxSelectionPopupSpriteGfx(void);
+void sub_808C940(u8 curBox);
+void sub_808C950(void);
+u8 HandleBoxChooseSelectionInput(void);
+void LoadBoxSelectionPopupSpriteGfx(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
diff --git a/include/sprite.h b/include/sprite.h
index c53919159..8f95eb788 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -254,6 +254,7 @@ extern const struct SpriteTemplate gDummySpriteTemplate;
extern struct Sprite gSprites[];
extern struct OamMatrix gOamMatrices[];
extern bool8 gAffineAnimsDisabled;
+extern u16 gReservedSpriteTileCount;
void ResetSpriteData(void);
void AnimateSprites(void);
diff --git a/include/string_util.h b/include/string_util.h
index 32e74e031..45adac78d 100644
--- a/include/string_util.h
+++ b/include/string_util.h
@@ -30,8 +30,8 @@ u8 *GetExpandedPlaceholder(u32 id);
u8 *StringFill(u8 *dest, u8 c, u16 n);
u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n);
u8 *StringFillWithTerminator(u8 *dest, u16 n);
-u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n);
-u32 StringLength_Multibyte(u8 *str);
+u8 *StringCopyN_Multibyte(u8 *dest, const u8 *src, u32 n);
+u32 StringLength_Multibyte(const u8 *str);
u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color);
bool32 IsStringJapanese(u8 *str);
bool32 sub_800924C(u8 *str, s32 n);
diff --git a/include/strings.h b/include/strings.h
index be3555780..6016dc3e3 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1358,4 +1358,87 @@ extern const u8 gText_BoxName[];
extern const u8 gText_PkmnsNickname[];
extern const u8 gText_RivalsName[];
+// pokemon_storage_system
+extern const u8 gText_WithdrawPokemon[];
+extern const u8 gText_WithdrawMonDescription[];
+extern const u8 gText_DepositPokemon[];
+extern const u8 gText_DepositMonDescription[];
+extern const u8 gText_MovePokemon[];
+extern const u8 gText_MoveMonDescription[];
+extern const u8 gText_MoveItems[];
+extern const u8 gText_MoveItemsDescription[];
+extern const u8 gText_SeeYa[];
+extern const u8 gText_SeeYaDescription[];
+extern const u8 gText_PartyFull[];
+extern const u8 gText_JustOnePkmn[];
+extern const u8 gText_Box[];
+extern const u8 gText_ExitFromBox[];
+extern const u8 gText_WhatDoYouWantToDo[];
+extern const u8 gText_PleasePickATheme[];
+extern const u8 gText_PickTheWallpaper[];
+extern const u8 gText_PkmnIsSelected[];
+extern const u8 gText_JumpToWhichBox[];
+extern const u8 gText_DepositInWhichBox[];
+extern const u8 gText_PkmnWasDeposited[];
+extern const u8 gText_BoxIsFull2[];
+extern const u8 gText_ReleaseThisPokemon[];
+extern const u8 gText_PkmnWasReleased[];
+extern const u8 gText_ByeByePkmn[];
+extern const u8 gText_MarkYourPkmn[];
+extern const u8 gText_ThatsYourLastPkmn[];
+extern const u8 gText_YourPartysFull[];
+extern const u8 gText_YoureHoldingAPkmn[];
+extern const u8 gText_WhichOneWillYouTake[];
+extern const u8 gText_YouCantReleaseAnEgg[];
+extern const u8 gText_ContinueBoxOperations[];
+extern const u8 gText_PkmnCameBack[];
+extern const u8 gText_WasItWorriedAboutYou[];
+extern const u8 gText_FourEllipsesExclamation[];
+extern const u8 gText_PleaseRemoveTheMail[];
+extern const u8 gText_PkmnIsSelected[];
+extern const u8 gText_GiveToAPkmn[];
+extern const u8 gText_PlacedItemInBag[];
+extern const u8 gText_BagIsFull2[];
+extern const u8 gText_PutItemInBag[];
+extern const u8 gText_ItemIsNowHeld[];
+extern const u8 gText_ChangedToNewItem[];
+extern const u8 gText_MailCantBeStored[];
+extern const u8 gPCText_Cancel[];
+extern const u8 gPCText_Store[];
+extern const u8 gPCText_Withdraw[];
+extern const u8 gPCText_Move[];
+extern const u8 gPCText_Shift[];
+extern const u8 gPCText_Place[];
+extern const u8 gPCText_Summary[];
+extern const u8 gPCText_Release[];
+extern const u8 gPCText_Mark[];
+extern const u8 gPCText_Jump[];
+extern const u8 gPCText_Wallpaper[];
+extern const u8 gPCText_Name[];
+extern const u8 gPCText_Take[];
+extern const u8 gPCText_Give[];
+extern const u8 gPCText_Switch[];
+extern const u8 gPCText_Bag[];
+extern const u8 gPCText_Info[];
+extern const u8 gPCText_Scenery1[];
+extern const u8 gPCText_Scenery2[];
+extern const u8 gPCText_Scenery3[];
+extern const u8 gPCText_Etcetera[];
+extern const u8 gPCText_Forest[];
+extern const u8 gPCText_City[];
+extern const u8 gPCText_Desert[];
+extern const u8 gPCText_Savanna[];
+extern const u8 gPCText_Crag[];
+extern const u8 gPCText_Volcano[];
+extern const u8 gPCText_Snow[];
+extern const u8 gPCText_Cave[];
+extern const u8 gPCText_Beach[];
+extern const u8 gPCText_Seafloor[];
+extern const u8 gPCText_River[];
+extern const u8 gPCText_Sky[];
+extern const u8 gPCText_PolkaDot[];
+extern const u8 gPCText_Pokecenter[];
+extern const u8 gPCText_Machine[];
+extern const u8 gPCText_Simple[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index ff8b033e9..f1bf8b942 100644
--- a/include/text.h
+++ b/include/text.h
@@ -128,6 +128,7 @@
#define EXT_CTRL_CODE_COLOR 0x1
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
#define EXT_CTRL_CODE_SHADOW 0x3
+#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x4
//
#define EXT_CTRL_CODE_UNKNOWN_7 0x7
//
diff --git a/include/window.h b/include/window.h
index 5f3630afb..c8b83af7a 100644
--- a/include/window.h
+++ b/include/window.h
@@ -69,10 +69,10 @@ void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, WindowFunc func);
bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value);
u32 GetWindowAttribute(u8 windowId, u8 attributeId);
-u16 AddWindow8Bit(struct WindowTemplate *template);
-u16 AddWindow8Bit(struct WindowTemplate *template);
+u16 AddWindow8Bit(const struct WindowTemplate *template);
+void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue);
void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern void *gWindowBgTilemapBuffers[];