summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDr. POP <59966998+dr-pop@users.noreply.github.com>2020-04-03 18:36:28 +0200
committerDr. POP <59966998+dr-pop@users.noreply.github.com>2020-04-03 18:36:28 +0200
commit8fb611b3b53096c7d8e8e64225ff04c1d0b35c5e (patch)
treeb5b6dda1b8f97c7126bad94f1552e805a5266f7f
parent4e102c5267c0974b40f867f17ded611eb5c0a298 (diff)
Updated to account for changes from EventObject to ObjectEvent, and other updated labels/pointers/names.
-rw-r--r--Dynamic-overworld-palette-system.md128
1 files changed, 63 insertions, 65 deletions
diff --git a/Dynamic-overworld-palette-system.md b/Dynamic-overworld-palette-system.md
index 7149c44..af9b280 100644
--- a/Dynamic-overworld-palette-system.md
+++ b/Dynamic-overworld-palette-system.md
@@ -2,7 +2,7 @@ For this tutorial we will be editing one function within `src/overworld.c` and t
The current implementation breaks the reflection palette system, though for ease of adding new overworlds that should be adapted so it is dynamic as well, rather than requiring explicit reflection palettes.
-__Note:__ Function `sub_808E894()` has been [decompiled](https://github.com/pret/pokeemerald/commit/be33878b94cc38913447682d3e34e674df68619f) so depending on your version it might be called `LoadEventObjectPalette()` instead.
+__Note:__ Function `sub_808E894()` has been [decompiled](https://github.com/pret/pokeemerald/commit/be33878b94cc38913447682d3e34e674df68619f) so depending on your version it might be called `LoadObjectEventPalette()` instead.
## overworld.c
### sub_8086988()
@@ -17,41 +17,41 @@ static void sub_8086988(u32 a1)
InstallCameraPanAheadCallback();
+ FreeAllSpritePalettes();
- if (!a1)
-- InitEventObjectPalettes(0);
+- InitObjectEventPalettes(0);
- else
-- InitEventObjectPalettes(1);
+- InitObjectEventPalettes(1);
FieldEffectActiveListClear();
- sub_80AAFA4();
- sub_80AEE84();
+ StartWeather();
+ ResumePausedWeather();
if (!a1)
SetUpFieldTasks();
- mapheader_run_script_with_tag_x5();
- sub_81BE6B8();
+ RunOnResumeMapScript();
+ TryStartMirageTowerPulseBlendEffect();
}
```
## event_object_movement.c
-### TrySetupEventObjectSprite()
+### TrySetupObjectEventSprite()
```diff
-static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
+static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
{
- struct EventObject *eventObject;
- const struct EventObjectGraphicsInfo *graphicsInfo;
- struct Sprite *sprite;
- u8 eventObjectId;
-- u8 paletteSlot;
u8 spriteId;
+- u8 paletteSlot;
+ u8 objectEventId;
+ struct Sprite *sprite;
+ struct ObjectEvent *objectEvent;
+ const struct ObjectEventGraphicsInfo *graphicsInfo;
- eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup);
- if (eventObjectId == NUM_EVENT_OBJECTS)
- return NUM_EVENT_OBJECTS;
+ objectEventId = InitObjectEventStateFromTemplate(objectEventTemplate, mapNum, mapGroup);
+ if (objectEventId == OBJECT_EVENTS_COUNT)
+ return OBJECT_EVENTS_COUNT;
- eventObject = &gEventObjects[eventObjectId];
- graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
+ objectEvent = &gObjectEvents[objectEventId];
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ if (spriteTemplate->paletteTag != 0xffff)
+ {
-+ sub_808E894(spriteTemplate->paletteTag);
++ LoadObjectEventPalette(spriteTemplate->paletteTag);
+ }
- paletteSlot = graphicsInfo->paletteSlot;
- if (paletteSlot == 0)
@@ -67,49 +67,47 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
- paletteSlot -= 16;
- sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
- }
- if (eventObject->movementType == 0x4c)
- {
- eventObject->invisible = TRUE;
- }
+ if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE)
+ objectEvent->invisible = TRUE;
+
- *(u16 *)&spriteTemplate->paletteTag = 0xFFFF;
spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
if (spriteId == MAX_SPRITES)
{
- gEventObjects[eventObjectId].active = FALSE;
- return NUM_EVENT_OBJECTS;
+ gObjectEvents[objectEventId].active = FALSE;
+ return OBJECT_EVENTS_COUNT;
}
sprite = &gSprites[spriteId];
- sub_8092FF0(eventObject->currentCoords.x + cameraX, eventObject->currentCoords.y + cameraY, &sprite->pos1.x, &sprite->pos1.y);
+ sub_8092FF0(objectEvent->currentCoords.x + cameraX, objectEvent->currentCoords.y + cameraY, &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;
- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
- sprite->data[0] = eventObjectId;
- eventObject->spriteId = spriteId;
- eventObject->inanimate = graphicsInfo->inanimate;
- if (!eventObject->inanimate)
- {
- StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObject->facingDirection));
- }
- SetObjectSubpriorityByZCoord(eventObject->previousElevation, sprite, 1);
- UpdateEventObjectVisibility(eventObject, sprite);
- return eventObjectId;
+ sprite->data[0] = objectEventId;
+ objectEvent->spriteId = spriteId;
+ objectEvent->inanimate = graphicsInfo->inanimate;
+ if (!objectEvent->inanimate)
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection));
+
+ SetObjectSubpriorityByZCoord(objectEvent->previousElevation, sprite, 1);
+ UpdateObjectEventVisibility(objectEvent, sprite);
+ return objectEventId;
}
```
-### RemoveEventObjectInternal()
+### RemoveObjectEventInternal()
```diff
-static void RemoveEventObjectInternal(struct EventObject *eventObject)
+static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent)
{
+ u8 paletteNum;
struct SpriteFrameImage image;
- image.size = GetEventObjectGraphicsInfo(eventObject->graphicsId)->size;
- gSprites[eventObject->spriteId].images = &image;
-+ paletteNum = gSprites[eventObject->spriteId].oam.paletteNum;
- DestroySprite(&gSprites[eventObject->spriteId]);
+ image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size;
+ gSprites[objectEvent->spriteId].images = &image;
++ paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum;
+ DestroySprite(&gSprites[objectEvent->spriteId]);
+ FieldEffectFreePaletteIfUnused(paletteNum);
}
@@ -117,36 +115,36 @@ static void RemoveEventObjectInternal(struct EventObject *eventObject)
### sub_808E1B8()
```diff
-static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
+static void sub_808E1B8(u8 objectEventId, s16 x, s16 y)
{
u8 spriteId;
- u8 paletteSlot;
- struct EventObject *eventObject;
- const struct SubspriteTable *subspriteTables;
- const struct EventObjectGraphicsInfo *graphicsInfo;
- struct SpriteFrameImage spriteFrameImage;
- struct SpriteTemplate spriteTemplate;
struct Sprite *sprite;
+ struct ObjectEvent *objectEvent;
+ struct SpriteTemplate spriteTemplate;
+ struct SpriteFrameImage spriteFrameImage;
+ const struct SubspriteTable *subspriteTables;
+ const struct ObjectEventGraphicsInfo *graphicsInfo;
#define i spriteId
- for (i = 0; i < ARRAY_COUNT(gLinkPlayerEventObjects); i++)
+ for (i = 0; i < ARRAY_COUNT(gLinkPlayerObjectEvents); i++)
{
- if (gLinkPlayerEventObjects[i].active && eventObjectId == gLinkPlayerEventObjects[i].eventObjId)
+ if (gLinkPlayerObjectEvents[i].active && objectEventId == gLinkPlayerObjectEvents[i].objEventId)
{
return;
}
}
#undef i
- eventObject = &gEventObjects[eventObjectId];
+ objectEvent = &gObjectEvents[objectEventId];
subspriteTables = NULL;
- graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
spriteFrameImage.size = graphicsInfo->size;
- MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(eventObject->graphicsId, eventObject->movementType, &spriteTemplate, &subspriteTables);
+ MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
spriteTemplate.images = &spriteFrameImage;
+ if (spriteTemplate.paletteTag != 0xffff)
+ {
-+ sub_808E894(spriteTemplate.paletteTag);
++ LoadObjectEventPalette(spriteTemplate.paletteTag);
+ }
- *(u16 *)&spriteTemplate.paletteTag = 0xffff;
- paletteSlot = graphicsInfo->paletteSlot;
@@ -168,16 +166,16 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
- sub_8092FF0(x + eventObject->currentCoords.x, y + eventObject->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y);
+ sub_8092FF0(x + objectEvent->currentCoords.x, y + 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;
sprite->images = graphicsInfo->images;
- if (eventObject->movementType == 0x0b)
+ if (objectEvent->movementType == MOVEMENT_TYPE_PLAYER)
{
- SetPlayerAvatarEventObjectIdAndObjectId(eventObjectId, spriteId);
- eventObject->warpArrowSpriteId = sub_8154228();
+ SetPlayerAvatarObjectEventIdAndObjectId(objectEventId, spriteId);
+ objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
}
if (subspriteTables != NULL)
{
@@ -185,14 +183,14 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
}
- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
- sprite->data[0] = eventObjectId;
- eventObject->spriteId = spriteId;
- if (!eventObject->inanimate && eventObject->movementType != 0x0b)
+ sprite->data[0] = objectEventId;
+ objectEvent->spriteId = spriteId;
+ if (!objectEvent->inanimate && objectEvent->movementType != MOVEMENT_TYPE_PLAYER)
{
- StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObject->facingDirection));
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection));
}
- sub_808E38C(eventObject);
- SetObjectSubpriorityByZCoord(eventObject->previousElevation, sprite, 1);
+ sub_808E38C(objectEvent);
+ SetObjectSubpriorityByZCoord(objectEvent->previousElevation, sprite, 1);
}
}
```