Improve heavy snow performance, add pedology support, add documentation

This commit is contained in:
Till Affeldt 2020-04-26 18:10:46 +02:00
parent acab95402a
commit 72716122d7
10 changed files with 72 additions and 25 deletions

View File

@ -8,7 +8,14 @@ local BLOCK_NAME = "regional_weather:ice"
minetest.register_node(BLOCK_NAME, {
tiles = {"(default_ice.png^[colorize:#ffffff:50)^[opacity:200"},
paramtype = "light",
groups = {cracky = 3, cools_lava = 1, slippery = 3, dig_immediate = 2},
groups = {
cracky = 3,
cools_lava = 1,
slippery = 3,
dig_immediate = 2,
melts = 1
},
freezemelt = "default:river_water_source",
sounds = default.node_sound_glass_defaults(),
use_texture_alpha = true,
drop = "",

28
abms/pedology.lua Normal file
View File

@ -0,0 +1,28 @@
if not regional_weather.settings.pedology
or not minetest.get_modpath("pedology")
then return end
climate_api.register_abm({
label = "wetten or dry pedology nodes",
nodenames = { "group:sucky" },
neighbors = { "air" },
interval = 25,
chance = 30,
catch_up = false,
conditions = {
min_height = regional_weather.settings.min_height,
max_height = regional_weather.settings.max_height,
min_heat = 25,
min_light = 15
},
action = function (pos, node, env)
local wetness = minetest.get_item_group(node.name, "wet") or 0
if wetness < 2 and env.humidity > 55 then
pedology.wetten(pos)
elseif wetness > 0 and wetness < 3 and env.humidity < 40 then
pedology.dry(pos)
end
end
})

View File

@ -77,7 +77,7 @@ climate_api.register_abm({
end,
action = function (pos, node, env)
if minetest.get_node(pos).name ~= "air" then return end
if node.name ~= "air" then return end
local base = minetest.get_node(vector.add(pos, {x=0, y=-1, z=0})).name
local is_soil = minetest.get_item_group(base, "soil") or 0
local is_stone = minetest.get_item_group(base, "stone") or 0
@ -109,8 +109,7 @@ climate_api.register_abm({
},
action = function (pos, node, env)
local node_name = minetest.get_node(pos).name
local value = minetest.get_item_group(node_name, "regional_weather_snow_cover")
local value = minetest.get_item_group(node.name, "regional_weather_snow_cover")
if value == nil then value = 0 end
if value < 5 then
minetest.set_node(pos, { name = BLOCK_PREFIX .. (value + 1) })
@ -130,8 +129,7 @@ climate_api.register_abm({
},
action = function (pos, node, env)
local node_name = minetest.get_node(pos).name
local value = minetest.get_item_group(node_name, "regional_weather_snow_cover")
local value = minetest.get_item_group(node.name, "regional_weather_snow_cover")
if value == nil then value = 0 end
if value > 1 then
minetest.set_node(pos, { name = BLOCK_PREFIX .. (value - 1) })

View File

@ -1,3 +1,11 @@
--[[
# Player Damage Effect
Use this effect to damage a player during dangerous weather events.
Expects a table as the parameter containing the following values:
- ``value <number>``: The amount of damage to be applied per successful roll per cycle
- ``chance <number>``: Defines a 1/x chance for the player to get damaged. Higher values result in less frequent damage.
]]
if not minetest.is_yes(minetest.settings:get_bool("enable_damage"))
or not regional_weather.settings.damage then return end

View File

@ -1,3 +1,10 @@
--[[
# Lightning Effect
Use this effect to cause lightning strikes.
Requires lightning mod in order to function.
Uses default lightning configuration. Expects any non-nil parameter.
]]
if not minetest.get_modpath("lightning") then return end
local EFFECT_NAME = "regional_weather:lightning"

View File

@ -1,3 +1,9 @@
--[[
# Player Speed Effect
Use this effect to modify a player's movement speed.
Expects a numeric value that will be multiplied with the current speed physics.
]]
local EFFECT_NAME = "regional_weather:speed_buff"
local function handle_effect(player_data)

View File

@ -17,24 +17,13 @@ effects["climate_api:hud_overlay"] = {
}
effects["climate_api:particles"] = {
min_pos = {x=-8, y=3, z=-8},
max_pos = {x= 8, y=6, z= 8},
exptime=6,
size=10,
min_pos = {x=-7, y=3, z=-7},
max_pos = {x= 7, y=6, z= 7},
exptime=7.5,
size=15,
amount=6,
falling_speed = 0.75,
texture="weather_snow.png"
}
local function generate_effects(params)
local avg_humidity = 55
local intensity = params.humidity / avg_humidity
local override = {}
override["climate_api:particles"] = {
amount = 16 * math.min(intensity, 1.5),
falling_speed = 1 / math.min(intensity, 1.3)
}
return climate_api.utility.merge_tables(effects, override)
end
climate_api.register_weather(name, conditions, generate_effects)
climate_api.register_weather(name, conditions, effects)

View File

@ -21,6 +21,7 @@ regional_weather.settings.puddles = get_setting_bool("puddles", true)
regional_weather.settings.soil = get_setting_bool("soil", true)
regional_weather.settings.fire = get_setting_bool("fire", true)
regional_weather.settings.ice = get_setting_bool("ice", true)
regional_weather.settings.pedology = get_setting_bool("pedology", true)
regional_weather.settings.max_height = get_setting_number("max_height", 120)
regional_weather.settings.min_height = get_setting_number("min_height", -50)
@ -55,4 +56,5 @@ dofile(modpath .. "/abms/puddle.lua")
dofile(modpath .. "/abms/snow_cover.lua")
dofile(modpath .. "/abms/fire.lua")
dofile(modpath .. "/abms/ice.lua")
dofile(modpath .. "/abms/pedology.lua")
dofile(modpath .. "/abms/soil.lua")

View File

@ -3,7 +3,7 @@ title = Regional Weather
author = TestificateMods
release = 1
depends = climate_api
optional_depends = default, lightning, farming, fire
optional_depends = default, lightning, farming, fire, pedology
description = """
Not every biome is the same and neither should their weather be.
Regional Weather controls it's effects with the local climate in mind.

View File

@ -19,6 +19,8 @@ regional_weather_soil (Hydrate farmland) bool true
# If set to true, fires will be extinguished during rain showers.
regional_weather_fire (Extinguish fire) bool true
# If set to true, rain will wetten or dry nodes from pedology mod.
regional_weather_pedology (Wetten pedology nodes) bool true
[World Configuration]