2 Commits

Author SHA1 Message Date
932546a3d5 Enable shadows, increase puddle transparency, tweak player speed buffs 2023-02-22 05:22:45 +01:00
351c11b3c7 Modernize API calls
* Textures: fix invalid srgb profiles

* Deprecated get_player_velocity -> get_velocity

* Deprecated: boolean value for use_texture_alpha

---------

Co-authored-by: mazes 80 <>
2023-02-22 03:12:24 +01:00
9 changed files with 49 additions and 17 deletions

View File

@ -20,7 +20,7 @@ minetest.register_node(BLOCK_NAME, {
},
freezemelt = "default:river_water_source",
sounds = default.node_sound_glass_defaults(),
use_texture_alpha = true,
use_texture_alpha = "blend",
drop = "",
on_destruct = function(pos)
-- asynchronous to avoid destruction loop

View File

@ -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"
@ -69,7 +69,7 @@ for i = 1, VARIANT_COUNT do
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
use_texture_alpha = "blend",
node_box = node_box,
groups = {
not_in_creative_inventory = 1,

View File

@ -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_player_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

View File

@ -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
}

View File

@ -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)

View File

@ -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 = """

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 93 KiB