mirror of
https://github.com/pret/pokefirered.git
synced 2026-10-01 05:20:00 -05:00
snow footprints
This commit is contained in:
@@ -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
|
||||
|
||||
Binary file not shown.
19
graphics/field_effects/palettes/general_2.pal
Normal file
19
graphics/field_effects/palettes/general_2.pal
Normal 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
|
||||
BIN
graphics/field_effects/pics/snow_footprints.png
Normal file
BIN
graphics/field_effects/pics/snow_footprints.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 214 B |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user