summaryrefslogtreecommitdiff
path: root/src/field_effect_helpers.c
diff options
context:
space:
mode:
authorSphericalIce <sphericalice@outlook.com>2021-01-19 23:21:50 +0000
committerSphericalIce <sphericalice@outlook.com>2021-01-19 23:21:50 +0000
commit6dd973012bce48295e14fcb1c203c4ca72a36cd4 (patch)
treecf8f1cca9f73ee1c900a69d5e3d889e744bc0266 /src/field_effect_helpers.c
parent2dfaba9472c933f5a659a38fa2581ecf3d3f0ef7 (diff)
Correct ground effect flag names for reflections & document sprite data usage
Diffstat (limited to 'src/field_effect_helpers.c')
-rwxr-xr-xsrc/field_effect_helpers.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index 2322232b8..67102a83b 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -32,6 +32,11 @@ static void CreateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sp
static void sub_8155850(struct Sprite *);
static u32 ShowDisguiseFieldEffect(u8, u8, u8);
+#define sReflectionObjEventId data[0]
+#define sReflectionObjEventLocalId data[1]
+#define sReflectionVerticalOffset data[2]
+#define sIsStillReflection data[7]
+
void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection)
{
struct Sprite *reflectionSprite;
@@ -46,9 +51,9 @@ void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, boo
reflectionSprite->affineAnims = gDummySpriteAffineAnimTable;
reflectionSprite->affineAnimBeginning = TRUE;
reflectionSprite->subspriteMode = SUBSPRITES_OFF;
- reflectionSprite->data[0] = sprite->data[0];
- reflectionSprite->data[1] = objectEvent->localId;
- reflectionSprite->data[7] = stillReflection;
+ reflectionSprite->sReflectionObjEventId = sprite->data[0];
+ reflectionSprite->sReflectionObjEventLocalId = objectEvent->localId;
+ reflectionSprite->sIsStillReflection = stillReflection;
LoadObjectReflectionPalette(objectEvent, reflectionSprite);
if (!stillReflection)
@@ -60,19 +65,19 @@ static s16 GetReflectionVerticalOffset(struct ObjectEvent *objectEvent)
return GetObjectEventGraphicsInfo(objectEvent->graphicsId)->height - 2;
}
-static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *reflectionSprite)
{
u8 bridgeType;
u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 };
- sprite->data[2] = 0;
+ reflectionSprite->sReflectionVerticalOffset = 0;
if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
{
- sprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1];
- LoadObjectHighBridgeReflectionPalette(objectEvent, sprite->oam.paletteNum);
+ reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1];
+ LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum);
}
else
{
- LoadObjectRegularReflectionPalette(objectEvent, sprite->oam.paletteNum);
+ LoadObjectRegularReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum);
}
}
@@ -118,9 +123,9 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
struct ObjectEvent *objectEvent;
struct Sprite *mainSprite;
- objectEvent = &gObjectEvents[reflectionSprite->data[0]];
+ objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId];
mainSprite = &gSprites[objectEvent->spriteId];
- if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->data[1])
+ if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId)
{
reflectionSprite->inUse = FALSE;
}
@@ -135,8 +140,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
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(objectEvent) + reflectionSprite->data[2];
+ reflectionSprite->pos1.y = mainSprite->pos1.y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->sReflectionVerticalOffset;
reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX;
reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY;
reflectionSprite->pos2.x = mainSprite->pos2.x;
@@ -146,8 +150,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
if (objectEvent->hideReflection == TRUE)
reflectionSprite->invisible = TRUE;
- // Check if the reflection is not still.
- if (reflectionSprite->data[7] == FALSE)
+ if (reflectionSprite->sIsStillReflection == FALSE)
{
// Sets the reflection sprite's rot/scale matrix to the appropriate
// matrix based on whether or not the main sprite is horizontally flipped.
@@ -159,6 +162,11 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
}
}
+#undef sReflectionObjEventId
+#undef sReflectionObjEventLocalId
+#undef sReflectionVerticalOffset
+#undef sIsStillReflection
+
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
u8 CreateWarpArrowSprite(void)