Fixed berry tree display.

This commit is contained in:
Ariel Antonitis 2020-06-15 19:46:35 -04:00
parent e52b70e46f
commit db46bf855d
2 changed files with 44 additions and 8 deletions

View file

@ -1670,8 +1670,10 @@ u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum)
void FreeSpritePaletteByTag(u16 tag)
{
u8 index = IndexOfSpritePaletteTag(tag);
u16 emptyPalette[16] = {0};
if (index != 0xFF)
sSpritePaletteTags[index] = 0xFFFF;
LoadPalette(emptyPalette, index * 16 + 0x100, 32); // TODO: For debugging only
}
void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables)

View file

@ -1876,14 +1876,12 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
{
const struct ObjectEventGraphicsInfo *graphicsInfo;
struct Sprite *sprite;
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
u16 i;
u8 paletteNum;
u16 *debugPtr = (u16*) 0x0203d008;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
sprite = &gSprites[objectEvent->spriteId];
*debugPtr = graphicsId;
*(debugPtr + 1) = graphicsInfo->paletteSlot;
if (graphicsInfo->paletteSlot == 0) { // Hack until I can fix this
@ -1960,7 +1958,42 @@ void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction)
ObjectEventTurn(&gObjectEvents[playerAvatar->objectEventId], direction);
}
static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite *sprite)
static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, u8 berryId, u8 berryStage) {
const u8 graphicsId = gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
u8 paletteNum = sprite->oam.paletteNum;
u16 paletteTag = sObjectEventSpritePalettes[gBerryTreePaletteSlotTablePointers[berryId][berryStage]-2].tag;
u16 i;
// Free old palette if otherwise unused
sprite->inUse = FALSE;
FieldEffectFreePaletteIfUnused(paletteNum);
sprite->inUse = TRUE;
i = FindObjectEventPaletteIndexByTag(paletteTag);
paletteNum = IndexOfSpritePaletteTag(sObjectEventSpritePalettes[i].tag);
if (paletteNum == 0xFF) { // Load palette
paletteNum = LoadSpritePalette(&sObjectEventSpritePalettes[i]);
}
sprite->oam.paletteNum = paletteNum;
sprite->oam.shape = graphicsInfo->oam->shape;
sprite->oam.size = graphicsInfo->oam->size;
sprite->images = gBerryTreePicTablePointers[berryId];
sprite->anims = graphicsInfo->anims;
sprite->subspriteTables = graphicsInfo->subspriteTables;
objectEvent->inanimate = graphicsInfo->inanimate;
objectEvent->graphicsId = graphicsId;
SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y);
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
sprite->pos1.x += 8;
sprite->pos1.y += 16 + sprite->centerToCornerVecY;
if (objectEvent->trackedByCamera)
{
CameraObjectReset1();
}
}
static void get_berry_tree_graphics(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
u8 berryStage;
u8 berryId;
@ -1977,9 +2010,10 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite
if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
berryId = 0;
ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]);
sprite->images = gBerryTreePicTablePointers[berryId];
sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
// ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]);
// sprite->images = gBerryTreePicTablePointers[berryId];
// sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
SetBerryTreeGraphics(objectEvent, berryId, berryStage);
StartSpriteAnim(sprite, berryStage);
}
}