sovereignx/src/trainer_pokemon_sprites.c

355 lines
11 KiB
C
Raw Normal View History

2017-09-19 00:39:20 +01:00
#include "global.h"
2017-09-19 01:00:46 +01:00
#include "sprite.h"
2017-09-19 13:22:43 +01:00
#include "window.h"
#include "malloc.h"
2017-09-19 02:26:11 +01:00
#include "palette.h"
2017-09-19 01:00:46 +01:00
#include "decompress.h"
2018-08-19 00:06:10 +01:00
#include "trainer_pokemon_sprites.h"
2019-04-04 22:53:06 +01:00
#include "data.h"
2018-08-19 00:06:10 +01:00
#include "pokemon.h"
#include "constants/trainers.h"
2017-09-19 01:00:46 +01:00
#define PICS_COUNT 8
// Needs to be large enough to store either a decompressed pokemon pic or trainer pic
#define PIC_SPRITE_SIZE max(MON_PIC_SIZE, TRAINER_PIC_SIZE)
#define MAX_PIC_FRAMES max(MAX_MON_PIC_FRAMES, MAX_TRAINER_PIC_FRAMES)
2018-08-19 00:06:10 +01:00
struct PicData
{
2017-09-19 03:23:13 +01:00
u8 *frames;
2017-09-19 13:13:53 +01:00
struct SpriteFrameImage *images;
2017-09-19 03:23:13 +01:00
u16 paletteTag;
u8 spriteId;
u8 active;
2017-09-19 00:39:20 +01:00
};
2018-08-19 00:06:10 +01:00
static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {};
static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {};
2017-09-19 00:39:20 +01:00
2018-08-19 00:06:10 +01:00
static const struct PicData sDummyPicData = {};
2021-10-18 06:39:07 +01:00
static const struct OamData sOamData_Normal =
{
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64)
};
2021-10-18 06:39:07 +01:00
static const struct OamData sOamData_Affine =
{
2019-12-05 03:26:43 +00:00
.affineMode = ST_OAM_AFFINE_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64)
};
2017-09-19 00:39:20 +01:00
2018-08-19 00:06:10 +01:00
static void DummyPicSpriteCallback(struct Sprite *sprite)
2017-09-19 00:39:20 +01:00
{
}
2018-08-19 00:06:10 +01:00
bool16 ResetAllPicSprites(void)
2017-09-19 00:39:20 +01:00
{
int i;
2018-08-19 00:06:10 +01:00
for (i = 0; i < PICS_COUNT; i ++)
sSpritePics[i] = sDummyPicData;
2017-09-19 00:39:20 +01:00
return FALSE;
}
2017-09-19 01:00:46 +01:00
2020-12-22 06:39:19 +00:00
static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
2017-09-19 01:00:46 +01:00
{
if (!isTrainer)
{
Species Simplifier™ - Part 3 (#3562) * Added SpeciesInfo fields # Conflicts: # include/pokemon.h * Added missing comments * Renamed gigantamax to isGigantamax * Converted species flags to agbcc bit flags * Added padding after flags * Pikachu form config * Dex text * Reordered Paradox flag * Missing Pikachu ifdef comments * Moved P_GEN_x_POKEMON settings to the species_families file * Gen 1 Dex entries * Renamed file to species_enabled.h * Prevent Pokémon from evolving if their evolution is disabled * Prevent Pokémon from being affected by Eviolite if their evolution is disabled * Prevent Pokémon offspring if they're disabled * Corrected imprementation of evolution prevention It could potentially overwrite items by accident * Cross-evo configs * Gen 2 dex entries * Changed cry table to use assignable IDs # Conflicts: # include/pokemon.h * Form table pointers * Beginning support for moving data to gSpeciesInfo * Pokédexes reads text from gSpeciesInfo * Reading species names from gSpeciesInfo * Fixed erroneous copy-paste * Moved Bulbasaur to Raichu Family data do gSpeciesinfo * Added female pic sizes * Macros for Front, Back, Palette and Learnsets * Sandshrew to Dugtrio Families * Obtains Height/Weight from gSpeciesInfo * Read category from gSpeciesInfo * Removed unused data from pokedex_entries.h * Moved Gen 1 data to gSpeciesInfo * Moved Gen 2 data to gSpeciesInfo + fixed Ursaluna Bloodmoon not producing Teddiursa eggs * Moved Gen 3 data to gSpeciesInfo * Moved Gen 4 data to gSpeciesInfo * HGSS dex properly shows form sprites * Fixed data type for GetSpeciesHeight/Weight * Reading Pokédex Size data from gSpeciesInfo * Cleaned up mon graphic decompression function * Reading Front Pics gSpeciesInfo * Reading Back Pics gSpeciesInfo * Updated uses of GetMonSpritePalStruct to allow loading the data directly instead of reading the struct * Reading palettes from gSpeciesInfo * Reading animation delay from gSpeciesInfo * Fixed Pokémon Debug Menu not reading animation delay * Reading front anim Id from gSpeciesInfo * Reading back anim Id from gSpeciesInfo * Reading Animation Frames from gSpeciesInfo * Reading Icon Sprites from gSpeciesInfo * Reading Icon Palette IDs from gSpeciesInfo * Reading Footprints from gSpeciesInfo * Reading Mon Pic sizes from gSpeciesInfo * Separate mon pic sizes for female mon * Reading Level Up Learnsets from gSpeciesInfo * Reading Teachable Learnsets from gSpeciesInfo * Reading National Dex Number from gSpeciesInfo * Reading Enemy Mon Elevation from gSpeciesInfo * Reading Evolutions from gSpeciesInfo * Reading form table from gSpeciesInfo * Fixed button label inconsistency in pokémon debug menu * Reading form change table from gSpeciesInfo * Removed need to define mon graphics in include/graphics.h * Reordered mon graphics by family * Fixed National dex number offset * gFrontierBannedSpecies now checks IsSpeciesEnabled * Added 3 more toggles for Fusions, Primal Reversions and Ultra Burst * Gen 3 & 4 family toggles for dex entries * Fixed missing Mr. Rime data * Gen 1 dex descriptions as compound strings * Gen 2 dex descriptions as compound strings * Gen 3 dex descriptions as compound strings * Gen 4 dex descriptions as compound strings * Fixed compile in agbcc * Moved Gen 5 data to gSpeciesInfo * Using PLACEHOLDER_ANIM_SINGLE_FRAME when needed (same hash) * Renamed PLACEHOLDER_TWO_FRAME_ANIMATION to PLACEHOLDER_ANIM_TWO_FRAMES * Fixed capitalization for front pic anims * Fixed `CanEvolve` * Moved Gen 6 data to gSpeciesInfo * Gen 7 without macros * Gen 8 without macros * Gen 9 without macros * Fixed Gen 9 sound data * Finished moving Gen 7 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Ultra Necrozma is now included in the fusion forms define * Cries are now properly excluded from the rom when disabling species * Removed P_GEN_x_POKEMON from form_change_tables.h * Fixed Yanmega's cry ignoring the P_GEN_4_CROSS_EVOS setting * Added P_NEW_EVOS_IN_REGIONAL_DEX setting * Automatic ASSUMPTION_FAIL when used species are disabled * Finished moving Gen 8 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Expanded Alcremie macro * Finished moving Gen 9 data in macros (by Alex) * Fixed missing data for Komala and Marshadow * Form species id tables use family toggles + added missing Ursaluna form species id table * Fixed Genesect palettes * Fixed Flabébé family graphics * Fixed Minior Graphics * Fixed missing Calyrex data * Family toggles in mon graphcis (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed missing Ogerpon data * Ordered Level Up Learnsets (missing toggles) Also added White Basculin learnset * Added more Minior synonyms * Fixed enamorus order * Reordered teachable learnsets * Removed sSpeciesXXX level up learnsets + reordered * Removed unneeded assumes * Removed unused extra animations * Family toggles in mon level up learnsets (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed Phione graphics inclusion * Family toggles for Teachable Learnsets Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Ordered Front Pic Anims * Family toggles for front pic animations Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS dex incorrectly showing the wrong mon when catching it * Family toggles for Egg Moves + reodered Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS not checking for null footprints * Review changes * Fixed Female difference mon not using their macros * Fixed Alcremie Macro * Fixed compile error when disabling the Bulbasaur family * Fixed Turtwig and Chimchar family + Houndour and Mareep cries not being excluded properly * Re-added missing Egg graphical data * Fixed crash during the Birch Intro when Lotad is disabled * Renamed PALLETE to PALETTES * Removed extra spacing for YOffsets * Fixed compile when only disabling cross-gen evolutions * Added Tera Forms define (Ogerpon and Terapagos) * Fixed Necrozma macro * Removed .noFlip = FALSE * Fixed dex number in summary screen for forms when nat dex is disabled * Fixed Paldean form paths --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
2023-12-08 14:05:10 +00:00
LoadSpecialPokePic(dest, species, personality, isFrontPic);
2017-09-19 01:00:46 +01:00
}
else
{
if (isFrontPic)
DecompressPicFromTable(&gTrainerSprites[species].frontPic, dest);
2017-09-19 01:00:46 +01:00
else
DecompressPicFromTable(&gTrainerBacksprites[species].backPic, dest);
2017-09-19 01:00:46 +01:00
}
return FALSE;
}
2017-09-19 02:26:11 +01:00
static void LoadPicPaletteByTagOrSlot(u16 species, bool8 isShiny, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
2017-09-19 02:26:11 +01:00
{
if (!isTrainer)
{
2021-09-14 18:14:14 +01:00
if (paletteTag == TAG_NONE)
2017-09-19 02:26:11 +01:00
{
2021-09-14 18:14:14 +01:00
sCreatingSpriteTemplate.paletteTag = TAG_NONE;
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP);
2017-09-19 02:26:11 +01:00
}
else
{
2018-08-19 00:06:10 +01:00
sCreatingSpriteTemplate.paletteTag = paletteTag;
LoadCompressedSpritePaletteWithTag(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), species);
2017-09-19 02:26:11 +01:00
}
}
else
{
2021-09-14 18:14:14 +01:00
if (paletteTag == TAG_NONE)
2017-09-19 02:26:11 +01:00
{
2021-09-14 18:14:14 +01:00
sCreatingSpriteTemplate.paletteTag = TAG_NONE;
LoadCompressedPalette(gTrainerSprites[species].palette.data, OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP);
2017-09-19 02:26:11 +01:00
}
else
{
2018-08-19 00:06:10 +01:00
sCreatingSpriteTemplate.paletteTag = paletteTag;
LoadCompressedSpritePalette(&gTrainerSprites[species].palette);
2017-09-19 02:26:11 +01:00
}
}
}
2017-09-19 02:28:28 +01:00
static void LoadPicPaletteBySlot(u16 species, bool8 isShiny, u32 personality, u8 paletteSlot, bool8 isTrainer)
2017-09-19 02:28:28 +01:00
{
if (!isTrainer)
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), PLTT_ID(paletteSlot), PLTT_SIZE_4BPP);
2017-09-19 02:28:28 +01:00
else
LoadCompressedPalette(gTrainerSprites[species].palette.data, PLTT_ID(paletteSlot), PLTT_SIZE_4BPP);
2017-09-19 02:28:28 +01:00
}
2017-09-19 02:31:28 +01:00
2018-08-19 00:06:10 +01:00
static void AssignSpriteAnimsTable(bool8 isTrainer)
2017-09-19 02:31:28 +01:00
{
if (!isTrainer)
sCreatingSpriteTemplate.anims = gAnims_MonPic;
2017-09-19 02:31:28 +01:00
else
sCreatingSpriteTemplate.anims = gTrainerSprites[0].animation;
2017-09-19 02:31:28 +01:00
}
2017-09-19 03:23:13 +01:00
static u16 CreatePicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
2017-09-19 03:23:13 +01:00
{
u8 i;
u8 *framePics;
struct SpriteFrameImage *images;
int j;
u8 spriteId;
2018-08-19 00:06:10 +01:00
for (i = 0; i < PICS_COUNT; i ++)
2017-09-19 03:23:13 +01:00
{
2018-08-19 00:06:10 +01:00
if (!sSpritePics[i].active)
2017-09-19 03:23:13 +01:00
break;
}
2018-08-19 00:06:10 +01:00
if (i == PICS_COUNT)
return 0xFFFF;
2021-10-18 06:39:07 +01:00
framePics = Alloc(PIC_SPRITE_SIZE * MAX_PIC_FRAMES);
2017-09-19 03:23:13 +01:00
if (!framePics)
return 0xFFFF;
2021-10-18 06:39:07 +01:00
images = Alloc(sizeof(struct SpriteFrameImage) * MAX_PIC_FRAMES);
2017-09-19 03:23:13 +01:00
if (!images)
{
Free(framePics);
return 0xFFFF;
2017-09-19 03:23:13 +01:00
}
2020-12-22 06:39:19 +00:00
if (DecompressPic(species, personality, isFrontPic, framePics, isTrainer))
2017-09-19 03:23:13 +01:00
{
// debug trap?
return 0xFFFF;
2017-09-19 03:23:13 +01:00
}
for (j = 0; j < MAX_PIC_FRAMES; j ++)
2017-09-19 03:23:13 +01:00
{
images[j].data = framePics + PIC_SPRITE_SIZE * j;
images[j].size = PIC_SPRITE_SIZE;
2017-09-19 03:23:13 +01:00
}
2021-09-14 18:14:14 +01:00
sCreatingSpriteTemplate.tileTag = TAG_NONE;
2021-10-18 06:39:07 +01:00
sCreatingSpriteTemplate.oam = &sOamData_Normal;
2018-08-19 00:06:10 +01:00
AssignSpriteAnimsTable(isTrainer);
sCreatingSpriteTemplate.images = images;
sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sCreatingSpriteTemplate.callback = DummyPicSpriteCallback;
LoadPicPaletteByTagOrSlot(species, isShiny, personality, paletteSlot, paletteTag, isTrainer);
2018-08-19 00:06:10 +01:00
spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0);
2021-09-14 18:14:14 +01:00
if (paletteTag == TAG_NONE)
2017-09-19 03:23:13 +01:00
gSprites[spriteId].oam.paletteNum = paletteSlot;
2018-08-19 00:06:10 +01:00
sSpritePics[i].frames = framePics;
sSpritePics[i].images = images;
sSpritePics[i].paletteTag = paletteTag;
sSpritePics[i].spriteId = spriteId;
sSpritePics[i].active = TRUE;
2017-09-19 03:23:13 +01:00
return spriteId;
}
2017-09-19 03:41:54 +01:00
u16 CreateMonPicSprite_Affine(u16 species, bool8 isShiny, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
2017-09-19 03:41:54 +01:00
{
u8 *framePics;
struct SpriteFrameImage *images;
int j;
u8 i;
u8 spriteId;
2021-10-18 06:39:07 +01:00
u8 type;
Species Simplifier™ - Part 3 (#3562) * Added SpeciesInfo fields # Conflicts: # include/pokemon.h * Added missing comments * Renamed gigantamax to isGigantamax * Converted species flags to agbcc bit flags * Added padding after flags * Pikachu form config * Dex text * Reordered Paradox flag * Missing Pikachu ifdef comments * Moved P_GEN_x_POKEMON settings to the species_families file * Gen 1 Dex entries * Renamed file to species_enabled.h * Prevent Pokémon from evolving if their evolution is disabled * Prevent Pokémon from being affected by Eviolite if their evolution is disabled * Prevent Pokémon offspring if they're disabled * Corrected imprementation of evolution prevention It could potentially overwrite items by accident * Cross-evo configs * Gen 2 dex entries * Changed cry table to use assignable IDs # Conflicts: # include/pokemon.h * Form table pointers * Beginning support for moving data to gSpeciesInfo * Pokédexes reads text from gSpeciesInfo * Reading species names from gSpeciesInfo * Fixed erroneous copy-paste * Moved Bulbasaur to Raichu Family data do gSpeciesinfo * Added female pic sizes * Macros for Front, Back, Palette and Learnsets * Sandshrew to Dugtrio Families * Obtains Height/Weight from gSpeciesInfo * Read category from gSpeciesInfo * Removed unused data from pokedex_entries.h * Moved Gen 1 data to gSpeciesInfo * Moved Gen 2 data to gSpeciesInfo + fixed Ursaluna Bloodmoon not producing Teddiursa eggs * Moved Gen 3 data to gSpeciesInfo * Moved Gen 4 data to gSpeciesInfo * HGSS dex properly shows form sprites * Fixed data type for GetSpeciesHeight/Weight * Reading Pokédex Size data from gSpeciesInfo * Cleaned up mon graphic decompression function * Reading Front Pics gSpeciesInfo * Reading Back Pics gSpeciesInfo * Updated uses of GetMonSpritePalStruct to allow loading the data directly instead of reading the struct * Reading palettes from gSpeciesInfo * Reading animation delay from gSpeciesInfo * Fixed Pokémon Debug Menu not reading animation delay * Reading front anim Id from gSpeciesInfo * Reading back anim Id from gSpeciesInfo * Reading Animation Frames from gSpeciesInfo * Reading Icon Sprites from gSpeciesInfo * Reading Icon Palette IDs from gSpeciesInfo * Reading Footprints from gSpeciesInfo * Reading Mon Pic sizes from gSpeciesInfo * Separate mon pic sizes for female mon * Reading Level Up Learnsets from gSpeciesInfo * Reading Teachable Learnsets from gSpeciesInfo * Reading National Dex Number from gSpeciesInfo * Reading Enemy Mon Elevation from gSpeciesInfo * Reading Evolutions from gSpeciesInfo * Reading form table from gSpeciesInfo * Fixed button label inconsistency in pokémon debug menu * Reading form change table from gSpeciesInfo * Removed need to define mon graphics in include/graphics.h * Reordered mon graphics by family * Fixed National dex number offset * gFrontierBannedSpecies now checks IsSpeciesEnabled * Added 3 more toggles for Fusions, Primal Reversions and Ultra Burst * Gen 3 & 4 family toggles for dex entries * Fixed missing Mr. Rime data * Gen 1 dex descriptions as compound strings * Gen 2 dex descriptions as compound strings * Gen 3 dex descriptions as compound strings * Gen 4 dex descriptions as compound strings * Fixed compile in agbcc * Moved Gen 5 data to gSpeciesInfo * Using PLACEHOLDER_ANIM_SINGLE_FRAME when needed (same hash) * Renamed PLACEHOLDER_TWO_FRAME_ANIMATION to PLACEHOLDER_ANIM_TWO_FRAMES * Fixed capitalization for front pic anims * Fixed `CanEvolve` * Moved Gen 6 data to gSpeciesInfo * Gen 7 without macros * Gen 8 without macros * Gen 9 without macros * Fixed Gen 9 sound data * Finished moving Gen 7 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Ultra Necrozma is now included in the fusion forms define * Cries are now properly excluded from the rom when disabling species * Removed P_GEN_x_POKEMON from form_change_tables.h * Fixed Yanmega's cry ignoring the P_GEN_4_CROSS_EVOS setting * Added P_NEW_EVOS_IN_REGIONAL_DEX setting * Automatic ASSUMPTION_FAIL when used species are disabled * Finished moving Gen 8 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Expanded Alcremie macro * Finished moving Gen 9 data in macros (by Alex) * Fixed missing data for Komala and Marshadow * Form species id tables use family toggles + added missing Ursaluna form species id table * Fixed Genesect palettes * Fixed Flabébé family graphics * Fixed Minior Graphics * Fixed missing Calyrex data * Family toggles in mon graphcis (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed missing Ogerpon data * Ordered Level Up Learnsets (missing toggles) Also added White Basculin learnset * Added more Minior synonyms * Fixed enamorus order * Reordered teachable learnsets * Removed sSpeciesXXX level up learnsets + reordered * Removed unneeded assumes * Removed unused extra animations * Family toggles in mon level up learnsets (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed Phione graphics inclusion * Family toggles for Teachable Learnsets Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Ordered Front Pic Anims * Family toggles for front pic animations Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS dex incorrectly showing the wrong mon when catching it * Family toggles for Egg Moves + reodered Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS not checking for null footprints * Review changes * Fixed Female difference mon not using their macros * Fixed Alcremie Macro * Fixed compile error when disabling the Bulbasaur family * Fixed Turtwig and Chimchar family + Houndour and Mareep cries not being excluded properly * Re-added missing Egg graphical data * Fixed crash during the Birch Intro when Lotad is disabled * Renamed PALLETE to PALETTES * Removed extra spacing for YOffsets * Fixed compile when only disabling cross-gen evolutions * Added Tera Forms define (Ogerpon and Terapagos) * Fixed Necrozma macro * Removed .noFlip = FALSE * Fixed dex number in summary screen for forms when nat dex is disabled * Fixed Paldean form paths --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
2023-12-08 14:05:10 +00:00
species = SanitizeSpeciesId(species);
2017-09-19 03:41:54 +01:00
2021-10-18 06:39:07 +01:00
for (i = 0; i < PICS_COUNT; i++)
2017-09-19 03:41:54 +01:00
{
2018-08-19 00:06:10 +01:00
if (!sSpritePics[i].active)
2017-09-19 03:41:54 +01:00
break;
}
2018-08-19 00:06:10 +01:00
if (i == PICS_COUNT)
return 0xFFFF;
2021-10-18 06:39:07 +01:00
framePics = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES);
2017-09-19 03:41:54 +01:00
if (!framePics)
return 0xFFFF;
2021-10-18 06:39:07 +01:00
if (flags & F_MON_PIC_NO_AFFINE)
2017-09-19 03:41:54 +01:00
{
2021-10-18 06:39:07 +01:00
flags &= ~F_MON_PIC_NO_AFFINE;
type = MON_PIC_AFFINE_NONE;
2017-09-19 03:41:54 +01:00
}
else
{
2021-10-18 06:39:07 +01:00
type = flags;
2017-09-19 03:41:54 +01:00
}
images = Alloc(sizeof(struct SpriteFrameImage) * MAX_MON_PIC_FRAMES);
2017-09-19 03:41:54 +01:00
if (!images)
{
Free(framePics);
return 0xFFFF;
2017-09-19 03:41:54 +01:00
}
2020-12-22 06:39:19 +00:00
if (DecompressPic(species, personality, flags, framePics, FALSE))
2017-09-19 03:41:54 +01:00
{
// debug trap?
return 0xFFFF;
2017-09-19 03:41:54 +01:00
}
for (j = 0; j < MAX_MON_PIC_FRAMES; j ++)
2017-09-19 03:41:54 +01:00
{
2021-10-18 06:39:07 +01:00
images[j].data = framePics + MON_PIC_SIZE * j;
images[j].size = MON_PIC_SIZE;
2017-09-19 03:41:54 +01:00
}
2021-09-14 18:14:14 +01:00
sCreatingSpriteTemplate.tileTag = TAG_NONE;
Species Simplifier™ - Part 3 (#3562) * Added SpeciesInfo fields # Conflicts: # include/pokemon.h * Added missing comments * Renamed gigantamax to isGigantamax * Converted species flags to agbcc bit flags * Added padding after flags * Pikachu form config * Dex text * Reordered Paradox flag * Missing Pikachu ifdef comments * Moved P_GEN_x_POKEMON settings to the species_families file * Gen 1 Dex entries * Renamed file to species_enabled.h * Prevent Pokémon from evolving if their evolution is disabled * Prevent Pokémon from being affected by Eviolite if their evolution is disabled * Prevent Pokémon offspring if they're disabled * Corrected imprementation of evolution prevention It could potentially overwrite items by accident * Cross-evo configs * Gen 2 dex entries * Changed cry table to use assignable IDs # Conflicts: # include/pokemon.h * Form table pointers * Beginning support for moving data to gSpeciesInfo * Pokédexes reads text from gSpeciesInfo * Reading species names from gSpeciesInfo * Fixed erroneous copy-paste * Moved Bulbasaur to Raichu Family data do gSpeciesinfo * Added female pic sizes * Macros for Front, Back, Palette and Learnsets * Sandshrew to Dugtrio Families * Obtains Height/Weight from gSpeciesInfo * Read category from gSpeciesInfo * Removed unused data from pokedex_entries.h * Moved Gen 1 data to gSpeciesInfo * Moved Gen 2 data to gSpeciesInfo + fixed Ursaluna Bloodmoon not producing Teddiursa eggs * Moved Gen 3 data to gSpeciesInfo * Moved Gen 4 data to gSpeciesInfo * HGSS dex properly shows form sprites * Fixed data type for GetSpeciesHeight/Weight * Reading Pokédex Size data from gSpeciesInfo * Cleaned up mon graphic decompression function * Reading Front Pics gSpeciesInfo * Reading Back Pics gSpeciesInfo * Updated uses of GetMonSpritePalStruct to allow loading the data directly instead of reading the struct * Reading palettes from gSpeciesInfo * Reading animation delay from gSpeciesInfo * Fixed Pokémon Debug Menu not reading animation delay * Reading front anim Id from gSpeciesInfo * Reading back anim Id from gSpeciesInfo * Reading Animation Frames from gSpeciesInfo * Reading Icon Sprites from gSpeciesInfo * Reading Icon Palette IDs from gSpeciesInfo * Reading Footprints from gSpeciesInfo * Reading Mon Pic sizes from gSpeciesInfo * Separate mon pic sizes for female mon * Reading Level Up Learnsets from gSpeciesInfo * Reading Teachable Learnsets from gSpeciesInfo * Reading National Dex Number from gSpeciesInfo * Reading Enemy Mon Elevation from gSpeciesInfo * Reading Evolutions from gSpeciesInfo * Reading form table from gSpeciesInfo * Fixed button label inconsistency in pokémon debug menu * Reading form change table from gSpeciesInfo * Removed need to define mon graphics in include/graphics.h * Reordered mon graphics by family * Fixed National dex number offset * gFrontierBannedSpecies now checks IsSpeciesEnabled * Added 3 more toggles for Fusions, Primal Reversions and Ultra Burst * Gen 3 & 4 family toggles for dex entries * Fixed missing Mr. Rime data * Gen 1 dex descriptions as compound strings * Gen 2 dex descriptions as compound strings * Gen 3 dex descriptions as compound strings * Gen 4 dex descriptions as compound strings * Fixed compile in agbcc * Moved Gen 5 data to gSpeciesInfo * Using PLACEHOLDER_ANIM_SINGLE_FRAME when needed (same hash) * Renamed PLACEHOLDER_TWO_FRAME_ANIMATION to PLACEHOLDER_ANIM_TWO_FRAMES * Fixed capitalization for front pic anims * Fixed `CanEvolve` * Moved Gen 6 data to gSpeciesInfo * Gen 7 without macros * Gen 8 without macros * Gen 9 without macros * Fixed Gen 9 sound data * Finished moving Gen 7 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Ultra Necrozma is now included in the fusion forms define * Cries are now properly excluded from the rom when disabling species * Removed P_GEN_x_POKEMON from form_change_tables.h * Fixed Yanmega's cry ignoring the P_GEN_4_CROSS_EVOS setting * Added P_NEW_EVOS_IN_REGIONAL_DEX setting * Automatic ASSUMPTION_FAIL when used species are disabled * Finished moving Gen 8 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Expanded Alcremie macro * Finished moving Gen 9 data in macros (by Alex) * Fixed missing data for Komala and Marshadow * Form species id tables use family toggles + added missing Ursaluna form species id table * Fixed Genesect palettes * Fixed Flabébé family graphics * Fixed Minior Graphics * Fixed missing Calyrex data * Family toggles in mon graphcis (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed missing Ogerpon data * Ordered Level Up Learnsets (missing toggles) Also added White Basculin learnset * Added more Minior synonyms * Fixed enamorus order * Reordered teachable learnsets * Removed sSpeciesXXX level up learnsets + reordered * Removed unneeded assumes * Removed unused extra animations * Family toggles in mon level up learnsets (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed Phione graphics inclusion * Family toggles for Teachable Learnsets Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Ordered Front Pic Anims * Family toggles for front pic animations Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS dex incorrectly showing the wrong mon when catching it * Family toggles for Egg Moves + reodered Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS not checking for null footprints * Review changes * Fixed Female difference mon not using their macros * Fixed Alcremie Macro * Fixed compile error when disabling the Bulbasaur family * Fixed Turtwig and Chimchar family + Houndour and Mareep cries not being excluded properly * Re-added missing Egg graphical data * Fixed crash during the Birch Intro when Lotad is disabled * Renamed PALLETE to PALETTES * Removed extra spacing for YOffsets * Fixed compile when only disabling cross-gen evolutions * Added Tera Forms define (Ogerpon and Terapagos) * Fixed Necrozma macro * Removed .noFlip = FALSE * Fixed dex number in summary screen for forms when nat dex is disabled * Fixed Paldean form paths --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
2023-12-08 14:05:10 +00:00
sCreatingSpriteTemplate.anims = gSpeciesInfo[species].frontAnimFrames;
2018-08-19 00:06:10 +01:00
sCreatingSpriteTemplate.images = images;
2021-10-18 06:39:07 +01:00
if (type == MON_PIC_AFFINE_FRONT)
2017-09-19 03:41:54 +01:00
{
2021-01-23 04:22:37 +00:00
sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpriteOpponentSide;
2021-10-18 06:39:07 +01:00
sCreatingSpriteTemplate.oam = &sOamData_Affine;
2017-09-19 03:41:54 +01:00
}
2021-10-18 06:39:07 +01:00
else if (type == MON_PIC_AFFINE_BACK)
2017-09-19 03:41:54 +01:00
{
2021-01-23 04:22:37 +00:00
sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpritePlayerSide;
2021-10-18 06:39:07 +01:00
sCreatingSpriteTemplate.oam = &sOamData_Affine;
2017-09-19 03:41:54 +01:00
}
2021-10-18 06:39:07 +01:00
else // MON_PIC_AFFINE_NONE
2017-09-19 03:41:54 +01:00
{
2021-10-18 06:39:07 +01:00
sCreatingSpriteTemplate.oam = &sOamData_Normal;
2018-08-19 00:06:10 +01:00
sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
2017-09-19 03:41:54 +01:00
}
2018-08-19 00:06:10 +01:00
sCreatingSpriteTemplate.callback = DummyPicSpriteCallback;
LoadPicPaletteByTagOrSlot(species, isShiny, personality, paletteSlot, paletteTag, FALSE);
2018-08-19 00:06:10 +01:00
spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0);
2021-09-14 18:14:14 +01:00
if (paletteTag == TAG_NONE)
2017-09-19 03:41:54 +01:00
gSprites[spriteId].oam.paletteNum = paletteSlot;
2018-08-19 00:06:10 +01:00
sSpritePics[i].frames = framePics;
sSpritePics[i].images = images;
sSpritePics[i].paletteTag = paletteTag;
sSpritePics[i].spriteId = spriteId;
sSpritePics[i].active = TRUE;
2017-09-19 03:41:54 +01:00
return spriteId;
}
2017-09-19 13:13:53 +01:00
2018-08-19 00:06:10 +01:00
static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
2017-09-19 13:13:53 +01:00
{
u8 i;
u8 *framePics;
struct SpriteFrameImage *images;
2018-08-19 00:06:10 +01:00
for (i = 0; i < PICS_COUNT; i ++)
2017-09-19 13:13:53 +01:00
{
2018-08-19 00:06:10 +01:00
if (sSpritePics[i].spriteId == spriteId)
2017-09-19 13:13:53 +01:00
break;
}
2018-08-19 00:06:10 +01:00
if (i == PICS_COUNT)
return 0xFFFF;
2021-10-18 06:39:07 +01:00
2018-08-19 00:06:10 +01:00
framePics = sSpritePics[i].frames;
images = sSpritePics[i].images;
2021-09-14 18:14:14 +01:00
if (sSpritePics[i].paletteTag != TAG_NONE)
2017-09-19 13:13:53 +01:00
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum));
DestroySprite(&gSprites[spriteId]);
Free(framePics);
Free(images);
2018-08-19 00:06:10 +01:00
sSpritePics[i] = sDummyPicData;
2017-09-19 13:13:53 +01:00
return 0;
}
2017-09-19 13:22:43 +01:00
static u16 LoadPicSpriteInWindow(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer)
2017-09-19 13:22:43 +01:00
{
2020-12-22 06:39:19 +00:00
if (DecompressPic(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE))
return 0xFFFF;
2021-10-18 06:39:07 +01:00
LoadPicPaletteBySlot(species, isShiny, personality, paletteSlot, isTrainer);
2017-09-19 13:22:43 +01:00
return 0;
}
2017-09-19 13:32:49 +01:00
static u16 CreateTrainerCardSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId, bool8 isTrainer)
2017-09-19 13:32:49 +01:00
{
u8 *framePics;
framePics = Alloc(TRAINER_PIC_SIZE * MAX_TRAINER_PIC_FRAMES);
2020-12-22 06:39:19 +00:00
if (framePics && !DecompressPic(species, personality, isFrontPic, framePics, isTrainer))
2017-09-19 13:32:49 +01:00
{
BlitBitmapRectToWindow(windowId, framePics, 0, 0, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT, destX, destY, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT);
LoadPicPaletteBySlot(species, isShiny, personality, paletteSlot, isTrainer);
2017-09-19 13:32:49 +01:00
Free(framePics);
return 0;
}
return 0xFFFF;
2017-09-19 13:32:49 +01:00
}
2017-09-19 13:35:27 +01:00
u16 CreateMonPicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
2017-09-19 13:36:45 +01:00
{
return CreatePicSprite(species, isShiny, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE);
2017-09-19 13:36:45 +01:00
}
2017-09-19 13:53:31 +01:00
2018-08-19 00:06:10 +01:00
u16 FreeAndDestroyMonPicSprite(u16 spriteId)
2017-09-19 13:53:31 +01:00
{
2018-08-19 00:06:10 +01:00
return FreeAndDestroyPicSpriteInternal(spriteId);
2017-09-19 13:53:31 +01:00
}
static u16 UNUSED LoadMonPicInWindow(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
2017-09-19 13:53:31 +01:00
{
return LoadPicSpriteInWindow(species, isShiny, personality, isFrontPic, paletteSlot, windowId, FALSE);
2017-09-19 13:53:31 +01:00
}
2020-02-07 17:48:47 +00:00
// Unused, FRLG only
u16 CreateTrainerCardMonIconSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
2017-09-19 13:53:31 +01:00
{
return CreateTrainerCardSprite(species, isShiny, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE);
2017-09-19 13:53:31 +01:00
}
2018-08-19 00:06:10 +01:00
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
2017-09-19 13:53:31 +01:00
{
return CreatePicSprite(species, FALSE, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE);
2017-09-19 13:53:31 +01:00
}
2018-08-19 00:06:10 +01:00
u16 FreeAndDestroyTrainerPicSprite(u16 spriteId)
2017-09-19 13:53:31 +01:00
{
2018-08-19 00:06:10 +01:00
return FreeAndDestroyPicSpriteInternal(spriteId);
2017-09-19 13:53:31 +01:00
}
static u16 UNUSED LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
2017-09-19 13:53:31 +01:00
{
return LoadPicSpriteInWindow(species, FALSE, 0, isFrontPic, paletteSlot, windowId, TRUE);
2017-09-19 13:53:31 +01:00
}
2020-02-07 17:48:47 +00:00
u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
2017-09-19 13:53:31 +01:00
{
return CreateTrainerCardSprite(species, FALSE, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE);
2017-09-19 13:53:31 +01:00
}
2018-08-19 00:06:10 +01:00
u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass)
{
2018-08-19 00:06:10 +01:00
if (getClass == TRUE)
{
2021-10-18 06:39:07 +01:00
if (gender != MALE)
return gFacilityClassToPicIndex[FACILITY_CLASS_MAY];
2021-10-18 06:39:07 +01:00
else
return gFacilityClassToPicIndex[FACILITY_CLASS_BRENDAN];
}
2018-08-19 00:06:10 +01:00
return gender;
}