mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-10 22:18:41 -05:00
162 lines
4.2 KiB
C
162 lines
4.2 KiB
C
#include "global.h"
|
|
#include "gflib.h"
|
|
#include "decompress.h"
|
|
#include "pokemon.h"
|
|
|
|
void LZDecompressWram(const void *src, void *dest)
|
|
{
|
|
LZ77UnCompWram(src, dest);
|
|
}
|
|
|
|
void LZDecompressVram(const void *src, void *dest)
|
|
{
|
|
LZ77UnCompVram(src, dest);
|
|
}
|
|
|
|
u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src)
|
|
{
|
|
struct SpriteSheet dest;
|
|
|
|
LZ77UnCompWram(src->data, gDecompressionBuffer);
|
|
dest.data = gDecompressionBuffer;
|
|
dest.size = src->size;
|
|
dest.tag = src->tag;
|
|
return LoadSpriteSheet(&dest);
|
|
}
|
|
|
|
void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer)
|
|
{
|
|
struct SpriteSheet dest;
|
|
|
|
LZ77UnCompWram(src->data, buffer);
|
|
dest.data = buffer;
|
|
dest.size = src->size;
|
|
dest.tag = src->tag;
|
|
LoadSpriteSheet(&dest);
|
|
}
|
|
|
|
void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src)
|
|
{
|
|
struct SpritePalette dest;
|
|
|
|
LZ77UnCompWram(src->data, gDecompressionBuffer);
|
|
dest.data = (void *) gDecompressionBuffer;
|
|
dest.tag = src->tag;
|
|
LoadSpritePalette(&dest);
|
|
}
|
|
|
|
void LoadCompressedSpritePaletteWithTag(const u32 *pal, u16 tag)
|
|
{
|
|
struct SpritePalette dest;
|
|
|
|
LZ77UnCompWram(pal, gDecompressionBuffer);
|
|
dest.data = (void *) gDecompressionBuffer;
|
|
dest.tag = tag;
|
|
LoadSpritePalette(&dest);
|
|
}
|
|
|
|
void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer)
|
|
{
|
|
struct SpritePalette dest;
|
|
|
|
LZ77UnCompWram(a->data, buffer);
|
|
dest.data = buffer;
|
|
dest.tag = a->tag;
|
|
LoadSpritePalette(&dest);
|
|
}
|
|
|
|
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer)
|
|
{
|
|
LZ77UnCompWram(src->data, buffer);
|
|
}
|
|
|
|
void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 personality)
|
|
{
|
|
LoadSpecialPokePic(dest, species, personality, isFrontPic);
|
|
}
|
|
|
|
void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic)
|
|
{
|
|
species = SanitizeSpeciesId(species);
|
|
if (species == SPECIES_UNOWN)
|
|
species = GetUnownSpeciesId(personality);
|
|
|
|
if (isFrontPic) {
|
|
if (gSpeciesInfo[species].frontPicFemale != NULL && IsPersonalityFemale(species, personality))
|
|
LZ77UnCompWram(gSpeciesInfo[species].frontPicFemale, dest);
|
|
else if (gSpeciesInfo[species].frontPic != NULL)
|
|
LZ77UnCompWram(gSpeciesInfo[species].frontPic, dest);
|
|
else
|
|
LZ77UnCompWram(gSpeciesInfo[SPECIES_NONE].frontPic, dest);
|
|
} else {
|
|
if (gSpeciesInfo[species].backPicFemale != NULL && IsPersonalityFemale(species, personality))
|
|
LZ77UnCompWram(gSpeciesInfo[species].backPicFemale, dest);
|
|
else if (gSpeciesInfo[species].backPic != NULL)
|
|
LZ77UnCompWram(gSpeciesInfo[species].backPic, dest);
|
|
else
|
|
LZ77UnCompWram(gSpeciesInfo[SPECIES_NONE].backPic, dest);
|
|
}
|
|
DrawSpindaSpots(species, personality, dest, isFrontPic);
|
|
}
|
|
|
|
bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src)
|
|
{
|
|
struct SpriteSheet dest;
|
|
void *buffer;
|
|
|
|
buffer = AllocZeroed(*((u32 *)src->data) >> 8);
|
|
if (!buffer)
|
|
return TRUE;
|
|
LZ77UnCompWram(src->data, buffer);
|
|
dest.data = buffer;
|
|
dest.size = src->size;
|
|
dest.tag = src->tag;
|
|
LoadSpriteSheet(&dest);
|
|
Free(buffer);
|
|
return FALSE;
|
|
}
|
|
|
|
bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src)
|
|
{
|
|
struct SpritePalette dest;
|
|
void *buffer;
|
|
|
|
buffer = AllocZeroed(*((u32 *)src->data) >> 8);
|
|
if (!buffer)
|
|
return TRUE;
|
|
LZ77UnCompWram(src->data, buffer);
|
|
dest.data = buffer;
|
|
dest.tag = src->tag;
|
|
LoadSpritePalette(&dest);
|
|
Free(buffer);
|
|
return FALSE;
|
|
}
|
|
|
|
bool8 LoadCompressedSpritePaletteUsingHeapWithTag(const u32 *pal, u16 tag)
|
|
{
|
|
struct SpritePalette dest;
|
|
void *buffer;
|
|
|
|
buffer = AllocZeroed(*((u32 *)pal) >> 8);
|
|
if (!buffer)
|
|
return TRUE;
|
|
LZ77UnCompWram(pal, buffer);
|
|
dest.data = buffer;
|
|
dest.tag = tag;
|
|
LoadSpritePalette(&dest);
|
|
Free(buffer);
|
|
return FALSE;
|
|
}
|
|
|
|
u32 GetDecompressedDataSize(const u8 *ptr)
|
|
{
|
|
u32 ptr32[1];
|
|
u8 *ptr8 = (u8 *)ptr32;
|
|
|
|
ptr8[0] = ptr[1];
|
|
ptr8[1] = ptr[2];
|
|
ptr8[2] = ptr[3];
|
|
ptr8[3] = 0;
|
|
return ptr32[0];
|
|
}
|