Synced src/mon_markings.c and partly synced PSS

This commit is contained in:
Eduardo Quezada
2022-07-30 02:22:59 -04:00
parent 4a60396428
commit 60ce72fa5a
88 changed files with 1742 additions and 1590 deletions
+3 -3
View File
@@ -2980,7 +2980,7 @@ extern const u8 gFile_graphics_items_icon_palettes_soda_pop_palette[];
extern const u8 gFile_graphics_items_icons_lemonade_sheet[]; extern const u8 gFile_graphics_items_icons_lemonade_sheet[];
extern const u8 gFile_graphics_items_icon_palettes_lemonade_palette[]; extern const u8 gFile_graphics_items_icon_palettes_lemonade_palette[];
extern const u8 gFile_graphics_items_icons_moomoo_milk_sheet[]; extern const u8 gFile_graphics_items_icons_moomoo_milk_sheet[];
extern const u8 gFile_graphics_items_icon_palettes_moomoo_milk_palette[];; extern const u8 gFile_graphics_items_icon_palettes_moomoo_milk_palette[];
extern const u8 gFile_graphics_items_icon_palettes_energy_powder_palette[]; extern const u8 gFile_graphics_items_icon_palettes_energy_powder_palette[];
extern const u8 gFile_graphics_items_icons_energy_root_sheet[]; extern const u8 gFile_graphics_items_icons_energy_root_sheet[];
extern const u8 gFile_graphics_items_icon_palettes_energy_root_palette[]; extern const u8 gFile_graphics_items_icon_palettes_energy_root_palette[];
@@ -4829,8 +4829,8 @@ extern const u16 gTradeButtons_Gfx[];
extern const u16 gTradeMenuMonBox_Tilemap[]; extern const u16 gTradeMenuMonBox_Tilemap[];
// mon_markings // mon_markings
extern const u16 gUnknown_8E9CBBC[]; extern const u16 gMonMarkingsMenu_Gfx[];
extern const u16 gUnknown_8E9CB9C[]; extern const u16 gMonMarkingsMenu_Pal[];
// hall_of_fame // hall_of_fame
extern const u32 gFile_graphics_misc_confetti_sheet[]; extern const u32 gFile_graphics_misc_confetti_sheet[];
+18 -16
View File
@@ -1,33 +1,35 @@
#ifndef GUARD_MON_MARKINGS_H #ifndef GUARD_MON_MARKINGS_H
#define GUARD_MON_MARKINGS_H #define GUARD_MON_MARKINGS_H
struct PokemonMarkMenu #define NUM_MON_MARKINGS 4
struct MonMarkingsMenu
{ {
/*0x0000*/ u16 baseTileTag; /*0x0000*/ u16 baseTileTag;
/*0x0002*/ u16 basePaletteTag; /*0x0002*/ u16 basePaletteTag;
/*0x0004*/ u8 markings; // bit flags /*0x0004*/ u8 markings; // bit flags
/*0x0005*/ s8 cursorPos; /*0x0005*/ s8 cursorPos;
/*0x0006*/ bool8 markingsArray[4]; /*0x0006*/ bool8 markingsArray[NUM_MON_MARKINGS];
/*0x000A*/ u8 cursorBaseY; /*0x000A*/ u8 cursorBaseY;
/*0x000B*/ bool8 spriteSheetLoadRequired; /*0x000B*/ bool8 spriteSheetLoadRequired;
/*0x000C*/ struct Sprite * menuWindowSprites[2]; // upper and lower halves of menu window /*0x000C*/ struct Sprite *windowSprites[2]; // upper and lower halves of menu window
/*0x0014*/ struct Sprite * menuMarkingSprites[4]; /*0x0014*/ struct Sprite *markingSprites[NUM_MON_MARKINGS];
/*0x0024*/ struct Sprite * unkSprite; /*0x0024*/ struct Sprite *cursorSprite;
/*0x0028*/ struct Sprite * menuTextSprite; /*0x0028*/ struct Sprite *textSprite;
/*0x002C*/ const u8 *frameTiles; /*0x002C*/ const u8 *frameTiles;
/*0x0030*/ const u16 *framePalette; /*0x0030*/ const u16 *framePalette;
/*0x0034*/ u8 menuWindowSpriteTiles[0x1000]; /*0x0034*/ u8 windowSpriteTiles[0x1000];
/*0x1034*/ u8 filler1034[0x80]; /*0x1034*/ u8 unused[0x80];
/*0x10B4*/ u8 tileLoadState; /*0x10B4*/ u8 tileLoadState;
}; // 10b8 }; // 10b8
void SetMonMarkingsMenuPointer(struct PokemonMarkMenu * markMenu); void InitMonMarkingsMenu(struct MonMarkingsMenu *ptr);
void LoadMonMarkingsFrameGfx(void); void BufferMonMarkingsMenuTiles(void);
void DrawMonMarkingsMenu(u8 markings, s16 x, s16 y); void OpenMonMarkingsMenu(u8 markings, s16 x, s16 y);
void TeardownMonMarkingsMenu(void); void FreeMonMarkingsMenu(void);
bool8 MonMarkingsHandleInput(void); bool8 HandleMonMarkingsMenuInput(void);
struct Sprite * CreateMonMarkingSprite_SelectCombo(u16 tileTag, u16 paletteTag, const u16 *palette); struct Sprite *CreateMonMarkingAllCombosSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
struct Sprite * CreateMonMarkingSprite_AllOff(u16 tileTag, u16 paletteTag, const u16 *palette); struct Sprite *CreateMonMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
void RequestDma3LoadMonMarking(u8 markings, void * dest); void UpdateMonMarkingTiles(u8 markings, void *dest);
#endif //GUARD_MON_MARKINGS_H #endif //GUARD_MON_MARKINGS_H
+1
View File
@@ -26,6 +26,7 @@ enum
WALLPAPER_PLAIN, WALLPAPER_PLAIN,
WALLPAPER_COUNT WALLPAPER_COUNT
}; };
#define MAX_DEFAULT_WALLPAPER WALLPAPER_SAVANNA
u8 *GetBoxNamePtr(u8 boxNumber); u8 *GetBoxNamePtr(u8 boxNumber);
struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition); struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition);
+111 -104
View File
@@ -7,8 +7,15 @@
#define IN_BOX_COLUMNS 5 #define IN_BOX_COLUMNS 5
#define IN_BOX_ROWS 6 #define IN_BOX_ROWS 6
#define MAX_MON_ICONS 40 // The maximum number of Pokémon icons that can appear on-screen.
// By default the limit is 40 (though in practice only 37 can be).
#define MAX_MON_ICONS (IN_BOX_COUNT + PARTY_SIZE + 1 >= 40 ? IN_BOX_COUNT + PARTY_SIZE + 1 : 40)
// The maximum number of item icons that can appear on-screen while
// moving held items. 1 in the cursor, and 2 more while switching
// between 2 Pokémon with held items
#define MAX_ITEM_ICONS 3 #define MAX_ITEM_ICONS 3
#define MAX_MENU_ITEMS 7 #define MAX_MENU_ITEMS 7
enum enum
@@ -167,19 +174,19 @@ struct StorageAction
u8 format; u8 format;
}; };
struct UnkPSSStruct_2002370 struct ChooseBoxMenu
{ {
struct Sprite *unk_0000; struct Sprite *menuSprite;
struct Sprite *unk_0004[4]; struct Sprite *menuSideSprites[4];
u32 unk_0014[3]; // unused u32 unused1[3];
struct Sprite *unk_0020[2]; struct Sprite *arrowSprites[2];
u8 buffer[0x200]; // passed but not used u8 buffer[0x200]; // passed but not used
u8 strbuf[20]; u8 strbuf[20];
bool32 loadPal; bool32 loadedPalette;
u16 tilesTag; u16 tileTag;
u16 paletteTag; u16 paletteTag;
u8 curBox; u8 curBox;
u8 unk_0245; // unused u8 unused3;
u8 subpriority; u8 subpriority;
}; };
@@ -189,19 +196,19 @@ struct StorageMenu
int textId; int textId;
}; };
struct UnkStruct_2000028 struct UnkUtilData
{ {
const u8 *unk_00; const u8 *unk_00;
u8 *unk_04; u8 *unk_04;
u16 unk_08; u16 unk_08;
u16 unk_0a; u16 unk_0a;
u16 newField; u16 newField;
void (*unk_0c)(struct UnkStruct_2000028 *data); void (*unk_0c)(struct UnkUtilData *data);
}; };
struct UnkStruct_2000020 struct UnkUtil
{ {
struct UnkStruct_2000028 *unk_00; struct UnkUtilData *unk_00;
u8 unk_04; u8 unk_04;
u8 unk_05; u8 unk_05;
}; };
@@ -231,115 +238,115 @@ struct PokemonStorageSystemData
u8 screenChangeType; u8 screenChangeType;
bool8 isReshowingPSS; bool8 isReshowingPSS;
u8 taskId; u8 taskId;
struct UnkStruct_2000020 unk_0020; struct UnkUtil unkUtil;
struct UnkStruct_2000028 unk_0028[8]; struct UnkUtilData unkUtilData[8];
u16 field_B0[528 / 2]; u16 partyMenuTilemapBuffer[0x108];
u16 field_2C0; u16 partyMenuUnused1; // Never read
u16 field_2C2; u16 partyMenuY;
u8 field_2C4; u8 partyMenuUnused2; // Unused
u8 field_2C5; u8 partyMenuMoveTimer;
u8 showPartyMenuState; u8 showPartyMenuState;
bool8 unk_02C7; bool8 closeBoxFlashing;
u8 unk_02C8; u8 closeBoxFlashTimer;
bool8 unk_02C9; bool8 closeBoxFlashState;
s16 newCurrBoxId; s16 newCurrBoxId;
u16 bg2_X; u16 bg2_X;
s16 field_2CE; s16 scrollSpeed;
u16 field_2D0; u16 scrollTimer;
u8 field_2D2; u8 wallpaperOffset;
u8 field_2D3; u8 scrollUnused1; // Never read
u8 field_2D4; u8 scrollToBoxIdUnused; // Never read
u16 field_2D6; u16 scrollUnused2; // Never read
s16 field_2D8; s16 scrollDirectionUnused; // Never read.
u16 field_2DA; u16 scrollUnused3; // Never read
u16 field_2DC; u16 scrollUnused4; // Never read
u16 field_2DE; u16 scrollUnused5; // Never read
u16 field_2E0; u16 scrollUnused6; // Never read
u8 filler[22]; u8 filler1[22];
u8 field_2F8[512]; u8 field_2F8[512];
u8 field_4F8[512]; u8 field_4F8[512];
u8 field_6F8; u8 boxTitleCycleId;
u8 field_6F9; u8 wallpaperLoadState; // Written to, but never read.
u8 field_6FA; u8 wallpaperLoadBoxId;
s8 field_6FB; s8 wallpaperLoadDir;
u16 field_6FC[16]; u16 boxTitlePal[16];
u16 field_71C; u16 boxTitlePalOffset;
u16 field_71E; u16 boxTitleAltPalOffset;
struct Sprite *field_720[2]; struct Sprite *curBoxTitleSprites[2];
struct Sprite *field_728[2]; struct Sprite *nextBoxTitleSprites[2];
struct Sprite *field_730[2]; struct Sprite *arrowSprites[2];
u32 field_738; u32 wallpaperPalBits;
u8 field_73C[80]; u8 filler2[80]; // Unused
u16 field_78C; u16 unkUnused1; // Never read.
s16 wallpaperSetId; s16 wallpaperSetId;
s16 wallpaperId; s16 wallpaperId;
u16 field_792[360]; u16 wallpaperTilemap[360];
u8 wallpaperChangeState; u8 wallpaperChangeState;
u8 field_A63; u8 scrollState;
u8 field_A64; u8 scrollToBoxId;
s8 field_A65; s8 scrollDirection;
// u8 *wallpaperTiles; // used only in Emerald for Walda // u8 *wallpaperTiles; // used only in Emerald for Walda
/* 0a68 */ struct Sprite *movingMonSprite; /* 0a68 */ struct Sprite *movingMonSprite;
/* 0a6c */ struct Sprite *partySprites[PARTY_SIZE]; /* 0a6c */ struct Sprite *partySprites[PARTY_SIZE];
/* 0a84 */ struct Sprite *boxMonsSprites[IN_BOX_COUNT]; /* 0a84 */ struct Sprite *boxMonsSprites[IN_BOX_COUNT];
/* 0afc */ struct Sprite **field_B00; /* 0afc */ struct Sprite **shiftMonSpritePtr;
/* 0b00 */ struct Sprite **field_B04; /* 0b00 */ struct Sprite **releaseMonSpritePtr;
/* 0b04 */ u16 field_B08[MAX_MON_ICONS]; /* 0b04 */ u16 numIconsPerSpecies[MAX_MON_ICONS];
/* 0b54 */ u16 field_B58[MAX_MON_ICONS]; /* 0b54 */ u16 iconSpeciesList[MAX_MON_ICONS];
/* 0ba4 */ u16 boxSpecies[IN_BOX_COUNT]; /* 0ba4 */ u16 boxSpecies[IN_BOX_COUNT];
/* 0be0 */ u32 boxPersonalities[IN_BOX_COUNT]; /* 0be0 */ u32 boxPersonalities[IN_BOX_COUNT];
/* 0c58 */ u8 field_C5C; /* 0c58 */ u8 incomingBoxId;
/* 0c59 */ u8 field_C5D; /* 0c59 */ u8 shiftTimer;
/* 0c5a */ u8 field_C5E; /* 0c5a */ u8 numPartyToCompact;
/* 0c5c */ u16 field_C60; /* 0c5c */ u16 iconScrollDistance;
/* 0c5e */ s16 field_C62; /* 0c5e */ s16 iconScrollPos;
/* 0c60 */ s16 field_C64; /* 0c60 */ s16 iconScrollSpeed;
/* 0c62 */ u16 field_C66; /* 0c62 */ u16 iconScrollNumIncoming;
/* 0c64 */ u8 field_C68; /* 0c64 */ u8 iconScrollCurColumn;
/* 0c65 */ s8 field_C69; /* 0c65 */ s8 iconScrollDirection; // Unnecessary duplicate of scrollDirection
/* 0c66 */ u8 field_C6A; /* 0c66 */ u8 iconScrollState;
/* 0c67 */ u8 field_C6B; /* 0c67 */ u8 iconScrollToBoxId; // Unused duplicate of scrollToBoxId
/* 0c68 */ struct WindowTemplate menuWindow; /* 0c68 */ struct WindowTemplate menuWindow;
/* 0c70 */ struct StorageMenu menuItems[MAX_MENU_ITEMS]; /* 0c70 */ struct StorageMenu menuItems[MAX_MENU_ITEMS];
/* 0ca8 */ u8 menuItemsCount; /* 0ca8 */ u8 menuItemsCount;
/* 0ca9 */ u8 menuWidth; /* 0ca9 */ u8 menuWidth;
/* 0caa */ u8 field_CAE; /* 0caa */ u8 menuUnusedField; // Never read.
/* 0cac */ u16 field_CB0; /* 0cac */ u16 menuWindowId;
/* 0cb0 */ struct Sprite *field_CB4; /* 0cb0 */ struct Sprite *cursorSprite;
/* 0cb4 */ struct Sprite *field_CB8; /* 0cb4 */ struct Sprite *cursorShadowSprite;
/* 0cb8 */ s32 field_CBC; /* 0cb8 */ s32 cursorNewX;
/* 0cbc */ s32 field_CC0; /* 0cbc */ s32 cursorNewY;
/* 0cc0 */ u32 field_CC4; /* 0cc0 */ u32 cursorSpeedX;
/* 0cc4 */ u32 field_CC8; /* 0cc4 */ u32 cursorSpeedY;
/* 0cc8 */ s16 field_CCC; /* 0cc8 */ s16 cursorTargetX;
/* 0cca */ s16 field_CCE; /* 0cca */ s16 cursorTargetY;
/* 0ccc */ u16 field_CD0; /* 0ccc */ u16 cursorMoveSteps;
/* 0cce */ s8 field_CD2; /* 0cce */ s8 cursorVerticalWrap;
/* 0ccf */ s8 field_CD3; /* 0ccf */ s8 cursorHorizontalWrap;
/* 0cd0 */ u8 field_CD4; /* 0cd0 */ u8 newCursorArea;
/* 0cd1 */ u8 field_CD5; /* 0cd1 */ u8 newCursorPosition;
/* 0cd2 */ u8 field_CD6; /* 0cd2 */ u8 cursorPrevHorizPos;
/* 0cd3 */ u8 field_CD7; /* 0cd3 */ u8 cursorFlipTimer;
/* 0cd4 */ u8 field_CD8[2]; /* 0cd4 */ u8 cursorPalNums[2];
/* 0cd8 */ const u32 *cursorMonPalette; /* 0cd8 */ const u32 *displayMonPalette;
/* 0cdc */ u32 cursorMonPersonality; /* 0cdc */ u32 displayMonPersonality;
/* 0ce0 */ u16 cursorMonSpecies; /* 0ce0 */ u16 displayMonSpecies;
/* 0ce2 */ u16 cursorMonItem; /* 0ce2 */ u16 displayMonItemId;
/* 0ce4 */ u16 field_CE8; /* 0ce4 */ u16 displayUnusedVar;
/* 0ce6 */ bool8 setMosaic; /* 0ce6 */ bool8 setMosaic;
/* 0ce7 */ u8 cursorMonMarkings; /* 0ce7 */ u8 displayMonMarkings;
/* 0ce8 */ u8 cursorMonLevel; /* 0ce8 */ u8 displayMonLevel;
/* 0ce9 */ bool8 cursorMonIsEgg; /* 0ce9 */ bool8 displayMonIsEgg;
/* 0cea */ u8 cursorMonNick[POKEMON_NAME_LENGTH + 1]; /* 0cea */ u8 displayMonName[POKEMON_NAME_LENGTH + 1];
/* 0cf5 */ u8 cursorMonTexts[4][36]; /* 0cf5 */ u8 displayMonTexts[4][36];
/* 0d88 */ bool8 (*monPlaceChangeFunc)(void); /* 0d88 */ bool8 (*monPlaceChangeFunc)(void);
/* 0d8c */ u8 monPlaceChangeState; /* 0d8c */ u8 monPlaceChangeState;
/* 0d8d */ u8 field_D91; /* 0d8d */ u8 shiftBoxId;
/* 0d90 */ struct Sprite *monMarkingSprite; /* 0d90 */ struct Sprite *markingComboSprite;
/* 0d94 */ struct Sprite *field_D98[2]; /* 0d94 */ struct Sprite *waveformSprites[2];
/* 0d9c */ u16 *monMarkingSpriteTileStart; /* 0d9c */ u16 *markingComboTilesPtr;
/* 0da0 */ struct PokemonMarkMenu field_DA4; /* 0da0 */ struct MonMarkingsMenu markMenu;
/* 1e58 */ struct UnkPSSStruct_2002370 field_1E5C; /* 1e58 */ struct ChooseBoxMenu field_1E5C;
/* 20a0 */ struct Pokemon movingMon; /* 20a0 */ struct Pokemon movingMon;
/* 2104 */ struct Pokemon field_2108; /* 2104 */ struct Pokemon field_2108;
/* 2168 */ u8 field_216C; /* 2168 */ u8 field_216C;
@@ -392,12 +399,12 @@ void SetCurrentBox(u8 boxId);
void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst); void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst);
void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src); void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src);
void Cb2_ExitPSS(void); void CB2_ExitPokeStorage(void);
void FreeBoxSelectionPopupSpriteGfx(void); void FreeBoxSelectionPopupSpriteGfx(void);
void sub_808C940(u8 curBox); void sub_808C940(u8 curBox);
void sub_808C950(void); void sub_808C950(void);
u8 HandleBoxChooseSelectionInput(void); u8 HandleBoxChooseSelectionInput(void);
void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal); void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal);
void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value); void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
u32 GetCurrentBoxMonData(u8 boxPosition, s32 request); u32 GetCurrentBoxMonData(u8 boxPosition, s32 request);
u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst); u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst);
@@ -438,7 +445,7 @@ const u8 *GetMovingItemName(void);
void sub_80966F4(void); void sub_80966F4(void);
bool8 sub_8096728(void); bool8 sub_8096728(void);
bool8 sub_80967C0(void); bool8 sub_80967C0(void);
void sub_8096BE4(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2); void sub_8096BE4(struct UnkUtil *arg0, struct UnkUtilData *arg1, u32 arg2);
void sub_8096BF8(void); void sub_8096BF8(void);
void AddMenu(void); void AddMenu(void);
bool8 CanMovePartyMon(void); bool8 CanMovePartyMon(void);
+1 -1
View File
@@ -14,6 +14,6 @@ extern const u16 gUnknown_8471DEC[][16];
extern const struct TextWindowGraphics gUserFrames[]; extern const struct TextWindowGraphics gUserFrames[];
const struct TextWindowGraphics * GetUserFrameGraphicsInfo(u8 idx); const struct TextWindowGraphics *GetWindowFrameTilesPal(u8 idx);
#endif //GUARD_TEXT_WINDOW_GRAPHICS_H #endif //GUARD_TEXT_WINDOW_GRAPHICS_H
+1 -1
View File
@@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult)
{ {
lman.reserveDisconnectSlot_flag = 0; lman.reserveDisconnectSlot_flag = 0;
lman.acceptCount = 0; lman.acceptCount = 0;
lman.acceptSlot_flag = 0;; lman.acceptSlot_flag = 0;
lman.parent_child = MODE_NEUTRAL; lman.parent_child = MODE_NEUTRAL;
rfu_LMAN_managerChangeAgbClockMaster(); rfu_LMAN_managerChangeAgbClockMaster();
if (reqCommandId == ID_STOP_MODE_REQ) if (reqCommandId == ID_STOP_MODE_REQ)
+2 -2
View File
@@ -833,8 +833,8 @@ void sub_81546C0(void)
static void sub_81546EC(u8 frameId) static void sub_81546EC(u8 frameId)
{ {
LoadBgTiles(0, GetUserFrameGraphicsInfo(frameId)->tiles, 0x120, 1); LoadBgTiles(0, GetWindowFrameTilesPal(frameId)->tiles, 0x120, 1);
LoadPalette(GetUserFrameGraphicsInfo(frameId)->palette, 0xA0, 0x20); LoadPalette(GetWindowFrameTilesPal(frameId)->palette, 0xA0, 0x20);
} }
static void sub_8154720(void) static void sub_8154720(void)
+2 -2
View File
@@ -1255,8 +1255,8 @@ const u32 gPSSMenu_Gfx[] = INCBIN_U32("graphics/interface/box_tiles.4bpp.lz");
const u32 gUnknown_8E9CAEC[] = INCBIN_U32("graphics/unknown/unknown_E9CAEC.bin.lz"); const u32 gUnknown_8E9CAEC[] = INCBIN_U32("graphics/unknown/unknown_E9CAEC.bin.lz");
const u16 gUnknown_8E9CB9C[] = INCBIN_U16("graphics/misc/markings2.gbapal"); const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/misc/markings2.gbapal");
const u16 gUnknown_8E9CBBC[] = INCBIN_U16("graphics/misc/markings2.4bpp"); const u16 gMonMarkingsMenu_Gfx[] = INCBIN_U16("graphics/misc/markings2.4bpp");
const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal"); const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal");
const u16 gTradeButtons_Pal[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal"); const u16 gTradeButtons_Pal[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal");
+2 -2
View File
@@ -677,8 +677,8 @@ static void PrintBadgeCount(void)
static void LoadUserFrameToBg(u8 bgId) static void LoadUserFrameToBg(u8 bgId)
{ {
LoadBgTiles(bgId, GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, 0x1B1); LoadBgTiles(bgId, GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, 0x1B1);
LoadPalette(GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->palette, 0x20, 0x20); LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->palette, 0x20, 0x20);
MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]); MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
} }
+433 -337
View File
@@ -5,510 +5,606 @@
#include "graphics.h" #include "graphics.h"
#include "constants/songs.h" #include "constants/songs.h"
static EWRAM_DATA struct PokemonMarkMenu * sMenu = NULL; #define ANIM_CURSOR (NUM_MON_MARKINGS * 2)
#define ANIM_TEXT (ANIM_CURSOR + 1)
static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 tilesTag, u16 paletteTag); #define SELECTION_OK NUM_MON_MARKINGS
static void nullsub_62(struct Sprite * sprite); #define SELECTION_CANCEL (SELECTION_OK + 1)
static void SpriteCB_MarkingIcon(struct Sprite * sprite);
static void SpriteCB_Cursor(struct Sprite * sprite); static void CreateMonMarkingsMenuSprites(s16, s16, u16, u16);
static struct Sprite * CreateMonMarkingSprite(u16 tilesTag, u16 paletteTag, const u16 *palette, u16 size); static void SpriteCB_Dummy(struct Sprite *);
static void SpriteCB_Marking(struct Sprite *);
static void SpriteCB_Cursor(struct Sprite *);
static struct Sprite *CreateMarkingComboSprite(u16, u16, const u16 *, u16);
static const u16 sMonMarkingsPal[] = INCBIN_U16("graphics/misc/mon_markings.gbapal"); static const u16 sMonMarkingsPal[] = INCBIN_U16("graphics/misc/mon_markings.gbapal");
static const u16 sMonMarkingsTiles[] = INCBIN_U16("graphics/misc/mon_markings.4bpp"); static const u16 sMonMarkings_Gfx[] = INCBIN_U16("graphics/misc/mon_markings.4bpp");
static const u8 sUnref_83EE828[] = {0x09, 0x50, 0x13, 0x02, 0xFF}; static const u8 sUnref_83EE828[] = {0x09, 0x50, 0x13, 0x02, 0xFF};
static const struct OamData sOamData_64x64 = { static const struct OamData sOamData_MenuWindow =
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64)
};
static const struct OamData sOamData_8x8 = {
.shape = SPRITE_SHAPE(8x8),
.size = SPRITE_SIZE(8x8)
};
static const union AnimCmd sAnimCmd_MenuMark_CircleOff[] = {
ANIMCMD_FRAME(0x0, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_CircleOn[] = {
ANIMCMD_FRAME(0x1, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_SquareOff[] = {
ANIMCMD_FRAME(0x2, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_SquareOn[] = {
ANIMCMD_FRAME(0x3, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_TriangleOff[] = {
ANIMCMD_FRAME(0x4, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_TriangleOn[] = {
ANIMCMD_FRAME(0x5, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_HeartOff[] = {
ANIMCMD_FRAME(0x6, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_HeartOn[] = {
ANIMCMD_FRAME(0x7, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_Cursor[] = {
ANIMCMD_FRAME(0x8, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MenuMark_Blank[] = {
ANIMCMD_FRAME(0x9, 5),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_MenuMark[] = {
sAnimCmd_MenuMark_CircleOff,
sAnimCmd_MenuMark_CircleOn,
sAnimCmd_MenuMark_SquareOff,
sAnimCmd_MenuMark_SquareOn,
sAnimCmd_MenuMark_TriangleOff,
sAnimCmd_MenuMark_TriangleOn,
sAnimCmd_MenuMark_HeartOff,
sAnimCmd_MenuMark_HeartOn,
sAnimCmd_MenuMark_Cursor,
sAnimCmd_MenuMark_Blank
};
static const union AnimCmd sAnimCmd_Frame_0[] = {
ANIMCMD_FRAME(0x0, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_Frame_1[] = {
ANIMCMD_FRAME(0x40, 5),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_Frame[] = {
sAnimCmd_Frame_0,
sAnimCmd_Frame_1
};
static const struct OamData sOamData_32x8 = {
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8)
};
static const union AnimCmd sAnimCmd_MonMark_0000[] = {
ANIMCMD_FRAME(0x0, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1000[] = {
ANIMCMD_FRAME(0x4, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0100[] = {
ANIMCMD_FRAME(0x8, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1100[] = {
ANIMCMD_FRAME(0xc, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0010[] = {
ANIMCMD_FRAME(0x10, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1010[] = {
ANIMCMD_FRAME(0x14, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0110[] = {
ANIMCMD_FRAME(0x18, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1110[] = {
ANIMCMD_FRAME(0x1c, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0001[] = {
ANIMCMD_FRAME(0x20, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1001[] = {
ANIMCMD_FRAME(0x24, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0101[] = {
ANIMCMD_FRAME(0x28, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1101[] = {
ANIMCMD_FRAME(0x2c, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0011[] = {
ANIMCMD_FRAME(0x30, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1011[] = {
ANIMCMD_FRAME(0x34, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_0111[] = {
ANIMCMD_FRAME(0x38, 5),
ANIMCMD_END
};
static const union AnimCmd sAnimCmd_MonMark_1111[] = {
ANIMCMD_FRAME(0x3c, 5),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_MonMarkSet[] = {
sAnimCmd_MonMark_0000,
sAnimCmd_MonMark_1000,
sAnimCmd_MonMark_0100,
sAnimCmd_MonMark_1100,
sAnimCmd_MonMark_0010,
sAnimCmd_MonMark_1010,
sAnimCmd_MonMark_0110,
sAnimCmd_MonMark_1110,
sAnimCmd_MonMark_0001,
sAnimCmd_MonMark_1001,
sAnimCmd_MonMark_0101,
sAnimCmd_MonMark_1101,
sAnimCmd_MonMark_0011,
sAnimCmd_MonMark_1011,
sAnimCmd_MonMark_0111,
sAnimCmd_MonMark_1111
};
void SetMonMarkingsMenuPointer(struct PokemonMarkMenu * markMenu)
{ {
sMenu = markMenu; .y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(64x64),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
.affineParam = 0,
};
// Used for the markings, OK/Cancel text, and cursor sprites
static const struct OamData sOamData_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(8x8),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
.affineParam = 0,
};
static const union AnimCmd sAnim_Marking_CircleOff[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_CircleOn[] =
{
ANIMCMD_FRAME(1, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_SquareOff[] =
{
ANIMCMD_FRAME(2, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_SquareOn[] =
{
ANIMCMD_FRAME(3, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_TriangleOff[] =
{
ANIMCMD_FRAME(4, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_TriangleOn[] =
{
ANIMCMD_FRAME(5, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_HeartOff[] =
{
ANIMCMD_FRAME(6, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Marking_HeartOn[] =
{
ANIMCMD_FRAME(7, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_Cursor[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_OKCancelText[] =
{
ANIMCMD_FRAME(9, 5),
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_MenuSprite[] =
{
sAnim_Marking_CircleOff,
sAnim_Marking_CircleOn,
sAnim_Marking_SquareOff,
sAnim_Marking_SquareOn,
sAnim_Marking_TriangleOff,
sAnim_Marking_TriangleOn,
sAnim_Marking_HeartOff,
sAnim_Marking_HeartOn,
[ANIM_CURSOR] = sAnim_Cursor,
[ANIM_TEXT] = sAnim_OKCancelText,
};
static const union AnimCmd sAnim_MenuWindow_UpperHalf[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MenuWindow_LowerHalf[] =
{
ANIMCMD_FRAME(64, 5),
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_MenuWindow[] =
{
sAnim_MenuWindow_UpperHalf,
sAnim_MenuWindow_LowerHalf,
};
static const struct OamData sOamData_MarkingCombo =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(32x8),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
.affineParam = 0,
};
static const union AnimCmd sAnim_MarkingCombo_AllOff[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_Circle[] =
{
ANIMCMD_FRAME(4, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_Square[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleSquare[] =
{
ANIMCMD_FRAME(12, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_Triangle[] =
{
ANIMCMD_FRAME(16, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleTriangle[] =
{
ANIMCMD_FRAME(20, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_SquareTriangle[] =
{
ANIMCMD_FRAME(24, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleSquareTriangle[] =
{
ANIMCMD_FRAME(28, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_Heart[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleHeart[] =
{
ANIMCMD_FRAME(36, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_SquareHeart[] =
{
ANIMCMD_FRAME(40, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleSquareHeart[] =
{
ANIMCMD_FRAME(44, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_TriangleHeart[] =
{
ANIMCMD_FRAME(48, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_CircleTriangleHeart[] =
{
ANIMCMD_FRAME(52, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_SquareTriangleHeart[] =
{
ANIMCMD_FRAME(56, 5),
ANIMCMD_END,
};
static const union AnimCmd sAnim_MarkingCombo_AllOn[] =
{
ANIMCMD_FRAME(60, 5),
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_MarkingCombo[] =
{
sAnim_MarkingCombo_AllOff,
sAnim_MarkingCombo_Circle,
sAnim_MarkingCombo_Square,
sAnim_MarkingCombo_CircleSquare,
sAnim_MarkingCombo_Triangle,
sAnim_MarkingCombo_CircleTriangle,
sAnim_MarkingCombo_SquareTriangle,
sAnim_MarkingCombo_CircleSquareTriangle,
sAnim_MarkingCombo_Heart,
sAnim_MarkingCombo_CircleHeart,
sAnim_MarkingCombo_SquareHeart,
sAnim_MarkingCombo_CircleSquareHeart,
sAnim_MarkingCombo_TriangleHeart,
sAnim_MarkingCombo_CircleTriangleHeart,
sAnim_MarkingCombo_SquareTriangleHeart,
sAnim_MarkingCombo_AllOn,
};
static EWRAM_DATA struct MonMarkingsMenu *sMenu = NULL;
void InitMonMarkingsMenu(struct MonMarkingsMenu *ptr)
{
sMenu = ptr;
} }
static void GetUserFrameForMonMarkings(void) static void BufferMenuWindowTiles(void)
{ {
const struct TextWindowGraphics * frame = GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType); const struct TextWindowGraphics *frame = GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType);
sMenu->frameTiles = frame->tiles; sMenu->frameTiles = frame->tiles;
sMenu->framePalette = frame->palette; sMenu->framePalette = frame->palette;
sMenu->tileLoadState = 0; sMenu->tileLoadState = 0;
CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles)); CpuFill16(0, sMenu->windowSpriteTiles, sizeof(sMenu->windowSpriteTiles));
} }
static bool8 DoLoadMonMarkingsFrameGfx(void) static bool8 BufferMenuFrameTiles(void)
{ {
u16 i; u16 i;
u8 *menuWindowSpriteTiles = &sMenu->menuWindowSpriteTiles[256 * sMenu->tileLoadState]; u8 *dest = sMenu->windowSpriteTiles + sMenu->tileLoadState * 0x100;
switch (sMenu->tileLoadState) switch (sMenu->tileLoadState)
{ {
case 0: case 0:
CpuFastCopy(sMenu->frameTiles + 0x00, menuWindowSpriteTiles, 0x20); CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
CpuFastCopy(sMenu->frameTiles + 0x20, menuWindowSpriteTiles + 0x20 * (i + 1), 0x20); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
CpuFastCopy(sMenu->frameTiles + 0x40, menuWindowSpriteTiles + 0x20 * 7, 0x20);
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
break; break;
default: default:
CpuFastCopy(sMenu->frameTiles + 0x60, menuWindowSpriteTiles + 0x00, 0x20); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
CpuFastCopy(sMenu->frameTiles + 0x80, menuWindowSpriteTiles + 0x20 * (i + 1), 0x20); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
CpuFastCopy(sMenu->frameTiles + 0xA0, menuWindowSpriteTiles + 0x20 * 7, 0x20);
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
break; break;
case 13: case 13:
CpuFastCopy(sMenu->frameTiles + 0xC0, menuWindowSpriteTiles + 0x00, 0x20); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
CpuFastCopy(sMenu->frameTiles + 0xE0, menuWindowSpriteTiles + 0x20 * (i + 1), 0x20); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
CpuFastCopy(sMenu->frameTiles + 0x100, menuWindowSpriteTiles + 0x20 * 7, 0x20);
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
return FALSE; return FALSE;
case 14: case 14:
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
void LoadMonMarkingsFrameGfx(void) void BufferMonMarkingsMenuTiles(void)
{ {
GetUserFrameForMonMarkings(); BufferMenuWindowTiles();
while (DoLoadMonMarkingsFrameGfx()) while (BufferMenuFrameTiles());
{}
} }
void DrawMonMarkingsMenu(u8 markings, s16 x, s16 y) void OpenMonMarkingsMenu(u8 markings, s16 x, s16 y)
{ {
u16 i; u16 i;
sMenu->cursorPos = 0; sMenu->cursorPos = 0;
sMenu->markings = markings; sMenu->markings = markings;
for (i = 0; i < 4; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
{
sMenu->markingsArray[i] = (sMenu->markings >> i) & 1; sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
} CreateMonMarkingsMenuSprites(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
CreateMonMarkingsMenuSprites(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);;
} }
void TeardownMonMarkingsMenu(void) void FreeMonMarkingsMenu(void)
{ {
u16 i; u16 i;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{
FreeSpriteTilesByTag(sMenu->baseTileTag + i); FreeSpriteTilesByTag(sMenu->baseTileTag + i);
}
FreeSpritePaletteByTag(sMenu->basePaletteTag); FreeSpritePaletteByTag(sMenu->basePaletteTag);
FreeSpritePaletteByTag(sMenu->basePaletteTag + 1); FreeSpritePaletteByTag(sMenu->basePaletteTag + 1);
for (i = 0; i < 2; i++) for (i = 0; i < ARRAY_COUNT(sMenu->windowSprites); i++)
{ {
if (sMenu->menuWindowSprites[i] == NULL) if (sMenu->windowSprites[i] == NULL)
return; // break; return; // break;
DestroySprite(sMenu->menuWindowSprites[i]); DestroySprite(sMenu->windowSprites[i]);
} }
for (i = 0; i < 4; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
{ {
if (sMenu->menuMarkingSprites[i] == NULL) if (sMenu->markingSprites[i] == NULL)
return; // break; return; // break;
DestroySprite(sMenu->menuMarkingSprites[i]); DestroySprite(sMenu->markingSprites[i]);
} }
if (sMenu->unkSprite != NULL) if (sMenu->cursorSprite != NULL)
DestroySprite(sMenu->unkSprite); DestroySprite(sMenu->cursorSprite);
if (sMenu->menuTextSprite != NULL) if (sMenu->textSprite != NULL)
DestroySprite(sMenu->menuTextSprite); DestroySprite(sMenu->textSprite);
} }
bool8 MonMarkingsHandleInput(void) bool8 HandleMonMarkingsMenuInput(void)
{ {
u16 i; u16 i;
if (JOY_NEW(DPAD_UP)) if (JOY_NEW(DPAD_UP))
{ {
s8 pos;
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
if (--sMenu->cursorPos < 0) pos = --sMenu->cursorPos;
sMenu->cursorPos = 5; if (pos < 0)
sMenu->cursorPos = SELECTION_CANCEL;
return TRUE; return TRUE;
} }
if (JOY_NEW(DPAD_DOWN)) if (JOY_NEW(DPAD_DOWN))
{ {
s8 pos;
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
if (++sMenu->cursorPos > 5) pos = ++sMenu->cursorPos;
if (pos > SELECTION_CANCEL)
sMenu->cursorPos = 0; sMenu->cursorPos = 0;
return TRUE; return TRUE;
} }
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
switch (sMenu->cursorPos) switch (sMenu->cursorPos)
{ {
case 4: case SELECTION_OK:
sMenu->markings = 0; sMenu->markings = 0;
for (i = 0; i < 4; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markings |= sMenu->markingsArray[i] << i; sMenu->markings |= sMenu->markingsArray[i] << i;
return FALSE; return FALSE;
case 5: case SELECTION_CANCEL:
return FALSE; return FALSE;
} }
sMenu->markingsArray[sMenu->cursorPos] = sMenu->markingsArray[sMenu->cursorPos] ? FALSE : TRUE;
sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos];
return TRUE; return TRUE;
} }
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 tilesTag, u16 paletteTag) #define sMarkingId data[0]
#define sCursorYOffset data[0]
static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
{ {
u16 i; u16 i;
u8 spriteId; u8 spriteId;
struct SpriteSheet sheets[] = {
struct SpriteSheet sheets[] =
{ {
.data = sMenu->menuWindowSpriteTiles, { sMenu->windowSpriteTiles, 0x1000, baseTileTag },
.size = 0x1000, { gMonMarkingsMenu_Gfx, 0x320, baseTileTag + 1 },
.tag = tilesTag {}
}, {
.data = gUnknown_8E9CBBC,
.size = 0x320,
.tag = tilesTag + 1
}, {}
}; };
struct SpritePalette palettes[] = {
struct SpritePalette palettes[] =
{ {
.data = sMenu->framePalette, { sMenu->framePalette, basePaletteTag },
.tag = paletteTag { gMonMarkingsMenu_Pal, basePaletteTag + 1},
}, { {}
.data = gUnknown_8E9CB9C,
.tag = paletteTag + 1
}, {}
}; };
struct SpriteTemplate sprTemplate = {
.tileTag = tilesTag, struct SpriteTemplate template =
.paletteTag = paletteTag, {
.oam = &sOamData_64x64, .tileTag = baseTileTag,
.anims = sSpriteAnimTable_Frame, .paletteTag = basePaletteTag,
.oam = &sOamData_MenuWindow,
.anims = sAnims_MenuWindow,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = nullsub_62 .callback = SpriteCB_Dummy,
}; };
LoadSpriteSheets(sheets); LoadSpriteSheets(sheets);
LoadSpritePalettes(palettes); LoadSpritePalettes(palettes);
for (i = 0; i < 2; i++) // Create window sprites
for (i = 0; i < ARRAY_COUNT(sMenu->windowSprites); i++)
{ {
spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 1); spriteId = CreateSprite(&template, x + 32, y + 32, 1);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuWindowSprites[i] = &gSprites[spriteId]; sMenu->windowSprites[i] = &gSprites[spriteId];
StartSpriteAnim(&gSprites[spriteId], i); StartSpriteAnim(&gSprites[spriteId], i);
} }
else else
{ {
sMenu->menuWindowSprites[i] = NULL; sMenu->windowSprites[i] = NULL;
return;
}
}
sMenu->windowSprites[1]->y = y + 96;
// Create marking sprites
template.tileTag++;
template.paletteTag++;
template.anims = sAnims_MenuSprite;
template.callback = SpriteCB_Marking;
template.oam = &sOamData_8x8;
for (i = 0; i < NUM_MON_MARKINGS; i++)
{
spriteId = CreateSprite(&template, x + 32, y + 16 + 16 * i, 0);
if (spriteId != MAX_SPRITES)
{
sMenu->markingSprites[i] = &gSprites[spriteId];
gSprites[spriteId].sMarkingId = i;
}
else
{
sMenu->markingSprites[i] = NULL;
return; return;
} }
} }
sMenu->menuWindowSprites[1]->y = y + 96; // Create OK/Cancel text sprite
template.callback = SpriteCallbackDummy;
sprTemplate.tileTag++; spriteId = CreateSprite(&template, 0, 0, 0);
sprTemplate.paletteTag++;
sprTemplate.anims = sSpriteAnimTable_MenuMark;
sprTemplate.callback = SpriteCB_MarkingIcon;
sprTemplate.oam = &sOamData_8x8;
for (i = 0; i < 4; i++)
{
spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuMarkingSprites[i] = &gSprites[spriteId]; sMenu->textSprite = &gSprites[spriteId];
gSprites[spriteId].data[0] = i; sMenu->textSprite->oam.shape = SPRITE_SHAPE(32x32);
sMenu->textSprite->oam.size = SPRITE_SIZE(32x32);
StartSpriteAnim(sMenu->textSprite, ANIM_TEXT);
sMenu->textSprite->x = x + 32;
sMenu->textSprite->y = y + 80;
CalcCenterToCornerVec(sMenu->textSprite, SPRITE_SHAPE(32x16), SPRITE_SIZE(32x16), ST_OAM_AFFINE_OFF);
} }
else else
{ {
sMenu->menuMarkingSprites[i] = NULL; sMenu->textSprite = NULL;
return;
}
} }
sprTemplate.callback = SpriteCallbackDummy; // Create cursor sprite
template.callback = SpriteCB_Cursor;
spriteId = CreateSprite(&sprTemplate, 0, 0, 0); spriteId = CreateSprite(&template, x + 12, 0, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuTextSprite = &gSprites[spriteId]; sMenu->cursorSprite = &gSprites[spriteId];
sMenu->menuTextSprite->oam.shape = ST_OAM_SQUARE; sMenu->cursorSprite->sCursorYOffset = y + 16;
sMenu->menuTextSprite->oam.size = 2; StartSpriteAnim(sMenu->cursorSprite, ANIM_CURSOR);
StartSpriteAnim(sMenu->menuTextSprite, 9);
sMenu->menuTextSprite->x = x + 32;
sMenu->menuTextSprite->y = y + 80;
CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0);
} }
else else
{ {
sMenu->menuTextSprite = NULL; sMenu->cursorSprite = NULL;
}
} }
sprTemplate.callback = SpriteCB_Cursor; static void SpriteCB_Dummy(struct Sprite *sprite)
spriteId = CreateSprite(&sprTemplate, x + 12, 0, 0);
if (spriteId != MAX_SPRITES)
{ {
sMenu->unkSprite = &gSprites[spriteId];
sMenu->unkSprite->data[0] = y + 16;
StartSpriteAnim(sMenu->unkSprite, 8);
} }
static void SpriteCB_Marking(struct Sprite *sprite)
{
if (sMenu->markingsArray[sprite->sMarkingId])
StartSpriteAnim(sprite, 2 * sprite->sMarkingId + 1); // Set marking 'on'
else else
{ StartSpriteAnim(sprite, 2 * sprite->sMarkingId); // Set marking 'off'
sMenu->unkSprite = NULL;
}
} }
static void nullsub_62(struct Sprite * sprite) #undef sMarkingId
{}
static void SpriteCB_MarkingIcon(struct Sprite * sprite)
{
if (sMenu->markingsArray[sprite->data[0]])
StartSpriteAnim(sprite, 2 * sprite->data[0] + 1);
else
StartSpriteAnim(sprite, 2 * sprite->data[0] + 0);
}
static void SpriteCB_Cursor(struct Sprite *sprite) static void SpriteCB_Cursor(struct Sprite *sprite)
{ {
sprite->y = 16 * sMenu->cursorPos + sprite->data[0]; sprite->y = (16 * sMenu->cursorPos) + sprite->sCursorYOffset;
} }
struct Sprite * CreateMonMarkingSprite_SelectCombo(u16 tileTag, u16 paletteTag, const u16 *palette) #undef sCursorYOffset
// Creates a mon marking combination sprite with a spritesheet that holds every possible combination, used by the summary screen / Pokénav
struct Sprite *CreateMonMarkingAllCombosSprite(u16 tileTag, u16 paletteTag, const u16 *palette)
{ {
if (palette == NULL) if (palette == NULL)
palette = sMonMarkingsPal; palette = sMonMarkingsPal;
return CreateMonMarkingSprite(tileTag, paletteTag, palette, 16); return CreateMarkingComboSprite(tileTag, paletteTag, palette, 1 << NUM_MON_MARKINGS);
} }
struct Sprite * CreateMonMarkingSprite_AllOff(u16 tileTag, u16 paletteTag, const u16 *palette) // Creates a mon marking combination sprite with a spritesheet that holds only one combination, used for the currently selected PC mon
struct Sprite *CreateMonMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette)
{ {
if (palette == NULL) if (palette == NULL)
palette = sMonMarkingsPal; palette = sMonMarkingsPal;
return CreateMonMarkingSprite(tileTag, paletteTag, palette, 1); return CreateMarkingComboSprite(tileTag, paletteTag, palette, 1);
} }
static struct Sprite * CreateMonMarkingSprite(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size) static struct Sprite *CreateMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size)
{ {
u8 spriteId; u8 spriteId;
struct SpriteTemplate sprTemplate; struct SpriteTemplate template;
struct SpriteSheet sheet = { sMonMarkingsTiles, 0x80, tileTag }; struct SpriteSheet sheet = { sMonMarkings_Gfx, 0x80, tileTag };
struct SpritePalette sprPalette = { palette, paletteTag }; struct SpritePalette sprPalette = { palette, paletteTag };
sprTemplate.tileTag = tileTag; template.tileTag = tileTag;
sprTemplate.paletteTag = paletteTag; template.paletteTag = paletteTag;
sprTemplate.oam = &sOamData_32x8; template.oam = &sOamData_MarkingCombo;
sprTemplate.anims = sSpriteAnimTable_MonMarkSet; template.anims = sAnims_MarkingCombo;
sprTemplate.images = NULL; template.images = NULL;
sprTemplate.affineAnims = gDummySpriteAffineAnimTable; template.affineAnims = gDummySpriteAffineAnimTable;
sprTemplate.callback = nullsub_62; template.callback = SpriteCB_Dummy;
sheet.size = size * 0x80; sheet.size = size * 0x80;
LoadSpriteSheet(&sheet); LoadSpriteSheet(&sheet);
LoadSpritePalette(&sprPalette); LoadSpritePalette(&sprPalette);
spriteId = CreateSprite(&sprTemplate, 0, 0, 0); spriteId = CreateSprite(&template, 0, 0, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
return &gSprites[spriteId]; return &gSprites[spriteId];
else else
return NULL; return NULL;
} }
void RequestDma3LoadMonMarking(u8 markings, void * dest) // Update what combination is shown, used for sprites created with CreateMonMarkingComboSprite
void UpdateMonMarkingTiles(u8 markings, void *dest)
{ {
RequestDma3Copy(&sMonMarkingsTiles[64 * markings], dest, 0x80, DMA3_32BIT); RequestDma3Copy(&sMonMarkings_Gfx[64 * markings], dest, 0x80, DMA3_32BIT);
} }
+4 -4
View File
@@ -337,10 +337,10 @@ static bool8 LoadOptionMenuPalette(void)
switch (sOptionMenuPtr->loadPaletteState) switch (sOptionMenuPtr->loadPaletteState)
{ {
case 0: case 0:
LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); LoadBgTiles(1, GetWindowFrameTilesPal(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
break; break;
case 1: case 1:
LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); LoadPalette(GetWindowFrameTilesPal(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
break; break;
case 2: case 2:
LoadPalette(sOptionMenuPalette, 0x10, 0x20); LoadPalette(sOptionMenuPalette, 0x10, 0x20);
@@ -381,8 +381,8 @@ static void Task_OptionMenu(u8 taskId)
sOptionMenuPtr->loadState++; sOptionMenuPtr->loadState++;
break; break;
case 2: case 2:
LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); LoadBgTiles(1, GetWindowFrameTilesPal(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); LoadPalette(GetWindowFrameTilesPal(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
BufferOptionMenuString(sOptionMenuPtr->cursorPos); BufferOptionMenuString(sOptionMenuPtr->cursorPos);
break; break;
case 3: case 3:
+144 -98
View File
@@ -15,14 +15,18 @@
#include "constants/field_weather.h" #include "constants/field_weather.h"
#include "constants/help_system.h" #include "constants/help_system.h"
struct PSS_MenuStringPtrs // PC main menu options
{ enum {
const u8 *text; OPTION_WITHDRAW,
const u8 *desc; OPTION_DEPOSIT,
OPTION_MOVE_MONS,
OPTION_MOVE_ITEMS,
OPTION_EXIT,
OPTIONS_COUNT
}; };
static EWRAM_DATA u8 sPreviousBoxOption = 0; static EWRAM_DATA u8 sPreviousBoxOption = 0;
static EWRAM_DATA struct UnkPSSStruct_2002370 *sBoxSelectionPopupSpriteManager = NULL; static EWRAM_DATA struct ChooseBoxMenu *sBoxSelectionPopupSpriteManager = NULL;
static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr); static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
static void sub_808C9C4(u8 curBox); static void sub_808C9C4(u8 curBox);
@@ -39,12 +43,15 @@ static const u16 sBoxSelectionPopupPalette[];
static const u16 sBoxSelectionPopupCenterTiles[]; static const u16 sBoxSelectionPopupCenterTiles[];
static const u16 sBoxSelectionPopupSidesTiles[]; static const u16 sBoxSelectionPopupSidesTiles[];
static const struct PSS_MenuStringPtrs sUnknown_83CDA20[] = { struct {
{gText_WithdrawPokemon, gText_WithdrawMonDescription}, const u8 *text;
{gText_DepositPokemon, gText_DepositMonDescription }, const u8 *desc;
{gText_MovePokemon, gText_MoveMonDescription }, } static const sMainMenuTexts[OPTIONS_COUNT] = {
{gText_MoveItems, gText_MoveItemsDescription }, [OPTION_WITHDRAW] = {gText_WithdrawPokemon, gText_WithdrawMonDescription},
{gText_SeeYa, gText_SeeYaDescription } [OPTION_DEPOSIT] = {gText_DepositPokemon, gText_DepositMonDescription},
[OPTION_MOVE_MONS] = {gText_MovePokemon, gText_MoveMonDescription},
[OPTION_MOVE_ITEMS] = {gText_MoveItems, gText_MoveItemsDescription},
[OPTION_EXIT] = {gText_SeeYa, gText_SeeYaDescription}
}; };
void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer) void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer)
@@ -60,7 +67,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
windowId = AddWindow(&winTemplate); windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2)); FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2));
tileData1 = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA); tileData1 = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * 32) + tileData1; tileData2 = (winTemplate.width * TILE_SIZE_4BPP) + tileData1;
if (!zero1) if (!zero1)
txtColor[0] = TEXT_COLOR_TRANSPARENT; txtColor[0] = TEXT_COLOR_TRANSPARENT;
@@ -223,7 +230,8 @@ static void sub_808C25C(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src,
} }
} }
static void sub_808C2D8(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) // Unused
static void UnusedWriteRectDma(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height)
{ {
u16 i; u16 i;
@@ -233,109 +241,138 @@ static void sub_808C2D8(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 h
Dma3FillLarge16_(0, dest, width); Dma3FillLarge16_(0, dest, width);
} }
static void Task_PokemonStorageSystemPC(u8 taskId)
//------------------------------------------------------------------------------
// SECTION: Main menu
//
// The below functions generally handle the PC main menu where the main
// options can be selected (Withdraw, Deposit, etc.), as well as exiting
// Pokémon Storage back to this menu.
//------------------------------------------------------------------------------
enum {
STATE_LOAD,
STATE_FADE_IN,
STATE_HANDLE_INPUT,
STATE_ERROR_MSG,
STATE_ENTER_PC,
};
#define tState data[0]
#define tSelectedOption data[1]
#define tInput data[2]
#define tNextOption data[3]
#define tWindowId data[15]
static void Task_PCMainMenu(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
switch (task->data[0]) switch (task->tState)
{ {
case 0: case STATE_LOAD:
SetHelpContext(HELPCONTEXT_BILLS_PC); SetHelpContext(HELPCONTEXT_BILLS_PC);
PSS_CreatePCMenu(task->data[1], &task->data[15]); PSS_CreatePCMenu(task->tSelectedOption, &task->tWindowId);
LoadStdWindowFrameGfx(); LoadStdWindowFrameGfx();
DrawDialogueFrame(0, 0); DrawDialogueFrame(0, FALSE);
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL); CopyWindowToVram(0, COPYWIN_FULL);
CopyWindowToVram(task->data[15], COPYWIN_FULL); CopyWindowToVram(task->tWindowId, COPYWIN_FULL);
task->data[0]++; task->tState++;
break; break;
case 1: case STATE_FADE_IN:
if (IsWeatherNotFadingIn()) if (IsWeatherNotFadingIn())
{ {
task->data[0]++; task->tState++;
} }
break; break;
case 2: case STATE_HANDLE_INPUT:
task->data[2] = Menu_ProcessInput(); task->tInput = Menu_ProcessInput();
switch(task->data[2]) switch(task->tInput)
{ {
case MENU_NOTHING_CHOSEN: case MENU_NOTHING_CHOSEN:
task->data[3] = task->data[1]; task->tNextOption = task->tSelectedOption;
if (JOY_NEW(DPAD_UP) && --task->data[3] < 0) if (JOY_NEW(DPAD_UP) && --task->tNextOption < 0)
task->data[3] = 4; task->tNextOption = OPTIONS_COUNT - 1;
if (JOY_NEW(DPAD_DOWN) && ++task->tNextOption > OPTIONS_COUNT - 1)
task->tNextOption = 0;
if (JOY_NEW(DPAD_DOWN) && ++task->data[3] > 4) if (task->tSelectedOption != task->tNextOption)
task->data[3] = 0;
if (task->data[1] != task->data[3])
{ {
task->data[1] = task->data[3]; task->tSelectedOption = task->tNextOption;
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
} }
break; break;
case MENU_B_PRESSED: case MENU_B_PRESSED:
case 4: case OPTION_EXIT:
ClearStdWindowAndFrame(0, TRUE); ClearStdWindowAndFrame(0, TRUE);
ClearStdWindowAndFrame(task->data[15], TRUE); ClearStdWindowAndFrame(task->tWindowId, TRUE);
ScriptContext2_Disable(); ScriptContext2_Disable();
EnableBothScriptContexts(); EnableBothScriptContexts();
DestroyTask(taskId); DestroyTask(taskId);
break; break;
default: default:
if (task->data[2] == 0 && CountPartyMons() == PARTY_SIZE) if (task->tInput == 0 && CountPartyMons() == PARTY_SIZE)
{ {
// Can't withdraw
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->data[0] = 3; task->tState = 3;
} }
else if (task->data[2] == 1 && CountPartyMons() == 1) else if (task->tInput == 1 && CountPartyMons() == 1)
{ {
// Can't deposit
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->data[0] = 3; task->tState = STATE_ERROR_MSG;
} }
else else
{ {
// Enter PC
FadeScreen(FADE_TO_BLACK, 0); FadeScreen(FADE_TO_BLACK, 0);
task->data[0] = 4; task->tState = STATE_ENTER_PC;
} }
break; break;
} }
break; break;
case 3: case STATE_ERROR_MSG:
// Printed "can't do PC option message"
// Wait for new input after message
if (JOY_NEW(A_BUTTON | B_BUTTON)) if (JOY_NEW(A_BUTTON | B_BUTTON))
{ {
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->data[0] = 2; task->tState = STATE_HANDLE_INPUT;
} }
else if (JOY_NEW(DPAD_UP)) else if (JOY_NEW(DPAD_UP))
{ {
if (--task->data[1] < 0) if (--task->tSelectedOption < 0)
task->data[1] = 4; task->tSelectedOption = 4;
Menu_MoveCursor(-1); Menu_MoveCursor(-1);
task->data[1] = Menu_GetCursorPos(); task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->data[0] = 2; task->tState = STATE_HANDLE_INPUT;
} }
else if (JOY_NEW(DPAD_DOWN)) else if (JOY_NEW(DPAD_DOWN))
{ {
if (++task->data[1] > 3) if (++task->tSelectedOption > 3)
task->data[1] = 0; task->tSelectedOption = 0;
Menu_MoveCursor(1); Menu_MoveCursor(1);
task->data[1] = Menu_GetCursorPos(); task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); AddTextPrinterParameterized2(0, 2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->data[0] = 2; task->tState = STATE_HANDLE_INPUT;
} }
break; break;
case 4: case STATE_ENTER_PC:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
CleanupOverworldWindowsAndTilemaps(); CleanupOverworldWindowsAndTilemaps();
Cb2_EnterPSS(task->data[2]); Cb2_EnterPSS(task->tInput);
DestroyTask(taskId); DestroyTask(taskId);
} }
break; break;
@@ -344,22 +381,22 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
void ShowPokemonStorageSystemPC(void) void ShowPokemonStorageSystemPC(void)
{ {
u8 taskId = CreateTask(Task_PokemonStorageSystemPC, 80); u8 taskId = CreateTask(Task_PCMainMenu, 80);
gTasks[taskId].data[0] = 0; gTasks[taskId].tState = 0;
gTasks[taskId].data[1] = 0; gTasks[taskId].tSelectedOption = 0;
ScriptContext2_Enable(); ScriptContext2_Enable();
} }
static void FieldCb_ReturnToPcMenu(void) static void FieldTask_ReturnToPcMenu(void)
{ {
u8 taskId; u8 taskId;
MainCallback vblankCb = gMain.vblankCallback; MainCallback vblankCb = gMain.vblankCallback;
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
taskId = CreateTask(Task_PokemonStorageSystemPC, 80); taskId = CreateTask(Task_PCMainMenu, 80);
gTasks[taskId].data[0] = 0; gTasks[taskId].tState = 0;
gTasks[taskId].data[1] = sPreviousBoxOption; gTasks[taskId].tSelectedOption = sPreviousBoxOption;
Task_PokemonStorageSystemPC(taskId); Task_PCMainMenu(taskId);
SetVBlankCallback(vblankCb); SetVBlankCallback(vblankCb);
FadeInFromBlack(); FadeInFromBlack();
} }
@@ -380,15 +417,15 @@ static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr)
windowId = AddWindow(&sUnknown_83CDA48); windowId = AddWindow(&sUnknown_83CDA48);
DrawStdWindowFrame(windowId, FALSE); DrawStdWindowFrame(windowId, FALSE);
PrintTextArray(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, NELEMS(sUnknown_83CDA20), (void *)sUnknown_83CDA20); PrintTextArray(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, NELEMS(sMainMenuTexts), (void *)sMainMenuTexts);
Menu_InitCursor(windowId, 2, 0, 2, 16, NELEMS(sUnknown_83CDA20), whichMenu); Menu_InitCursor(windowId, 2, 0, 2, 16, NELEMS(sMainMenuTexts), whichMenu);
*windowIdPtr = windowId; *windowIdPtr = windowId;
} }
void Cb2_ExitPSS(void) void CB2_ExitPokeStorage(void)
{ {
sPreviousBoxOption = GetCurrentBoxOption(); sPreviousBoxOption = GetCurrentBoxOption();
gFieldCallback = FieldCb_ReturnToPcMenu; gFieldCallback = FieldTask_ReturnToPcMenu;
SetMainCallback2(CB2_ReturnToField); SetMainCallback2(CB2_ReturnToField);
} }
@@ -407,13 +444,22 @@ void ResetPokemonStorageSystem(void)
u8 *dest = StringCopy(GetBoxNamePtr(boxId), gText_Box); u8 *dest = StringCopy(GetBoxNamePtr(boxId), gText_Box);
ConvertIntToDecimalStringN(dest, boxId + 1, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(dest, boxId + 1, STR_CONV_MODE_LEFT_ALIGN, 2);
} }
for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++) for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++)
{ SetBoxWallpaper(boxId, boxId % (MAX_DEFAULT_WALLPAPER + 1));
SetBoxWallpaper(boxId, boxId % 4);
}
} }
void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
//------------------------------------------------------------------------------
// SECTION: Choose Box menu
//
// The below functions handle the popup menu that allows the player to cycle
// through the boxes and select one. Used when storing Pokémon in Deposit mode
// and for the Jump feature.
//------------------------------------------------------------------------------
void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
{ {
struct SpritePalette palette = { struct SpritePalette palette = {
sBoxSelectionPopupPalette, palTag sBoxSelectionPopupPalette, palTag
@@ -429,18 +475,18 @@ void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag
LoadSpriteSheets(sheets); LoadSpriteSheets(sheets);
sBoxSelectionPopupSpriteManager = a0; sBoxSelectionPopupSpriteManager = a0;
a0->tilesTag = tileTag; a0->tileTag = tileTag;
a0->paletteTag = palTag; a0->paletteTag = palTag;
a0->subpriority = a3; a0->subpriority = a3;
a0->loadPal = loadPal; a0->loadedPalette = loadPal;
} }
void FreeBoxSelectionPopupSpriteGfx(void) void FreeBoxSelectionPopupSpriteGfx(void)
{ {
if (sBoxSelectionPopupSpriteManager->loadPal) if (sBoxSelectionPopupSpriteManager->loadedPalette)
FreeSpritePaletteByTag(sBoxSelectionPopupSpriteManager->paletteTag); FreeSpritePaletteByTag(sBoxSelectionPopupSpriteManager->paletteTag);
FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag); FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tileTag);
FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag + 1); FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tileTag + 1);
} }
void sub_808C940(u8 curBox) void sub_808C940(u8 curBox)
@@ -529,43 +575,43 @@ static void sub_808C9C4(u8 curBox)
const u8 gUnknown_83CDA94[] = _("/30"); const u8 gUnknown_83CDA94[] = _("/30");
sBoxSelectionPopupSpriteManager->curBox = curBox; sBoxSelectionPopupSpriteManager->curBox = curBox;
template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag; template.tileTag = sBoxSelectionPopupSpriteManager->tileTag;
template.paletteTag = sBoxSelectionPopupSpriteManager->paletteTag; template.paletteTag = sBoxSelectionPopupSpriteManager->paletteTag;
spriteId = CreateSprite(&template, 160, 96, 0); spriteId = CreateSprite(&template, 160, 96, 0);
sBoxSelectionPopupSpriteManager->unk_0000 = gSprites + spriteId; sBoxSelectionPopupSpriteManager->menuSprite = gSprites + spriteId;
// Manual subsprites // Manual subsprites
oamData.shape = SPRITE_SHAPE(8x32); oamData.shape = SPRITE_SHAPE(8x32);
oamData.size = SPRITE_SIZE(8x32); oamData.size = SPRITE_SIZE(8x32);
template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag + 1; template.tileTag = sBoxSelectionPopupSpriteManager->tileTag + 1;
template.anims = gUnknown_83CDA70; template.anims = gUnknown_83CDA70;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
u16 r5; u16 r5;
spriteId = CreateSprite(&template, 124, 80, sBoxSelectionPopupSpriteManager->subpriority); spriteId = CreateSprite(&template, 124, 80, sBoxSelectionPopupSpriteManager->subpriority);
sBoxSelectionPopupSpriteManager->unk_0004[i] = gSprites + spriteId; sBoxSelectionPopupSpriteManager->menuSideSprites[i] = gSprites + spriteId;
r5 = 0; r5 = 0;
if (i & 2) if (i & 2)
{ {
sBoxSelectionPopupSpriteManager->unk_0004[i]->x = 196; sBoxSelectionPopupSpriteManager->menuSideSprites[i]->x = 196;
r5 = 2; r5 = 2;
} }
if (i & 1) if (i & 1)
{ {
sBoxSelectionPopupSpriteManager->unk_0004[i]->y = 112; sBoxSelectionPopupSpriteManager->menuSideSprites[i]->y = 112;
sBoxSelectionPopupSpriteManager->unk_0004[i]->oam.size = SPRITE_SIZE(8x16); sBoxSelectionPopupSpriteManager->menuSideSprites[i]->oam.size = SPRITE_SIZE(8x16);
r5++; r5++;
} }
StartSpriteAnim(sBoxSelectionPopupSpriteManager->unk_0004[i], r5); StartSpriteAnim(sBoxSelectionPopupSpriteManager->menuSideSprites[i], r5);
} }
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
sBoxSelectionPopupSpriteManager->unk_0020[i] = sub_809223C(72 * i + 0x7c, 0x58, i, 0, sBoxSelectionPopupSpriteManager->subpriority); sBoxSelectionPopupSpriteManager->arrowSprites[i] = sub_809223C(72 * i + 0x7c, 0x58, i, 0, sBoxSelectionPopupSpriteManager->subpriority);
if (sBoxSelectionPopupSpriteManager->unk_0020[i]) if (sBoxSelectionPopupSpriteManager->arrowSprites[i])
{ {
sBoxSelectionPopupSpriteManager->unk_0020[i]->data[0] = (i == 0 ? -1 : 1); sBoxSelectionPopupSpriteManager->arrowSprites[i]->data[0] = (i == 0 ? -1 : 1);
sBoxSelectionPopupSpriteManager->unk_0020[i]->callback = sub_808CD64; sBoxSelectionPopupSpriteManager->arrowSprites[i]->callback = sub_808CD64;
} }
} }
PrintBoxNameAndCountToSprite(); PrintBoxNameAndCountToSprite();
@@ -576,23 +622,23 @@ static void sub_808C9C4(u8 curBox)
static void sub_808CBA4(void) static void sub_808CBA4(void)
{ {
u16 i; u16 i;
if (sBoxSelectionPopupSpriteManager->unk_0000) if (sBoxSelectionPopupSpriteManager->menuSprite)
{ {
DestroySprite(sBoxSelectionPopupSpriteManager->unk_0000); DestroySprite(sBoxSelectionPopupSpriteManager->menuSprite);
sBoxSelectionPopupSpriteManager->unk_0000 = NULL; sBoxSelectionPopupSpriteManager->menuSprite = NULL;
} }
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
if (sBoxSelectionPopupSpriteManager->unk_0004[i]) if (sBoxSelectionPopupSpriteManager->menuSideSprites[i])
{ {
DestroySprite(sBoxSelectionPopupSpriteManager->unk_0004[i]); DestroySprite(sBoxSelectionPopupSpriteManager->menuSideSprites[i]);
sBoxSelectionPopupSpriteManager->unk_0004[i] = NULL; sBoxSelectionPopupSpriteManager->menuSideSprites[i] = NULL;
} }
} }
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
if (sBoxSelectionPopupSpriteManager->unk_0020[i]) if (sBoxSelectionPopupSpriteManager->arrowSprites[i])
DestroySprite(sBoxSelectionPopupSpriteManager->unk_0020[i]); DestroySprite(sBoxSelectionPopupSpriteManager->arrowSprites[i]);
} }
} }
@@ -627,7 +673,7 @@ static void PrintBoxNameAndCountToSprite(void)
static void PrintToSpriteWithTagUnk0240(const u8 *str, u16 x, u16 y) static void PrintToSpriteWithTagUnk0240(const u8 *str, u16 x, u16 y)
{ {
u16 tileStart = GetSpriteTileStartByTag(sBoxSelectionPopupSpriteManager->tilesTag); u16 tileStart = GetSpriteTileStartByTag(sBoxSelectionPopupSpriteManager->tileTag);
PrintStringToBufferCopyNow(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sBoxSelectionPopupSpriteManager->buffer); PrintStringToBufferCopyNow(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sBoxSelectionPopupSpriteManager->buffer);
} }
+76 -76
View File
@@ -370,7 +370,7 @@ void Cb2_EnterPSS(u8 boxOption)
sCurrentBoxOption = boxOption; sCurrentBoxOption = boxOption;
gPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); gPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
if (gPSSData == NULL) if (gPSSData == NULL)
SetMainCallback2(Cb2_ExitPSS); SetMainCallback2(CB2_ExitPokeStorage);
else else
{ {
gPSSData->boxOption = boxOption; gPSSData->boxOption = boxOption;
@@ -389,7 +389,7 @@ void Cb2_ReturnToPSS(void)
ResetTasks(); ResetTasks();
gPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); gPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
if (gPSSData == NULL) if (gPSSData == NULL)
SetMainCallback2(Cb2_ExitPSS); SetMainCallback2(CB2_ExitPokeStorage);
else else
{ {
gPSSData->boxOption = sCurrentBoxOption; gPSSData->boxOption = sCurrentBoxOption;
@@ -421,13 +421,13 @@ static void sub_808CF10(void)
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ClearDma3Requests(); ClearDma3Requests();
gReservedSpriteTileCount = 0x280; gReservedSpriteTileCount = 0x280;
sub_8096BE4(&gPSSData->unk_0020, gPSSData->unk_0028, 8); sub_8096BE4(&gPSSData->unkUtil, gPSSData->unkUtilData, 8);
gKeyRepeatStartDelay = 20; gKeyRepeatStartDelay = 20;
ClearScheduledBgCopiesToVram(); ClearScheduledBgCopiesToVram();
AllocBoxPartyPokemonDropdowns(3); AllocBoxPartyPokemonDropdowns(3);
SetBoxPartyPokemonDropdownMap2(0, 1, gUnknown_83CE6F8, 8, 4); SetBoxPartyPokemonDropdownMap2(0, 1, gUnknown_83CE6F8, 8, 4);
SetBoxPartyPokemonDropdownMap2Pos(0, 1, 0); SetBoxPartyPokemonDropdownMap2Pos(0, 1, 0);
gPSSData->unk_02C7 = FALSE; gPSSData->closeBoxFlashing = FALSE;
} }
static void sub_808CF94(void) static void sub_808CF94(void)
@@ -531,10 +531,10 @@ static void Cb_InitPSS(u8 taskId)
if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
{ {
gPSSData->field_DA4.baseTileTag = TAG_TILE_D; gPSSData->markMenu.baseTileTag = TAG_TILE_D;
gPSSData->field_DA4.basePaletteTag = TAG_PAL_DACE; gPSSData->markMenu.basePaletteTag = TAG_PAL_DACE;
SetMonMarkingsMenuPointer(&gPSSData->field_DA4); InitMonMarkingsMenu(&gPSSData->markMenu);
LoadMonMarkingsFrameGfx(); BufferMonMarkingsMenuTiles();
} }
else else
{ {
@@ -622,7 +622,7 @@ static void Cb_MainPSS(u8 taskId)
case 6: case 6:
if (gPSSData->boxOption == BOX_OPTION_MOVE_MONS) if (gPSSData->boxOption == BOX_OPTION_MOVE_MONS)
{ {
if (IsMonBeingMoved() && ItemIsMail(gPSSData->cursorMonItem)) if (IsMonBeingMoved() && ItemIsMail(gPSSData->displayMonItemId))
gPSSData->state = 5; gPSSData->state = 5;
else else
SetPSSCallback(Cb_HidePartyPokemon); SetPSSCallback(Cb_HidePartyPokemon);
@@ -680,7 +680,7 @@ static void Cb_MainPSS(u8 taskId)
case 11: case 11:
if (!CanMovePartyMon()) if (!CanMovePartyMon())
{ {
if (ItemIsMail(gPSSData->cursorMonItem)) if (ItemIsMail(gPSSData->displayMonItemId))
{ {
gPSSData->state = 5; gPSSData->state = 5;
} }
@@ -911,7 +911,7 @@ static void Cb_OnSelectedMon(u8 taskId)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
PrintStorageActionText(PC_TEXT_IS_SELECTED); PrintStorageActionText(PC_TEXT_IS_SELECTED);
else if (IsActiveItemMoving() || gPSSData->cursorMonItem != 0) else if (IsActiveItemMoving() || gPSSData->displayMonItemId != 0)
PrintStorageActionText(PC_TEXT_IS_SELECTED2); PrintStorageActionText(PC_TEXT_IS_SELECTED2);
else else
PrintStorageActionText(PC_TEXT_GIVE_TO_MON); PrintStorageActionText(PC_TEXT_GIVE_TO_MON);
@@ -971,7 +971,7 @@ static void Cb_OnSelectedMon(u8 taskId)
{ {
gPSSData->state = 3; gPSSData->state = 3;
} }
else if (ItemIsMail(gPSSData->cursorMonItem)) else if (ItemIsMail(gPSSData->displayMonItemId))
{ {
gPSSData->state = 4; gPSSData->state = 4;
} }
@@ -987,11 +987,11 @@ static void Cb_OnSelectedMon(u8 taskId)
{ {
gPSSData->state = 3; gPSSData->state = 3;
} }
else if (gPSSData->cursorMonIsEgg) else if (gPSSData->displayMonIsEgg)
{ {
gPSSData->state = 5; // Cannot release an Egg. gPSSData->state = 5; // Cannot release an Egg.
} }
else if (ItemIsMail(gPSSData->cursorMonItem)) else if (ItemIsMail(gPSSData->displayMonItemId))
{ {
gPSSData->state = 4; gPSSData->state = 4;
} }
@@ -1177,7 +1177,7 @@ static void Cb_DepositMenu(u8 taskId)
{ {
case 0: case 0:
PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
LoadBoxSelectionPopupSpriteGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); LoadChooseBoxMenuGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
sub_808C940(gUnknown_20397B6); sub_808C940(gUnknown_20397B6);
gPSSData->state++; gPSSData->state++;
break; break;
@@ -1372,16 +1372,16 @@ static void Cb_ShowMarkMenu(u8 taskId)
{ {
case 0: case 0:
PrintStorageActionText(PC_TEXT_MARK_POKE); PrintStorageActionText(PC_TEXT_MARK_POKE);
gPSSData->field_DA4.markings = gPSSData->cursorMonMarkings; gPSSData->markMenu.markings = gPSSData->displayMonMarkings;
DrawMonMarkingsMenu(gPSSData->cursorMonMarkings, 0xb0, 0x10); OpenMonMarkingsMenu(gPSSData->displayMonMarkings, 0xb0, 0x10);
gPSSData->state++; gPSSData->state++;
break; break;
case 1: case 1:
if (!MonMarkingsHandleInput()) if (!HandleMonMarkingsMenuInput())
{ {
TeardownMonMarkingsMenu(); FreeMonMarkingsMenu();
ClearBottomWindow(); ClearBottomWindow();
SetMonMarkings(gPSSData->field_DA4.markings); SetMonMarkings(gPSSData->markMenu.markings);
RefreshCursorMonData(); RefreshCursorMonData();
SetPSSCallback(Cb_MainPSS); SetPSSCallback(Cb_MainPSS);
} }
@@ -1394,7 +1394,7 @@ static void Cb_TakeItemForMoving(u8 taskId)
switch (gPSSData->state) switch (gPSSData->state)
{ {
case 0: case 0:
if (!ItemIsMail(gPSSData->cursorMonItem)) if (!ItemIsMail(gPSSData->displayMonItemId))
{ {
ClearBottomWindow(); ClearBottomWindow();
gPSSData->state++; gPSSData->state++;
@@ -1468,7 +1468,7 @@ static void Cb_ItemToBag(u8 taskId)
switch (gPSSData->state) switch (gPSSData->state)
{ {
case 0: case 0:
if (!AddBagItem(gPSSData->cursorMonItem, 1)) if (!AddBagItem(gPSSData->displayMonItemId, 1))
{ {
PlaySE(SE_FAILURE); PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_BAG_FULL); PrintStorageActionText(PC_TEXT_BAG_FULL);
@@ -1516,7 +1516,7 @@ static void Cb_SwitchSelectedItem(u8 taskId)
switch (gPSSData->state) switch (gPSSData->state)
{ {
case 0: case 0:
if (!ItemIsMail(gPSSData->cursorMonItem)) if (!ItemIsMail(gPSSData->displayMonItemId))
{ {
ClearBottomWindow(); ClearBottomWindow();
gPSSData->state++; gPSSData->state++;
@@ -1814,7 +1814,7 @@ static void Cb_JumpBox(u8 taskId)
{ {
case 0: case 0:
PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX);
LoadBoxSelectionPopupSpriteGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); LoadChooseBoxMenuGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
sub_808C940(StorageGetCurrentBox()); sub_808C940(StorageGetCurrentBox());
gPSSData->state++; gPSSData->state++;
break; break;
@@ -2051,7 +2051,7 @@ static void Cb_ChangeScreen(u8 taskId)
case SCREEN_CHANGE_EXIT_BOX: case SCREEN_CHANGE_EXIT_BOX:
default: default:
FreePSSData(); FreePSSData();
SetMainCallback2(Cb2_ExitPSS); SetMainCallback2(CB2_ExitPokeStorage);
break; break;
case SCREEN_CHANGE_SUMMARY_SCREEN: case SCREEN_CHANGE_SUMMARY_SCREEN:
partyMon = gPSSData->field_218C.mon; partyMon = gPSSData->field_218C.mon;
@@ -2163,12 +2163,12 @@ static void sub_808F078(void)
static void PSS_CreateMonMarkingSprite(void) static void PSS_CreateMonMarkingSprite(void)
{ {
gPSSData->monMarkingSprite = CreateMonMarkingSprite_AllOff(TAG_TILE_10, TAG_PAL_DAC8, NULL); gPSSData->markingComboSprite = CreateMonMarkingComboSprite(TAG_TILE_10, TAG_PAL_DAC8, NULL);
gPSSData->monMarkingSprite->oam.priority = 1; gPSSData->markingComboSprite->oam.priority = 1;
gPSSData->monMarkingSprite->subpriority = 1; gPSSData->markingComboSprite->subpriority = 1;
gPSSData->monMarkingSprite->x = 40; gPSSData->markingComboSprite->x = 40;
gPSSData->monMarkingSprite->y = 150; gPSSData->markingComboSprite->y = 150;
gPSSData->monMarkingSpriteTileStart = (void *)OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(TAG_TILE_10); gPSSData->markingComboTilesPtr = (void *)OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(TAG_TILE_10);
} }
static void CreateWaveformSprites(void) static void CreateWaveformSprites(void)
@@ -2180,13 +2180,13 @@ static void CreateWaveformSprites(void)
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
u8 spriteId = CreateSprite(&sSpriteTemplate_Waveform, i * 63 + 8, 9, 2); u8 spriteId = CreateSprite(&sSpriteTemplate_Waveform, i * 63 + 8, 9, 2);
gPSSData->field_D98[i] = &gSprites[spriteId]; gPSSData->waveformSprites[i] = &gSprites[spriteId];
} }
} }
static void RefreshCursorMonData(void) static void RefreshCursorMonData(void)
{ {
LoadCursorMonGfx(gPSSData->cursorMonSpecies, gPSSData->cursorMonPersonality); LoadCursorMonGfx(gPSSData->displayMonSpecies, gPSSData->displayMonPersonality);
PrintCursorMonInfo(); PrintCursorMonInfo();
sub_808F5E8(); sub_808F5E8();
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
@@ -2274,7 +2274,7 @@ static void LoadCursorMonGfx(u16 species, u32 pid)
if (species != SPECIES_NONE) if (species != SPECIES_NONE)
{ {
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gPSSData->field_22C4, species, pid); HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gPSSData->field_22C4, species, pid);
LZ77UnCompWram(gPSSData->cursorMonPalette, gPSSData->field_2244); LZ77UnCompWram(gPSSData->displayMonPalette, gPSSData->field_2244);
CpuCopy32(gPSSData->field_22C4, gPSSData->field_223C, 0x800); CpuCopy32(gPSSData->field_22C4, gPSSData->field_223C, 0x800);
LoadPalette(gPSSData->field_2244, gPSSData->field_223A, 0x20); LoadPalette(gPSSData->field_2244, gPSSData->field_223A, 0x20);
gPSSData->cursorMonSprite->invisible = FALSE; gPSSData->cursorMonSprite->invisible = FALSE;
@@ -2294,28 +2294,28 @@ static void PrintCursorMonInfo(void)
{ {
for (i = 0, y = 0; i < 3; i++, y += 14) for (i = 0, y = 0; i < 3; i++, y += 14)
{ {
AddTextPrinterParameterized(0, 2, gPSSData->cursorMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(0, 2, gPSSData->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
} }
AddTextPrinterParameterized(0, 0, gPSSData->cursorMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(0, 0, gPSSData->displayMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL);
} }
else else
{ {
AddTextPrinterParameterized(0, 0, gPSSData->cursorMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(0, 0, gPSSData->displayMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL);
for (i = 0, y = 15; i < 3; i++, y += 14) for (i = 0, y = 15; i < 3; i++, y += 14)
{ {
AddTextPrinterParameterized(0, 2, gPSSData->cursorMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(0, 2, gPSSData->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
} }
} }
CopyWindowToVram(0, COPYWIN_GFX); CopyWindowToVram(0, COPYWIN_GFX);
if (gPSSData->cursorMonSpecies != SPECIES_NONE) if (gPSSData->displayMonSpecies != SPECIES_NONE)
{ {
RequestDma3LoadMonMarking(gPSSData->cursorMonMarkings, gPSSData->monMarkingSpriteTileStart); UpdateMonMarkingTiles(gPSSData->displayMonMarkings, gPSSData->markingComboTilesPtr);
gPSSData->monMarkingSprite->invisible = FALSE; gPSSData->markingComboSprite->invisible = FALSE;
} }
else else
{ {
gPSSData->monMarkingSprite->invisible = TRUE; gPSSData->markingComboSprite->invisible = TRUE;
} }
} }
@@ -2323,17 +2323,17 @@ static void sub_808F5E8(void)
{ {
u16 i; u16 i;
if (gPSSData->cursorMonSpecies != SPECIES_NONE) if (gPSSData->displayMonSpecies != SPECIES_NONE)
{ {
SetBoxPartyPokemonDropdownMap2Rect(0, 0, 0, 8, 2); SetBoxPartyPokemonDropdownMap2Rect(0, 0, 0, 8, 2);
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
StartSpriteAnimIfDifferent(gPSSData->field_D98[i], i * 2 + 1); StartSpriteAnimIfDifferent(gPSSData->waveformSprites[i], i * 2 + 1);
} }
else else
{ {
SetBoxPartyPokemonDropdownMap2Rect(0, 0, 2, 8, 2); SetBoxPartyPokemonDropdownMap2Rect(0, 0, 2, 8, 2);
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
StartSpriteAnim(gPSSData->field_D98[i], i * 2); StartSpriteAnim(gPSSData->waveformSprites[i], i * 2);
} }
CopyBoxPartyPokemonDropdownToBgTilemapBuffer(0); CopyBoxPartyPokemonDropdownToBgTilemapBuffer(0);
@@ -2342,9 +2342,9 @@ static void sub_808F5E8(void)
static void sub_808F68C(void) static void sub_808F68C(void)
{ {
LZ77UnCompWram(gUnknown_8E9CAEC, gPSSData->field_B0); LZ77UnCompWram(gUnknown_8E9CAEC, gPSSData->partyMenuTilemapBuffer);
LoadPalette(gPSSMenu_Pal, 0x10, 0x20); LoadPalette(gPSSMenu_Pal, 0x10, 0x20);
SetBoxPartyPokemonDropdownMap2(1, 1, gPSSData->field_B0, 12, 22); SetBoxPartyPokemonDropdownMap2(1, 1, gPSSData->partyMenuTilemapBuffer, 12, 22);
SetBoxPartyPokemonDropdownMap2(2, 1, gUnknown_83CE778, 9, 4); SetBoxPartyPokemonDropdownMap2(2, 1, gUnknown_83CE778, 9, 4);
SetBoxPartyPokemonDropdownMap2Pos(1, 10, 0); SetBoxPartyPokemonDropdownMap2Pos(1, 10, 0);
SetBoxPartyPokemonDropdownMap2Pos(2, 21, 0); SetBoxPartyPokemonDropdownMap2Pos(2, 21, 0);
@@ -2365,29 +2365,29 @@ static void sub_808F68C(void)
} }
ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(1);
gPSSData->unk_02C7 = FALSE; gPSSData->closeBoxFlashing = FALSE;
} }
static void SetUpShowPartyMenu(void) static void SetUpShowPartyMenu(void)
{ {
gPSSData->field_2C0 = 20; gPSSData->partyMenuUnused1 = 20;
gPSSData->field_2C2 = 2; gPSSData->partyMenuY = 2;
gPSSData->field_2C5 = 0; gPSSData->partyMenuMoveTimer = 0;
CreatePartyMonsSprites(FALSE); CreatePartyMonsSprites(FALSE);
} }
static bool8 ShowPartyMenu(void) static bool8 ShowPartyMenu(void)
{ {
if (gPSSData->field_2C5 == 20) if (gPSSData->partyMenuMoveTimer == 20)
return FALSE; return FALSE;
gPSSData->field_2C0--; gPSSData->partyMenuUnused1--;
gPSSData->field_2C2++; gPSSData->partyMenuY++;
AdjustBoxPartyPokemonDropdownPos(1, 3, 1); AdjustBoxPartyPokemonDropdownPos(1, 3, 1);
CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1); CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(1);
sub_8090B98(8); sub_8090B98(8);
if (++gPSSData->field_2C5 == 20) if (++gPSSData->partyMenuMoveTimer == 20)
{ {
sInPartyMenu = TRUE; sInPartyMenu = TRUE;
return FALSE; return FALSE;
@@ -2400,24 +2400,24 @@ static bool8 ShowPartyMenu(void)
static void SetUpHidePartyMenu(void) static void SetUpHidePartyMenu(void)
{ {
gPSSData->field_2C0 = 0; gPSSData->partyMenuUnused1 = 0;
gPSSData->field_2C2 = 22; gPSSData->partyMenuY = 22;
gPSSData->field_2C5 = 0; gPSSData->partyMenuMoveTimer = 0;
if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
sub_80960C0(); sub_80960C0();
} }
static bool8 HidePartyMenu(void) static bool8 HidePartyMenu(void)
{ {
if (gPSSData->field_2C5 != 20) if (gPSSData->partyMenuMoveTimer != 20)
{ {
gPSSData->field_2C0++; gPSSData->partyMenuUnused1++;
gPSSData->field_2C2--; gPSSData->partyMenuY--;
AdjustBoxPartyPokemonDropdownPos(1, 3, -1); AdjustBoxPartyPokemonDropdownPos(1, 3, -1);
CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1); CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
FillBgTilemapBufferRect_Palette0(1, 0x100, 10, gPSSData->field_2C2, 12, 1); FillBgTilemapBufferRect_Palette0(1, 0x100, 10, gPSSData->partyMenuY, 12, 1);
sub_8090B98(-8); sub_8090B98(-8);
if (++gPSSData->field_2C5 != 20) if (++gPSSData->partyMenuMoveTimer != 20)
{ {
ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(1);
return TRUE; return TRUE;
@@ -2450,27 +2450,27 @@ static void sub_808F90C(bool8 arg0)
static void sub_808F948(void) static void sub_808F948(void)
{ {
gPSSData->unk_02C7 = TRUE; gPSSData->closeBoxFlashing = TRUE;
gPSSData->unk_02C8 = 30; gPSSData->closeBoxFlashTimer = 30;
gPSSData->unk_02C9 = TRUE; gPSSData->closeBoxFlashState = TRUE;
} }
static void sub_808F974(void) static void sub_808F974(void)
{ {
if (gPSSData->unk_02C7) if (gPSSData->closeBoxFlashing)
{ {
gPSSData->unk_02C7 = FALSE; gPSSData->closeBoxFlashing = FALSE;
sub_808F90C(TRUE); sub_808F90C(TRUE);
} }
} }
static void sub_808F99C(void) static void sub_808F99C(void)
{ {
if (gPSSData->unk_02C7 && ++gPSSData->unk_02C8 > 30) if (gPSSData->closeBoxFlashing && ++gPSSData->closeBoxFlashTimer > 30)
{ {
gPSSData->unk_02C8 = 0; gPSSData->closeBoxFlashTimer = 0;
gPSSData->unk_02C9 = (gPSSData->unk_02C9 == FALSE); gPSSData->closeBoxFlashState = (gPSSData->closeBoxFlashState == FALSE);
sub_808F90C(gPSSData->unk_02C9); sub_808F90C(gPSSData->closeBoxFlashState);
} }
} }
@@ -2502,7 +2502,7 @@ static void sub_808FA30(u8 pos, bool8 isPartyMon)
{ {
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
gPSSData->field_B0[index + j] = data[j]; gPSSData->partyMenuTilemapBuffer[index + j] = data[j];
} }
data += 4; data += 4;
index += 12; index += 12;
@@ -2569,7 +2569,7 @@ static void PrintStorageActionText(u8 id)
case PC_TEXT_FMT_MON_NAME_1: case PC_TEXT_FMT_MON_NAME_1:
case PC_TEXT_FMT_MON_NAME_2: case PC_TEXT_FMT_MON_NAME_2:
case PC_TEXT_FMT_MON_NAME_3: case PC_TEXT_FMT_MON_NAME_3:
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gPSSData->cursorMonNick); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gPSSData->displayMonName);
break; break;
case PC_TEXT_FMT_MON_NAME_4: case PC_TEXT_FMT_MON_NAME_4:
case PC_TEXT_FMT_MON_NAME_5: case PC_TEXT_FMT_MON_NAME_5:
@@ -2580,7 +2580,7 @@ static void PrintStorageActionText(u8 id)
if (IsActiveItemMoving()) if (IsActiveItemMoving())
txtPtr = StringCopy(gPSSData->itemName, GetMovingItemName()); txtPtr = StringCopy(gPSSData->itemName, GetMovingItemName());
else else
txtPtr = StringCopy(gPSSData->itemName, gPSSData->cursorMonTexts[3]); txtPtr = StringCopy(gPSSData->itemName, gPSSData->displayMonTexts[3]);
while (*(txtPtr - 1) == CHAR_SPACE) while (*(txtPtr - 1) == CHAR_SPACE)
txtPtr--; txtPtr--;
@@ -2680,7 +2680,7 @@ static void sub_808FE54(u8 action)
{ {
u16 event; u16 event;
u8 fromBox = sub_8094D34(); u8 fromBox = sub_8094D34();
u16 species = gPSSData->cursorMonSpecies; u16 species = gPSSData->displayMonSpecies;
u16 species2; u16 species2;
u8 toBox; u8 toBox;
struct PssQuestLogBuffer * qlogBuffer; struct PssQuestLogBuffer * qlogBuffer;
+176 -176
View File
@@ -259,16 +259,16 @@ void sub_808FFAC(void)
LoadMonIconPalettes(); LoadMonIconPalettes();
for (i = 0; i < MAX_MON_ICONS; i++) for (i = 0; i < MAX_MON_ICONS; i++)
gPSSData->field_B08[i] = 0; gPSSData->numIconsPerSpecies[i] = 0;
for (i = 0; i < MAX_MON_ICONS; i++) for (i = 0; i < MAX_MON_ICONS; i++)
gPSSData->field_B58[i] = 0; gPSSData->iconSpeciesList[i] = 0;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
gPSSData->partySprites[i] = NULL; gPSSData->partySprites[i] = NULL;
for (i = 0; i < IN_BOX_COUNT; i++) for (i = 0; i < IN_BOX_COUNT; i++)
gPSSData->boxMonsSprites[i] = NULL; gPSSData->boxMonsSprites[i] = NULL;
gPSSData->movingMonSprite = NULL; gPSSData->movingMonSprite = NULL;
gPSSData->field_78C = 0; gPSSData->unkUnused1 = 0;
} }
static u8 sub_8090058(void) static u8 sub_8090058(void)
@@ -364,7 +364,7 @@ static void sub_80902E0(struct Sprite *sprite)
} }
else else
{ {
gPSSData->field_C66--; gPSSData->iconScrollNumIncoming--;
sprite->x = sprite->data[3]; sprite->x = sprite->data[3];
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
} }
@@ -448,7 +448,7 @@ static u8 sub_80903A4(u8 row, u16 times, s16 xDelta)
gPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta; gPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta;
gPSSData->boxMonsSprites[boxPosition]->data[3] = xDest; gPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
gPSSData->boxMonsSprites[boxPosition]->callback = sub_80902E0; gPSSData->boxMonsSprites[boxPosition]->callback = sub_80902E0;
if (GetBoxMonDataAt(gPSSData->field_C5C, boxPosition, MON_DATA_HELD_ITEM) == 0) if (GetBoxMonDataAt(gPSSData->incomingBoxId, boxPosition, MON_DATA_HELD_ITEM) == 0)
gPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND; gPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
count++; count++;
} }
@@ -463,56 +463,56 @@ static u8 sub_80903A4(u8 row, u16 times, s16 xDelta)
static void sub_8090574(u8 boxId, s8 direction) static void sub_8090574(u8 boxId, s8 direction)
{ {
gPSSData->field_C6A = 0; gPSSData->iconScrollState = 0;
gPSSData->field_C6B = boxId; gPSSData->iconScrollToBoxId = boxId;
gPSSData->field_C69 = direction; gPSSData->iconScrollDirection = direction;
gPSSData->field_C60 = 32; gPSSData->iconScrollDistance = 32;
gPSSData->field_C64 = -(6 * direction); gPSSData->iconScrollSpeed = -(6 * direction);
gPSSData->field_C66 = 0; gPSSData->iconScrollNumIncoming = 0;
SetBoxSpeciesAndPersonalities(boxId); SetBoxSpeciesAndPersonalities(boxId);
if (direction > 0) if (direction > 0)
gPSSData->field_C68 = 0; gPSSData->iconScrollCurColumn = 0;
else else
gPSSData->field_C68 = IN_BOX_ROWS - 1; gPSSData->iconScrollCurColumn = IN_BOX_ROWS - 1;
gPSSData->field_C62 = (24 * gPSSData->field_C68) + 100; gPSSData->iconScrollPos = (24 * gPSSData->iconScrollCurColumn) + 100;
sub_809029C(gPSSData->field_C64); sub_809029C(gPSSData->iconScrollSpeed);
} }
static bool8 sub_809062C(void) static bool8 sub_809062C(void)
{ {
if (gPSSData->field_C60 != 0) if (gPSSData->iconScrollDistance != 0)
gPSSData->field_C60--; gPSSData->iconScrollDistance--;
switch (gPSSData->field_C6A) switch (gPSSData->iconScrollState)
{ {
case 0: case 0:
gPSSData->field_C62 += gPSSData->field_C64; gPSSData->iconScrollPos += gPSSData->iconScrollSpeed;
if (gPSSData->field_C62 <= 64 || gPSSData->field_C62 >= 252) if (gPSSData->iconScrollPos <= 64 || gPSSData->iconScrollPos >= 252)
{ {
DestroyAllIconsInRow(gPSSData->field_C68); DestroyAllIconsInRow(gPSSData->iconScrollCurColumn);
gPSSData->field_C62 += gPSSData->field_C69 * 24; gPSSData->iconScrollPos += gPSSData->iconScrollDirection * 24;
gPSSData->field_C6A++; gPSSData->iconScrollState++;
} }
break; break;
case 1: case 1:
gPSSData->field_C62 += gPSSData->field_C64; gPSSData->iconScrollPos += gPSSData->iconScrollSpeed;
gPSSData->field_C66 += sub_80903A4(gPSSData->field_C68, gPSSData->field_C60, gPSSData->field_C64); gPSSData->iconScrollNumIncoming += sub_80903A4(gPSSData->iconScrollCurColumn, gPSSData->iconScrollDistance, gPSSData->iconScrollSpeed);
if ((gPSSData->field_C69 > 0 && gPSSData->field_C68 == IN_BOX_ROWS - 1) if ((gPSSData->iconScrollDirection > 0 && gPSSData->iconScrollCurColumn == IN_BOX_ROWS - 1)
|| (gPSSData->field_C69 < 0 && gPSSData->field_C68 == 0)) || (gPSSData->iconScrollDirection < 0 && gPSSData->iconScrollCurColumn == 0))
{ {
gPSSData->field_C6A++; gPSSData->iconScrollState++;
} }
else else
{ {
gPSSData->field_C68 += gPSSData->field_C69; gPSSData->iconScrollCurColumn += gPSSData->iconScrollDirection;
gPSSData->field_C6A = 0; gPSSData->iconScrollState = 0;
} }
break; break;
case 2: case 2:
if (gPSSData->field_C66 == 0) if (gPSSData->iconScrollNumIncoming == 0)
{ {
gPSSData->field_C60++; gPSSData->iconScrollDistance++;
return FALSE; return FALSE;
} }
break; break;
@@ -539,7 +539,7 @@ static void SetBoxSpeciesAndPersonalities(u8 boxId)
} }
} }
gPSSData->field_C5C = boxId; gPSSData->incomingBoxId = boxId;
} }
void DestroyBoxMonIconAtPosition(u8 boxPosition) void DestroyBoxMonIconAtPosition(u8 boxPosition)
@@ -605,7 +605,7 @@ void sub_80909F4(void)
{ {
u16 i, count; u16 i, count;
gPSSData->field_C5E = 0; gPSSData->numPartyToCompact = 0;
for (i = 0, count = 0; i < PARTY_SIZE; i++) for (i = 0, count = 0; i < PARTY_SIZE; i++)
{ {
if (gPSSData->partySprites[i] != NULL) if (gPSSData->partySprites[i] != NULL)
@@ -614,7 +614,7 @@ void sub_80909F4(void)
{ {
sub_8090A74(gPSSData->partySprites[i], count); sub_8090A74(gPSSData->partySprites[i], count);
gPSSData->partySprites[i] = NULL; gPSSData->partySprites[i] = NULL;
gPSSData->field_C5E++; gPSSData->numPartyToCompact++;
} }
count++; count++;
} }
@@ -623,7 +623,7 @@ void sub_80909F4(void)
u8 sub_8090A60(void) u8 sub_8090A60(void)
{ {
return gPSSData->field_C5E; return gPSSData->numPartyToCompact;
} }
static void sub_8090A74(struct Sprite *sprite, u16 partyId) static void sub_8090A74(struct Sprite *sprite, u16 partyId)
@@ -668,7 +668,7 @@ static void sub_8090AE0(struct Sprite *sprite)
} }
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
gPSSData->partySprites[sprite->data[1]] = sprite; gPSSData->partySprites[sprite->data[1]] = sprite;
gPSSData->field_C5E--; gPSSData->numPartyToCompact--;
} }
} }
@@ -774,44 +774,44 @@ void sub_8090D58(u8 boxId, u8 position)
void sub_8090E08(u8 boxId, u8 position) void sub_8090E08(u8 boxId, u8 position)
{ {
if (boxId == TOTAL_BOXES_COUNT) // party mon if (boxId == TOTAL_BOXES_COUNT) // party mon
gPSSData->field_B00 = &gPSSData->partySprites[position]; gPSSData->shiftMonSpritePtr = &gPSSData->partySprites[position];
else else
gPSSData->field_B00 = &gPSSData->boxMonsSprites[position]; gPSSData->shiftMonSpritePtr = &gPSSData->boxMonsSprites[position];
gPSSData->movingMonSprite->callback = SpriteCallbackDummy; gPSSData->movingMonSprite->callback = SpriteCallbackDummy;
gPSSData->field_C5D = 0; gPSSData->shiftTimer = 0;
} }
bool8 sub_8090E74(void) bool8 sub_8090E74(void)
{ {
if (gPSSData->field_C5D == 16) if (gPSSData->shiftTimer == 16)
return FALSE; return FALSE;
gPSSData->field_C5D++; gPSSData->shiftTimer++;
if (gPSSData->field_C5D & 1) if (gPSSData->shiftTimer & 1)
{ {
(*gPSSData->field_B00)->y--; (*gPSSData->shiftMonSpritePtr)->y--;
gPSSData->movingMonSprite->y++; gPSSData->movingMonSprite->y++;
} }
(*gPSSData->field_B00)->x2 = gSineTable[gPSSData->field_C5D * 8] / 16; (*gPSSData->shiftMonSpritePtr)->x2 = gSineTable[gPSSData->shiftTimer * 8] / 16;
gPSSData->movingMonSprite->x2 = -(gSineTable[gPSSData->field_C5D * 8] / 16); gPSSData->movingMonSprite->x2 = -(gSineTable[gPSSData->shiftTimer * 8] / 16);
if (gPSSData->field_C5D == 8) if (gPSSData->shiftTimer == 8)
{ {
gPSSData->movingMonSprite->oam.priority = (*gPSSData->field_B00)->oam.priority; gPSSData->movingMonSprite->oam.priority = (*gPSSData->shiftMonSpritePtr)->oam.priority;
gPSSData->movingMonSprite->subpriority = (*gPSSData->field_B00)->subpriority; gPSSData->movingMonSprite->subpriority = (*gPSSData->shiftMonSpritePtr)->subpriority;
(*gPSSData->field_B00)->oam.priority = sub_8090058(); (*gPSSData->shiftMonSpritePtr)->oam.priority = sub_8090058();
(*gPSSData->field_B00)->subpriority = 7; (*gPSSData->shiftMonSpritePtr)->subpriority = 7;
} }
if (gPSSData->field_C5D == 16) if (gPSSData->shiftTimer == 16)
{ {
struct Sprite *sprite = gPSSData->movingMonSprite; struct Sprite *sprite = gPSSData->movingMonSprite;
gPSSData->movingMonSprite = (*gPSSData->field_B00); gPSSData->movingMonSprite = (*gPSSData->shiftMonSpritePtr);
*gPSSData->field_B00 = sprite; *gPSSData->shiftMonSpritePtr = sprite;
gPSSData->movingMonSprite->callback = sub_80911B0; gPSSData->movingMonSprite->callback = sub_80911B0;
(*gPSSData->field_B00)->callback = SpriteCallbackDummy; (*gPSSData->shiftMonSpritePtr)->callback = SpriteCallbackDummy;
} }
return TRUE; return TRUE;
@@ -822,64 +822,64 @@ void sub_8090FC4(u8 mode, u8 position)
switch (mode) switch (mode)
{ {
case MODE_PARTY: case MODE_PARTY:
gPSSData->field_B04 = &gPSSData->partySprites[position]; gPSSData->releaseMonSpritePtr = &gPSSData->partySprites[position];
break; break;
case MODE_BOX: case MODE_BOX:
gPSSData->field_B04 = &gPSSData->boxMonsSprites[position]; gPSSData->releaseMonSpritePtr = &gPSSData->boxMonsSprites[position];
break; break;
case MODE_2: case MODE_2:
gPSSData->field_B04 = &gPSSData->movingMonSprite; gPSSData->releaseMonSpritePtr = &gPSSData->movingMonSprite;
break; break;
default: default:
return; return;
} }
if (*gPSSData->field_B04 != NULL) if (*gPSSData->releaseMonSpritePtr != NULL)
{ {
InitSpriteAffineAnim(*gPSSData->field_B04); InitSpriteAffineAnim(*gPSSData->releaseMonSpritePtr);
(*gPSSData->field_B04)->oam.affineMode = ST_OAM_AFFINE_NORMAL; (*gPSSData->releaseMonSpritePtr)->oam.affineMode = ST_OAM_AFFINE_NORMAL;
(*gPSSData->field_B04)->affineAnims = gUnknown_83CEC38; (*gPSSData->releaseMonSpritePtr)->affineAnims = gUnknown_83CEC38;
StartSpriteAffineAnim(*gPSSData->field_B04, 0); StartSpriteAffineAnim(*gPSSData->releaseMonSpritePtr, 0);
} }
} }
bool8 sub_8091084(void) bool8 sub_8091084(void)
{ {
if (*gPSSData->field_B04 == NULL || (*gPSSData->field_B04)->invisible) if (*gPSSData->releaseMonSpritePtr == NULL || (*gPSSData->releaseMonSpritePtr)->invisible)
return FALSE; return FALSE;
if ((*gPSSData->field_B04)->affineAnimEnded) if ((*gPSSData->releaseMonSpritePtr)->affineAnimEnded)
(*gPSSData->field_B04)->invisible = TRUE; (*gPSSData->releaseMonSpritePtr)->invisible = TRUE;
return TRUE; return TRUE;
} }
void sub_80910CC(void) void sub_80910CC(void)
{ {
if (*gPSSData->field_B04 != NULL) if (*gPSSData->releaseMonSpritePtr != NULL)
{ {
FreeOamMatrix((*gPSSData->field_B04)->oam.matrixNum); FreeOamMatrix((*gPSSData->releaseMonSpritePtr)->oam.matrixNum);
DestroyBoxMonIcon(*gPSSData->field_B04); DestroyBoxMonIcon(*gPSSData->releaseMonSpritePtr);
*gPSSData->field_B04 = NULL; *gPSSData->releaseMonSpritePtr = NULL;
} }
} }
void sub_8091114(void) void sub_8091114(void)
{ {
if (*gPSSData->field_B04 != NULL) if (*gPSSData->releaseMonSpritePtr != NULL)
{ {
(*gPSSData->field_B04)->invisible = FALSE; (*gPSSData->releaseMonSpritePtr)->invisible = FALSE;
StartSpriteAffineAnim(*gPSSData->field_B04, 1); StartSpriteAffineAnim(*gPSSData->releaseMonSpritePtr, 1);
} }
} }
bool8 sub_8091150(void) bool8 sub_8091150(void)
{ {
if (gPSSData->field_B04 == NULL) if (gPSSData->releaseMonSpritePtr == NULL)
return FALSE; return FALSE;
if ((*gPSSData->field_B04)->affineAnimEnded) if ((*gPSSData->releaseMonSpritePtr)->affineAnimEnded)
gPSSData->field_B04 = NULL; gPSSData->releaseMonSpritePtr = NULL;
return TRUE; return TRUE;
} }
@@ -891,8 +891,8 @@ void SetMovingMonPriority(u8 priority)
static void sub_80911B0(struct Sprite *sprite) static void sub_80911B0(struct Sprite *sprite)
{ {
sprite->x = gPSSData->field_CB4->x; sprite->x = gPSSData->cursorSprite->x;
sprite->y = gPSSData->field_CB4->y + gPSSData->field_CB4->y2 + 4; sprite->y = gPSSData->cursorSprite->y + gPSSData->cursorSprite->y2 + 4;
} }
static u16 sub_80911D4(u16 species) static u16 sub_80911D4(u16 species)
@@ -902,7 +902,7 @@ static u16 sub_80911D4(u16 species)
// Find the currently-allocated slot // Find the currently-allocated slot
for (i = 0; i < MAX_MON_ICONS; i++) for (i = 0; i < MAX_MON_ICONS; i++)
{ {
if (gPSSData->field_B58[i] == species) if (gPSSData->iconSpeciesList[i] == species)
break; break;
} }
@@ -911,15 +911,15 @@ static u16 sub_80911D4(u16 species)
// Find the first empty slot // Find the first empty slot
for (i = 0; i < MAX_MON_ICONS; i++) for (i = 0; i < MAX_MON_ICONS; i++)
{ {
if (gPSSData->field_B58[i] == SPECIES_NONE) if (gPSSData->iconSpeciesList[i] == SPECIES_NONE)
break; break;
} }
if (i == MAX_MON_ICONS) if (i == MAX_MON_ICONS)
return 0xFFFF; return 0xFFFF;
} }
gPSSData->field_B58[i] = species; gPSSData->iconSpeciesList[i] = species;
gPSSData->field_B08[i]++; gPSSData->numIconsPerSpecies[i]++;
var = 16 * i; var = 16 * i;
CpuCopy32(GetMonIconTiles(species, TRUE), (void *)(OBJ_VRAM0) + var * 32, 0x200); CpuCopy32(GetMonIconTiles(species, TRUE), (void *)(OBJ_VRAM0) + var * 32, 0x200);
@@ -932,10 +932,10 @@ static void sub_8091290(u16 species)
for (i = 0; i < MAX_MON_ICONS; i++) for (i = 0; i < MAX_MON_ICONS; i++)
{ {
if (gPSSData->field_B58[i] == species) if (gPSSData->iconSpeciesList[i] == species)
{ {
if (--gPSSData->field_B08[i] == 0) if (--gPSSData->numIconsPerSpecies[i] == 0)
gPSSData->field_B58[i] = 0; gPSSData->iconSpeciesList[i] = 0;
break; break;
} }
} }
@@ -991,7 +991,7 @@ static void sub_8091420(u8 taskId)
switch (task->data[0]) switch (task->data[0])
{ {
case 0: case 0:
gPSSData->field_2D2 = 0; gPSSData->wallpaperOffset = 0;
gPSSData->bg2_X = 0; gPSSData->bg2_X = 0;
task->data[1] = RequestDma3Fill(0, gPSSData->field_4AC4, 0x1000, DMA3_32BIT); task->data[1] = RequestDma3Fill(0, gPSSData->field_4AC4, 0x1000, DMA3_32BIT);
break; break;
@@ -1029,44 +1029,44 @@ void SetUpScrollToBox(u8 boxId)
{ {
s8 direction = sub_80916F4(boxId); s8 direction = sub_80916F4(boxId);
gPSSData->field_2CE = (direction > 0) ? 6 : -6; gPSSData->scrollSpeed = (direction > 0) ? 6 : -6;
gPSSData->field_2D3 = (direction > 0) ? 1 : 2; gPSSData->scrollUnused1 = (direction > 0) ? 1 : 2;
gPSSData->field_2D0 = 32; gPSSData->scrollTimer = 32;
gPSSData->field_2D4 = boxId; gPSSData->scrollToBoxIdUnused = boxId;
gPSSData->field_2D6 = (direction <= 0) ? 5 : 0; gPSSData->scrollUnused2 = (direction <= 0) ? 5 : 0;
gPSSData->field_2D8 = direction; gPSSData->scrollDirectionUnused = direction;
gPSSData->field_2DA = (direction > 0) ? 264 : 56; gPSSData->scrollUnused3 = (direction > 0) ? 264 : 56;
gPSSData->field_2DC = (direction <= 0) ? 5 : 0; gPSSData->scrollUnused4 = (direction <= 0) ? 5 : 0;
gPSSData->field_2DE = 0; gPSSData->scrollUnused5 = 0;
gPSSData->field_2E0 = 2; gPSSData->scrollUnused6 = 2;
gPSSData->field_A64 = boxId; gPSSData->scrollToBoxId = boxId;
gPSSData->field_A65 = direction; gPSSData->scrollDirection = direction;
gPSSData->field_A63 = 0; gPSSData->scrollState = 0;
} }
bool8 ScrollToBox(void) bool8 ScrollToBox(void)
{ {
bool8 var; bool8 var;
switch (gPSSData->field_A63) switch (gPSSData->scrollState)
{ {
case 0: case 0:
LoadWallpaperGfx(gPSSData->field_A64, gPSSData->field_A65); LoadWallpaperGfx(gPSSData->scrollToBoxId, gPSSData->scrollDirection);
gPSSData->field_A63++; gPSSData->scrollState++;
case 1: case 1:
if (!WaitForWallpaperGfxLoad()) if (!WaitForWallpaperGfxLoad())
return TRUE; return TRUE;
sub_8090574(gPSSData->field_A64, gPSSData->field_A65); sub_8090574(gPSSData->scrollToBoxId, gPSSData->scrollDirection);
sub_8091C48(gPSSData->field_A64, gPSSData->field_A65); sub_8091C48(gPSSData->scrollToBoxId, gPSSData->scrollDirection);
sub_809200C(gPSSData->field_A65); sub_809200C(gPSSData->scrollDirection);
break; break;
case 2: case 2:
var = sub_809062C(); var = sub_809062C();
if (gPSSData->field_2D0 != 0) if (gPSSData->scrollTimer != 0)
{ {
gPSSData->bg2_X += gPSSData->field_2CE; gPSSData->bg2_X += gPSSData->scrollSpeed;
if (--gPSSData->field_2D0 != 0) if (--gPSSData->scrollTimer != 0)
return TRUE; return TRUE;
sub_8091E34(); sub_8091E34();
sub_80920AC(); sub_80920AC();
@@ -1074,7 +1074,7 @@ bool8 ScrollToBox(void)
return var; return var;
} }
gPSSData->field_A63++; gPSSData->scrollState++;
return TRUE; return TRUE;
} }
@@ -1105,7 +1105,7 @@ bool8 DoWallpaperGfxChange(void)
switch (gPSSData->wallpaperChangeState) switch (gPSSData->wallpaperChangeState)
{ {
case 0: case 0:
BeginNormalPaletteFade(gPSSData->field_738, 1, 0, 16, RGB_WHITEALPHA); BeginNormalPaletteFade(gPSSData->wallpaperPalBits, 1, 0, 16, RGB_WHITEALPHA);
gPSSData->wallpaperChangeState++; gPSSData->wallpaperChangeState++;
break; break;
case 1: case 1:
@@ -1120,7 +1120,7 @@ bool8 DoWallpaperGfxChange(void)
if (WaitForWallpaperGfxLoad() == TRUE) if (WaitForWallpaperGfxLoad() == TRUE)
{ {
sub_8091EF0(); sub_8091EF0();
BeginNormalPaletteFade(gPSSData->field_738, 1, 16, 0, RGB_WHITEALPHA); BeginNormalPaletteFade(gPSSData->wallpaperPalBits, 1, 16, 0, RGB_WHITEALPHA);
gPSSData->wallpaperChangeState++; gPSSData->wallpaperChangeState++;
} }
break; break;
@@ -1142,26 +1142,26 @@ static void LoadWallpaperGfx(u8 boxId, s8 direction)
void *iconGfx; void *iconGfx;
u32 size1, size2; u32 size1, size2;
gPSSData->field_6F9 = 0; gPSSData->wallpaperLoadState = 0;
gPSSData->field_6FA = boxId; gPSSData->wallpaperLoadBoxId = boxId;
gPSSData->field_6FB = direction; gPSSData->wallpaperLoadDir = direction;
if (gPSSData->field_6FB != 0) if (gPSSData->wallpaperLoadDir != 0)
{ {
gPSSData->field_2D2 = (gPSSData->field_2D2 == 0); gPSSData->wallpaperOffset = (gPSSData->wallpaperOffset == 0);
sub_8091A24(gPSSData->field_4AC4); sub_8091A24(gPSSData->field_4AC4);
} }
wallpaperId = GetBoxWallpaper(gPSSData->field_6FA); wallpaperId = GetBoxWallpaper(gPSSData->wallpaperLoadBoxId);
wallpaperGfx = &sWallpaperTable[wallpaperId]; wallpaperGfx = &sWallpaperTable[wallpaperId];
LZ77UnCompWram(wallpaperGfx->tileMap, gPSSData->field_792); LZ77UnCompWram(wallpaperGfx->tileMap, gPSSData->wallpaperTilemap);
sub_8091984(gPSSData->field_4AC4, gPSSData->field_792, gPSSData->field_6FB, gPSSData->field_2D2); sub_8091984(gPSSData->field_4AC4, gPSSData->wallpaperTilemap, gPSSData->wallpaperLoadDir, gPSSData->wallpaperOffset);
if (gPSSData->field_6FB != 0) if (gPSSData->wallpaperLoadDir != 0)
LoadPalette(wallpaperGfx->palettes, (gPSSData->field_2D2 * 32) + 0x40, 0x40); LoadPalette(wallpaperGfx->palettes, (gPSSData->wallpaperOffset * 32) + 0x40, 0x40);
else else
CpuCopy16(wallpaperGfx->palettes, &gPlttBufferUnfaded[(gPSSData->field_2D2 * 32) + 0x40], 0x40); CpuCopy16(wallpaperGfx->palettes, &gPlttBufferUnfaded[(gPSSData->wallpaperOffset * 32) + 0x40], 0x40);
DecompressAndLoadBgGfxUsingHeap(2, wallpaperGfx->tiles, 0, 256 * gPSSData->field_2D2, 0); DecompressAndLoadBgGfxUsingHeap(2, wallpaperGfx->tiles, 0, 256 * gPSSData->wallpaperOffset, 0);
CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(2);
} }
@@ -1221,24 +1221,24 @@ static void sub_8091A94(u8 boxId)
struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3}; struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3};
struct SpritePalette palettes[] = { struct SpritePalette palettes[] = {
{gPSSData->field_6FC, TAG_PAL_DAC9}, {gPSSData->boxTitlePal, TAG_PAL_DAC9},
{} {}
}; };
u16 wallpaperId = GetBoxWallpaper(boxId); u16 wallpaperId = GetBoxWallpaper(boxId);
gPSSData->field_6FC[14] = gUnknown_83D29D0[wallpaperId][0]; gPSSData->boxTitlePal[14] = gUnknown_83D29D0[wallpaperId][0];
gPSSData->field_6FC[15] = gUnknown_83D29D0[wallpaperId][1]; gPSSData->boxTitlePal[15] = gUnknown_83D29D0[wallpaperId][1];
LoadSpritePalettes(palettes); LoadSpritePalettes(palettes);
gPSSData->field_738 = 0x3f0; gPSSData->wallpaperPalBits = 0x3f0;
tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9); tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
gPSSData->field_71C = 0x10e + 16 * tagIndex; gPSSData->boxTitlePalOffset = 0x10e + 16 * tagIndex;
gPSSData->field_738 |= 0x10000 << tagIndex; gPSSData->wallpaperPalBits |= 0x10000 << tagIndex;
tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9); tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
gPSSData->field_71E = 0x10e + 16 * tagIndex; gPSSData->boxTitleAltPalOffset = 0x10e + 16 * tagIndex;
gPSSData->field_738 |= 0x10000 << tagIndex; gPSSData->wallpaperPalBits |= 0x10000 << tagIndex;
StringCopyPadded(gPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8); StringCopyPadded(gPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
DrawTextWindowAndBufferTiles(gPSSData->field_21B8, gPSSData->field_2F8, 0, 0, gPSSData->field_4F8, 2); DrawTextWindowAndBufferTiles(gPSSData->field_21B8, gPSSData->field_2F8, 0, 0, gPSSData->field_4F8, 2);
@@ -1248,10 +1248,10 @@ static void sub_8091A94(u8 boxId)
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
u8 spriteId = CreateSprite(&gUnknown_83D2B7C, r6 + i * 32, 28, 24); u8 spriteId = CreateSprite(&gUnknown_83D2B7C, r6 + i * 32, 28, 24);
gPSSData->field_720[i] = &gSprites[spriteId]; gPSSData->curBoxTitleSprites[i] = &gSprites[spriteId];
StartSpriteAnim(gPSSData->field_720[i], i); StartSpriteAnim(gPSSData->curBoxTitleSprites[i], i);
} }
gPSSData->field_6F8 = 0; gPSSData->boxTitleCycleId = 0;
} }
static void sub_8091C48(u8 boxId, s8 direction) static void sub_8091C48(u8 boxId, s8 direction)
@@ -1262,16 +1262,16 @@ static void sub_8091C48(u8 boxId, s8 direction)
struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3}; struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3};
struct SpriteTemplate template = gUnknown_83D2B7C; struct SpriteTemplate template = gUnknown_83D2B7C;
gPSSData->field_6F8 = (gPSSData->field_6F8 == 0); gPSSData->boxTitleCycleId = (gPSSData->boxTitleCycleId == 0);
if (gPSSData->field_6F8 == 0) if (gPSSData->boxTitleCycleId == 0)
{ {
spriteSheet.tag = TAG_TILE_3; spriteSheet.tag = TAG_TILE_3;
r8 = gPSSData->field_71C; r8 = gPSSData->boxTitlePalOffset;
} }
else else
{ {
spriteSheet.tag = TAG_TILE_4; spriteSheet.tag = TAG_TILE_4;
r8 = gPSSData->field_71C; r8 = gPSSData->boxTitlePalOffset;
template.tileTag = TAG_TILE_4; template.tileTag = TAG_TILE_4;
template.paletteTag = TAG_PAL_DAC9; template.paletteTag = TAG_PAL_DAC9;
} }
@@ -1288,28 +1288,28 @@ static void sub_8091C48(u8 boxId, s8 direction)
{ {
u8 spriteId = CreateSprite(&template, i * 32 + x2, 28, 24); u8 spriteId = CreateSprite(&template, i * 32 + x2, 28, 24);
gPSSData->field_728[i] = &gSprites[spriteId]; gPSSData->nextBoxTitleSprites[i] = &gSprites[spriteId];
gPSSData->field_728[i]->data[0] = (-direction) * 6; gPSSData->nextBoxTitleSprites[i]->data[0] = (-direction) * 6;
gPSSData->field_728[i]->data[1] = i * 32 + x; gPSSData->nextBoxTitleSprites[i]->data[1] = i * 32 + x;
gPSSData->field_728[i]->data[2] = 0; gPSSData->nextBoxTitleSprites[i]->data[2] = 0;
gPSSData->field_728[i]->callback = sub_8091E84; gPSSData->nextBoxTitleSprites[i]->callback = sub_8091E84;
StartSpriteAnim(gPSSData->field_728[i], i); StartSpriteAnim(gPSSData->nextBoxTitleSprites[i], i);
gPSSData->field_720[i]->data[0] = (-direction) * 6; gPSSData->curBoxTitleSprites[i]->data[0] = (-direction) * 6;
gPSSData->field_720[i]->data[1] = 1; gPSSData->curBoxTitleSprites[i]->data[1] = 1;
gPSSData->field_720[i]->callback = sub_8091EB8; gPSSData->curBoxTitleSprites[i]->callback = sub_8091EB8;
} }
} }
static void sub_8091E34(void) static void sub_8091E34(void)
{ {
if (gPSSData->field_6F8 == 0) if (gPSSData->boxTitleCycleId == 0)
FreeSpriteTilesByTag(TAG_TILE_4); FreeSpriteTilesByTag(TAG_TILE_4);
else else
FreeSpriteTilesByTag(TAG_TILE_3); FreeSpriteTilesByTag(TAG_TILE_3);
gPSSData->field_720[0] = gPSSData->field_728[0]; gPSSData->curBoxTitleSprites[0] = gPSSData->nextBoxTitleSprites[0];
gPSSData->field_720[1] = gPSSData->field_728[1]; gPSSData->curBoxTitleSprites[1] = gPSSData->nextBoxTitleSprites[1];
} }
static void sub_8091E84(struct Sprite *sprite) static void sub_8091E84(struct Sprite *sprite)
@@ -1339,10 +1339,10 @@ static void sub_8091EF0(void)
{ {
u8 boxId = StorageGetCurrentBox(); u8 boxId = StorageGetCurrentBox();
u8 wallpaperId = GetBoxWallpaper(boxId); u8 wallpaperId = GetBoxWallpaper(boxId);
if (gPSSData->field_6F8 == 0) if (gPSSData->boxTitleCycleId == 0)
CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->field_71C, 4); CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitlePalOffset, 4);
else else
CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->field_71E, 4); CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitleAltPalOffset, 4);
} }
static s16 sub_8091F60(const u8 *string) static s16 sub_8091F60(const u8 *string)
@@ -1363,7 +1363,7 @@ static void sub_8091F80(void)
struct Sprite *sprite = &gSprites[spriteId]; struct Sprite *sprite = &gSprites[spriteId];
StartSpriteAnim(sprite, i); StartSpriteAnim(sprite, i);
sprite->data[3] = (i == 0) ? -1 : 1; sprite->data[3] = (i == 0) ? -1 : 1;
gPSSData->field_730[i] = sprite; gPSSData->arrowSprites[i] = sprite;
} }
} }
if (IsCursorOnBox()) if (IsCursorOnBox())
@@ -1376,25 +1376,25 @@ static void sub_809200C(s8 direction)
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
gPSSData->field_730[i]->x2 = 0; gPSSData->arrowSprites[i]->x2 = 0;
gPSSData->field_730[i]->data[0] = 2; gPSSData->arrowSprites[i]->data[0] = 2;
} }
if (direction < 0) if (direction < 0)
{ {
gPSSData->field_730[0]->data[1] = 29; gPSSData->arrowSprites[0]->data[1] = 29;
gPSSData->field_730[1]->data[1] = 5; gPSSData->arrowSprites[1]->data[1] = 5;
gPSSData->field_730[0]->data[2] = 0x48; gPSSData->arrowSprites[0]->data[2] = 0x48;
gPSSData->field_730[1]->data[2] = 0x48; gPSSData->arrowSprites[1]->data[2] = 0x48;
} }
else else
{ {
gPSSData->field_730[0]->data[1] = 5; gPSSData->arrowSprites[0]->data[1] = 5;
gPSSData->field_730[1]->data[1] = 29; gPSSData->arrowSprites[1]->data[1] = 29;
gPSSData->field_730[0]->data[2] = 0xF8; gPSSData->arrowSprites[0]->data[2] = 0xF8;
gPSSData->field_730[1]->data[2] = 0xF8; gPSSData->arrowSprites[1]->data[2] = 0xF8;
} }
gPSSData->field_730[0]->data[7] = 0; gPSSData->arrowSprites[0]->data[7] = 0;
gPSSData->field_730[1]->data[7] = 1; gPSSData->arrowSprites[1]->data[7] = 1;
} }
static void sub_80920AC(void) static void sub_80920AC(void)
@@ -1403,9 +1403,9 @@ static void sub_80920AC(void)
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
gPSSData->field_730[i]->x = 0x88 * i + 0x5c; gPSSData->arrowSprites[i]->x = 0x88 * i + 0x5c;
gPSSData->field_730[i]->x2 = 0; gPSSData->arrowSprites[i]->x2 = 0;
gPSSData->field_730[i]->invisible = FALSE; gPSSData->arrowSprites[i]->invisible = FALSE;
} }
sub_80920FC(TRUE); sub_80920FC(TRUE);
} }
@@ -1418,17 +1418,17 @@ void sub_80920FC(bool8 a0)
{ {
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
gPSSData->field_730[i]->data[0] = 1; gPSSData->arrowSprites[i]->data[0] = 1;
gPSSData->field_730[i]->data[1] = 0; gPSSData->arrowSprites[i]->data[1] = 0;
gPSSData->field_730[i]->data[2] = 0; gPSSData->arrowSprites[i]->data[2] = 0;
gPSSData->field_730[i]->data[4] = 0; gPSSData->arrowSprites[i]->data[4] = 0;
} }
} }
else else
{ {
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
gPSSData->field_730[i]->data[0] = 0; gPSSData->arrowSprites[i]->data[0] = 0;
} }
} }
} }
@@ -1456,7 +1456,7 @@ static void sub_8092164(struct Sprite *sprite)
sprite->data[0] = 3; sprite->data[0] = 3;
break; break;
case 3: case 3:
sprite->x -= gPSSData->field_2CE; sprite->x -= gPSSData->scrollSpeed;
if (sprite->x < 73 || sprite->x > 247) if (sprite->x < 73 || sprite->x > 247)
sprite->invisible = TRUE; sprite->invisible = TRUE;
if (--sprite->data[1] == 0) if (--sprite->data[1] == 0)
@@ -1467,7 +1467,7 @@ static void sub_8092164(struct Sprite *sprite)
} }
break; break;
case 4: case 4:
sprite->x -= gPSSData->field_2CE; sprite->x -= gPSSData->scrollSpeed;
break; break;
} }
} }
+182 -182
View File
@@ -63,7 +63,7 @@ void sub_80922C0(void)
sCanOnlyMove = FALSE; sCanOnlyMove = FALSE;
sub_8092B50(); sub_8092B50();
sub_8094AD8(); sub_8094AD8();
gPSSData->field_CD6 = 1; gPSSData->cursorPrevHorizPos = 1;
gPSSData->inBoxMovingMode = 0; gPSSData->inBoxMovingMode = 0;
sub_8093A10(); sub_8093A10();
} }
@@ -72,7 +72,7 @@ void sub_8092340(void)
{ {
sub_8094AD8(); sub_8094AD8();
sub_8093AAC(); sub_8093AAC();
gPSSData->field_CD6 = 1; gPSSData->cursorPrevHorizPos = 1;
gPSSData->inBoxMovingMode = 0; gPSSData->inBoxMovingMode = 0;
if (sIsMonBeingMoved) if (sIsMonBeingMoved)
{ {
@@ -138,46 +138,46 @@ bool8 sub_80924A8(void)
{ {
s16 tmp; s16 tmp;
if (gPSSData->field_CD0 == 0) if (gPSSData->cursorMoveSteps == 0)
{ {
if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
return FALSE; return FALSE;
else else
return sub_809610C(); return sub_809610C();
} }
else if (--gPSSData->field_CD0 != 0) else if (--gPSSData->cursorMoveSteps != 0)
{ {
gPSSData->field_CBC += gPSSData->field_CC4; gPSSData->cursorNewX += gPSSData->cursorSpeedX;
gPSSData->field_CC0 += gPSSData->field_CC8; gPSSData->cursorNewY += gPSSData->cursorSpeedY;
gPSSData->field_CB4->x = gPSSData->field_CBC >> 8; gPSSData->cursorSprite->x = gPSSData->cursorNewX >> 8;
gPSSData->field_CB4->y = gPSSData->field_CC0 >> 8; gPSSData->cursorSprite->y = gPSSData->cursorNewY >> 8;
if (gPSSData->field_CB4->x > 0x100) if (gPSSData->cursorSprite->x > 0x100)
{ {
tmp = gPSSData->field_CB4->x - 0x100; tmp = gPSSData->cursorSprite->x - 0x100;
gPSSData->field_CB4->x = tmp + 0x40; gPSSData->cursorSprite->x = tmp + 0x40;
} }
if (gPSSData->field_CB4->x < 0x40) if (gPSSData->cursorSprite->x < 0x40)
{ {
tmp = 0x40 - gPSSData->field_CB4->x; tmp = 0x40 - gPSSData->cursorSprite->x;
gPSSData->field_CB4->x = 0x100 - tmp; gPSSData->cursorSprite->x = 0x100 - tmp;
} }
if (gPSSData->field_CB4->y > 0xb0) if (gPSSData->cursorSprite->y > 0xb0)
{ {
tmp = gPSSData->field_CB4->y - 0xb0; tmp = gPSSData->cursorSprite->y - 0xb0;
gPSSData->field_CB4->y = tmp - 0x10; gPSSData->cursorSprite->y = tmp - 0x10;
} }
if (gPSSData->field_CB4->y < -0x10) if (gPSSData->cursorSprite->y < -0x10)
{ {
tmp = -0x10 - gPSSData->field_CB4->y; tmp = -0x10 - gPSSData->cursorSprite->y;
gPSSData->field_CB4->y = 0xb0 - tmp; gPSSData->cursorSprite->y = 0xb0 - tmp;
} }
if (gPSSData->field_CD7 && --gPSSData->field_CD7 == 0) if (gPSSData->cursorFlipTimer && --gPSSData->cursorFlipTimer == 0)
gPSSData->field_CB4->vFlip = (gPSSData->field_CB4->vFlip == FALSE); gPSSData->cursorSprite->vFlip = (gPSSData->cursorSprite->vFlip == FALSE);
} }
else else
{ {
gPSSData->field_CB4->x = gPSSData->field_CCC; gPSSData->cursorSprite->x = gPSSData->cursorTargetX;
gPSSData->field_CB4->y = gPSSData->field_CCE; gPSSData->cursorSprite->y = gPSSData->cursorTargetY;
sub_80929B0(); sub_80929B0();
} }
@@ -189,56 +189,56 @@ static void sub_8092604(u8 newCurosrArea, u8 newCursorPosition)
u16 x, y; u16 x, y;
sub_8092398(newCurosrArea, newCursorPosition, &x, &y); sub_8092398(newCurosrArea, newCursorPosition, &x, &y);
gPSSData->field_CD4 = newCurosrArea; gPSSData->newCursorArea = newCurosrArea;
gPSSData->field_CD5 = newCursorPosition; gPSSData->newCursorPosition = newCursorPosition;
gPSSData->field_CCC = x; gPSSData->cursorTargetX = x;
gPSSData->field_CCE = y; gPSSData->cursorTargetY = y;
} }
static void sub_8092660(void) static void sub_8092660(void)
{ {
int r7, r0; int r7, r0;
if (gPSSData->field_CD2 != 0 || gPSSData->field_CD3 != 0) if (gPSSData->cursorVerticalWrap != 0 || gPSSData->cursorHorizontalWrap != 0)
gPSSData->field_CD0 = 12; gPSSData->cursorMoveSteps = 12;
else else
gPSSData->field_CD0 = 6; gPSSData->cursorMoveSteps = 6;
if (gPSSData->field_CD7) if (gPSSData->cursorFlipTimer)
gPSSData->field_CD7 = gPSSData->field_CD0 >> 1; gPSSData->cursorFlipTimer = gPSSData->cursorMoveSteps >> 1;
switch (gPSSData->field_CD2) switch (gPSSData->cursorVerticalWrap)
{ {
default: default:
r7 = gPSSData->field_CCE - gPSSData->field_CB4->y; r7 = gPSSData->cursorTargetY - gPSSData->cursorSprite->y;
break; break;
case -1: case -1:
r7 = gPSSData->field_CCE - 0xc0 - gPSSData->field_CB4->y; r7 = gPSSData->cursorTargetY - 0xc0 - gPSSData->cursorSprite->y;
break; break;
case 1: case 1:
r7 = gPSSData->field_CCE + 0xc0 - gPSSData->field_CB4->y; r7 = gPSSData->cursorTargetY + 0xc0 - gPSSData->cursorSprite->y;
break; break;
} }
switch (gPSSData->field_CD3) switch (gPSSData->cursorHorizontalWrap)
{ {
default: default:
r0 = gPSSData->field_CCC - gPSSData->field_CB4->x; r0 = gPSSData->cursorTargetX - gPSSData->cursorSprite->x;
break; break;
case -1: case -1:
r0 = gPSSData->field_CCC - 0xc0 - gPSSData->field_CB4->x; r0 = gPSSData->cursorTargetX - 0xc0 - gPSSData->cursorSprite->x;
break; break;
case 1: case 1:
r0 = gPSSData->field_CCC + 0xc0 - gPSSData->field_CB4->x; r0 = gPSSData->cursorTargetX + 0xc0 - gPSSData->cursorSprite->x;
break; break;
} }
r7 <<= 8; r7 <<= 8;
r0 <<= 8; r0 <<= 8;
gPSSData->field_CC4 = r0 / gPSSData->field_CD0; gPSSData->cursorSpeedX = r0 / gPSSData->cursorMoveSteps;
gPSSData->field_CC8 = r7 / gPSSData->field_CD0; gPSSData->cursorSpeedY = r7 / gPSSData->cursorMoveSteps;
gPSSData->field_CBC = gPSSData->field_CB4->x << 8; gPSSData->cursorNewX = gPSSData->cursorSprite->x << 8;
gPSSData->field_CC0 = gPSSData->field_CB4->y << 8; gPSSData->cursorNewY = gPSSData->cursorSprite->y << 8;
} }
static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition) static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
@@ -248,12 +248,12 @@ static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
{ {
if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved) if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
StartSpriteAnim(gPSSData->field_CB4, 1); StartSpriteAnim(gPSSData->cursorSprite, 1);
} }
else else
{ {
if (!IsActiveItemMoving()) if (!IsActiveItemMoving())
StartSpriteAnim(gPSSData->field_CB4, 1); StartSpriteAnim(gPSSData->cursorSprite, 1);
} }
if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
@@ -271,8 +271,8 @@ static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
if (newCurosrArea == CURSOR_AREA_IN_PARTY && sBoxCursorArea != CURSOR_AREA_IN_PARTY) if (newCurosrArea == CURSOR_AREA_IN_PARTY && sBoxCursorArea != CURSOR_AREA_IN_PARTY)
{ {
gPSSData->field_CD6 = newCurosrArea; gPSSData->cursorPrevHorizPos = newCurosrArea;
gPSSData->field_CB8->invisible = TRUE; gPSSData->cursorShadowSprite->invisible = TRUE;
} }
switch (newCurosrArea) switch (newCurosrArea)
@@ -280,19 +280,19 @@ static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
case CURSOR_AREA_IN_PARTY: case CURSOR_AREA_IN_PARTY:
case CURSOR_AREA_BOX: case CURSOR_AREA_BOX:
case CURSOR_AREA_BUTTONS: case CURSOR_AREA_BUTTONS:
gPSSData->field_CB4->oam.priority = 1; gPSSData->cursorSprite->oam.priority = 1;
gPSSData->field_CB8->invisible = TRUE; gPSSData->cursorShadowSprite->invisible = TRUE;
gPSSData->field_CB8->oam.priority = 1; gPSSData->cursorShadowSprite->oam.priority = 1;
break; break;
case CURSOR_AREA_IN_BOX: case CURSOR_AREA_IN_BOX:
if (gPSSData->inBoxMovingMode != 0) if (gPSSData->inBoxMovingMode != 0)
{ {
gPSSData->field_CB4->oam.priority = 0; gPSSData->cursorSprite->oam.priority = 0;
gPSSData->field_CB8->invisible = TRUE; gPSSData->cursorShadowSprite->invisible = TRUE;
} }
else else
{ {
gPSSData->field_CB4->oam.priority = 2; gPSSData->cursorSprite->oam.priority = 2;
if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved) if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved)
SetMovingMonPriority(2); SetMovingMonPriority(2);
} }
@@ -302,17 +302,17 @@ static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
static void sub_80929B0(void) static void sub_80929B0(void)
{ {
sBoxCursorArea = gPSSData->field_CD4; sBoxCursorArea = gPSSData->newCursorArea;
sBoxCursorPosition = gPSSData->field_CD5; sBoxCursorPosition = gPSSData->newCursorPosition;
if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
{ {
if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved) if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
StartSpriteAnim(gPSSData->field_CB4, 1); StartSpriteAnim(gPSSData->cursorSprite, 1);
} }
else else
{ {
if (!IsActiveItemMoving()) if (!IsActiveItemMoving())
StartSpriteAnim(gPSSData->field_CB4, 1); StartSpriteAnim(gPSSData->cursorSprite, 1);
} }
sub_8093A10(); sub_8093A10();
@@ -325,16 +325,16 @@ static void sub_80929B0(void)
sub_80920FC(TRUE); sub_80920FC(TRUE);
break; break;
case CURSOR_AREA_IN_PARTY: case CURSOR_AREA_IN_PARTY:
gPSSData->field_CB8->subpriority = 13; gPSSData->cursorShadowSprite->subpriority = 13;
SetMovingMonPriority(1); SetMovingMonPriority(1);
break; break;
case CURSOR_AREA_IN_BOX: case CURSOR_AREA_IN_BOX:
if (gPSSData->inBoxMovingMode == 0) if (gPSSData->inBoxMovingMode == 0)
{ {
gPSSData->field_CB4->oam.priority = 1; gPSSData->cursorSprite->oam.priority = 1;
gPSSData->field_CB8->oam.priority = 2; gPSSData->cursorShadowSprite->oam.priority = 2;
gPSSData->field_CB8->subpriority = 21; gPSSData->cursorShadowSprite->subpriority = 21;
gPSSData->field_CB8->invisible = FALSE; gPSSData->cursorShadowSprite->invisible = FALSE;
SetMovingMonPriority(2); SetMovingMonPriority(2);
} }
break; break;
@@ -355,8 +355,8 @@ void sub_8092AE4(void)
if (partyCount >= PARTY_SIZE) if (partyCount >= PARTY_SIZE)
partyCount = PARTY_SIZE - 1; partyCount = PARTY_SIZE - 1;
} }
if (gPSSData->field_CB4->vFlip) if (gPSSData->cursorSprite->vFlip)
gPSSData->field_CD7 = 1; gPSSData->cursorFlipTimer = 1;
sub_80927E8(CURSOR_AREA_IN_PARTY, partyCount); sub_80927E8(CURSOR_AREA_IN_PARTY, partyCount);
} }
@@ -414,13 +414,13 @@ static bool8 MonPlaceChange_Move(void)
case 0: case 0:
if (sIsMonBeingMoved) if (sIsMonBeingMoved)
return FALSE; return FALSE;
StartSpriteAnim(gPSSData->field_CB4, 2); StartSpriteAnim(gPSSData->cursorSprite, 2);
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
break; break;
case 1: case 1:
if (!sub_8092E20()) if (!sub_8092E20())
{ {
StartSpriteAnim(gPSSData->field_CB4, 3); StartSpriteAnim(gPSSData->cursorSprite, 3);
MoveMon(); MoveMon();
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
} }
@@ -443,7 +443,7 @@ static bool8 MonPlaceChange_Place(void)
case 0: case 0:
if (!sub_8092E20()) if (!sub_8092E20())
{ {
StartSpriteAnim(gPSSData->field_CB4, 2); StartSpriteAnim(gPSSData->cursorSprite, 2);
PlaceMon(); PlaceMon();
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
} }
@@ -451,7 +451,7 @@ static bool8 MonPlaceChange_Place(void)
case 1: case 1:
if (!sub_8092E54()) if (!sub_8092E54())
{ {
StartSpriteAnim(gPSSData->field_CB4, 0); StartSpriteAnim(gPSSData->cursorSprite, 0);
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
} }
break; break;
@@ -470,23 +470,23 @@ static bool8 MonPlaceChange_Shift(void)
switch (sBoxCursorArea) switch (sBoxCursorArea)
{ {
case CURSOR_AREA_IN_PARTY: case CURSOR_AREA_IN_PARTY:
gPSSData->field_D91 = TOTAL_BOXES_COUNT; gPSSData->shiftBoxId = TOTAL_BOXES_COUNT;
break; break;
case CURSOR_AREA_IN_BOX: case CURSOR_AREA_IN_BOX:
gPSSData->field_D91 = StorageGetCurrentBox(); gPSSData->shiftBoxId = StorageGetCurrentBox();
break; break;
default: default:
return FALSE; return FALSE;
} }
StartSpriteAnim(gPSSData->field_CB4, 2); StartSpriteAnim(gPSSData->cursorSprite, 2);
sub_8090E08(gPSSData->field_D91, sBoxCursorPosition); sub_8090E08(gPSSData->shiftBoxId, sBoxCursorPosition);
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
break; break;
case 1: case 1:
if (!sub_8090E74()) if (!sub_8090E74())
{ {
StartSpriteAnim(gPSSData->field_CB4, 3); StartSpriteAnim(gPSSData->cursorSprite, 3);
SetShiftedMonData(gPSSData->field_D91, sBoxCursorPosition); SetShiftedMonData(gPSSData->shiftBoxId, sBoxCursorPosition);
gPSSData->monPlaceChangeState++; gPSSData->monPlaceChangeState++;
} }
break; break;
@@ -509,13 +509,13 @@ static bool8 sub_8092E10(void)
static bool8 sub_8092E20(void) static bool8 sub_8092E20(void)
{ {
switch (gPSSData->field_CB4->y2) switch (gPSSData->cursorSprite->y2)
{ {
default: default:
gPSSData->field_CB4->y2++; gPSSData->cursorSprite->y2++;
break; break;
case 0: case 0:
gPSSData->field_CB4->y2++; gPSSData->cursorSprite->y2++;
break; break;
case 8: case 8:
return FALSE; return FALSE;
@@ -526,12 +526,12 @@ static bool8 sub_8092E20(void)
static bool8 sub_8092E54(void) static bool8 sub_8092E54(void)
{ {
switch (gPSSData->field_CB4->y2) switch (gPSSData->cursorSprite->y2)
{ {
case 0: case 0:
return FALSE; return FALSE;
default: default:
gPSSData->field_CB4->y2--; gPSSData->cursorSprite->y2--;
break; break;
} }
@@ -656,13 +656,13 @@ bool8 TryStorePartyMonInBox(u8 boxId)
if (boxId == StorageGetCurrentBox()) if (boxId == StorageGetCurrentBox())
sub_80901EC(boxPosition); sub_80901EC(boxPosition);
StartSpriteAnim(gPSSData->field_CB4, 1); StartSpriteAnim(gPSSData->cursorSprite, 1);
return TRUE; return TRUE;
} }
void sub_8093174(void) void sub_8093174(void)
{ {
StartSpriteAnim(gPSSData->field_CB4, 0); StartSpriteAnim(gPSSData->cursorSprite, 0);
sub_8093A10(); sub_8093A10();
} }
@@ -678,14 +678,14 @@ void sub_8093194(void)
mode = MODE_BOX; mode = MODE_BOX;
sub_8090FC4(mode, sBoxCursorPosition); sub_8090FC4(mode, sBoxCursorPosition);
StringCopy(gPSSData->field_21E0, gPSSData->cursorMonNick); StringCopy(gPSSData->field_21E0, gPSSData->displayMonName);
} }
bool8 sub_80931EC(void) bool8 sub_80931EC(void)
{ {
if (!sub_8091084()) if (!sub_8091084())
{ {
StartSpriteAnim(gPSSData->field_CB4, 0); StartSpriteAnim(gPSSData->cursorSprite, 0);
return FALSE; return FALSE;
} }
else else
@@ -718,7 +718,7 @@ void ReleaseMon(void)
void sub_8093264(void) void sub_8093264(void)
{ {
if (sIsMonBeingMoved) if (sIsMonBeingMoved)
StartSpriteAnim(gPSSData->field_CB4, 3); StartSpriteAnim(gPSSData->cursorSprite, 3);
} }
void InitCanReleaseMonVars(void) void InitCanReleaseMonVars(void)
@@ -914,7 +914,7 @@ s16 CompactPartySlots(void)
void SetMonMarkings(u8 markings) void SetMonMarkings(u8 markings)
{ {
gPSSData->cursorMonMarkings = markings; gPSSData->displayMonMarkings = markings;
if (sIsMonBeingMoved) if (sIsMonBeingMoved)
{ {
SetMonData(&gPSSData->movingMon, MON_DATA_MARKINGS, &markings); SetMonData(&gPSSData->movingMon, MON_DATA_MARKINGS, &markings);
@@ -942,7 +942,7 @@ bool8 CanShiftMon(void)
{ {
if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0) if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0)
{ {
if (gPSSData->cursorMonIsEgg || GetMonData(&gPSSData->movingMon, MON_DATA_HP) == 0) if (gPSSData->displayMonIsEgg || GetMonData(&gPSSData->movingMon, MON_DATA_HP) == 0)
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@@ -1009,94 +1009,94 @@ static void SetCursorMonData(void *pokemon, u8 mode)
u16 gender; u16 gender;
bool8 sanityIsBagEgg; bool8 sanityIsBagEgg;
gPSSData->cursorMonItem = 0; gPSSData->displayMonItemId = 0;
gender = MON_MALE; gender = MON_MALE;
sanityIsBagEgg = FALSE; sanityIsBagEgg = FALSE;
if (mode == MODE_PARTY) if (mode == MODE_PARTY)
{ {
struct Pokemon *mon = (struct Pokemon *)pokemon; struct Pokemon *mon = (struct Pokemon *)pokemon;
gPSSData->cursorMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); gPSSData->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES2);
if (gPSSData->cursorMonSpecies != SPECIES_NONE) if (gPSSData->displayMonSpecies != SPECIES_NONE)
{ {
sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG);
if (sanityIsBagEgg) if (sanityIsBagEgg)
gPSSData->cursorMonIsEgg = TRUE; gPSSData->displayMonIsEgg = TRUE;
else else
gPSSData->cursorMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG); gPSSData->displayMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG);
GetMonData(mon, MON_DATA_NICKNAME, gPSSData->cursorMonNick); GetMonData(mon, MON_DATA_NICKNAME, gPSSData->displayMonName);
StringGetEnd10(gPSSData->cursorMonNick); StringGetEnd10(gPSSData->displayMonName);
gPSSData->cursorMonLevel = GetMonData(mon, MON_DATA_LEVEL); gPSSData->displayMonLevel = GetMonData(mon, MON_DATA_LEVEL);
gPSSData->cursorMonMarkings = GetMonData(mon, MON_DATA_MARKINGS); gPSSData->displayMonMarkings = GetMonData(mon, MON_DATA_MARKINGS);
gPSSData->cursorMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY); gPSSData->displayMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
gPSSData->cursorMonPalette = GetMonFrontSpritePal(mon); gPSSData->displayMonPalette = GetMonFrontSpritePal(mon);
gender = GetMonGender(mon); gender = GetMonGender(mon);
gPSSData->cursorMonItem = GetMonData(mon, MON_DATA_HELD_ITEM); gPSSData->displayMonItemId = GetMonData(mon, MON_DATA_HELD_ITEM);
} }
} }
else if (mode == MODE_BOX) else if (mode == MODE_BOX)
{ {
struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon; struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon;
gPSSData->cursorMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2); gPSSData->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2);
if (gPSSData->cursorMonSpecies != SPECIES_NONE) if (gPSSData->displayMonSpecies != SPECIES_NONE)
{ {
u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID);
sanityIsBagEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG); sanityIsBagEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG);
if (sanityIsBagEgg) if (sanityIsBagEgg)
gPSSData->cursorMonIsEgg = TRUE; gPSSData->displayMonIsEgg = TRUE;
else else
gPSSData->cursorMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG); gPSSData->displayMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG);
GetBoxMonData(boxMon, MON_DATA_NICKNAME, gPSSData->cursorMonNick); GetBoxMonData(boxMon, MON_DATA_NICKNAME, gPSSData->displayMonName);
StringGetEnd10(gPSSData->cursorMonNick); StringGetEnd10(gPSSData->displayMonName);
gPSSData->cursorMonLevel = GetLevelFromBoxMonExp(boxMon); gPSSData->displayMonLevel = GetLevelFromBoxMonExp(boxMon);
gPSSData->cursorMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS); gPSSData->displayMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS);
gPSSData->cursorMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); gPSSData->displayMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY);
gPSSData->cursorMonPalette = GetMonSpritePalFromSpeciesAndPersonality(gPSSData->cursorMonSpecies, otId, gPSSData->cursorMonPersonality); gPSSData->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(gPSSData->displayMonSpecies, otId, gPSSData->displayMonPersonality);
gender = GetGenderFromSpeciesAndPersonality(gPSSData->cursorMonSpecies, gPSSData->cursorMonPersonality); gender = GetGenderFromSpeciesAndPersonality(gPSSData->displayMonSpecies, gPSSData->displayMonPersonality);
gPSSData->cursorMonItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM); gPSSData->displayMonItemId = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM);
} }
} }
else else
{ {
gPSSData->cursorMonSpecies = SPECIES_NONE; gPSSData->displayMonSpecies = SPECIES_NONE;
gPSSData->cursorMonItem = 0; gPSSData->displayMonItemId = 0;
} }
if (gPSSData->cursorMonSpecies == SPECIES_NONE) if (gPSSData->displayMonSpecies == SPECIES_NONE)
{ {
StringFill(gPSSData->cursorMonNick, CHAR_SPACE, 5); StringFill(gPSSData->displayMonName, CHAR_SPACE, 5);
StringFill(gPSSData->cursorMonTexts[0], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[0], CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[1], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[1], CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[2], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[2], CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[3], CHAR_SPACE, 8);
} }
else if (gPSSData->cursorMonIsEgg) else if (gPSSData->displayMonIsEgg)
{ {
if (sanityIsBagEgg) if (sanityIsBagEgg)
StringCopyPadded(gPSSData->cursorMonTexts[0], gPSSData->cursorMonNick, CHAR_SPACE, 5); StringCopyPadded(gPSSData->displayMonTexts[0], gPSSData->displayMonName, CHAR_SPACE, 5);
else else
StringCopyPadded(gPSSData->cursorMonTexts[0], gText_EggNickname, CHAR_SPACE, 8); StringCopyPadded(gPSSData->displayMonTexts[0], gText_EggNickname, CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[1], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[1], CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[2], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[2], CHAR_SPACE, 8);
StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[3], CHAR_SPACE, 8);
} }
else else
{ {
if (gPSSData->cursorMonSpecies == SPECIES_NIDORAN_F || gPSSData->cursorMonSpecies == SPECIES_NIDORAN_M) if (gPSSData->displayMonSpecies == SPECIES_NIDORAN_F || gPSSData->displayMonSpecies == SPECIES_NIDORAN_M)
gender = MON_GENDERLESS; gender = MON_GENDERLESS;
StringCopyPadded(gPSSData->cursorMonTexts[0], gPSSData->cursorMonNick, CHAR_SPACE, 5); StringCopyPadded(gPSSData->displayMonTexts[0], gPSSData->displayMonName, CHAR_SPACE, 5);
txtPtr = gPSSData->cursorMonTexts[1]; txtPtr = gPSSData->displayMonTexts[1];
*(txtPtr)++ = CHAR_SLASH; *(txtPtr)++ = CHAR_SLASH;
StringCopyPadded(txtPtr, gSpeciesNames[gPSSData->cursorMonSpecies], CHAR_SPACE, 5); StringCopyPadded(txtPtr, gSpeciesNames[gPSSData->displayMonSpecies], CHAR_SPACE, 5);
txtPtr = gPSSData->cursorMonTexts[2]; txtPtr = gPSSData->displayMonTexts[2];
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN; *(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
*(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; *(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
switch (gender) switch (gender)
@@ -1130,14 +1130,14 @@ static void SetCursorMonData(void *pokemon, u8 mode)
*(txtPtr++) = CHAR_EXTRA_SYMBOL; *(txtPtr++) = CHAR_EXTRA_SYMBOL;
*(txtPtr++) = 5; // LV_2 *(txtPtr++) = 5; // LV_2
txtPtr = ConvertIntToDecimalStringN(txtPtr, gPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3); txtPtr = ConvertIntToDecimalStringN(txtPtr, gPSSData->displayMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
txtPtr[0] = CHAR_SPACE; txtPtr[0] = CHAR_SPACE;
txtPtr[1] = EOS; txtPtr[1] = EOS;
if (gPSSData->cursorMonItem != 0) if (gPSSData->displayMonItemId != 0)
StringCopyPadded(gPSSData->cursorMonTexts[3], ItemId_GetName(gPSSData->cursorMonItem), CHAR_SPACE, 8); StringCopyPadded(gPSSData->displayMonTexts[3], ItemId_GetName(gPSSData->displayMonItemId), CHAR_SPACE, 8);
else else
StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8); StringFill(gPSSData->displayMonTexts[3], CHAR_SPACE, 8);
} }
} }
@@ -1165,9 +1165,9 @@ static u8 InBoxInput_Normal(void)
{ {
cursorArea = sBoxCursorArea; cursorArea = sBoxCursorArea;
cursorPosition = sBoxCursorPosition; cursorPosition = sBoxCursorPosition;
gPSSData->field_CD2 = 0; gPSSData->cursorVerticalWrap = 0;
gPSSData->field_CD3 = 0; gPSSData->cursorHorizontalWrap = 0;
gPSSData->field_CD7 = 0; gPSSData->cursorFlipTimer = 0;
if (JOY_REPT(DPAD_UP)) if (JOY_REPT(DPAD_UP))
{ {
retVal = TRUE; retVal = TRUE;
@@ -1191,8 +1191,8 @@ static u8 InBoxInput_Normal(void)
cursorArea = CURSOR_AREA_BUTTONS; cursorArea = CURSOR_AREA_BUTTONS;
cursorPosition -= IN_BOX_COUNT; cursorPosition -= IN_BOX_COUNT;
cursorPosition /= 3; cursorPosition /= 3;
gPSSData->field_CD2 = 1; gPSSData->cursorVerticalWrap = 1;
gPSSData->field_CD7 = 1; gPSSData->cursorFlipTimer = 1;
} }
break; break;
} }
@@ -1205,7 +1205,7 @@ static u8 InBoxInput_Normal(void)
} }
else else
{ {
gPSSData->field_CD3 = -1; gPSSData->cursorHorizontalWrap = -1;
cursorPosition += (IN_BOX_ROWS - 1); cursorPosition += (IN_BOX_ROWS - 1);
} }
break; break;
@@ -1219,7 +1219,7 @@ static u8 InBoxInput_Normal(void)
} }
else else
{ {
gPSSData->field_CD3 = 1; gPSSData->cursorHorizontalWrap = 1;
cursorPosition -= (IN_BOX_ROWS - 1); cursorPosition -= (IN_BOX_ROWS - 1);
} }
break; break;
@@ -1355,12 +1355,12 @@ static u8 InBoxInput_GrabbingMultiple(void)
if (sub_8095AA0() == sBoxCursorPosition) if (sub_8095AA0() == sBoxCursorPosition)
{ {
gPSSData->inBoxMovingMode = 0; gPSSData->inBoxMovingMode = 0;
gPSSData->field_CB8->invisible = FALSE; gPSSData->cursorShadowSprite->invisible = FALSE;
return 22; return 22;
} }
else else
{ {
sIsMonBeingMoved = (gPSSData->cursorMonSpecies != SPECIES_NONE); sIsMonBeingMoved = (gPSSData->displayMonSpecies != SPECIES_NONE);
gPSSData->inBoxMovingMode = 2; gPSSData->inBoxMovingMode = 2;
sMovingMonOrigBoxId = StorageGetCurrentBox(); sMovingMonOrigBoxId = StorageGetCurrentBox();
return 23; return 23;
@@ -1460,9 +1460,9 @@ static u8 HandleInput_InParty(void)
{ {
cursorArea = sBoxCursorArea; cursorArea = sBoxCursorArea;
cursorPosition = sBoxCursorPosition; cursorPosition = sBoxCursorPosition;
gPSSData->field_CD3 = 0; gPSSData->cursorHorizontalWrap = 0;
gPSSData->field_CD2 = 0; gPSSData->cursorVerticalWrap = 0;
gPSSData->field_CD7 = 0; gPSSData->cursorFlipTimer = 0;
gotoBox = FALSE; gotoBox = FALSE;
retVal = 0; retVal = 0;
@@ -1485,7 +1485,7 @@ static u8 HandleInput_InParty(void)
else if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0) else if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
{ {
retVal = 1; retVal = 1;
gPSSData->field_CD6 = sBoxCursorPosition; gPSSData->cursorPrevHorizPos = sBoxCursorPosition;
cursorPosition = 0; cursorPosition = 0;
break; break;
} }
@@ -1494,7 +1494,7 @@ static u8 HandleInput_InParty(void)
if (sBoxCursorPosition == 0) if (sBoxCursorPosition == 0)
{ {
retVal = 1; retVal = 1;
cursorPosition = gPSSData->field_CD6; cursorPosition = gPSSData->cursorPrevHorizPos;
} }
else else
{ {
@@ -1580,16 +1580,16 @@ static u8 HandleInput_OnBox(void)
do do
{ {
gPSSData->field_CD3 = 0; gPSSData->cursorHorizontalWrap = 0;
gPSSData->field_CD2 = 0; gPSSData->cursorVerticalWrap = 0;
gPSSData->field_CD7 = 0; gPSSData->cursorFlipTimer = 0;
if (JOY_REPT(DPAD_UP)) if (JOY_REPT(DPAD_UP))
{ {
retVal = 1; retVal = 1;
cursorArea = CURSOR_AREA_BUTTONS; cursorArea = CURSOR_AREA_BUTTONS;
cursorPosition = 0; cursorPosition = 0;
gPSSData->field_CD7 = 1; gPSSData->cursorFlipTimer = 1;
break; break;
} }
else if (JOY_REPT(DPAD_DOWN)) else if (JOY_REPT(DPAD_DOWN))
@@ -1654,20 +1654,20 @@ static u8 HandleInput_OnButtons(void)
{ {
cursorArea = sBoxCursorArea; cursorArea = sBoxCursorArea;
cursorPosition = sBoxCursorPosition; cursorPosition = sBoxCursorPosition;
gPSSData->field_CD3 = 0; gPSSData->cursorHorizontalWrap = 0;
gPSSData->field_CD2 = 0; gPSSData->cursorVerticalWrap = 0;
gPSSData->field_CD7 = 0; gPSSData->cursorFlipTimer = 0;
if (JOY_REPT(DPAD_UP)) if (JOY_REPT(DPAD_UP))
{ {
retVal = 1; retVal = 1;
cursorArea = CURSOR_AREA_IN_BOX; cursorArea = CURSOR_AREA_IN_BOX;
gPSSData->field_CD2 = -1; gPSSData->cursorVerticalWrap = -1;
if (sBoxCursorPosition == 0) if (sBoxCursorPosition == 0)
cursorPosition = IN_BOX_COUNT - 1 - 5; cursorPosition = IN_BOX_COUNT - 1 - 5;
else else
cursorPosition = IN_BOX_COUNT - 1; cursorPosition = IN_BOX_COUNT - 1;
gPSSData->field_CD7 = 1; gPSSData->cursorFlipTimer = 1;
break; break;
} }
else if (JOY_REPT(DPAD_DOWN | START_BUTTON)) else if (JOY_REPT(DPAD_DOWN | START_BUTTON))
@@ -1675,7 +1675,7 @@ static u8 HandleInput_OnButtons(void)
retVal = 1; retVal = 1;
cursorArea = CURSOR_AREA_BOX; cursorArea = CURSOR_AREA_BOX;
cursorPosition = 0; cursorPosition = 0;
gPSSData->field_CD7 = 1; gPSSData->cursorFlipTimer = 1;
break; break;
} }
@@ -1816,21 +1816,21 @@ static bool8 sub_809494C(void)
static bool8 sub_8094A0C(void) static bool8 sub_8094A0C(void)
{ {
if (gPSSData->cursorMonSpecies == SPECIES_EGG) if (gPSSData->displayMonSpecies == SPECIES_EGG)
return FALSE; return FALSE;
if (!IsActiveItemMoving()) if (!IsActiveItemMoving())
{ {
if (gPSSData->cursorMonItem == ITEM_NONE) if (gPSSData->displayMonItemId == ITEM_NONE)
{ {
if (gPSSData->cursorMonSpecies == SPECIES_NONE) if (gPSSData->displayMonSpecies == SPECIES_NONE)
return FALSE; return FALSE;
SetMenuText(PC_TEXT_GIVE2); SetMenuText(PC_TEXT_GIVE2);
} }
else else
{ {
if (!ItemIsMail(gPSSData->cursorMonItem)) if (!ItemIsMail(gPSSData->displayMonItemId))
{ {
SetMenuText(PC_TEXT_TAKE); SetMenuText(PC_TEXT_TAKE);
SetMenuText(PC_TEXT_BAG); SetMenuText(PC_TEXT_BAG);
@@ -1840,16 +1840,16 @@ static bool8 sub_8094A0C(void)
} }
else else
{ {
if (gPSSData->cursorMonItem == ITEM_NONE) if (gPSSData->displayMonItemId == ITEM_NONE)
{ {
if (gPSSData->cursorMonSpecies == SPECIES_NONE) if (gPSSData->displayMonSpecies == SPECIES_NONE)
return FALSE; return FALSE;
SetMenuText(PC_TEXT_GIVE); SetMenuText(PC_TEXT_GIVE);
} }
else else
{ {
if (ItemIsMail(gPSSData->cursorMonItem) == TRUE) if (ItemIsMail(gPSSData->displayMonItemId) == TRUE)
return FALSE; return FALSE;
SetMenuText(PC_TEXT_SWITCH); SetMenuText(PC_TEXT_SWITCH);
@@ -1862,8 +1862,8 @@ static bool8 sub_8094A0C(void)
static void sub_8094AB8(struct Sprite *sprite) static void sub_8094AB8(struct Sprite *sprite)
{ {
sprite->x = gPSSData->field_CB4->x; sprite->x = gPSSData->cursorSprite->x;
sprite->y = gPSSData->field_CB4->y + 20; sprite->y = gPSSData->cursorSprite->y + 20;
} }
static void sub_8094AD8(void) static void sub_8094AD8(void)
@@ -1940,22 +1940,22 @@ static void sub_8094AD8(void)
LoadSpriteSheets(spriteSheets); LoadSpriteSheets(spriteSheets);
LoadSpritePalettes(spritePalettes); LoadSpritePalettes(spritePalettes);
gPSSData->field_CD8[0] = IndexOfSpritePaletteTag(TAG_PAL_WAVEFORM); gPSSData->cursorPalNums[0] = IndexOfSpritePaletteTag(TAG_PAL_WAVEFORM);
gPSSData->field_CD8[1] = IndexOfSpritePaletteTag(TAG_PAL_DAC7); gPSSData->cursorPalNums[1] = IndexOfSpritePaletteTag(TAG_PAL_DAC7);
sub_8092398(sBoxCursorArea, sBoxCursorPosition, &x, &y); sub_8092398(sBoxCursorArea, sBoxCursorPosition, &x, &y);
spriteId = CreateSprite(&gSpriteTemplate_857BA50, x, y, 6); spriteId = CreateSprite(&gSpriteTemplate_857BA50, x, y, 6);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
gPSSData->field_CB4 = &gSprites[spriteId]; gPSSData->cursorSprite = &gSprites[spriteId];
gPSSData->field_CB4->oam.paletteNum = gPSSData->field_CD8[sCanOnlyMove]; gPSSData->cursorSprite->oam.paletteNum = gPSSData->cursorPalNums[sCanOnlyMove];
gPSSData->field_CB4->oam.priority = 1; gPSSData->cursorSprite->oam.priority = 1;
if (sIsMonBeingMoved) if (sIsMonBeingMoved)
StartSpriteAnim(gPSSData->field_CB4, 3); StartSpriteAnim(gPSSData->cursorSprite, 3);
} }
else else
{ {
gPSSData->field_CB4 = NULL; gPSSData->cursorSprite = NULL;
} }
if (sBoxCursorArea == CURSOR_AREA_IN_PARTY) if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
@@ -1972,21 +1972,21 @@ static void sub_8094AD8(void)
spriteId = CreateSprite(&gSpriteTemplate_857BA68, 0, 0, subpriority); spriteId = CreateSprite(&gSpriteTemplate_857BA68, 0, 0, subpriority);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
gPSSData->field_CB8 = &gSprites[spriteId]; gPSSData->cursorShadowSprite = &gSprites[spriteId];
gPSSData->field_CB8->oam.priority = priority; gPSSData->cursorShadowSprite->oam.priority = priority;
if (sBoxCursorArea) if (sBoxCursorArea)
gPSSData->field_CB8->invisible = 1; gPSSData->cursorShadowSprite->invisible = 1;
} }
else else
{ {
gPSSData->field_CB8 = NULL; gPSSData->cursorShadowSprite = NULL;
} }
} }
static void sub_8094C84(void) static void sub_8094C84(void)
{ {
sCanOnlyMove = !sCanOnlyMove; sCanOnlyMove = !sCanOnlyMove;
gPSSData->field_CB4->oam.paletteNum = gPSSData->field_CD8[sCanOnlyMove]; gPSSData->cursorSprite->oam.paletteNum = gPSSData->cursorPalNums[sCanOnlyMove];
} }
u8 GetBoxCursorPosition(void) u8 GetBoxCursorPosition(void)
@@ -2010,7 +2010,7 @@ void sub_8094CD4(u8 *arg0, u8 *arg1)
void sub_8094D14(u8 animNum) void sub_8094D14(u8 animNum)
{ {
StartSpriteAnim(gPSSData->field_CB4, animNum); StartSpriteAnim(gPSSData->cursorSprite, animNum);
} }
u8 sub_8094D34(void) u8 sub_8094D34(void)
@@ -2020,7 +2020,7 @@ u8 sub_8094D34(void)
void sub_8094D40(void) void sub_8094D40(void)
{ {
gPSSData->field_CB4->oam.priority = 1; gPSSData->cursorSprite->oam.priority = 1;
} }
void sub_8094D60(void) void sub_8094D60(void)
+8 -8
View File
@@ -87,13 +87,13 @@ void AddMenu(void)
gPSSData->menuWindow.height = 2 * gPSSData->menuItemsCount; gPSSData->menuWindow.height = 2 * gPSSData->menuItemsCount;
gPSSData->menuWindow.tilemapLeft = 29 - gPSSData->menuWindow.width; gPSSData->menuWindow.tilemapLeft = 29 - gPSSData->menuWindow.width;
gPSSData->menuWindow.tilemapTop = 15 - gPSSData->menuWindow.height; gPSSData->menuWindow.tilemapTop = 15 - gPSSData->menuWindow.height;
gPSSData->field_CB0 = AddWindow(&gPSSData->menuWindow); gPSSData->menuWindowId = AddWindow(&gPSSData->menuWindow);
ClearWindowTilemap(gPSSData->field_CB0); ClearWindowTilemap(gPSSData->menuWindowId);
DrawStdFrameWithCustomTileAndPalette(gPSSData->field_CB0, FALSE, 0x00b, 14); DrawStdFrameWithCustomTileAndPalette(gPSSData->menuWindowId, FALSE, 0x00b, 14);
PrintTextArray(gPSSData->field_CB0, 1, 8, 2, 16, gPSSData->menuItemsCount, (void *)gPSSData->menuItems); PrintTextArray(gPSSData->menuWindowId, 1, 8, 2, 16, gPSSData->menuItemsCount, (void *)gPSSData->menuItems);
Menu_InitCursor(gPSSData->field_CB0, 1, 0, 2, 16, gPSSData->menuItemsCount, 0); Menu_InitCursor(gPSSData->menuWindowId, 1, 0, 2, 16, gPSSData->menuItemsCount, 0);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
gPSSData->field_CAE = 0; gPSSData->menuUnusedField = 0;
} }
bool8 sub_8094F90(void) bool8 sub_8094F90(void)
@@ -142,6 +142,6 @@ s16 sub_8094F94(void)
void sub_8095024(void) void sub_8095024(void)
{ {
ClearStdWindowAndFrameToTransparent(gPSSData->field_CB0, TRUE); ClearStdWindowAndFrameToTransparent(gPSSData->menuWindowId, TRUE);
RemoveWindow(gPSSData->field_CB0); RemoveWindow(gPSSData->menuWindowId);
} }
+5 -5
View File
@@ -215,7 +215,7 @@ void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos)
SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND); SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
} }
gPSSData->movingItem = gPSSData->cursorMonItem; gPSSData->movingItem = gPSSData->displayMonItemId;
} }
void sub_8095E2C(u16 item) void sub_8095E2C(u16 item)
@@ -560,7 +560,7 @@ void PrintItemDescription(void)
if (IsActiveItemMoving()) if (IsActiveItemMoving())
description = ItemId_GetDescription(gPSSData->movingItem); description = ItemId_GetDescription(gPSSData->movingItem);
else else
description = ItemId_GetDescription(gPSSData->cursorMonItem); description = ItemId_GetDescription(gPSSData->displayMonItemId);
FillWindowPixelBuffer(2, PIXEL_FILL(1)); FillWindowPixelBuffer(2, PIXEL_FILL(1));
AddTextPrinterParameterized5(2, 2, description, 2, 0, 0, NULL, 0, 0); AddTextPrinterParameterized5(2, 2, description, 2, 0, 0, NULL, 0, 0);
@@ -660,9 +660,9 @@ static void sub_8096958(struct Sprite *sprite)
static void sub_80969BC(struct Sprite *sprite) static void sub_80969BC(struct Sprite *sprite)
{ {
sprite->x = gPSSData->field_CB4->x + 4; sprite->x = gPSSData->cursorSprite->x + 4;
sprite->y = gPSSData->field_CB4->y + gPSSData->field_CB4->y2 + 8; sprite->y = gPSSData->cursorSprite->y + gPSSData->cursorSprite->y2 + 8;
sprite->oam.priority = gPSSData->field_CB4->oam.priority; sprite->oam.priority = gPSSData->cursorSprite->oam.priority;
} }
static void sub_80969F4(struct Sprite *sprite) static void sub_80969F4(struct Sprite *sprite)
+9 -9
View File
@@ -2,12 +2,12 @@
#include "gflib.h" #include "gflib.h"
#include "pokemon_storage_system_internal.h" #include "pokemon_storage_system_internal.h"
static EWRAM_DATA struct UnkStruct_2000020 *gUnknown_203982C = NULL; static EWRAM_DATA struct UnkUtil *gUnknown_203982C = NULL;
static void sub_8096CDC(struct UnkStruct_2000028 *unkStruct); static void sub_8096CDC(struct UnkUtilData *unkStruct);
static void sub_8096D70(struct UnkStruct_2000028 *unkStruct); static void sub_8096D70(struct UnkUtilData *unkStruct);
void sub_8096BE4(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2) void sub_8096BE4(struct UnkUtil *arg0, struct UnkUtilData *arg1, u32 arg2)
{ {
gUnknown_203982C = arg0; gUnknown_203982C = arg0;
arg0->unk_00 = arg1; arg0->unk_00 = arg1;
@@ -23,7 +23,7 @@ void sub_8096BF8(void)
{ {
for (i = 0; i < gUnknown_203982C->unk_04; i++) for (i = 0; i < gUnknown_203982C->unk_04; i++)
{ {
struct UnkStruct_2000028 *unkStruct = &gUnknown_203982C->unk_00[i]; struct UnkUtilData *unkStruct = &gUnknown_203982C->unk_00[i];
unkStruct->unk_0c(unkStruct); unkStruct->unk_0c(unkStruct);
} }
@@ -33,7 +33,7 @@ void sub_8096BF8(void)
static bool8 sub_8096C40(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg) static bool8 sub_8096C40(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg)
{ {
struct UnkStruct_2000028 *unkStruct; struct UnkUtilData *unkStruct;
if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05) if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05)
return FALSE; return FALSE;
@@ -48,7 +48,7 @@ static bool8 sub_8096C40(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft
return TRUE; return TRUE;
} }
static void sub_8096CDC(struct UnkStruct_2000028 *unkStruct) static void sub_8096CDC(struct UnkUtilData *unkStruct)
{ {
u16 i; u16 i;
@@ -62,7 +62,7 @@ static void sub_8096CDC(struct UnkStruct_2000028 *unkStruct)
static bool8 sub_8096D14(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height) static bool8 sub_8096D14(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
{ {
struct UnkStruct_2000028 *unkStruct; struct UnkUtilData *unkStruct;
if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05) if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05)
return FALSE; return FALSE;
@@ -75,7 +75,7 @@ static bool8 sub_8096D14(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
return TRUE; return TRUE;
} }
static void sub_8096D70(struct UnkStruct_2000028 *unkStruct) static void sub_8096D70(struct UnkUtilData *unkStruct)
{ {
u16 i; u16 i;
+1 -1
View File
@@ -4881,7 +4881,7 @@ static void PokeSum_CreateMonMarkingsSprite(void)
u32 markings = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MARKINGS); u32 markings = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MARKINGS);
DestroySpriteAndFreeResources(sMonSummaryScreen->markingSprite); DestroySpriteAndFreeResources(sMonSummaryScreen->markingSprite);
sMonSummaryScreen->markingSprite = CreateMonMarkingSprite_SelectCombo(TAG_PSS_UNK_8C, TAG_PSS_UNK_8C, sMonMarkingSpritePalette); sMonSummaryScreen->markingSprite = CreateMonMarkingAllCombosSprite(TAG_PSS_UNK_8C, TAG_PSS_UNK_8C, sMonMarkingSpritePalette);
if (sMonSummaryScreen->markingSprite != NULL) if (sMonSummaryScreen->markingSprite != NULL)
{ {
+1 -1
View File
@@ -1017,7 +1017,7 @@ static void sub_80B3D78(u8 taskId)
break; break;
case 1: case 1:
task->data[1] -= 4; task->data[1] -= 4;
task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);
SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0);
SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]);
if (task->data[1] == 0) if (task->data[1] == 0)
+1 -1
View File
@@ -51,7 +51,7 @@ const struct TextWindowGraphics gUserFrames[] = {
{gUnknown_84717CC, gUnknown_8471A2C} {gUnknown_84717CC, gUnknown_8471A2C}
}; // NELEMS = 10 }; // NELEMS = 10
const struct TextWindowGraphics * GetUserFrameGraphicsInfo(u8 idx) const struct TextWindowGraphics *GetWindowFrameTilesPal(u8 idx)
{ {
if (idx >= 20) // if (idx >= NELEMS(gUserFrames)) if (idx >= 20) // if (idx >= NELEMS(gUserFrames))
return &gUserFrames[0]; return &gUserFrames[0];