snow footprints

This commit is contained in:
cawtds
2024-10-31 23:13:46 +01:00
parent 20de598e8a
commit 967e25717f
15 changed files with 91 additions and 4 deletions

View File

@@ -76,6 +76,7 @@ gFieldEffectScriptPointers::
.4byte gFieldEffectScript_TracksSlither @ FLDEFF_TRACKS_SLITHER
.4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG
.4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT
.4byte gFieldEffectScript_SnowFootprints @ FLDEFF_SNOW_FOOTPRINTS
gFldEffScript_ExclamationMarkIcon::
callnative FldEff_ExclamationMarkIcon1
@@ -360,3 +361,7 @@ gFieldEffectScript_TracksSpot::
gFieldEffectScript_TracksSlither::
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSlither
end
gFieldEffectScript_SnowFootprints::
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect2, FldEff_SnowFootprints
end

View File

@@ -0,0 +1,19 @@
JASC-PAL
0100
16
255 0 238
204 204 204
170 170 170
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

View File

@@ -75,11 +75,13 @@
#define FLDEFF_TRACKS_SLITHER 70
#define FLDEFF_TRACKS_SPOT 71
#define FLDEFF_TRACKS_BUG 72
#define FLDEFF_SNOW_FOOTPRINTS 73
#define FLDEFF_COUNT 73
#define FLDEFF_COUNT 74
#define FLDEFF_PAL_TAG_GENERAL_0 0x1004
#define FLDEFF_PAL_TAG_GENERAL_1 0x1005
#define FLDEFF_PAL_TAG_GENERAL_2 0x1006
#define FLDEFF_PAL_TAG_POKEBALL_TRAIL 0x1009
#define FLDEFF_PAL_TAG_ASH 0x100D
#define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F
@@ -124,5 +126,6 @@
#define FLDEFFOBJ_TRACKS_SLITHER 37
#define FLDEFFOBJ_TRACKS_SPOT 38
#define FLDEFFOBJ_TRACKS_BUG 39
#define FLDEFFOBJ_SNOW_FOOTPRINTS 40
#endif // GUARD_CONSTANTS_FIELD_EFFECTS_H

View File

@@ -127,6 +127,7 @@
//
#define MB_CYCLING_ROAD_PULL_DOWN 0xD0
#define MB_CYCLING_ROAD_PULL_DOWN_GRASS 0xD1
#define MB_SNOW 0xEF
//
#define NUM_METATILE_BEHAVIORS 0xF0

View File

