Update to new particle API, improve night visibility, move damage effect, improve cloud height calculation

This commit is contained in:
Till Affeldt 2020-04-28 01:23:46 +02:00
parent 72716122d7
commit 231642af2f
12 changed files with 136 additions and 108 deletions

View File

@ -25,6 +25,7 @@ The following mods are recommended to be installed alongside Regional Weather:
- [Lightning](https://github.com/minetest-mods/lightning): Adds to heavy rain by enabling additional lightning effects - [Lightning](https://github.com/minetest-mods/lightning): Adds to heavy rain by enabling additional lightning effects
- [Farming](https://github.com/minetest/minetest_game/tree/master/mods/farming) (as part of MTG) or [Farming Redo](https://forum.minetest.net/viewtopic.php?t=9019): Add farmland and crops to grow food. Farmland wil turn wet during rain effects. - [Farming](https://github.com/minetest/minetest_game/tree/master/mods/farming) (as part of MTG) or [Farming Redo](https://forum.minetest.net/viewtopic.php?t=9019): Add farmland and crops to grow food. Farmland wil turn wet during rain effects.
- [Fire](https://github.com/minetest/minetest_game/tree/master/mods/fire) (as part of MTG): Adds fires that can be caused by lightning strikes and other effects and will be extinguished during rain effects. - [Fire](https://github.com/minetest/minetest_game/tree/master/mods/fire) (as part of MTG): Adds fires that can be caused by lightning strikes and other effects and will be extinguished during rain effects.
- [Pedology](https://forum.minetest.net/viewtopic.php?f=11&t=9429) Adds a lot of nodes with dynamic wetness and dryness states.
- [Ambience](https://notabug.org/TenPlus1/ambience): Plays some nice ambient sound effects based on where you are. - [Ambience](https://notabug.org/TenPlus1/ambience): Plays some nice ambient sound effects based on where you are.
For easier installation, you can get a lot of these mods as part of my [Climate Modpack](https://github.com/t-affeldt/climate). For easier installation, you can get a lot of these mods as part of my [Climate Modpack](https://github.com/t-affeldt/climate).
@ -35,8 +36,6 @@ Go to ``Settings → All Settings → Mods → regional_weather`` to change them
Also check out the options inside the ``climate_api`` section for additional configuration options, including performance tweaks and feature switches. Also check out the options inside the ``climate_api`` section for additional configuration options, including performance tweaks and feature switches.
### Features ### Features
- ``Cause player damage`` (default true):
If set to true, sand storms and hail will damage affected players over time.
- ``Place snow layers`` (default true): - ``Place snow layers`` (default true):
If set to true, snow layers will stack up during snowy weather. If set to true, snow layers will stack up during snowy weather.
- ``Freeze river water`` (default true): - ``Freeze river water`` (default true):
@ -50,6 +49,9 @@ Also check out the options inside the ``climate_api`` section for additional con
- ``Extinguish fire`` (bool true): - ``Extinguish fire`` (bool true):
If set to true, fires will be extinguished during rain showers. If set to true, fires will be extinguished during rain showers.
Requires *fire* mod. Requires *fire* mod.
- ``Wetten pedology nodes`` (default true):
If set to true, rain will wetten or dry nodes from pedology mod.
Requires *pedology* mod.
### World Configuration ### World Configuration
- ``Maximum height of weather effects`` (default 120): - ``Maximum height of weather effects`` (default 120):
@ -58,6 +60,10 @@ Also check out the options inside the ``climate_api`` section for additional con
- ``Minimum height of weather effects`` (default -50): - ``Minimum height of weather effects`` (default -50):
No visual effects will be applied below this height. No visual effects will be applied below this height.
This will prevent unwanted visuals within large underground caves. This will prevent unwanted visuals within large underground caves.
- ``Cloud height`` (default 120)
Average height of cloud bases
- ``Cloud height variation`` (default 40)
Maxmial variation of cloud height from base value
## License information ## License information
### Source Code ### Source Code

View File

@ -1,30 +0,0 @@
--[[
# 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
local EFFECT_NAME = "regional_weather:damage"
local rng = PcgRandom(7819792)
local function handle_effect(player_data)
for playername, data in pairs(player_data) do
local player = minetest.get_player_by_name(playername)
local hp = player:get_hp()
for weather, dmg in pairs(data) do
if rng:next(1, dmg.chance) == 1 then
hp = hp - dmg.value
end
end
player:set_hp(hp, "weather damage")
end
end
climate_api.register_effect(EFFECT_NAME, handle_effect, "tick")
climate_api.set_effect_cycle(EFFECT_NAME, climate_api.MEDIUM_CYCLE)

View File

@ -3,17 +3,33 @@ local CLOUD_SPEED = 1.8
local conditions = {} local conditions = {}
-- see https://en.wikipedia.org/wiki/Cloud_base
local function calc_cloud_height(heat, humidity, dewpoint)
local base = regional_weather.settings.cloud_height
-- much lower scale like 20 instead of 1000 fitting for Minetest
local scale = regional_weather.settings.cloud_scale
local spread = heat - dewpoint
local variation = spread / 4.4 * scale * 0.3
return base + climate_api.utility.rangelim(variation, -scale, scale)
end
local function generate_effects(params) local function generate_effects(params)
local override = {} local override = {}
local wind = climate_api.environment.get_wind() local wind = climate_api.environment.get_wind()
local skybox = {priority = 10} local skybox = {priority = 10}
skybox.cloud_data = { skybox.cloud_data = {
density = climate_api.utility.rangelim(params.humidity / 100, 0.25, 0.75), density = climate_api.utility.rangelim(params.humidity / 100, 0.15, 0.65),
speed = vector.multiply(wind, CLOUD_SPEED), speed = vector.multiply(wind, CLOUD_SPEED),
thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18) thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18),
height = calc_cloud_height(params.heat, params.humidity, params.dewpoint),
ambient = "#0f0f1050"
} }
if params.height > -100 and params.humidity > 40 then
skybox.cloud_data.color = "#b2a4a4b0"
end
if params.height > -100 and params.humidity > 65 then if params.height > -100 and params.humidity > 65 then
skybox.sky_data = { skybox.sky_data = {
type = "regular", type = "regular",
@ -27,6 +43,8 @@ local function generate_effects(params)
night_horizon = "#315d9b" night_horizon = "#315d9b"
} }
} }
skybox.cloud_data.color = "#828e97b5"
skybox.cloud_data.ambient = "#20212250"
end end
override["climate_api:skybox"] = skybox override["climate_api:skybox"] = skybox

View File

@ -11,9 +11,14 @@ local conditions = {
local effects = {} local effects = {}
effects["regional_weather:damage"] = { effects["climate_api:damage"] = {
chance = 15, chance = 15,
value = 3 value = 3,
check = {
type = "raycast",
height = 7,
velocity = 20
}
} }
effects["climate_api:sound"] = { effects["climate_api:sound"] = {
@ -21,18 +26,19 @@ effects["climate_api:sound"] = {
gain = 1 gain = 1
} }
effects["climate_api:particles"] = { local textures = {}
min_pos = {x=-9, y=7, z=-9}, for i = 1,5 do
max_pos = {x= 9, y=7, z= 9}, textures[i] = "weather_hail" .. i .. ".png"
falling_speed=20,
amount=6,
exptime=0.7,
size=1,
textures = {}
}
for i = 1,5,1 do
effects["climate_api:particles"].textures[i] = "weather_hail" .. i .. ".png"
end end
effects["climate_api:particles"] = {
boxsize = { x = 18, y = 0, z = 18},
v_offset = 7,
velocity = 20,
amount = 6,
expirationtime = 0.7,
texture = textures,
glow = 5
}
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -34,14 +34,15 @@ local conditions = {
local effects = {} local effects = {}
effects["climate_api:particles"] = { effects["climate_api:particles"] = {
min_pos = {x=-12, y=-4, z=-12}, boxsize = { x = 24, y = 0, z = 24 },
max_pos = {x= 12, y= 1, z= 12}, vbox = 5,
falling_speed = -0.1, v_offset = -1,
acceleration = {x=0,y=-0.03,z=0}, velocity = -0.1,
amount = 1, acceleration = -0.03,
exptime = 5, expirationtime = 5,
size = 0.8, size = 0.8,
texture = "weather_pollen.png" texture = "weather_pollen.png",
glow = 2
} }
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -17,14 +17,15 @@ effects["climate_api:sound"] = {
} }
effects["climate_api:particles"] = { effects["climate_api:particles"] = {
min_pos = {x=-9, y=8, z=-9}, boxsize = { x = 18, y = 2, z = 18 },
max_pos = {x= 9, y=6, z= 9}, v_offset = 6,
exptime = 1.1, expirationtime = 1.6,
size = 2, size = 2,
amount = 15, amount = 15,
falling_speed = 6, velocity = 6,
acceleration={x=0, y=-0.05, z=0}, acceleration = 0.05,
texture = "weather_raindrop.png" texture = "weather_raindrop.png",
glow = 5
} }
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -10,24 +10,32 @@ local conditions = {
local effects = {} local effects = {}
effects["climate_api:skybox"] = {
cloud_data = {
color = "#5e676eb5"
},
priority = 11
}
effects["climate_api:sound"] = { effects["climate_api:sound"] = {
name = "weather_rain_heavy", name = "weather_rain_heavy",
gain = 1 gain = 1
} }
effects["climate_api:particles"] = { effects["climate_api:particles"] = {
min_pos = {x=-9, y=7, z=-9}, boxsize = { x = 18, y = 0, z = 18 },
max_pos = {x= 9, y=7, z= 9}, v_offset = 7,
falling_speed=7, velocity = 7,
amount=17, amount = 17,
exptime=0.8, expirationtime = 1.2,
min_size=25, minsize = 25,
max_size=35, maxsize = 35,
textures={ texture = {
"weather_rain.png", "weather_rain.png",
"weather_rain.png", "weather_rain.png",
"weather_rain_medium.png" "weather_rain_medium.png"
} },
glow = 5
} }
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -24,22 +24,28 @@ effects["climate_api:hud_overlay"] = {
color_correction = true color_correction = true
} }
effects["regional_weather:damage"] = { effects["climate_api:damage"] = {
chance = 3, chance = 3,
value = 1 value = 1,
check = {
type = "raycast",
height = 0,
velocity = 0.3
}
} }
effects["climate_api:particles"] = { effects["climate_api:particles"] = {
min_pos = {x=-5, y=-4, z=-5}, boxsize = { x = 8, y = 4.5, z = 8 },
max_pos = {x= 5, y= 4.5, z= 5}, velocity = 0.6,
falling_speed=1.2, acceleration = -0.2,
acceleration={x=0,y=0.8,z=0}, amount = 12,
amount=40, expirationtime = 0.7,
exptime=1.8, size = 25,
size=20, texture = {
textures={
"weather_sandstorm.png", "weather_sandstorm.png",
"weather_sandstorm.png^[transformR180" "weather_sandstorm.png^[transformFY",
"weather_sandstorm.png^[transformR180",
"weather_sandstorm.png^[transformFYR180"
} }
} }

View File

@ -11,19 +11,20 @@ local conditions = {
local effects = {} local effects = {}
effects["climate_api:particles"] = { local textures = {}
min_pos = {x=-12, y=2, z=-12},
max_pos = {x= 12, y=8, z= 12},
amount = 4,
exptime = 7,
size = 1,
falling_speed = 0.85,
acceleration = {x=0, y=0.06, z=0},
textures = {}
}
for i = 1,12,1 do for i = 1,12,1 do
effects["climate_api:particles"].textures[i] = "weather_snowflake" .. i .. ".png" textures[i] = "weather_snowflake" .. i .. ".png"
end end
effects["climate_api:particles"] = {
boxsize = { x = 24, y = 6, z = 24 },
v_offset = 2,
amount = 4,
expirationtime = 7,
velocity = 0.85,
acceleration = -0.06,
texture = textures,
glow = 6
}
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -10,6 +10,13 @@ local conditions = {
local effects = {} local effects = {}
effects["climate_api:skybox"] = {
cloud_data = {
color = "#5e676eb5"
},
priority = 11
}
effects["climate_api:hud_overlay"] = { effects["climate_api:hud_overlay"] = {
file = "weather_hud_frost.png", file = "weather_hud_frost.png",
z_index = -100, z_index = -100,
@ -17,13 +24,14 @@ effects["climate_api:hud_overlay"] = {
} }
effects["climate_api:particles"] = { effects["climate_api:particles"] = {
min_pos = {x=-7, y=3, z=-7}, boxsize = { x = 14, y = 3, z = 14 },
max_pos = {x= 7, y=6, z= 7}, v_offset = 3,
exptime=7.5, expirationtime = 7.5,
size=15, size = 15,
amount=6, amount = 6,
falling_speed = 0.75, velocity = 0.75,
texture="weather_snow.png" texture = "weather_snow.png",
glow = 6
} }
climate_api.register_weather(name, conditions, effects) climate_api.register_weather(name, conditions, effects)

View File

@ -15,7 +15,6 @@ end
regional_weather = {} regional_weather = {}
regional_weather.settings = {} regional_weather.settings = {}
regional_weather.settings.damage = get_setting_bool("damage", true)
regional_weather.settings.snow = get_setting_bool("snow_layers", true) regional_weather.settings.snow = get_setting_bool("snow_layers", true)
regional_weather.settings.puddles = get_setting_bool("puddles", true) regional_weather.settings.puddles = get_setting_bool("puddles", true)
regional_weather.settings.soil = get_setting_bool("soil", true) regional_weather.settings.soil = get_setting_bool("soil", true)
@ -24,6 +23,8 @@ regional_weather.settings.ice = get_setting_bool("ice", true)
regional_weather.settings.pedology = get_setting_bool("pedology", true) regional_weather.settings.pedology = get_setting_bool("pedology", true)
regional_weather.settings.max_height = get_setting_number("max_height", 120) regional_weather.settings.max_height = get_setting_number("max_height", 120)
regional_weather.settings.min_height = get_setting_number("min_height", -50) regional_weather.settings.min_height = get_setting_number("min_height", -50)
regional_weather.settings.cloud_height= get_setting_number("cloud_height", 120)
regional_weather.settings.cloud_scale = get_setting_number("cloud_scale", 40)
-- warn about clouds being overriden by MTG weather -- warn about clouds being overriden by MTG weather
if climate_mod.settings.skybox if climate_mod.settings.skybox
@ -47,7 +48,6 @@ dofile(modpath.."/ca_weathers/snow_heavy.lua")
dofile(modpath.."/ca_weathers/storm.lua") dofile(modpath.."/ca_weathers/storm.lua")
-- register environment effects -- register environment effects
dofile(modpath.."/ca_effects/damage.lua")
dofile(modpath.."/ca_effects/lightning.lua") dofile(modpath.."/ca_effects/lightning.lua")
dofile(modpath.."/ca_effects/speed_buff.lua") dofile(modpath.."/ca_effects/speed_buff.lua")

View File

@ -1,8 +1,5 @@
[Features] [Features]
# If set to true, sand storms and hail will damage affected players over time.
regional_weather_damage (Cause player damage) bool true
# If set to true, snow layers will stack up during snowy weather. # If set to true, snow layers will stack up during snowy weather.
regional_weather_snow_layers (Place snow layers) bool true regional_weather_snow_layers (Place snow layers) bool true
@ -24,10 +21,16 @@ regional_weather_pedology (Wetten pedology nodes) bool true
[World Configuration] [World Configuration]
# No visual effects will be applied below this height.
# This will prevent unwanted visuals within large underground caves.
regional_weather_min_height (Minimum height of weather effects) int -50
# No visual effects will be applied above this height. # No visual effects will be applied above this height.
# This value defaults to normal cloud height (120 nodes above sea level). # This value defaults to normal cloud height (120 nodes above sea level).
regional_weather_max_height (Maximum height of weather effects) int 120 regional_weather_max_height (Maximum height of weather effects) int 120
# No visual effects will be applied below this height. # Average height of cloud bases
# This will prevent unwanted visuals within large underground caves. regional_weather_cloud_height (Cloud height) int 120
regional_weather_min_height (Minimum height of weather effects) int -50
# Maxmial variation of cloud height from base value
regional_weather_cloud_scale (Cloud height variation) int 40