18 Dynamic overworld palette system
judicornadamsfoster edited this page 2026-11-05 12:12:49 +00:00

original code by ExpoSeed, full credit to them
I only updated the guide and branch

Goal: To replace the static overworld palettes with a dynamic system that loads the correct palette slot when you are playing the game, versus the palette slots being hardcoded when the game begins.

This is an updated guide from ExpoSeed's original branch that wouldn't compile if merged into Pret's latest repo (as of 3rd Nov 2026).

This guide also includes a line change from "Remove Expensive and Redundant 'BuildColorMaps()' Function" at https://github.com/pret/pokeemerald/wiki/Optimization-%E2%80%90-Remove-Expensive-and-Redundant-%60BuildColorMaps()%60-Function to enable the dynamic palette code to work.


to use:

pull this branch or make the manual edits as listed below

git remote add tenaya15 https://github.com/tenaya15/tenaya15emerald.git
git pull tenaya15 dynamic_palettes_2026

Note: line numbers stated below assume no previous modifications to the file and an up-to-date pret decomp (as of 3rd Nov 2026).
These lines may change if pret code is updated.
Always keep backups when editing large code changes.


1. include/event_object_movement.h

delete (at line 101):

extern const u8 gReflectionEffectPaletteMap[];

then change extern const u8 *const gBerryTreePaletteSlotTablePointers[]; (now at line 104) to:

extern const u16 *const gBerryTreePaletteSlotTablePointers[];

__

add after void CameraObjectFreeze(void); (now at line 219)

void LoadObjectEventPalette(u16 paletteTag);

2. include/field_effect_helpers.h

Add this line to the end of the file, but before #endif //GUARD_FIELD_EFFECT_HELPERS_H

void LoadFieldEffectPalette(u8 fieldEffect);


3. include/field_weather.h

add after extern const u16 gFogPalette[]; (at line 142)


enum
{
	GAMMA_NONE,
	GAMMA_NORMAL,
	GAMMA_ALT,
};

void UpdatePaletteGammaType(u8 index, u8 gammaType);

__

change void LoadCustomWeatherSpritePalette(const u16 *palette); (now at line 166) to

void LoadCustomWeatherSpritePalette(const struct SpritePalette *palette);

4. src/data/field_effects/field_effect_objects.h

