diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/field_effect_helpers.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 2c4685bf4..9f12fd6a4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -33,7 +33,7 @@ static void sub_81275C4(struct Sprite *); /*static*/ void sub_8127DD0(struct Sprite *); /*static*/ void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); -/*static*/ void sub_81278D8(struct Sprite *); +static void sub_81278D8(struct Sprite *); // .rodata @@ -732,3 +732,33 @@ u8 FldEff_FeetInFlowingWater(void) } return 0; } + +static void sub_81278D8(struct Sprite *sprite) +{ + u8 mapObjectId; + struct Sprite *linkedSprite; + struct MapObject *mapObject; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19) + { + FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); + } + else + { + mapObject = &gMapObjects[mapObjectId]; + linkedSprite = &gSprites[mapObject->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->data3 || mapObject->coords2.y != sprite->data4) + { + sprite->data3 = mapObject->coords2.x; + sprite->data4 = mapObject->coords2.y; + if (!sprite->invisible) + { + PlaySE(SE_MIZU); + } + } + } +} |