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
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);

View File

@ -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;
}

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;
}
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;

View File

@ -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);
}
}