ground effect enum

This commit is contained in:
cawtds 2024-11-22 12:01:31 +01:00
parent 8b6daddb88
commit 83cedefad6
2 changed files with 104 additions and 43 deletions

View File

@ -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)

View File

@ -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;
}
}
}