diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2018-12-15 23:58:47 +0100 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2018-12-15 23:58:47 +0100 |
commit | f1421d94c384c1bd76304fcb961ca28d7f0e7e20 (patch) | |
tree | a261fe44f0517e34f733a7f3672dc081834bf10f /src | |
parent | 59a69eb62769003a81c0f9f50be5ec5abde96242 (diff) |
Up to sub 0x80ce580
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_pike.c | 2 | ||||
-rw-r--r-- | src/daycare.c | 4 | ||||
-rw-r--r-- | src/egg_hatch.c | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 2 | ||||
-rw-r--r-- | src/field_poison.c | 2 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rw-r--r-- | src/menu.c | 10 | ||||
-rw-r--r-- | src/overworld.c | 2 | ||||
-rw-r--r-- | src/pokemon.c | 18 | ||||
-rw-r--r-- | src/pokemon_icon.c | 13 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 2 | ||||
-rw-r--r-- | src/pokemon_storage_system.c | 2601 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 2 | ||||
-rw-r--r-- | src/post_battle_event_funcs.c | 4 | ||||
-rw-r--r-- | src/text.c | 7 | ||||
-rw-r--r-- | src/wild_encounter.c | 12 |
16 files changed, 2574 insertions, 113 deletions
diff --git a/src/battle_pike.c b/src/battle_pike.c index d86677e48..4b2a1574d 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1613,7 +1613,7 @@ static void sub_81A8830(void) static bool8 CanEncounterWildMon(u8 enemyMonLevel) { - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { u8 monAbility = GetMonAbility(&gPlayerParty[0]); if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE) diff --git a/src/daycare.c b/src/daycare.c index 131540f6e..ef93fd2d8 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -901,7 +901,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) for (i = 0; i < DAYCARE_MON_COUNT; i++) { - if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SANITY_BIT2)) + if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SANITY_HAS_SPECIES)) daycare->mons[i].steps++, validEggs++; } @@ -922,7 +922,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) continue; - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT1)) + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG)) continue; steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP); diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 77296c707..9c1d6fdd8 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -876,7 +876,7 @@ u8 GetEggStepsToSubtract(void) u8 count, i; for (count = CalculatePlayerPartyCount(), i = 0; i < count; i++) { - if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT3)) + if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG)) { u8 ability = GetMonAbility(&gPlayerParty[i]); if (ability == ABILITY_MAGMA_ARMOR || ability == ABILITY_FLAME_BODY) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index a5aa23e32..7a6e16dd3 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1845,7 +1845,7 @@ static bool8 Fishing6(struct Task *task) } else { - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { u8 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD) diff --git a/src/field_poison.c b/src/field_poison.c index 02f37f69f..de05bc407 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -122,7 +122,7 @@ s32 DoPoisonFieldEffect(void) u32 numFainted = 0; for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(pokemon, MON_DATA_SANITY_BIT2) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) + if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) { hp = GetMonData(pokemon, MON_DATA_HP); if (hp == 0 || --hp == 0) diff --git a/src/field_specials.c b/src/field_specials.c index b47df09fc..34be71f30 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1266,7 +1266,7 @@ void IsGrassTypeInParty(void) for (i = 0; i < PARTY_SIZE; i++) { pokemon = &gPlayerParty[i]; - if (GetMonData(pokemon, MON_DATA_SANITY_BIT2) && !GetMonData(pokemon, MON_DATA_IS_EGG)) + if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { species = GetMonData(pokemon, MON_DATA_SPECIES); if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS) @@ -1658,7 +1658,7 @@ bool8 sub_813990C(void) for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT1) == 1) + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == 1) return TRUE; } diff --git a/src/menu.c b/src/menu.c index 61096138a..84a0a23f3 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1797,9 +1797,9 @@ bool8 free_temp_tile_data_buffers_if_possible(void) } } -void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size, u16 offset, u8 mode) +void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode) { - int sizeOut; + u32 sizeOut; if (gUnknown_0203CDA8 < ARRAY_COUNT(gUnknown_0203CDAC)) { void *ptr = malloc_and_decompress(src, &sizeOut); @@ -1815,9 +1815,9 @@ void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size, return NULL; } -void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, int size, u16 offset, u8 mode) +void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode) { - int sizeOut; + u32 sizeOut; void *ptr = malloc_and_decompress(src, &sizeOut); if (!size) size = sizeOut; @@ -1838,7 +1838,7 @@ void task_free_buf_after_copying_tile_data_to_vram(u8 taskId) } } -void *malloc_and_decompress(const void *src, int *size) +void *malloc_and_decompress(const void *src, u32 *size) { void *ptr; u8 *sizeAsBytes = (u8 *)size; diff --git a/src/overworld.c b/src/overworld.c index 12e02a9b5..b2c7ad963 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1342,7 +1342,7 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) monsCount = CalculatePlayerPartyCount(); for (i = 0; i < monsCount; i++) { - if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT3) + if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SWARM) { divBy = 2; diff --git a/src/pokemon.c b/src/pokemon.c index eec995050..aea52ecbb 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4097,13 +4097,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_LANGUAGE: retVal = boxMon->language; break; - case MON_DATA_SANITY_BIT1: + case MON_DATA_SANITY_IS_BAD_EGG: retVal = boxMon->isBadEgg; break; - case MON_DATA_SANITY_BIT2: + case MON_DATA_SANITY_HAS_SPECIES: retVal = boxMon->hasSpecies; break; - case MON_DATA_SANITY_BIT3: + case MON_DATA_SANITY_IS_EGG: retVal = boxMon->isEgg; break; case MON_DATA_OT_NAME: @@ -4304,7 +4304,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) u16 *moves = (u16 *)data; s32 i = 0; - while (moves[i] != 355) + while (moves[i] != MOVES_COUNT) { u16 move = moves[i]; if (substruct1->moves[0] == move @@ -4466,13 +4466,13 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_LANGUAGE: SET8(boxMon->language); break; - case MON_DATA_SANITY_BIT1: + case MON_DATA_SANITY_IS_BAD_EGG: SET8(boxMon->isBadEgg); break; - case MON_DATA_SANITY_BIT2: + case MON_DATA_SANITY_HAS_SPECIES: SET8(boxMon->hasSpecies); break; - case MON_DATA_SANITY_BIT3: + case MON_DATA_SANITY_IS_EGG: SET8(boxMon->isEgg); break; case MON_DATA_OT_NAME: @@ -4897,7 +4897,7 @@ bool8 IsPokemonStorageFull(void) for (i = 0; i < 14; i++) for (j = 0; j < 30; j++) - if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SPECIES) == SPECIES_NONE) + if (GetBoxMonDataAt(i, j, MON_DATA_SPECIES) == SPECIES_NONE) return FALSE; return TRUE; @@ -6859,7 +6859,7 @@ void SetWildMonHeldItem(void) u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); u16 var1 = 45; u16 var2 = 95; - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3, 0) + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG, 0) && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES) { var1 = 20; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index c24c8a898..6b7d8656f 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1076,7 +1076,7 @@ u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 return spriteId; } -u16 mon_icon_convert_unown_species_id(u16 species, u32 personality) +u16 GetIconSpecies(u16 species, u32 personality) { u16 result; @@ -1104,7 +1104,8 @@ u16 GetUnownLetterByPersonality(u32 personality) { if (!personality) return 0; - return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C; + else + return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C; } u16 sub_80D2E84(u16 species) @@ -1121,19 +1122,17 @@ u16 sub_80D2E84(u16 species) } else { - if(species > (SPECIES_UNOWN_B - 1)) + if (species > (SPECIES_UNOWN_B - 1)) species = 260; - return mon_icon_convert_unown_species_id(species, 0); + return GetIconSpecies(species, 0); } } const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 extra) { - return GetMonIconTiles(mon_icon_convert_unown_species_id(species, personality), extra); + return GetMonIconTiles(GetIconSpecies(species, personality), extra); } - - void sub_80D2EF8(struct Sprite *sprite) { sub_80D328C(sprite); diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 2d9a2f08f..b0e14d2b1 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -210,7 +210,7 @@ void GiveGiftRibbonToParty(u8 index, u8 ribbonId) { struct Pokemon *mon = &gPlayerParty[i]; - if (GetMonData(mon, MON_DATA_SPECIES) != 0 && GetMonData(mon, MON_DATA_SANITY_BIT3) == 0) + if (GetMonData(mon, MON_DATA_SPECIES) != 0 && GetMonData(mon, MON_DATA_SANITY_IS_EGG) == 0) { SetMonData(mon, array[index], &data); gotRibbon = TRUE; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index a37d38813..86041690c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -29,8 +29,11 @@ #include "strings.h" #include "text.h" #include "text_window.h" +#include "trig.h" #include "walda_phrase.h" #include "window.h" +#include "constants/maps.h" +#include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/species.h" @@ -106,25 +109,71 @@ enum SCREEN_CHANGE_ITEM_FROM_BAG, }; +enum +{ + MODE_PARTY, + MODE_BOX, + MODE_2, +}; + +enum +{ + WALLPAPER_FOREST, + WALLPAPER_CITY, + WALLPAPER_DESERT, + WALLPAPER_SAVANNA, + WALLPAPER_CRAG, + WALLPAPER_VOLCANO, + WALLPAPER_SNOW, + WALLPAPER_CAVE, + WALLPAPER_BEACH, + WALLPAPER_SEAFLOOR, + WALLPAPER_RIVER, + WALLPAPER_SKY, + WALLPAPER_POLKADOT, + WALLPAPER_POKECENTER, + WALLPAPER_MACHINE, + WALLPAPER_PLAIN, + WALLPAPER_FRIENDS, // The one received as a gift from Walda's parents. +}; + +enum +{ + CURSOR_AREA_IN_BOX, + CURSOR_AREA_IN_PARTY, + CURSOR_AREA_BOX, + CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box +}; + #define TAG_PAL_WAVEFORM 0xDACA #define TAG_PAL_DAC8 0xDAC8 #define TAG_PAL_DAC6 0xDAC6 #define TAG_PAL_DACE 0xDACE #define TAG_PAL_DAC7 0xDAC7 +#define TAG_PAL_DAC9 0xDAC9 #define TAG_TILE_WAVEFORM 0x5 #define TAG_TILE_10 0x10 #define TAG_TILE_2 0x2 #define TAG_TILE_D 0xD #define TAG_TILE_A 0xA +#define TAG_TILE_3 0x3 +#define TAG_TILE_4 0x4 IWRAM_DATA u8 gUnknown_03000F78[0x188]; extern u8 sPreviousBoxOption; extern u8 sCurrentBoxOption; +extern u8 sMovingMonOrigBoxPos; +extern u8 sMovingMonOrigBoxId; +extern s8 sBoxCursorPosition; +extern s8 sBoxCursorArea; extern u8 gUnknown_02039D10; +extern u8 gUnknown_02039D7E; extern u8 gUnknown_02039D0E; extern bool8 sInPartyMenu; +extern bool8 sCanOnlyMove; +extern bool8 sIsMonBeingMoved; extern u8 gUnknown_02039D0F; extern u16 gUnknown_02039D12; extern struct Pokemon gUnknown_02039D14; @@ -146,11 +195,16 @@ void Cb2_EnterPSS(u8 boxOption); u8 GetCurrentBoxOption(void); u8 sub_80CF9EC(void); u8 sub_80CDC2C(void); +u8 sub_80CB9BC(void); +void LoadWallpaperGfx(u8 boxId, s8 direction); +void sub_80CCCFC(u8 boxId, s8 direction); +void sub_80CD0B8(s8 direction); void SetBoxWallpaper(u8 boxId, u8 wallpaperId); void SetCurrentBox(u8 boxId); void sub_80CC32C(u8 boxId); -void ClearMonInBox(u8 boxId, u8 boxPos); +void ZeroBoxMonAt(u8 boxId, u8 boxPos); void sub_80C7958(u8 curBox); +void sub_80CCAE0(void *arg0); void ResetWaldaWallpaper(void); void sub_80C7B14(void); void sub_80C7BB4(void); @@ -163,7 +217,7 @@ void sub_80CE790(void); void sub_80CE8E4(void); void GiveChosenBagItem(void); void SetUpHidePartyMenu(void); -void sub_80CBB9C(void); +void DestroyAllPartyMonIcons(void); void sub_80D11CC(void); void LoadPSSMenuGfx(void); void LoadWaveformSpritePalette(void); @@ -171,6 +225,7 @@ void sub_80CDC18(void); void sub_80CD36C(void); void sub_80CD3EC(void); void sub_80CAC1C(void); +void sub_80CEBDC(void); void SetScrollingBackground(void); void sub_80CABE0(void); void sub_80CAEAC(void); @@ -199,7 +254,12 @@ void sub_80D1194(void); void PrintCursorMonInfo(void); void sub_80CA65C(void); void sub_80CADD8(void); +void sub_80CD02C(void); void sub_80CFEF0(void); +void sub_80CD158(void); +void sub_80CFC14(void); +void sub_80CEB40(void); +void sub_80CCEE0(void); void sub_80D1818(void); void sub_80CAA74(void); void sub_80D17B4(void); @@ -209,38 +269,48 @@ void sub_80CE7E8(void); void sub_80CFECC(void); void sub_80CA9EC(void); void FreePSSData(void); +void sub_80CCF9C(void); +void MoveMon(void); +void PlaceMon(void); void sub_80CAB20(void); void sub_80CE22C(void); +void sub_80CDA68(void); void sub_80CB950(void); void sub_80CA9C0(void); void SetUpDoShowPartyMenu(void); void BoxSetMosaic(void); void sub_80C7CF4(struct Sprite *sprite); +void sub_80CC100(struct Sprite *sprite); +void sub_80CB278(struct Sprite *sprite); +void sub_80CD210(struct Sprite *sprite); +bool32 WaitForWallpaperGfxLoad(void); bool8 InitPSSWindows(void); bool8 sub_80CC0A0(void); bool8 sub_80CE2A8(void); bool8 sub_80D0164(void); bool8 sub_80CC35C(void); bool8 sub_80D01E4(void); +bool8 sub_80CDED4(void); +bool8 sub_80CDF08(void); bool8 sub_80D184C(void); bool8 sub_80D18E4(void); bool8 DoShowPartyMenu(void); bool8 sub_80D1218(void); -bool8 sub_80CB9BC(void); bool8 ScrollToBox(void); bool8 sub_80CD554(void); bool8 HidePartyMenu(void); bool8 sub_80D127C(void); bool8 sub_80CA2B8(void); bool8 DoWallpaperGfxChange(void); -bool8 sub_80CDCAC(void); +bool8 DoMonPlaceChange(void); bool8 sub_80D00A8(void); bool8 CanMoveMon(void); bool8 CanShifMon(void); bool8 IsCursorOnCloseBox(void); bool8 IsCursorOnBox(void); +bool8 IsCursorInBox(void); bool8 IsMonBeingMoved(void); -bool8 sub_80CE19C(u8 arg0); +bool8 TryStorePartyMonInBox(u8 boxId); void Cb_InitPSS(u8 taskId); void Cb_PlaceMon(u8 taskId); void Cb_ChangeScreen(u8 taskId); @@ -275,18 +345,18 @@ void Cb_PrintCantStoreMail(u8 taskId); void Cb_HandleMovingMonFromParty(u8 taskId); void sub_80D2A90(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2); void sub_80D259C(u8 arg0); -void sub_80CC464(u8 arg0); +void SetUpScrollToBox(u8 boxId); void sub_80CFE54(u8 arg0); void sub_80D2918(u8 arg0); -void sub_80CC0D4(u8 arg0); -void sub_80CDC38(u8 arg0); +void sub_80CC0D4(u8 priority); +void InitMonPlaceChange(u8 arg0); void sub_80CE9A8(u8 markings); void ShowYesNoWindow(s8 cursorPos); void sub_80CDBF8(u8 arg0); void sub_80D01D0(u8 arg0); void sub_80CD1A8(bool8 arg0); void sub_80CA984(bool8 arg0); -void sub_80CB7E8(bool8 arg0); +void CreatePartyMonsSprites(bool8 arg0); void sub_80D2644(u8 arg0, u16 arg1, const void *arg2, u16 arg3, u16 arg4); void sub_80D2770(u8 arg0, u16 arg1, u16 arg2); void PrintStorageActionText(u8 id); @@ -302,17 +372,52 @@ void SetWallpaperForCurrentBox(u8 wallpaperId); void sub_80CAE0C(u8 wallpaperSet); u16 GetMovingItem(void); void SetCurrentBoxMonData(s32 monId, s32 request, const void *value); +s32 GetCurrentBoxMonData(u8 boxPosition, s32 request); void LoadCursorMonGfx(u16 species, u32 pid); void sub_80CA2D0(struct Sprite *sprite); +void sub_80CCF64(struct Sprite *sprite); +void sub_80CBA3C(struct Sprite *sprite); +void sub_80CCF30(struct Sprite *sprite); void sub_80D27AC(u8 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); void sub_80D27F4(u8 arg0, u8 arg1, s8 arg2); -void sub_80CBAF0(s16 arg0); +void sub_80CBAF0(s16 yDelta); void sub_80CAAA8(u8 arg0, bool8 isPartyMon); const u8 *GetMovingItemName(void); bool32 IsWaldaWallpaperUnlocked(void); void sub_80CFF34(u8 arg0); -void sub_80D0D8C(bool8 arg0, u8 cursorPos); +void sub_80D0D8C(u8 arg0, u8 cursorPos); +void sub_80D0E50(u8 arg0, u8 cursorPos); void sub_80D0F38(u16 item); +static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 oamPriority, u8 subpriority); +void DestroyBoxMonIcon(struct Sprite *sprite); +void SetBoxSpeciesAndPersonalities(u8 boxId); +void sub_80CB9D0(struct Sprite *sprite, u16 partyId); +void sub_80CC370(u8 taskId); +void sub_80CCB50(u8 boxId); +s8 sub_80CC644(u8 boxId); +u8 GetBoxWallpaper(u8 boxId); +u32 GetWaldaWallpaperPatternId(void); +u32 GetWaldaWallpaperIconId(void); +void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2); +u16 *GetWaldaWallpaperColorsPtr(void); +void sub_80C6D80(u8 *arg0, void *arg1, u8 arg2, u8 arg3, s32 arg4); +s16 sub_80CD00C(const u8 *string); +bool8 MonPlaceChange_Shift(void); +bool8 MonPlaceChange_Move(void); +bool8 MonPlaceChange_Place(void); +bool8 sub_80CDEC4(void); +bool8 sub_80CDEB4(void); +void sub_80CD444(u8 a0, u8 a1, u16 *a2, u16 *a3); +void SetShiftedMonData(u8 boxId, u8 position); +void SetMovedMonData(u8 boxId, u8 position); +void SetPlacedMonData(u8 boxId, u8 position); +void PurgeMonOrBoxMon(u8 boxId, u8 position); +void BoxMonAtToMon(u8 boxId, u8 position, struct Pokemon *dst); +void SetBoxMonAt(u8 boxId, u8 position, struct BoxPokemon *src); +void sub_80CEC00(struct Pokemon *mon, u8 arg1); +bool32 AtLeastThreeUsableMons(void); +bool32 CheckBoxedMonSanity(s32 boxId, s32 boxPosition); +s32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst); // const rom data const struct PSS_MenuStringPtrs gUnknown_085716C0[] = @@ -844,22 +949,320 @@ const u16 gUnknown_08577574[][2] = const struct WallpaperTable gWallpaperTable[] = { - WALLPAPER_ENTRY(Forest), - WALLPAPER_ENTRY(City), - WALLPAPER_ENTRY(Desert), - WALLPAPER_ENTRY(Savanna), - WALLPAPER_ENTRY(Crag), - WALLPAPER_ENTRY(Volcano), - WALLPAPER_ENTRY(Snow), - WALLPAPER_ENTRY(Cave), - WALLPAPER_ENTRY(Beach), - WALLPAPER_ENTRY(Seafloor), - WALLPAPER_ENTRY(River), - WALLPAPER_ENTRY(Sky), - WALLPAPER_ENTRY(PolkaDot), - WALLPAPER_ENTRY(Pokecenter), - WALLPAPER_ENTRY(Machine), - WALLPAPER_ENTRY(Plain), + [WALLPAPER_FOREST] = WALLPAPER_ENTRY(Forest), + [WALLPAPER_CITY] = WALLPAPER_ENTRY(City), + [WALLPAPER_DESERT] = WALLPAPER_ENTRY(Desert), + [WALLPAPER_SAVANNA] = WALLPAPER_ENTRY(Savanna), + [WALLPAPER_CRAG] = WALLPAPER_ENTRY(Crag), + [WALLPAPER_VOLCANO] = WALLPAPER_ENTRY(Volcano), + [WALLPAPER_SNOW] = WALLPAPER_ENTRY(Snow), + [WALLPAPER_CAVE] = WALLPAPER_ENTRY(Cave), + [WALLPAPER_BEACH] = WALLPAPER_ENTRY(Beach), + [WALLPAPER_SEAFLOOR] = WALLPAPER_ENTRY(Seafloor), + [WALLPAPER_RIVER] = WALLPAPER_ENTRY(River), + [WALLPAPER_SKY] = WALLPAPER_ENTRY(Sky), + [WALLPAPER_POLKADOT] = WALLPAPER_ENTRY(PolkaDot), + [WALLPAPER_POKECENTER] = WALLPAPER_ENTRY(Pokecenter), + [WALLPAPER_MACHINE] = WALLPAPER_ENTRY(Machine), + [WALLPAPER_PLAIN] = WALLPAPER_ENTRY(Plain), +}; + +const u8 gPCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp"); + +const u16 gWallpaperPalettes_Zigzagoon[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"), + INCBIN_U16("graphics/pokemon_storage/zigzagoon_bg.gbapal"), +}; +const u32 gWallpaperTiles_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/zigzagoon.4bpp.lz"); +const u32 gWallpaperTilemap_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/zigzagoon.bin.lz"); + +const u16 gWallpaperPalettes_Screen[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"), + INCBIN_U16("graphics/pokemon_storage/screen_bg.gbapal"), +}; +const u32 gWallpaperTiles_Screen[] = INCBIN_U32("graphics/pokemon_storage/screen.4bpp.lz"); +const u32 gWallpaperTilemap_Screen[] = INCBIN_U32("graphics/pokemon_storage/screen.bin.lz"); + +const u16 gWallpaperPalettes_Diagonal[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"), + INCBIN_U16("graphics/pokemon_storage/diagonal_bg.gbapal"), +}; +const u32 gWallpaperTiles_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/diagonal.4bpp.lz"); +const u32 gWallpaperTilemap_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/diagonal.bin.lz"); + +const u16 gWallpaperPalettes_Block[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/block_bg.gbapal"), + INCBIN_U16("graphics/pokemon_storage/block_bg.gbapal"), +}; +const u32 gWallpaperTiles_Block[] = INCBIN_U32("graphics/pokemon_storage/block.4bpp.lz"); +const u32 gWallpaperTilemap_Block[] = INCBIN_U32("graphics/pokemon_storage/block.bin.lz"); + +const u16 gWallpaperPalettes_Pokecenter2[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/pokecenter2_bg.gbapal"), + INCBIN_U16("graphics/pokemon_storage/pokecenter2_bg.gbapal"), +}; +const u32 gWallpaperTiles_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/pokecenter2.4bpp.lz"); +const u32 gWallpaperTilemap_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/pokecenter2.bin.lz"); + +const u16 gWallpaperPalettes_Frame[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/frame_bg.gbapal"), + INCBIN_U16("graphics/pokemon_storage/frame_bg.gbapal"), +}; +const u32 gWallpaperTiles_Frame[] = INCBIN_U32("graphics/pokemon_storage/frame.4bpp.lz"); +const u32 gWallpaperTilemap_Frame[] = INCBIN_U32("graphics/pokemon_storage/frame.bin.lz"); + +const u16 gWallpaperPalettes_Blank[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"), + INCBIN_U16("graphics/pokemon_storage/zigzagoon_bg.gbapal"), +}; +const u32 gWallpaperTiles_Blank[] = INCBIN_U32("graphics/pokemon_storage/blank.4bpp.lz"); +const u32 gWallpaperTilemap_Blank[] = INCBIN_U32("graphics/pokemon_storage/blank.bin.lz"); + +const u16 gWallpaperPalettes_Circles[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/circles_bg.gbapal"), +}; +const u32 gWallpaperTiles_Circles[] = INCBIN_U32("graphics/pokemon_storage/circles.4bpp.lz"); +const u32 gWallpaperTilemap_Circles[] = INCBIN_U32("graphics/pokemon_storage/circles.bin.lz"); + +const u16 gWallpaperPalettes_Azumarill[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/azumarill_bg.gbapal"), +}; +const u32 gWallpaperTiles_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/azumarill.4bpp.lz"); +const u32 gWallpaperTilemap_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/azumarill.bin.lz"); + +const u16 gWallpaperPalettes_Pikachu[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/pikachu_bg.gbapal"), +}; +const u32 gWallpaperTiles_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/pikachu.4bpp.lz"); +const u32 gWallpaperTilemap_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/pikachu.bin.lz"); + +const u16 gWallpaperPalettes_Legendary[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/legendary_bg.gbapal"), +}; +const u32 gWallpaperTiles_Legendary[] = INCBIN_U32("graphics/pokemon_storage/legendary.4bpp.lz"); +const u32 gWallpaperTilemap_Legendary[] = INCBIN_U32("graphics/pokemon_storage/legendary.bin.lz"); + +const u16 gWallpaperPalettes_Dusclops[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/dusclops_bg.gbapal"), +}; +const u32 gWallpaperTiles_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/dusclops.4bpp.lz"); +const u32 gWallpaperTilemap_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/dusclops.bin.lz"); + +const u16 gWallpaperPalettes_Ludicolo[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/ludicolo_bg.gbapal"), +}; +const u32 gWallpaperTiles_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/ludicolo.4bpp.lz"); +const u32 gWallpaperTilemap_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/ludicolo.bin.lz"); + +const u16 gWallpaperPalettes_Whiscash[][16] = +{ + INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"), + INCBIN_U16("graphics/pokemon_storage/whiscash_bg.gbapal"), +}; +const u32 gWallpaperTiles_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/whiscash.4bpp.lz"); +const u32 gWallpaperTilemap_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/whiscash.bin.lz"); + +const u32 gWallpaperIcon_Aqua[] = INCBIN_U32("graphics/pokemon_storage/aqua_icon.4bpp.lz"); +const u32 gWallpaperIcon_Heart[] = INCBIN_U32("graphics/pokemon_storage/heart_icon.4bpp.lz"); +const u32 gWallpaperIcon_FiveStar[] = INCBIN_U32("graphics/pokemon_storage/five_star_icon.4bpp.lz"); +const u32 gWallpaperIcon_Brick[] = INCBIN_U32("graphics/pokemon_storage/brick_icon.4bpp.lz"); +const u32 gWallpaperIcon_FourStar[] = INCBIN_U32("graphics/pokemon_storage/four_star_icon.4bpp.lz"); +const u32 gWallpaperIcon_Asterisk[] = INCBIN_U32("graphics/pokemon_storage/asterisk_icon.4bpp.lz"); +const u32 gWallpaperIcon_Dot[] = INCBIN_U32("graphics/pokemon_storage/dot_icon.4bpp.lz"); +const u32 gWallpaperIcon_LineCircle[] = INCBIN_U32("graphics/pokemon_storage/line_circle_icon.4bpp.lz"); +const u32 gWallpaperIcon_PokeBall[] = INCBIN_U32("graphics/pokemon_storage/pokeball_icon.4bpp.lz"); +const u32 gWallpaperIcon_Maze[] = INCBIN_U32("graphics/pokemon_storage/maze_icon.4bpp.lz"); +const u32 gWallpaperIcon_Footprint[] = INCBIN_U32("graphics/pokemon_storage/footprint_icon.4bpp.lz"); +const u32 gWallpaperIcon_BigAsterisk[] = INCBIN_U32("graphics/pokemon_storage/big_asterisk_icon.4bpp.lz"); +const u32 gWallpaperIcon_Circle[] = INCBIN_U32("graphics/pokemon_storage/circle_icon.4bpp.lz"); +const u32 gWallpaperIcon_Koffing[] = INCBIN_U32("graphics/pokemon_storage/koffing_icon.4bpp.lz"); +const u32 gWallpaperIcon_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/ribbon_icon.4bpp.lz"); +const u32 gWallpaperIcon_FourCircles[] = INCBIN_U32("graphics/pokemon_storage/four_circles_icon.4bpp.lz"); +const u32 gWallpaperIcon_Lotad[] = INCBIN_U32("graphics/pokemon_storage/lotad_icon.4bpp.lz"); +const u32 gWallpaperIcon_Crystal[] = INCBIN_U32("graphics/pokemon_storage/crystal_icon.4bpp.lz"); +const u32 gWallpaperIcon_Pichu[] = INCBIN_U32("graphics/pokemon_storage/pichu_icon.4bpp.lz"); +const u32 gWallpaperIcon_Diglett[] = INCBIN_U32("graphics/pokemon_storage/diglett_icon.4bpp.lz"); +const u32 gWallpaperIcon_Luvdisc[] = INCBIN_U32("graphics/pokemon_storage/luvdisc_icon.4bpp.lz"); +const u32 gWallpaperIcon_StarInCircle[] = INCBIN_U32("graphics/pokemon_storage/star_in_circle_icon.4bpp.lz"); +const u32 gWallpaperIcon_Spinda[] = INCBIN_U32("graphics/pokemon_storage/spinda_icon.4bpp.lz"); +const u32 gWallpaperIcon_Latis[] = INCBIN_U32("graphics/pokemon_storage/latis_icon.4bpp.lz"); +const u32 gWallpaperIcon_Minun[] = INCBIN_U32("graphics/pokemon_storage/minun_icon.4bpp.lz"); +const u32 gWallpaperIcon_Togepi[] = INCBIN_U32("graphics/pokemon_storage/togepi_icon.4bpp.lz"); +const u32 gWallpaperIcon_Magma[] = INCBIN_U32("graphics/pokemon_storage/magma_icon.4bpp.lz"); + +const struct WallpaperTable gFriendsWallpaperTable[] = +{ + WALLPAPER_ENTRY(Zigzagoon), + WALLPAPER_ENTRY(Screen), + WALLPAPER_ENTRY(Horizontal), + WALLPAPER_ENTRY(Diagonal), + WALLPAPER_ENTRY(Block), + WALLPAPER_ENTRY(Ribbon), + WALLPAPER_ENTRY(Pokecenter2), + WALLPAPER_ENTRY(Frame), + WALLPAPER_ENTRY(Blank), + WALLPAPER_ENTRY(Circles), + WALLPAPER_ENTRY(Azumarill), + WALLPAPER_ENTRY(Pikachu), + WALLPAPER_ENTRY(Legendary), + WALLPAPER_ENTRY(Dusclops), + WALLPAPER_ENTRY(Ludicolo), + WALLPAPER_ENTRY(Whiscash), +}; + +const u32 *const gFriendsIcons[] = +{ + gWallpaperIcon_Aqua, + gWallpaperIcon_Heart, + gWallpaperIcon_FiveStar, + gWallpaperIcon_Brick, + gWallpaperIcon_FourStar, + gWallpaperIcon_Asterisk, + gWallpaperIcon_Dot, + gWallpaperIcon_Cross, + gWallpaperIcon_LineCircle, + gWallpaperIcon_PokeBall, + gWallpaperIcon_Maze, + gWallpaperIcon_Footprint, + gWallpaperIcon_BigAsterisk, + gWallpaperIcon_Circle, + gWallpaperIcon_Koffing, + gWallpaperIcon_Ribbon, + gWallpaperIcon_Bolt, + gWallpaperIcon_FourCircles, + gWallpaperIcon_Lotad, + gWallpaperIcon_Crystal, + gWallpaperIcon_Pichu, + gWallpaperIcon_Diglett, + gWallpaperIcon_Luvdisc, + gWallpaperIcon_StarInCircle, + gWallpaperIcon_Spinda, + gWallpaperIcon_Latis, + gWallpaperIcon_Plusle, + gWallpaperIcon_Minun, + gWallpaperIcon_Togepi, + gWallpaperIcon_Magma, +}; + +// Unknown Unused data. +const u16 gUnknown_0857B07C = 0x23BA; + +const struct SpriteSheet gUnknown_0857B080 = {gPCGfx_Arrow, 0x80, 6}; + +const struct OamData gOamData_83BB298 = +{ + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83BB2A0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83BB2A8[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BB2B0[] = +{ + gSpriteAnim_83BB2A0, + gSpriteAnim_83BB2A8 +}; + +const struct SpriteTemplate gSpriteTemplate_857B0A8 = +{ + TAG_TILE_3, + TAG_PAL_DAC9, + &gOamData_83BB298, + gSpriteAnimTable_83BB2B0, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_83BB2D0 = +{ + .shape = ST_OAM_V_RECTANGLE, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83BB2D8[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83BB2E0[] = +{ + ANIMCMD_FRAME(2, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BB2E8[] = +{ + gSpriteAnim_83BB2D8, + gSpriteAnim_83BB2E0 +}; + +const struct SpriteTemplate gUnknown_0857B0E0 = +{ + 6, + 0xDACA, + &gOamData_83BB2D0, + gSpriteAnimTable_83BB2E8, + NULL, + gDummySpriteAffineAnimTable, + sub_80CD210 +}; + +const u16 gHandCursorPalette[] = INCBIN_U16("graphics/pokemon_storage/hand_cursor.gbapal"); +const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor.4bpp"); +const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); + +bool8 (*const gUnknown_0857B998[])(void) = +{ + MonPlaceChange_Move, + MonPlaceChange_Place, + MonPlaceChange_Shift, +}; + +struct +{ + s8 mapGroup; + s8 mapNum; + u16 move; +} const gUnknown_0857B9A4[] = +{ + {MAP_GROUPS_COUNT, 0, MOVE_SURF}, + {MAP_GROUPS_COUNT, 0, MOVE_DIVE}, + {MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), MOVE_STRENGTH}, + {MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), MOVE_ROCK_SMASH}, + {MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MOVE_STRENGTH}, + {MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MOVE_ROCK_SMASH}, }; // code @@ -869,7 +1272,7 @@ u8 CountMonsInBox(u8 boxId) for (i = 0, count = 0; i < IN_BOX_COUNT; i++) { - if (GetBoxMonDataFromAnyBox(boxId, i, MON_DATA_SPECIES) != SPECIES_NONE) + if (GetBoxMonDataAt(boxId, i, MON_DATA_SPECIES) != SPECIES_NONE) count++; } @@ -882,7 +1285,7 @@ s16 GetFirstFreeBoxSpot(u8 boxId) for (i = 0; i < IN_BOX_COUNT; i++) { - if (GetBoxMonDataFromAnyBox(boxId, i, MON_DATA_SPECIES) == SPECIES_NONE) + if (GetBoxMonDataAt(boxId, i, MON_DATA_SPECIES) == SPECIES_NONE) return i; } @@ -1184,14 +1587,13 @@ s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx void ResetPokemonStorageSystem(void) { - u16 boxId; - u16 boxMon; + u16 boxId, boxPosition; SetCurrentBox(0); for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++) { - for (boxMon = 0; boxMon < IN_BOX_COUNT; boxMon++) - ClearMonInBox(boxId, boxMon); + for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++) + ZeroBoxMonAt(boxId, boxPosition); } for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++) { @@ -1735,7 +2137,7 @@ void Cb_MainPSS(u8 taskId) gUnknown_02039D08->newCurrBoxId = 0; if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) { - sub_80CC464(gUnknown_02039D08->newCurrBoxId); + SetUpScrollToBox(gUnknown_02039D08->newCurrBoxId); gUnknown_02039D08->state = 2; } else @@ -1751,7 +2153,7 @@ void Cb_MainPSS(u8 taskId) gUnknown_02039D08->newCurrBoxId = TOTAL_BOXES_COUNT - 1; if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) { - sub_80CC464(gUnknown_02039D08->newCurrBoxId); + SetUpScrollToBox(gUnknown_02039D08->newCurrBoxId); gUnknown_02039D08->state = 2; } else @@ -1930,7 +2332,7 @@ void Cb_MainPSS(u8 taskId) case 10: if (!sub_80D1218()) { - sub_80CC464(gUnknown_02039D08->newCurrBoxId); + SetUpScrollToBox(gUnknown_02039D08->newCurrBoxId); gUnknown_02039D08->state = 2; } break; @@ -2145,11 +2547,11 @@ void Cb_MoveMon(u8 taskId) switch (gUnknown_02039D08->state) { case 0: - sub_80CDC38(0); + InitMonPlaceChange(0); gUnknown_02039D08->state++; break; case 1: - if (!sub_80CDCAC()) + if (!DoMonPlaceChange()) { if (sInPartyMenu) SetPSSCallback(Cb_HandleMovingMonFromParty); @@ -2165,11 +2567,11 @@ void Cb_PlaceMon(u8 taskId) switch (gUnknown_02039D08->state) { case 0: - sub_80CDC38(1); + InitMonPlaceChange(1); gUnknown_02039D08->state++; break; case 1: - if (!sub_80CDCAC()) + if (!DoMonPlaceChange()) { if (sInPartyMenu) SetPSSCallback(Cb_HandleMovingMonFromParty); @@ -2185,11 +2587,11 @@ void Cb_ShiftMon(u8 taskId) switch (gUnknown_02039D08->state) { case 0: - sub_80CDC38(2); + InitMonPlaceChange(2); gUnknown_02039D08->state++; break; case 1: - if (!sub_80CDCAC()) + if (!DoMonPlaceChange()) { BoxSetMosaic(); SetPSSCallback(Cb_MainPSS); @@ -2211,7 +2613,7 @@ void Cb_WithdrawMon(u8 taskId) else { sub_80CDC18(); - sub_80CDC38(0); + InitMonPlaceChange(0); gUnknown_02039D08->state = 2; } break; @@ -2223,7 +2625,7 @@ void Cb_WithdrawMon(u8 taskId) } break; case 2: - if (!sub_80CDCAC()) + if (!DoMonPlaceChange()) { sub_80CC0D4(1); SetUpDoShowPartyMenu(); @@ -2233,12 +2635,12 @@ void Cb_WithdrawMon(u8 taskId) case 3: if (!DoShowPartyMenu()) { - sub_80CDC38(1); + InitMonPlaceChange(1); gUnknown_02039D08->state++; } break; case 4: - if (!sub_80CDCAC()) + if (!DoMonPlaceChange()) { sub_80CAB20(); gUnknown_02039D08->state++; @@ -2252,7 +2654,7 @@ void Cb_WithdrawMon(u8 taskId) void Cb_DepositMenu(u8 taskId) { - u8 r4; + u8 boxId; switch (gUnknown_02039D08->state) { @@ -2263,9 +2665,9 @@ void Cb_DepositMenu(u8 taskId) gUnknown_02039D08->state++; break; case 1: - r4 = sub_80C78F0(); - if (r4 == 200); - else if (r4 == 201) + boxId = sub_80C78F0(); + if (boxId == 200); + else if (boxId == 201) { ClearBottomWindow(); sub_80C78E4(); @@ -2274,9 +2676,9 @@ void Cb_DepositMenu(u8 taskId) } else { - if (sub_80CE19C(r4)) + if (TryStorePartyMonInBox(boxId)) { - gUnknown_02039D0E = r4; + gUnknown_02039D0E = boxId; ClearBottomWindow(); sub_80C78E4(); sub_80C7890(); @@ -2325,17 +2727,17 @@ void Cb_ReleaseMon(u8 taskId) case 1: switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case -1: - case 1: - ClearBottomWindow(); - SetPSSCallback(Cb_MainPSS); - break; - case 0: - ClearBottomWindow(); - sub_80CE3A0(); - sub_80CE250(); - gUnknown_02039D08->state++; - break; + case -1: + case 1: + ClearBottomWindow(); + SetPSSCallback(Cb_MainPSS); + break; + case 0: + ClearBottomWindow(); + sub_80CE3A0(); + sub_80CE250(); + gUnknown_02039D08->state++; + break; } break; case 2: @@ -2352,7 +2754,7 @@ void Cb_ReleaseMon(u8 taskId) } if (r0 == 0) { - gUnknown_02039D08->state = 8; + gUnknown_02039D08->state = 8; // Can't release the mon. break; } } @@ -2933,7 +3335,7 @@ void Cb_JumpBox(u8 taskId) } break; case 2: - sub_80CC464(gUnknown_02039D08->newCurrBoxId); + SetUpScrollToBox(gUnknown_02039D08->newCurrBoxId); gUnknown_02039D08->state++; break; case 3: @@ -3439,7 +3841,7 @@ void sub_80CA704(void) if (sInPartyMenu) { sub_80CA984(TRUE); - sub_80CB7E8(TRUE); + CreatePartyMonsSprites(TRUE); sub_80D2918(2); sub_80D2918(1); } @@ -3460,7 +3862,7 @@ void SetUpShowPartyMenu(void) gUnknown_02039D08->field_2C0 = 20; gUnknown_02039D08->field_2C2 = 2; gUnknown_02039D08->field_2C5 = 0; - sub_80CB7E8(FALSE); + CreatePartyMonsSprites(FALSE); } bool8 ShowPartyMenu(void) @@ -3512,7 +3914,7 @@ bool8 HidePartyMenu(void) else { sInPartyMenu = FALSE; - sub_80CBB9C(); + DestroyAllPartyMonIcons(); CompactPartySlots(); sub_80D27AC(2, 0, 0, 9, 2); sub_80D2918(2); @@ -3762,9 +4164,9 @@ void sub_80CAEAC(void) if (!IsCursorOnBox()) { if (sInPartyMenu) - sub_80D0D8C(TRUE, GetBoxCursorPosition()); + sub_80D0D8C(1, GetBoxCursorPosition()); else - sub_80D0D8C(FALSE, GetBoxCursorPosition()); + sub_80D0D8C(0, GetBoxCursorPosition()); } if (gUnknown_02039D12 != 0) @@ -3791,3 +4193,2062 @@ void sub_80CAF04(void) gUnknown_02039D08->field_A6C = NULL; gUnknown_02039D08->field_78C = 0; } + +u8 sub_80CAFAC(void) +{ + return (IsCursorInBox() ? 2 : 1); +} + +void sub_80CAFC4(void) +{ + u32 personality = GetMonData(&gUnknown_02039D08->field_20A4, MON_DATA_PERSONALITY); + u16 species = GetMonData(&gUnknown_02039D08->field_20A4, MON_DATA_SPECIES2); + u8 priority = sub_80CAFAC(); + + gUnknown_02039D08->field_A6C = CreateMonIconSprite(species, personality, 0, 0, priority, 7); + gUnknown_02039D08->field_A6C->callback = sub_80CC100; +} + +void sub_80CB028(u8 boxId) +{ + u8 boxPosition; + u16 i, j, count; + u16 species; + u32 personality; + + count = 0; + boxPosition = 0; + for (i = 0; i < IN_BOX_COLUMS; i++) + { + for (j = 0; j < IN_BOX_ROWS; j++) + { + species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + { + personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); + gUnknown_02039D08->boxMonsSprites[count] = CreateMonIconSprite(species, personality, 8 * (3 * j) + 100, 8 * (3 * i) + 44, 2, 19 - j); + } + else + { + gUnknown_02039D08->boxMonsSprites[count] = NULL; + } + boxPosition++; + count++; + } + } + + if (gUnknown_02039D08->boxOption == BOX_OPTION_MOVE_ITEMS) + { + for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++) + { + if (GetBoxMonDataAt(boxId, boxPosition, MON_DATA_HELD_ITEM) == 0) + gUnknown_02039D08->boxMonsSprites[boxPosition]->oam.objMode = 1; + } + } +} + +void sub_80CB140(u8 boxPosition) +{ + u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2); + + if (species != SPECIES_NONE) + { + s16 x = 8 * (3 * (boxPosition % IN_BOX_ROWS)) + 100; + s16 y = 8 * (3 * (boxPosition / IN_BOX_ROWS)) + 44; + u32 personality = GetCurrentBoxMonData(boxPosition, MON_DATA_PERSONALITY); + + gUnknown_02039D08->boxMonsSprites[boxPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (boxPosition % IN_BOX_ROWS)); + if (gUnknown_02039D08->boxOption == BOX_OPTION_MOVE_ITEMS) + gUnknown_02039D08->boxMonsSprites[boxPosition]->oam.objMode = 1; + } +} + +void sub_80CB1F0(s16 arg0) +{ + u16 i; + + for (i = 0; i < IN_BOX_COUNT; i++) + { + if (gUnknown_02039D08->boxMonsSprites[i] != NULL) + { + gUnknown_02039D08->boxMonsSprites[i]->data[2] = arg0; + gUnknown_02039D08->boxMonsSprites[i]->data[4] = 1; + gUnknown_02039D08->boxMonsSprites[i]->callback = sub_80CB278; + } + } +} + +void sub_80CB234(struct Sprite *sprite) +{ + if (sprite->data[1] != 0) + { + sprite->data[1]--; + sprite->pos1.x += sprite->data[2]; + } + else + { + gUnknown_02039D08->field_C66--; + sprite->pos1.x = sprite->data[3]; + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_80CB278(struct Sprite *sprite) +{ + if (sprite->data[4] != 0) + { + sprite->data[4]--; + } + else + { + sprite->pos1.x += sprite->data[2]; + sprite->data[5] = sprite->pos1.x + sprite->pos2.x; + if (sprite->data[5] <= 68 || sprite->data[5] >= 252) + sprite->callback = SpriteCallbackDummy; + } +} + +void DestroyAllIconsInRow(u8 row) +{ + u16 column; + u8 boxPosition = row; + + for (column = 0; column < IN_BOX_COLUMS; column++) + { + if (gUnknown_02039D08->boxMonsSprites[boxPosition] != NULL) + { + DestroyBoxMonIcon(gUnknown_02039D08->boxMonsSprites[boxPosition]); + gUnknown_02039D08->boxMonsSprites[boxPosition] = NULL; + } + boxPosition += IN_BOX_ROWS; + } +} + +u8 sub_80CB2F8(u8 row, u16 times, s16 xDelta) +{ + s32 i; + u16 y = 44; + s16 xDest = 8 * (3 * row) + 100; + u16 x = xDest - ((times + 1) * xDelta); + u8 subpriority = 19 - row; + u8 count = 0; + u8 boxPosition = row; + + if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) + { + for (i = 0; i < IN_BOX_COLUMS; i++) + { + if (gUnknown_02039D08->boxSpecies[boxPosition] != SPECIES_NONE) + { + gUnknown_02039D08->boxMonsSprites[boxPosition] = CreateMonIconSprite(gUnknown_02039D08->boxSpecies[boxPosition], + gUnknown_02039D08->boxPersonalities[boxPosition], + x, y, 2, subpriority); + if (gUnknown_02039D08->boxMonsSprites[boxPosition] != NULL) + { + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[1] = times; + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[2] = xDelta; + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[3] = xDest; + gUnknown_02039D08->boxMonsSprites[boxPosition]->callback = sub_80CB234; + count++; + } + } + boxPosition += IN_BOX_ROWS; + y += 24; + } + } + else + { + for (i = 0; i < IN_BOX_COLUMS; i++) + { + if (gUnknown_02039D08->boxSpecies[boxPosition] != SPECIES_NONE) + { + gUnknown_02039D08->boxMonsSprites[boxPosition] = CreateMonIconSprite(gUnknown_02039D08->boxSpecies[boxPosition], + gUnknown_02039D08->boxPersonalities[boxPosition], + x, y, 2, subpriority); + if (gUnknown_02039D08->boxMonsSprites[boxPosition] != NULL) + { + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[1] = times; + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[2] = xDelta; + gUnknown_02039D08->boxMonsSprites[boxPosition]->data[3] = xDest; + gUnknown_02039D08->boxMonsSprites[boxPosition]->callback = sub_80CB234; + if (GetBoxMonDataAt(gUnknown_02039D08->field_C5C, boxPosition, MON_DATA_HELD_ITEM) == 0) + gUnknown_02039D08->boxMonsSprites[boxPosition]->oam.objMode = 1; + count++; + } + } + boxPosition += IN_BOX_ROWS; + y += 24; + } + } + + return count; +} + +void sub_80CB4CC(u8 boxId, s8 direction) +{ + gUnknown_02039D08->field_C6A = 0; + gUnknown_02039D08->field_C6B = boxId; + gUnknown_02039D08->field_C69 = direction; + gUnknown_02039D08->field_C60 = 32; + gUnknown_02039D08->field_C64 = -(6 * direction); + gUnknown_02039D08->field_C66 = 0; + SetBoxSpeciesAndPersonalities(boxId); + if (direction > 0) + gUnknown_02039D08->field_C68 = 0; + else + gUnknown_02039D08->field_C68 = IN_BOX_ROWS - 1; + + gUnknown_02039D08->field_C62 = (24 * gUnknown_02039D08->field_C68) + 100; + sub_80CB1F0(gUnknown_02039D08->field_C64); +} + +bool8 sub_80CB584(void) +{ + if (gUnknown_02039D08->field_C60 != 0) + gUnknown_02039D08->field_C60--; + + switch (gUnknown_02039D08->field_C6A) + { + case 0: + gUnknown_02039D08->field_C62 += gUnknown_02039D08->field_C64; + if (gUnknown_02039D08->field_C62 <= 64 || gUnknown_02039D08->field_C62 >= 252) + { + DestroyAllIconsInRow(gUnknown_02039D08->field_C68); + gUnknown_02039D08->field_C62 += gUnknown_02039D08->field_C69 * 24; + gUnknown_02039D08->field_C6A++; + } + break; + case 1: + gUnknown_02039D08->field_C62 += gUnknown_02039D08->field_C64; + gUnknown_02039D08->field_C66 += sub_80CB2F8(gUnknown_02039D08->field_C68, gUnknown_02039D08->field_C60, gUnknown_02039D08->field_C64); + if ((gUnknown_02039D08->field_C69 > 0 && gUnknown_02039D08->field_C68 == IN_BOX_ROWS - 1) + || (gUnknown_02039D08->field_C69 < 0 && gUnknown_02039D08->field_C68 == 0)) + { + gUnknown_02039D08->field_C6A++; + } + else + { + gUnknown_02039D08->field_C68 += gUnknown_02039D08->field_C69; + gUnknown_02039D08->field_C6A = 0; + } + break; + case 2: + if (gUnknown_02039D08->field_C66 == 0) + { + gUnknown_02039D08->field_C60++; + return FALSE; + } + break; + default: + return FALSE; + } + + return TRUE; +} + +void SetBoxSpeciesAndPersonalities(u8 boxId) +{ + s32 i, j, boxPosition; + + boxPosition = 0; + for (i = 0; i < IN_BOX_COLUMS; i++) + { + for (j = 0; j < IN_BOX_ROWS; j++) + { + gUnknown_02039D08->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + if (gUnknown_02039D08->boxSpecies[boxPosition] != SPECIES_NONE) + gUnknown_02039D08->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); + boxPosition++; + } + } + + gUnknown_02039D08->field_C5C = boxId; +} + +void DestroyBoxMonIconAtPosition(u8 boxPosition) +{ + if (gUnknown_02039D08->boxMonsSprites[boxPosition] != NULL) + { + DestroyBoxMonIcon(gUnknown_02039D08->boxMonsSprites[boxPosition]); + gUnknown_02039D08->boxMonsSprites[boxPosition] = NULL; + } +} + +void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode) +{ + if (gUnknown_02039D08->boxMonsSprites[boxPosition] != NULL) + { + gUnknown_02039D08->boxMonsSprites[boxPosition]->oam.objMode = objMode; + } +} + +void CreatePartyMonsSprites(bool8 arg0) +{ + u16 i, count; + u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2); + u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY); + + gUnknown_02039D08->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); + count = 1; + for (i = 1; i < PARTY_SIZE; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + { + personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + gUnknown_02039D08->partySprites[i] = CreateMonIconSprite(species, personality, 152, 8 * (3 * (i - 1)) + 16, 1, 12); + count++; + } + else + { + gUnknown_02039D08->partySprites[i] = NULL; + } + } + + if (!arg0) + { + for (i = 0; i < count; i++) + { + gUnknown_02039D08->partySprites[i]->pos1.y -= 160; + gUnknown_02039D08->partySprites[i]->invisible = TRUE; + } + } + + if (gUnknown_02039D08->boxOption == BOX_OPTION_MOVE_ITEMS) + { + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_02039D08->partySprites[i] != NULL && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == 0) + gUnknown_02039D08->partySprites[i]->oam.objMode = 1; + } + } +} + +void sub_80CB950(void) +{ + u16 i, count; + + gUnknown_02039D08->field_C5E = 0; + for (i = 0, count = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_02039D08->partySprites[i] != NULL) + { + if (i != count) + { + sub_80CB9D0(gUnknown_02039D08->partySprites[i], count); + gUnknown_02039D08->partySprites[i] = NULL; + gUnknown_02039D08->field_C5E++; + } + count++; + } + } +} + +u8 sub_80CB9BC(void) +{ + return gUnknown_02039D08->field_C5E; +} + +void sub_80CB9D0(struct Sprite *sprite, u16 partyId) +{ + s16 x, y; + + sprite->data[1] = partyId; + if (partyId == 0) + x = 104, y = 64; + else + x = 152, y = 8 * (3 * (partyId - 1)) + 16; + + sprite->data[2] = (u16)(sprite->pos1.x) * 8; + sprite->data[3] = (u16)(sprite->pos1.y) * 8; + sprite->data[4] = ((x * 8) - sprite->data[2]) / 8; + sprite->data[5] = ((y * 8) - sprite->data[3]) / 8; + sprite->data[6] = 8; + sprite->callback = sub_80CBA3C; +} + +void sub_80CBA3C(struct Sprite *sprite) +{ + if (sprite->data[6] != 0) + { + s16 x = sprite->data[2] += sprite->data[4]; + s16 y = sprite->data[3] += sprite->data[5]; + sprite->pos1.x = x / 8u; + sprite->pos1.y = y / 8u; + sprite->data[6]--; + } + else + { + if (sprite->data[1] == 0) + { + sprite->pos1.x = 104; + sprite->pos1.y = 64; + } + else + { + sprite->pos1.x = 152; + sprite->pos1.y = 8 * (3 * (sprite->data[1] - 1)) + 16; + } + sprite->callback = SpriteCallbackDummy; + gUnknown_02039D08->partySprites[sprite->data[1]] = sprite; + gUnknown_02039D08->field_C5E--; + } +} + +void sub_80CBAC4(void) +{ + if (gUnknown_02039D08->field_A6C != NULL) + { + DestroyBoxMonIcon(gUnknown_02039D08->field_A6C); + gUnknown_02039D08->field_A6C = NULL; + } +} + +void sub_80CBAF0(s16 yDelta) +{ + u16 i, posY; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_02039D08->partySprites[i] != NULL) + { + gUnknown_02039D08->partySprites[i]->pos1.y += yDelta; + posY = gUnknown_02039D08->partySprites[i]->pos1.y + gUnknown_02039D08->partySprites[i]->pos2.y + gUnknown_02039D08->partySprites[i]->centerToCornerVecY; + posY += 16; + if (posY > 192) + gUnknown_02039D08->partySprites[i]->invisible = TRUE; + else + gUnknown_02039D08->partySprites[i]->invisible = FALSE; + } + } +} + +void DestroyPartyMonIcon(u8 partyId) +{ + if (gUnknown_02039D08->partySprites[partyId] != NULL) + { + DestroyBoxMonIcon(gUnknown_02039D08->partySprites[partyId]); + gUnknown_02039D08->partySprites[partyId] = NULL; + } +} + +void DestroyAllPartyMonIcons(void) +{ + u16 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_02039D08->partySprites[i] != NULL) + { + DestroyBoxMonIcon(gUnknown_02039D08->partySprites[i]); + gUnknown_02039D08->partySprites[i] = NULL; + } + } +} + +void SetPartyMonIconObjMode(u8 partyId, u8 objMode) +{ + if (gUnknown_02039D08->partySprites[partyId] != NULL) + { + gUnknown_02039D08->partySprites[partyId]->oam.objMode = objMode; + } +} + +void sub_80CBC14(u8 mode, u8 id) +{ + if (mode == MODE_PARTY) + { + gUnknown_02039D08->field_A6C = gUnknown_02039D08->partySprites[id]; + gUnknown_02039D08->partySprites[id] = NULL; + } + else if (mode == MODE_BOX) + { + gUnknown_02039D08->field_A6C = gUnknown_02039D08->boxMonsSprites[id]; + gUnknown_02039D08->boxMonsSprites[id] = NULL; + } + else + { + return; + } + + gUnknown_02039D08->field_A6C->callback = sub_80CC100; + gUnknown_02039D08->field_A6C->oam.priority = sub_80CAFAC(); + gUnknown_02039D08->field_A6C->subpriority = 7; +} + +void sub_80CBCAC(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) // party mon + { + gUnknown_02039D08->partySprites[position] = gUnknown_02039D08->field_A6C; + gUnknown_02039D08->partySprites[position]->oam.priority = 1; + gUnknown_02039D08->partySprites[position]->subpriority = 12; + } + else + { + gUnknown_02039D08->boxMonsSprites[position] = gUnknown_02039D08->field_A6C; + gUnknown_02039D08->boxMonsSprites[position]->oam.priority = 2; + gUnknown_02039D08->boxMonsSprites[position]->subpriority = 19 - (position % IN_BOX_ROWS); + } + gUnknown_02039D08->field_A6C->callback = SpriteCallbackDummy; + gUnknown_02039D08->field_A6C = NULL; +} + +void sub_80CBD5C(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) // party mon + gUnknown_02039D08->field_B00 = &gUnknown_02039D08->partySprites[position]; + else + gUnknown_02039D08->field_B00 = &gUnknown_02039D08->boxMonsSprites[position]; + + gUnknown_02039D08->field_A6C->callback = SpriteCallbackDummy; + gUnknown_02039D08->field_C5D = 0; +} + +bool8 sub_80CBDC4(void) +{ + if (gUnknown_02039D08->field_C5D == 16) + return FALSE; + + gUnknown_02039D08->field_C5D++; + if (gUnknown_02039D08->field_C5D & 1) + { + (*gUnknown_02039D08->field_B00)->pos1.y--; + gUnknown_02039D08->field_A6C->pos1.y++; + } + + (*gUnknown_02039D08->field_B00)->pos2.x = gSineTable[gUnknown_02039D08->field_C5D * 8] / 16; + gUnknown_02039D08->field_A6C->pos2.x = -(gSineTable[gUnknown_02039D08->field_C5D * 8] / 16); + if (gUnknown_02039D08->field_C5D == 8) + { + gUnknown_02039D08->field_A6C->oam.priority = (*gUnknown_02039D08->field_B00)->oam.priority; + gUnknown_02039D08->field_A6C->subpriority = (*gUnknown_02039D08->field_B00)->subpriority; + (*gUnknown_02039D08->field_B00)->oam.priority = sub_80CAFAC(); + (*gUnknown_02039D08->field_B00)->subpriority = 7; + } + + if (gUnknown_02039D08->field_C5D == 16) + { + struct Sprite *sprite = gUnknown_02039D08->field_A6C; + gUnknown_02039D08->field_A6C = (*gUnknown_02039D08->field_B00); + *gUnknown_02039D08->field_B00 = sprite; + + gUnknown_02039D08->field_A6C->callback = sub_80CC100; + (*gUnknown_02039D08->field_B00)->callback = SpriteCallbackDummy; + } + + return TRUE; +} + +void sub_80CBF14(u8 mode, u8 position) +{ + switch (mode) + { + case MODE_PARTY: + gUnknown_02039D08->field_B04 = &gUnknown_02039D08->partySprites[position]; + break; + case MODE_BOX: + gUnknown_02039D08->field_B04 = &gUnknown_02039D08->boxMonsSprites[position]; + break; + case MODE_2: + gUnknown_02039D08->field_B04 = &gUnknown_02039D08->field_A6C; + break; + default: + return; + } + + if (*gUnknown_02039D08->field_B04 != NULL) + { + InitSpriteAffineAnim(*gUnknown_02039D08->field_B04); + (*gUnknown_02039D08->field_B04)->oam.affineMode = 1; + (*gUnknown_02039D08->field_B04)->affineAnims = gSpriteAffineAnimTable_857291C; + StartSpriteAffineAnim(*gUnknown_02039D08->field_B04, 0); + } +} + +bool8 sub_80CBFD8(void) +{ + if (*gUnknown_02039D08->field_B04 == NULL || (*gUnknown_02039D08->field_B04)->invisible) + return FALSE; + + if ((*gUnknown_02039D08->field_B04)->affineAnimEnded) + (*gUnknown_02039D08->field_B04)->invisible = TRUE; + + return TRUE; +} + +void sub_80CC020(void) +{ + if (*gUnknown_02039D08->field_B04 != NULL) + { + FreeOamMatrix((*gUnknown_02039D08->field_B04)->oam.matrixNum); + DestroyBoxMonIcon(*gUnknown_02039D08->field_B04); + *gUnknown_02039D08->field_B04 = NULL; + } +} + +void sub_80CC064(void) +{ + if (*gUnknown_02039D08->field_B04 != NULL) + { + (*gUnknown_02039D08->field_B04)->invisible = FALSE; + StartSpriteAffineAnim(*gUnknown_02039D08->field_B04, 1); + } +} + +bool8 sub_80CC0A0(void) +{ + if (gUnknown_02039D08->field_B04 == NULL) + return FALSE; + + if ((*gUnknown_02039D08->field_B04)->affineAnimEnded) + gUnknown_02039D08->field_B04 = NULL; + + return TRUE; +} + +void sub_80CC0D4(u8 priority) +{ + gUnknown_02039D08->field_A6C->oam.priority = priority; +} + +void sub_80CC100(struct Sprite *sprite) +{ + sprite->pos1.x = gUnknown_02039D08->field_CB4->pos1.x; + sprite->pos1.y = gUnknown_02039D08->field_CB4->pos1.y + gUnknown_02039D08->field_CB4->pos2.y + 4; +} + +u16 sub_80CC124(u16 species) +{ + u16 i, var; + + for (i = 0; i < 40; i++) + { + if (gUnknown_02039D08->field_B58[i] == species) + break; + } + + if (i == 40) + { + for (i = 0; i < 40; i++) + { + if (gUnknown_02039D08->field_B58[i] == 0) + break; + } + if (i == 40) + return 0xFFFF; + } + + gUnknown_02039D08->field_B58[i] = species; + gUnknown_02039D08->field_B08[i]++; + var = 16 * i; + CpuCopy32(GetMonIconTiles(species, TRUE), (void*)(OBJ_VRAM0) + var * 32, 0x200); + + return var; +} + +void sub_80CC1E0(u16 species) +{ + u16 i; + + for (i = 0; i < 40; i++) + { + if (gUnknown_02039D08->field_B58[i] == species) + { + if (--gUnknown_02039D08->field_B08[i] == 0) + gUnknown_02039D08->field_B58[i] = 0; + break; + } + } +} + +static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 oamPriority, u8 subpriority) +{ + u16 tileNum; + u8 spriteId; + struct SpriteTemplate tempalte = gUnknown_085728D4; + + species = GetIconSpecies(species, personality); + tempalte.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species]; + tileNum = sub_80CC124(species); + if (tileNum == 0xFFFF) + return NULL; + + spriteId = CreateSprite(&tempalte, x, y, subpriority); + if (spriteId == MAX_SPRITES) + { + sub_80CC1E0(species); + return NULL; + } + + gSprites[spriteId].oam.tileNum = tileNum; + gSprites[spriteId].oam.priority = oamPriority; + gSprites[spriteId].data[0] = species; + return &gSprites[spriteId]; +} + +void DestroyBoxMonIcon(struct Sprite *sprite) +{ + sub_80CC1E0(sprite->data[0]); + DestroySprite(sprite); +} + +void sub_80CC32C(u8 boxId) +{ + u8 taskId = CreateTask(sub_80CC370, 2); + + gTasks[taskId].data[2] = boxId; +} + +bool8 sub_80CC35C(void) +{ + return FuncIsActiveTask(sub_80CC370); +} + +void sub_80CC370(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gUnknown_02039D08->field_2D2 = 0; + gUnknown_02039D08->bg2_X = 0; + task->data[1] = RequestDma3Fill(0, gUnknown_02039D08->field_4AC4, 0x1000, 1); + break; + case 1: + if (CheckForSpaceForDma3Request(task->data[1]) == -1) + return; + + SetBgTilemapBuffer(2, gUnknown_02039D08->field_4AC4); + ShowBg(2); + break; + case 2: + LoadWallpaperGfx(task->data[2], 0); + break; + case 3: + if (!WaitForWallpaperGfxLoad()) + return; + + sub_80CCB50(task->data[2]); + sub_80CD02C(); + sub_80CB028(task->data[2]); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(27) | BGCNT_TXT512x256); + break; + case 4: + DestroyTask(taskId); + break; + default: + task->data[0] = 0; + return; + } + + task->data[0]++; +} + +void SetUpScrollToBox(u8 boxId) +{ + s8 direction = sub_80CC644(boxId); + + gUnknown_02039D08->field_2CE = (direction > 0) ? 6 : -6; + gUnknown_02039D08->field_2D3 = (direction > 0) ? 1 : 2; + gUnknown_02039D08->field_2D0 = 32; + gUnknown_02039D08->field_2D4 = boxId; + gUnknown_02039D08->field_2D6 = (direction <= 0) ? 5 : 0; + gUnknown_02039D08->field_2D8 = direction; + gUnknown_02039D08->field_2DA = (direction > 0) ? 264 : 56; + gUnknown_02039D08->field_2DC = (direction <= 0) ? 5 : 0; + gUnknown_02039D08->field_2DE = 0; + gUnknown_02039D08->field_2E0 = 2; + gUnknown_02039D08->field_A64 = boxId; + gUnknown_02039D08->field_A65 = direction; + gUnknown_02039D08->field_A63 = 0; +} + +bool8 ScrollToBox(void) +{ + bool8 var; + + switch (gUnknown_02039D08->field_A63) + { + case 0: + LoadWallpaperGfx(gUnknown_02039D08->field_A64, gUnknown_02039D08->field_A65); + gUnknown_02039D08->field_A63++; + case 1: + if (!WaitForWallpaperGfxLoad()) + return TRUE; + + sub_80CB4CC(gUnknown_02039D08->field_A64, gUnknown_02039D08->field_A65); + sub_80CCCFC(gUnknown_02039D08->field_A64, gUnknown_02039D08->field_A65); + sub_80CD0B8(gUnknown_02039D08->field_A65); + break; + case 2: + var = sub_80CB584(); + if (gUnknown_02039D08->field_2D0 != 0) + { + gUnknown_02039D08->bg2_X += gUnknown_02039D08->field_2CE; + if (--gUnknown_02039D08->field_2D0 != 0) + return TRUE; + sub_80CCEE0(); + sub_80CD158(); + } + return var; + } + + gUnknown_02039D08->field_A63++; + return TRUE; +} + +s8 sub_80CC644(u8 boxId) +{ + u8 i; + u8 currentBox = StorageGetCurrentBox(); + + for (i = 0; currentBox != boxId; i++) + { + currentBox++; + if (currentBox >= TOTAL_BOXES_COUNT) + currentBox = 0; + } + + return (i < TOTAL_BOXES_COUNT / 2) ? 1 : -1; +} + +void SetWallpaperForCurrentBox(u8 wallpaperId) +{ + u8 boxId = StorageGetCurrentBox(); + SetBoxWallpaper(boxId, wallpaperId); + gUnknown_02039D08->wallpaperChangeState = 0; +} + +bool8 DoWallpaperGfxChange(void) +{ + switch (gUnknown_02039D08->wallpaperChangeState) + { + case 0: + BeginNormalPaletteFade(gUnknown_02039D08->field_738, 1, 0, 16, RGB_WHITEALPHA); + gUnknown_02039D08->wallpaperChangeState++; + break; + case 1: + if (!UpdatePaletteFade()) + { + u8 curBox = StorageGetCurrentBox(); + LoadWallpaperGfx(curBox, 0); + gUnknown_02039D08->wallpaperChangeState++; + } + break; + case 2: + if (WaitForWallpaperGfxLoad() == TRUE) + { + sub_80CCF9C(); + BeginNormalPaletteFade(gUnknown_02039D08->field_738, 1, 16, 0, RGB_WHITEALPHA); + gUnknown_02039D08->wallpaperChangeState++; + } + break; + case 3: + if (!UpdatePaletteFade()) + gUnknown_02039D08->wallpaperChangeState++; + break; + case 4: + return FALSE; + } + + return TRUE; +} + +void LoadWallpaperGfx(u8 boxId, s8 direction) +{ + u8 wallpaperId; + const struct WallpaperTable *wallpaperGfx; + void *iconGfx; + u32 size1, size2; + + gUnknown_02039D08->field_6F9 = 0; + gUnknown_02039D08->field_6FA = boxId; + gUnknown_02039D08->field_6FB = direction; + if (gUnknown_02039D08->field_6FB != 0) + { + gUnknown_02039D08->field_2D2 = (gUnknown_02039D08->field_2D2 == 0); + sub_80CCAE0(gUnknown_02039D08->field_4AC4); + } + + wallpaperId = GetBoxWallpaper(gUnknown_02039D08->field_6FA); + if (wallpaperId != WALLPAPER_FRIENDS) + { + wallpaperGfx = &gWallpaperTable[wallpaperId]; + LZ77UnCompWram(wallpaperGfx->tileMap, gUnknown_02039D08->field_792); + sub_80CCA3C(gUnknown_02039D08->field_792, gUnknown_02039D08->field_6FB, gUnknown_02039D08->field_2D2); + + if (gUnknown_02039D08->field_6FB != 0) + LoadPalette(wallpaperGfx->palettes, (gUnknown_02039D08->field_2D2 * 32) + 0x40, 0x40); + else + CpuCopy16(wallpaperGfx->palettes, &gPlttBufferUnfaded[(gUnknown_02039D08->field_2D2 * 32) + 0x40], 0x40); + + gUnknown_02039D08->wallpaperTiles = malloc_and_decompress(wallpaperGfx->tiles, &size1); + LoadBgTiles(2, gUnknown_02039D08->wallpaperTiles, size1, gUnknown_02039D08->field_2D2 << 8); + } + else + { + wallpaperGfx = &gFriendsWallpaperTable[GetWaldaWallpaperPatternId()]; + LZ77UnCompWram(wallpaperGfx->tileMap, gUnknown_02039D08->field_792); + sub_80CCA3C(gUnknown_02039D08->field_792, gUnknown_02039D08->field_6FB, gUnknown_02039D08->field_2D2); + + CpuCopy16(wallpaperGfx->palettes, gUnknown_02039D08->field_792, 0x40); + CpuCopy16(GetWaldaWallpaperColorsPtr(), &gUnknown_02039D08->field_792[1], 4); + CpuCopy16(GetWaldaWallpaperColorsPtr(), &gUnknown_02039D08->field_792[17], 4); + + if (gUnknown_02039D08->field_6FB != 0) + LoadPalette(gUnknown_02039D08->field_792, (gUnknown_02039D08->field_2D2 * 32) + 0x40, 0x40); + else + CpuCopy16(gUnknown_02039D08->field_792, &gPlttBufferUnfaded[(gUnknown_02039D08->field_2D2 * 32) + 0x40], 0x40); + + gUnknown_02039D08->wallpaperTiles = malloc_and_decompress(wallpaperGfx->tiles, &size1); + iconGfx = malloc_and_decompress(gFriendsIcons[GetWaldaWallpaperIconId()], &size2); + CpuCopy32(iconGfx, gUnknown_02039D08->wallpaperTiles + 0x800, size2); + Free(iconGfx); + LoadBgTiles(2, gUnknown_02039D08->wallpaperTiles, size1, gUnknown_02039D08->field_2D2 << 8); + } + + CopyBgTilemapBufferToVram(2); +} + +bool32 WaitForWallpaperGfxLoad(void) +{ + if (IsDma3ManagerBusyWithBgCopy()) + return FALSE; + + if (gUnknown_02039D08->wallpaperTiles != NULL) + { + Free(gUnknown_02039D08->wallpaperTiles); + gUnknown_02039D08->wallpaperTiles = NULL; + } + return TRUE; +} + +void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2) +{ + s16 var = (arg2 * 2) + 3; + s16 x = ((gUnknown_02039D08->bg2_X / 8 + 10) + (direction * 24)) & 0x3F; + + CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, arg2 << 8, var); + + if (direction == 0) + return; + else if (direction > 0) + x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference + else + x -= 4; + + FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11); +} + +void sub_80CCAE0(void *arg0) +{ + u16 i; + u16 *dest = arg0; + s16 r3 = ((gUnknown_02039D08->bg2_X / 8) + 30) & 0x3F; + + if (r3 <= 31) + dest += r3 + 0x260; + else + dest += r3 + 0x640; + + for (i = 0; i < 0x2C; i++) + { + *dest++ = 0; + r3 = (r3 + 1) & 0x3F; + if (r3 == 0) + dest -= 0x420; + if (r3 == 0x20) + dest += 0x3e0; + } +} + +void sub_80CCB50(u8 boxId) +{ + u8 tagIndex; + s16 r6; + u16 i; + + struct SpriteSheet spriteSheet = {gUnknown_02039D08->field_2F8, 0x200, TAG_TILE_3}; + struct SpritePalette palettes[] = { + {gUnknown_02039D08->field_6FC, TAG_PAL_DAC9}, + {} + }; + + u16 wallpaperId = GetBoxWallpaper(boxId); + + gUnknown_02039D08->field_6FC[14] = gUnknown_08577574[wallpaperId][0]; + gUnknown_02039D08->field_6FC[15] = gUnknown_08577574[wallpaperId][1]; + LoadSpritePalettes(palettes); + gUnknown_02039D08->field_738 = 0x3f0; + + tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9); + gUnknown_02039D08->field_71C = 0x10e + 16 * tagIndex; + gUnknown_02039D08->field_738 |= 0x10000 << tagIndex; + + tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9); + gUnknown_02039D08->field_71E = 0x10e + 16 * tagIndex; + gUnknown_02039D08->field_738 |= 0x10000 << tagIndex; + + StringCopyPadded(gUnknown_02039D08->field_21B8, GetBoxNamePtr(boxId), 0, 8); + sub_80C6D80(gUnknown_02039D08->field_21B8, gUnknown_02039D08->field_2F8, 0, 0, 2); + LoadSpriteSheet(&spriteSheet); + r6 = sub_80CD00C(GetBoxNamePtr(boxId)); + + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_857B0A8, r6 + i * 32, 28, 24); + gUnknown_02039D08->field_720[i] = &gSprites[spriteId]; + StartSpriteAnim(gUnknown_02039D08->field_720[i], i); + } + gUnknown_02039D08->field_6F8 = 0; +} + +void sub_80CCCFC(u8 boxId, s8 direction) +{ + u16 r8; + s16 x, x2; + u16 i; + struct SpriteSheet spriteSheet = {gUnknown_02039D08->field_2F8, 0x200, TAG_TILE_3}; + struct SpriteTemplate template = gSpriteTemplate_857B0A8; + + gUnknown_02039D08->field_6F8 = (gUnknown_02039D08->field_6F8 == 0); + if (gUnknown_02039D08->field_6F8 == 0) + { + spriteSheet.tag = TAG_TILE_3; + r8 = gUnknown_02039D08->field_71C; + } + else + { + spriteSheet.tag = TAG_TILE_4; + r8 = gUnknown_02039D08->field_71C; + template.tileTag = 4; + template.paletteTag = TAG_PAL_DAC9; + } + + StringCopyPadded(gUnknown_02039D08->field_21B8, GetBoxNamePtr(boxId), 0, 8); + sub_80C6D80(gUnknown_02039D08->field_21B8, gUnknown_02039D08->field_2F8, 0, 0, 2); + LoadSpriteSheet(&spriteSheet); + LoadPalette(gUnknown_08577574[GetBoxWallpaper(boxId)], r8, 4); + x = sub_80CD00C(GetBoxNamePtr(boxId)); + x2 = x; + x2 += direction * 192; + + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&template, i * 32 + x2, 28, 24); + + gUnknown_02039D08->field_728[i] = &gSprites[spriteId]; + gUnknown_02039D08->field_728[i]->data[0] = (-direction) * 6; + gUnknown_02039D08->field_728[i]->data[1] = i * 32 + x; + gUnknown_02039D08->field_728[i]->data[2] = 0; + gUnknown_02039D08->field_728[i]->callback = sub_80CCF30; + StartSpriteAnim(gUnknown_02039D08->field_728[i], i); + + gUnknown_02039D08->field_720[i]->data[0] = (-direction) * 6; + gUnknown_02039D08->field_720[i]->data[1] = 1; + gUnknown_02039D08->field_720[i]->callback = sub_80CCF64; + } +} + +void sub_80CCEE0(void) +{ + if (gUnknown_02039D08->field_6F8 == 0) + FreeSpriteTilesByTag(TAG_TILE_4); + else + FreeSpriteTilesByTag(TAG_TILE_3); + + gUnknown_02039D08->field_720[0] = gUnknown_02039D08->field_728[0]; + gUnknown_02039D08->field_720[1] = gUnknown_02039D08->field_728[1]; +} + +void sub_80CCF30(struct Sprite *sprite) +{ + if (sprite->data[2] != 0) + sprite->data[2]--; + else if ((sprite->pos1.x += sprite->data[0]) == sprite->data[1]) + sprite->callback = SpriteCallbackDummy; +} + +void sub_80CCF64(struct Sprite *sprite) +{ + if (sprite->data[1] != 0) + { + sprite->data[1]--; + } + else + { + sprite->pos1.x += sprite->data[0]; + sprite->data[2] = sprite->pos1.x + sprite->pos2.x; + if (sprite->data[2] < 0x40 || sprite->data[2] > 0x100) + DestroySprite(sprite); + } +} + +void sub_80CCF9C(void) +{ + u8 boxId = StorageGetCurrentBox(); + u8 wallpaperId = GetBoxWallpaper(boxId); + if (gUnknown_02039D08->field_6F8 == 0) + CpuCopy16(gUnknown_08577574[wallpaperId], gPlttBufferUnfaded + gUnknown_02039D08->field_71C, 4); + else + CpuCopy16(gUnknown_08577574[wallpaperId], gPlttBufferUnfaded + gUnknown_02039D08->field_71E, 4); +} + +s16 sub_80CD00C(const u8 *string) +{ + return 0xB0 - GetStringWidth(1, string, 0) / 2; +} + +void sub_80CD02C(void) +{ + u16 i; + + LoadSpriteSheet(&gUnknown_0857B080); + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gUnknown_0857B0E0, 0x5c + i * 0x88, 28, 22); + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + StartSpriteAnim(sprite, i); + sprite->data[3] = (i == 0) ? -1 : 1; + gUnknown_02039D08->field_730[i] = sprite; + } + } + if (IsCursorOnBox()) + sub_80CD1A8(TRUE); +} + +void sub_80CD0B8(s8 direction) +{ + u16 i; + + for (i = 0; i < 2; i++) + { + gUnknown_02039D08->field_730[i]->pos2.x = 0; + gUnknown_02039D08->field_730[i]->data[0] = 2; + } + if (direction < 0) + { + gUnknown_02039D08->field_730[0]->data[1] = 29; + gUnknown_02039D08->field_730[1]->data[1] = 5; + gUnknown_02039D08->field_730[0]->data[2] = 0x48; + gUnknown_02039D08->field_730[1]->data[2] = 0x48; + } + else + { + gUnknown_02039D08->field_730[0]->data[1] = 5; + gUnknown_02039D08->field_730[1]->data[1] = 29; + gUnknown_02039D08->field_730[0]->data[2] = 0xF8; + gUnknown_02039D08->field_730[1]->data[2] = 0xF8; + } + gUnknown_02039D08->field_730[0]->data[7] = 0; + gUnknown_02039D08->field_730[1]->data[7] = 1; +} + +void sub_80CD158(void) +{ + u16 i; + + for (i = 0; i < 2; i++) + { + gUnknown_02039D08->field_730[i]->pos1.x = 0x88 * i + 0x5c; + gUnknown_02039D08->field_730[i]->pos2.x = 0; + gUnknown_02039D08->field_730[i]->invisible = FALSE; + } + sub_80CD1A8(TRUE); +} + +void sub_80CD1A8(bool8 a0) +{ + u16 i; + + if (a0) + { + for (i = 0; i < 2; i++) + { + gUnknown_02039D08->field_730[i]->data[0] = 1; + gUnknown_02039D08->field_730[i]->data[1] = 0; + gUnknown_02039D08->field_730[i]->data[2] = 0; + gUnknown_02039D08->field_730[i]->data[4] = 0; + } + } + else + { + for (i = 0; i < 2; i++) + { + gUnknown_02039D08->field_730[i]->data[0] = 0; + } + } +} + +void sub_80CD210(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.x = 0; + break; + case 1: + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->pos2.x += sprite->data[3]; + if (++sprite->data[2] > 5) + { + sprite->data[2] = 0; + sprite->pos2.x = 0; + } + } + break; + case 2: + sprite->data[0] = 3; + break; + case 3: + sprite->pos1.x -= gUnknown_02039D08->field_2CE; + if (sprite->pos1.x < 0x49 || sprite->pos1.x > 0xf7) + sprite->invisible = TRUE; + if (--sprite->data[1] == 0) + { + sprite->pos1.x = sprite->data[2]; + sprite->invisible = FALSE; + sprite->data[0] = 4; + } + break; + case 4: + sprite->pos1.x -= gUnknown_02039D08->field_2CE; + break; + } +} + +struct Sprite *sub_80CD2E8(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority) +{ + u8 spriteId = CreateSprite(&gUnknown_0857B0E0, x, y, subpriority); + if (spriteId == MAX_SPRITES) + return NULL; + + animId %= 2; + StartSpriteAnim(&gSprites[spriteId], animId); + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].callback = SpriteCallbackDummy; + return &gSprites[spriteId]; +} + +void sub_80CD36C(void) +{ + if (gUnknown_02039D08->boxOption != BOX_OPTION_DEPOSIT) + sBoxCursorArea = CURSOR_AREA_IN_BOX; + else + sBoxCursorArea = CURSOR_AREA_IN_PARTY; + + sBoxCursorPosition = 0; + sIsMonBeingMoved = FALSE; + sMovingMonOrigBoxId = 0; + sMovingMonOrigBoxPos = 0; + sCanOnlyMove = FALSE; + sub_80CDC0C(); + sub_80CFC14(); + gUnknown_02039D08->field_CD6 = 1; + gUnknown_02039D08->field_21FF = 0; + sub_80CEB40(); +} + +void sub_80CD3EC(void) +{ + sub_80CFC14(); + sub_80CEBDC(); + gUnknown_02039D08->field_CD6 = 1; + gUnknown_02039D08->field_21FF = 0; + if (sIsMonBeingMoved) + { + gUnknown_02039D08->field_20A4 = gUnknown_02039D14; + sub_80CAFC4(); + } +} + +void sub_80CD444(u8 a0, u8 a1, u16 *a2, u16 *a3) +{ + switch (a0) + { + case 0: + *a2 = (a1 % 6) * 24 + 100; + *a3 = (a1 / 6) * 24 + 32; + break; + case 1: + if (a1 == 0) + { + *a2 = 0x68; + *a3 = 0x34; + } + else if (a1 == 6) + { + *a2 = 0x98; + *a3 = 0x84; + } + else + { + *a2 = 0x98; + *a3 = (a1 - 1) * 24 + 4; + } + break; + case 2: + *a2 = 0xa2; + *a3 = 0x0c; + break; + case 3: + *a3 = sIsMonBeingMoved ? 8 : 14; + *a2 = a1 * 0x58 + 0x78; + break; + case 4: + *a2 = 0xa0; + *a3 = 0x60; + break; + } +} + +u16 sub_80CD504(void) +{ + switch (sBoxCursorArea) + { + case CURSOR_AREA_IN_PARTY: + return GetMonData(&gPlayerParty[sBoxCursorPosition], MON_DATA_SPECIES); + case CURSOR_AREA_IN_BOX: + return GetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_SPECIES); + default: + return SPECIES_NONE; + } +} + +bool8 sub_80CD554(void) +{ + s16 tmp; + + if (gUnknown_02039D08->field_CD0 == 0) + { + if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) + return FALSE; + else + return sub_80D1218(); + } + else if (--gUnknown_02039D08->field_CD0 != 0) + { + gUnknown_02039D08->field_CBC += gUnknown_02039D08->field_CC4; + gUnknown_02039D08->field_CC0 += gUnknown_02039D08->field_CC8; + gUnknown_02039D08->field_CB4->pos1.x = gUnknown_02039D08->field_CBC >> 8; + gUnknown_02039D08->field_CB4->pos1.y = gUnknown_02039D08->field_CC0 >> 8; + if (gUnknown_02039D08->field_CB4->pos1.x > 0x100) + { + tmp = gUnknown_02039D08->field_CB4->pos1.x - 0x100; + gUnknown_02039D08->field_CB4->pos1.x = tmp + 0x40; + } + if (gUnknown_02039D08->field_CB4->pos1.x < 0x40) + { + tmp = 0x40 - gUnknown_02039D08->field_CB4->pos1.x; + gUnknown_02039D08->field_CB4->pos1.x = 0x100 - tmp; + } + if (gUnknown_02039D08->field_CB4->pos1.y > 0xb0) + { + tmp = gUnknown_02039D08->field_CB4->pos1.y - 0xb0; + gUnknown_02039D08->field_CB4->pos1.y = tmp - 0x10; + } + if (gUnknown_02039D08->field_CB4->pos1.y < -0x10) + { + tmp = -0x10 - gUnknown_02039D08->field_CB4->pos1.y; + gUnknown_02039D08->field_CB4->pos1.y = 0xb0 - tmp; + } + if (gUnknown_02039D08->field_CD7 && --gUnknown_02039D08->field_CD7 == 0) + gUnknown_02039D08->field_CB4->vFlip = (gUnknown_02039D08->field_CB4->vFlip == FALSE); + } + else + { + gUnknown_02039D08->field_CB4->pos1.x = gUnknown_02039D08->field_CCC; + gUnknown_02039D08->field_CB4->pos1.y = gUnknown_02039D08->field_CCE; + sub_80CDA68(); + } + + return TRUE; +} + +void sub_80CD6AC(u8 a0, u8 a1) +{ + u16 x, y; + + sub_80CD444(a0, a1, &x, &y); + gUnknown_02039D08->field_CD4 = a0; + gUnknown_02039D08->field_CD5 = a1; + gUnknown_02039D08->field_CCC = x; + gUnknown_02039D08->field_CCE = y; +} + +void sub_80CD70C(void) +{ + int r7, r0; + + if (gUnknown_02039D08->field_CD2 != 0 || gUnknown_02039D08->field_CD3 != 0) + gUnknown_02039D08->field_CD0 = 12; + else + gUnknown_02039D08->field_CD0 = 6; + + if (gUnknown_02039D08->field_CD7) + gUnknown_02039D08->field_CD7 = gUnknown_02039D08->field_CD0 >> 1; + + switch (gUnknown_02039D08->field_CD2) + { + default: + r7 = gUnknown_02039D08->field_CCE - gUnknown_02039D08->field_CB4->pos1.y; + break; + case -1: + r7 = gUnknown_02039D08->field_CCE - 0xc0 - gUnknown_02039D08->field_CB4->pos1.y; + break; + case 1: + r7 = gUnknown_02039D08->field_CCE + 0xc0 - gUnknown_02039D08->field_CB4->pos1.y; + break; + } + + switch (gUnknown_02039D08->field_CD3) + { + default: + r0 = gUnknown_02039D08->field_CCC - gUnknown_02039D08->field_CB4->pos1.x; + break; + case -1: + r0 = gUnknown_02039D08->field_CCC - 0xc0 - gUnknown_02039D08->field_CB4->pos1.x; + break; + case 1: + r0 = gUnknown_02039D08->field_CCC + 0xc0 - gUnknown_02039D08->field_CB4->pos1.x; + break; + } + + r7 <<= 8; + r0 <<= 8; + gUnknown_02039D08->field_CC4 = r0 / gUnknown_02039D08->field_CD0; + gUnknown_02039D08->field_CC8 = r7 / gUnknown_02039D08->field_CD0; + gUnknown_02039D08->field_CBC = gUnknown_02039D08->field_CB4->pos1.x << 8; + gUnknown_02039D08->field_CC0 = gUnknown_02039D08->field_CB4->pos1.y << 8; +} + +void sub_80CD894(u8 a0, u8 a1) +{ + sub_80CD6AC(a0, a1); + sub_80CD70C(); + if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) + { + if (gUnknown_02039D08->field_21FF == 0 && !sIsMonBeingMoved) + StartSpriteAnim(gUnknown_02039D08->field_CB4, 1); + } + else + { + if (!sub_80D127C()) + StartSpriteAnim(gUnknown_02039D08->field_CB4, 1); + } + + if (gUnknown_02039D08->boxOption == BOX_OPTION_MOVE_ITEMS) + { + if (sBoxCursorArea == CURSOR_AREA_IN_BOX) + sub_80D0E50(0, sBoxCursorPosition); + else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY) + sub_80D0E50(1, sBoxCursorPosition); + + if (a0 == 0) + sub_80D0D8C(0, a1); + else if (a0 == 1) + sub_80D0D8C(1, a1); + } + + if (a0 == 1 && sBoxCursorArea != CURSOR_AREA_IN_PARTY) + { + gUnknown_02039D08->field_CD6 = a0; + gUnknown_02039D08->field_CB8->invisible = TRUE; + } + + switch (a0) + { + case 1 ... 3: + gUnknown_02039D08->field_CB4->oam.priority = 1; + gUnknown_02039D08->field_CB8->invisible = TRUE; + gUnknown_02039D08->field_CB8->oam.priority = 1; + break; + case 0: + if (gUnknown_02039D08->field_21FF != 0) + { + gUnknown_02039D08->field_CB4->oam.priority = 0; + gUnknown_02039D08->field_CB8->invisible = TRUE; + } + else + { + gUnknown_02039D08->field_CB4->oam.priority = 2; + if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved) + sub_80CC0D4(2); + } + break; + } +} + +void sub_80CDA68(void) +{ + sBoxCursorArea = gUnknown_02039D08->field_CD4; + sBoxCursorPosition = gUnknown_02039D08->field_CD5; + if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) + { + if (gUnknown_02039D08->field_21FF == 0 && !sIsMonBeingMoved) + StartSpriteAnim(gUnknown_02039D08->field_CB4, 0); + } + else + { + if (!sub_80D127C()) + StartSpriteAnim(gUnknown_02039D08->field_CB4, 0); + } + + sub_80CEB40(); + switch (sBoxCursorArea) + { + case CURSOR_AREA_BUTTONS: + sub_80CC0D4(1); + break; + case CURSOR_AREA_BOX: + sub_80CD1A8(TRUE); + break; + case CURSOR_AREA_IN_PARTY: + gUnknown_02039D08->field_CB8->subpriority = 13; + sub_80CC0D4(1); + break; + case CURSOR_AREA_IN_BOX: + if (gUnknown_02039D08->field_21FF == 0) + { + gUnknown_02039D08->field_CB4->oam.priority = 1; + gUnknown_02039D08->field_CB8->oam.priority = 2; + gUnknown_02039D08->field_CB8->subpriority = 21; + gUnknown_02039D08->field_CB8->invisible = FALSE; + sub_80CC0D4(2); + } + break; + } +} + +void sub_80CDBA0(void) +{ + u8 partyCount; + + if (!sIsMonBeingMoved) + { + partyCount = 0; + } + else + { + partyCount = CalculatePlayerPartyCount(); + if (partyCount >= PARTY_SIZE) + partyCount = PARTY_SIZE - 1; + } + if (gUnknown_02039D08->field_CB4->vFlip) + gUnknown_02039D08->field_CD7 = 1; + sub_80CD894(1, partyCount); +} + +void sub_80CDBF8(u8 a0) +{ + sub_80CD894(0, a0); +} + +void sub_80CDC0C(void) +{ + gUnknown_02039D7E = 0; +} + +void sub_80CDC18(void) +{ + gUnknown_02039D7E = sBoxCursorPosition; +} + +u8 sub_80CDC2C(void) +{ + return gUnknown_02039D7E; +} + +void InitMonPlaceChange(u8 a0) +{ + gUnknown_02039D08->monPlaceChangeFunc = gUnknown_0857B998[a0]; + gUnknown_02039D08->monPlaceChangeState = 0; +} + +void sub_80CDC64(bool8 arg0) +{ + if (!arg0) + gUnknown_02039D08->monPlaceChangeFunc = sub_80CDEB4; + else + gUnknown_02039D08->monPlaceChangeFunc = sub_80CDEC4; + + gUnknown_02039D08->monPlaceChangeState = 0; +} + +bool8 DoMonPlaceChange(void) +{ + return gUnknown_02039D08->monPlaceChangeFunc(); +} + +bool8 MonPlaceChange_Move(void) +{ + switch (gUnknown_02039D08->monPlaceChangeState) + { + case 0: + if (sIsMonBeingMoved) + return FALSE; + StartSpriteAnim(gUnknown_02039D08->field_CB4, 2); + gUnknown_02039D08->monPlaceChangeState++; + break; + case 1: + if (!sub_80CDED4()) + { + StartSpriteAnim(gUnknown_02039D08->field_CB4, 3); + MoveMon(); + gUnknown_02039D08->monPlaceChangeState++; + } + break; + case 2: + if (!sub_80CDF08()) + gUnknown_02039D08->monPlaceChangeState++; + break; + case 3: + return FALSE; + } + + return TRUE; +} + +bool8 MonPlaceChange_Place(void) +{ + switch (gUnknown_02039D08->monPlaceChangeState) + { + case 0: + if (!sub_80CDED4()) + { + StartSpriteAnim(gUnknown_02039D08->field_CB4, 2); + PlaceMon(); + gUnknown_02039D08->monPlaceChangeState++; + } + break; + case 1: + if (!sub_80CDF08()) + { + StartSpriteAnim(gUnknown_02039D08->field_CB4, 0); + gUnknown_02039D08->monPlaceChangeState++; + } + break; + case 2: + return FALSE; + } + + return TRUE; +} + +bool8 MonPlaceChange_Shift(void) +{ + switch (gUnknown_02039D08->monPlaceChangeState) + { + case 0: + switch (sBoxCursorArea) + { + case CURSOR_AREA_IN_PARTY: + gUnknown_02039D08->field_D91 = TOTAL_BOXES_COUNT; + break; + case CURSOR_AREA_IN_BOX: + gUnknown_02039D08->field_D91 = StorageGetCurrentBox(); + break; + default: + return FALSE; + } + StartSpriteAnim(gUnknown_02039D08->field_CB4, 2); + sub_80CBD5C(gUnknown_02039D08->field_D91, sBoxCursorPosition); + gUnknown_02039D08->monPlaceChangeState++; + break; + case 1: + if (!sub_80CBDC4()) + { + StartSpriteAnim(gUnknown_02039D08->field_CB4, 3); + SetShiftedMonData(gUnknown_02039D08->field_D91, sBoxCursorPosition); + gUnknown_02039D08->monPlaceChangeState++; + } + break; + case 2: + return FALSE; + } + + return TRUE; +} + +bool8 sub_80CDEB4(void) +{ + return sub_80CDED4(); +} + +bool8 sub_80CDEC4(void) +{ + return sub_80CDF08(); +} + +bool8 sub_80CDED4(void) +{ + switch (gUnknown_02039D08->field_CB4->pos2.y) + { + default: + gUnknown_02039D08->field_CB4->pos2.y++; + break; + case 0: + gUnknown_02039D08->field_CB4->pos2.y++; + break; + case 8: + return FALSE; + } + + return TRUE; +} + +bool8 sub_80CDF08(void) +{ + switch (gUnknown_02039D08->field_CB4->pos2.y) + { + case 0: + return FALSE; + default: + gUnknown_02039D08->field_CB4->pos2.y--; + break; + } + + return TRUE; +} + +void MoveMon(void) +{ + switch (sBoxCursorArea) + { + case CURSOR_AREA_IN_PARTY: + SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition); + sub_80CBC14(MODE_PARTY, sBoxCursorPosition); + break; + case CURSOR_AREA_IN_BOX: + if (gUnknown_02039D08->field_21FF == 0) + { + SetMovedMonData(StorageGetCurrentBox(), sBoxCursorPosition); + sub_80CBC14(MODE_BOX, sBoxCursorPosition); + } + break; + default: + return; + } + + sIsMonBeingMoved = TRUE; +} + +void PlaceMon(void) +{ + u8 boxId; + + switch (sBoxCursorArea) + { + case CURSOR_AREA_IN_PARTY: + SetPlacedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition); + sub_80CBCAC(TOTAL_BOXES_COUNT, sBoxCursorPosition); + break; + case CURSOR_AREA_IN_BOX: + boxId = StorageGetCurrentBox(); + SetPlacedMonData(boxId, sBoxCursorPosition); + sub_80CBCAC(boxId, sBoxCursorPosition); + break; + default: + return; + } + + sIsMonBeingMoved = FALSE; +} + +void sub_80CE00C(void) +{ + sub_80CEB40(); +} + +void SetMovedMonData(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) + gUnknown_02039D08->field_20A4 = gPlayerParty[sBoxCursorPosition]; + else + BoxMonAtToMon(boxId, position, &gUnknown_02039D08->field_20A4); + + PurgeMonOrBoxMon(boxId, position); + sMovingMonOrigBoxId = boxId; + sMovingMonOrigBoxPos = position; +} + +void SetPlacedMonData(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) + { + gPlayerParty[position] = gUnknown_02039D08->field_20A4; + } + else + { + BoxMonRestorePP(&gUnknown_02039D08->field_20A4.box); + SetBoxMonAt(boxId, position, &gUnknown_02039D08->field_20A4.box); + } +} + +void PurgeMonOrBoxMon(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) + ZeroMonData(&gPlayerParty[position]); + else + ZeroBoxMonAt(boxId, position); +} + +void SetShiftedMonData(u8 boxId, u8 position) +{ + if (boxId == TOTAL_BOXES_COUNT) + gUnknown_02039D08->field_2108 = gPlayerParty[position]; + else + BoxMonAtToMon(boxId, position, &gUnknown_02039D08->field_2108); + + SetPlacedMonData(boxId, position); + gUnknown_02039D08->field_20A4 = gUnknown_02039D08->field_2108; + sub_80CEC00(&gUnknown_02039D08->field_20A4, 0); + sMovingMonOrigBoxId = boxId; + sMovingMonOrigBoxPos = position; +} + +bool8 TryStorePartyMonInBox(u8 boxId) +{ + s16 boxPosition = GetFirstFreeBoxSpot(boxId); + if (boxPosition == -1) + return FALSE; + + if (sIsMonBeingMoved) + { + SetPlacedMonData(boxId, boxPosition); + sub_80CBAC4(); + sIsMonBeingMoved = FALSE; + } + else + { + SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition); + SetPlacedMonData(boxId, boxPosition); + DestroyPartyMonIcon(sBoxCursorPosition); + } + + if (boxId == StorageGetCurrentBox()) + sub_80CB140(boxPosition); + + StartSpriteAnim(gUnknown_02039D08->field_CB4, 1); + return TRUE; +} + +void sub_80CE22C(void) +{ + StartSpriteAnim(gUnknown_02039D08->field_CB4, 0); + sub_80CEB40(); +} + +void sub_80CE250(void) +{ + u8 mode; + + if (sIsMonBeingMoved) + mode = MODE_2; + else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY) + mode = MODE_PARTY; + else + mode = MODE_BOX; + + sub_80CBF14(mode, sBoxCursorPosition); + StringCopy(gUnknown_02039D08->field_21E0, gUnknown_02039D08->field_CEE); +} + +bool8 sub_80CE2A8(void) +{ + if (!sub_80CBFD8()) + { + StartSpriteAnim(gUnknown_02039D08->field_CB4, 0); + return FALSE; + } + else + { + return TRUE; + } +} + +void sub_80CE2D8(void) +{ + u8 boxId; + + sub_80CC020(); + if (sIsMonBeingMoved) + { + sIsMonBeingMoved = FALSE; + } + else + { + if (sBoxCursorArea == CURSOR_AREA_IN_PARTY) + boxId = TOTAL_BOXES_COUNT; + else + boxId = StorageGetCurrentBox(); + + PurgeMonOrBoxMon(boxId, sBoxCursorPosition); + } + sub_80CEB40(); +} + +void sub_80CE324(void) +{ + if (sIsMonBeingMoved) + StartSpriteAnim(gUnknown_02039D08->field_CB4, 3); +} + +void sub_80CE350(u16 *moves) +{ + s32 i; + + for (i = 0; i < ARRAY_COUNT(gUnknown_0857B9A4); i++) + { + if (gUnknown_0857B9A4[i].mapGroup == MAP_GROUPS_COUNT + || (gUnknown_0857B9A4[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && gUnknown_0857B9A4[i].mapNum == gSaveBlock1Ptr->location.mapNum)) + { + *moves = gUnknown_0857B9A4[i].move; + moves++; + } + } + + *moves = MOVES_COUNT; +} + +void sub_80CE3A0(void) +{ + if (!AtLeastThreeUsableMons()) + { + gUnknown_02039D08->field_216D = 1; + gUnknown_02039D08->field_216C = 0; + return; + } + + if (sIsMonBeingMoved) + { + gUnknown_02039D08->field_2108 = gUnknown_02039D08->field_20A4; + gUnknown_02039D08->field_2170 = -1; + gUnknown_02039D08->field_2171 = -1; + } + else + { + if (sBoxCursorArea == CURSOR_AREA_IN_PARTY) + { + gUnknown_02039D08->field_2108 = gPlayerParty[sBoxCursorPosition]; + gUnknown_02039D08->field_2170 = TOTAL_BOXES_COUNT; + } + else + { + BoxMonAtToMon(StorageGetCurrentBox(), sBoxCursorPosition, &gUnknown_02039D08->field_2108); + gUnknown_02039D08->field_2170 = StorageGetCurrentBox(); + } + gUnknown_02039D08->field_2171 = sBoxCursorPosition; + } + + sub_80CE350(gUnknown_02039D08->field_2176); + gUnknown_02039D08->field_2174 = GetMonData(&gUnknown_02039D08->field_2108, MON_DATA_KNOWN_MOVES, gUnknown_02039D08->field_2176); + if (gUnknown_02039D08->field_2174 != 0) + { + gUnknown_02039D08->field_216D = 0; + } + else + { + gUnknown_02039D08->field_216D = 1; + gUnknown_02039D08->field_216C = 1; + } + + gUnknown_02039D08->field_2172 = 0; +} + +bool32 AtLeastThreeUsableMons(void) +{ + s32 i, j, count; + + count = (sIsMonBeingMoved != FALSE); + for (j = 0; j < PARTY_SIZE; j++) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_SANITY_HAS_SPECIES)) + count++; + } + + if (count >= 3) + return TRUE; + + for (i = 0; i < TOTAL_BOXES_COUNT; i++) + { + for (j = 0; j < IN_BOX_COUNT; j++) + { + if (CheckBoxedMonSanity(i, j)) + { + if (++count >= 3) + return TRUE; + } + } + } + + return FALSE; +} + +s8 sub_80CE580(void) +{ + u16 i; + u16 knownMoves; + + if (gUnknown_02039D08->field_216D) + return gUnknown_02039D08->field_216C; + + switch (gUnknown_02039D08->field_2172) + { + case 0: + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_02039D08->field_2170 != TOTAL_BOXES_COUNT || gUnknown_02039D08->field_2171 != i) + { + knownMoves = GetMonData(gPlayerParty + i, MON_DATA_KNOWN_MOVES, gUnknown_02039D08->field_2176); + gUnknown_02039D08->field_2174 &= ~(knownMoves); + } + } + if (gUnknown_02039D08->field_2174 == 0) + { + gUnknown_02039D08->field_216D = 1; + gUnknown_02039D08->field_216C = 1; + } + else + { + gUnknown_02039D08->field_216E = 0; + gUnknown_02039D08->field_216F = 0; + gUnknown_02039D08->field_2172++; + } + break; + case 1: + for (i = 0; i < IN_BOX_COUNT; i++) + { + knownMoves = GetAndCopyBoxMonDataAt(gUnknown_02039D08->field_216E, gUnknown_02039D08->field_216F, MON_DATA_KNOWN_MOVES, gUnknown_02039D08->field_2176); + if (knownMoves != 0 + && !(gUnknown_02039D08->field_2170 == gUnknown_02039D08->field_216E && gUnknown_02039D08->field_2171 == gUnknown_02039D08->field_216F)) + { + gUnknown_02039D08->field_2174 &= ~(knownMoves); + if (gUnknown_02039D08->field_2174 == 0) + { + gUnknown_02039D08->field_216D = 1; + gUnknown_02039D08->field_216C = 1; + break; + } + } + if (++gUnknown_02039D08->field_216F >= IN_BOX_COUNT) + { + gUnknown_02039D08->field_216F = 0; + if (++gUnknown_02039D08->field_216E >= TOTAL_BOXES_COUNT) + { + gUnknown_02039D08->field_216D = 1; + gUnknown_02039D08->field_216C = 0; + } + } + } + break; + } + + return -1; +} diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 48ba864f7..03a081af5 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1310,7 +1310,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *a) sum->altAbility = GetMonData(a, MON_DATA_ALT_ABILITY); sum->item = GetMonData(a, MON_DATA_HELD_ITEM); sum->pid = GetMonData(a, MON_DATA_PERSONALITY); - sum->sanity = GetMonData(a, MON_DATA_SANITY_BIT1); + sum->sanity = GetMonData(a, MON_DATA_SANITY_IS_BAD_EGG); if (sum->sanity) sum->isEgg = TRUE; diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 934972b7c..fe5e1089e 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -50,8 +50,8 @@ int GameClear(void) ribbonCounts[i].partyIndex = i; ribbonCounts[i].count = 0; - if (GetMonData(mon, MON_DATA_SANITY_BIT2) - && !GetMonData(mon, MON_DATA_SANITY_BIT3) + if (GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES) + && !GetMonData(mon, MON_DATA_SANITY_IS_EGG) && !GetMonData(mon, MON_DATA_CHAMPION_RIBBON)) { u8 val[1] = {TRUE}; diff --git a/src/text.c b/src/text.c index 07c15596e..39e412633 100644 --- a/src/text.c +++ b/src/text.c @@ -1858,7 +1858,7 @@ u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32) return NULL; } -u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) +s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) { bool8 isJapanese; int minGlyphWidth; @@ -1868,7 +1868,7 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) u32 lineWidth; const u8 *bufferPointer; int glyphWidth; - u32 width; + s32 width; isJapanese = 0; minGlyphWidth = 0; @@ -2028,7 +2028,8 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) if (lineWidth > width) return lineWidth; - return width; + else + return width; } u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 3a8adaf15..d21f2e1d7 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -4802,7 +4802,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) rand = Random() % range; // check ability for max level mon - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { u8 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE) @@ -4883,7 +4883,7 @@ static u8 PickWildMonNature(void) } } // check synchronize for a pokemon with the same ability - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3) + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE && Random() % 2 == 0) { @@ -4911,7 +4911,7 @@ static void CreateWildMon(u16 species, u8 level) } if (checkCuteCharm - && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3) + && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_CUTE_CHARM && Random() % 3 != 0) { @@ -5029,7 +5029,7 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) encounterRate = encounterRate * 80 / 100; ApplyFluteEncounterRateMod(&encounterRate); ApplyCleanseTagEncounterRateMod(&encounterRate); - if (!ignoreAbility && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (!ignoreAbility && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { u32 ability = GetMonAbility(&gPlayerParty[0]); @@ -5419,7 +5419,7 @@ static bool8 IsAbilityAllowingEncounter(u8 level) { u8 ability; - if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) return TRUE; ability = GetMonAbility(&gPlayerParty[0]); @@ -5456,7 +5456,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex) { - if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) return FALSE; else if (GetMonAbility(&gPlayerParty[0]) != ability) return FALSE; |