Initial commit
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 shivajiva101@hotmail.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Weather
|
||||||
|
|
||||||
|
This mod provides diverse weather for mapgen v5, v7 and a somewhat simpler weather for v6. Features include an API to add weather types and define the biome weather system. It will only work on Minetest versions greater than v5.0
|
||||||
|
|
||||||
|
The reason v6 maps are handled differently is due to the inability to detect the current biome of a players position, v6 maps report 'default' for every biome. Without any granularity the only possible detection is from the nodes around the player. I may add that level of detection, depending on demand.
|
|
@ -0,0 +1,52 @@
|
||||||
|
Register weather types as follows:
|
||||||
|
|
||||||
|
weather.register_weather = function(name, def)
|
||||||
|
|
||||||
|
def is a table with these values:
|
||||||
|
particle = {
|
||||||
|
pos = {x=0, y=0, z=0},
|
||||||
|
velocity = {x=0, y=0, z=0},
|
||||||
|
acceleration = {x=0, y=0, z=0},
|
||||||
|
expirationtime = 1,
|
||||||
|
size = 1,
|
||||||
|
collisiondetection = false,
|
||||||
|
collision_removal = false,
|
||||||
|
vertical = false,
|
||||||
|
texture = "image.png",
|
||||||
|
playername = "singleplayer",
|
||||||
|
animation = {Tile Animation definition},
|
||||||
|
glow = 0,
|
||||||
|
qty = 64 - required! (number of particles)
|
||||||
|
},
|
||||||
|
hud = "image_name.png",
|
||||||
|
skybox = false used to trigger plain skybox event
|
||||||
|
clouds = true shows clouds(default)
|
||||||
|
cloud_def = set cloud parameters
|
||||||
|
* `parameters` is a table with the following optional fields:
|
||||||
|
* `density`: from `0` (no clouds) to `1` (full clouds) (default `0.4`)
|
||||||
|
* `color`: basic cloud color with alpha channel, ColorSpec (default `#fff0f0e5`)
|
||||||
|
* `ambient`: cloud color lower bound, use for a "glow at night" effect. ColorSpec (alpha ignored, default `#000000`)
|
||||||
|
* `height`: cloud height, i.e. y of cloud base (default per conf, usually `120`)
|
||||||
|
* `thickness`: cloud thickness in nodes (default `16`)
|
||||||
|
* `speed`: 2D cloud speed + direction in nodes per second (default `{x=0, z=-2}`).
|
||||||
|
sound = name(s) of the sound clip(s)
|
||||||
|
* `parameter` string or a table:
|
||||||
|
'weather_raindrop'
|
||||||
|
OR
|
||||||
|
{'weather_raindrop','weather_wind'}
|
||||||
|
gain = float value,
|
||||||
|
lightning = boolean
|
||||||
|
|
||||||
|
Register weather systems to a biome:
|
||||||
|
|
||||||
|
weather.register_biome = function(name, def)
|
||||||
|
|
||||||
|
def is a table of weather patterns, consisting of several types of weather and
|
||||||
|
it must use the weather type names that were registered with weather.register_weather()
|
||||||
|
|
||||||
|
example:
|
||||||
|
|
||||||
|
savanna = {
|
||||||
|
'clear','cloudy','light_rain','overcast','cloudy'
|
||||||
|
},
|
||||||
|
The weather progresses along the entries at random intervals so the size of the array is entirely up to you!
|
|
@ -0,0 +1,438 @@
|
||||||
|
|
||||||
|
local COLLIDE = true -- Particles: remove on collision with nodes
|
||||||
|
|
||||||
|
-- REGISTRATION --
|
||||||
|
|
||||||
|
weather.register_weather("clear", {
|
||||||
|
name = "clear",
|
||||||
|
skybox = false,
|
||||||
|
clouds = false,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=229},
|
||||||
|
density = 0,
|
||||||
|
height = 120,
|
||||||
|
thickness = 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("cloudy", {
|
||||||
|
name = "cloudy",
|
||||||
|
skybox = false,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=229},
|
||||||
|
density = 0.4,
|
||||||
|
height = 120,
|
||||||
|
thickness = 16
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("duststorm", {
|
||||||
|
name = "duststorm",
|
||||||
|
skybox = false,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=103,g=100,b=105,a=229},
|
||||||
|
density = 1.0,
|
||||||
|
height = 1,
|
||||||
|
thickness = 128
|
||||||
|
},
|
||||||
|
sound = "weather_wind",
|
||||||
|
gain = 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("light_rain", {
|
||||||
|
name = "light_rain",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -10.0,
|
||||||
|
z = 0.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 2.1,
|
||||||
|
size = 1.2,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = true,
|
||||||
|
texture = "weather_raindrop.png",
|
||||||
|
qty = 32
|
||||||
|
},
|
||||||
|
skybox = false,
|
||||||
|
skybox_def = {color = {r=195,g=195,b=210,a=255}},
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=200,g=200,b=215,a=229},
|
||||||
|
density = 0.45,
|
||||||
|
height = 120,
|
||||||
|
thickness = 16
|
||||||
|
},
|
||||||
|
sound = "weather_raindrop",
|
||||||
|
gain = 0.5
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("medium_rain", {
|
||||||
|
name = "medium_rain",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -10.0,
|
||||||
|
z = 0.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 2.1,
|
||||||
|
size = 2,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = true,
|
||||||
|
texture = "weather_raindrop.png",
|
||||||
|
qty = 48
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=175,g=175,b=191,a=229},
|
||||||
|
density = 0.5,
|
||||||
|
height = 120,
|
||||||
|
thickness = 24
|
||||||
|
},
|
||||||
|
sound = "weather_raindrop",
|
||||||
|
gain = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("heavy_rain", {
|
||||||
|
name = "heavy_rain",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -10.0,
|
||||||
|
z = 0.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 1, z = 0},
|
||||||
|
expirationtime = 2.1,
|
||||||
|
size = 3,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = true,
|
||||||
|
texture = "weather_raindrop.png",
|
||||||
|
qty = 64
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=143,g=143,b=158,a=229},
|
||||||
|
density = 0.55,
|
||||||
|
height = 120,
|
||||||
|
thickness = 32
|
||||||
|
},
|
||||||
|
sound = "weather_raindrop",
|
||||||
|
gain = 1.5
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("fog", {
|
||||||
|
name = "fog",
|
||||||
|
skybox = false,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=150},
|
||||||
|
density = 1.0,
|
||||||
|
height = 1,
|
||||||
|
thickness = 64
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("heavy_fog", {
|
||||||
|
name = "heavy_fog",
|
||||||
|
skybox = false,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=229},
|
||||||
|
density = 1.0,
|
||||||
|
height = 1,
|
||||||
|
thickness = 128
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("light_snow", {
|
||||||
|
name = "light_snow",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -2.0,
|
||||||
|
z = -1.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 8.5,
|
||||||
|
size = 2.8,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = false,
|
||||||
|
texture = "weather_snowflake" .. math.random(1, 4) .. ".png",
|
||||||
|
qty = 8
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=175,g=175,b=190,a=229},
|
||||||
|
density = 0.45,
|
||||||
|
height = 120,
|
||||||
|
thickness = 16
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("medium_smow", {
|
||||||
|
name = "medium_snow",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -2.0,
|
||||||
|
z = -1.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 8.5,
|
||||||
|
size = 2.8,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = false,
|
||||||
|
texture = "weather_snowflake" .. math.random(1, 5) .. ".png",
|
||||||
|
qty = 12
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=175,g=175,b=190,a=229},
|
||||||
|
density = 0.45,
|
||||||
|
height = 120,
|
||||||
|
thickness = 24
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("heavy_snow", {
|
||||||
|
name = "heavy_snow",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -2.0,
|
||||||
|
z = -1.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 8.5,
|
||||||
|
size = 2.8,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = false,
|
||||||
|
texture = "weather_snowflake" .. math.random(1, 8) .. ".png",
|
||||||
|
qty = 16
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=175,g=175,b=190,a=229},
|
||||||
|
density = 0.45,
|
||||||
|
height = 120,
|
||||||
|
thickness = 32
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("blizzard", {
|
||||||
|
name = "blizzard",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -2.0,
|
||||||
|
z = -1.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 8.5,
|
||||||
|
size = 2.8,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = false,
|
||||||
|
texture = "weather_snowflake" .. math.random(1, 4) .. ".png",
|
||||||
|
qty = 20
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = false,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=229},
|
||||||
|
density = 0,
|
||||||
|
height = 120,
|
||||||
|
thickness = 0
|
||||||
|
},
|
||||||
|
sound = "weather_wind",
|
||||||
|
gain = 1.5
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("tropical_storm", {
|
||||||
|
name = "tropical_storm",
|
||||||
|
particle = {
|
||||||
|
velocity = {
|
||||||
|
x = 0.0,
|
||||||
|
y = -10.0,
|
||||||
|
z = 0.0
|
||||||
|
},
|
||||||
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
|
expirationtime = 2.1,
|
||||||
|
size = 3,
|
||||||
|
collisiondetection = COLLIDE,
|
||||||
|
collision_removal = true,
|
||||||
|
vertical = true,
|
||||||
|
texture = "weather_raindrop.png",
|
||||||
|
qty = 64
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=175,g=175,b=190,a=229},
|
||||||
|
density = 0.45,
|
||||||
|
height = 120,
|
||||||
|
thickness = 48
|
||||||
|
},
|
||||||
|
sound = "weather_raindrop",
|
||||||
|
gain = 1.5,
|
||||||
|
lightning = true
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("thunderstorm", {
|
||||||
|
name = "thunderstorm",
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=102,g=102,b=118,a=229},
|
||||||
|
density = 0.65,
|
||||||
|
height = 120,
|
||||||
|
thickness = 48
|
||||||
|
},
|
||||||
|
skybox = true,
|
||||||
|
lightning = true
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("overcast", {
|
||||||
|
name = "overcast",
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=240,g=240,b=255,a=229},
|
||||||
|
density = 0.4,
|
||||||
|
height = 120,
|
||||||
|
thickness = 16
|
||||||
|
},
|
||||||
|
skybox = true
|
||||||
|
})
|
||||||
|
|
||||||
|
weather.register_weather("sandstorm", {
|
||||||
|
name = "sandstorm",
|
||||||
|
skybox = false,
|
||||||
|
clouds = true,
|
||||||
|
cloud_def = {
|
||||||
|
color = {r=142,g=112,b=72,a=229},
|
||||||
|
density = 1.0,
|
||||||
|
height = 1,
|
||||||
|
thickness = 128
|
||||||
|
},
|
||||||
|
sound = "weather_wind",
|
||||||
|
gain = 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
local W_SYSTEMS = {
|
||||||
|
rainforest_ocean = {
|
||||||
|
'clear','light_rain','medium_rain','fog','heavy_fog','fog'
|
||||||
|
},
|
||||||
|
rainforest_swamp = {
|
||||||
|
'clear','light_rain','medium_rain','fog','heavy_fog','fog'
|
||||||
|
},
|
||||||
|
rainforest = {
|
||||||
|
'clear','light_rain','medium_rain','fog','heavy_fog','fog'
|
||||||
|
},
|
||||||
|
savanna_ocean = {
|
||||||
|
'clear','cloudy','light_rain','cloudy'
|
||||||
|
},
|
||||||
|
savanna_shore = {
|
||||||
|
'clear','cloudy','light_rain','cloudy'
|
||||||
|
},
|
||||||
|
savanna = {
|
||||||
|
'clear','cloudy','light_rain','cloudy'
|
||||||
|
},
|
||||||
|
cold_desert_ocean = {
|
||||||
|
'clear','cloudy','clear'
|
||||||
|
},
|
||||||
|
cold_desert = {
|
||||||
|
'clear','cloudy','clear'
|
||||||
|
},
|
||||||
|
sandstone_desert_ocean = {
|
||||||
|
'clear','cloudy','clear'
|
||||||
|
},
|
||||||
|
sandstone_desert = {
|
||||||
|
'clear','sandstorm','clear'
|
||||||
|
},
|
||||||
|
desert_ocean = {
|
||||||
|
'clear','cloudy','clear'
|
||||||
|
},
|
||||||
|
desert_sand = {
|
||||||
|
'clear','cloudy','duststorm','clear'
|
||||||
|
},
|
||||||
|
deciduous_forest_ocean = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','fog','clear'
|
||||||
|
},
|
||||||
|
deciduous_forest_shore = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','fog','clear'
|
||||||
|
},
|
||||||
|
deciduous_forest = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','fog','clear'
|
||||||
|
},
|
||||||
|
coniferous_forest_ocean = {
|
||||||
|
'cloudy','light_rain','medium_rain','fog','light_snow'
|
||||||
|
},
|
||||||
|
coniferous_forest_dunes = {
|
||||||
|
'cloudy','light_rain','medium_rain','fog','light_snow'
|
||||||
|
},
|
||||||
|
coniferous_forest = {
|
||||||
|
'cloudy','light_rain','medium_rain','fog','light_snow'
|
||||||
|
},
|
||||||
|
grassland_ocean = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','overcast','clear'
|
||||||
|
},
|
||||||
|
grassland_dunes = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','overcast','clear'
|
||||||
|
},
|
||||||
|
grassland = {
|
||||||
|
'clear','cloudy','light_rain','medium_rain','overcast','clear'
|
||||||
|
},
|
||||||
|
snowy_grassland_ocean = {
|
||||||
|
'cloudy','light_snow','medium_snow','heavy_snow'
|
||||||
|
},
|
||||||
|
snowy_grassland = {
|
||||||
|
'cloudy','light_snow','medium_snow','heavy_snow'
|
||||||
|
},
|
||||||
|
taiga_ocean = {
|
||||||
|
'cloudy','light_snow','medium_snow','heavy_snow'
|
||||||
|
},
|
||||||
|
taiga = {
|
||||||
|
'cloudy','light_snow','medium_snow','heavy_snow'
|
||||||
|
},
|
||||||
|
tundra_ocean = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
tundra_beach = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
tundra = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
tundra_highland = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
icesheet_ocean = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
icesheet = {
|
||||||
|
'cloudy','medium_snow','heavy_snow','overcast'
|
||||||
|
},
|
||||||
|
default = {
|
||||||
|
'clear','light_rain','medium_rain','overcast','fog',
|
||||||
|
'heavy_fog','thunderstorm'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- register biome weather systems
|
||||||
|
for key,val in pairs(W_SYSTEMS) do
|
||||||
|
weather.register_biome(key, val)
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
Weather Sounds:
|
||||||
|
thunder.1.ogg CC BY (3.0) by Hantorio http://www.freesound.org/people/hantorio/sounds/121945/
|
||||||
|
thunder.2.ogg CC BY (3.0) by justkiddink http://www.freesound.org/people/juskiddink/sounds/101948/
|
||||||
|
raindrop.ogg CC BY (3.0) by inchadney http://freesound.org/people/inchadney/sounds/58835/
|
|
@ -0,0 +1,4 @@
|
||||||
|
Weather Textures:
|
||||||
|
raindrop CC BY-SA (3.0) by paramat
|
||||||
|
snowflakes CC BY-SA (3.0) by paramat
|
||||||
|
acid_raindrop CC BY-SA (3.0) by shivajiva
|
After Width: | Height: | Size: 138 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 89 B |
After Width: | Height: | Size: 89 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 102 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 105 B |