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 | |
parent | 6e00e822101c4c3f68bce0789ba56133b24b586b (diff) |
field_weather_util
-rw-r--r-- | asm/field_weather_util.s | 287 | ||||
-rw-r--r-- | asm/overworld.s | 4 | ||||
-rw-r--r-- | data/field_weather.s | 6 | ||||
-rw-r--r-- | include/blend_palette.h | 1 | ||||
-rw-r--r-- | include/constants/weather.h | 2 | ||||
-rw-r--r-- | include/field_weather.h | 116 | ||||
-rw-r--r-- | include/field_weather_effects.h | 55 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-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 |
11 files changed, 313 insertions, 472 deletions
diff --git a/asm/field_weather_util.s b/asm/field_weather_util.s index c31f35763..d018bae19 100644 --- a/asm/field_weather_util.s +++ b/asm/field_weather_util.s @@ -5,291 +5,4 @@ .text - thumb_func_start sub_807B0C4 -sub_807B0C4: @ 807B0C4 - push {lr} - adds r1, r0, 0 - adds r3, r2, 0 - ldr r0, _0807B0E8 @ =gWeather - movs r2, 0xDA - lsls r2, 3 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0xB - beq _0807B0F0 - cmp r0, 0xB - bgt _0807B0EC - cmp r0, 0x5 - bgt _0807B0FA - cmp r0, 0x3 - blt _0807B0FA - b _0807B0F0 - .align 2, 0 -_0807B0E8: .4byte gWeather -_0807B0EC: - cmp r0, 0xD - bne _0807B0FA -_0807B0F0: - adds r0, r1, 0 - movs r1, 0 - movs r2, 0x3 - bl sub_8045314 -_0807B0FA: - pop {r0} - bx r0 - thumb_func_end sub_807B0C4 - - thumb_func_start SetSav1Weather -SetSav1Weather: @ 807B100 - push {r4,r5,lr} - ldr r4, _0807B12C @ =gSaveBlock1Ptr - ldr r1, [r4] - adds r1, 0x2E - ldrb r5, [r1] - lsls r0, 24 - lsrs r0, 24 - bl TranslateWeatherNum - ldr r1, [r4] - adds r1, 0x2E - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x2E - ldrb r0, [r0] - adds r1, r5, 0 - bl UpdateRainCounter - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807B12C: .4byte gSaveBlock1Ptr - thumb_func_end SetSav1Weather - - thumb_func_start sav1_get_weather_probably -sav1_get_weather_probably: @ 807B130 - ldr r0, _0807B13C @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r0, 0x2E - ldrb r0, [r0] - bx lr - .align 2, 0 -_0807B13C: .4byte gSaveBlock1Ptr - thumb_func_end sav1_get_weather_probably - - thumb_func_start SetSav1WeatherFromCurrMapHeader -SetSav1WeatherFromCurrMapHeader: @ 807B140 - push {r4,r5,lr} - ldr r4, _0807B16C @ =gSaveBlock1Ptr - ldr r0, [r4] - adds r0, 0x2E - ldrb r5, [r0] - ldr r0, _0807B170 @ =gMapHeader - ldrb r0, [r0, 0x16] - bl TranslateWeatherNum - ldr r1, [r4] - adds r1, 0x2E - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x2E - ldrb r0, [r0] - adds r1, r5, 0 - bl UpdateRainCounter - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807B16C: .4byte gSaveBlock1Ptr -_0807B170: .4byte gMapHeader - thumb_func_end SetSav1WeatherFromCurrMapHeader - - thumb_func_start SetWeather -SetWeather: @ 807B174 - push {lr} - bl SetSav1Weather - bl sav1_get_weather_probably - lsls r0, 24 - lsrs r0, 24 - bl SetNextWeather - pop {r0} - bx r0 - thumb_func_end SetWeather - - thumb_func_start sub_807B18C -sub_807B18C: @ 807B18C - push {lr} - bl SetSav1Weather - bl sav1_get_weather_probably - lsls r0, 24 - lsrs r0, 24 - bl SetCurrentAndNextWeather - pop {r0} - bx r0 - thumb_func_end sub_807B18C - - thumb_func_start DoCurrentWeather -DoCurrentWeather: @ 807B1A4 - push {lr} - bl sav1_get_weather_probably - lsls r0, 24 - lsrs r0, 24 - bl SetNextWeather - pop {r0} - bx r0 - thumb_func_end DoCurrentWeather - - thumb_func_start sub_807B1B8 -sub_807B1B8: @ 807B1B8 - push {lr} - bl sav1_get_weather_probably - lsls r0, 24 - lsrs r0, 24 - bl SetCurrentAndNextWeather - pop {r0} - bx r0 - thumb_func_end sub_807B1B8 - - thumb_func_start TranslateWeatherNum -TranslateWeatherNum: @ 807B1CC - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x15 - bhi _0807B294 - lsls r0, 2 - ldr r1, _0807B1E0 @ =_0807B1E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807B1E0: .4byte _0807B1E4 - .align 2, 0 -_0807B1E4: - .4byte _0807B294 - .4byte _0807B23C - .4byte _0807B240 - .4byte _0807B244 - .4byte _0807B248 - .4byte _0807B24C - .4byte _0807B250 - .4byte _0807B254 - .4byte _0807B258 - .4byte _0807B25C - .4byte _0807B260 - .4byte _0807B264 - .4byte _0807B268 - .4byte _0807B26C - .4byte _0807B270 - .4byte _0807B294 - .4byte _0807B294 - .4byte _0807B294 - .4byte _0807B294 - .4byte _0807B294 - .4byte _0807B274 - .4byte _0807B27C -_0807B23C: - movs r0, 0x1 - b _0807B296 -_0807B240: - movs r0, 0x2 - b _0807B296 -_0807B244: - movs r0, 0x3 - b _0807B296 -_0807B248: - movs r0, 0x4 - b _0807B296 -_0807B24C: - movs r0, 0x5 - b _0807B296 -_0807B250: - movs r0, 0x6 - b _0807B296 -_0807B254: - movs r0, 0x7 - b _0807B296 -_0807B258: - movs r0, 0x8 - b _0807B296 -_0807B25C: - movs r0, 0x9 - b _0807B296 -_0807B260: - movs r0, 0xA - b _0807B296 -_0807B264: - movs r0, 0xB - b _0807B296 -_0807B268: - movs r0, 0xC - b _0807B296 -_0807B26C: - movs r0, 0xD - b _0807B296 -_0807B270: - movs r0, 0xE - b _0807B296 -_0807B274: - ldr r1, _0807B278 @ =gUnknown_83C65C0 - b _0807B27E - .align 2, 0 -_0807B278: .4byte gUnknown_83C65C0 -_0807B27C: - ldr r1, _0807B28C @ =gUnknown_83C65C4 -_0807B27E: - ldr r0, _0807B290 @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r0, 0x2F - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - b _0807B296 - .align 2, 0 -_0807B28C: .4byte gUnknown_83C65C4 -_0807B290: .4byte gSaveBlock1Ptr -_0807B294: - movs r0, 0 -_0807B296: - pop {r1} - bx r1 - thumb_func_end TranslateWeatherNum - - thumb_func_start UpdateWeatherPerDay -UpdateWeatherPerDay: @ 807B29C - lsls r0, 16 - ldr r1, _0807B2B8 @ =gSaveBlock1Ptr - ldr r2, [r1] - adds r2, 0x2F - lsrs r0, 16 - ldrb r1, [r2] - adds r0, r1 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - strb r1, [r2] - bx lr - .align 2, 0 -_0807B2B8: .4byte gSaveBlock1Ptr - thumb_func_end UpdateWeatherPerDay - - thumb_func_start UpdateRainCounter -UpdateRainCounter: @ 807B2BC - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r2, r0, 24 - cmp r0, r1 - beq _0807B2D6 - cmp r2, 0x3 - beq _0807B2D0 - cmp r2, 0x5 - bne _0807B2D6 -_0807B2D0: - movs r0, 0x28 - bl IncrementGameStat -_0807B2D6: - pop {r0} - bx r0 - thumb_func_end UpdateRainCounter - .align 2, 0 @ Don't pad with nop diff --git a/asm/overworld.s b/asm/overworld.s index 504fecbf1..179d79fdc 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -4645,7 +4645,7 @@ _08057050: _08057056: bl FieldEffectActiveListClear bl StartWeather - bl sub_807B1B8 + bl ResumePausedWeather cmp r4, 0 bne _0805706A bl SetUpFieldTasks @@ -5401,7 +5401,7 @@ _0805769C: bl InstallCameraPanAheadCallback bl FieldEffectActiveListClear bl StartWeather - bl sub_807B1B8 + bl ResumePausedWeather bl SetUpFieldTasks bl mapheader_run_script_with_tag_x5 b _0805772A diff --git a/data/field_weather.s b/data/field_weather.s index 7e40ea747..acd7744cd 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -7,12 +7,6 @@ .section .rodata .align 2 -gUnknown_83C65C0:: @ 83C65C0 - .byte 0x02, 0x03, 0x05, 0x03 - -gUnknown_83C65C4:: @ 83C65C4 - .byte 0x02, 0x02, 0x03, 0x02 - gUnknown_83C65C8:: @ 83C65C8 .2byte 0x0000, 0x0042, 0x0005, 0x0049, 0x000a, 0x004e 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; 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) |