mirror of https://github.com/pret/pokeemerald.git
235 lines
6.5 KiB
C
235 lines
6.5 KiB
C
#ifndef GUARD_WEATHER_H
|
|
#define GUARD_WEATHER_H
|
|
|
|
#include "sprite.h"
|
|
#include "constants/field_weather.h"
|
|
|
|
#define TAG_WEATHER_START 0x1200
|
|
enum {
|
|
GFXTAG_CLOUD = TAG_WEATHER_START,
|
|
GFXTAG_FOG_H,
|
|
GFXTAG_ASH,
|
|
GFXTAG_FOG_D,
|
|
GFXTAG_SANDSTORM,
|
|
GFXTAG_BUBBLE,
|
|
GFXTAG_RAIN,
|
|
};
|
|
enum {
|
|
PALTAG_WEATHER = TAG_WEATHER_START,
|
|
PALTAG_WEATHER_2
|
|
};
|
|
|
|
#define NUM_WEATHER_COLOR_MAPS 19
|
|
|
|
struct Weather
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
struct Sprite *rainSprites[MAX_RAIN_SPRITES];
|
|
struct Sprite *snowflakeSprites[101];
|
|
struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
|
|
} s1;
|
|
struct
|
|
{
|
|
u8 filler0[0xA0];
|
|
struct Sprite *fogHSprites[NUM_FOG_HORIZONTAL_SPRITES];
|
|
struct Sprite *ashSprites[NUM_ASH_SPRITES];
|
|
struct Sprite *fogDSprites[NUM_FOG_DIAGONAL_SPRITES];
|
|
struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
|
|
struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
|
|
} s2;
|
|
} sprites;
|
|
u8 darkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32];
|
|
u8 contrastColorMaps[NUM_WEATHER_COLOR_MAPS][32];
|
|
s8 colorMapIndex;
|
|
s8 targetColorMapIndex;
|
|
u8 colorMapStepDelay;
|
|
u8 colorMapStepCounter;
|
|
u16 fadeDestColor;
|
|
u8 palProcessingState;
|
|
u8 fadeScreenCounter;
|
|
bool8 readyForInit;
|
|
u8 taskId;
|
|
u8 fadeInFirstFrame;
|
|
u8 fadeInTimer;
|
|
u16 initStep;
|
|
u16 finishStep;
|
|
u8 currWeather;
|
|
u8 nextWeather;
|
|
u8 weatherGfxLoaded;
|
|
bool8 weatherChangeComplete;
|
|
u8 weatherPicSpritePalIndex;
|
|
u8 contrastColorMapSpritePalIndex;
|
|
// Rain
|
|
u16 rainSpriteVisibleCounter;
|
|
u8 curRainSpriteIndex;
|
|
u8 targetRainSpriteCount;
|
|
u8 rainSpriteCount;
|
|
u8 rainSpriteVisibleDelay;
|
|
u8 isDownpour;
|
|
u8 rainStrength;
|
|
u8 cloudSpritesCreated;
|
|
// Snow
|
|
u16 snowflakeVisibleCounter;
|
|
u16 snowflakeTimer;
|
|
u8 snowflakeSpriteCount;
|
|
u8 targetSnowflakeSpriteCount;
|
|
// Thunderstorm
|
|
u16 thunderTimer; // general-purpose timer for state transitions
|
|
u16 thunderSETimer; // timer for thunder sound effect
|
|
bool8 thunderAllowEnd;
|
|
bool8 thunderLongBolt; // true if this cycle will end in a long lightning bolt
|
|
u8 thunderShortBolts; // the number of short bolts this cycle
|
|
bool8 thunderEnqueued;
|
|
// Horizontal fog
|
|
u16 fogHScrollPosX;
|
|
u16 fogHScrollCounter;
|
|
u16 fogHScrollOffset;
|
|
u8 lightenedFogSpritePals[6];
|
|
u8 lightenedFogSpritePalsCount;
|
|
u8 fogHSpritesCreated;
|
|
// Ash
|
|
u16 ashBaseSpritesX;
|
|
u16 ashUnused;
|
|
u8 ashSpritesCreated;
|
|
// Sandstorm
|
|
u32 sandstormXOffset;
|
|
u32 sandstormYOffset;
|
|
u16 sandstormUnused;
|
|
u16 sandstormBaseSpritesX;
|
|
u16 sandstormPosY;
|
|
u16 sandstormWaveIndex;
|
|
u16 sandstormWaveCounter;
|
|
u8 sandstormSpritesCreated;
|
|
u8 sandstormSwirlSpritesCreated;
|
|
// Diagonal fog
|
|
u16 fogDBaseSpritesX;
|
|
u16 fogDPosY;
|
|
u16 fogDScrollXCounter;
|
|
u16 fogDScrollYCounter;
|
|
u16 fogDXOffset;
|
|
u16 fogDYOffset;
|
|
u8 fogDSpritesCreated;
|
|
// Bubbles
|
|
u16 bubblesDelayCounter;
|
|
u16 bubblesDelayIndex;
|
|
u16 bubblesCoordsIndex;
|
|
u16 bubblesSpriteCount;
|
|
u8 bubblesSpritesCreated;
|
|
|
|
u16 currBlendEVA;
|
|
u16 currBlendEVB;
|
|
u16 targetBlendEVA;
|
|
u16 targetBlendEVB;
|
|
u8 blendUpdateCounter;
|
|
u8 blendFrameCounter;
|
|
u8 blendDelay;
|
|
// Drought
|
|
s16 droughtBrightnessStage;
|
|
s16 droughtLastBrightnessStage;
|
|
s16 droughtTimer;
|
|
s16 droughtState;
|
|
u8 droughtUnused[9];
|
|
s8 loadDroughtPalsIndex;
|
|
u8 loadDroughtPalsOffset;
|
|
};
|
|
|
|
// field_weather.c
|
|
extern struct Weather gWeather;
|
|
extern struct Weather *const gWeatherPtr;
|
|
extern const u16 gFogPalette[];
|
|
|
|
// field_weather_effect.c
|
|
extern const u8 gWeatherFogHorizontalTiles[];
|
|
|
|
void StartWeather(void);
|
|
void SetNextWeather(u8 weather);
|
|
void SetCurrentAndNextWeather(u8 weather);
|
|
void SetCurrentAndNextWeatherNoDelay(u8 weather);
|
|
void ApplyWeatherColorMapIfIdle(s8 colorMapIndex);
|
|
void ApplyWeatherColorMapIfIdle_Gradual(u8 colorMapIndex, u8 targetColorMapIndex, u8 colorMapStepDelay);
|
|
void FadeScreen(u8 mode, s8 delay);
|
|
bool8 IsWeatherNotFadingIn(void);
|
|
void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex);
|
|
void ApplyWeatherColorMapToPal(u8 paletteIndex);
|
|
void LoadCustomWeatherSpritePalette(const u16 *palette);
|
|
void ResetDroughtWeatherPaletteLoading(void);
|
|
bool8 LoadDroughtWeatherPalettes(void);
|
|
void DroughtStateInit(void);
|
|
void DroughtStateRun(void);
|
|
void Weather_SetBlendCoeffs(u8 eva, u8 evb);
|
|
void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay);
|
|
bool8 Weather_UpdateBlend(void);
|
|
u8 GetCurrentWeather(void);
|
|
void SetRainStrengthFromSoundEffect(u16 soundEffect);
|
|
void PlayRainStoppingSoundEffect(void);
|
|
u8 IsWeatherChangeComplete(void);
|
|
void SetWeatherScreenFadeOut(void);
|
|
void SetWeatherPalStateIdle(void);
|
|
void PreservePaletteInWeather(u8 preservedPalIndex);
|
|
void ResetPreservedPalettesInWeather(void);
|
|
|
|
// field_weather_effect.c
|
|
void Clouds_InitVars(void);
|
|
void Clouds_Main(void);
|
|
void Clouds_InitAll(void);
|
|
bool8 Clouds_Finish(void);
|
|
void Sunny_InitVars(void);
|
|
void Sunny_Main(void);
|
|
void Sunny_InitAll(void);
|
|
bool8 Sunny_Finish(void);
|
|
void Rain_InitVars(void);
|
|
void Rain_Main(void);
|
|
void Rain_InitAll(void);
|
|
bool8 Rain_Finish(void);
|
|
void Snow_InitVars(void);
|
|
void Snow_Main(void);
|
|
void Snow_InitAll(void);
|
|
bool8 Snow_Finish(void);
|
|
void Thunderstorm_InitVars(void);
|
|
void Thunderstorm_Main(void);
|
|
void Thunderstorm_InitAll(void);
|
|
bool8 Thunderstorm_Finish(void);
|
|
void FogHorizontal_InitVars(void);
|
|
void FogHorizontal_Main(void);
|
|
void FogHorizontal_InitAll(void);
|
|
bool8 FogHorizontal_Finish(void);
|
|
void Ash_InitVars(void);
|
|
void Ash_Main(void);
|
|
void Ash_InitAll(void);
|
|
bool8 Ash_Finish(void);
|
|
void Sandstorm_InitVars(void);
|
|
void Sandstorm_Main(void);
|
|
void Sandstorm_InitAll(void);
|
|
bool8 Sandstorm_Finish(void);
|
|
void FogDiagonal_InitVars(void);
|
|
void FogDiagonal_Main(void);
|
|
void FogDiagonal_InitAll(void);
|
|
bool8 FogDiagonal_Finish(void);
|
|
void Shade_InitVars(void);
|
|
void Shade_Main(void);
|
|
void Shade_InitAll(void);
|
|
bool8 Shade_Finish(void);
|
|
void Drought_InitVars(void);
|
|
void Drought_Main(void);
|
|
void Drought_InitAll(void);
|
|
bool8 Drought_Finish(void);
|
|
void Downpour_InitVars(void);
|
|
void Downpour_InitAll(void);
|
|
void Bubbles_InitVars(void);
|
|
void Bubbles_Main(void);
|
|
void Bubbles_InitAll(void);
|
|
bool8 Bubbles_Finish(void);
|
|
|
|
u8 GetSavedWeather(void);
|
|
void SetSavedWeather(u32 weather);
|
|
void SetSavedWeatherFromCurrMapHeader(void);
|
|
void SetWeather(u32 weather);
|
|
void DoCurrentWeather(void);
|
|
void UpdateWeatherPerDay(u16 increment);
|
|
void ResumePausedWeather(void);
|
|
|
|
#endif // GUARD_WEATHER_H
|