From 5e332813501b20475a5592e94127c1a4ee3605d4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Fri, 6 Nov 2020 17:48:03 -0300 Subject: [PATCH] Support for gender difference mon icons. --- include/pokemon_icon.h | 3 ++- src/pokemon_icon.c | 23 +++++++++++++++++++---- src/pokemon_storage_system.c | 6 +++--- src/trainer_card.c | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index dbd7f2895f..88ad969e31 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -2,8 +2,9 @@ #define GUARD_POKEMON_ICON_H extern const u8 gMonIconPaletteIndices[]; +extern const u8 gMonIconPaletteIndicesFemale[]; -const u8 *GetMonIconTiles(u16 species, bool32); +const u8 *GetMonIconTiles(u16 species, bool32, u32 personality); void sub_80D304C(u16 offset); u8 GetValidMonIconPalIndex(u16 species); const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo); diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 8efecfaf9e..78b963e78e 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -4,6 +4,7 @@ #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" +#include "data.h" #define POKE_ICON_BASE_PAL_TAG 56000 @@ -962,7 +963,10 @@ const u8 *const gMonIconTable[] = [SPECIES_UNOWN_Z] = gMonIcon_UnownZ, [SPECIES_UNOWN_EMARK] = gMonIcon_UnownExclamationMark, [SPECIES_UNOWN_QMARK] = gMonIcon_UnownQuestionMark, - +}; +const u8 *const gMonIconTableFemale[] = +{ + [SPECIES_EEVEE] = gMonIcon_Eevee, }; const u8 gMonIconPaletteIndices[] = @@ -1876,6 +1880,11 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_EGG] = 1, }; +const u8 gMonIconPaletteIndicesFemale[] = +{ + [SPECIES_EEVEE] = 2, +}; + const struct SpritePalette gMonIconPaletteTable[] = { { gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 }, @@ -2004,6 +2013,8 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u if (species > NUM_SPECIES) iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; + else if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndicesFemale[species]; spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); @@ -2025,7 +2036,7 @@ u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], }; - iconTemplate.image = GetMonIconTiles(species, extra); + iconTemplate.image = GetMonIconTiles(species, extra, 0); spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); UpdateMonIconFrame(&gSprites[spriteId]); @@ -2080,7 +2091,7 @@ u16 sub_80D2E84(u16 species) const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 handleDeoxys) { - return GetMonIconTiles(GetIconSpecies(species, personality), handleDeoxys); + return GetMonIconTiles(GetIconSpecies(species, personality), handleDeoxys, personality); } void FreeAndDestroyMonIconSprite(struct Sprite *sprite) @@ -2142,13 +2153,17 @@ void SpriteCB_MonIcon(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys) +const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys, u32 personality) { const u8* iconSprite = gMonIconTable[species]; if (species == SPECIES_DEOXYS && handleDeoxys == TRUE) { iconSprite = (const u8*)(0x400 + (u32)iconSprite); // use the specific Deoxys form icon (Speed in this case) } + else if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + { + iconSprite = gMonIconTableFemale[species]; + } return iconSprite; } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 4db9fbf92f..211ade0cd1 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5145,7 +5145,7 @@ static void sub_80CC100(struct Sprite *sprite) sprite->pos1.y = sPSSData->field_CB4->pos1.y + sPSSData->field_CB4->pos2.y + 4; } -static u16 sub_80CC124(u16 species) +static u16 sub_80CC124(u16 species, u32 personality) { u16 i, var; @@ -5169,7 +5169,7 @@ static u16 sub_80CC124(u16 species) sPSSData->field_B58[i] = species; sPSSData->field_B08[i]++; var = 16 * i; - CpuCopy32(GetMonIconTiles(species, TRUE), (void*)(OBJ_VRAM0) + var * 32, 0x200); + CpuCopy32(GetMonIconTiles(species, TRUE, personality), (void*)(OBJ_VRAM0) + var * 32, 0x200); return var; } @@ -5197,7 +5197,7 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s species = GetIconSpecies(species, personality); tempalte.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species]; - tileNum = sub_80CC124(species); + tileNum = sub_80CC124(species, personality); if (tileNum == 0xFFFF) return NULL; diff --git a/src/trainer_card.c b/src/trainer_card.c index 2d9ec2b090..0473382e44 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1379,7 +1379,7 @@ static void LoadMonIconGfx(void) for (i = 0; i < PARTY_SIZE; i++) { if (sData->trainerCard.monSpecies[i]) - LoadBgTiles(3, GetMonIconTiles(sData->trainerCard.monSpecies[i], 0), 512, 16 * i + 32); + LoadBgTiles(3, GetMonIconTiles(sData->trainerCard.monSpecies[i], FALSE, 0), 512, 16 * i + 32); } }