summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/field_effect_helpers.c43
1 files changed, 40 insertions, 3 deletions
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index b71a36122..599441c3d 100644
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -272,7 +272,7 @@ void oamc_shadow(struct Sprite *sprite)
if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
{
- FieldEffectStop(sprite, 3);
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
}
else
{
@@ -283,7 +283,7 @@ void oamc_shadow(struct Sprite *sprite)
sprite->pos1.y = linkedSprite->pos1.y + sprite->data3;
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))
{
- FieldEffectStop(sprite, 3);
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
}
}
}
@@ -341,7 +341,7 @@ void unc_grass_normal(struct Sprite *sprite)
metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
{
- FieldEffectStop(sprite, 4);
+ FieldEffectStop(sprite, FLDEFF_TALL_GRASS);
}
else
{
@@ -426,3 +426,40 @@ bool8 FldEff_LongGrass(void)
}
return FALSE;
}
+
+void unc_grass_tall(struct Sprite *sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapNum = sprite->data5 >> 8;
+ mapGroup = sprite->data5;
+ if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
+ {
+ sprite->data1 -= gCamera.x;
+ sprite->data2 -= gCamera.y;
+ sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ }
+ localId = sprite->data3 >> 8;
+ mapNum = sprite->data3;
+ mapGroup = sprite->data4;
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_LONG_GRASS);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ {
+ sprite->data7 = TRUE;
+ }
+ sub_806487C(sprite, 0);
+ sub_812882C(sprite, sprite->data0, 0);
+ }
+}