in each of the following 6 functions:
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { (line 31)
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { (line 41)
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { (line 51)
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = { (line 61)
const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = { (line 268)
const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = { (line 1065)

replace .paletteTag = TAG_NONE, with:

    .paletteTag = OBJ_EVENT_PAL_TAG_BRENDAN,

__

in function const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = { (line 932)
replace .paletteTag = TAG_NONE, with:

    .paletteTag = OBJ_EVENT_PAL_TAG_NPC_2,

__

in function const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = { (line 976)
replace .paletteTag = TAG_NONE, with:

    .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3,

__

in function const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = { (line 1020)
replace .paletteTag = TAG_NONE, with:

    .paletteTag = OBJ_EVENT_PAL_TAG_NPC_2,

__

in function const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = { (line 1040)
replace .paletteTag = TAG_NONE, with:

    .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,

5. src/field_effect.c

add after EWRAM_DATA s32 gFieldEffectArguments[8] = {0}; (line 37)

EWRAM_DATA u16 gReflectionPaletteBuffer[0x10] = {0};

__

in section: void FieldEffectScript_LoadFadedPalette(u8 **script) (now line 782)
replace everything with:

{
    struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script);
    LoadSpritePalette(palette);
    UpdatePaletteGammaType(IndexOfSpritePaletteTag(palette->tag), GAMMA_NORMAL);
    UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag));
    (*script) += 4;
}

__

in function u8 FldEff_NPCFlyOut(void) (now line 3120)
replace everything with:

{
    u8 spriteId;
    struct Sprite *sprite;

    LoadFieldEffectPalette(FLDEFFOBJ_BIRD);
    spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0x78, 0, 1);
    sprite = &gSprites[spriteId];

    sprite->oam.paletteNum = 0;
    sprite->oam.priority = 1;
    sprite->callback = SpriteCB_NPCFlyOut;
    sprite->data[1] = gFieldEffectArguments[0];
    PlaySE(SE_M_FLY);
    return spriteId;
}

__

in section: `static u8 CreateFlyBirdSprite(void)' (now line 3305)
replace everything with:

{
    u8 spriteId;
    struct Sprite *sprite;

    LoadFieldEffectPalette(FLDEFFOBJ_BIRD);

    spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0xff, 0xb4, 0x1);
    sprite = &gSprites[spriteId];
    sprite->oam.priority = 1;
    sprite->callback = SpriteCB_FlyBirdLeaveBall;
    return spriteId;
}

6. src\field_weather.c

find function static const u8 ALIGNED(2) sBasePaletteColorMapTypes[32] = (line 114)
and rename it to:

EWRAM_DATA u8 ALIGNED(2) sBasePaletteGammaTypes[32] =

__

in function void StartWeather(void) (line 154)
replace all with:

{
    if (!FuncIsActiveTask(Task_WeatherMain))
    {
        u16 i;
        u8 index = 15;
        CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP);
        BuildColorMaps();
        for (i = 0; i < 13; i++)
            sBasePaletteGammaTypes[i] = GAMMA_NORMAL;
        sPaletteColorMapTypes = sBasePaletteGammaTypes;		
        gWeatherPtr->contrastColorMapSpritePalIndex = index;
        gWeatherPtr->rainSpriteCount = 0;
        gWeatherPtr->curRainSpriteIndex = 0;
        gWeatherPtr->cloudSpritesCreated = 0;
        gWeatherPtr->snowflakeSpriteCount = 0;
        gWeatherPtr->ashSpritesCreated = 0;
        gWeatherPtr->fogHSpritesCreated = 0;
        gWeatherPtr->fogDSpritesCreated = 0;
        gWeatherPtr->sandstormSpritesCreated = 0;
        gWeatherPtr->sandstormSwirlSpritesCreated = 0;
        gWeatherPtr->bubblesSpritesCreated = 0;
        gWeatherPtr->lightenedFogSpritePalsCount = 0;
        Weather_SetBlendCoeffs(16, 0);
        gWeatherPtr->currWeather = 0;
        gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
        gWeatherPtr->readyForInit = FALSE;
        gWeatherPtr->weatherChangeComplete = TRUE;
        gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
    }
}

__

in function static void BuildColorMaps(void) (now line 274)
change line sPaletteColorMapTypes = sBasePaletteColorMapTypes; (line 285) to

    sPaletteColorMapTypes = sBasePaletteGammaTypes;

__

delete entire function void LoadCustomWeatherSpritePalette(const u16 *palette) (now line 863)
and replace it with

void LoadCustomWeatherSpritePalette(const struct SpritePalette *palette)
{
   LoadSpritePalette(palette);
   UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag));
}

__

in function void PreservePaletteInWeather(u8 preservedPalIndex) (line 1097)
replace entire section with

{
    CpuCopy16(sBasePaletteGammaTypes, sFieldEffectPaletteColorMapTypes, 32);
    sFieldEffectPaletteColorMapTypes[preservedPalIndex] = GAMMA_NONE;
    sPaletteColorMapTypes = sFieldEffectPaletteColorMapTypes;
}

in function void ResetPreservedPalettesInWeather(void) (line 1104)
replace entire section with

{
    sPaletteColorMapTypes = sBasePaletteGammaTypes;
}

__

add to the very end of file:


void UpdatePaletteGammaType(u8 index, u8 gammaType)
{
    if (index != 0xFF)
        sBasePaletteGammaTypes[index + 16] = gammaType;
}


7 . src/field_weather_effect.c

add after const u8 gWeatherSandstormTiles[] = INCGFX_U8("graphics/weather/sandstorm.png", ".4bpp"); (line 30)


const struct SpritePalette sFogSpritePalette = {gFogPalette, 0x1201};
const struct SpritePalette sCloudsSpritePalette = {gCloudsWeatherPalette, 0x1207};
const struct SpritePalette sSandstormSpritePalette = {gSandstormWeatherPalette, 0x1204};

__

in function static const struct SpriteTemplate sCloudSpriteTemplate = (now line 89)
replace .paletteTag = PALTAG_WEATHER_2, with

    .paletteTag = 0x1207,

__

in function static void CreateCloudSprites(void) (now line 178)
replace LoadCustomWeatherSpritePalette(gCloudsWeatherPalette); with

    LoadCustomWeatherSpritePalette(&sCloudsSpritePalette);

__

in function static void DestroyCloudSprites(void) (now line 208)
replace FreeSpriteTilesByTag(GFXTAG_CLOUD); with

    FreeSpriteTilesByTag(0x1207);

__

in section: static void CreateFogHorizontalSprites(void) (now line 1467)
replace entire section with

{
    u16 i;
    u8 spriteId;
    struct Sprite *sprite;

    if (!gWeatherPtr->fogHSpritesCreated)
    {
        struct SpriteSheet fogHorizontalSpriteSheet = {
            .data = gWeatherFogHorizontalTiles,
            .size = sizeof(gWeatherFogHorizontalTiles),
            .tag = GFXTAG_FOG_H,
        };
        LoadSpriteSheet(&fogHorizontalSpriteSheet);
        for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
        {
            spriteId = CreateSpriteAtEnd(&sFogHorizontalSpriteTemplate, 0, 0, 0xFF);
            if (spriteId != MAX_SPRITES)
            {
                sprite = &gSprites[spriteId];
                sprite->tSpriteColumn = i % 5;
                sprite->x = (i % 5) * 64 + 32;
                sprite->y = (i / 5) * 64 + 32;
                gWeatherPtr->sprites.s2.fogHSprites[i] = sprite;
				sprite->oam.paletteNum = gWeatherPtr->contrastColorMapSpritePalIndex;

            }
            else
            {
                gWeatherPtr->sprites.s2.fogHSprites[i] = NULL;
            }
        }

        gWeatherPtr->fogHSpritesCreated = TRUE;
    }
}

__

in function static const struct SpriteTemplate sAshSpriteTemplate = (now line 1648)
replace .paletteTag = PALTAG_WEATHER, with

    .paletteTag = 0x1201,

__

in section: static void CreateAshSprites(void) (now line 1664)
replace entire section with

{
    u8 i;
    u8 spriteId;
    struct Sprite *sprite;

    if (!gWeatherPtr->ashSpritesCreated)
    {
        LoadCustomWeatherSpritePalette(&sFogSpritePalette);

        for (i = 0; i < NUM_ASH_SPRITES; i++)
        {
            spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
            if (spriteId != MAX_SPRITES)
            {
                sprite = &gSprites[spriteId];
                sprite->tCounterY = 0;
                sprite->tSpriteColumn = (u8)(i % 5);
                sprite->tSpriteRow = (u8)(i / 5);
                sprite->tOffsetY = sprite->tSpriteRow * 64 + 32;
                gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
            }
            else
            {
                gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
            }
        }

        gWeatherPtr->ashSpritesCreated = TRUE;
    }
}

__

in function static const struct SpriteTemplate sFogDiagonalSpriteTemplate = (now line 1867)
replace .paletteTag = PALTAG_WEATHER, with

    .paletteTag = 0x1201,

__

in function static const struct SpriteTemplate sSandstormSpriteTemplate = (now line 2114)
replace .paletteTag = PALTAG_WEATHER_2, with

    .paletteTag = 0x1204,

__

in section static void CreateSandstormSprites(void) (now line 2142)
replace entire section with

{
    u16 i;
    u8 spriteId;

    if (!gWeatherPtr->sandstormSpritesCreated)
    {
        LoadSpriteSheet(&sSandstormSpriteSheet);
        LoadCustomWeatherSpritePalette(&sSandstormSpritePalette);
        for (i = 0; i < NUM_SANDSTORM_SPRITES; i++)
        {
            spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
            if (spriteId != MAX_SPRITES)
            {
                gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
                gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteColumn = i % 5;
                gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteRow = i / 5;
            }
            else
            {
                gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
            }
        }

        gWeatherPtr->sandstormSpritesCreated = TRUE;
    }
}

8. src/overworld.c

in function static void ResumeMap(bool32 a1) (line 2131)
replace entire section with

{
    ResetTasks();
    ResetSpriteData();
    ResetPaletteFade();
    ScanlineEffect_Clear();
    ResetAllPicSprites();
    ResetCameraUpdateInfo();
    InstallCameraPanAheadCallback();
    FreeAllSpritePalettes();

    FieldEffectActiveListClear();
    StartWeather();
    ResumePausedWeather();
    if (!a1)
        SetUpFieldTasks();
    RunOnResumeMapScript();
    TryStartMirageTowerPulseBlendEffect();
}

9. src/rotating_gate.c

in the #include section at the top of the file
add

#include "field_weather.h"

__

in function static const struct OamData sOamData_RotatingGateLarge = (now line 238)
delete line .paletteNum = 2,
so the section is

{
    .y = 0,
    .affineMode = ST_OAM_AFFINE_NORMAL,
    .objMode = ST_OAM_OBJ_NORMAL,
    .mosaic = FALSE,
    .bpp = ST_OAM_4BPP,
    .shape = SPRITE_SHAPE(64x64),
    .x = 0,
    .matrixNum = 0,
    .size = SPRITE_SIZE(64x64),
    .tileNum = 0,
    .priority = 2,
    .affineParam = 0,
};

__

in function static const struct OamData sOamData_RotatingGateRegular = (now line 254)
delete line .paletteNum = 2,
so the section is

{
    .y = 0,
    .affineMode = ST_OAM_AFFINE_NORMAL,
    .objMode = ST_OAM_OBJ_NORMAL,
    .mosaic = FALSE,
    .bpp = ST_OAM_4BPP,
    .shape = SPRITE_SHAPE(32x32),
    .x = 0,
    .matrixNum = 0,
    .size = SPRITE_SIZE(32x32),
    .tileNum = 0,
    .priority = 2,
    .affineParam = 0,
};

__

in function static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = (now line 465)
replace .paletteTag = TAG_NONE, with

    .paletteTag = 0x1103, // OBJ_EVENT_PAL_TAG_NPC_1

__

in function static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = (now line 476)
replace .paletteTag = TAG_NONE, with

{
    .paletteTag = 0x1103, // OBJ_EVENT_PAL_TAG_NPC_1

__

in function static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) (now line 727)
replace whole section with

{
    struct Sprite *sprite;
    struct SpriteTemplate template;
    u8 spriteId;
    s16 x, y;

    const struct RotatingGatePuzzle *gate = &sRotatingGate_PuzzleConfig[gateId];

    if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1)
        template = sSpriteTemplate_RotatingGateRegular;
    else
        template = sSpriteTemplate_RotatingGateLarge;

    template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG;

    spriteId = CreateSprite(&template, 0, 0, 0x94);
    if (spriteId == MAX_SPRITES)
        return MAX_SPRITES;

    x = gate->x + MAP_OFFSET;
    y = gate->y + MAP_OFFSET;

    if (template.paletteTag != 0xFFFF)
    {
        LoadObjectEventPalette(template.paletteTag);
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(template.paletteTag), GAMMA_ALT);
    }

    sprite = &gSprites[spriteId];
    sprite->data[0] = gateId;
    sprite->coordOffsetEnabled = 1;
    sprite->oam.paletteNum = IndexOfSpritePaletteTag(template.paletteTag);

    GetMapCoordsFromSpritePos(x + deltaX, y + deltaY, &sprite->x, &sprite->y);
    RotatingGate_HideGatesOutsideViewport(sprite);
    StartSpriteAffineAnim(sprite, RotatingGate_GetGateOrientation(gateId));

    return spriteId;
}

10. src/trainer_see.c

in the #include section at the top of the file
add

#include "field_weather.h"

extern const struct SpritePalette sObjectEventSpritePalettes[];
extern const struct SpritePalette gObjectEventPal_Npc1;


11. src/field_effect_helpers.c

add to the #include section at the top of the file

#include "palette.h"
#include "constants/rgb.h"

#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102

__

delete function header static u32 ShowDisguiseFieldEffect(u8, u8, u8); (now at line 36)
and replace it with:

static u32 ShowDisguiseFieldEffect(u8, u8);
static void LoadFieldEffectPalette_(u8 fieldEffect, bool8 updateColorMapType);
void LoadSpecialReflectionPalette(struct Sprite *sprite);
extern u16 gReflectionPaletteBuffer[];

__

in function void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection) (now at line 53)
delete reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum];
so the section should now be:

{
    struct Sprite *reflectionSprite;

    reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 152)];
    reflectionSprite->callback = UpdateObjectReflectionSprite;
    reflectionSprite->oam.priority = 3;
    reflectionSprite->usingSheet = TRUE;
    reflectionSprite->anims = gDummySpriteAnimTable;
    StartSpriteAnim(reflectionSprite, 0);
    reflectionSprite->affineAnims = gDummySpriteAffineAnimTable;
    reflectionSprite->affineAnimBeginning = TRUE;
    reflectionSprite->subspriteMode = SUBSPRITES_OFF;
    reflectionSprite->sReflectionObjEventId = sprite->data[0];
    reflectionSprite->sReflectionObjEventLocalId = objectEvent->localId;
    reflectionSprite->sIsStillReflection = stillReflection;
    LoadObjectReflectionPalette(objectEvent, reflectionSprite);

    if (!stillReflection)
        reflectionSprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
}

in function static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *reflectionSprite) (now at line 80)
replace entire section with

{
    u8 bridgeType;
    u16 bridgeReflectionVerticalOffsets[] = {
        [BRIDGE_TYPE_POND_LOW - 1] = 12,
        [BRIDGE_TYPE_POND_MED - 1] = 28,
        [BRIDGE_TYPE_POND_HIGH - 1] = 44
    };
    reflectionSprite->sReflectionVerticalOffset = 0;
    if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad
     && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior))
      || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
    {
        // When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color.
        // This is so the sprite blends in with the dark water metatile underneath the bridge.
        reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1];
        LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION);
        reflectionSprite->oam.paletteNum = IndexOfSpritePaletteTag(OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION);
        UpdatePaletteGammaType(reflectionSprite->oam.paletteNum, GAMMA_NORMAL);
        UpdateSpritePaletteWithWeather(reflectionSprite->oam.paletteNum);
    }
    else
    {
        LoadSpecialReflectionPalette(reflectionSprite);
    }
}

__

delete the following sections/lines from just underneath the above function (lines 107 to 132)

static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteIndex)
{
    const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
    if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE)
    {
        if (graphicsInfo->paletteSlot == PALSLOT_PLAYER)
            LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex);
        else if (graphicsInfo->paletteSlot == PALSLOT_NPC_SPECIAL)
            LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex);
        else
            PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex);
        UpdateSpritePaletteWithWeather(paletteIndex);
    }
}

// When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color.
// This is so the sprite blends in with the dark water metatile underneath the bridge.
static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum)
{
    const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
    if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE)
    {
        PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum);
        UpdateSpritePaletteWithWeather(paletteNum);
    }
}

and then replace it with:

void LoadSpecialReflectionPalette(struct Sprite *sprite)
{
    u32 R, G, B, i;
    u16 color;
    u16* pal;
    struct SpritePalette reflectionPalette;

//    static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum)

    CpuCopy16(&gPlttBufferUnfaded[0x100 + sprite->oam.paletteNum * 16], gReflectionPaletteBuffer, 32);
    pal = gReflectionPaletteBuffer;
    for (i = 0; i < 16; ++i)
    {
        color = pal[i];
        R = GET_R(color) + 8;
        G = GET_G(color) + 8;
        B = GET_B(color) + 16;
        if (R > 31) R = 31;
        if (G > 31) G = 31;
        if (B > 31) B = 31;
        pal[i] = RGB(R, G, B);
    }

    reflectionPalette.data = gReflectionPaletteBuffer;
    reflectionPalette.tag = GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum) + 0x1000;
    LoadSpritePalette(&reflectionPalette);
    sprite->oam.paletteNum = IndexOfSpritePaletteTag(reflectionPalette.tag);
    UpdatePaletteGammaType(sprite->oam.paletteNum, GAMMA_ALT);
    UpdateSpritePaletteWithWeather(sprite->oam.paletteNum);
}

__

in function static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) (now at line 138)
delete line reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum]; (line 148)
so the whole function should be

{
    struct ObjectEvent *objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId];
    struct Sprite *mainSprite = &gSprites[objectEvent->spriteId];
    if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId)
    {
        reflectionSprite->inUse = FALSE;
    }
    else
    {
        reflectionSprite->oam.shape = mainSprite->oam.shape;
        reflectionSprite->oam.size = mainSprite->oam.size;
        reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP;
        reflectionSprite->oam.tileNum = mainSprite->oam.tileNum;
        reflectionSprite->subspriteTables = mainSprite->subspriteTables;
        reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum;
        reflectionSprite->invisible = mainSprite->invisible;
        reflectionSprite->x = mainSprite->x;
        reflectionSprite->y = mainSprite->y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->sReflectionVerticalOffset;
        reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX;
        reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY;
        reflectionSprite->x2 = mainSprite->x2;
        reflectionSprite->y2 = -mainSprite->y2;
        reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;

        if (objectEvent->hideReflection == TRUE)
            reflectionSprite->invisible = TRUE;

        if (reflectionSprite->sIsStillReflection == FALSE)
        {
            // Sets the reflection sprite's rot/scale matrix to the appropriate
            // matrix based on whether or not the main sprite is horizontally flipped.
            // If the sprite is facing to the east, then it is flipped, and its matrixNum is 8.
            reflectionSprite->oam.matrixNum = 0;
            if (mainSprite->oam.matrixNum & ST_OAM_HFLIP)
                reflectionSprite->oam.matrixNum = 1;
        }
    }
}

__

in function u8 CreateWarpArrowSprite(void) (now at line 188)
replace whole section with

{
    u8 spriteId;
    struct Sprite *sprite;

    LoadFieldEffectPalette_(FLDEFFOBJ_ARROW, FALSE);
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52);

    if (spriteId != MAX_SPRITES)
    {
        struct Sprite *sprite = &gSprites[spriteId];
        sprite->oam.priority = 1;
        sprite->coordOffsetEnabled = TRUE;
        sprite->invisible = TRUE;
    }
    return spriteId;
}

__

in function u32 FldEff_Shadow(void) (now at line 251)
replace entire section with

{
    u8 objectEventId;
    const struct ObjectEventGraphicsInfo *graphicsInfo;
    u8 spriteId;

    objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
    graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
    LoadFieldEffectPalette_(sShadowEffectTemplateIds[graphicsInfo->shadowSize], FALSE);
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 148);

    if (spriteId != MAX_SPRITES)
    {
        gSprites[spriteId].coordOffsetEnabled = TRUE;
        gSprites[spriteId].sLocalId = gFieldEffectArguments[0];
        gSprites[spriteId].sMapNum = gFieldEffectArguments[1];
        gSprites[spriteId].sMapGroup = gFieldEffectArguments[2];
        gSprites[spriteId].sYOffset = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize];
    }
    return 0;
}

__

in function u32 FldEff_JumpLongGrass(void) (now at line 492)
replace entire function with

{
    u8 spriteId;

    SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
    LoadFieldEffectPalette(FLDEFFOBJ_SURF_BLOB);
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
    if (spriteId != MAX_SPRITES)
    {
        struct Sprite *sprite = &gSprites[spriteId];
        sprite->coordOffsetEnabled = TRUE;
        sprite->oam.priority = gFieldEffectArguments[3];
        sprite->sJumpElevation = gFieldEffectArguments[2];
        sprite->sJumpFldEff = FLDEFF_JUMP_LONG_GRASS;
    }
    return 0;
}

__

in function u32 FldEff_SurfBlob(void) (now at line 1024)
delete line sprite->oam.paletteNum = 0;
so the section should now be

{
    u8 spriteId;

    SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 150);
    if (spriteId != MAX_SPRITES)
    {
        struct Sprite *sprite = &gSprites[spriteId];
        sprite->coordOffsetEnabled = TRUE;
        sprite->sPlayerObjId = gFieldEffectArguments[2];
        sprite->sVelocity = -1;
        sprite->sPrevX = -1;
        sprite->sPrevY = -1;
    }
    FieldEffectActiveListRemove(FLDEFF_SURF_BLOB);
    return spriteId;
}

__

in function u32 FldEff_BerryTreeGrowthSparkle(void) (now at line 1311)
replace everything with

{
    u8 spriteId;

    SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
    LoadFieldEffectPalette(FLDEFFOBJ_SPARKLE);	
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
    if (spriteId != MAX_SPRITES)
    {
        struct Sprite *sprite = &gSprites[spriteId];
        sprite->coordOffsetEnabled = TRUE;
        sprite->oam.priority = gFieldEffectArguments[3];
        sprite->sWaitFldEff = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
    }
    return 0;
}

__

in function u32 ShowTreeDisguiseFieldEffect(void) (now at line 1336)
replace return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, FLDEFFOBJ_TREE_DISGUISE, 4);
with

    return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, FLDEFFOBJ_TREE_DISGUISE);

__

in function u32 ShowMountainDisguiseFieldEffect(void) (now at line 1341)
replace return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, FLDEFFOBJ_MOUNTAIN_DISGUISE, 3);
with

    return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, FLDEFFOBJ_MOUNTAIN_DISGUISE);

__

in function u32 ShowSandDisguiseFieldEffect(void) (now at line 1346)
replace return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, FLDEFFOBJ_SAND_DISGUISE, 2);
with

    return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, FLDEFFOBJ_SAND_DISGUISE);

__

delete entire function static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) (now at level 1353)
and replace it with

static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx)
{
    u8 spriteId;
    u8 paletteNum;

    if (TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId))
    {
        FieldEffectActiveListRemove(fldEff);
        return MAX_SPRITES;
    }
    LoadFieldEffectPalette(templateIdx);
    spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
    if (spriteId != MAX_SPRITES)
    {
        struct Sprite *sprite = &gSprites[spriteId];
        sprite->coordOffsetEnabled ++;
        sprite->oam.paletteNum = paletteNum;
        sprite->sFldEff = fldEff;
        sprite->sLocalId = gFieldEffectArguments[0];
        sprite->sMapNum = gFieldEffectArguments[1];
        sprite->sMapGroup = gFieldEffectArguments[2];
    }
    return spriteId;
}

__

add the following AFTER the function static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevation, u8 subpriority) (now at line 1686)


static void LoadFieldEffectPalette_(u8 fieldEffect, bool8 updateGammaType)
{
    const struct SpriteTemplate *spriteTemplate;

    spriteTemplate = gFieldEffectObjectTemplatePointers[fieldEffect];
    if (spriteTemplate->paletteTag != 0xffff)
    {
        LoadObjectEventPalette(spriteTemplate->paletteTag);
        if (updateGammaType)
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(spriteTemplate->paletteTag), GAMMA_NORMAL);
    }
}

void LoadFieldEffectPalette(u8 fieldEffect)
{
    LoadFieldEffectPalette_(fieldEffect, TRUE);
}


12. src/data/object_events/berry_tree_graphics_tables.h

DELETE EVERYTHING IN THIS FILE AND REPLACE WITH THE BELOW

static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_CheriBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Cheri[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Chesto[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Pecha[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_RawstBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Rawst[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Aspear[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Leppa[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_OranBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_OranBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Oran[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_PersimBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_PersimBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Persim[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_LumBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Lum[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_SitrusBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Sitrus[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Figy[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Wiki[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Mago[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Aguav[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Iapapa[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Razz[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Wepear[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Pomeg[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Kelpsy[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Hondew[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Grepa[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_TamatoBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Tamato[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Cornn[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Rabuta[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Nomel[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Spelon[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Pamtre[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Durin[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
static const struct SpriteFrameImage sPicTable_OccaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Occa[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_YacheBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Yache[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_ChopleBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Chople[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_KebiaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Kebia[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_ShucaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Shuca[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

static const struct SpriteFrameImage sPicTable_PayapaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Payapa[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

static const struct SpriteFrameImage sPicTable_TangaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Tanga[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_KasibBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Kasib[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_HabanBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Haban[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_2};

static const struct SpriteFrameImage sPicTable_ColburBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Colbur[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

static const struct SpriteFrameImage sPicTable_RoseliBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 5)
};

const u16 gBerryTreePaletteTagTable_Roseli[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};
#endif

static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Liechi[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Lansat[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NPC_1};

#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
const struct SpriteFrameImage sPicTable_MicleBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Micle[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_3};

const struct SpriteFrameImage sPicTable_CustapBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Custap[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

const struct SpriteFrameImage sPicTable_JabocaBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Jaboca[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};

const struct SpriteFrameImage sPicTable_RowapBerryTree[] = {
    overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
    overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 0),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 1),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 2),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 3),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 4),
    overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 5),
};

const u16 gBerryTreePaletteTagTable_Rowap[] = {OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NPC_4};
#endif

const u16 gDeadBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES};

const u16 gBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES};

const struct SpriteFrameImage *const gBerryTreePicTablePointers[] = {
    [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX]            = sPicTable_CheriBerryTree,
    [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX]           = sPicTable_ChestoBerryTree,
    [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_PechaBerryTree,
    [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX]            = sPicTable_RawstBerryTree,
    [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX]           = sPicTable_AspearBerryTree,
    [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_LeppaBerryTree,
    [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX]             = sPicTable_OranBerryTree,
    [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX]           = sPicTable_PersimBerryTree,
    [ITEM_LUM_BERRY - FIRST_BERRY_INDEX]              = sPicTable_LumBerryTree,
    [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX]           = sPicTable_SitrusBerryTree,
    [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX]             = sPicTable_FigyBerryTree,
    [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX]             = sPicTable_WikiBerryTree,
    [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX]             = sPicTable_MagoBerryTree,
    [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX]            = sPicTable_AguavBerryTree,
    [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_IapapaBerryTree,
    [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX]             = sPicTable_RazzBerryTree,
    [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX]             = sPicTable_RazzBerryTree,
    [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX]            = sPicTable_MagoBerryTree,
    [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX]           = sPicTable_WepearBerryTree,
    [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX]            = sPicTable_IapapaBerryTree,
    [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX]            = sPicTable_PomegBerryTree,
    [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX]           = sPicTable_KelpsyBerryTree,
    [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX]           = sPicTable_WepearBerryTree,
    [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX]           = sPicTable_HondewBerryTree,
    [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_GrepaBerryTree,
    [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX]           = sPicTable_TamatoBerryTree,
    [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX]            = sPicTable_CornnBerryTree,
    [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX]           = sPicTable_PomegBerryTree,
    [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_RabutaBerryTree,
    [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX]            = sPicTable_NomelBerryTree,
    [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX]           = sPicTable_SpelonBerryTree,
    [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX]           = sPicTable_PamtreBerryTree,
    [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX]           = sPicTable_RabutaBerryTree,
    [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX]            = sPicTable_DurinBerryTree,
    [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX]            = sPicTable_HondewBerryTree,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX]           = sPicTable_GrepaBerryTree,
    [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX]             = sPicTable_OccaBerryTree,
    [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX]           = sPicTable_CornnBerryTree,
    [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX]            = sPicTable_RazzBerryTree,
    [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX]            = sPicTable_TamatoBerryTree,
    [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX]            = sPicTable_YacheBerryTree,
    [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX]           = sPicTable_ChopleBerryTree,
    [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_KebiaBerryTree,
    [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_ShucaBerryTree,
    [ITEM_COBA_BERRY - FIRST_BERRY_INDEX]             = sPicTable_RawstBerryTree,
    [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_PayapaBerryTree,
    [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX]            = sPicTable_TangaBerryTree,
    [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX]           = sPicTable_LansatBerryTree,
    [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX]            = sPicTable_KasibBerryTree,
    [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX]            = sPicTable_HabanBerryTree,
    [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX]           = sPicTable_ColburBerryTree,
    [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX]           = sPicTable_LiechiBerryTree,
    [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX]           = sPicTable_RoseliBerryTree,
#endif
    [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX]           = sPicTable_LiechiBerryTree,
    [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX]           = sPicTable_HondewBerryTree,
    [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX]            = sPicTable_AguavBerryTree,
    [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_PomegBerryTree,
    [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX]           = sPicTable_GrepaBerryTree,
    [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX]           = sPicTable_LansatBerryTree,
    [ITEM_STARF_BERRY - FIRST_BERRY_INDEX]            = sPicTable_CornnBerryTree,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX]            = sPicTable_MicleBerryTree,
    [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX]           = sPicTable_CustapBerryTree,
    [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_JabocaBerryTree,
    [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX]            = sPicTable_RowapBerryTree,
    [ITEM_KEE_BERRY - FIRST_BERRY_INDEX]              = sPicTable_PechaBerryTree,
    [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX]          = sPicTable_OccaBerryTree,
    [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX]  = sPicTable_DurinBerryTree,
#else
    [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX]           = sPicTable_DurinBerryTree,
#endif
};

const u16 *const gBerryTreePaletteTagTablePointers[] = {
    [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Cheri,
    [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Chesto,
    [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pecha,
    [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Rawst,
    [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Aspear,
    [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Leppa,
    [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Oran,
    [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Persim,
    [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Lum,
    [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Sitrus,
    [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Figy,
    [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Wiki,
    [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Mago,
    [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Aguav,
    [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Iapapa,
    [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Razz,
    [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Razz,
    [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Mago,
    [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Wepear,
    [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Iapapa,
    [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pomeg,
    [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Kelpsy,
    [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Wepear,
    [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Hondew,
    [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Grepa,
    [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Tamato,
    [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Cornn,
    [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pomeg,
    [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Rabuta,
    [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Nomel,
    [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Spelon,
    [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pamtre,
    [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Rabuta,
    [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Durin,
    [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Hondew,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Grepa,
    [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Occa,
    [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Cornn,
    [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Razz,
    [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Tamato,
    [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Yache,
    [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Chople,
    [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Kebia,
    [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Shuca,
    [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Rawst,
    [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Payapa,
    [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Tanga,
    [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Lansat,
    [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Kasib,
    [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Haban,
    [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Colbur,
    [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Liechi,
    [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Roseli,
#endif
    [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Liechi,
    [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Hondew,
    [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Aguav,
    [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pomeg,
    [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Grepa,
    [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Lansat,
    [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Cornn,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Micle,
    [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Custap,
    [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Jaboca,
    [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Rowap,
    [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Pecha,
    [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Occa,
    [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Durin,
#else
    [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteTagTable_Durin,
#endif
};

const u16 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = {
    [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
#endif
    [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
#if defined(RHH_EXPANSION) || defined(ITEM_EXPANSION)
    [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
    [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
#else
    [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
#endif
};


13. src\event_object_movement.c

add to the #include section at the top of the file

#include "field_weather.h"

__

delete the following two lines (now at lines 90 and 91):

static EWRAM_DATA u8 sCurrentReflectionType = 0;
static EWRAM_DATA u16 sCurrentSpecialObjectPaletteTag = 0;

__

delete this line (now at line 147)

static void LoadObjectEventPalette(u16);

__

delete this entire section (now at line 180 to 194)

const u8 gReflectionEffectPaletteMap[16] = {
        [PALSLOT_PLAYER]                 = PALSLOT_PLAYER_REFLECTION,
        [PALSLOT_PLAYER_REFLECTION]      = PALSLOT_PLAYER_REFLECTION,
        [PALSLOT_NPC_1]                  = PALSLOT_NPC_1_REFLECTION,
        [PALSLOT_NPC_2]                  = PALSLOT_NPC_2_REFLECTION,
        [PALSLOT_NPC_3]                  = PALSLOT_NPC_3_REFLECTION,
        [PALSLOT_NPC_4]                  = PALSLOT_NPC_4_REFLECTION,
        [PALSLOT_NPC_1_REFLECTION]       = PALSLOT_NPC_1_REFLECTION,
        [PALSLOT_NPC_2_REFLECTION]       = PALSLOT_NPC_2_REFLECTION,
        [PALSLOT_NPC_3_REFLECTION]       = PALSLOT_NPC_3_REFLECTION,
        [PALSLOT_NPC_4_REFLECTION]       = PALSLOT_NPC_4_REFLECTION,
        [PALSLOT_NPC_SPECIAL]            = PALSLOT_NPC_SPECIAL_REFLECTION,
        [PALSLOT_NPC_SPECIAL_REFLECTION] = PALSLOT_NPC_SPECIAL_REFLECTION
};

__

For the following, delete the entire functions
(only the function name listed here for brevity) (now lines 508 to 688)

	static const u16 sReflectionPaletteTags_Brendan[] = {
	static const u16 sReflectionPaletteTags_May[] = {
	static const u16 sReflectionPaletteTags_PlayerUnderwater[] = {
	static const struct PairedPalettes sPlayerReflectionPaletteSets[] = {
	static const u16 sReflectionPaletteTags_QuintyPlump[] = {
	static const u16 sReflectionPaletteTags_Truck[] = {
	static const u16 sReflectionPaletteTags_VigorothMover[] = {
	static const u16 sReflectionPaletteTags_MovingBox[] = {
	static const u16 sReflectionPaletteTags_CableCar[] = {
	static const u16 sReflectionPaletteTags_SSTidal[] = {
	static const u16 sReflectionPaletteTags_SubmarineShadow[] = {
	static const u16 sReflectionPaletteTags_Kyogre[] = {
	static const u16 sReflectionPaletteTags_Groudon[] = {
	static const u16 sReflectionPaletteTags_Npc3[] = { // Only used by the Route 120 bridge Kecleon
	static const u16 sReflectionPaletteTags_RedLeaf[] = {
	static const struct PairedPalettes sSpecialObjectReflectionPaletteSets[] = {
	static const u16 sObjectPaletteTags0[] = {
	static const u16 sObjectPaletteTags1[] = {
	static const u16 sObjectPaletteTags2[] = {
	static const u16 sObjectPaletteTags3[] = {
	static const u16 *const sObjectPaletteTagSets[] = {

__

in function static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent) (now line 1201)
replace the entire section with

{
    u8 paletteNum;

    struct SpriteFrameImage image;
    image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size;
    gSprites[objectEvent->spriteId].images = &image;
    paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum;
    DestroySprite(&gSprites[objectEvent->spriteId]);
    FieldEffectFreePaletteIfUnused(paletteNum);
}

__

in function static u8 TrySetupObjectEventSprite(const struct (title edited for brevity) (now at line 1240)
replace entire section with

{
    u8 spriteId;
    u8 paletteSlot;
    u8 objectEventId;
    struct Sprite *sprite;
    struct ObjectEvent *objectEvent;
    const struct ObjectEventGraphicsInfo *graphicsInfo;

    objectEventId = InitObjectEventStateFromTemplate(objectEventTemplate, mapNum, mapGroup);
    if (objectEventId == OBJECT_EVENTS_COUNT)
        return OBJECT_EVENTS_COUNT;

    objectEvent = &gObjectEvents[objectEventId];
    graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
    paletteSlot = graphicsInfo->paletteSlot;
    if (spriteTemplate->paletteTag != 0xFFFF)
    {
        LoadObjectEventPalette(spriteTemplate->paletteTag);
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(spriteTemplate->paletteTag), GAMMA_ALT);
    }

    if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE)
        objectEvent->invisible = TRUE;

    spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
    if (spriteId == MAX_SPRITES)
    {
        gObjectEvents[objectEventId].active = FALSE;
        return OBJECT_EVENTS_COUNT;
    }

    sprite = &gSprites[spriteId];
    GetMapCoordsFromSpritePos(objectEvent->currentCoords.x + cameraX, objectEvent->currentCoords.y + cameraY, &sprite->x, &sprite->y);
    sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
    sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
    sprite->x += 8;
    sprite->y += 16 + sprite->centerToCornerVecY;
    sprite->oam.paletteNum = IndexOfSpritePaletteTag(spriteTemplate->paletteTag);
    sprite->coordOffsetEnabled = TRUE;
    sprite->sObjEventId = objectEventId;
    objectEvent->spriteId = spriteId;
    objectEvent->inanimate = graphicsInfo->inanimate;
    if (!objectEvent->inanimate)
        StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection));

    SetObjectSubpriorityByElevation(objectEvent->previousElevation, sprite, 1);
    UpdateObjectEventVisibility(objectEvent, sprite);
    return objectEventId;
}

__

in function u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction) (now at line 1397)
replace entire section with

{
    u8 spriteId;
    struct Sprite *sprite;
    struct SpriteTemplate spriteTemplate;
    const struct SubspriteTable *subspriteTables;
    const struct ObjectEventGraphicsInfo *graphicsInfo;

    graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
    CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables);
    if (spriteTemplate.paletteTag != 0xFFFF)
    {
        LoadObjectEventPalette(spriteTemplate.paletteTag);
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(spriteTemplate.paletteTag), GAMMA_ALT);
    }
    x += MAP_OFFSET;
    y += MAP_OFFSET;
    SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
    spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
    if (spriteId != MAX_SPRITES)
    {
        sprite = &gSprites[spriteId];
        sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
        sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
        sprite->y += sprite->centerToCornerVecY;
        sprite->oam.paletteNum = IndexOfSpritePaletteTag(spriteTemplate.paletteTag);
        sprite->coordOffsetEnabled = TRUE;
        sprite->sVirtualObjId = virtualObjId;
        sprite->sVirtualObjElev = elevation;

        if (subspriteTables != NULL)
        {
            SetSubspriteTables(sprite, subspriteTables);
            sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
        }
        InitObjectPriorityByElevation(sprite, elevation);
        SetObjectSubpriorityByElevation(elevation, sprite, 1);
        StartSpriteAnim(sprite, GetFaceDirectionAnimNum(direction));
    }
    return spriteId;
}

__

in function static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) (now line 1522)
replace everything with

{
    u8 i;
    u8 paletteSlot;
    struct Sprite *sprite;
    struct ObjectEvent *objectEvent;
    struct SpriteTemplate spriteTemplate;
    struct SpriteFrameImage spriteFrameImage;
    const struct SubspriteTable *subspriteTables;
    const struct ObjectEventGraphicsInfo *graphicsInfo;

    for (i = 0; i < ARRAY_COUNT(gLinkPlayerObjectEvents); i++)
    {
        if (gLinkPlayerObjectEvents[i].active && objectEventId == gLinkPlayerObjectEvents[i].objEventId)
            return;
    }

    objectEvent = &gObjectEvents[objectEventId];
    subspriteTables = NULL;
    graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
    spriteFrameImage.size = graphicsInfo->size;
    CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
    spriteTemplate.images = &spriteFrameImage;

    if (spriteTemplate.paletteTag != 0xFFFF)
    {
        LoadObjectEventPalette(spriteTemplate.paletteTag);
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(spriteTemplate.paletteTag), GAMMA_ALT);
    }

    i = CreateSprite(&spriteTemplate, 0, 0, 0);
    if (i != MAX_SPRITES)
    {
        sprite = &gSprites[i];
        GetMapCoordsFromSpritePos(x + objectEvent->currentCoords.x, y + objectEvent->currentCoords.y, &sprite->x, &sprite->y);
        sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
        sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
        sprite->x += 8;
        sprite->y += 16 + sprite->centerToCornerVecY;
        sprite->images = graphicsInfo->images;
        if (objectEvent->movementType == MOVEMENT_TYPE_PLAYER)
        {
            SetPlayerAvatarObjectEventIdAndObjectId(objectEventId, i);
            objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
        }
        if (subspriteTables != NULL)
            SetSubspriteTables(sprite, subspriteTables);

        sprite->oam.paletteNum = IndexOfSpritePaletteTag(spriteTemplate.paletteTag);
        sprite->coordOffsetEnabled = TRUE;
        sprite->sObjEventId = objectEventId;
        objectEvent->spriteId = i;
        if (!objectEvent->inanimate && objectEvent->movementType != MOVEMENT_TYPE_PLAYER)
            StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection));

        ResetObjectEventFldEffData(objectEvent);
        SetObjectSubpriorityByElevation(objectEvent->previousElevation, sprite, 1);
    }
}

__

in function void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u16 graphicsId) (now at 1603)
replace everything with

{
    const struct ObjectEventGraphicsInfo *graphicsInfo;
    struct Sprite *sprite;
    u8 paletteSlot;

    graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
    sprite = &gSprites[objectEvent->spriteId];
	
    if (graphicsInfo->paletteTag != 0xFFFF)
    {
        LoadObjectEventPalette(graphicsInfo->paletteTag);
        UpdatePaletteGammaType(IndexOfSpritePaletteTag(graphicsInfo->paletteTag), GAMMA_ALT);
    }
    sprite->oam.shape = graphicsInfo->oam->shape;
    sprite->oam.size = graphicsInfo->oam->size;
    sprite->images = graphicsInfo->images;
    sprite->anims = graphicsInfo->anims;
    sprite->subspriteTables = graphicsInfo->subspriteTables;
    sprite->oam.paletteNum = IndexOfSpritePaletteTag(graphicsInfo->paletteTag);
    objectEvent->inanimate = graphicsInfo->inanimate;
    objectEvent->graphicsId = graphicsId;
    SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y);
    sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
    sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
    sprite->x += 8;
    sprite->y += 16 + sprite->centerToCornerVecY;
    if (objectEvent->trackedByCamera)
        CameraObjectReset();
}

__

in function static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite *sprite) (now at line 1665)
replace everything with

{
    u8 berryStage;
    u8 berryId;

    objectEvent->invisible = TRUE;
    sprite->invisible = TRUE;
    berryStage = GetStageByBerryTreeId(objectEvent->trainerRange_berryTreeId);
    if (berryStage != BERRY_STAGE_NO_BERRY)
    {
        objectEvent->invisible = FALSE;
        sprite->invisible = FALSE;
        berryId = GetBerryTypeByBerryTreeId(objectEvent->trainerRange_berryTreeId) - 1;
        berryStage--;
        if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
            berryId = 0;
        LoadObjectEventPalette(gBerryTreePaletteTagTablePointers[berryId][berryStage]);

        ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]);
        sprite->images = gBerryTreePicTablePointers[berryId];
        sprite->oam.paletteNum = IndexOfSpritePaletteTag(gBerryTreePaletteTagTablePointers[berryId][berryStage]);
        UpdatePaletteGammaType(sprite->oam.paletteNum, GAMMA_ALT);
        StartSpriteAnim(sprite, berryStage);
    }
}

__

delete entire function static void LoadObjectEventPalette(u16 paletteTag) (now at line 1801)
and replace it with

void LoadObjectEventPalette(u16 paletteTag)
{
    u16 i = FindObjectEventPaletteIndexByTag(paletteTag);

    if (i != 0xFF)
        LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]);
}

__

delete entire functions
void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot)
and
void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot) (lines 1845 to 1874)
__

delete entire functions
void InitObjectEventPalettes(u8 reflectionType)
and
u16 GetObjectPaletteTag(u8 palSlot)
(now lines 2269 to 2298)


end of guide

run make clean to clear out any potential artifacts/glitches before running make