diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-06-25 17:50:27 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-06-25 17:50:27 -0500 |
commit | 605f8ac1141daf66d3428923e004f82f5a5e1594 (patch) | |
tree | a3e5fae5d271175c7f10b6b455fcdc7f0fdd553e /src/field_effect_helpers.c | |
parent | e88e39d5fda1644f77e41fd652d4310612da7532 (diff) | |
parent | 659437f07a44b6f560bb58d6c12d141ed8ba7643 (diff) |
Merge branch 'master' into contest_link_80C2020
Diffstat (limited to 'src/field_effect_helpers.c')
-rw-r--r-- | src/field_effect_helpers.c | 590 |
1 files changed, 296 insertions, 294 deletions
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index bc4a1770e..84f340b35 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -2,156 +2,162 @@ #include "sprite.h" #include "fieldmap.h" #include "metatile_behavior.h" -#include "constants/songs.h" #include "sound.h" #include "event_object_movement.h" #include "field_camera.h" #include "field_weather.h" #include "field_effect.h" #include "field_effect_helpers.h" +#include "constants/field_effects.h" +#include "constants/songs.h" -static void sub_81269E0(struct Sprite *); -static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); -static void npc_pal_op_A(struct MapObject *, u8); -static void npc_pal_op_B(struct MapObject *, u8); -static void sub_81275A0(struct Sprite *); -static void sub_81275C4(struct Sprite *); -static void sub_8127DA0(struct Sprite *); -static void sub_8127DD0(struct Sprite *); -static void sub_8127E30(struct Sprite *); +static void UpdateObjectReflectionSprite(struct Sprite *); +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite); +static void LoadObjectHighBridgeReflectionPalette(struct EventObject *, u8); +static void LoadObjectRegularReflectionPalette(struct EventObject *, u8); +static void FadeFootprintsTireTracks_Step0(struct Sprite *); +static void FadeFootprintsTireTracks_Step1(struct Sprite *); +static void UpdateAshFieldEffect_Step0(struct Sprite *); +static void UpdateAshFieldEffect_Step1(struct Sprite *); +static void UpdateAshFieldEffect_Step2(struct Sprite *); static void sub_812882C(struct Sprite *, u8, u8); -static void sub_81278D8(struct Sprite *); -static void sub_8127FD4(struct MapObject *, struct Sprite *); -static void sub_812800C(struct MapObject *, struct Sprite *); -static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *); +static void sub_8127FD4(struct EventObject *, struct Sprite *); +static void sub_812800C(struct EventObject *, struct Sprite *); +static void sub_81280A0(struct EventObject *, struct Sprite *, struct Sprite *); static void sub_8128174(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) +void InitObjectReflectionSprite(struct EventObject *eventObject, struct Sprite *sprite, bool8 stillReflection) { - struct Sprite *newSprite; + struct Sprite *reflectionSprite; - newSprite = &gSprites[obj_unfreeze(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)]; - newSprite->callback = sub_81269E0; - newSprite->oam.priority = 3; - newSprite->oam.paletteNum = gUnknown_0830FD14[newSprite->oam.paletteNum]; - newSprite->usingSheet = TRUE; - newSprite->anims = gDummySpriteAnimTable; - StartSpriteAnim(newSprite, 0); - newSprite->affineAnims = gDummySpriteAffineAnimTable; - newSprite->affineAnimBeginning = TRUE; - newSprite->subspriteMode = 0; - newSprite->data[0] = sprite->data[0]; - newSprite->data[1] = mapObject->localId; - newSprite->data[7] = flag; - npc_pal_op(mapObject, newSprite); - if (!flag) - { - newSprite->oam.affineMode = 1; - } + reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)]; + reflectionSprite->callback = UpdateObjectReflectionSprite; + reflectionSprite->oam.priority = 3; + reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum]; + reflectionSprite->usingSheet = TRUE; + reflectionSprite->anims = gDummySpriteAnimTable; + StartSpriteAnim(reflectionSprite, 0); + reflectionSprite->affineAnims = gDummySpriteAffineAnimTable; + reflectionSprite->affineAnimBeginning = TRUE; + reflectionSprite->subspriteMode = SUBSPRITES_OFF; + reflectionSprite->data[0] = sprite->data[0]; + reflectionSprite->data[1] = eventObject->localId; + reflectionSprite->data[7] = stillReflection; + LoadObjectReflectionPalette(eventObject, reflectionSprite); + + if (!stillReflection) + reflectionSprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; } -static s16 sub_81268D0(struct MapObject *mapObject) +static s16 GetReflectionVerticalOffset(struct EventObject *eventObject) { - return GetFieldObjectGraphicsInfo(mapObject->graphicsId)->height - 2; + return GetEventObjectGraphicsInfo(eventObject->graphicsId)->height - 2; } -static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite) { - u8 whichElement; - u16 unk_8041e2c[] = {0x0c, 0x1c, 0x2c}; + u8 bridgeType; + u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 }; sprite->data[2] = 0; - if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E)))) + if (!GetEventObjectGraphicsInfo(eventObject->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(eventObject->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(eventObject->currentMetatileBehavior)))) { - sprite->data[2] = unk_8041e2c[whichElement - 1]; - npc_pal_op_A(mapObject, sprite->oam.paletteNum); + sprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1]; + LoadObjectHighBridgeReflectionPalette(eventObject, sprite->oam.paletteNum); } else { - npc_pal_op_B(mapObject, sprite->oam.paletteNum); + LoadObjectRegularReflectionPalette(eventObject, sprite->oam.paletteNum); } } -static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum) +static void LoadObjectRegularReflectionPalette(struct EventObject *eventObject, u8 paletteIndex) { - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - if (graphicsInfo->paletteTag2 != 0x11ff) + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); + if (graphicsInfo->bridgeReflectionPaletteTag != 0x11ff) { if (graphicsInfo->paletteSlot == 0) { - npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, paletteNum); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else if (graphicsInfo->paletteSlot == 10) { - npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, paletteNum); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else { - pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum); + PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex); } - UpdateSpritePaletteWithWeather(paletteNum); + UpdateSpritePaletteWithWeather(paletteIndex); } } -static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum) +// 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 EventObject *eventObject, u8 paletteNum) { - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - if (graphicsInfo->paletteTag2 != 0x11ff) + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); + if (graphicsInfo->bridgeReflectionPaletteTag != 0x11ff) { - pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum); + PatchObjectPalette(graphicsInfo->bridgeReflectionPaletteTag, paletteNum); UpdateSpritePaletteWithWeather(paletteNum); } } -static void sub_81269E0(struct Sprite *sprite) +static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { - struct MapObject *mapObject; - struct Sprite *oldSprite; + struct EventObject *eventObject; + struct Sprite *mainSprite; - mapObject = &gMapObjects[sprite->data[0]]; - oldSprite = &gSprites[mapObject->spriteId]; - if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data[1]) + eventObject = &gEventObjects[reflectionSprite->data[0]]; + mainSprite = &gSprites[eventObject->spriteId]; + if (!eventObject->active || !eventObject->hasReflection || eventObject->localId != reflectionSprite->data[1]) { - sprite->inUse = FALSE; + reflectionSprite->inUse = FALSE; } else { - sprite->oam.paletteNum = gUnknown_0830FD14[oldSprite->oam.paletteNum]; - sprite->oam.shape = oldSprite->oam.shape; - sprite->oam.size = oldSprite->oam.size; - sprite->oam.matrixNum = oldSprite->oam.matrixNum | 0x10; - sprite->oam.tileNum = oldSprite->oam.tileNum; - sprite->subspriteTables = oldSprite->subspriteTables; - sprite->subspriteTableNum = oldSprite->subspriteTableNum; - sprite->invisible = oldSprite->invisible; - sprite->pos1.x = oldSprite->pos1.x; - sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data[2]; - sprite->centerToCornerVecX = oldSprite->centerToCornerVecX; - sprite->centerToCornerVecY = oldSprite->centerToCornerVecY; - sprite->pos2.x = oldSprite->pos2.x; - sprite->pos2.y = -oldSprite->pos2.y; - sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled; - if (sprite->data[7] == FALSE) + reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum]; + reflectionSprite->oam.shape = mainSprite->oam.shape; + reflectionSprite->oam.size = mainSprite->oam.size; + reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | 0x10; + reflectionSprite->oam.tileNum = mainSprite->oam.tileNum; + reflectionSprite->subspriteTables = mainSprite->subspriteTables; + reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum; + reflectionSprite->invisible = mainSprite->invisible; + reflectionSprite->pos1.x = mainSprite->pos1.x; + // reflectionSprite->data[2] holds an additional vertical offset, used by the high bridges on Route 120 + reflectionSprite->pos1.y = mainSprite->pos1.y + GetReflectionVerticalOffset(eventObject) + reflectionSprite->data[2]; + reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX; + reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY; + reflectionSprite->pos2.x = mainSprite->pos2.x; + reflectionSprite->pos2.y = -mainSprite->pos2.y; + reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled; + + // Check if the reflection is not still. + if (reflectionSprite->data[7] == FALSE) { - sprite->oam.matrixNum = 0; - if (oldSprite->oam.matrixNum & 0x8) - { - sprite->oam.matrixNum = 1; - } + // 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 & 0x8) + reflectionSprite->oam.matrixNum = 1; } } } -u8 sub_8126B54(void) +u8 CreateWarpArrowSprite(void) { u8 spriteId; struct Sprite *sprite; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8] /*gFieldEffectSpriteTemplate_Arrow*/, 0, 0, 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -162,12 +168,12 @@ u8 sub_8126B54(void) return spriteId; } -void objid_set_invisible(u8 spriteId) +void SetSpriteInvisible(u8 spriteId) { gSprites[spriteId].invisible = TRUE; } -void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) +void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) { s16 x2; s16 y2; @@ -183,18 +189,18 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) sprite->invisible = FALSE; sprite->data[0] = x; sprite->data[1] = y; - StartSpriteAnim(sprite, animNum - 1); + StartSpriteAnim(sprite, direction - 1); } } -const u8 gUnknown_08401E32[] = { +const u8 gShadowEffectTemplateIds[] = { 0, 1, 2, 3 }; -const u16 gUnknown_08401E36[] = { +const u16 gShadowVerticalOffsets[] = { 4, 4, 4, @@ -203,42 +209,47 @@ const u16 gUnknown_08401E36[] = { u32 FldEff_Shadow(void) { - u8 mapObjectId; - const struct MapObjectGraphicsInfo *graphicsInfo; + u8 eventObjectId; + const struct EventObjectGraphicsInfo *graphicsInfo; u8 spriteId; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94); + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[eventObjectId].graphicsId); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].data[0] = gFieldEffectArguments[0]; gSprites[spriteId].data[1] = gFieldEffectArguments[1]; gSprites[spriteId].data[2] = gFieldEffectArguments[2]; - gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; + gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; } return 0; } -void oamc_shadow(struct Sprite *sprite) +void UpdateShadowFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId)) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } else { - mapObject = &gMapObjects[mapObjectId]; - linkedSprite = &gSprites[mapObject->spriteId]; + eventObject = &gEventObjects[eventObjectId]; + linkedSprite = &gSprites[eventObject->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = linkedSprite->pos1.y + sprite->data[3]; - if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F)) + if (!eventObject->active || !eventObject->hasShadow + || MetatileBehavior_IsPokeGrass(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->previousMetatileBehavior) + || MetatileBehavior_IsReflective(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsReflective(eventObject->previousMetatileBehavior)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } @@ -275,14 +286,14 @@ u32 FldEff_TallGrass(void) return 0; } -void unc_grass_normal(struct Sprite *sprite) +void UpdateTallGrassFieldEffect(struct Sprite *sprite) { u8 mapNum; u8 mapGroup; u8 metatileBehavior; u8 localId; - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; mapNum = sprite->data[5] >> 8; mapGroup = sprite->data[5]; @@ -296,23 +307,21 @@ void unc_grass_normal(struct Sprite *sprite) mapNum = sprite->data[3]; mapGroup = sprite->data[4]; metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) + if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_TALL_GRASS); } else { - mapObject = &gMapObjects[mapObjectId]; - if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2])) - { + eventObject = &gEventObjects[eventObjectId]; + if ((eventObject->currentCoords.x != sprite->data[1] || eventObject->currentCoords.y != sprite->data[2]) && (eventObject->previousCoords.x != sprite->data[1] || eventObject->previousCoords.y != sprite->data[2])) sprite->data[7] = TRUE; - } + metatileBehavior = 0; if (sprite->animCmdIndex == 0) - { metatileBehavior = 4; - } - sub_806487C(sprite, 0); + + UpdateEventObjectSpriteVisibility(sprite, 0); sub_812882C(sprite, sprite->data[0], metatileBehavior); } } @@ -335,7 +344,7 @@ u32 FldEff_JumpTallGrass(void) return 0; } -u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) { struct Sprite *sprite; u8 i; @@ -345,12 +354,11 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) if (gSprites[i].inUse) { sprite = &gSprites[i]; - if (sprite->callback == unc_grass_normal && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4])) - { + if (sprite->callback == UpdateTallGrassFieldEffect && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4])) return i; - } } } + return MAX_SPRITES; } @@ -384,14 +392,14 @@ u32 FldEff_LongGrass(void) return 0; } -void unc_grass_tall(struct Sprite *sprite) +void UpdateLongGrassFieldEffect(struct Sprite *sprite) { u8 mapNum; u8 mapGroup; u8 metatileBehavior; u8 localId; - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; mapNum = sprite->data[5] >> 8; mapGroup = sprite->data[5]; @@ -405,18 +413,18 @@ void unc_grass_tall(struct Sprite *sprite) mapNum = sprite->data[3]; mapGroup = sprite->data[4]; metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) + if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_LONG_GRASS); } else { - mapObject = &gMapObjects[mapObjectId]; - if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2])) + eventObject = &gEventObjects[eventObjectId]; + if ((eventObject->currentCoords.x != sprite->data[1] || eventObject->currentCoords.y != sprite->data[2]) && (eventObject->previousCoords.x != sprite->data[1] || eventObject->previousCoords.y != sprite->data[2])) { sprite->data[7] = TRUE; } - sub_806487C(sprite, 0); + UpdateEventObjectSpriteVisibility(sprite, 0); sub_812882C(sprite, sprite->data[0], 0); } } @@ -441,44 +449,44 @@ u32 FldEff_JumpLongGrass(void) u32 FldEff_ShortGrass(void) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; u8 spriteId; struct Sprite *sprite; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - mapObject = &gMapObjects[mapObjectId]; + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + eventObject = &gEventObjects[eventObjectId]; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0); if (spriteId != MAX_SPRITES) { sprite = &(gSprites[spriteId]); sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->oam.priority = gSprites[eventObject->spriteId].oam.priority; sprite->data[0] = gFieldEffectArguments[0]; sprite->data[1] = gFieldEffectArguments[1]; sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; - sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; + sprite->data[3] = gSprites[eventObject->spriteId].pos1.x; + sprite->data[4] = gSprites[eventObject->spriteId].pos1.y; } return 0; } -void sub_8127334(struct Sprite *sprite) +void UpdateShortGrassFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; + u8 eventObjectId; s16 x; s16 y; - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId) || !gEventObjects[eventObjectId].inShortGrass) { FieldEffectStop(sprite, FLDEFF_SHORT_GRASS); } else { - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); - linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[eventObjectId].graphicsId); + linkedSprite = &gSprites[gEventObjects[eventObjectId].spriteId]; y = linkedSprite->pos1.y; x = linkedSprite->pos1.x; if (x != sprite->data[3] || y != sprite->data[4]) @@ -495,7 +503,7 @@ void sub_8127334(struct Sprite *sprite) sprite->pos2.y = (graphicsInfo->height >> 1) - 8; sprite->subpriority = linkedSprite->subpriority - 1; sprite->oam.priority = linkedSprite->oam.priority; - sub_806487C(sprite, linkedSprite->invisible); + UpdateEventObjectSpriteVisibility(sprite, linkedSprite->invisible); } } @@ -553,30 +561,30 @@ u32 FldEff_BikeTireTracks(void) return spriteId; } -void (*const gUnknown_08401E40[])(struct Sprite *) = { - sub_81275A0, - sub_81275C4 +void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = { + FadeFootprintsTireTracks_Step0, + FadeFootprintsTireTracks_Step1 }; -void sub_8127584(struct Sprite *sprite) +void UpdateFootprintsTireTracksFieldEffect(struct Sprite *sprite) { - gUnknown_08401E40[sprite->data[0]](sprite); + gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite); } -static void sub_81275A0(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) { + // Wait 40 frames before the flickering starts. if (++sprite->data[1] > 40) - { sprite->data[0] = 1; - } - sub_806487C(sprite, FALSE); + + UpdateEventObjectSpriteVisibility(sprite, FALSE); } -static void sub_81275C4(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) { sprite->invisible ^= 1; - sprite->data[1] ++; - sub_806487C(sprite, sprite->invisible); + sprite->data[1]++; + UpdateEventObjectSpriteVisibility(sprite, sprite->invisible); if (sprite->data[1] > 56) { FieldEffectStop(sprite, sprite->data[7]); @@ -585,22 +593,22 @@ static void sub_81275C4(struct Sprite *sprite) u32 FldEff_Splash(void) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; u8 spriteId; struct Sprite *sprite; - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - mapObject = &gMapObjects[mapObjectId]; + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + eventObject = &gEventObjects[eventObjectId]; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - linkedSprite = &gSprites[mapObject->spriteId]; + linkedSprite = &gSprites[eventObject->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->data[0] = gFieldEffectArguments[0]; sprite->data[1] = gFieldEffectArguments[1]; @@ -611,19 +619,19 @@ u32 FldEff_Splash(void) return 0; } -void sub_81276B4(struct Sprite *sprite) +void UpdateSplashFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; + u8 eventObjectId; - if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId)) + if (sprite->animEnded || TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId)) { FieldEffectStop(sprite, FLDEFF_SPLASH); } else { - sprite->pos1.x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; - sprite->pos1.y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; - sub_806487C(sprite, FALSE); + sprite->pos1.x = gSprites[gEventObjects[eventObjectId].spriteId].pos1.x; + sprite->pos1.y = gSprites[gEventObjects[eventObjectId].spriteId].pos1.y; + UpdateEventObjectSpriteVisibility(sprite, FALSE); } } @@ -665,22 +673,22 @@ u32 FldEff_JumpBigSplash(void) u32 FldEff_FeetInFlowingWater(void) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; u8 spriteId; struct Sprite *sprite; - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - mapObject = &gMapObjects[mapObjectId]; + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + eventObject = &gEventObjects[eventObjectId]; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); sprite = &gSprites[spriteId]; - sprite->callback = sub_81278D8; + sprite->callback = UpdateFeetInFlowingWaterFieldEffect; sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->oam.priority = gSprites[eventObject->spriteId].oam.priority; sprite->data[0] = gFieldEffectArguments[0]; sprite->data[1] = gFieldEffectArguments[1]; sprite->data[2] = gFieldEffectArguments[2]; @@ -692,28 +700,28 @@ u32 FldEff_FeetInFlowingWater(void) return 0; } -static void sub_81278D8(struct Sprite *sprite) +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; + u8 eventObjectId; struct Sprite *linkedSprite; - struct MapObject *mapObject; + struct EventObject *eventObject; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId) || !gEventObjects[eventObjectId].inShallowFlowingWater) { FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); } else { - mapObject = &gMapObjects[mapObjectId]; - linkedSprite = &gSprites[mapObject->spriteId]; + eventObject = &gEventObjects[eventObjectId]; + linkedSprite = &gSprites[eventObject->spriteId]; sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = linkedSprite->pos1.y; sprite->subpriority = linkedSprite->subpriority; - sub_806487C(sprite, FALSE); - if (mapObject->coords2.x != sprite->data[3] || mapObject->coords2.y != sprite->data[4]) + UpdateEventObjectSpriteVisibility(sprite, FALSE); + if (eventObject->currentCoords.x != sprite->data[3] || eventObject->currentCoords.y != sprite->data[4]) { - sprite->data[3] = mapObject->coords2.x; - sprite->data[4] = mapObject->coords2.y; + sprite->data[3] = eventObject->currentCoords.x; + sprite->data[4] = eventObject->currentCoords.y; if (!sprite->invisible) { PlaySE(SE_MIZU); @@ -740,46 +748,46 @@ u32 FldEff_Ripple(void) u32 FldEff_HotSpringsWater(void) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; u8 spriteId; struct Sprite *sprite; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - mapObject = &gMapObjects[mapObjectId]; + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + eventObject = &gEventObjects[eventObjectId]; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->oam.priority = gSprites[eventObject->spriteId].oam.priority; sprite->data[0] = gFieldEffectArguments[0]; sprite->data[1] = gFieldEffectArguments[1]; sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; - sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; + sprite->data[3] = gSprites[eventObject->spriteId].pos1.x; + sprite->data[4] = gSprites[eventObject->spriteId].pos1.y; } return 0; } -void sub_8127A7C(struct Sprite *sprite) +void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; - const struct MapObjectGraphicsInfo *graphicsInfo; + u8 eventObjectId; + const struct EventObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId) || !gEventObjects[eventObjectId].inHotSprings) { FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER); } else { - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); - linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[eventObjectId].graphicsId); + linkedSprite = &gSprites[gEventObjects[eventObjectId].spriteId]; sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 8; sprite->subpriority = linkedSprite->subpriority - 1; - sub_806487C(sprite, FALSE); + UpdateEventObjectSpriteVisibility(sprite, FALSE); } } @@ -851,7 +859,7 @@ u32 FldEff_Unknown22(void) return 0; } -void ash(s16 x, s16 y, u16 c, s16 d) +void StartAshFieldEffect(s16 x, s16 y, u16 c, s16 d) { gFieldEffectArguments[0] = x; gFieldEffectArguments[1] = y; @@ -886,44 +894,40 @@ u32 FldEff_Ash(void) return 0; } -void (*const gUnknown_08401E48[])(struct Sprite *) = { - sub_8127DA0, - sub_8127DD0, - sub_8127E30 +void (*const gAshFieldEffectFuncs[])(struct Sprite *) = { + UpdateAshFieldEffect_Step0, + UpdateAshFieldEffect_Step1, + UpdateAshFieldEffect_Step2 }; -void sub_8127D84(struct Sprite *sprite) +void UpdateAshFieldEffect(struct Sprite *sprite) { - gUnknown_08401E48[sprite->data[0]](sprite); + gAshFieldEffectFuncs[sprite->data[0]](sprite); } -static void sub_8127DA0(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step0(struct Sprite *sprite) { sprite->invisible = TRUE; sprite->animPaused = TRUE; if (--sprite->data[4] == 0) - { sprite->data[0] = 1; - } } -static void sub_8127DD0(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step1(struct Sprite *sprite) { sprite->invisible = FALSE; sprite->animPaused = FALSE; MapGridSetMetatileIdAt(sprite->data[1], sprite->data[2], sprite->data[3]); CurrentMapDrawMetatileAt(sprite->data[1], sprite->data[2]); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE; + gEventObjects[gPlayerAvatar.eventObjectId].triggerGroundEffectsOnMove = TRUE; sprite->data[0] = 2; } -static void sub_8127E30(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step2(struct Sprite *sprite) { - sub_806487C(sprite, FALSE); + UpdateEventObjectSpriteVisibility(sprite, FALSE); if (sprite->animEnded) - { FieldEffectStop(sprite, FLDEFF_ASH); - } } u32 FldEff_SurfBlob(void) @@ -978,37 +982,42 @@ static u8 sub_8127F70(struct Sprite *sprite) return (sprite->data[0] & 0xF00) >> 8; } -void sub_8127F7C(struct Sprite *sprite) +void UpdateSurfBlobFieldEffect(struct Sprite *sprite) { - struct MapObject *mapObject; + struct EventObject *eventObject; struct Sprite *linkedSprite; - mapObject = &gMapObjects[sprite->data[2]]; - linkedSprite = &gSprites[mapObject->spriteId]; - sub_8127FD4(mapObject, sprite); - sub_812800C(mapObject, sprite); - sub_81280A0(mapObject, linkedSprite, sprite); + eventObject = &gEventObjects[sprite->data[2]]; + linkedSprite = &gSprites[eventObject->spriteId]; + sub_8127FD4(eventObject, sprite); + sub_812800C(eventObject, sprite); + sub_81280A0(eventObject, linkedSprite, sprite); sprite->oam.priority = linkedSprite->oam.priority; } -static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite) +static void sub_8127FD4(struct EventObject *eventObject, struct Sprite *sprite) { - u8 unk_8041E54[] = {0, 0, 1, 2, 3}; + u8 surfBlobDirectionAnims[] = { + 0, // DIR_NONE + 0, // DIR_SOUTH + 1, // DIR_NORTH + 2, // DIR_WEST + 3, // DIR_EAST + }; + if (sub_8127F64(sprite) == 0) - { - StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]); - } + StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[eventObject->movementDirection]); } #ifdef NONMATCHING -static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) +static void sub_812800C(struct EventObject *eventObject, struct Sprite *sprite) { s16 x; s16 y; u8 i; - x = mapObject->coords2.x; - y = mapObject->coords2.y; + x = eventObject->currentCoords.x; + y = eventObject->currentCoords.y; if (sprite->pos2.y == 0 && (x != sprite->data[6] || y != sprite->data[7])) { sprite->data[5] = sprite->pos2.y; @@ -1024,7 +1033,7 @@ static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) } } #else -__attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) +NAKED static void sub_812800C(struct EventObject *eventObject, struct Sprite *sprite) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -1105,7 +1114,7 @@ __attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, stru } #endif -static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite) +static void sub_81280A0(struct EventObject *eventObject, struct Sprite *linkedSprite, struct Sprite *sprite) { u16 unk_8401E5A[] = {3, 7}; u8 v0 = sub_8127F5C(sprite); @@ -1184,46 +1193,46 @@ u32 FldEff_Dust(void) u32 FldEff_SandPile(void) { - u8 mapObjectId; - struct MapObject *mapObject; + u8 eventObjectId; + struct EventObject *eventObject; u8 spriteId; struct Sprite *sprite; - const struct MapObjectGraphicsInfo *graphicsInfo; + const struct EventObjectGraphicsInfo *graphicsInfo; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - mapObject = &gMapObjects[mapObjectId]; + eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + eventObject = &gEventObjects[eventObjectId]; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->oam.priority = gSprites[eventObject->spriteId].oam.priority; sprite->data[0] = gFieldEffectArguments[0]; sprite->data[1] = gFieldEffectArguments[1]; sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; - sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; + sprite->data[3] = gSprites[eventObject->spriteId].pos1.x; + sprite->data[4] = gSprites[eventObject->spriteId].pos1.y; sprite->pos2.y = (graphicsInfo->height >> 1) - 2; SeekSpriteAnim(sprite, 2); } return 0; } -void sub_81282E0(struct Sprite *sprite) +void UpdateSandPileFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; + u8 eventObjectId; s16 x; s16 y; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &eventObjectId) || !gEventObjects[eventObjectId].inSandPile) { FieldEffectStop(sprite, FLDEFF_SAND_PILE); } else { - y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; - x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; + y = gSprites[gEventObjects[eventObjectId].spriteId].pos1.y; + x = gSprites[gEventObjects[eventObjectId].spriteId].pos1.x; if (x != sprite->data[3] || y != sprite->data[4]) { sprite->data[3] = x; @@ -1235,8 +1244,8 @@ void sub_81282E0(struct Sprite *sprite) } sprite->pos1.x = x; sprite->pos1.y = y; - sprite->subpriority = gSprites[gMapObjects[mapObjectId].spriteId].subpriority; - sub_806487C(sprite, FALSE); + sprite->subpriority = gSprites[gEventObjects[eventObjectId].spriteId].subpriority; + UpdateEventObjectSpriteVisibility(sprite, FALSE); } } @@ -1256,12 +1265,12 @@ u32 FldEff_Bubbles(void) return 0; } -void sub_8128410(struct Sprite *sprite) +void UpdateBubblesFieldEffect(struct Sprite *sprite) { sprite->data[0] += 0x80; sprite->data[0] &= 0x100; sprite->pos1.y -= sprite->data[0] >> 8; - sub_806487C(sprite, FALSE); + UpdateEventObjectSpriteVisibility(sprite, FALSE); if (sprite->invisible || sprite->animEnded) { FieldEffectStop(sprite, FLDEFF_BUBBLES); @@ -1288,19 +1297,19 @@ u32 FldEff_BerryTreeGrowthSparkle(void) u32 FldEff_TreeDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04); + return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4); } u32 FldEff_MountainDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03); + return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3); } u32 FldEff_SandDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02); + return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2); } static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) @@ -1308,7 +1317,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) u8 spriteId; struct Sprite *sprite; - if (TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId)) + if (TryGetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId)) { FieldEffectActiveListRemove(fldEff); return MAX_SPRITES; @@ -1327,19 +1336,19 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) return spriteId; } -void sub_81285AC(struct Sprite *sprite) +void UpdateDisguiseFieldEffect(struct Sprite *sprite) { - u8 mapObjectId; - const struct MapObjectGraphicsInfo *graphicsInfo; + u8 eventObjectId; + const struct EventObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[2], sprite->data[3], sprite->data[4], &mapObjectId)) + if (TryGetEventObjectIdByLocalIdAndMap(sprite->data[2], sprite->data[3], sprite->data[4], &eventObjectId)) { FieldEffectStop(sprite, sprite->data[1]); } - // else { - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); - linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + + graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[eventObjectId].graphicsId); + linkedSprite = &gSprites[gEventObjects[eventObjectId].spriteId]; sprite->invisible = linkedSprite->invisible; sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16; @@ -1357,34 +1366,33 @@ void sub_81285AC(struct Sprite *sprite) { FieldEffectStop(sprite, sprite->data[1]); } - // } } -void sub_812869C(struct MapObject *mapObject) +void sub_812869C(struct EventObject *eventObject) { - if (mapObject->mapobj_unk_21 == 1) + if (eventObject->directionSequenceIndex == 1) { - gSprites[mapObject->mapobj_unk_1A].data[0] ++; + gSprites[eventObject->fieldEffectSpriteId].data[0]++; } } -bool8 sub_81286C4(struct MapObject *mapObject) +bool8 sub_81286C4(struct EventObject *eventObject) { struct Sprite *sprite; - if (mapObject->mapobj_unk_21 == 2) + if (eventObject->directionSequenceIndex == 2) { return TRUE; } - if (mapObject->mapobj_unk_21 == 0) + if (eventObject->directionSequenceIndex == 0) { return TRUE; } - sprite = &gSprites[mapObject->mapobj_unk_1A]; + sprite = &gSprites[eventObject->fieldEffectSpriteId]; if (sprite->data[7]) { - mapObject->mapobj_unk_21 = 2; - sprite->data[0] ++; + eventObject->directionSequenceIndex = 2; + sprite->data[0]++; return TRUE; } return FALSE; @@ -1406,27 +1414,25 @@ u32 FldEff_Sparkle(void) return 0; } -void sub_8128774(struct Sprite *sprite) +void UpdateSparkleFieldEffect(struct Sprite *sprite) { if (sprite->data[0] == 0) { if (sprite->animEnded) { sprite->invisible = TRUE; - sprite->data[0] ++; + sprite->data[0]++; } + if (sprite->data[0] == 0) - { return; - } } - if (++ sprite->data[1] >= 35) - { + + if (++sprite->data[1] > 34) FieldEffectStop(sprite, FLDEFF_SPARKLE); - } } -void sub_81287C4(struct Sprite *sprite) +void UpdateJumpLandingFieldEffect(struct Sprite *sprite) { if (sprite->animEnded) { @@ -1434,21 +1440,17 @@ void sub_81287C4(struct Sprite *sprite) } else { - sub_806487C(sprite, FALSE); + UpdateEventObjectSpriteVisibility(sprite, FALSE); SetObjectSubpriorityByZCoord(sprite->data[0], sprite, 0); } } -void sub_8128800(struct Sprite *sprite) +void WaitFieldEffectSpriteAnim(struct Sprite *sprite) { if (sprite->animEnded) - { FieldEffectStop(sprite, sprite->data[0]); - } else - { - sub_806487C(sprite, FALSE); - } + UpdateEventObjectSpriteVisibility(sprite, FALSE); } #ifdef NONMATCHING @@ -1462,18 +1464,18 @@ static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) s16 ly; s16 ylo; s16 yhi; - struct MapObject *mapObject; // r4 - const struct MapObjectGraphicsInfo *graphicsInfo; // destroyed + struct EventObject *eventObject; // r4 + const struct EventObjectGraphicsInfo *graphicsInfo; // destroyed struct Sprite *linkedSprite; // r5 SetObjectSubpriorityByZCoord(z, sprite, offset); for (i = 0; i < 16; i ++) { - mapObject = &gMapObjects[i]; - if (mapObject->active) + eventObject = &gEventObjects[i]; + if (eventObject->active) { - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - linkedSprite = &gSprites[mapObject->spriteId]; + graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); + linkedSprite = &gSprites[eventObject->spriteId]; xhi = sprite->pos1.x + sprite->centerToCornerVecX; xlo = sprite->pos1.x - sprite->centerToCornerVecX; lx = linkedSprite->pos1.x; @@ -1496,7 +1498,7 @@ static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) } } #else -__attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) +NAKED static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) { asm_unified("\tpush {r4-r7,lr}\n" "\tadds r6, r0, 0\n" @@ -1512,14 +1514,14 @@ __attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 "\tlsls r0, r7, 3\n" "\tadds r0, r7\n" "\tlsls r0, 2\n" - "\tldr r1, _081288DC @ =gMapObjects\n" + "\tldr r1, _081288DC @ =gEventObjects\n" "\tadds r4, r0, r1\n" "\tldrb r0, [r4]\n" "\tlsls r0, 31\n" "\tcmp r0, 0\n" "\tbeq _081288E4\n" "\tldrb r0, [r4, 0x5]\n" - "\tbl GetFieldObjectGraphicsInfo\n" + "\tbl GetEventObjectGraphicsInfo\n" "\tldrb r1, [r4, 0x4]\n" "\tlsls r0, r1, 4\n" "\tadds r0, r1\n" @@ -1586,7 +1588,7 @@ __attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 "\tstrb r0, [r2]\n" "\tb _081288EE\n" "\t.align 2, 0\n" - "_081288DC: .4byte gMapObjects\n" + "_081288DC: .4byte gEventObjects\n" "_081288E0: .4byte gSprites\n" "_081288E4:\n" "\tadds r0, r7, 0x1\n" |