mirror of
https://github.com/pret/pokefirered.git
synced 2026-09-29 12:30:28 -05:00
generalized battleloadmonspritegfx
This commit is contained in:
@@ -10,8 +10,7 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de
|
||||
void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId);
|
||||
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
|
||||
bool8 IsBattleSEPlaying(u8 battlerId);
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
|
||||
void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId);
|
||||
void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId);
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
|
||||
void DecompressTrainerBackPalette(u16 a1, u8 a2);
|
||||
|
||||
@@ -1029,7 +1029,7 @@ static void LinkOpponentHandleLoadMonSprite(u32 battler)
|
||||
{
|
||||
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
|
||||
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
|
||||
|
||||
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
|
||||
@@ -1062,7 +1062,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
|
||||
gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
|
||||
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
|
||||
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
|
||||
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
|
||||
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
|
||||
|
||||
@@ -993,7 +993,7 @@ static void LinkPartnerHandleLoadMonSprite(u32 battler)
|
||||
{
|
||||
u16 species;
|
||||
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
|
||||
|
||||
@@ -1012,7 +1012,7 @@ static void LinkPartnerHandleSwitchInAnim(u32 battler)
|
||||
{
|
||||
ClearTemporarySpeciesSpriteData(battler, gBattleResources->bufferA[battler][2]);
|
||||
gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1];
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
StartSendOutAnim(battler, gBattleResources->bufferA[battler][2]);
|
||||
gBattlerControllerFuncs[battler] = SwitchIn_TryShinyAnim;
|
||||
}
|
||||
@@ -1551,7 +1551,7 @@ static void Task_StartSendOutAnim(u8 taskId)
|
||||
|
||||
battlerPartner = BATTLE_PARTNER(battler);
|
||||
gBattleResources->bufferA[battlerPartner][1] = gBattlerPartyIndexes[battlerPartner];
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerPartner]], battlerPartner);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerPartner]], battlerPartner);
|
||||
StartSendOutAnim(battlerPartner, FALSE);
|
||||
}
|
||||
gBattlerControllerFuncs[battler] = Intro_ShowHealthbox;
|
||||
|
||||
@@ -1031,7 +1031,7 @@ static void OpponentHandleLoadMonSprite(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
y = GetBattlerSpriteDefault_Y(battler);
|
||||
}
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
|
||||
@@ -1065,7 +1065,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
|
||||
gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
|
||||
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
|
||||
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
|
||||
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
|
||||
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
|
||||
|
||||
@@ -1657,7 +1657,7 @@ static void PrintLinkStandbyMsg(void)
|
||||
|
||||
static void PlayerHandleLoadMonSprite(u32 battler)
|
||||
{
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
|
||||
gBattlerControllerFuncs[battler] = CompleteOnBattlerSpritePosX_0;
|
||||
}
|
||||
@@ -1666,7 +1666,7 @@ static void PlayerHandleSwitchInAnim(u32 battler)
|
||||
{
|
||||
ClearTemporarySpeciesSpriteData(battler, gBattleResources->bufferA[battler][2]);
|
||||
gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1];
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
gActionSelectionCursor[battler] = 0;
|
||||
gMoveSelectionCursor[battler] = 0;
|
||||
StartSendOutAnim(battler, gBattleResources->bufferA[battler][2]);
|
||||
@@ -2332,7 +2332,7 @@ void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite)
|
||||
FreeSpriteOamMatrix(sprite);
|
||||
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
|
||||
DestroySprite(sprite);
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
|
||||
}
|
||||
|
||||
@@ -2357,7 +2357,7 @@ static void Task_StartSendOutAnim(u8 taskId)
|
||||
StartSendOutAnim(battler, FALSE);
|
||||
|
||||
gBattleResources->bufferA[battlerPartner][1] = gBattlerPartyIndexes[battlerPartner];
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerPartner]], battlerPartner);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerPartner]], battlerPartner);
|
||||
StartSendOutAnim(battlerPartner, FALSE);
|
||||
}
|
||||
gBattlerControllerFuncs[battler] = Intro_TryShinyAnimShowHealthbox;
|
||||
|
||||
@@ -691,7 +691,7 @@ static void PokedudeHandleLoadMonSprite(u32 battler)
|
||||
u32 y;
|
||||
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
|
||||
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
y = GetBattlerSpriteDefault_Y(battler);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
|
||||
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
|
||||
@@ -712,7 +712,7 @@ static void PokedudeHandleSwitchInAnim(u32 battler)
|
||||
{
|
||||
ClearTemporarySpeciesSpriteData(battler, gBattleResources->bufferA[battler][2]);
|
||||
gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1];
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
gActionSelectionCursor[battler] = 0;
|
||||
gMoveSelectionCursor[battler] = 0;
|
||||
StartSendOutAnim(battler);
|
||||
|
||||
@@ -313,89 +313,77 @@ bool8 IsBattleSEPlaying(u8 battlerId)
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality;
|
||||
bool32 isShiny;
|
||||
u16 species;
|
||||
u8 position;
|
||||
u16 paletteOffset;
|
||||
u32 monsPersonality, currentPersonality, isShiny, species, paletteOffset, position;
|
||||
const void *lzPaletteData;
|
||||
void *buffer;
|
||||
struct Pokemon *illusionMon = GetIllusionMonPtr(battler);
|
||||
|
||||
if (GetMonData(mon, MON_DATA_IS_EGG) || GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE) // Don't load GFX of egg pokemon.
|
||||
return;
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
isShiny = GetMonData(mon, MON_DATA_IS_SHINY);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies == SPECIES_NONE)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies;
|
||||
if (B_TRANSFORM_SHINY >= GEN_4)
|
||||
{
|
||||
currentPersonality = gTransformedPersonalities[battler];
|
||||
}
|
||||
else
|
||||
{
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
}
|
||||
isShiny = GetMonData(mon, MON_DATA_IS_SHINY, NULL);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites[position], species, currentPersonality);
|
||||
|
||||
paletteOffset = OBJ_PLTT_ID(battlerId);
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
|
||||
position = GetBattlerPosition(battler);
|
||||
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
|
||||
{
|
||||
HandleLoadSpecialPokePic(TRUE,
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
species, currentPersonality);
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleLoadSpecialPokePic(FALSE,
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
species, currentPersonality);
|
||||
}
|
||||
|
||||
paletteOffset = OBJ_PLTT_ID(battler);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, monsPersonality);
|
||||
buffer = AllocZeroed(0x400);
|
||||
LZDecompressWram(lzPaletteData, buffer);
|
||||
LoadPalette(buffer, paletteOffset, PLTT_SIZE_4BPP);
|
||||
LoadPalette(buffer, BG_PLTT_ID(8) + BG_PLTT_ID(battlerId), PLTT_SIZE_4BPP);
|
||||
Free(buffer);
|
||||
lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, currentPersonality);
|
||||
|
||||
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
|
||||
LoadPalette(gDecompressionBuffer, paletteOffset, PLTT_SIZE_4BPP);
|
||||
LoadPalette(gDecompressionBuffer, BG_PLTT_ID(8) + BG_PLTT_ID(battler), PLTT_SIZE_4BPP);
|
||||
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16));
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality;
|
||||
bool32 isShiny;
|
||||
u16 species;
|
||||
u8 position;
|
||||
u16 paletteOffset;
|
||||
const void *lzPaletteData;
|
||||
void *buffer;
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
// dynamax tint
|
||||
if (IsDynamaxed(battler))
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
}
|
||||
isShiny = GetMonData(mon, MON_DATA_IS_SHINY, NULL);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites[position], species, currentPersonality);
|
||||
|
||||
paletteOffset = OBJ_PLTT_ID(battlerId);
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, monsPersonality);
|
||||
buffer = AllocZeroed(0x400);
|
||||
LZDecompressWram(lzPaletteData, buffer);
|
||||
LoadPalette(buffer, paletteOffset, PLTT_SIZE_4BPP);
|
||||
LoadPalette(buffer, BG_PLTT_ID(8) + BG_PLTT_ID(battlerId), PLTT_SIZE_4BPP);
|
||||
Free(buffer);
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZE_4BPP);
|
||||
// Calyrex and its forms have a blue dynamax aura instead of red.
|
||||
if (GET_BASE_SPECIES_ID(species) == SPECIES_CALYREX)
|
||||
BlendPalette(paletteOffset, 16, 4, RGB(12, 0, 31));
|
||||
else
|
||||
BlendPalette(paletteOffset, 16, 4, RGB(31, 0, 12));
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -732,9 +720,9 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
|
||||
else
|
||||
{
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
else
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -197,7 +197,7 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
|
||||
if (IS_BATTLE_TYPE_GHOST_WITHOUT_SCOPE(gBattleTypeFlags))
|
||||
DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
|
||||
else
|
||||
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
|
||||
}
|
||||
@@ -206,7 +206,7 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
|
||||
DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, battler);
|
||||
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
|
||||
else
|
||||
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
|
||||
gBattleScripting.reshowHelperState = 0;
|
||||
|
||||
Reference in New Issue
Block a user