Add new textures, tweak effects, add fog and freezing of river water

This commit is contained in:
Till Affeldt 2020-04-22 00:54:27 +02:00
parent e0b8d6d835
commit 32ab2c4d23
27 changed files with 223 additions and 65 deletions

View File

@ -1,22 +1,32 @@
# Regional Weather
A weather pack for __Climate API__ by Till Affeldt (TestificateMods)
A weather pack for [__Climate API__](https://github.com/t-affeldt/climate_api) by Till Affeldt (TestificateMods)
![](https://raw.githubusercontent.com/t-affeldt/regional_weather/master/screenshot.png)
Not every biome is the same and neither should their weather be.
Regional Weather controls it's effects with the local climate in mind.
Experience the humid air of the rain forest and harsh desert sandstorms.
## Assets
## License information
### Source Code
Unless otherwise stated, this source code is written entirely by myself.
You are free to use it under a GNU Lesser General Public License version 3.
You can find respective rights and conditions in the attached [LICENSE](https://github.com/t-affeldt/regional_weather/blob/master/LICENSE.md) file.
The entire source code is available on [Github](https://github.com/t-affeldt/regional_weather).
### Particles
- Rain sounds: *CC0* by Q.K., taken from mymonths at https://github.com/minetest-mods/mymonths/tree/master/sounds
- Snow flake and rain drop textures: *CC BY-SA (3.0)* by paramat, found in snowdrift mod at https://github.com/paramat/snowdrift
- Snow texture: *CC BY-SA (3.0)* composited from individual snow flakes by paramat.
- Rain texture: *CC BY-SA (3.0)* from TeddyDesTodes, taken from his weather branch at https://github.com/TeddyDesTodes/minetest/tree/weather
- Hail textures: *CC BY-SA (4.0)* made by me
- Snow flake textures: *CC BY-SA (3.0)* by paramat, found in snowdrift mod at https://github.com/paramat/snowdrift
- Snow composite texture: *CC BY-SA (3.0)* by Piet Affeldt, created from aforementioned snow flakes by paramat (please credit original artist as well)
- Rain textures: *CC BY-SA (3.0)* by Piet Affeldt (an original design for this mod)
### Block Textures
- Puddle texture: *DWYWPL* by Don, Nathan from mymonths at https://github.com/minetest-mods/mymonths/blob/master/textures/weather_puddle.png
- Snow cover texture: *WTFPL*, taken from mymonths at https://github.com/minetest-mods/mymonths/blob/master/textures/weather_snow_cover.png
- Puddle texture: *CC BY-SA (3.0)* by Piet Affeldt
- Snow layers and ice block using textures from *default* (not included)
### Sounds
- Heavy Rain sounds: *CC0* by Q.K., taken from mymonths at https://github.com/minetest-mods/mymonths/tree/master/sounds
- Light Rain sounds: *CC BY 3.0* by Arctura from https://freesound.org/people/Arctura/sounds/34065/
- Wind sound: *CC BY (3.0)* by InspectorJ from https://freesound.org/people/InspectorJ/sounds/376415/
- Hail sound: *CC0* by ikayuka from https://freesound.org/people/ikayuka/sounds/240742/
@ -28,4 +38,9 @@ Experience the humid air of the rain forest and harsh desert sandstorms.
- All screenshots and editing by me: *CC BY-SA (4.0)*
- Lato Font (for the Logo): *OFL* by Łukasz Dziedzic from http://www.latofonts.com/lato-free-fonts/
- Liberation Fonts (for the text): *OFL*, see https://github.com/liberationfonts/liberation-fonts
- Used texture pack: Polygonia (128px edition) *CC BY-SA (4.0)* by Lokrates. See https://forum.minetest.net/viewtopic.php?f=4&t=19043
- Used texture pack: Polygonia (128px edition) *CC BY-SA (4.0)* by Lokrates. See https://forum.minetest.net/viewtopic.php?f=4&t=19043
### Full License Conditions
- [GNU Lesser General Public License version 4](https://github.com/t-affeldt/regional_weather/blob/master/LICENSE.md)
- [Creative Commons Licenses](https://creativecommons.org/licenses/)
- [SIL Open Font License](https://opensource.org/licenses/OFL-1.1)

60
abms/ice.lua Normal file
View File

@ -0,0 +1,60 @@
if not regional_weather.settings.ice
or not minetest.get_modpath("default")
or default.node_sound_glass_defaults == nil
then return end
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},
sounds = default.node_sound_glass_defaults(),
use_texture_alpha = true,
drop = "",
on_destruct = function(pos)
-- asynchronous to avoid destruction loop
minetest.after(0, function(pos)
if minetest.get_node(pos).name ~= "air" then return end
minetest.set_node(pos, { name = "default:river_water_source" })
end, pos)
end
})
climate_api.register_abm({
label = "freeze river water",
nodenames = { "default:river_water_source" },
neighbors = { "air" },
interval = 10,
chance = 2,
conditions = {
min_height = regional_weather.settings.min_height,
max_height = regional_weather.settings.max_height,
max_heat = 25,
daylight = 15
},
action = function (pos, node, env)
minetest.set_node(pos, { name = BLOCK_NAME })
end
})
climate_api.register_abm({
label = "unfreeze river water",
nodenames = { BLOCK_NAME },
neighbors = { "air" },
interval = 15,
chance = 4,
conditions = {
min_height = regional_weather.settings.min_height,
max_height = regional_weather.settings.max_height,
min_heat = 40,
daylight = 15
},
action = function (pos, node, env)
minetest.set_node(pos, { name = "default:river_water_source" })
end
})

View File

@ -11,14 +11,9 @@ if not regional_weather.settings.puddles then
return
end
--Puddle node
local node_box = {
type = "fixed",
fixed = {
{-0.1875, -0.5, -0.375, 0.125, -0.4875, 0.3125},
{-0.25, -0.5, -0.3125, 0.3125, -0.4925, 0.25},
{-0.3125, -0.5, -0.1875, 0.375, -0.4975, 0.1875},
}
fixed = {-0.5, -0.5, -0.5, 0.5, -0.49, 0.5}
}
minetest.register_node(BLOCK_NAME, {
@ -30,14 +25,15 @@ minetest.register_node(BLOCK_NAME, {
walkable = false,
sunlight_propagates = true,
paramtype = "light",
alpha = 50,
use_texture_alpha = true,
node_box = node_box,
groups = {
not_in_creative_inventory = 1,
crumbly = 3,
attached_node = 1,
slippery = 1,
flora = 1
flora = 1,
water = 1
},
drop = "",
})

View File

@ -14,6 +14,13 @@ or not regional_weather.settings.snow then
return
end
local destruction_handler = function(pos)
pos.y = pos.y - 1
if minetest.get_node(pos).name == "default:dirt_with_snow" then
minetest.set_node(pos, {name = "default:dirt_with_grass"})
end
end
for i = 1,5 do
local node_box = {
type = "fixed",
@ -43,12 +50,8 @@ for i = 1,5 do
minetest.set_node(pos, {name = "default:dirt_with_snow"})
end
end,
on_destruct = function(pos)
pos.y = pos.y - 1
if minetest.get_node(pos).name == "default:dirt_with_snow" then
minetest.set_node(pos, {name = "default:dirt_with_grass"})
end
end
on_destruct = destruction_handler,
on_flood = destruction_handler
})
end

View File

@ -1,17 +1,22 @@
if not regional_weather.settings.damage then return end
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, value in pairs(data) do
hp = hp - value
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.LONG_CYCLE)
climate_api.set_effect_cycle(EFFECT_NAME, climate_api.MEDIUM_CYCLE)

View File

@ -1,5 +1,4 @@
local name = "regional_weather:ambient"
local CLOUD_SPEED = 1.8
local conditions = {}
@ -8,9 +7,9 @@ local function generate_effects(params)
local override = {}
local wind = climate_api.environment.get_wind()
local skybox = {}
local skybox = {priority = 0}
skybox.cloud_data = {
size = climate_api.utility.rangelim(params.humidity / 100, 0.25, 0.98),
density = climate_api.utility.rangelim(params.humidity / 100, 0.25, 0.98),
speed = vector.multiply(wind, CLOUD_SPEED),
thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18)
}
@ -18,7 +17,6 @@ local function generate_effects(params)
if params.height > -100 and params.humidity > 65 then
skybox.sky_data = {
type = "regular",
--base_color = { r = 106, g = 130, b = 142 },
clouds = true,
sky_color = {
day_sky = "#6a828e",
@ -31,7 +29,7 @@ local function generate_effects(params)
}
end
override["climate_api:skybox"] = skybox
--override["climate_api:skybox"] = skybox
local movement = params.player:get_player_velocity()
local movement_direction

View File

@ -17,7 +17,8 @@ effects["climate_api:skybox"] = {
sunrise_visible = false
},
moon_data = { visible = false },
stars_data = { visible = false }
star_data = { visible = false },
priority = 100
}
climate_api.register_weather(name, conditions, effects)

34
ca_weathers/fog.lua Normal file
View File

@ -0,0 +1,34 @@
local name = "regional_weather:fog"
local conditions = {
}
local effects = {}
effects["climate_api:hud_overlay"] = {
file = "weather_hud_fog.png",
z_index = -200
}
effects["climate_api:skybox"] = {
cloud_data = {
density = 1,
color = "#ffffffff",
thickness = 40,
speed = {x=0,y=0,z=0}
},
priority = 50
}
local function generate_effects(params)
local override = {}
override["climate_api:skybox"] = {
cloud_data = {
height = params.player:get_pos().y
}
}
return climate_api.utility.merge_tables(effects, override)
end
climate_api.register_weather(name, conditions, generate_effects)

View File

@ -11,7 +11,10 @@ local conditions = {
local effects = {}
effects["regional_weather:damage"] = 1
effects["regional_weather:damage"] = {
chance = 15,
value = 3
}
effects["climate_api:sound"] = {
name = "weather_hail",
@ -21,9 +24,9 @@ effects["climate_api:sound"] = {
effects["climate_api:particles"] = {
min_pos = {x=-9, y=7, z=-9},
max_pos = {x= 9, y=7, z= 9},
falling_speed=15,
amount=5,
exptime=0.8,
falling_speed=20,
amount=6,
exptime=0.7,
size=1,
textures = {}
}

View File

@ -12,14 +12,15 @@ local conditions = {
local effects = {}
effects["climate_api:sound"] = {
name = "weather_rain"
name = "weather_rain",
gain = 1.5
}
effects["climate_api:particles"] = {
min_pos = {x=-9, y=7, z=-9},
max_pos = {x= 9, y=7, z= 9},
exptime=0.8,
size=1,
size=2,
texture = "weather_raindrop.png"
}
@ -33,7 +34,7 @@ local function generate_effects(params)
}
override["climate_api:particles"] = {
amount = 20 * math.min(intensity, 1.5),
amount = 25 * math.min(intensity, 1.5),
falling_speed = 10 / math.min(intensity, 1.3)
}

View File

@ -11,18 +11,23 @@ local conditions = {
local effects = {}
effects["climate_api:sound"] = {
name = "weather_rain",
name = "weather_rain_heavy",
gain = 1
}
effects["climate_api:particles"] = {
min_pos = {x=-9, y=7, z=-9},
max_pos = {x= 9, y=7, z= 9},
falling_speed=10,
amount=20,
falling_speed=7,
amount=17,
exptime=0.8,
size=25,
texture="weather_rain.png"
min_size=25,
max_size=35,
textures={
"weather_rain.png",
"weather_rain.png",
"weather_rain_medium.png"
}
}
climate_api.register_weather(name, conditions, effects)

View File

@ -5,8 +5,7 @@ local conditions = {
max_height = regional_weather.settings.max_height,
min_heat = 50,
max_humidity = 25,
min_windspeed = 6,
daylight = 15,
min_windspeed = 4.5,
has_biome = {
"cold_desert",
"cold_desert_ocean",
@ -24,14 +23,48 @@ effects["climate_api:hud_overlay"] = {
z_index = -100
}
effects["climate_api:particles"] = {
min_pos = {x=-9, y=-5, z=-9},
max_pos = {x= 9, y= 5, z= 9},
falling_speed=1,
amount=40,
exptime=0.8,
size=15,
texture="weather_sand.png"
effects["regional_weather:damage"] = {
chance = 3,
value = 1
}
climate_api.register_weather(name, conditions, effects)
effects["climate_api:particles"] = {
min_pos = {x=-5, y=-4, z=-5},
max_pos = {x= 5, y= 4.5, z= 5},
falling_speed=1.2,
acceleration={x=0,y=0.8,z=0},
amount=40,
exptime=1.8,
size=20,
textures={
"weather_sandstorm.png",
"weather_sandstorm.png^[transformR180"
}
}
effects["climate_api:skybox"] = {
cloud_data = {
density = 1,
color = "#f7e4bfc0",
thickness = 40,
speed = {x=0,y=0,z=0}
},
priority = 60
}
local function generate_effects(params)
local override = table.copy(effects)
override["climate_api:skybox"] = {
cloud_data= {
height = params.player:get_pos().y
}
}
if params.daylight < 15 then
local result = {}
result["climate_api:skybox"] = override["climate_api:skybox"]
return result
end
return override
end
climate_api.register_weather(name, conditions, generate_effects)

View File

@ -19,7 +19,7 @@ effects["climate_api:particles"] = {
min_pos = {x=-8, y=3, z=-8},
max_pos = {x= 8, y=6, z= 8},
exptime=6,
size=12,
size=10,
texture="weather_snow.png"
}
@ -28,12 +28,8 @@ local function generate_effects(params)
local intensity = params.humidity / avg_humidity
local override = {}
override["climate_api:sound"] = {
gain = math.min(intensity, 1.2)
}
override["climate_api:particles"] = {
amount = 8 * math.min(intensity, 1.5),
amount = 16 * math.min(intensity, 1.5),
falling_speed = 1 / math.min(intensity, 1.3)
}

View File

@ -20,12 +20,21 @@ regional_weather.settings.snow = get_setting_bool("snow_layers", true)
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.max_height = get_setting_number("max_height", 120)
regional_weather.settings.min_height = get_setting_number("min_height", -50)
-- warn about clouds being overriden by MTG weather
if climate_mod.settings.skybox
and minetest.get_modpath("weather")
and get_setting_bool("enable_weather", true) then
minetest.log("warning", "[Regional Weather] Disable MTG weather for the best experience")
end
-- import individual weather types
dofile(modpath.."/ca_weathers/ambient.lua")
dofile(modpath.."/ca_weathers/deep_cave.lua")
--dofile(modpath.."/ca_weathers/fog.lua")
dofile(modpath.."/ca_weathers/hail.lua")
dofile(modpath.."/ca_weathers/pollen.lua")
dofile(modpath.."/ca_weathers/rain.lua")
@ -44,6 +53,5 @@ dofile(modpath.."/ca_effects/speed_buff.lua")
dofile(modpath .. "/abms/puddle.lua")
dofile(modpath .. "/abms/snow_cover.lua")
dofile(modpath .. "/abms/fire.lua")
dofile(modpath .. "/abms/ice.lua")
dofile(modpath .. "/abms/soil.lua")
minetest.log(minetest.LIGHT_MAX)

View File

@ -3,7 +3,7 @@ title = Regional Weather
author = TestificateMods
release = 1
depends = climate_api
optional_depends = default, lightning, farming
optional_depends = default, lightning, farming, fire
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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 20 KiB