@@ -78,6 +78,7 @@ typedef void (*MovementAction)(u8 direction);
#define GROUND_EFFECT_FLAG_SHORT_GRASS (1 << 17)
#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
#define GROUND_EFFECT_FLAG_SNOW (1 << 20)
struct PairedPalettes
{

View File

@@ -135,5 +135,6 @@ bool8 MetatileBehavior_IsBurglary(u8 metatileBehavior);
bool8 MetatileBehavior_IsTrainerTowerMonitor(u8 metatileBehavior);
bool8 MetatileBehavior_IsSecretBaseJumpMat(u8 metatileBehavior);
bool8 MetatileBehavior_IsSecretBaseSpinMat(u8 metatileBehavior);
bool8 MetatileBehavior_IsSnow(u8 metatileBehavior);
#endif // GUARD_METATILE_BEHAVIOR

View File

@@ -10,6 +10,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow;
const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust;
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass;
const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints;
const struct SpriteTemplate gFieldEffectObjectTemplate_SnowFootprints;
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash;
const struct SpriteTemplate gFieldEffectObjectTemplate_Splash;
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash;
@@ -72,4 +73,5 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
[FLDEFFOBJ_ASH_LAUNCH] = &gFieldEffectObjectTemplate_AshLaunch,
[FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles,
[FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle,
[FLDEFFOBJ_SNOW_FOOTPRINTS] = &gFieldEffectObjectTemplate_SnowFootprints,
};

View File

@@ -3,6 +3,7 @@ const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = { .data = gField
const struct SpritePalette gSpritePalette_GeneralFieldEffect1Summer = { .data = gFieldEffectObjectPalette1Summer, .tag = FLDEFF_PAL_TAG_GENERAL_1 };
const struct SpritePalette gSpritePalette_GeneralFieldEffect1Autumn = { .data = gFieldEffectObjectPalette1Autumn, .tag = FLDEFF_PAL_TAG_GENERAL_1 };
const struct SpritePalette gSpritePalette_GeneralFieldEffect1Winter = { .data = gFieldEffectObjectPalette1Winter, .tag = FLDEFF_PAL_TAG_GENERAL_1 };
const struct SpritePalette gSpritePalette_GeneralFieldEffect2 = { .data = gFieldEffectObjectPalette2, .tag = FLDEFF_PAL_TAG_GENERAL_2 };
static const union AnimCmd sAnim_Shadow[] =
{
@@ -462,6 +463,23 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints =
.callback = UpdateFootprintsTireTracksFieldEffect,
};
static const struct SpriteFrameImage sPicTable_SnowFootprints[] =
{
overworld_frame(gFieldEffectObjectPic_SnowFootprints, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_SnowFootprints, 2, 2, 1),
};
const struct SpriteTemplate gFieldEffectObjectTemplate_SnowFootprints =
{
.tileTag = TAG_NONE,
.paletteTag = FLDEFF_PAL_TAG_GENERAL_2,
.oam = &gObjectEventBaseOam_16x16,
.anims = sAnimTable_SandFootprints,
.images = sPicTable_SnowFootprints,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = UpdateFootprintsTireTracksFieldEffect,
};
static const struct SpriteFrameImage sPicTable_DeepSandFootprints[] =
{
overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 0),

View File

@@ -202,6 +202,7 @@ const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/pale
const u16 gFieldEffectObjectPalette1Summer[] = INCBIN_U16("graphics/field_effects/palettes/general_1_summer.gbapal");
const u16 gFieldEffectObjectPalette1Autumn[] = INCBIN_U16("graphics/field_effects/palettes/general_1_autumn.gbapal");
const u16 gFieldEffectObjectPalette1Winter[] = INCBIN_U16("graphics/field_effects/palettes/general_1_winter.gbapal");
const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effects/palettes/general_2.gbapal");
const u16 sFiller2[0x10] = {};
const u16 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U16("graphics/field_effects/pics/ground_impact_dust.4bpp");
const u16 gFieldEffectObjectPic_UnusedGrass3[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_3.4bpp"); // Unused
@@ -217,6 +218,7 @@ const u16 gFieldEffectObjectPic_TallGrassAutumn[] = INCBIN_U16("graphics/field_e
const u16 gFieldEffectObjectPic_TallGrassWinter[] = INCBIN_U16("graphics/field_effects/pics/tall_grass_winter.4bpp");
const u16 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U16("graphics/field_effects/pics/short_grass.4bpp");
const u16 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U16("graphics/field_effects/pics/sand_footprints.4bpp");
const u16 gFieldEffectObjectPic_SnowFootprints[] = INCBIN_U16("graphics/field_effects/pics/snow_footprints.4bpp");
const u16 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U16("graphics/field_effects/pics/deep_sand_footprints.4bpp");
const u16 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U16("graphics/field_effects/pics/bike_tire_tracks.4bpp");
const u16 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U16("graphics/field_effects/pics/unused_sand.4bpp");

View File

@@ -9599,6 +9599,10 @@ static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags
{
*flags |= GROUND_EFFECT_FLAG_SAND;
}
else if (MetatileBehavior_IsSnow(objEvent->previousMetatileBehavior))
{
*flags |= GROUND_EFFECT_FLAG_SNOW;
}
}
static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *flags)
@@ -10017,6 +10021,12 @@ void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0);
}
void GroundEffects_Snow(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 2);
}
void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
@@ -10030,9 +10040,10 @@ static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprit
static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
{
// First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
u16 sandFootprints_FieldEffectData[2] = {
u16 sandFootprints_FieldEffectData[3] = {
FLDEFF_SAND_FOOTPRINTS,
FLDEFF_DEEP_SAND_FOOTPRINTS
FLDEFF_DEEP_SAND_FOOTPRINTS,
FLDEFF_SNOW_FOOTPRINTS,
};
gFieldEffectArguments[0] = objEvent->previousCoords.x;
@@ -10179,7 +10190,8 @@ static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct S
GroundEffect_JumpLandingDust,
GroundEffect_ShortGrass,
GroundEffect_HotSprings,
GroundEffect_Seaweed
GroundEffect_Seaweed,
GroundEffects_Snow,
};
static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)

View File

@@ -674,6 +674,24 @@ u32 FldEff_SandFootprints(void)
return 0;
}
u32 FldEff_SnowFootprints(void)
{
u8 spriteId;
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SNOW_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
sprite->data[7] = FLDEFF_SNOW_FOOTPRINTS;
StartSpriteAnim(sprite, gFieldEffectArguments[4]);
}
return 0;
}
u32 FldEff_DeepSandFootprints(void)
{
u8 spriteId;

View File

@@ -77,6 +77,11 @@ bool8 MetatileBehavior_IsSand(u8 metatileBehavior)
return FALSE;
}
bool8 MetatileBehavior_IsSnow(u8 metatileBehavior)
{
return metatileBehavior == MB_SNOW;
}
bool8 MetatileBehavior_IsSandOrShallowFlowingWater(u8 metatileBehavior)
{
if (metatileBehavior == MB_SAND || metatileBehavior == MB_SHALLOW_WATER)