diff options
Diffstat (limited to 'src')
34 files changed, 1177 insertions, 1207 deletions
diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 892be1029..41e84a8a0 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -6,7 +6,6 @@ #include "event_data.h" #include "field_control_avatar.h" #include "field_fadetransition.h" -#include "field_map_obj_helpers.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_weather.h" diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index c56fe7576..481bc66c5 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -5,7 +5,7 @@ #include "decompress.h" #include "easy_chat.h" #include "event_data.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_message_box.h" #include "graphics.h" #include "menu.h" diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c index 97819322c..55e377c21 100644 --- a/src/engine/naming_screen.c +++ b/src/engine/naming_screen.c @@ -3,7 +3,7 @@ #include "data2.h" #include "graphics.h" #include "field_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "main.h" #include "menu.h" diff --git a/src/field/berry.c b/src/field/berry.c index 088267ad0..7d22b50b1 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -1,7 +1,7 @@ #include "global.h" #include "berry.h" #include "field_control_avatar.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "fieldmap.h" #include "item.h" #include "item_menu.h" diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index bb937ea43..9e518c06a 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -2,7 +2,7 @@ #include "berry_tag_screen.h" #include "berry.h" #include "decompress.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "item_menu.h" #include "constants/items.h" #include "item_use.h" diff --git a/src/field/bike.c b/src/field/bike.c index 8db01b4b4..2d763cb14 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -1,6 +1,6 @@ #include "global.h" #include "bike.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "constants/flags.h" diff --git a/src/field/field_map_obj.c b/src/field/evobjmv.c index 77b4c8b5c..9c282e266 100644 --- a/src/field/field_map_obj.c +++ b/src/field/evobjmv.c @@ -1,12 +1,10 @@ #include "global.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "berry.h" #include "event_data.h" #include "field_camera.h" #include "field_effect.h" #include "field_effect_helpers.h" -#include "field_ground_effect.h" -#include "field_map_obj_helpers.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "palette.h" @@ -2460,7 +2458,7 @@ u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x extern void sub_8064970(struct Sprite *); extern void sub_8060470(s16 *, s16 *, s16, s16); -extern void InitObjectPriorityByZCoord(); +void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z); u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction) { @@ -3347,7 +3345,7 @@ u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) } extern u8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *); -extern void sub_8064820(struct Sprite *, s16); +void sub_8064820(struct Sprite *, s16); u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) { @@ -8353,3 +8351,1149 @@ void UpdateMapObjSpriteVisibility(struct MapObject *mapObject, struct Sprite *sp sprite->invisible = 1; } } + +static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8); +static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8); +static void DoTracksGroundEffect_BikeTireTracks( +struct MapObject *mapObj, struct Sprite *sprite, u8); +void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); +u8 GetReflectionTypeByMetatileBehavior(u32 behavior); + +static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) +{ + FieldObjectUpdateMetatileBehaviors(mapObj); + GetGroundEffectFlags_Reflection(mapObj, flags); + GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags); + GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags); + GetGroundEffectFlags_SandPile(mapObj, flags); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_ShortGrass(mapObj, flags); + GetGroundEffectFlags_HotSprings(mapObj, flags); +} + +static 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_SandPile(mapObj, flags); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_Puddle(mapObj, flags); + GetGroundEffectFlags_ShortGrass(mapObj, flags); + GetGroundEffectFlags_HotSprings(mapObj, flags); +} + +static void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) +{ + FieldObjectUpdateMetatileBehaviors(mapObj); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_SandPile(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 = 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; + } +} + +void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x1; +} + +void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x2; +} + +void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x4; +} + +void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x8; +} + +void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + { + *flags |= 0x100; + } + else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) + || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) + { + *flags |= 0x80; + } +} + +void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_20) + { + mapObj->mapobj_bit_20 = 0; + mapObj->mapobj_bit_20 = 1; + *flags |= 0x800; + } + } + else + { + mapObj->mapobj_bit_20 = 0; + } +} + +void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags) +{ + if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) + || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) + { + if (!mapObj->mapobj_bit_19) + { + mapObj->mapobj_bit_19 = 0; + mapObj->mapobj_bit_19 = 1; + *flags |= 0x40; + } + } + else + { + mapObj->mapobj_bit_19 = 0; + } +} + +void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) + { + *flags |= 0x400; + } +} + +void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_HasRipples(mapObj->mapobj_unk_1E)) + *flags |= 0x200; +} + +void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_18) + { + mapObj->mapobj_bit_18 = 0; + mapObj->mapobj_bit_18 = 1; + *flags |= 0x20000; + } + } + else + { + mapObj->mapobj_bit_18 = 0; + } +} + +void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_21) + { + mapObj->mapobj_bit_21 = 0; + mapObj->mapobj_bit_21 = 1; + *flags |= 0x40000; + } + } + else + { + mapObj->mapobj_bit_21 = 0; + } +} + +void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsSeaweed(mapObj->mapobj_unk_1E)) + *flags |= 0x80000; +} + +void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) +{ + typedef bool8 (*MetatileFunc)(u8); + + static const MetatileFunc metatileFuncs[] = { + MetatileBehavior_IsTallGrass, + MetatileBehavior_IsLongGrass, + MetatileBehavior_IsPuddle, + MetatileBehavior_IsSurfableWaterOrUnderwater, + MetatileBehavior_IsShallowFlowingWater, + MetatileBehavior_IsATile, + }; + + static const u32 jumpLandingFlags[] = { + 0x00001000, // Landing in tall grass + 0x00002000, // Landing in long grass + 0x00004000, // Landing on puddle + 0x00008000, // Landing on surfable water or underwater + 0x00004000, // Landing on shallow flowing water + 0x00010000, // Landing on any other type of ground + }; + + if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) + { + u8 i; + + for (i = 0; i < 6; i++) + { + if (metatileFuncs[i](mapObj->mapobj_unk_1E)) + { + *flags |= jumpLandingFlags[i]; + return; + } + } + } +} + +u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + + // ceil div by tile width? + s16 width = (info->width + 8) >> 4; + s16 height = (info->height + 8) >> 4; + s16 i; + s16 j; + u8 result; + u8 b; + s16 one; + +#define RETURN_REFLECTION_TYPE_AT(x, y) \ + b = MapGridGetMetatileBehaviorAt(x, y); \ + result = GetReflectionTypeByMetatileBehavior(b); \ + if (result != 0) \ + return result; + + for (i = 0, one = 1; i < height; i++) + { + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x, mapObj->coords3.y + one + i) + for (j = 1; j < width; j++) + { + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x + j, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x - j, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x + j, mapObj->coords3.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x - j, mapObj->coords3.y + one + i) + } + } + return 0; + +#undef RETURN_REFLECTION_TYPE_AT +} + +u8 GetReflectionTypeByMetatileBehavior(u32 behavior) +{ + if (MetatileBehavior_IsIce(behavior)) + return 1; + else if (MetatileBehavior_IsReflective(behavior)) + return 2; + else + return 0; +} + +u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) +{ + static bool8 (*const unknown_08376040[])(u8) = { + MetatileBehavior_IsJumpSouth, + MetatileBehavior_IsJumpNorth, + MetatileBehavior_IsJumpWest, + MetatileBehavior_IsJumpEast, + }; + + u8 b; + u8 index = z; + + if (index == 0) + return 0; + else if (index > 4) + index -= 4; + + index--; + b = MapGridGetMetatileBehaviorAt(x, y); + + if (unknown_08376040[index](b) == 1) + return index + 1; + + return 0; +} + +void FieldObjectSetSpriteOamTableForLongGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_4) + return; + + if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + return; + + if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1F)) + return; + + sprite->subspriteTableNum = 4; + + if (ZCoordToPriority(mapObj->elevation) == 1) + sprite->subspriteTableNum = 5; +} + +bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) +{ + u8 mapZ; + + if (z == 0) + return FALSE; + + mapZ = MapGridGetZCoordAt(x, y); + + if (mapZ == 0 || mapZ == 0xF) + return FALSE; + + if (mapZ != z) + return TRUE; + + return FALSE; +} + +static const u8 sUnknown_08376050[] = { + 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is directly the inverse of gFieldObjectPriorities_08376070. +static const u8 sFieldObjectPriorities_08376060[] = { + 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is the inverse of gFieldObjectPriorities_08376060. +// 1 = Above player sprite +// 2 = Below player sprite +static const u8 sFieldObjectPriorities_08376070[] = { + 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, +}; + +void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_26) + return; + + FieldObjectUpdateZCoord(mapObj); + + sprite->subspriteTableNum = sFieldObjectPriorities_08376070[mapObj->elevation]; + sprite->oam.priority = sFieldObjectPriorities_08376060[mapObj->elevation]; +} + +void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z) +{ + sprite->subspriteTableNum = sFieldObjectPriorities_08376070[z]; + sprite->oam.priority = sFieldObjectPriorities_08376060[z]; +} + +u8 ZCoordToPriority(u8 z) +{ + return sFieldObjectPriorities_08376060[z]; +} + +void FieldObjectUpdateZCoord(struct MapObject *mapObj) +{ + u8 z = MapGridGetZCoordAt(mapObj->coords2.x, mapObj->coords2.y); + u8 z2 = MapGridGetZCoordAt(mapObj->coords3.x, mapObj->coords3.y); + + if (z == 0xF || z2 == 0xF) + return; + + mapObj->mapobj_unk_0B_0 = z; + + if (z != 0 && z != 0xF) + mapObj->elevation = z; +} + +void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b) +{ + s32 tmp = sprite->centerToCornerVecY; + u32 tmpa = *(u16 *)&sprite->pos1.y; + u32 tmpb = *(u16 *)&gSpriteCoordOffsetY; + s32 tmp2 = (tmpa - tmp) + tmpb; + u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2; + sprite->subpriority = tmp3 + sUnknown_08376050[a] + b; +} + +void FieldObjectUpdateSubpriority(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_26) + return; + + SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); +} + +bool8 AreZCoordsCompatible(u8 a, u8 b) +{ + if (a == 0 || b == 0) + return TRUE; + + if (a != b) + return FALSE; + + return TRUE; +} + +void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; + gFieldEffectArguments[7] = 1; + FieldEffectStart(FLDEFF_TALL_GRASS); +} + +void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; + gFieldEffectArguments[7] = 0; + FieldEffectStart(FLDEFF_TALL_GRASS); +} + +void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; + gFieldEffectArguments[7] = 1; + FieldEffectStart(FLDEFF_LONG_GRASS); +} + +void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; + gFieldEffectArguments[7] = 0; + FieldEffectStart(FLDEFF_LONG_GRASS); +} + +void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite) +{ + SetUpReflection(mapObj, sprite, 0); +} + +void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite) +{ + SetUpReflection(mapObj, sprite, 1); +} + +void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj); +} + +static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { + nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks, +}; + +void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + gUnknown_08376080[info->tracks](mapObj, sprite, 0); +} + +void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + gUnknown_08376080[info->tracks](mapObj, sprite, 1); +} + +static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ +} + +static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 sandFootprints_FieldEffectData[2] = { + FLDEFF_SAND_FOOTPRINTS, + FLDEFF_DEEP_SAND_FOOTPRINTS + }; + + gFieldEffectArguments[0] = mapObj->coords3.x; + gFieldEffectArguments[1] = mapObj->coords3.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = mapObj->mapobj_unk_18; + FieldEffectStart(sandFootprints_FieldEffectData[a]); +} + +static void DoTracksGroundEffect_BikeTireTracks( + struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 bikeTireTracks_Transitions[4][4] = { + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, + }; + + if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) + { + gFieldEffectArguments[0] = mapObj->coords3.x; + gFieldEffectArguments[1] = mapObj->coords3.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = + bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; + FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); + } +} + +void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite) +{ + DoRippleFieldEffect(mapObj, sprite); +} + +void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SPLASH, mapObj); +} + +void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SAND_PILE, mapObj); +} + +void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + u8 spriteId; + + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); + + spriteId = sub_8126FF0( + mapObj->localId, mapObj->mapNum, mapObj->mapGroup, mapObj->coords2.x, mapObj->coords2.y); + + if (spriteId == MAX_SPRITES) + GroundEffect_SpawnOnTallGrass(mapObj, sprite); +} + +void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + FieldEffectStart(FLDEFF_JUMP_LONG_GRASS); +} + +void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH); +} + +void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH); +} + +void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_DUST); +} + +void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SHORT_GRASS, mapObj); +} + +void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_HOT_SPRINGS_WATER, mapObj); +} + +void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) +{ + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + FieldEffectStart(FLDEFF_BUBBLES); +} + +static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = { + GroundEffect_SpawnOnTallGrass, + sub_8063E94, + sub_8063EE0, + sub_8063F2C, + GroundEffect_WaterReflection, + GroundEffect_IceReflection, + GroundEffect_FlowingWater, + sub_8063FA0, + sub_8063FCC, + GroundEffect_Ripple, + GroundEffect_StepOnPuddle, + GroundEffect_SandPile, + GroundEffect_JumpOnTallGrass, + GroundEffect_JumpOnLongGrass, + GroundEffect_JumpOnShallowWater, + GroundEffect_JumpOnWater, + GroundEffect_JumpLandingDust, + GroundEffect_ShortGrass, + GroundEffect_HotSprings, + GroundEffect_Seaweed +}; + +void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(gUnknown_083760A0); i++, flags >>= 1) + if (flags & 1) + gUnknown_083760A0[i](mapObj, sprite); +} + +void filters_out_some_ground_effects(struct MapObject *mapObj, u32 *flags) +{ + if (mapObj->mapobj_bit_4) + { + mapObj->mapobj_bit_18 = 0; + mapObj->mapobj_bit_20 = 0; + mapObj->mapobj_bit_19 = 0; + mapObj->mapobj_bit_21 = 0; + *flags &= 0xFFF9F7BD; + } +} + +void FilterOutStepOnPuddleGroundEffectIfJumping(struct MapObject *mapObj, u32 *flags) +{ + if (mapObj->mapobj_bit_5) + *flags &= 0xFFFFFBFF; +} + +void DoGroundEffects_OnSpawn(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_2) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnSpawn(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_2 = 0; + mapObj->mapobj_bit_4 = 0; + } +} + +void DoGroundEffects_OnBeginStep(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_2) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnBeginStep(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + filters_out_some_ground_effects(mapObj, &flags); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_2 = 0; + mapObj->mapobj_bit_4 = 0; + } +} + +void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_3) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnFinishStep(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + FilterOutStepOnPuddleGroundEffectIfJumping(mapObj, &flags); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_3 = 0; + mapObj->mapobj_bit_5 = 0; + } +} + +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); + +void Step1(struct Sprite *sprite, u8 dir); +void Step2(struct Sprite *sprite, u8 dir); +void Step3(struct Sprite *sprite, u8 dir); +void Step4(struct Sprite *sprite, u8 dir); +void Step8(struct Sprite *sprite, u8 dir); + +const SpriteStepFunc Unknown_83760F0[] = { + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1 +}; + +const SpriteStepFunc Unknown_8376130[] = { + Step2, + Step2, + Step2, + Step2, + Step2, + Step2, + Step2, + Step2 +}; + +const SpriteStepFunc Unknown_8376150[] = { + Step2, + Step3, + Step3, + Step2, + Step3, + Step3 +}; + +const SpriteStepFunc Unknown_8376168[] = { + Step4, + Step4, + Step4, + Step4 +}; + +const SpriteStepFunc Unknown_8376178[] = { + Step8, + Step8 +}; + +const SpriteStepFunc *const gUnknown_08376180[] = { + Unknown_83760F0, + Unknown_8376130, + Unknown_8376150, + Unknown_8376168, + Unknown_8376178 +}; + +const s16 gUnknown_08376194[] = { + 16, 8, 6, 4, 2 +}; + +const s8 Unknown_837619E[] = { + -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 +}; + +const s8 Unknown_83761AE[] = { + 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 +}; + +const s8 Unknown_83761BE[] = { + -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 +}; + +const s8 *const gUnknown_083761D0[] = { + Unknown_837619E, + Unknown_83761AE, + Unknown_83761BE +}; + +bool8 FreezeMapObject(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) + { + return TRUE; + } + else + { + mapObject->mapobj_bit_8 = 1; + mapObject->mapobj_bit_23 = gSprites[mapObject->spriteId].animPaused; + mapObject->mapobj_bit_24 = gSprites[mapObject->spriteId].affineAnimPaused; + gSprites[mapObject->spriteId].animPaused = 1; + gSprites[mapObject->spriteId].affineAnimPaused = 1; + return FALSE; + } +} + +void FreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void FreezeMapObjectsExceptOne(u8 a1) +{ + u8 i; + for (i = 0; i < 16; i++) + if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void UnfreezeMapObject(struct MapObject *mapObject) +{ + if (mapObject->active && mapObject->mapobj_bit_8) + { + mapObject->mapobj_bit_8 = 0; + gSprites[mapObject->spriteId].animPaused = mapObject->mapobj_bit_23; + gSprites[mapObject->spriteId].affineAnimPaused = mapObject->mapobj_bit_24; + } +} + +void UnfreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active) + UnfreezeMapObject(&gMapObjects[i]); +} + +void Step1(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += gDirectionToVector[dir].x; + sprite->pos1.y += gDirectionToVector[dir].y; +} + +void Step2(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y; +} + +void Step3(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x + (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y + (u16) gDirectionToVector[dir].y; +} + +void Step4(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 4 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 4 * (u16) gDirectionToVector[dir].y; +} + +void Step8(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 8 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 8 * (u16) gDirectionToVector[dir].y; +} + +void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = 0; +} + +bool8 obj_npc_ministep(struct Sprite *sprite) +{ + if (sprite->data[5] >= gUnknown_08376194[sprite->data[4]]) + return FALSE; + + gUnknown_08376180[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]); + + sprite->data[5]++; + + if (sprite->data[5] < gUnknown_08376194[sprite->data[4]]) + return FALSE; + + return TRUE; +} + +void sub_806467C(struct Sprite *sprite, u8 a2) +{ + sprite->data[3] = a2; + sprite->data[4] = 0; + sprite->data[5] = 0; +} + +bool8 sub_806468C(struct Sprite *sprite) +{ + if (!(sprite->data[4] & 1)) + { + Step1(sprite, sprite->data[3]); + sprite->data[5]++; + } + + sprite->data[4]++; + + if (sprite->data[5] > 15) + return TRUE; + else + return FALSE; +} + +s16 sub_80646C8(s16 a1, u8 a2) +{ + return gUnknown_083761D0[a2][a1]; +} + +void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) +{ + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = a4; + sprite->data[6] = 0; +} + +u8 sub_8064704(struct Sprite *sprite) +{ + s16 v5[3] = {0x10, 0x10, 0x20}; + u8 v6[3] = {0, 0, 1}; + u8 v2 = 0; + + if (sprite->data[4]) + Step1(sprite, sprite->data[3]); + + sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); + + sprite->data[6]++; + + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) + v2 = 1; + + if (sprite->data[6] >= v5[sprite->data[4]]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +u8 sub_806478C(struct Sprite *sprite) +{ + s16 v5[3] = {0x20, 0x20, 0x40}; + u8 v6[3] = {1, 1, 2}; + u8 v2 = 0; + + if (sprite->data[4] && !(sprite->data[6] & 1)) + Step1(sprite, sprite->data[3]); + + sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); + + sprite->data[6]++; + + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) + v2 = 1; + + if (sprite->data[6] >= v5[sprite->data[4]]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +void sub_8064820(struct Sprite *sprite, s16 a2) +{ + sprite->data[3] = a2; +} + +bool8 sub_8064824(struct Sprite *sprite) +{ + sprite->data[3]--; + + if (sprite->data[3] == 0) + return TRUE; + else + return FALSE; +} + +void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->animNum = a2; + sprite->animPaused = 0 ; + SeekSpriteAnim(sprite, a3); +} + +bool8 sub_8064864(struct Sprite *sprite) +{ + if (sprite->animEnded) + return TRUE; + else + return FALSE; +} + +void sub_806487C(struct Sprite *sprite, bool8 invisible) +{ + u16 x, y; + s16 x2, y2; + + sprite->invisible = invisible; + + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } + else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + + x2 = x - (sprite->centerToCornerVecX >> 1); + y2 = y - (sprite->centerToCornerVecY >> 1); + + if ((s16)x > 255 || x2 < -16) + sprite->invisible = 1; + if ((s16)y > 175 || y2 < -16) + sprite->invisible = 1; +} + +void sub_8064970(struct Sprite *sprite) +{ + SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); + sub_806487C(sprite, 0); +} + +void sub_8064990(u8 a1, u8 dir) +{ + u8 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data[0] == a1) + { + u8 animNum = FieldObjectDirectionToImageAnimId(dir); + StartSpriteAnim(sprite, animNum); + break; + } + } +} + +u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) +{ + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); + return FieldEffectStart(fieldEffectId); +} + +void DoShadowFieldEffect(struct MapObject *mapObject) +{ + if (!mapObject->mapobj_bit_22) + { + mapObject->mapobj_bit_22 = 1; + oe_exec_and_other_stuff(FLDEFF_SHADOW, mapObject); + } +} + +void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + gFieldEffectArguments[0] = sprite->pos1.x; + gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; + gFieldEffectArguments[2] = 151; + gFieldEffectArguments[3] = 3; + FieldEffectStart(FLDEFF_RIPPLE); +} diff --git a/src/field/field_effect.c b/src/field/field_effect.c index 5ff89574b..384da4bd2 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -15,14 +15,12 @@ #include "constants/songs.h" #include "decoration.h" #include "field_player_avatar.h" -#include "field_map_obj_helpers.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "metatile_behavior.h" #include "field_camera.h" #include "field_effect.h" #include "field_fadetransition.h" #include "fieldmap.h" -#include "field_map_obj.h" #include "util.h" #include "field_effect_helpers.h" diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c index 165829a55..3e1fb1c13 100644 --- a/src/field/field_effect_helpers.c +++ b/src/field/field_effect_helpers.c @@ -4,12 +4,10 @@ #include "metatile_behavior.h" #include "constants/songs.h" #include "sound.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_camera.h" -#include "field_map_obj_helpers.h" #include "field_weather.h" #include "field_effect.h" -#include "field_ground_effect.h" #include "field_effect_helpers.h" static void sub_81269E0(struct Sprite *); diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c index 5014e97e3..4350f7960 100644 --- a/src/field/field_fadetransition.c +++ b/src/field/field_fadetransition.c @@ -4,8 +4,7 @@ #include "field_door.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "field_special_scene.h" #include "field_weather.h" diff --git a/src/field/field_ground_effect.c b/src/field/field_ground_effect.c deleted file mode 100644 index 25b678ff9..000000000 --- a/src/field/field_ground_effect.c +++ /dev/null @@ -1,772 +0,0 @@ -#include "global.h" -#include "field_ground_effect.h" -#include "field_effect.h" -#include "field_effect_helpers.h" -#include "field_map_obj_helpers.h" -#include "fieldmap.h" -#include "metatile_behavior.h" - -static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8); -static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8); -static void DoTracksGroundEffect_BikeTireTracks( - struct MapObject *mapObj, struct Sprite *sprite, u8); -void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); -void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite); -void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite); -void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite); -void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite); -void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); -void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); -u8 GetReflectionTypeByMetatileBehavior(u32 behavior); - -static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) -{ - FieldObjectUpdateMetatileBehaviors(mapObj); - GetGroundEffectFlags_Reflection(mapObj, flags); - GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags); - GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags); - GetGroundEffectFlags_SandPile(mapObj, flags); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_ShortGrass(mapObj, flags); - GetGroundEffectFlags_HotSprings(mapObj, flags); -} - -static 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_SandPile(mapObj, flags); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_Puddle(mapObj, flags); - GetGroundEffectFlags_ShortGrass(mapObj, flags); - GetGroundEffectFlags_HotSprings(mapObj, flags); -} - -static void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) -{ - FieldObjectUpdateMetatileBehaviors(mapObj); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_SandPile(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 = 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; - } -} - -void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x1; -} - -void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x2; -} - -void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x4; -} - -void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x8; -} - -void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) - { - *flags |= 0x100; - } - else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) - || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) - { - *flags |= 0x80; - } -} - -void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_20) - { - mapObj->mapobj_bit_20 = 0; - mapObj->mapobj_bit_20 = 1; - *flags |= 0x800; - } - } - else - { - mapObj->mapobj_bit_20 = 0; - } -} - -void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags) -{ - if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) - || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) - { - if (!mapObj->mapobj_bit_19) - { - mapObj->mapobj_bit_19 = 0; - mapObj->mapobj_bit_19 = 1; - *flags |= 0x40; - } - } - else - { - mapObj->mapobj_bit_19 = 0; - } -} - -void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) - { - *flags |= 0x400; - } -} - -void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_HasRipples(mapObj->mapobj_unk_1E)) - *flags |= 0x200; -} - -void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_18) - { - mapObj->mapobj_bit_18 = 0; - mapObj->mapobj_bit_18 = 1; - *flags |= 0x20000; - } - } - else - { - mapObj->mapobj_bit_18 = 0; - } -} - -void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_21) - { - mapObj->mapobj_bit_21 = 0; - mapObj->mapobj_bit_21 = 1; - *flags |= 0x40000; - } - } - else - { - mapObj->mapobj_bit_21 = 0; - } -} - -void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsSeaweed(mapObj->mapobj_unk_1E)) - *flags |= 0x80000; -} - -void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) -{ - typedef bool8 (*MetatileFunc)(u8); - - static const MetatileFunc metatileFuncs[] = { - MetatileBehavior_IsTallGrass, - MetatileBehavior_IsLongGrass, - MetatileBehavior_IsPuddle, - MetatileBehavior_IsSurfableWaterOrUnderwater, - MetatileBehavior_IsShallowFlowingWater, - MetatileBehavior_IsATile, - }; - - static const u32 jumpLandingFlags[] = { - 0x00001000, // Landing in tall grass - 0x00002000, // Landing in long grass - 0x00004000, // Landing on puddle - 0x00008000, // Landing on surfable water or underwater - 0x00004000, // Landing on shallow flowing water - 0x00010000, // Landing on any other type of ground - }; - - if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) - { - u8 i; - - for (i = 0; i < 6; i++) - { - if (metatileFuncs[i](mapObj->mapobj_unk_1E)) - { - *flags |= jumpLandingFlags[i]; - return; - } - } - } -} - -u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) -{ - const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); - - // ceil div by tile width? - s16 width = (info->width + 8) >> 4; - s16 height = (info->height + 8) >> 4; - s16 i; - s16 j; - u8 result; - u8 b; - s16 one; - -#define RETURN_REFLECTION_TYPE_AT(x, y) \ - b = MapGridGetMetatileBehaviorAt(x, y); \ - result = GetReflectionTypeByMetatileBehavior(b); \ - if (result != 0) \ - return result; - - for (i = 0, one = 1; i < height; i++) - { - RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x, mapObj->coords2.y + one + i) - RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x, mapObj->coords3.y + one + i) - for (j = 1; j < width; j++) - { - RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x + j, mapObj->coords2.y + one + i) - RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x - j, mapObj->coords2.y + one + i) - RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x + j, mapObj->coords3.y + one + i) - RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x - j, mapObj->coords3.y + one + i) - } - } - return 0; - -#undef RETURN_REFLECTION_TYPE_AT -} - -u8 GetReflectionTypeByMetatileBehavior(u32 behavior) -{ - if (MetatileBehavior_IsIce(behavior)) - return 1; - else if (MetatileBehavior_IsReflective(behavior)) - return 2; - else - return 0; -} - -u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) -{ - static bool8 (*const unknown_08376040[])(u8) = { - MetatileBehavior_IsJumpSouth, - MetatileBehavior_IsJumpNorth, - MetatileBehavior_IsJumpWest, - MetatileBehavior_IsJumpEast, - }; - - u8 b; - u8 index = z; - - if (index == 0) - return 0; - else if (index > 4) - index -= 4; - - index--; - b = MapGridGetMetatileBehaviorAt(x, y); - - if (unknown_08376040[index](b) == 1) - return index + 1; - - return 0; -} - -void FieldObjectSetSpriteOamTableForLongGrass(struct MapObject *mapObj, struct Sprite *sprite) -{ - if (mapObj->mapobj_bit_4) - return; - - if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) - return; - - if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1F)) - return; - - sprite->subspriteTableNum = 4; - - if (ZCoordToPriority(mapObj->elevation) == 1) - sprite->subspriteTableNum = 5; -} - -bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) -{ - u8 mapZ; - - if (z == 0) - return FALSE; - - mapZ = MapGridGetZCoordAt(x, y); - - if (mapZ == 0 || mapZ == 0xF) - return FALSE; - - if (mapZ != z) - return TRUE; - - return FALSE; -} - -static const u8 sUnknown_08376050[] = { - 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 -}; - -// Each byte corresponds to a sprite priority for a field object. -// This is directly the inverse of gFieldObjectPriorities_08376070. -static const u8 sFieldObjectPriorities_08376060[] = { - 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 -}; - -// Each byte corresponds to a sprite priority for a field object. -// This is the inverse of gFieldObjectPriorities_08376060. -// 1 = Above player sprite -// 2 = Below player sprite -static const u8 sFieldObjectPriorities_08376070[] = { - 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, -}; - -void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite) -{ - if (mapObj->mapobj_bit_26) - return; - - FieldObjectUpdateZCoord(mapObj); - - sprite->subspriteTableNum = sFieldObjectPriorities_08376070[mapObj->elevation]; - sprite->oam.priority = sFieldObjectPriorities_08376060[mapObj->elevation]; -} - -void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z) -{ - sprite->subspriteTableNum = sFieldObjectPriorities_08376070[z]; - sprite->oam.priority = sFieldObjectPriorities_08376060[z]; -} - -u8 ZCoordToPriority(u8 z) -{ - return sFieldObjectPriorities_08376060[z]; -} - -void FieldObjectUpdateZCoord(struct MapObject *mapObj) -{ - u8 z = MapGridGetZCoordAt(mapObj->coords2.x, mapObj->coords2.y); - u8 z2 = MapGridGetZCoordAt(mapObj->coords3.x, mapObj->coords3.y); - - if (z == 0xF || z2 == 0xF) - return; - - mapObj->mapobj_unk_0B_0 = z; - - if (z != 0 && z != 0xF) - mapObj->elevation = z; -} - -void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b) -{ - s32 tmp = sprite->centerToCornerVecY; - u32 tmpa = *(u16 *)&sprite->pos1.y; - u32 tmpb = *(u16 *)&gSpriteCoordOffsetY; - s32 tmp2 = (tmpa - tmp) + tmpb; - u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2; - sprite->subpriority = tmp3 + sUnknown_08376050[a] + b; -} - -void FieldObjectUpdateSubpriority(struct MapObject *mapObj, struct Sprite *sprite) -{ - if (mapObj->mapobj_bit_26) - return; - - SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); -} - -bool8 AreZCoordsCompatible(u8 a, u8 b) -{ - if (a == 0 || b == 0) - return TRUE; - - if (a != b) - return FALSE; - - return TRUE; -} - -void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; - gFieldEffectArguments[5] = mapObj->mapGroup; - gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; - gFieldEffectArguments[7] = 1; - FieldEffectStart(FLDEFF_TALL_GRASS); -} - -void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; - gFieldEffectArguments[5] = mapObj->mapGroup; - gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; - gFieldEffectArguments[7] = 0; - FieldEffectStart(FLDEFF_TALL_GRASS); -} - -void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; - gFieldEffectArguments[5] = mapObj->mapGroup; - gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; - gFieldEffectArguments[7] = 1; - FieldEffectStart(FLDEFF_LONG_GRASS); -} - -void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; - gFieldEffectArguments[5] = mapObj->mapGroup; - gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; - gFieldEffectArguments[7] = 0; - FieldEffectStart(FLDEFF_LONG_GRASS); -} - -void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite) -{ - SetUpReflection(mapObj, sprite, 0); -} - -void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite) -{ - SetUpReflection(mapObj, sprite, 1); -} - -void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite) -{ - oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj); -} - -static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { - nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks, -}; - -void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite) -{ - const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); - gUnknown_08376080[info->tracks](mapObj, sprite, 0); -} - -void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite) -{ - const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); - gUnknown_08376080[info->tracks](mapObj, sprite, 1); -} - -static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a) -{ -} - -static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) -{ - // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) - u16 sandFootprints_FieldEffectData[2] = { - FLDEFF_SAND_FOOTPRINTS, - FLDEFF_DEEP_SAND_FOOTPRINTS - }; - - gFieldEffectArguments[0] = mapObj->coords3.x; - gFieldEffectArguments[1] = mapObj->coords3.y; - gFieldEffectArguments[2] = 149; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = mapObj->mapobj_unk_18; - FieldEffectStart(sandFootprints_FieldEffectData[a]); -} - -static void DoTracksGroundEffect_BikeTireTracks( - struct MapObject *mapObj, struct Sprite *sprite, u8 a) -{ - // Specifies which bike track shape to show next. - // For example, when the bike turns from up to right, it will show - // a track that curves to the right. - // Each 4-byte row corresponds to the initial direction of the bike, and - // each byte in that row is for the next direction of the bike in the order - // of down, up, left, right. - static const u8 bikeTireTracks_Transitions[4][4] = { - 1, 2, 7, 8, - 1, 2, 6, 5, - 5, 8, 3, 4, - 6, 7, 3, 4, - }; - - if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) - { - gFieldEffectArguments[0] = mapObj->coords3.x; - gFieldEffectArguments[1] = mapObj->coords3.y; - gFieldEffectArguments[2] = 149; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = - bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; - FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); - } -} - -void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite) -{ - DoRippleFieldEffect(mapObj, sprite); -} - -void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite) -{ - oe_exec_and_other_stuff(FLDEFF_SPLASH, mapObj); -} - -void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite) -{ - oe_exec_and_other_stuff(FLDEFF_SAND_PILE, mapObj); -} - -void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) -{ - u8 spriteId; - - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); - - spriteId = sub_8126FF0( - mapObj->localId, mapObj->mapNum, mapObj->mapGroup, mapObj->coords2.x, mapObj->coords2.y); - - if (spriteId == MAX_SPRITES) - GroundEffect_SpawnOnTallGrass(mapObj, sprite); -} - -void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = 2; - FieldEffectStart(FLDEFF_JUMP_LONG_GRASS); -} - -void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH); -} - -void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH); -} - -void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - gFieldEffectArguments[2] = mapObj->elevation; - gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(FLDEFF_DUST); -} - -void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite) -{ - oe_exec_and_other_stuff(FLDEFF_SHORT_GRASS, mapObj); -} - -void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite) -{ - oe_exec_and_other_stuff(FLDEFF_HOT_SPRINGS_WATER, mapObj); -} - -void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) -{ - gFieldEffectArguments[0] = mapObj->coords2.x; - gFieldEffectArguments[1] = mapObj->coords2.y; - FieldEffectStart(FLDEFF_BUBBLES); -} - -static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = { - GroundEffect_SpawnOnTallGrass, - sub_8063E94, - sub_8063EE0, - sub_8063F2C, - GroundEffect_WaterReflection, - GroundEffect_IceReflection, - GroundEffect_FlowingWater, - sub_8063FA0, - sub_8063FCC, - GroundEffect_Ripple, - GroundEffect_StepOnPuddle, - GroundEffect_SandPile, - GroundEffect_JumpOnTallGrass, - GroundEffect_JumpOnLongGrass, - GroundEffect_JumpOnShallowWater, - GroundEffect_JumpOnWater, - GroundEffect_JumpLandingDust, - GroundEffect_ShortGrass, - GroundEffect_HotSprings, - GroundEffect_Seaweed -}; - -void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(gUnknown_083760A0); i++, flags >>= 1) - if (flags & 1) - gUnknown_083760A0[i](mapObj, sprite); -} - -void filters_out_some_ground_effects(struct MapObject *mapObj, u32 *flags) -{ - if (mapObj->mapobj_bit_4) - { - mapObj->mapobj_bit_18 = 0; - mapObj->mapobj_bit_20 = 0; - mapObj->mapobj_bit_19 = 0; - mapObj->mapobj_bit_21 = 0; - *flags &= 0xFFF9F7BD; - } -} - -void FilterOutStepOnPuddleGroundEffectIfJumping(struct MapObject *mapObj, u32 *flags) -{ - if (mapObj->mapobj_bit_5) - *flags &= 0xFFFFFBFF; -} - -void DoGroundEffects_OnSpawn(struct MapObject *mapObj, struct Sprite *sprite) -{ - u32 flags; - - if (mapObj->mapobj_bit_2) - { - flags = 0; - FieldObjectUpdateZCoordAndPriority(mapObj, sprite); - GetAllGroundEffectFlags_OnSpawn(mapObj, &flags); - FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); - sub_8064218(mapObj, sprite, flags); - mapObj->mapobj_bit_2 = 0; - mapObj->mapobj_bit_4 = 0; - } -} - -void DoGroundEffects_OnBeginStep(struct MapObject *mapObj, struct Sprite *sprite) -{ - u32 flags; - - if (mapObj->mapobj_bit_2) - { - flags = 0; - FieldObjectUpdateZCoordAndPriority(mapObj, sprite); - GetAllGroundEffectFlags_OnBeginStep(mapObj, &flags); - FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); - filters_out_some_ground_effects(mapObj, &flags); - sub_8064218(mapObj, sprite, flags); - mapObj->mapobj_bit_2 = 0; - mapObj->mapobj_bit_4 = 0; - } -} - -void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprite) -{ - u32 flags; - - if (mapObj->mapobj_bit_3) - { - flags = 0; - FieldObjectUpdateZCoordAndPriority(mapObj, sprite); - GetAllGroundEffectFlags_OnFinishStep(mapObj, &flags); - FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); - FilterOutStepOnPuddleGroundEffectIfJumping(mapObj, &flags); - sub_8064218(mapObj, sprite, flags); - mapObj->mapobj_bit_3 = 0; - mapObj->mapobj_bit_5 = 0; - } -} diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c deleted file mode 100644 index 328b66ed2..000000000 --- a/src/field/field_map_obj_helpers.c +++ /dev/null @@ -1,387 +0,0 @@ -#include "global.h" -#include "field_map_obj_helpers.h" -#include "field_effect.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "sprite.h" - -typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); - -void Step1(struct Sprite *sprite, u8 dir); -void Step2(struct Sprite *sprite, u8 dir); -void Step3(struct Sprite *sprite, u8 dir); -void Step4(struct Sprite *sprite, u8 dir); -void Step8(struct Sprite *sprite, u8 dir); - -const SpriteStepFunc Unknown_83760F0[] = { - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1, - Step1 -}; - -const SpriteStepFunc Unknown_8376130[] = { - Step2, - Step2, - Step2, - Step2, - Step2, - Step2, - Step2, - Step2 -}; - -const SpriteStepFunc Unknown_8376150[] = { - Step2, - Step3, - Step3, - Step2, - Step3, - Step3 -}; - -const SpriteStepFunc Unknown_8376168[] = { - Step4, - Step4, - Step4, - Step4 -}; - -const SpriteStepFunc Unknown_8376178[] = { - Step8, - Step8 -}; - -const SpriteStepFunc *const gUnknown_08376180[] = { - Unknown_83760F0, - Unknown_8376130, - Unknown_8376150, - Unknown_8376168, - Unknown_8376178 -}; - -const s16 gUnknown_08376194[] = { - 16, 8, 6, 4, 2 -}; - -const s8 Unknown_837619E[] = { - -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 -}; - -const s8 Unknown_83761AE[] = { - 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 -}; - -const s8 Unknown_83761BE[] = { - -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 -}; - -const s8 *const gUnknown_083761D0[] = { - Unknown_837619E, - Unknown_83761AE, - Unknown_83761BE -}; - -bool8 FreezeMapObject(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) - { - return TRUE; - } - else - { - mapObject->mapobj_bit_8 = 1; - mapObject->mapobj_bit_23 = gSprites[mapObject->spriteId].animPaused; - mapObject->mapobj_bit_24 = gSprites[mapObject->spriteId].affineAnimPaused; - gSprites[mapObject->spriteId].animPaused = 1; - gSprites[mapObject->spriteId].affineAnimPaused = 1; - return FALSE; - } -} - -void FreezeMapObjects(void) -{ - u8 i; - for (i = 0; i < 16; i++) - if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) - FreezeMapObject(&gMapObjects[i]); -} - -void FreezeMapObjectsExceptOne(u8 a1) -{ - u8 i; - for (i = 0; i < 16; i++) - if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) - FreezeMapObject(&gMapObjects[i]); -} - -void UnfreezeMapObject(struct MapObject *mapObject) -{ - if (mapObject->active && mapObject->mapobj_bit_8) - { - mapObject->mapobj_bit_8 = 0; - gSprites[mapObject->spriteId].animPaused = mapObject->mapobj_bit_23; - gSprites[mapObject->spriteId].affineAnimPaused = mapObject->mapobj_bit_24; - } -} - -void UnfreezeMapObjects(void) -{ - u8 i; - for (i = 0; i < 16; i++) - if (gMapObjects[i].active) - UnfreezeMapObject(&gMapObjects[i]); -} - -void Step1(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += gDirectionToVector[dir].x; - sprite->pos1.y += gDirectionToVector[dir].y; -} - -void Step2(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y; -} - -void Step3(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x + (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y + (u16) gDirectionToVector[dir].y; -} - -void Step4(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 4 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 4 * (u16) gDirectionToVector[dir].y; -} - -void Step8(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 8 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 8 * (u16) gDirectionToVector[dir].y; -} - -void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) -{ - sprite->data[3] = a2; - sprite->data[4] = a3; - sprite->data[5] = 0; -} - -bool8 obj_npc_ministep(struct Sprite *sprite) -{ - if (sprite->data[5] >= gUnknown_08376194[sprite->data[4]]) - return FALSE; - - gUnknown_08376180[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]); - - sprite->data[5]++; - - if (sprite->data[5] < gUnknown_08376194[sprite->data[4]]) - return FALSE; - - return TRUE; -} - -void sub_806467C(struct Sprite *sprite, u8 a2) -{ - sprite->data[3] = a2; - sprite->data[4] = 0; - sprite->data[5] = 0; -} - -bool8 sub_806468C(struct Sprite *sprite) -{ - if (!(sprite->data[4] & 1)) - { - Step1(sprite, sprite->data[3]); - sprite->data[5]++; - } - - sprite->data[4]++; - - if (sprite->data[5] > 15) - return TRUE; - else - return FALSE; -} - -s16 sub_80646C8(s16 a1, u8 a2) -{ - return gUnknown_083761D0[a2][a1]; -} - -void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) -{ - sprite->data[3] = a2; - sprite->data[4] = a3; - sprite->data[5] = a4; - sprite->data[6] = 0; -} - -u8 sub_8064704(struct Sprite *sprite) -{ - s16 v5[3] = {0x10, 0x10, 0x20}; - u8 v6[3] = {0, 0, 1}; - u8 v2 = 0; - - if (sprite->data[4]) - Step1(sprite, sprite->data[3]); - - sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); - - sprite->data[6]++; - - if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) - v2 = 1; - - if (sprite->data[6] >= v5[sprite->data[4]]) - { - sprite->pos2.y = 0; - v2 = -1; - } - - return v2; -} - -u8 sub_806478C(struct Sprite *sprite) -{ - s16 v5[3] = {0x20, 0x20, 0x40}; - u8 v6[3] = {1, 1, 2}; - u8 v2 = 0; - - if (sprite->data[4] && !(sprite->data[6] & 1)) - Step1(sprite, sprite->data[3]); - - sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); - - sprite->data[6]++; - - if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) - v2 = 1; - - if (sprite->data[6] >= v5[sprite->data[4]]) - { - sprite->pos2.y = 0; - v2 = -1; - } - - return v2; -} - -void sub_8064820(struct Sprite *sprite, u16 a2) -{ - sprite->data[3] = a2; -} - -bool8 sub_8064824(struct Sprite *sprite) -{ - sprite->data[3]--; - - if (sprite->data[3] == 0) - return TRUE; - else - return FALSE; -} - -void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3) -{ - sprite->animNum = a2; - sprite->animPaused = 0 ; - SeekSpriteAnim(sprite, a3); -} - -bool8 sub_8064864(struct Sprite *sprite) -{ - if (sprite->animEnded) - return TRUE; - else - return FALSE; -} - -void sub_806487C(struct Sprite *sprite, bool8 invisible) -{ - u16 x, y; - s16 x2, y2; - - sprite->invisible = invisible; - - if (sprite->coordOffsetEnabled) - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - } - else - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - } - - x2 = x - (sprite->centerToCornerVecX >> 1); - y2 = y - (sprite->centerToCornerVecY >> 1); - - if ((s16)x > 255 || x2 < -16) - sprite->invisible = 1; - if ((s16)y > 175 || y2 < -16) - sprite->invisible = 1; -} - -void sub_8064970(struct Sprite *sprite) -{ - SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); - sub_806487C(sprite, 0); -} - -void sub_8064990(u8 a1, u8 dir) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data[0] == a1) - { - u8 animNum = FieldObjectDirectionToImageAnimId(dir); - StartSpriteAnim(sprite, animNum); - break; - } - } -} - -u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) -{ - FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); - return FieldEffectStart(fieldEffectId); -} - -void DoShadowFieldEffect(struct MapObject *mapObject) -{ - if (!mapObject->mapobj_bit_22) - { - mapObject->mapobj_bit_22 = 1; - oe_exec_and_other_stuff(FLDEFF_SHADOW, mapObject); - } -} - -void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) -{ - const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - gFieldEffectArguments[0] = sprite->pos1.x; - gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; - gFieldEffectArguments[2] = 151; - gFieldEffectArguments[3] = 3; - FieldEffectStart(FLDEFF_RIPPLE); -} diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index ba45e506d..573395766 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -4,9 +4,7 @@ #include "event_data.h" #include "field_effect.h" #include "field_effect_helpers.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "fieldmap.h" #include "main.h" #include "constants/map_objects.h" diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 67b652a57..f81f2e2f6 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -3,7 +3,7 @@ #include "event_data.h" #include "field_camera.h" #include "field_fadetransition.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_specials.h" #include "fieldmap.h" #include "main.h" diff --git a/src/field/field_specials.c b/src/field/field_specials.c index e56d9ddbb..81514c221 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -4,7 +4,7 @@ #include "fieldmap.h" #include "event_data.h" #include "battle_tower.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "region_map.h" #include "field_region_map.h" #include "field_message_box.h" diff --git a/src/field/field_weather.c b/src/field/field_weather.c index b6475d8ff..3053c58cb 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -1,6 +1,6 @@ #include "global.h" #include "blend_palette.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_weather.h" #include "palette.h" #include "random.h" diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c index 7406363a5..b7b5d85c7 100644 --- a/src/field/field_weather_effects.c +++ b/src/field/field_weather_effects.c @@ -1,5 +1,5 @@ #include "global.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_weather.h" #include "overworld.h" #include "random.h" diff --git a/src/field/fldeff_berrytree.c b/src/field/fldeff_berrytree.c index 0763c0314..43e29d7f0 100644 --- a/src/field/fldeff_berrytree.c +++ b/src/field/fldeff_berrytree.c @@ -1,5 +1,5 @@ #include "global.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "script.h" diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 513107729..32ed3c6a4 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -2,7 +2,7 @@ #include "fldeff_cut.h" #include "field_camera.h" #include "field_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "map_obj_lock.h" diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c index 37f024b9f..d6c5e6e8b 100644 --- a/src/field/fldeff_decoration.c +++ b/src/field/fldeff_decoration.c @@ -2,7 +2,7 @@ #include "event_data.h" #include "field_camera.h" #include "field_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "script.h" diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c index ec72885b5..8d5e7229d 100644 --- a/src/field/fldeff_recordmixing.c +++ b/src/field/fldeff_recordmixing.c @@ -1,5 +1,5 @@ #include "global.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "fldeff_recordmixing.h" #include "sprite.h" diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 6bad9f4d6..28b360e78 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -4,7 +4,7 @@ #include "data2.h" #include "decompress.h" #include "field_effect.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "graphics.h" #include "item.h" diff --git a/src/field/item_use.c b/src/field/item_use.c index cdad3f840..a5b091f0a 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -8,7 +8,6 @@ #include "event_data.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "field_map_obj_helpers.h" #include "field_player_avatar.h" #include "field_weather.h" #include "fieldmap.h" diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c index 954fcb446..ceda005c3 100644 --- a/src/field/map_obj_lock.c +++ b/src/field/map_obj_lock.c @@ -1,7 +1,6 @@ #include "global.h" #include "map_obj_lock.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "script_movement.h" #include "task.h" diff --git a/src/field/overworld.c b/src/field/overworld.c index a6d34e103..cff67d02e 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -9,9 +9,7 @@ #include "field_control_avatar.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c index 00008c69c..4804ffb0e 100644 --- a/src/field/rotating_gate.c +++ b/src/field/rotating_gate.c @@ -1,7 +1,7 @@ #include "global.h" #include "bike.h" #include "event_data.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "fieldmap.h" #include "constants/maps.h" #include "constants/songs.h" diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 36edbe472..fd5620a76 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -12,8 +12,7 @@ #include "field_door.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" diff --git a/src/field/script_movement.c b/src/field/script_movement.c index c7ce55171..b509ee23c 100644 --- a/src/field/script_movement.c +++ b/src/field/script_movement.c @@ -1,7 +1,6 @@ #include "global.h" #include "script_movement.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "evobjmv.h" #include "task.h" #include "util.h" diff --git a/src/field/shop.c b/src/field/shop.c index a228ff92f..65be76b81 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -16,7 +16,7 @@ #include "task.h" #include "tv.h" #include "scanline_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "item.h" diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 89cd404e9..43b0c29c2 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -1,7 +1,6 @@ #include "global.h" #include "start_menu.h" #include "event_data.h" -#include "field_map_obj_helpers.h" #include "field_player_avatar.h" #include "field_weather.h" #include "fieldmap.h" diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c index 3034b2b65..2ff1bd372 100644 --- a/src/field/trainer_see.c +++ b/src/field/trainer_see.c @@ -2,7 +2,7 @@ #include "trainer_see.h" #include "battle_setup.h" #include "field_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "script.h" #include "sprite.h" diff --git a/src/field/tv.c b/src/field/tv.c index efda4b925..79c4716cb 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -21,7 +21,7 @@ #include "battle.h" #include "link.h" #include "constants/easy_chat.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_specials.h" #include "item.h" #include "constants/items.h" diff --git a/src/rom6.c b/src/rom6.c index 62fbc987c..f1cd87164 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -2,7 +2,7 @@ #include "rom6.h" #include "braille_puzzles.h" #include "field_effect.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "field_player_avatar.h" #include "item_use.h" #include "pokemon_menu.h" diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c index d8e099130..2e596883f 100644 --- a/src/scene/cable_car.c +++ b/src/scene/cable_car.c @@ -13,7 +13,7 @@ #include "constants/songs.h" #include "decompress.h" #include "field_weather.h" -#include "field_map_obj.h" +#include "evobjmv.h" #include "scanline_effect.h" #include "event_data.h" #include "cable_car_util.h" |