diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-16 20:37:51 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-16 20:37:51 -0400 |
commit | 51eac4e14bc75f2b3d925b46d63969cfabf0d48e (patch) | |
tree | c79b9d5b88c1ddf8b81e4ccaf343ba19b8452786 /src | |
parent | 6e00e822101c4c3f68bce0789ba56133b24b586b (diff) |
field_weather_util
Diffstat (limited to 'src')
-rw-r--r-- | src/field_weather.c | 191 | ||||
-rw-r--r-- | src/field_weather_util.c | 105 | ||||
-rw-r--r-- | src/title_screen.c | 16 |
3 files changed, 136 insertions, 176 deletions
diff --git a/src/field_weather.c b/src/field_weather.c index fb5f4eee7..192ec8f44 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -4,6 +4,7 @@ #include "field_effect.h" #include "field_weather.h" #include "field_weather_util.h" +#include "field_weather_effects.h" #include "task.h" #include "trig.h" #include "constants/field_weather.h" @@ -39,116 +40,6 @@ struct WeatherCallbacks bool8 (*finish)(void); }; -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 gammaShifts[19][32]; - u8 altGammaShifts[19][32]; - s8 gammaIndex; - s8 gammaTargetIndex; - u8 gammaStepDelay; - u8 gammaStepFrameCounter; - u16 fadeDestColor; - /*0x6C6*/ u8 palProcessingState; - /*0x6C7*/ u8 fadeScreenCounter; - /*0x6C8*/ bool8 readyForInit; - /*0x6C9*/ u8 taskId; - /*0x6CA*/ u8 unknown_6CA; - u8 unknown_6CB; - u16 initStep; - u16 finishStep; - u8 currWeather; - u8 nextWeather; - u8 weatherGfxLoaded; - bool8 weatherChangeComplete; - u8 weatherPicSpritePalIndex; - u8 altGammaSpritePalIndex; - u16 rainSpriteVisibleCounter; - u8 curRainSpriteIndex; - u8 targetRainSpriteCount; - u8 rainSpriteCount; - u8 rainSpriteVisibleDelay; - u8 isDownpour; - u8 rainStrength; - /*0x6DE*/ u8 cloudSpritesCreated; - u8 filler_6DF[1]; - u16 snowflakeVisibleCounter; - u16 unknown_6E2; - u8 snowflakeSpriteCount; - u8 targetSnowflakeSpriteCount; - u16 unknown_6E6; - u16 thunderCounter; - u8 unknown_6EA; - u8 unknown_6EB; - u8 unknown_6EC; - u8 thunderTriggered; - u16 fogHScrollPosX; - u16 fogHScrollCounter; - u16 fogHScrollOffset; - u8 lightenedFogSpritePals[6]; - u8 lightenedFogSpritePalsCount; - u8 fogHSpritesCreated; - u16 ashBaseSpritesX; - u16 unknown_6FE; - u8 ashSpritesCreated; - u8 filler_701[3]; - u32 sandstormXOffset; - u32 sandstormYOffset; - u8 filler_70C[2]; - u16 sandstormBaseSpritesX; - u16 sandstormPosY; - u16 sandstormWaveIndex; - u16 sandstormWaveCounter; - u8 sandstormSpritesCreated; - u8 sandstormSwirlSpritesCreated; - u16 fogDBaseSpritesX; - u16 fogDPosY; - u16 fogDScrollXCounter; - u16 fogDScrollYCounter; - u16 fogDXOffset; - u16 fogDYOffset; - u8 fogDSpritesCreated; - u8 filler_725[1]; - u16 bubblesDelayCounter; - u16 bubblesDelayIndex; - u16 bubblesCoordsIndex; - u16 bubblesSpriteCount; - u8 bubblesSpritesCreated; - u8 filler_72F; - u16 currBlendEVA; - u16 currBlendEVB; - u16 targetBlendEVA; - u16 targetBlendEVB; - u8 blendUpdateCounter; - u8 blendFrameCounter; - u8 blendDelay; - u8 filler_73B[0x3C-0x3B]; - s16 unknown_73C; - s16 unknown_73E; - s16 unknown_740; - s16 unknown_742; - u8 filler_744[0xD-4]; - s8 loadDroughtPalsIndex; - u8 loadDroughtPalsOffset; -}; - EWRAM_DATA struct Weather gWeather = {}; EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {}; EWRAM_DATA const u8 *sPaletteGammaTypes = NULL; @@ -172,72 +63,6 @@ void DoNothing(void); void ApplyFogBlend(u8 blendCoeff, u16 blendColor); bool8 LightenSpritePaletteInFog(u8 paletteIndex); void Weather_SetBlendCoeffs(u8, u8); -bool8 Ash_Finish(void); -bool8 Bubbles_Finish(void); -bool8 Clouds_Finish(void); -bool8 Fog1_Finish(void); -bool8 Fog2_Finish(void); -bool8 LightRain_Finish(void); -bool8 Rain_Finish(void); -bool8 Sandstorm_Finish(void); -bool8 Snow_Finish(void); -bool8 sub_807B434(void); -bool8 sub_807B6BC(void); -bool8 sub_807D8D0(void); -void Ash_InitAll(void); -void Ash_InitVars(void); -void Ash_Main(void); -void Bubbles_InitAll(void); -void Bubbles_InitVars(void); -void Bubbles_Main(void); -void Clouds_InitAll(void); -void Clouds_InitVars(void); -void Clouds_Main(void); -void Drought_InitAll(void); -void Drought_InitVars(void); -void Drought_Main(void); -void Fog1_InitAll(void); -void Fog1_InitVars(void); -void Fog1_Main(void); -void Fog2_InitAll(void); -void Fog2_InitVars(void); -void Fog2_Main(void); -void LightRain_InitAll(void); -void LightRain_InitVars(void); -void LightRain_Main(void); -void Rain_Main(void); -void Sandstorm_InitAll(void); -void Sandstorm_InitVars(void); -void Sandstorm_Main(void); -void Snow_InitAll(void); -void Snow_InitVars(void); -void Weather11_InitAll(void); -void Weather11_InitVars(void); -void Weather2_InitAll(void); -void Weather2_InitVars(void); -void nullsub_48(void); -void nullsub_49(void); -void snowflakes_progress2(void); -void sub_807C2E4(void); -void sub_807C358(void); -void sub_807C388(void); -void sub_807C3F4(void); - -const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); -const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); -const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); -const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); -const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); -const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); - -const u32 *const gUnknown_83C2BA4[] = { - gUnknown_83BFBE4, - gUnknown_83C0408, - gUnknown_83C0C00, - gUnknown_83C139C, - gUnknown_83C1BB8, - gUnknown_83C2380 -}; struct Weather *const gWeatherPtr = &gWeather; @@ -1318,3 +1143,17 @@ void ResetPreservedPalettesInWeather(void) { sPaletteGammaTypes = sBasePaletteGammaTypes; } + +void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size) +{ + switch (gWeatherPtr->currWeather) + { + case WEATHER_RAIN: + case WEATHER_SNOW: + case WEATHER_RAIN_THUNDERSTORM: + case WEATHER_SHADE: + case WEATHER_DOWNPOUR: + sub_8045314(palbuf, RGB_BLACK, 3, size); + break; + } +} diff --git a/src/field_weather_util.c b/src/field_weather_util.c index ed1ce5236..40c5fbe4d 100644 --- a/src/field_weather_util.c +++ b/src/field_weather_util.c @@ -1,4 +1,10 @@ #include "global.h" +#include "field_weather.h" +#include "overworld.h" +#include "constants/weather.h" + +u8 TranslateWeatherNum(u8 weather); +void UpdateRainCounter(u8 newWeather, u8 oldWeather); const u16 gUnknown_83C2D00[] = INCBIN_U16("graphics/field_effects/unk_83C2D00.gbapal"); const u16 gUnknown_83C2D20[] = INCBIN_U16("graphics/field_effects/unk_83C2D20.gbapal"); @@ -10,3 +16,102 @@ const u16 gUnknown_83C4580[] = INCBIN_U16("graphics/field_effects/unk_83C4580.4b const u16 gUnknown_83C45C0[] = INCBIN_U16("graphics/field_effects/unk_83C45C0.4bpp"); const u16 gUnknown_83C55C0[] = INCBIN_U16("graphics/field_effects/unk_83C55C0.4bpp"); const u16 gUnknown_83C5BC0[] = INCBIN_U16("graphics/field_effects/unk_83C5BC0.4bpp"); + +void SetSav1Weather(u32 weather) +{ + u8 oldWeather = gSaveBlock1Ptr->weather; + gSaveBlock1Ptr->weather = TranslateWeatherNum(weather); + UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather); +} + +u8 GetSav1Weather(void) +{ + return gSaveBlock1Ptr->weather; +} + +void SetSav1WeatherFromCurrMapHeader(void) +{ + u8 oldWeather = gSaveBlock1Ptr->weather; + gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather); + UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather); +} + +void SetWeather(u32 weather) +{ + SetSav1Weather(weather); + SetNextWeather(GetSav1Weather()); +} + +void SetWeather_Unused(u32 weather) +{ + SetSav1Weather(weather); + SetCurrentAndNextWeather(GetSav1Weather()); +} + +void DoCurrentWeather(void) +{ + u8 weather = GetSav1Weather(); + + SetNextWeather(weather); +} + +void ResumePausedWeather(void) +{ + u8 weather = GetSav1Weather(); + + SetCurrentAndNextWeather(weather); +} + +const u8 sWeatherCycleRoute119[] = + { + WEATHER_SUNNY, + WEATHER_RAIN, + WEATHER_RAIN_THUNDERSTORM, + WEATHER_RAIN, + }; +const u8 sWeatherCycleRoute123[] = + { + WEATHER_SUNNY, + WEATHER_SUNNY, + WEATHER_RAIN, + WEATHER_SUNNY, + }; + +u8 TranslateWeatherNum(u8 weather) +{ + switch (weather) + { + case WEATHER_NONE: return WEATHER_NONE; + case WEATHER_SUNNY_CLOUDS: return WEATHER_SUNNY_CLOUDS; + case WEATHER_SUNNY: return WEATHER_SUNNY; + case WEATHER_RAIN: return WEATHER_RAIN; + case WEATHER_SNOW: return WEATHER_SNOW; + case WEATHER_RAIN_THUNDERSTORM: return WEATHER_RAIN_THUNDERSTORM; + case WEATHER_FOG_HORIZONTAL: return WEATHER_FOG_HORIZONTAL; + case WEATHER_VOLCANIC_ASH: return WEATHER_VOLCANIC_ASH; + case WEATHER_SANDSTORM: return WEATHER_SANDSTORM; + case WEATHER_FOG_DIAGONAL: return WEATHER_FOG_DIAGONAL; + case WEATHER_UNDERWATER: return WEATHER_UNDERWATER; + case WEATHER_SHADE: return WEATHER_SHADE; + case WEATHER_DROUGHT: return WEATHER_DROUGHT; + case WEATHER_DOWNPOUR: return WEATHER_DOWNPOUR; + case WEATHER_UNDERWATER_BUBBLES: return WEATHER_UNDERWATER_BUBBLES; + case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage]; + case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage]; + default: return WEATHER_NONE; + } +} + +void UpdateWeatherPerDay(u16 increment) +{ + u16 weatherStage = gSaveBlock1Ptr->weatherCycleStage + increment; + weatherStage %= 4; + gSaveBlock1Ptr->weatherCycleStage = weatherStage; +} + +void UpdateRainCounter(u8 newWeather, u8 oldWeather) +{ + if (newWeather != oldWeather + && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM)) + IncrementGameStat(GAME_STAT_GOT_RAINED_ON); +} diff --git a/src/title_screen.c b/src/title_screen.c index 0ff0a6b96..555b58e8f 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -305,6 +305,22 @@ static const u16 gUnknown_LG_83BFA10[] = { }; #endif +const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); +const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); +const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); +const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); +const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); +const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); + +const u32 *const gUnknown_83C2BA4[] = { + gUnknown_83BFBE4, + gUnknown_83C0408, + gUnknown_83C0C00, + gUnknown_83C139C, + gUnknown_83C1BB8, + gUnknown_83C2380 +}; + void CB2_InitTitleScreen(void) { switch (gMain.state) |