diff --git a/gamedata/scripts/lua_help_ex.script b/gamedata/scripts/lua_help_ex.script index c4810e70e0..4a581727c4 100644 --- a/gamedata/scripts/lua_help_ex.script +++ b/gamedata/scripts/lua_help_ex.script @@ -583,6 +583,7 @@ float get_weather_weight() void set_weather_weight(float) void set_weather_smooth(string) + void set_rain_wetness(float) // 0 to 1, read with level.rain_wetness() // Camera, position is x,y,z vector, direction is head,pitch,roll vector in RADIANS void set_cam_custom_position_direction(Fvector position, Fvector direction, int smoothing, bool hudDraw, bool hudAffect) diff --git a/src/xrEngine/Environment_misc.cpp b/src/xrEngine/Environment_misc.cpp index 5d5b47735b..40b1f33aa6 100644 --- a/src/xrEngine/Environment_misc.cpp +++ b/src/xrEngine/Environment_misc.cpp @@ -16,6 +16,9 @@ extern float ps_r2_sun_shafts_min; extern float ps_r2_sun_shafts_value; extern Fvector3 ssfx_wetness_multiplier; +// seconds to fully wet or dry at multiplier 1 +static const float WETNESS_CHANGE_TIME = 166.f; + void CEnvModifier::load(IReader* fs, u32 version) { use_flags.one(); @@ -521,9 +524,9 @@ void CEnvDescriptorMixer::lerp(CEnvironment* env, CEnvDescriptor& A, CEnvDescrip sun_color.lerp(A.sun_color, B.sun_color, f); if (rain_density > 0.f) - env->wetness_factor += ( rain_density * ssfx_wetness_multiplier.x) / 10000.f; + env->wetness_factor += rain_density * ssfx_wetness_multiplier.x * Device.fTimeDelta / WETNESS_CHANGE_TIME; else - env->wetness_factor -= 0.0001f * ssfx_wetness_multiplier.y; + env->wetness_factor -= ssfx_wetness_multiplier.y * Device.fTimeDelta / WETNESS_CHANGE_TIME; clamp(env->wetness_factor, 0.f, 1.f); diff --git a/src/xrGame/level_script.cpp b/src/xrGame/level_script.cpp index 52aebcda7c..2643d4f41d 100644 --- a/src/xrGame/level_script.cpp +++ b/src/xrGame/level_script.cpp @@ -384,6 +384,12 @@ float rain_wetness() return (g_pGamePersistent->Environment().wetness_factor); } +void set_rain_wetness(float val) +{ + clamp(val, 0.f, 1.f); + g_pGamePersistent->Environment().wetness_factor = val; +} + float rain_hemi() { CEffect_Rain* rain = g_pGamePersistent->pEnvironment->eff_Rain; @@ -2728,6 +2734,7 @@ void CLevel::script_register(lua_State* L) def("vertex_in_direction", vertex_in_direction), def("rain_factor", rain_factor), def("rain_wetness", rain_wetness), + def("set_rain_wetness", set_rain_wetness), def("rain_hemi", rain_hemi), def("patrol_path_exists", patrol_path_exists), def("vertex_position", vertex_position),