diff --git a/asm/macros/field_effect_script.inc b/asm/macros/field_effect_script.inc index d5895b0ef..5a7943f54 100644 --- a/asm/macros/field_effect_script.inc +++ b/asm/macros/field_effect_script.inc @@ -40,3 +40,10 @@ .4byte \palette_address .4byte \function_address .endm + + @ TODO: refactor field effects/field moves + .macro loadfadedpal_callnative_by_fldeff fldeff, function_address + .byte 8 + .byte \fldeff + .4byte \function_address + .endm diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index e397719aa..0e0a56bec 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -1,3 +1,4 @@ +#include "constants/field_effects.h" .include "asm/macros/field_effect_script.inc" .section script_data, "aw", %progbits .align 2 @@ -93,7 +94,7 @@ gFldEffScript_Shadow:: end gFldEffScript_TallGrass:: - loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_TallGrass + loadfadedpal_callnative_by_fldeff FLDEFF_TALL_GRASS, FldEff_TallGrass end gFldEffScript_Ripple:: @@ -124,7 +125,7 @@ gFldEffScript_UseSecretPowerCave:: end gFldEffScript_JumpTallGrass:: - loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpTallGrass + loadfadedpal_callnative_by_fldeff FLDEFF_JUMP_TALL_GRASS, FldEff_TallGrass end gFldEffScript_SandFootprints:: diff --git a/data/maps/Route3/map.json b/data/maps/Route3/map.json index bc5d1449a..e565c51ca 100644 --- a/data/maps/Route3/map.json +++ b/data/maps/Route3/map.json @@ -153,8 +153,12 @@ "flag": "0" } ], - "warp_events": [], - "coord_events": [], + "warp_events": [ + + ], + "coord_events": [ + + ], "bg_events": [ { "type": "sign", diff --git a/data/maps/Route4/map.json b/data/maps/Route4/map.json index 3273015c1..d681d78dc 100644 --- a/data/maps/Route4/map.json +++ b/data/maps/Route4/map.json @@ -142,7 +142,9 @@ "dest_warp_id": "1" } ], - "coord_events": [], + "coord_events": [ + + ], "bg_events": [ { "type": "sign", diff --git a/data/tilesets/primary/general_autumn/palettes/00.pal b/data/tilesets/primary/general_autumn/palettes/00.pal index 3966876be..e967b4a91 100644 --- a/data/tilesets/primary/general_autumn/palettes/00.pal +++ b/data/tilesets/primary/general_autumn/palettes/00.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 0 0 242 166 90 -245 133 73 -105 41 6 -75 29 4 +213 115 17 +119 64 9 +71 39 6 115 98 98 65 57 49 -255 0 255 -247 203 122 +154 196 149 +75 124 68 255 197 115 238 131 106 197 49 65 -255 213 131 -238 193 112 -238 193 128 -0 166 90 +185 214 182 +123 178 116 +94 156 87 +35 58 32 diff --git a/data/tilesets/primary/general_autumn/palettes/01.pal b/data/tilesets/primary/general_autumn/palettes/01.pal index c8b97453e..1ab544eca 100644 --- a/data/tilesets/primary/general_autumn/palettes/01.pal +++ b/data/tilesets/primary/general_autumn/palettes/01.pal @@ -8,7 +8,7 @@ JASC-PAL 123 123 131 32 49 57 230 238 238 -243 177 56 +94 156 87 90 90 115 238 213 197 222 197 164 @@ -16,4 +16,4 @@ JASC-PAL 148 106 106 123 74 74 90 57 65 -238 193 112 +123 178 116 diff --git a/data/tilesets/primary/general_autumn/palettes/05.pal b/data/tilesets/primary/general_autumn/palettes/05.pal index b8f58879d..ff783e4bf 100644 --- a/data/tilesets/primary/general_autumn/palettes/05.pal +++ b/data/tilesets/primary/general_autumn/palettes/05.pal @@ -14,6 +14,6 @@ JASC-PAL 238 230 139 222 197 139 213 189 106 -247 203 122 -247 203 122 -238 193 112 +154 196 149 +198 198 132 +123 178 116 diff --git a/data/tilesets/primary/general_autumn/tiles.png b/data/tilesets/primary/general_autumn/tiles.png index eef102a27..f818851e2 100644 Binary files a/data/tilesets/primary/general_autumn/tiles.png and b/data/tilesets/primary/general_autumn/tiles.png differ diff --git a/data/tilesets/primary/general_summer/palettes/00.pal b/data/tilesets/primary/general_summer/palettes/00.pal index d183fa440..f5a366ec2 100644 --- a/data/tilesets/primary/general_summer/palettes/00.pal +++ b/data/tilesets/primary/general_summer/palettes/00.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 0 0 -131 213 98 -57 148 49 -57 90 16 -31 72 20 +136 184 48 +106 144 37 +76 103 27 +46 63 16 115 98 98 65 57 49 -255 0 255 -151 216 123 +152 217 125 +73 146 43 255 197 115 238 131 106 197 49 65 -181 227 161 +183 228 165 121 205 86 -106 199 67 -93 184 55 +93 185 55 +34 67 20 diff --git a/data/tilesets/primary/general_summer/palettes/05.pal b/data/tilesets/primary/general_summer/palettes/05.pal index f4f4b6702..8286e9372 100644 --- a/data/tilesets/primary/general_summer/palettes/05.pal +++ b/data/tilesets/primary/general_summer/palettes/05.pal @@ -14,6 +14,6 @@ JASC-PAL 238 230 139 222 197 139 213 189 106 -151 216 123 +152 217 125 151 216 123 121 205 86 diff --git a/data/tilesets/primary/general_summer/tiles.png b/data/tilesets/primary/general_summer/tiles.png index 84ba7b2f9..b6ee9336f 100644 Binary files a/data/tilesets/primary/general_summer/tiles.png and b/data/tilesets/primary/general_summer/tiles.png differ diff --git a/data/tilesets/primary/general_winter/palettes/00.pal b/data/tilesets/primary/general_winter/palettes/00.pal index 00e1ec9c0..f3c320723 100644 --- a/data/tilesets/primary/general_winter/palettes/00.pal +++ b/data/tilesets/primary/general_winter/palettes/00.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 0 0 255 255 255 -255 255 255 -57 148 49 -57 90 16 +230 230 230 +76 103 27 +46 63 16 115 98 98 65 57 49 -255 0 255 -210 235 255 +230 230 255 +75 124 68 255 197 115 238 131 106 197 49 65 255 255 255 255 255 255 -255 255 255 -255 255 255 +230 230 230 +35 58 32 diff --git a/data/tilesets/primary/general_winter/tiles.png b/data/tilesets/primary/general_winter/tiles.png index 84ba7b2f9..b711a278e 100644 Binary files a/data/tilesets/primary/general_winter/tiles.png and b/data/tilesets/primary/general_winter/tiles.png differ diff --git a/graphics/field_effects/palettes/general_1_autumn.pal b/graphics/field_effects/palettes/general_1_autumn.pal new file mode 100644 index 000000000..3c647edc1 --- /dev/null +++ b/graphics/field_effects/palettes/general_1_autumn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 238 +185 214 182 +131 213 98 +75 124 68 +35 58 32 +49 65 0 +98 172 238 +98 172 197 +139 205 246 +148 230 255 +0 0 0 +0 0 0 +185 214 182 +123 178 116 +123 178 116 +24 164 106 diff --git a/graphics/field_effects/palettes/general_1_summer.pal b/graphics/field_effects/palettes/general_1_summer.pal new file mode 100644 index 000000000..9a5d9eb5c --- /dev/null +++ b/graphics/field_effects/palettes/general_1_summer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 238 +150 215 122 +131 213 98 +73 146 43 +34 67 20 +49 65 0 +98 172 238 +98 172 197 +139 205 246 +148 230 255 +0 0 0 +0 0 0 +183 228 165 +121 205 86 +93 185 55 +24 164 106 diff --git a/graphics/field_effects/palettes/general_1_winter.pal b/graphics/field_effects/palettes/general_1_winter.pal new file mode 100644 index 000000000..9bc49b0a8 --- /dev/null +++ b/graphics/field_effects/palettes/general_1_winter.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 238 +123 179 115 +131 213 98 +75 124 68 +35 58 32 +49 65 0 +98 172 238 +98 172 197 +139 205 246 +148 230 255 +0 0 0 +0 0 0 +255 255 255 +255 255 255 +230 230 230 +24 164 106 diff --git a/graphics/field_effects/pics/tall_grass_autumn.png b/graphics/field_effects/pics/tall_grass_autumn.png new file mode 100644 index 000000000..fe1fd00ca Binary files /dev/null and b/graphics/field_effects/pics/tall_grass_autumn.png differ diff --git a/graphics/field_effects/pics/tall_grass_summer.png b/graphics/field_effects/pics/tall_grass_summer.png new file mode 100644 index 000000000..e0f274a0d Binary files /dev/null and b/graphics/field_effects/pics/tall_grass_summer.png differ diff --git a/graphics/field_effects/pics/tall_grass_winter.png b/graphics/field_effects/pics/tall_grass_winter.png new file mode 100644 index 000000000..3ce84ab4f Binary files /dev/null and b/graphics/field_effects/pics/tall_grass_winter.png differ diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 2d2ea036e..6505b9602 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -76,6 +76,8 @@ #define FLDEFF_TRACKS_SPOT 71 #define FLDEFF_TRACKS_BUG 72 +#define FLDEFF_COUNT 73 + #define FLDEFF_PAL_TAG_GENERAL_0 0x1004 #define FLDEFF_PAL_TAG_GENERAL_1 0x1005 #define FLDEFF_PAL_TAG_POKEBALL_TRAIL 0x1009 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index c99062772..64aafce21 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -225,7 +225,12 @@ void FieldEffectFreeTilesIfUnused(u16 tileStart); extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1; -extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[]; +extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1Summer; +extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1Autumn; +extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1Winter; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassSummer; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassAutumn; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassWinter; extern const struct OamData gObjectEventBaseOam_32x32; extern const struct OamData gObjectEventBaseOam_64x64; extern const struct SubspriteTable sOamTables_32x32[]; diff --git a/include/rtc.h b/include/rtc.h index 3cea82517..6c6852b24 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -110,6 +110,7 @@ enum Season { }; extern struct Time gLocalTime; +extern enum Season gLoadedSeason; void RtcDisableInterrupts(void); void RtcRestoreInterrupts(void); @@ -146,5 +147,6 @@ enum Season GetSeason(void); const u8* GetSeasonName(enum Season); u8 GetSeasonDay(void); u32 GetGen5TimeOfDayStart(enum TimeOfDay); +void UpdateLoadedSeason(); #endif // GUARD_RTC_UTIL_H diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index ca39a9524..96ff54209 100644 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1,5 +1,8 @@ const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = { .data = gFieldEffectObjectPalette0, .tag = FLDEFF_PAL_TAG_GENERAL_0 }; const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = { .data = gFieldEffectObjectPalette1, .tag = FLDEFF_PAL_TAG_GENERAL_1 }; +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 }; static const union AnimCmd sAnim_Shadow[] = { @@ -70,6 +73,33 @@ static const struct SpriteFrameImage sPicTable_TallGrass[] = overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 4), }; +static const struct SpriteFrameImage sPicTable_TallGrassSummer[] = +{ + overworld_frame(gFieldEffectObjectPic_TallGrassSummer, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_TallGrassSummer, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_TallGrassSummer, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_TallGrassSummer, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_TallGrassSummer, 2, 2, 4), +}; + +static const struct SpriteFrameImage sPicTable_TallGrassAutumn[] = +{ + overworld_frame(gFieldEffectObjectPic_TallGrassAutumn, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_TallGrassAutumn, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_TallGrassAutumn, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_TallGrassAutumn, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_TallGrassAutumn, 2, 2, 4), +}; + +static const struct SpriteFrameImage sPicTable_TallGrassWinter[] = +{ + overworld_frame(gFieldEffectObjectPic_TallGrassWinter, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_TallGrassWinter, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_TallGrassWinter, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_TallGrassWinter, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_TallGrassWinter, 2, 2, 4), +}; + static const union AnimCmd sAnim_TallGrass[] = { ANIMCMD_FRAME(1, 10), @@ -96,6 +126,39 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = .callback = UpdateTallGrassFieldEffect, }; +const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassSummer = +{ + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_TallGrass, + .images = sPicTable_TallGrassSummer, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTallGrassFieldEffect, +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassAutumn = +{ + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_TallGrass, + .images = sPicTable_TallGrassAutumn, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTallGrassFieldEffect, +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrassWinter = +{ + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_TallGrass, + .images = sPicTable_TallGrassWinter, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTallGrassFieldEffect, +}; + static const struct SpriteFrameImage sPicTable_Ripple[] = { overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 0), diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index ca21e9857..35c5a3fea 100644 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -199,6 +199,9 @@ const u16 gFieldEffectObjectPic_Ash[] = INCBIN_U16("graphics/field_effects/pics/ const u16 gFieldEffectObjectPic_Arrow[] = INCBIN_U16("graphics/field_effects/pics/arrow.4bpp"); const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal"); const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal"); +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 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 @@ -209,6 +212,9 @@ const u16 gFieldEffectObjectPic_UnusedGrass[] = INCBIN_U16("graphics/field_effec const u16 gFieldEffectObjectPic_UnusedGrass2[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_2.4bpp"); const u16 gFieldEffectObjectPic_LongGrass[] = INCBIN_U16("graphics/field_effects/pics/long_grass.4bpp"); const u16 gFieldEffectObjectPic_TallGrass[] = INCBIN_U16("graphics/field_effects/pics/tall_grass.4bpp"); +const u16 gFieldEffectObjectPic_TallGrassSummer[] = INCBIN_U16("graphics/field_effects/pics/tall_grass_summer.4bpp"); +const u16 gFieldEffectObjectPic_TallGrassAutumn[] = INCBIN_U16("graphics/field_effects/pics/tall_grass_autumn.4bpp"); +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_DeepSandFootprints[] = INCBIN_U16("graphics/field_effects/pics/deep_sand_footprints.4bpp"); diff --git a/src/field_effect.c b/src/field_effect.c index ce52c53a1..a0f6be2f5 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -20,6 +20,7 @@ #include "party_menu.h" #include "pokemon_storage_system.h" #include "quest_log.h" +#include "rtc.h" #include "script.h" #include "special_field_anim.h" #include "task.h" @@ -47,8 +48,10 @@ static bool8 FieldEffectCmd_end(const u8 **script, u32 *result); static bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result); static bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result); static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadfadedpal_callnative_by_fldeff(const u8 **script, u32 *result); static void FieldEffectScript_LoadTiles(const u8 **script); static void FieldEffectScript_LoadFadedPal(const u8 **script); +static void FieldEffectScript_LoadFadedPalByFldeff(const u8 **script); static void FieldEffectScript_LoadPal(const u8 **script); static void FieldEffectScript_CallNative(const u8 **script, u32 *result); static void Task_PokecenterHeal(u8 taskId); @@ -87,7 +90,26 @@ static bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_end, FieldEffectCmd_loadgfx_callnative, FieldEffectCmd_loadtiles_callnative, - FieldEffectCmd_loadfadedpal_callnative + FieldEffectCmd_loadfadedpal_callnative, + FieldEffectCmd_loadfadedpal_callnative_by_fldeff +}; + +static const struct SpritePalette* const gFieldEffectPalettes[FLDEFF_COUNT][SEASON_WINTER + 1] = +{ + [FLDEFF_TALL_GRASS] = + { + [SEASON_SPRING] = &gSpritePalette_GeneralFieldEffect1, + [SEASON_SUMMER] = &gSpritePalette_GeneralFieldEffect1Summer, + [SEASON_AUTUMN] = &gSpritePalette_GeneralFieldEffect1Autumn, + [SEASON_WINTER] = &gSpritePalette_GeneralFieldEffect1Winter, + }, + [FLDEFF_JUMP_TALL_GRASS] = + { + [SEASON_SPRING] = &gSpritePalette_GeneralFieldEffect1, + [SEASON_SUMMER] = &gSpritePalette_GeneralFieldEffect1Summer, + [SEASON_AUTUMN] = &gSpritePalette_GeneralFieldEffect1Autumn, + [SEASON_WINTER] = &gSpritePalette_GeneralFieldEffect1Winter, + }, }; static const struct OamData sNewGameOakOamAttributes = { @@ -418,6 +440,15 @@ static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *resu return TRUE; } +static bool8 FieldEffectCmd_loadfadedpal_callnative_by_fldeff(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadFadedPalByFldeff(script); + FieldEffectScript_CallNative(script, result); + return TRUE; +} + + static u32 FieldEffectScript_ReadWord(const u8 **script) { return T2_READ_32(*script); @@ -464,6 +495,26 @@ static void FieldEffectScript_LoadFadedPal(const u8 **script) *script += sizeof(u32); } +static const struct SpritePalette* GetFieldEffectPalette(u32 fldEff) +{ + if (gFieldEffectPalettes[fldEff][gLoadedSeason] != NULL) + return gFieldEffectPalettes[fldEff][gLoadedSeason]; + return gFieldEffectPalettes[fldEff][SEASON_SPRING]; +} + +static void FieldEffectScript_LoadFadedPalByFldeff(const u8 **script) +{ + u8 fldEff = *script[0]; + const struct SpritePalette* spritePalette = GetFieldEffectPalette(fldEff); + + u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); + LoadSpritePalette(spritePalette); + if (idx == 0xFF) + ApplyGlobalFieldPaletteTint(IndexOfSpritePaletteTag(spritePalette->tag)); + UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(spritePalette->tag), TRUE); + *script += sizeof(u8); +} + static void FieldEffectScript_LoadPal(const u8 **script) { const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 4887a9933..346d30163 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -7,6 +7,7 @@ #include "field_weather.h" #include "fieldmap.h" #include "metatile_behavior.h" +#include "rtc.h" #include "constants/field_effects.h" #include "constants/event_objects.h" #include "constants/songs.h" @@ -397,7 +398,23 @@ u32 FldEff_TallGrass(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0); + switch(gLoadedSeason) + { + case SEASON_SPRING: + default: + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0); + break; + case SEASON_SUMMER: + spriteId = CreateSpriteAtEnd(&gFieldEffectObjectTemplate_TallGrassSummer, x, y, 0); + break; + case SEASON_AUTUMN: + spriteId = CreateSpriteAtEnd(&gFieldEffectObjectTemplate_TallGrassAutumn, x, y, 0); + break; + case SEASON_WINTER: + spriteId = CreateSpriteAtEnd(&gFieldEffectObjectTemplate_TallGrassWinter, x, y, 0); + break; + } + if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; diff --git a/src/fieldmap.c b/src/fieldmap.c index 625d10f2d..d3aa18929 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -1,10 +1,11 @@ #include "global.h" #include "gflib.h" -#include "overworld.h" -#include "script.h" -#include "menu.h" -#include "quest_log.h" #include "fieldmap.h" +#include "menu.h" +#include "overworld.h" +#include "quest_log.h" +#include "rtc.h" +#include "script.h" struct ConnectionFlags { diff --git a/src/overworld.c b/src/overworld.c index f5c2f3b1e..9285b0b3c 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1956,6 +1956,7 @@ static bool32 LoadMapInStepsLink(u8 *state) switch (*state) { case 0: + UpdateLoadedSeason(); InitOverworldBgs(); ScriptContext_Init(); UnlockPlayerFieldControls(); @@ -2033,6 +2034,7 @@ static bool32 LoadMapInStepsLocal(u8 *state, bool32 inLink) switch (*state) { case 0: + UpdateLoadedSeason(); InitOverworldBgs(); FieldClearVBlankHBlankCallbacks(); LoadMapFromWarp(inLink); diff --git a/src/rtc.c b/src/rtc.c index a28a9d919..18b5c8edd 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -14,6 +14,8 @@ static u16 sSavedIme; // iwram common struct Time gLocalTime; +EWRAM_DATA enum Season gLoadedSeason = SEASON_SPRING; + // const rom static const u8 sText_SpringName[] = _("Spring"); static const u8 sText_SummerName[] = _("Summer"); @@ -514,3 +516,9 @@ u32 GetGen5TimeOfDayStart(enum TimeOfDay timeOfDay) { return sTimeOfDayStarts[GetSeason()][timeOfDay]; } + +void UpdateLoadedSeason() +{ + DebugPrintfLevel(MGBA_LOG_ERROR, "UpdateLoadedSeason"); + gLoadedSeason = GetSeason(); +} diff --git a/src/tilesets.c b/src/tilesets.c index 0457fd7bb..9a07d2ff6 100644 --- a/src/tilesets.c +++ b/src/tilesets.c @@ -41,17 +41,14 @@ static const struct Tileset* const gSeasonTilesetsSecondary[][SEASON_WINTER + 1] const struct Tileset* GetPrimaryTileset(const struct MapLayout* mapLayout) { u32 i; - enum Season season; - if (!OW_SEASONS) return mapLayout->primaryTileset; - season = GetSeason(); for (i = 0; gSeasonTilesetsPrimary[i][SEASON_SPRING] != NULL; i++) { if (mapLayout->primaryTileset == gSeasonTilesetsPrimary[i][SEASON_SPRING]) { - if (gSeasonTilesetsPrimary[i][season] != NULL) - return gSeasonTilesetsPrimary[i][season]; + if (gSeasonTilesetsPrimary[i][gLoadedSeason] != NULL) + return gSeasonTilesetsPrimary[i][gLoadedSeason]; else return mapLayout->primaryTileset; } @@ -62,17 +59,15 @@ const struct Tileset* GetPrimaryTileset(const struct MapLayout* mapLayout) const struct Tileset* GetSecondaryTileset(const struct MapLayout* mapLayout) { u32 i; - enum Season season; if (!OW_SEASONS) return mapLayout->secondaryTileset; - season = GetSeason(); for (i = 0; gSeasonTilesetsSecondary[i][SEASON_SPRING] != NULL; i++) { if (mapLayout->secondaryTileset == gSeasonTilesetsSecondary[i][SEASON_SPRING]) { - if (gSeasonTilesetsSecondary[i][season] != NULL) - return gSeasonTilesetsSecondary[i][season]; + if (gSeasonTilesetsSecondary[i][gLoadedSeason] != NULL) + return gSeasonTilesetsSecondary[i][gLoadedSeason]; else return mapLayout->secondaryTileset; }