Support for gender difference mon icons.

This commit is contained in:
Eduardo Quezada D'Ottone 2020-11-06 17:48:03 -03:00
parent d7fbaa6cbf
commit 5e33281350
4 changed files with 25 additions and 9 deletions

View file

@ -2,8 +2,9 @@
#define GUARD_POKEMON_ICON_H #define GUARD_POKEMON_ICON_H
extern const u8 gMonIconPaletteIndices[]; 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); void sub_80D304C(u16 offset);
u8 GetValidMonIconPalIndex(u16 species); u8 GetValidMonIconPalIndex(u16 species);
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo); const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);

View file

@ -4,6 +4,7 @@
#include "palette.h" #include "palette.h"
#include "pokemon_icon.h" #include "pokemon_icon.h"
#include "sprite.h" #include "sprite.h"
#include "data.h"
#define POKE_ICON_BASE_PAL_TAG 56000 #define POKE_ICON_BASE_PAL_TAG 56000
@ -962,7 +963,10 @@ const u8 *const gMonIconTable[] =
[SPECIES_UNOWN_Z] = gMonIcon_UnownZ, [SPECIES_UNOWN_Z] = gMonIcon_UnownZ,
[SPECIES_UNOWN_EMARK] = gMonIcon_UnownExclamationMark, [SPECIES_UNOWN_EMARK] = gMonIcon_UnownExclamationMark,
[SPECIES_UNOWN_QMARK] = gMonIcon_UnownQuestionMark, [SPECIES_UNOWN_QMARK] = gMonIcon_UnownQuestionMark,
};
const u8 *const gMonIconTableFemale[] =
{
[SPECIES_EEVEE] = gMonIcon_Eevee,
}; };
const u8 gMonIconPaletteIndices[] = const u8 gMonIconPaletteIndices[] =
@ -1876,6 +1880,11 @@ const u8 gMonIconPaletteIndices[] =
[SPECIES_EGG] = 1, [SPECIES_EGG] = 1,
}; };
const u8 gMonIconPaletteIndicesFemale[] =
{
[SPECIES_EEVEE] = 2,
};
const struct SpritePalette gMonIconPaletteTable[] = const struct SpritePalette gMonIconPaletteTable[] =
{ {
{ gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 }, { 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) if (species > NUM_SPECIES)
iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; 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); 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], .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); spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
UpdateMonIconFrame(&gSprites[spriteId]); UpdateMonIconFrame(&gSprites[spriteId]);
@ -2080,7 +2091,7 @@ u16 sub_80D2E84(u16 species)
const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 handleDeoxys) 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) void FreeAndDestroyMonIconSprite(struct Sprite *sprite)
@ -2142,13 +2153,17 @@ void SpriteCB_MonIcon(struct Sprite *sprite)
UpdateMonIconFrame(sprite); UpdateMonIconFrame(sprite);
} }
const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys) const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys, u32 personality)
{ {
const u8* iconSprite = gMonIconTable[species]; const u8* iconSprite = gMonIconTable[species];
if (species == SPECIES_DEOXYS && handleDeoxys == TRUE) if (species == SPECIES_DEOXYS && handleDeoxys == TRUE)
{ {
iconSprite = (const u8*)(0x400 + (u32)iconSprite); // use the specific Deoxys form icon (Speed in this case) 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; return iconSprite;
} }

View file

@ -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; 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; u16 i, var;
@ -5169,7 +5169,7 @@ static u16 sub_80CC124(u16 species)
sPSSData->field_B58[i] = species; sPSSData->field_B58[i] = species;
sPSSData->field_B08[i]++; sPSSData->field_B08[i]++;
var = 16 * 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; return var;
} }
@ -5197,7 +5197,7 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s
species = GetIconSpecies(species, personality); species = GetIconSpecies(species, personality);
tempalte.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species]; tempalte.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species];
tileNum = sub_80CC124(species); tileNum = sub_80CC124(species, personality);
if (tileNum == 0xFFFF) if (tileNum == 0xFFFF)
return NULL; return NULL;

View file

@ -1379,7 +1379,7 @@ static void LoadMonIconGfx(void)
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (sData->trainerCard.monSpecies[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);
} }
} }