From 6e00e822101c4c3f68bce0789ba56133b24b586b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 20:12:37 -0400 Subject: Port field_weather from Emerald --- include/field_weather.h | 2 +- include/field_weather_util.h | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 include/field_weather_util.h (limited to 'include') diff --git a/include/field_weather.h b/include/field_weather.h index 6b62f0edd..1f2d9902e 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -17,7 +17,7 @@ bool8 IsWeatherNotFadingIn(void); void SetWeatherScreenFadeOut(void); void sub_807B070(void); u8 GetCurrentWeather(void); -void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32); +void delay(u8, u8, u32); void UpdateSpritePaletteWithWeather(u8 palIdx); void ResetPreservedPalettesInWeather(void); void PreservePaletteInWeather(u8 palIdx); diff --git a/include/field_weather_util.h b/include/field_weather_util.h new file mode 100644 index 000000000..da49d3869 --- /dev/null +++ b/include/field_weather_util.h @@ -0,0 +1,6 @@ +#ifndef GUARD_FIELD_WEATHER_UTIL_H +#define GUARD_FIELD_WEATHER_UTIL_H + +void SetWeather(u8 weather); + +#endif //GUARD_FIELD_WEATHER_UTIL_H -- cgit v1.2.3 From 51eac4e14bc75f2b3d925b46d63969cfabf0d48e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 20:37:51 -0400 Subject: field_weather_util --- include/blend_palette.h | 1 + include/constants/weather.h | 2 + include/field_weather.h | 116 ++++++++++++++++++++++++++++++++++++++++ include/field_weather_effects.h | 55 +++++++++++++++++++ include/global.h | 2 +- 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 include/field_weather_effects.h (limited to 'include') diff --git a/include/blend_palette.h b/include/blend_palette.h index 4ece15d69..7f0826187 100644 --- a/include/blend_palette.h +++ b/include/blend_palette.h @@ -10,5 +10,6 @@ // Exported ROM declarations void BlendPalette(u16, u16, u8, u16); +void sub_8045314(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size); #endif //GUARD_BLEND_PALETTE_H diff --git a/include/constants/weather.h b/include/constants/weather.h index 77be45c51..241dc5e2a 100644 --- a/include/constants/weather.h +++ b/include/constants/weather.h @@ -16,5 +16,7 @@ #define WEATHER_DROUGHT 12 // unused and broken in overworld #define WEATHER_DOWNPOUR 13 // unused #define WEATHER_UNDERWATER_BUBBLES 14 // unused +#define WEATHER_ROUTE119_CYCLE 20 // unused +#define WEATHER_ROUTE123_CYCLE 21 // unused #endif // GUARD_CONSTANTS_WEATHER_H diff --git a/include/field_weather.h b/include/field_weather.h index 1f2d9902e..b4006b3ad 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -2,6 +2,119 @@ #define GUARD_WEATHER_H #include "global.h" +#include "constants/field_weather.h" + +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; +}; + +extern struct Weather *const gWeatherPtr; void FadeScreen(u8 mode, s8 delay); @@ -22,4 +135,7 @@ void UpdateSpritePaletteWithWeather(u8 palIdx); void ResetPreservedPalettesInWeather(void); void PreservePaletteInWeather(u8 palIdx); +void SetNextWeather(u8 weather); +void SetCurrentAndNextWeather(u8 weather); + #endif // GUARD_WEATHER_H diff --git a/include/field_weather_effects.h b/include/field_weather_effects.h new file mode 100644 index 000000000..11d3314a2 --- /dev/null +++ b/include/field_weather_effects.h @@ -0,0 +1,55 @@ +#ifndef GUARD_FIELD_WEATHER_EFFECTS_H +#define GUARD_FIELD_WEATHER_EFFECTS_H + +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); + +#endif //GUARD_FIELD_WEATHER_EFFECTS_H diff --git a/include/global.h b/include/global.h index 8a8877143..b2fd67b4b 100644 --- a/include/global.h +++ b/include/global.h @@ -749,7 +749,7 @@ struct SaveBlock1 /*0x0024*/ struct WarpData escapeWarp; /*0x002C*/ u16 savedMusic; /*0x002E*/ u8 weather; - /*0x002F*/ u8 filler_2F; + /*0x002F*/ u8 weatherCycleStage; /*0x0030*/ u8 flashLevel; /*0x0032*/ u16 mapLayoutId; /*0x0034*/ u8 playerPartyCount; -- cgit v1.2.3 From 7610a2dfc25a811e2918998523dd3e9b36263750 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 21:43:49 -0400 Subject: Port field_weather_effects from emerald --- include/field_weather.h | 23 ++++++++++++++++++ include/field_weather_effects.h | 52 ++++++++++++++++++++--------------------- include/graphics.h | 2 +- 3 files changed, 50 insertions(+), 27 deletions(-) (limited to 'include') diff --git a/include/field_weather.h b/include/field_weather.h index b4006b3ad..3dc17b072 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -137,5 +137,28 @@ void PreservePaletteInWeather(u8 palIdx); void SetNextWeather(u8 weather); void SetCurrentAndNextWeather(u8 weather); +void Weather_SetBlendCoeffs(u8 eva, u8 evb); +void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay); +bool8 Weather_UpdateBlend(void); +void LoadCustomWeatherSpritePalette(const u16 *palette); +void ResetDroughtWeatherPaletteLoading(void); +bool8 LoadDroughtWeatherPalettes(void); +void sub_807AC60(void); +void sub_807AC98(void); +void SetRainStrengthFromSoundEffect(u16 soundEffect); +void sub_807A790(s8 gammaIndex); +void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay); + +extern const u16 gCloudsWeatherPalette[]; +extern const u16 gSandstormWeatherPalette[]; +extern const u8 gWeatherFogDiagonalTiles[]; +extern const u8 gWeatherFogHorizontalTiles[]; +extern const u8 gWeatherCloudTiles[]; +extern const u8 gWeatherSnow1Tiles[]; +extern const u8 gWeatherSnow2Tiles[]; +extern const u8 gWeatherBubbleTiles[]; +extern const u8 gWeatherAshTiles[]; +extern const u8 gWeatherRainTiles[]; +extern const u8 gWeatherSandstormTiles[]; #endif // GUARD_WEATHER_H diff --git a/include/field_weather_effects.h b/include/field_weather_effects.h index 11d3314a2..8ff3bae9c 100644 --- a/include/field_weather_effects.h +++ b/include/field_weather_effects.h @@ -4,15 +4,15 @@ 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 FogHorizontal_Finish(void); +bool8 FogDiagonal_Finish(void); bool8 Rain_Finish(void); +bool8 Thunderstorm_Finish(void); bool8 Sandstorm_Finish(void); bool8 Snow_Finish(void); -bool8 sub_807B434(void); -bool8 sub_807B6BC(void); -bool8 sub_807D8D0(void); +bool8 Sunny_Finish(void); +bool8 Drought_Finish(void); +bool8 Shade_Finish(void); void Ash_InitAll(void); void Ash_InitVars(void); void Ash_Main(void); @@ -25,31 +25,31 @@ 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 FogHorizontal_InitAll(void); +void FogHorizontal_InitVars(void); +void FogHorizontal_Main(void); +void FogDiagonal_InitAll(void); +void FogDiagonal_InitVars(void); +void FogDiagonal_Main(void); +void Rain_InitAll(void); +void Rain_InitVars(void); void Rain_Main(void); +void Thunderstorm_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); +void Shade_InitAll(void); +void Shade_InitVars(void); +void Sunny_InitAll(void); +void Sunny_InitVars(void); +void Sunny_Main(void); +void Shade_Main(void); +void Snow_Main(void); +void Thunderstorm_InitVars(void); +void Thunderstorm_InitAll(void); +void Downpour_InitVars(void); +void Downpour_InitAll(void); #endif //GUARD_FIELD_WEATHER_EFFECTS_H diff --git a/include/graphics.h b/include/graphics.h index 3930861f8..8978719a8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4322,7 +4322,7 @@ extern const u32 gSubstituteDollTilemap[]; extern const u32 gSubstituteDollPal[]; // ice -extern const u8 gWeatherFog1Tiles[]; +extern const u8 gWeatherFogHorizontalTiles[]; extern const u32 gBattleAnimFogTilemap[]; extern const u16 gUnknown_83C2CE0[]; -- cgit v1.2.3 From 39587fe2bcfdc8a353e2ca91ca1ed370d748613e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 17 Mar 2020 08:28:09 -0400 Subject: Address review comments --- include/field_weather.h | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'include') diff --git a/include/field_weather.h b/include/field_weather.h index 3dc17b072..432c8c100 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -31,11 +31,11 @@ struct Weather u8 gammaStepDelay; u8 gammaStepFrameCounter; u16 fadeDestColor; - /*0x6C6*/ u8 palProcessingState; - /*0x6C7*/ u8 fadeScreenCounter; - /*0x6C8*/ bool8 readyForInit; - /*0x6C9*/ u8 taskId; - /*0x6CA*/ u8 unknown_6CA; + u8 palProcessingState; + u8 fadeScreenCounter; + bool8 readyForInit; + u8 taskId; + u8 unknown_6CA; u8 unknown_6CB; u16 initStep; u16 finishStep; @@ -52,8 +52,7 @@ struct Weather u8 rainSpriteVisibleDelay; u8 isDownpour; u8 rainStrength; - /*0x6DE*/ u8 cloudSpritesCreated; - u8 filler_6DF[1]; + bool8 cloudSpritesCreated; u16 snowflakeVisibleCounter; u16 unknown_6E2; u8 snowflakeSpriteCount; @@ -63,17 +62,16 @@ struct Weather u8 unknown_6EA; u8 unknown_6EB; u8 unknown_6EC; - u8 thunderTriggered; + bool8 thunderTriggered; u16 fogHScrollPosX; u16 fogHScrollCounter; u16 fogHScrollOffset; u8 lightenedFogSpritePals[6]; u8 lightenedFogSpritePalsCount; - u8 fogHSpritesCreated; + bool8 fogHSpritesCreated; u16 ashBaseSpritesX; u16 unknown_6FE; - u8 ashSpritesCreated; - u8 filler_701[3]; + bool8 ashSpritesCreated; u32 sandstormXOffset; u32 sandstormYOffset; u8 filler_70C[2]; @@ -81,22 +79,20 @@ struct Weather u16 sandstormPosY; u16 sandstormWaveIndex; u16 sandstormWaveCounter; - u8 sandstormSpritesCreated; - u8 sandstormSwirlSpritesCreated; + bool8 sandstormSpritesCreated; + bool8 sandstormSwirlSpritesCreated; u16 fogDBaseSpritesX; u16 fogDPosY; u16 fogDScrollXCounter; u16 fogDScrollYCounter; u16 fogDXOffset; u16 fogDYOffset; - u8 fogDSpritesCreated; - u8 filler_725[1]; + bool8 fogDSpritesCreated; u16 bubblesDelayCounter; u16 bubblesDelayIndex; u16 bubblesCoordsIndex; u16 bubblesSpriteCount; - u8 bubblesSpritesCreated; - u8 filler_72F; + bool8 bubblesSpritesCreated; u16 currBlendEVA; u16 currBlendEVB; u16 targetBlendEVA; @@ -104,7 +100,6 @@ struct Weather u8 blendUpdateCounter; u8 blendFrameCounter; u8 blendDelay; - u8 filler_73B[0x3C-0x3B]; s16 unknown_73C; s16 unknown_73E; s16 unknown_740; -- cgit v1.2.3