Fix for uncaught mon with terrain active (#7868)

This commit is contained in:
DizzyEggg 2025-10-07 22:21:02 +02:00 committed by GitHub
parent 6445e1863a
commit 6b1b24a2bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "battle_main.h"
#include "battle_script_commands.h"
#include "bg.h"
#include "data.h"
#include "decompress.h"
@ -4021,8 +4022,8 @@ static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b)
#define tPalTimer data[2]
#define tMonSpriteId data[3]
#define tIsShiny data[13]
#define tPersonalityLo data[14]
#define tPersonalityHi data[15]
#define tPersonalityLo 14
#define tPersonalityHi 15
u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality)
{
@ -4035,11 +4036,18 @@ u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality)
gTasks[taskId].tState = 0;
gTasks[taskId].tSpecies = species;
gTasks[taskId].tIsShiny = isShiny;
gTasks[taskId].tPersonalityLo = personality;
gTasks[taskId].tPersonalityHi = personality >> 16;
gTasks[taskId].data[tPersonalityLo] = personality;
gTasks[taskId].data[tPersonalityHi] = personality >> 16;
return taskId;
}
static void LoadDexMonPalette(u32 taskId, bool32 isShiny)
{
const u16 *paletteData = GetMonSpritePalFromSpeciesAndPersonality(gTasks[taskId].tSpecies, isShiny, GetWordTaskArg(taskId, tPersonalityLo));
u32 paletteNum = gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum;
LoadPalette(paletteData, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP);
}
static void Task_DisplayCaughtMonDexPage(u8 taskId)
{
u8 spriteId;
@ -4087,11 +4095,16 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId)
gTasks[taskId].tState++;
break;
case 4:
spriteId = CreateMonPicSprite(species, FALSE, ((u16)gTasks[taskId].tPersonalityHi << 16) | (u16)gTasks[taskId].tPersonalityLo, TRUE, MON_PAGE_X, MON_PAGE_Y, 0, TAG_NONE);
// 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);
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);
SetVBlankCallback(gPokedexVBlankCB);
gTasks[taskId].tMonSpriteId = spriteId;
gTasks[taskId].tState++;
break;
case 5:
@ -4138,9 +4151,6 @@ static void Task_ExitCaughtMonPage(u8 taskId)
if (!gPaletteFade.active)
{
bool32 isShiny;
u32 personality;
u8 paletteNum;
const u16 *paletteData;
void *buffer;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
@ -4153,10 +4163,7 @@ static void Task_ExitCaughtMonPage(u8 taskId)
Free(buffer);
isShiny = (bool8)gTasks[taskId].tIsShiny;
personality = ((u16)gTasks[taskId].tPersonalityHi << 16) | (u16)gTasks[taskId].tPersonalityLo;
paletteNum = gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum;
paletteData = GetMonSpritePalFromSpeciesAndPersonality(gTasks[taskId].tSpecies, isShiny, personality);
LoadPalette(paletteData, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP);
LoadDexMonPalette(taskId, isShiny);
DestroyTask(taskId);
}
}