From 932546a3d576de49e1d8cb3de237282fbb1b1cc8 Mon Sep 17 00:00:00 2001 From: Till Affeldt Date: Wed, 22 Feb 2023 05:22:45 +0100 Subject: [PATCH] Enable shadows, increase puddle transparency, tweak player speed buffs --- abms/puddle.lua | 2 +- ca_weathers/ambient.lua | 51 ++++++++++++++++++++++++++++++--------- ca_weathers/deep_cave.lua | 4 +++ init.lua | 2 +- mod.conf | 1 - settingtypes.txt | 2 +- 6 files changed, 47 insertions(+), 15 deletions(-) diff --git a/abms/puddle.lua b/abms/puddle.lua index 3d72761..f279bff 100644 --- a/abms/puddle.lua +++ b/abms/puddle.lua @@ -53,7 +53,7 @@ for i = 1, VARIANT_COUNT do local name = BLOCK_PREFIX .. i local index = i if i < 10 then index = "0" .. i end - local texture = "weather_puddle_" .. index .. ".png^[opacity:128" + local texture = "weather_puddle_" .. index .. ".png^[opacity:24" if flip == 1 then name = name .. "_flipped" texture = texture .. "^[transformFX" diff --git a/ca_weathers/ambient.lua b/ca_weathers/ambient.lua index 53c625d..08d0287 100644 --- a/ca_weathers/ambient.lua +++ b/ca_weathers/ambient.lua @@ -12,21 +12,47 @@ local function calc_cloud_height(heat, humidity, dewpoint) return base + climate_api.utility.rangelim(variation, -scale, scale) end +-- maps range of 0 to 1 to any other range +local function map_range(val, low, high) + return (val + low) * (high - low) +end + local function generate_effects(params) local override = {} + local cloud_density = climate_api.utility.rangelim(params.humidity / 100, 0.15, 0.65) + local cloud_thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18) local cloud_height = calc_cloud_height(params.heat, params.humidity, params.dewpoint) local wind = climate_api.environment.get_wind({ x = 0, y = cloud_height, z = 0 }) + -- diffuse shadows when cloudy + -- zero at density 0.65 and one at 0.15 + local cloud_shadows = 1.075 - (cloud_density / 0.5) + + -- diffuse shadows at dawn / dusk + -- 15 hours between dawn and dusk accoring to https://wiki.minetest.net/Time_of_day + local daylight_duration = 15 / 24 + local daytime = climate_api.utility.rangelim(minetest.get_timeofday(), 0.1875, 0.8125) + -- zero at dawn / dusk and one at midday + local daytime_shadows = 1 - (math.abs(0.5 - daytime) * 2 / daylight_duration) + + local shadow_intensity = map_range(cloud_shadows + daytime_shadows, 0.15, 0.5) + local light_saturation = map_range(cloud_shadows + daytime_shadows, 0.8, 1.2) + local skybox = {priority = 10} skybox.cloud_data = { - density = climate_api.utility.rangelim(params.humidity / 100, 0.15, 0.65), + density = cloud_density, speed = wind, - thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18), + thickness = cloud_thickness, height = cloud_height, ambient = "#0f0f1050" } + skybox.light_data = { + shadow_intensity = shadow_intensity, + saturation = light_saturation + } + if params.height > -100 and params.humidity > 40 then skybox.cloud_data.color = "#b2a4a4b0" end @@ -50,16 +76,19 @@ local function generate_effects(params) override["climate_api:skybox"] = skybox - local movement = params.player:get_velocity() - local movement_direction - if (vector.length(movement) < 0.1) then - movement_direction = vector.new(0, 0, 0) - else - movement_direction = vector.normalize(movement) + if params.height > - 50 and not params.indoors then + local movement = params.player:get_velocity() + local movement_direction + if (vector.length(movement) < 0.1) then + movement_direction = vector.new(0, 0, 0) + else + movement_direction = vector.normalize(movement) + end + local vector_product = vector.dot(movement_direction, wind) + local movement_penalty = climate_api.utility.sigmoid(vector_product, 1.5, 0.15, 0.9) + 0.2 + override["regional_weather:speed_buff"] = movement_penalty end - local vector_product = vector.dot(movement_direction, wind) - local movement_penalty = climate_api.utility.sigmoid(vector_product, 1.5, 0.15, 0.9) + 0.2 - override["regional_weather:speed_buff"] = movement_penalty + return override end diff --git a/ca_weathers/deep_cave.lua b/ca_weathers/deep_cave.lua index 219f359..1945a62 100644 --- a/ca_weathers/deep_cave.lua +++ b/ca_weathers/deep_cave.lua @@ -18,6 +18,10 @@ effects["climate_api:skybox"] = { }, moon_data = { visible = false }, star_data = { visible = false }, + light_data = { + shadow_intensity = 0, + saturation = 1 + }, priority = 100 } diff --git a/init.lua b/init.lua index d46cc02..ad0801c 100644 --- a/init.lua +++ b/init.lua @@ -19,7 +19,7 @@ end regional_weather = {} regional_weather.settings = {} -regional_weather.settings.player_speed = get_setting_bool("player_speed", true) +regional_weather.settings.player_speed = get_setting_bool("player_speed", false) regional_weather.settings.snow = get_setting_bool("snow_layers", true) regional_weather.settings.snow_griefing = get_setting_bool("snow_griefing", true) regional_weather.settings.puddles = get_setting_bool("puddles", true) diff --git a/mod.conf b/mod.conf index 235ec07..a161fb7 100644 --- a/mod.conf +++ b/mod.conf @@ -1,7 +1,6 @@ name = regional_weather title = Regional Weather author = TestificateMods -release = 100000 depends = climate_api optional_depends = default, lightning, farming, fire, pedology description = """ diff --git a/settingtypes.txt b/settingtypes.txt index 6122499..cbc161e 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,7 +1,7 @@ [Features] # If set to true, wind will boost or penalize player movements based on direction. -regional_weather_player_speed (Change movement speed based on wind) bool true +regional_weather_player_speed (Change movement speed based on wind) bool false # If set to true, snow layers will stack up during snowy weather. regional_weather_snow_layers (Place snow layers) bool true