#include "global.h" #include "asm_fieldmap.h" extern u32 gUnknown_08376008[]; void FieldObjectUpdateMetatileBehaviors(struct MapObject *); void GetGroundEffectFlags_Reflection(struct MapObject *, u32 *); void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *, u32 *); void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *, u32 *); void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *, u32 *); void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *, u32 *); void GetGroundEffectFlags_Tracks(struct MapObject *, u32 *); void GetGroundEffectFlags_SandHeap(struct MapObject *, u32 *); void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *, u32 *); void GetGroundEffectFlags_Puddle(struct MapObject *, u32 *); void GetGroundEffectFlags_Ripple(struct MapObject *, u32 *); void GetGroundEffectFlags_ShortGrass(struct MapObject *, u32 *); void GetGroundEffectFlags_HotSprings(struct MapObject *, u32 *); void GetGroundEffectFlags_Seaweed(struct MapObject *, u32 *); void GetGroundEffectFlags_JumpLanding(struct MapObject *, u32 *); u8 FieldObjectCheckForReflectiveSurface(struct MapObject *); void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_Reflection(mapObj, flags); GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags); GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags); GetGroundEffectFlags_SandHeap(mapObj, flags); GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); GetGroundEffectFlags_ShortGrass(mapObj, flags); GetGroundEffectFlags_HotSprings(mapObj, flags); } void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_Reflection(mapObj, flags); GetGroundEffectFlags_TallGrassOnBeginStep(mapObj, flags); GetGroundEffectFlags_LongGrassOnBeginStep(mapObj, flags); GetGroundEffectFlags_Tracks(mapObj, flags); GetGroundEffectFlags_SandHeap(mapObj, flags); GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); GetGroundEffectFlags_Puddle(mapObj, flags); GetGroundEffectFlags_ShortGrass(mapObj, flags); GetGroundEffectFlags_HotSprings(mapObj, flags); } void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); GetGroundEffectFlags_SandHeap(mapObj, flags); GetGroundEffectFlags_Puddle(mapObj, flags); GetGroundEffectFlags_Ripple(mapObj, flags); GetGroundEffectFlags_ShortGrass(mapObj, flags); GetGroundEffectFlags_HotSprings(mapObj, flags); GetGroundEffectFlags_Seaweed(mapObj, flags); GetGroundEffectFlags_JumpLanding(mapObj, flags); } void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) { mapObj->mapobj_unk_1F = MapGridGetMetatileBehaviorAt(mapObj->coords3.x, mapObj->coords3.y); mapObj->mapobj_unk_1E = MapGridGetMetatileBehaviorAt(mapObj->coords2.x, mapObj->coords2.y); } void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) { u32 reflectionFlags[2] = { 0x00000020, 0x00000010 }; u8 type; type = FieldObjectCheckForReflectiveSurface(mapObj); if (type) { if (!mapObj->mapobj_bit_17) { mapObj->mapobj_bit_17 = 0; mapObj->mapobj_bit_17 = 1; *flags |= reflectionFlags[type - 1]; } } else { mapObj->mapobj_bit_17 = 0; } }