From 83cedefad656a9a0a4f2fed53390d64fcba3ee35 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Fri, 22 Nov 2024 12:01:31 +0100 Subject: [PATCH] ground effect enum --- include/event_object_movement.h | 46 ++++++++------- src/event_object_movement.c | 101 +++++++++++++++++++++++++------- 2 files changed, 104 insertions(+), 43 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index d0b5b5597..d637c2d12 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -60,28 +60,30 @@ struct StepAnimTable typedef void (*MovementAction)(u8 direction); - -#define GROUND_EFFECT_TALL_GRASS_ON_SPAWN 0 -#define GROUND_EFFECT_TALL_GRASS_ON_MOVE 1 -#define GROUND_EFFECT_LONG_GRASS_ON_SPAWN 2 -#define GROUND_EFFECT_LONG_GRASS_ON_MOVE 3 -#define GROUND_EFFECT_WATER_REFLECTION 4 -#define GROUND_EFFECT_ICE_REFLECTION 5 -#define GROUND_EFFECT_SHALLOW_FLOWING_WATER 6 -#define GROUND_EFFECT_SAND 7 -#define GROUND_EFFECT_DEEP_SAND 8 -#define GROUND_EFFECT_RIPPLES 9 -#define GROUND_EFFECT_PUDDLE 10 -#define GROUND_EFFECT_SAND_PILE 11 -#define GROUND_EFFECT_LAND_IN_TALL_GRASS 12 -#define GROUND_EFFECT_LAND_IN_LONG_GRASS 13 -#define GROUND_EFFECT_LAND_IN_SHALLOW_WATER 14 -#define GROUND_EFFECT_LAND_IN_DEEP_WATER 15 -#define GROUND_EFFECT_LAND_ON_NORMAL_GROUND 16 -#define GROUND_EFFECT_SHORT_GRASS 17 -#define GROUND_EFFECT_HOT_SPRINGS 18 -#define GROUND_EFFECT_SEAWEED 19 -#define GROUND_EFFECT_SNOW 20 +enum GroundEffect +{ + GROUND_EFFECT_TALL_GRASS_ON_SPAWN, + GROUND_EFFECT_TALL_GRASS_ON_MOVE, + GROUND_EFFECT_LONG_GRASS_ON_SPAWN, + GROUND_EFFECT_LONG_GRASS_ON_MOVE, + GROUND_EFFECT_WATER_REFLECTION, + GROUND_EFFECT_ICE_REFLECTION, + GROUND_EFFECT_SHALLOW_FLOWING_WATER, + GROUND_EFFECT_SAND, + GROUND_EFFECT_DEEP_SAND, + GROUND_EFFECT_RIPPLES, + GROUND_EFFECT_PUDDLE, + GROUND_EFFECT_SAND_PILE, + GROUND_EFFECT_LAND_IN_TALL_GRASS, + GROUND_EFFECT_LAND_IN_LONG_GRASS, + GROUND_EFFECT_LAND_IN_SHALLOW_WATER, + GROUND_EFFECT_LAND_IN_DEEP_WATER, + GROUND_EFFECT_LAND_ON_NORMAL_GROUND, + GROUND_EFFECT_SHORT_GRASS, + GROUND_EFFECT_HOT_SPRINGS, + GROUND_EFFECT_SEAWEED, + GROUND_EFFECT_SNOW, +}; #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << GROUND_EFFECT_TALL_GRASS_ON_SPAWN) #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << GROUND_EFFECT_TALL_GRASS_ON_MOVE) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index fd69167a4..391d1e64f 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -66,12 +66,12 @@ static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *); static u8 GetReflectionTypeByMetatileBehavior(u32); static void InitObjectPriorityByElevation(struct Sprite *sprite, u8 elevation); static void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *); -static void DoTracksGroundEffect_None(struct ObjectEvent *, struct Sprite *, u32); -static void DoTracksGroundEffect_Footprints(struct ObjectEvent *, struct Sprite *, u32); -static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *, struct Sprite *, u32); -static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent*, struct Sprite*, u32); -static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent*, struct Sprite*, u32); -static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent*, struct Sprite*, u32); +static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); +static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); +static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); +static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); +static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect); static void DoRippleFieldEffect(struct ObjectEvent *, struct Sprite *); static void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *); static void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *); @@ -10268,7 +10268,7 @@ void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *spri StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent); } -static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) = +static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) = { [TRACKS_NONE] = DoTracksGroundEffect_None, [TRACKS_FOOT] = DoTracksGroundEffect_Footprints, @@ -10281,36 +10281,49 @@ static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, st void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FLDEFF_SAND_FOOTPRINTS); + sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, GROUND_EFFECT_SAND); } void GroundEffects_Snow(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FLDEFF_SNOW_FOOTPRINTS); + sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, GROUND_EFFECT_SNOW); } void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FLDEFF_DEEP_SAND_FOOTPRINTS); + sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, GROUND_EFFECT_DEEP_SAND); } -static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { } -static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { gFieldEffectArguments[0] = objEvent->previousCoords.x; gFieldEffectArguments[1] = objEvent->previousCoords.y; gFieldEffectArguments[2] = 149; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = objEvent->facingDirection; - FieldEffectStart(fldEff); + switch(groundEffect) + { + case GROUND_EFFECT_SAND: + default: + FieldEffectStart(FLDEFF_SAND_FOOTPRINTS); + break; + case GROUND_EFFECT_DEEP_SAND: + FieldEffectStart(FLDEFF_DEEP_SAND_FOOTPRINTS); + break; + case GROUND_EFFECT_SNOW: + FieldEffectStart(FLDEFF_SNOW_FOOTPRINTS); + break; + + } } -static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { gFieldEffectArguments[0] = objEvent->previousCoords.x; gFieldEffectArguments[1] = objEvent->previousCoords.y; @@ -10318,10 +10331,21 @@ static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struc gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = objEvent->facingDirection; gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; - FieldEffectStart(FLDEFF_TRACKS_SPOT); + switch(groundEffect) + { + case GROUND_EFFECT_SAND: + case GROUND_EFFECT_DEEP_SAND: + default: + FieldEffectStart(FLDEFF_TRACKS_SPOT); + break; + case GROUND_EFFECT_SNOW: + FieldEffectStart(FLDEFF_TRACKS_SPOT); + break; + + } } -static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { gFieldEffectArguments[0] = objEvent->previousCoords.x; gFieldEffectArguments[1] = objEvent->previousCoords.y; @@ -10329,10 +10353,21 @@ static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struc gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = objEvent->facingDirection; gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; - FieldEffectStart(FLDEFF_TRACKS_BUG); + switch(groundEffect) + { + case GROUND_EFFECT_SAND: + case GROUND_EFFECT_DEEP_SAND: + default: + FieldEffectStart(FLDEFF_TRACKS_BUG); + break; + case GROUND_EFFECT_SNOW: + FieldEffectStart(FLDEFF_TRACKS_BUG); + break; + + } } -static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { // Specifies which bike track shape to show next. // For example, when the bike turns from up to right, it will show @@ -10355,11 +10390,23 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = bikeTireTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; - FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); + + switch(groundEffect) + { + case GROUND_EFFECT_SAND: + case GROUND_EFFECT_DEEP_SAND: + default: + FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); + break; + case GROUND_EFFECT_SNOW: + FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); + break; + + } } } -static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 fldEff) +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, enum GroundEffect groundEffect) { // Specifies which bike track shape to show next. // For example, when the bike turns from up to right, it will show @@ -10382,7 +10429,19 @@ static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, str gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; - FieldEffectStart(FLDEFF_TRACKS_SLITHER); + + switch(groundEffect) + { + case GROUND_EFFECT_SAND: + case GROUND_EFFECT_DEEP_SAND: + default: + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + break; + case GROUND_EFFECT_SNOW: + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + break; + + } } }