Fix hgss pokedex when catching mon with terrain (#7884)

Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
This commit is contained in:
DizzyEggg 2025-10-08 17:54:23 +02:00 committed by GitHub
parent c455665115
commit e44c9866e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 8 deletions

View File

@ -8,6 +8,7 @@ void ResetPokedex(void);
u16 GetNationalPokedexCount(u8 caseID);
u16 GetHoennPokedexCount(u8 caseID);
u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality);
u32 Pokedex_CreateCaughtMonSprite(u32 species, s32 x, s32 y);
s8 GetSetPokedexFlag(enum NationalDexOrder nationalDexNo, u8 caseID);
void DrawFootprint(u8 windowId, u16 species);
u16 CreateMonSpriteFromNationalDexNumber(enum NationalDexOrder nationalNum, s16 x, s16 y, u16 paletteSlot);

View File

@ -4048,6 +4048,17 @@ static void LoadDexMonPalette(u32 taskId, bool32 isShiny)
LoadPalette(paletteData, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP);
}
u32 Pokedex_CreateCaughtMonSprite(u32 species, s32 x, s32 y)
{
u32 spriteId;
SetMultiuseSpriteTemplateToPokemon(species, GetCatchingBattler());
spriteId = CreateSprite(&gMultiuseSpriteTemplate, x, y, 0);
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].callback = SpriteCallbackDummy;
return spriteId;
}
static void Task_DisplayCaughtMonDexPage(u8 taskId)
{
u8 spriteId;
@ -4096,11 +4107,8 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId)
break;
case 4:
// We're using a different mon sprite creation method, because we don't have enough memory to safely use CreateMonPicSprite.
SetMultiuseSpriteTemplateToPokemon(species, GetCatchingBattler());
spriteId = CreateSprite(&gMultiuseSpriteTemplate, MON_PAGE_X, MON_PAGE_Y, 0);
spriteId = Pokedex_CreateCaughtMonSprite(species, MON_PAGE_X, MON_PAGE_Y);
gTasks[taskId].tMonSpriteId = spriteId;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].callback = SpriteCallbackDummy;
LoadDexMonPalette(taskId, FALSE);
gSprites[spriteId].oam.priority = 0;
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);

View File

@ -4148,13 +4148,18 @@ void Task_DisplayCaughtMonDexPageHGSS(u8 taskId)
gTasks[taskId].tState++;
break;
case 4:
spriteId = CreateMonSpriteFromNationalDexNumberHGSS(dexNum, MON_PAGE_X, MON_PAGE_Y, 0);
gSprites[spriteId].oam.priority = 0;
{
u32 personality = ((u16)gTasks[taskId].tPersonalityHi << 16) | (u16)gTasks[taskId].tPersonalityLo;
const u16 *paletteData = GetMonSpritePalFromSpeciesAndPersonality(species, FALSE, personality);
spriteId = Pokedex_CreateCaughtMonSprite(species, MON_PAGE_X, MON_PAGE_Y);
LoadPalette(paletteData, OBJ_PLTT_ID(gSprites[spriteId].oam.paletteNum), PLTT_SIZE_4BPP);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(gPokedexVBlankCB);
gTasks[taskId].tMonSpriteId = spriteId;
gTasks[taskId].tState++;
break;
}
case 5:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@ -4532,8 +4537,8 @@ static u32 GetPokedexMonPersonality(u16 species)
static u16 CreateMonSpriteFromNationalDexNumberHGSS(u16 nationalNum, s16 x, s16 y, u16 paletteSlot)
{
nationalNum = NationalPokedexNumToSpeciesHGSS(nationalNum);
return CreateMonPicSprite(nationalNum, FALSE, GetPokedexMonPersonality(nationalNum), TRUE, x, y, paletteSlot, TAG_NONE);
u32 species = NationalPokedexNumToSpeciesHGSS(nationalNum);
return CreateMonPicSprite(nationalNum, FALSE, GetPokedexMonPersonality(species), TRUE, x, y, paletteSlot, TAG_NONE);
}
static u16 GetPokemonScaleFromNationalDexNumber(u16 nationalNum)