From 967e25717f6cd2cd1c0ecbf9353d9c49691cc1da Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Thu, 31 Oct 2024 23:13:46 +0100 Subject: [PATCH] snow footprints --- data/field_effect_scripts.s | 5 +++++ .../general_winter/metatile_attributes.bin | Bin 2560 -> 2560 bytes graphics/field_effects/palettes/general_2.pal | 19 ++++++++++++++++++ .../pics/pokefirered.gba:Zone.Identifier | 0 .../field_effects/pics/snow_footprints.png | Bin 0 -> 214 bytes include/constants/field_effects.h | 5 ++++- include/constants/metatile_behaviors.h | 1 + include/event_object_movement.h | 1 + include/metatile_behavior.h | 1 + .../field_effect_object_template_pointers.h | 2 ++ src/data/field_effects/field_effect_objects.h | 18 +++++++++++++++++ .../object_events/object_event_graphics.h | 2 ++ src/event_object_movement.c | 18 ++++++++++++++--- src/field_effect_helpers.c | 18 +++++++++++++++++ src/metatile_behavior.c | 5 +++++ 15 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 graphics/field_effects/palettes/general_2.pal create mode 100644 graphics/field_effects/pics/pokefirered.gba:Zone.Identifier create mode 100644 graphics/field_effects/pics/snow_footprints.png diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 0e0a56bec..c1942d76e 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -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 diff --git a/data/tilesets/primary/general_winter/metatile_attributes.bin b/data/tilesets/primary/general_winter/metatile_attributes.bin index 45f6f352ef262d9c34b0f3e5ff379d9fc6b5eee6..f539e9cd71757a4a088af9dda7e50afa419ccb4c 100644 GIT binary patch delta 99 zcmZn=X%OLM0D|{G+`_=1&@wSmSO>%bVJ0R9Mq~^W0t1*lkfShhqWI+7j3N{Bc_zPS TiB PSteg$6WM%+MTHdr8c-3; diff --git a/graphics/field_effects/palettes/general_2.pal b/graphics/field_effects/palettes/general_2.pal new file mode 100644 index 000000000..ee050e18a --- /dev/null +++ b/graphics/field_effects/palettes/general_2.pal @@ -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 diff --git a/graphics/field_effects/pics/pokefirered.gba:Zone.Identifier b/graphics/field_effects/pics/pokefirered.gba:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/graphics/field_effects/pics/snow_footprints.png b/graphics/field_effects/pics/snow_footprints.png new file mode 100644 index 0000000000000000000000000000000000000000..b585d5404fa9c805a671c498b0bfeb7affebb0ee GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3-pI!a4o{DaPU;cPEB*=VV?2IR*hfA+G-! z-kmvfX4R@y{~7)hgKpb@vpreviousMetatileBehavior)) + { + *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) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 346d30163..295ce85f8 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -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; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index ce2736647..c01280df4 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -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)