diff --git a/include/field_weather.h b/include/field_weather.h index 9c6a4ab7ad..c462707f9d 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -45,7 +45,8 @@ struct Weather s8 gammaTargetIndex; u8 gammaStepDelay; u8 gammaStepFrameCounter; - u16 fadeDestColor; + u16 fadeDestColor:15; + u16 noShadows:1; // Certain weathers require blend coeffs that do not work nice with shadows u8 palProcessingState; u8 fadeScreenCounter; bool8 readyForInit; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ce94116aa0..939ff3ca6d 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8856,14 +8856,14 @@ static void GroundEffect_Shadow(struct ObjectEvent *objEvent, struct Sprite *spr static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags) { u8 i; - if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !ShouldMewShakeGrass(objEvent)) return; for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1) if (flags & 1) sGroundEffectFuncs[i](objEvent, sprite); - GroundEffect_Shadow(objEvent, sprite); + if (!gWeatherPtr->noShadows) + GroundEffect_Shadow(objEvent, sprite); } void filters_out_some_ground_effects(struct ObjectEvent *objEvent, u32 *flags) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index f3d4d71491..ed5ffecd62 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -349,6 +349,7 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) sprite->invisible = linkedSprite->invisible; if (!objectEvent->active || objectEvent->noShadow + || gWeatherPtr->noShadows || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->previousMetatileBehavior)) diff --git a/src/field_weather.c b/src/field_weather.c index 0b8427c293..e94d6f254e 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -255,6 +255,7 @@ static void Task_WeatherMain(u8 taskId) static void None_Init(void) { Weather_SetBlendCoeffs(8, 12); // Indoor shadows + gWeatherPtr->noShadows = FALSE; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 0; } diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index d8eff78b7b..36ca937b6a 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -95,6 +95,7 @@ static const struct SpriteTemplate sCloudSpriteTemplate = void Clouds_InitVars(void) { + gWeatherPtr->noShadows = FALSE; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; @@ -156,6 +157,7 @@ void Sunny_InitVars(void) gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; Weather_SetBlendCoeffs(8, 12); + gWeatherPtr->noShadows = FALSE; } void Sunny_InitAll(void) @@ -239,6 +241,7 @@ void Drought_InitVars(void) gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 0; + gWeatherPtr->noShadows = FALSE; } void Drought_InitAll(void) @@ -482,6 +485,7 @@ void Rain_InitVars(void) gWeatherPtr->gammaStepDelay = 20; SetRainStrengthFromSoundEffect(SE_RAIN); Weather_SetBlendCoeffs(8, 12); // preserve shadow darkness + gWeatherPtr->noShadows = FALSE; } void Rain_InitAll(void) @@ -776,6 +780,7 @@ void Snow_InitVars(void) gWeatherPtr->targetSnowflakeSpriteCount = 16; gWeatherPtr->snowflakeVisibleCounter = 0; Weather_SetBlendCoeffs(8, 12); // preserve shadow darkness + gWeatherPtr->noShadows = FALSE; } void Snow_InitAll(void) @@ -1052,6 +1057,7 @@ void Thunderstorm_InitVars(void) gWeatherPtr->thunderTriggered = FALSE; SetRainStrengthFromSoundEffect(SE_THUNDERSTORM); Weather_SetBlendCoeffs(8, 12); // preserve shadow darkness + gWeatherPtr->noShadows = FALSE; } void Thunderstorm_InitAll(void) @@ -1081,6 +1087,7 @@ void Downpour_InitVars(void) gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment SetRainStrengthFromSoundEffect(SE_DOWNPOUR); Weather_SetBlendCoeffs(8, 12); // preserve shadow darkness + gWeatherPtr->noShadows = FALSE; } void Downpour_InitAll(void) @@ -1378,6 +1385,7 @@ void FogHorizontal_InitVars(void) gWeatherPtr->fogHScrollPosX = 0; Weather_SetBlendCoeffs(0, 16); } + gWeatherPtr->noShadows = TRUE; // TODO: Can fog be made compatible with shadows? } void FogHorizontal_InitAll(void) @@ -1532,6 +1540,7 @@ void Ash_InitVars(void) Weather_SetBlendCoeffs(0, 12); // SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // These aren't valid blend coefficients! } + gWeatherPtr->noShadows = FALSE; } void Ash_InitAll(void) @@ -1748,6 +1757,7 @@ void FogDiagonal_InitVars(void) gWeatherPtr->fogDPosY = 0; Weather_SetBlendCoeffs(0, 16); } + gWeatherPtr->noShadows = TRUE; } void FogDiagonal_InitAll(void) @@ -1961,6 +1971,7 @@ void Sandstorm_InitVars(void) Weather_SetBlendCoeffs(0, 16); } + gWeatherPtr->noShadows = TRUE; // TODO: Can sandstorm be compatible with shadows? } void Sandstorm_InitAll(void) @@ -2248,6 +2259,7 @@ void Shade_InitVars(void) gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; Weather_SetBlendCoeffs(8, 12); // preserve shadow darkness + gWeatherPtr->noShadows = FALSE; } void Shade_InitAll(void) @@ -2309,6 +2321,7 @@ void Bubbles_InitVars(void) gWeatherPtr->bubblesCoordsIndex = 0; gWeatherPtr->bubblesSpriteCount = 0; } + gWeatherPtr->noShadows = TRUE; } void Bubbles_InitAll(void)