summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Nicholi‮ <me@nicholatian.com>2019-08-01 13:44:45 -0400
committerAlexander Nicholi‮ <me@nicholatian.com>2019-08-01 13:44:45 -0400
commit8e31379d907ea81b84971ab7afc8e24c89a2db62 (patch)
treed1a54c016c073320f14584e9665510c8ed2d71c7
parent88eb2755c29aef0bb6707feee374abef11fb7053 (diff)
remove redundant code blocks, fix some formatting/style errors, link to the commit where sub_080E894 was decompiled
-rw-r--r--Dynamic-overworld-palette-system.md239
1 files changed, 47 insertions, 192 deletions
diff --git a/Dynamic-overworld-palette-system.md b/Dynamic-overworld-palette-system.md
index 269eb51..abd8344 100644
--- a/Dynamic-overworld-palette-system.md
+++ b/Dynamic-overworld-palette-system.md
@@ -1,8 +1,8 @@
-For this tutorial we will be editting one function within **src/overworld.c** and three functions within **src/event_object_movement.c** to make it easier when adding new overworlds, with new palettes.
+For this tutorial we will be editing one function within `src/overworld.c` and three functions within `src/event_object_movement.c` to make it easier when adding new overworlds, with new palettes.
Note that 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 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 `LoadEventObjectPalette()` instead.
## overworld.c
### sub_8086988()
@@ -10,8 +10,7 @@ _Note:_ Function sub_808E894() has been decompiled so depending on your version
static void sub_8086988(u32 a1)
{
ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
+ ResetSpriteData(); ResetPaletteFade();
ScanlineEffect_Clear();
ResetAllPicSprites();
ResetCameraUpdateInfo();
@@ -31,27 +30,7 @@ static void sub_8086988(u32 a1)
sub_81BE6B8();
}
```
-becomes:
-```c
-static void sub_8086988(u32 a1)
-{
- ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
- ScanlineEffect_Clear();
- ResetAllPicSprites();
- ResetCameraUpdateInfo();
- InstallCameraPanAheadCallback();
- FreeAllSpritePalettes();
- FieldEffectActiveListClear();
- sub_80AAFA4();
- sub_80AEE84();
- if (!a1)
- SetUpFieldTasks();
- mapheader_run_script_with_tag_x5();
- sub_81BE6B8();
-}
-```
+
## event_object_movement.c
### TrySetupEventObjectSprite()
```diff
@@ -61,7 +40,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
const struct EventObjectGraphicsInfo *graphicsInfo;
struct Sprite *sprite;
u8 eventObjectId;
-- u8 paletteSlot;
+- u8 paletteSlot;
u8 spriteId;
eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup);
@@ -70,29 +49,29 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
eventObject = &gEventObjects[eventObjectId];
graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
-+ if (spriteTemplate->paletteTag != 0xffff)
-+ {
-+ sub_808E894(spriteTemplate->paletteTag);
-+ }
-- paletteSlot = graphicsInfo->paletteSlot;
-- if (paletteSlot == 0)
-- {
-- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, 0);
-- }
-- else if (paletteSlot == 10)
-- {
-- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, 10);
-- }
-- else if (paletteSlot >= 16)
-- {
-- paletteSlot -= 16;
-- sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
-- }
++ if (spriteTemplate->paletteTag != 0xffff)
++ {
++ sub_808E894(spriteTemplate->paletteTag);
++ }
+- paletteSlot = graphicsInfo->paletteSlot;
+- if (paletteSlot == 0)
+- {
+- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, 0);
+- }
+- else if (paletteSlot == 10)
+- {
+- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, 10);
+- }
+- else if (paletteSlot >= 16)
+- {
+- paletteSlot -= 16;
+- sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
+- }
if (eventObject->movementType == 0x4c)
{
eventObject->invisible = TRUE;
}
-- *(u16 *)&spriteTemplate->paletteTag = 0xFFFF;
+- *(u16 *)&spriteTemplate->paletteTag = 0xFFFF;
spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
if (spriteId == MAX_SPRITES)
{
@@ -105,7 +84,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
sprite->pos1.x += 8;
sprite->pos1.y += 16 + sprite->centerToCornerVecY;
-- sprite->oam.paletteNum = paletteSlot;
+- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
sprite->data[0] = eventObjectId;
eventObject->spriteId = spriteId;
@@ -119,55 +98,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
return eventObjectId;
}
```
-becomes:
-```c
-static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
-{
- struct EventObject *eventObject;
- const struct EventObjectGraphicsInfo *graphicsInfo;
- struct Sprite *sprite;
- u8 eventObjectId;
- u8 spriteId;
- eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup);
- if (eventObjectId == NUM_EVENT_OBJECTS)
- return NUM_EVENT_OBJECTS;
-
- eventObject = &gEventObjects[eventObjectId];
- graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
- if (spriteTemplate->paletteTag != 0xffff)
- {
- sub_808E894(spriteTemplate->paletteTag);
- }
- if (eventObject->movementType == 0x4c)
- {
- eventObject->invisible = TRUE;
- }
- spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
- if (spriteId == MAX_SPRITES)
- {
- gEventObjects[eventObjectId].active = FALSE;
- return NUM_EVENT_OBJECTS;
- }
- sprite = &gSprites[spriteId];
- sub_8092FF0(eventObject->currentCoords.x + cameraX, eventObject->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->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;
-}
-```
### RemoveEventObjectInternal()
```diff
static void RemoveEventObjectInternal(struct EventObject *eventObject)
@@ -183,26 +114,13 @@ static void RemoveEventObjectInternal(struct EventObject *eventObject)
}
```
-becomes:
-```c
-static void RemoveEventObjectInternal(struct EventObject *eventObject)
-{
- 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]);
- FieldEffectFreePaletteIfUnused(paletteNum);
-}
-```
### sub_808E1B8()
```diff
static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
{
u8 spriteId;
-- u8 paletteSlot;
+- u8 paletteSlot;
struct EventObject *eventObject;
const struct SubspriteTable *subspriteTables;
const struct EventObjectGraphicsInfo *graphicsInfo;
@@ -226,26 +144,26 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
spriteFrameImage.size = graphicsInfo->size;
MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(eventObject->graphicsId, eventObject->movementType, &spriteTemplate, &subspriteTables);
spriteTemplate.images = &spriteFrameImage;
-+ if (spriteTemplate.paletteTag != 0xffff)
-+ {
-+ sub_808E894(spriteTemplate.paletteTag);
-+ }
-- *(u16 *)&spriteTemplate.paletteTag = 0xffff;
-- paletteSlot = graphicsInfo->paletteSlot;
-- if (paletteSlot == 0)
-- {
-- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
-- }
-- else if (paletteSlot == 10)
-- {
-- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
-- }
-- else if (paletteSlot >= 16)
-- {
-- paletteSlot -= 16;
-- sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
-- }
-- *(u16 *)&spriteTemplate.paletteTag = 0xffff;
++ if (spriteTemplate.paletteTag != 0xffff)
++ {
++ sub_808E894(spriteTemplate.paletteTag);
++ }
+- *(u16 *)&spriteTemplate.paletteTag = 0xffff;
+- paletteSlot = graphicsInfo->paletteSlot;
+- if (paletteSlot == 0)
+- {
+- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+- }
+- else if (paletteSlot == 10)
+- {
+- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+- }
+- else if (paletteSlot >= 16)
+- {
+- paletteSlot -= 16;
+- sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
+- }
+- *(u16 *)&spriteTemplate.paletteTag = 0xffff;
spriteId = CreateSprite(&spriteTemplate, 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
@@ -265,7 +183,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
{
SetSubspriteTables(sprite, subspriteTables);
}
-- sprite->oam.paletteNum = paletteSlot;
+- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
sprite->data[0] = eventObjectId;
eventObject->spriteId = spriteId;
@@ -278,66 +196,3 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
}
}
```
-becomes:
-```c
-static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y)
-{
- u8 spriteId;
- struct EventObject *eventObject;
- const struct SubspriteTable *subspriteTables;
- const struct EventObjectGraphicsInfo *graphicsInfo;
- struct SpriteFrameImage spriteFrameImage;
- struct SpriteTemplate spriteTemplate;
- struct Sprite *sprite;
-
-#define i spriteId
- for (i = 0; i < ARRAY_COUNT(gLinkPlayerEventObjects); i++)
- {
- if (gLinkPlayerEventObjects[i].active && eventObjectId == gLinkPlayerEventObjects[i].eventObjId)
- {
- return;
- }
- }
-#undef i
-
- eventObject = &gEventObjects[eventObjectId];
- subspriteTables = NULL;
- graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
- spriteFrameImage.size = graphicsInfo->size;
- MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(eventObject->graphicsId, eventObject->movementType, &spriteTemplate, &subspriteTables);
- spriteTemplate.images = &spriteFrameImage;
- if (spriteTemplate.paletteTag != 0xffff)
- {
- sub_808E894(spriteTemplate.paletteTag);
- }
- spriteId = CreateSprite(&spriteTemplate, 0, 0, 0);
- if (spriteId != MAX_SPRITES)
- {
- sprite = &gSprites[spriteId];
- sub_8092FF0(x + eventObject->currentCoords.x, y + eventObject->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)
- {
- SetPlayerAvatarEventObjectIdAndObjectId(eventObjectId, spriteId);
- eventObject->warpArrowSpriteId = sub_8154228();
- }
- if (subspriteTables != NULL)
- {
- SetSubspriteTables(sprite, subspriteTables);
- }
- sprite->coordOffsetEnabled = TRUE;
- sprite->data[0] = eventObjectId;
- eventObject->spriteId = spriteId;
- if (!eventObject->inanimate && eventObject->movementType != 0x0b)
- {
- StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObject->facingDirection));
- }
- sub_808E38C(eventObject);
- SetObjectSubpriorityByZCoord(eventObject->previousElevation, sprite, 1);
- }
-}
-``` \ No newline at end of file