Fixed berry tree display.
This commit is contained in:
parent
e52b70e46f
commit
db46bf855d
2 changed files with 44 additions and 8 deletions
|
@ -1670,8 +1670,10 @@ u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum)
|
||||||
void FreeSpritePaletteByTag(u16 tag)
|
void FreeSpritePaletteByTag(u16 tag)
|
||||||
{
|
{
|
||||||
u8 index = IndexOfSpritePaletteTag(tag);
|
u8 index = IndexOfSpritePaletteTag(tag);
|
||||||
|
u16 emptyPalette[16] = {0};
|
||||||
if (index != 0xFF)
|
if (index != 0xFF)
|
||||||
sSpritePaletteTags[index] = 0xFFFF;
|
sSpritePaletteTags[index] = 0xFFFF;
|
||||||
|
LoadPalette(emptyPalette, index * 16 + 0x100, 32); // TODO: For debugging only
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables)
|
void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables)
|
||||||
|
|
|
@ -1876,14 +1876,12 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
|
||||||
|
|
||||||
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
|
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
|
||||||
{
|
{
|
||||||
const struct ObjectEventGraphicsInfo *graphicsInfo;
|
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
||||||
struct Sprite *sprite;
|
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
|
||||||
u16 i;
|
u16 i;
|
||||||
u8 paletteNum;
|
u8 paletteNum;
|
||||||
u16 *debugPtr = (u16*) 0x0203d008;
|
u16 *debugPtr = (u16*) 0x0203d008;
|
||||||
|
|
||||||
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
|
||||||
sprite = &gSprites[objectEvent->spriteId];
|
|
||||||
*debugPtr = graphicsId;
|
*debugPtr = graphicsId;
|
||||||
*(debugPtr + 1) = graphicsInfo->paletteSlot;
|
*(debugPtr + 1) = graphicsInfo->paletteSlot;
|
||||||
if (graphicsInfo->paletteSlot == 0) { // Hack until I can fix this
|
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);
|
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 berryStage;
|
||||||
u8 berryId;
|
u8 berryId;
|
||||||
|
@ -1977,9 +2010,10 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite
|
||||||
if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
|
if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
|
||||||
berryId = 0;
|
berryId = 0;
|
||||||
|
|
||||||
ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]);
|
// ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]);
|
||||||
sprite->images = gBerryTreePicTablePointers[berryId];
|
// sprite->images = gBerryTreePicTablePointers[berryId];
|
||||||
sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
|
// sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
|
||||||
|
SetBerryTreeGraphics(objectEvent, berryId, berryStage);
|
||||||
StartSpriteAnim(sprite, berryStage);
|
StartSpriteAnim(sprite, berryStage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue