finished primary tilesets and fixed grass effects

This commit is contained in:
cawtds 2024-10-29 00:01:05 +01:00
parent fd9f1f3956
commit 104fb91f57
30 changed files with 275 additions and 52 deletions

View File

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

View File

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

View File

@ -153,8 +153,12 @@
"flag": "0"
}
],
"warp_events": [],
"coord_events": [],
"warp_events": [
],
"coord_events": [
],
"bg_events": [
{
"type": "sign",

View File

@ -142,7 +142,9 @@
"dest_warp_id": "1"
}
],
"coord_events": [],
"coord_events": [
],
"bg_events": [
{
"type": "sign",

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

View File

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

View File

@ -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[];

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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