Added LoadPaletteFast function.

This commit is contained in:
Ariel A 2022-04-16 17:57:20 -04:00
parent ea6c1a9e40
commit bc2b50cd2e
6 changed files with 26 additions and 12 deletions

View File

@ -1645,7 +1645,7 @@ u8 LoadSpritePaletteInSlot(const struct SpritePalette *palette, u8 paletteNum) {
void DoLoadSpritePalette(const u16 *src, u16 paletteOffset)
{
LoadPalette(src, paletteOffset + 0x100, 32);
LoadPaletteFast(src, paletteOffset + 0x100, 32);
}
u8 AllocSpritePalette(u16 tag)

View File

@ -42,7 +42,7 @@ void InitTrainerHillMap(void);
void InitBattlePyramidMap(bool8 setPlayerPosition);
void CopyMapTilesetsToVram(struct MapLayout const *mapLayout);
void LoadMapTilesetPalettes(struct MapLayout const *mapLayout);
void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout);
void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout, bool8 skipFaded);
void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout);
void CopyPrimaryTilesetToVram(const struct MapLayout *);
void CopySecondaryTilesetToVram(const struct MapLayout *);

View File

@ -66,6 +66,7 @@ extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE];
void LoadCompressedPalette(const u32 *, u16, u16);
void LoadPalette(const void *, u16, u16);
void LoadPaletteFast(const void *src, u16 offset, u16 size);
void FillPalette(u16, u16, u16);
void TransferPlttBuffer(void);
u8 UpdatePaletteFade(void);

View File

@ -870,9 +870,8 @@ static void FieldmapUnkDummy(void)
}
void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size, bool8 skipFaded)
{
u16 black = RGB_BLACK;
u32 low = 0;
u32 high = 0;
@ -880,15 +879,22 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
{
if (tileset->isSecondary == FALSE)
{
LoadPalette(&black, destOffset, 2);
LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2);
// LoadPalette(&black, destOffset, 2);
if (skipFaded)
CpuFastCopy(tileset->palettes, &gPlttBufferUnfaded[destOffset], size);
else
LoadPaletteFast(((u16*)tileset->palettes), destOffset, size);
gPlttBufferFaded[destOffset] = gPlttBufferUnfaded[destOffset] = RGB_BLACK; // why does it have to be black?
FieldmapPaletteDummy(destOffset + 1, (size - 2) >> 1);
low = 0;
high = NUM_PALS_IN_PRIMARY;
}
else if (tileset->isSecondary == TRUE)
{
LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
if (skipFaded)
CpuFastCopy(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), &gPlttBufferUnfaded[destOffset], size);
else
LoadPaletteFast(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
low = NUM_PALS_IN_PRIMARY;
high = NUM_PALS_TOTAL;
}
@ -928,12 +934,12 @@ void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout)
static void LoadPrimaryTilesetPalette(struct MapLayout const *mapLayout)
{
LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2);
LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2, FALSE);
}
void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout)
void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout, bool8 skipFaded)
{
LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2);
LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2, skipFaded);
}
void CopyMapTilesetsToVram(struct MapLayout const *mapLayout)
@ -950,6 +956,6 @@ void LoadMapTilesetPalettes(struct MapLayout const *mapLayout)
if (mapLayout)
{
LoadPrimaryTilesetPalette(mapLayout);
LoadSecondaryTilesetPalette(mapLayout);
LoadSecondaryTilesetPalette(mapLayout, FALSE);
}
}

View File

@ -820,7 +820,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
RunOnTransitionMapScript();
InitMap();
CopySecondaryTilesetToVramUsingHeap(gMapHeader.mapLayout);
LoadSecondaryTilesetPalette(gMapHeader.mapLayout);
LoadSecondaryTilesetPalette(gMapHeader.mapLayout, TRUE); // skip copying to Faded, gamma shift will take care of it
ApplyWeatherGammaShiftToPals(6, 6); // palettes [6,12]

View File

@ -96,6 +96,13 @@ void LoadPalette(const void *src, u16 offset, u16 size)
CpuCopy16(src, &gPlttBufferFaded[offset], size);
}
// Drop in replacement for LoadPalette, uses CpuFastCopy, size must be 0 % 32
void LoadPaletteFast(const void *src, u16 offset, u16 size) {
CpuFastCopy(src, &gPlttBufferUnfaded[offset], size);
// Copying from EWRAM->EWRAM is faster than ROM->EWRAM
CpuFastCopy(&gPlttBufferUnfaded[offset], &gPlttBufferFaded[offset], size);
}
void FillPalette(u16 value, u16 offset, u16 size)
{
CpuFill16(value, &gPlttBufferUnfaded[offset], size);