From caf683fb29b98a2c2221923527acde40799b119f Mon Sep 17 00:00:00 2001 From: LazyJ Date: Sun, 1 Jun 2014 19:30:54 -0700 Subject: [PATCH] First Commit --- README.txt | 74 ++ abms.lua | 175 +++++ aliases.lua | 106 +++ basic_stairs_slabs.lua | 326 +++++++++ config.txt | 18 + crafting.lua | 185 +++++ depends.txt | 2 + falling_snow.lua | 201 ++++++ init.lua | 127 ++++ license.txt | 674 +++++++++++++++++++ mapgen.lua | 181 +++++ mapgen_v6.lua | 278 ++++++++ mapgen_v7.lua | 147 ++++ models/sled.blend | Bin 0 -> 430048 bytes models/sled.png | Bin 0 -> 4168 bytes models/sled.x | 369 ++++++++++ nodes.lua | 355 ++++++++++ readme_splizards_original.txt | 73 ++ schematics/pine.mts | Bin 0 -> 81 bytes sled.lua | 203 ++++++ snowball.lua | 190 ++++++ stairsplus.lua | 341 ++++++++++ textures/character_snow_man.png | Bin 0 -> 1924 bytes textures/character_snow_man_preview.png | Bin 0 -> 28563 bytes textures/character_snow_man_preview_back.png | Bin 0 -> 25604 bytes textures/default_ice.png | Bin 0 -> 160 bytes textures/default_ice.xcf | Bin 0 -> 1681 bytes textures/inkscape_default_ice.svg | 67 ++ textures/mocha.png | Bin 0 -> 160 bytes textures/mocha.xcf | Bin 0 -> 665 bytes textures/original_snow_snow_brick.png | Bin 0 -> 507 bytes textures/rect2985.png | Bin 0 -> 160 bytes textures/snow_ice.png | Bin 0 -> 742 bytes textures/snow_moss.png | Bin 0 -> 807 bytes textures/snow_needles.png | Bin 0 -> 860 bytes textures/snow_needles_decorated.png | Bin 0 -> 937 bytes textures/snow_needles_decorated_animated.png | Bin 0 -> 2902 bytes textures/snow_needles_decorated_animated.xcf | Bin 0 -> 15052 bytes textures/snow_sapling_pine.png | Bin 0 -> 406 bytes textures/snow_sled.png | Bin 0 -> 501 bytes textures/snow_snow.png | Bin 0 -> 345 bytes textures/snow_snow_brick.png | Bin 0 -> 732 bytes textures/snow_snow_brick.xcf | Bin 0 -> 1539 bytes textures/snow_snow_cobble.png | Bin 0 -> 815 bytes textures/snow_snow_cobble.png_01 | Bin 0 -> 788 bytes textures/snow_snow_cobble.xcf | Bin 0 -> 1776 bytes textures/snow_snow_side.png | Bin 0 -> 894 bytes textures/snow_snowball.png | Bin 0 -> 189 bytes textures/snow_snowfall.png | Bin 0 -> 350 bytes textures/snow_star.png | Bin 0 -> 540 bytes textures/snow_star_lit.png | Bin 0 -> 514 bytes textures/snow_star_lit.xcf | Bin 0 -> 1480 bytes textures/snow_xmas_tree.png | Bin 0 -> 439 bytes textures/weather_snow.png | Bin 0 -> 2120 bytes textures/xdefault_cobble.png | Bin 0 -> 585 bytes textures/xdefault_furnace_bottom.png | Bin 0 -> 604 bytes textures/xdefault_furnace_fire_bg.png | Bin 0 -> 282 bytes textures/xdefault_furnace_fire_fg.png | Bin 0 -> 803 bytes textures/xdefault_furnace_front.png | Bin 0 -> 628 bytes textures/xdefault_furnace_front_active.png | Bin 0 -> 4890 bytes textures/xdefault_furnace_side.png | Bin 0 -> 604 bytes textures/xdefault_furnace_top.png | Bin 0 -> 604 bytes textures/xdefault_glass.png | Bin 0 -> 978 bytes textures/xdefault_ice.png | Bin 0 -> 490 bytes textures/xdefault_ice.xcf | Bin 0 -> 1400 bytes textures/xdefault_snow.png | Bin 0 -> 278 bytes textures/xdefault_stone_brick.png | Bin 0 -> 636 bytes util.lua | 155 +++++ 68 files changed, 4247 insertions(+) create mode 100644 README.txt create mode 100644 abms.lua create mode 100644 aliases.lua create mode 100644 basic_stairs_slabs.lua create mode 100644 config.txt create mode 100644 crafting.lua create mode 100644 depends.txt create mode 100644 falling_snow.lua create mode 100644 init.lua create mode 100644 license.txt create mode 100644 mapgen.lua create mode 100644 mapgen_v6.lua create mode 100644 mapgen_v7.lua create mode 100644 models/sled.blend create mode 100644 models/sled.png create mode 100644 models/sled.x create mode 100644 nodes.lua create mode 100644 readme_splizards_original.txt create mode 100644 schematics/pine.mts create mode 100644 sled.lua create mode 100644 snowball.lua create mode 100644 stairsplus.lua create mode 100644 textures/character_snow_man.png create mode 100644 textures/character_snow_man_preview.png create mode 100644 textures/character_snow_man_preview_back.png create mode 100644 textures/default_ice.png create mode 100644 textures/default_ice.xcf create mode 100644 textures/inkscape_default_ice.svg create mode 100644 textures/mocha.png create mode 100644 textures/mocha.xcf create mode 100644 textures/original_snow_snow_brick.png create mode 100644 textures/rect2985.png create mode 100644 textures/snow_ice.png create mode 100644 textures/snow_moss.png create mode 100644 textures/snow_needles.png create mode 100644 textures/snow_needles_decorated.png create mode 100644 textures/snow_needles_decorated_animated.png create mode 100644 textures/snow_needles_decorated_animated.xcf create mode 100644 textures/snow_sapling_pine.png create mode 100644 textures/snow_sled.png create mode 100644 textures/snow_snow.png create mode 100644 textures/snow_snow_brick.png create mode 100644 textures/snow_snow_brick.xcf create mode 100644 textures/snow_snow_cobble.png create mode 100644 textures/snow_snow_cobble.png_01 create mode 100644 textures/snow_snow_cobble.xcf create mode 100644 textures/snow_snow_side.png create mode 100644 textures/snow_snowball.png create mode 100644 textures/snow_snowfall.png create mode 100644 textures/snow_star.png create mode 100644 textures/snow_star_lit.png create mode 100644 textures/snow_star_lit.xcf create mode 100644 textures/snow_xmas_tree.png create mode 100644 textures/weather_snow.png create mode 100644 textures/xdefault_cobble.png create mode 100644 textures/xdefault_furnace_bottom.png create mode 100644 textures/xdefault_furnace_fire_bg.png create mode 100644 textures/xdefault_furnace_fire_fg.png create mode 100644 textures/xdefault_furnace_front.png create mode 100644 textures/xdefault_furnace_front_active.png create mode 100644 textures/xdefault_furnace_side.png create mode 100644 textures/xdefault_furnace_top.png create mode 100644 textures/xdefault_glass.png create mode 100644 textures/xdefault_ice.png create mode 100644 textures/xdefault_ice.xcf create mode 100644 textures/xdefault_snow.png create mode 100644 textures/xdefault_stone_brick.png create mode 100644 util.lua diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..ef21714 --- /dev/null +++ b/README.txt @@ -0,0 +1,74 @@ +This version of 'Snow' is based off of Splizard's 2013_12_25 release. + +I started out making a couple tweaks here-and-there and then it just +progressed into something more complex. Since then several things have been +fixed and a few others added. + +There is still more to do. + +What follows below is a partial and very rough draft of the README.txt file's +contents. I still have to get my scattered notes sorted to make a better +documentation. If things get too wordy, I'll try splitting them off +into seperate files and see if that makes things easier to consume and maintain. + +~ LazyJ, 2014_06_01 + + + +~~~~~~~~~~~~~~~~~~~~ +List of Changes +~~~~~~~~~~~~~~~~~~~~ + +INIT.LUA + * Moved contents to separate lua files + * Checks for "MoreBlocks" mod + + + +FALLING_SNOW.LUA + * Falling snow would destroy nodes it deposited snow on. I figured out +that if I switched the 'snow.place' with 'minetest.place_node' and +increased the y position by 2, then the nodes were nolonger destroyed and +the snow would start to pile up. + + + +MAPGEN.LUA + * Replaced snow:snow with default:snow and snow:snow_block +with default:snowblock. + + + +SLED.LUA + * The HUD message that displayed when a player sat on the sled would +not go away after the player got off the sled. I spent hours on trial-and-error +while reading the lua_api.txt and scrounging the Internet for a +needle-in-the-haystack solution as to why the hud_remove wasn't working. +Turns out Splizard's code was mostly correct, just assembled in the wrong order. + +The key to the solution was found in the code of leetelate's scuba mod: +http://forum.minetest.net/viewtopic.php?id=7175 + + * Changed the wording of the HUD message for clarity. + + + +~~~~~~ +TODO +~~~~~~ + +Falling Snow: +* Add code to prevent snowfall from depositing snow on or near torches and lava. + +* Add code to prevent snowfall from depositing snow on +'walkable = false' defined nodes. + + + +Sled: +* Figure out why the player avatars remain in a seated position, even after +getting off the sled, if they flew while on the sled. +'default.player_set_animation', where is a better explanation for this and what +are it's available options? + + diff --git a/abms.lua b/abms.lua new file mode 100644 index 0000000..010342a --- /dev/null +++ b/abms.lua @@ -0,0 +1,175 @@ +--Backwards Compatability. +minetest.register_abm({ + nodenames = {"snow:snow1","snow:snow2","snow:snow3","gsnow4","snow:snow5","snow:snow6","snow:snow7","snow:snow8"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local level = 7*(tonumber(node.name:sub(-1))) + minetest.add_node(pos,{name="default:snow"}) + minetest.set_node_level(pos, level) + end, +}) + + + +-- Added to change dirt_with_snow to dirt if covered with blocks that don't let light through (sunlight_propagates) or have a light paramtype and liquidtype combination. ~ LazyJ, 2014_03_08 + +minetest.register_abm({ + nodenames = {"default:dirt_with_snow"}, + interval = 2, + chance = 20, + action = function(pos, node) + local above = {x=pos.x, y=pos.y+1, z=pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef + and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") + and nodedef.liquidtype == "none") then + minetest.set_node(pos, {name = "default:dirt"}) + end + end +}) + + + +--Melting +--Any node part of the group melting will melt when near warm nodes such as lava, fire, torches, etc. +--The amount of water that replaces the node is defined by the number on the group: +--1: one water_source +--2: four water_flowings +--3: one water_flowing + +minetest.register_abm({ + nodenames = {"group:melts"}, + neighbors = {"group:igniter","default:torch","default:furnace_active","group:hot"}, + interval = 2, + chance = 2, + action = function(pos, node, active_object_count, active_object_count_wider) + local intensity = minetest.get_item_group(node.name,"melts") + if intensity == 1 then + minetest.add_node(pos,{name="default:water_source"}) + elseif intensity == 2 then + --[[ This was causing "melts=2" nodes to just disappear so I changed it to replace the + node with a water_source for a couple seconds and then replace the water_source with + air. This way it made a watery mess that quickly evaporated. ~ LazyJ 2014_04_24 + local check_place = function(pos,node) + if minetest.get_node(pos).name == "air" then + minetest.place_node(pos,node) + end + end + minetest.add_node(pos,{name="default:water_flowing"}) + check_place({x=pos.x+1,y=pos.y,z=pos.z},{name="default:water_flowing"}) + check_place({x=pos.x-1,y=pos.y,z=pos.z},{name="default:water_flowing"}) + check_place({x=pos.x,y=pos.y+1,z=pos.z},{name="default:water_flowing"}) + check_place({x=pos.x,y=pos.y-1,z=pos.z},{name="default:water_flowing"}) + elseif intensity == 3 then + --]] + minetest.add_node(pos,{name="default:water_source"}) + minetest.after(2, function() -- 2 seconds gives just enough time for + -- the water to flow and spread before the + -- water_source is changed to air. ~ LazyJ + if minetest.get_node(pos).name == "default:water_source" then + minetest.add_node(pos,{name="air"}) + end + end) + end + nodeupdate(pos) + end, +}) + + + + +--Freezing +--Water freezes when in contact with snow. +minetest.register_abm({ + nodenames = {"default:water_source"}, + -- Added "group:icemaker" and snowbrick. ~ LazyJ + neighbors = {"default:snow", "default:snowblock", "snow:snow_brick", "group:icemaker"}, + interval = 20, + chance = 4, + action = function(pos, node, active_object_count, active_object_count_wider) + minetest.add_node(pos,{name="default:ice"}) + end, +}) + + + +--Spread moss to cobble. +minetest.register_abm({ + nodenames = {"default:cobble"}, + neighbors = {"snow:moss"}, + interval = 20, + chance = 6, + action = function(pos, node, active_object_count, active_object_count_wider) + minetest.add_node(pos,{name="default:mossycobble"}) + end, +}) + + + + +--Grow Pine Saplings +minetest.register_abm({ + nodenames = {"snow:sapling_pine"}, + interval = 10, + chance = 50, + action = function(pos, node, active_object_count, active_object_count_wider) + +-- Check if there is enough vertical-space for the sapling to grow without +-- hitting anything else. ~ LazyJ, 2014_04_10 + + if -- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ + minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+3, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+4, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+5, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+6, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+7, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+8, z=pos.z}).name == "air" + then -- 'then' let the sapling grow into a tree. ~ LazyJ + + snow.make_pine(pos,false) + -- This finds the sapling under the grown tree. ~ LazyJ + if minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "snow:sapling_pine" then + -- This switches the sapling to a tree trunk. ~ LazyJ + minetest.set_node(pos, {name="default:tree"}) + -- This is more for testing but it may be useful info to some admins when + -- grepping the server logs too. ~ LazyJ + minetest.log("action", "A pine sapling grows into a tree at "..minetest.pos_to_string(pos)) + end + else + end + end +}) + + + + +--Grow Christmas Tree Saplings +minetest.register_abm({ + nodenames = {"snow:xmas_tree"}, + interval = 10, + chance = 50, + action = function(pos, node, active_object_count, active_object_count_wider) + + if -- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ + minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+3, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+4, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+5, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+6, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+7, z=pos.z}).name == "air" and + minetest.get_node({x=pos.x, y=pos.y+8, z=pos.z}).name == "air" + then -- 'then' let the sapling grow into a tree. ~ LazyJ + + snow.make_pine(pos,false,true) + minetest.log("action", "A pine sapling grows into a Christmas tree at "..minetest.pos_to_string(pos)) -- ~ LazyJ + else -- 'Else', if there isn't air in each of the 8 nodes above the sapling, + -- then don't anything; including not allowing the sapling to grow. + -- ~ LazyJ, 2014_04_10 + end + end +}) diff --git a/aliases.lua b/aliases.lua new file mode 100644 index 0000000..c7b09c1 --- /dev/null +++ b/aliases.lua @@ -0,0 +1,106 @@ +-- Some aliases for compatibility switches and some to make "/give" commands a little easier + +minetest.register_alias("snow:snow", "default:snow") +minetest.register_alias("default_snow", "default:snow") +minetest.register_alias("snow:snowball", "default:snow") +minetest.register_alias("snowball", "default:snow") +minetest.register_alias("snowballs", "default:snow") +minetest.register_alias("snow_ball", "default:snow") +minetest.register_alias("snow:ice", "default:ice") +minetest.register_alias("ice", "default:ice") +minetest.register_alias("default_ice", "default:ice") +minetest.register_alias("snow:dirt_with_snow", "default:dirt_with_snow") +minetest.register_alias("dirtwithsnow", "default:dirt_with_snow") +minetest.register_alias("snowdirt", "default:dirt_with_snow") +minetest.register_alias("snowydirt", "default:dirt_with_snow") +minetest.register_alias("snow:snow_block", "default:snowblock") +minetest.register_alias("default:snow_block", "default:snowblock") +--minetest.register_alias("snow_block", "default:snowblock") +minetest.register_alias("snowblocks", "default:snowblock") +minetest.register_alias("snowbrick", "snow:snow_brick") +minetest.register_alias("bricksnow", "snow:snow_brick") +minetest.register_alias("snowbricks", "snow:snow_brick") +--minetest.register_alias("snow_brick", "snow:snow_brick") +--minetest.register_alias("snow_bricks", "snow:snow_brick") +minetest.register_alias("snowybricks", "snow:snow_brick") +minetest.register_alias("snowcobble", "snow:snow_cobble") +--minetest.register_alias("snow_cobble", "snow:snow_cobble") +minetest.register_alias("snowycobble", "snow:snow_cobble") +minetest.register_alias("cobblesnow", "snow:snow_cobble") + + +-- To clean up my first stairsplus attempt. +-- Stair +minetest.register_alias(":default:stair_snowblock", "moreblocks:stair_snowblock") +minetest.register_alias(":default:stair_snowblock_half", "moreblocks:stair_snowblock_half") +minetest.register_alias(":default:stair_snowblock_right_half", "moreblocks:stair_snowblock_right_half") +minetest.register_alias(":default:stair_snowblock_inner", "moreblocks:stair_snowblock_inner") +minetest.register_alias(":default:stair_snowblock_outer", "moreblocks:stair_snowblock_outer") +minetest.register_alias(":default:stair_snowblock_alt", "moreblocks:stair_snowblock_alt") +minetest.register_alias(":default:stair_snowblock_alt_1", "moreblocks:stair_snowblock_alt_1") +minetest.register_alias(":default:stair_snowblock_alt_2", "moreblocks:stair_snowblock_2") +minetest.register_alias(":default:stair_snowblock_alt_4", "moreblocks:stair_snowblock_alt_4") + +minetest.register_alias(":default:stair_ice", "moreblocks:stair_ice") +minetest.register_alias(":default:stair_ice_half", "moreblocks:stair_ice_half") +minetest.register_alias(":default:stair_ice_right_half", "moreblocks:stair_ice_right_half") +minetest.register_alias(":default:stair_ice_inner", "moreblocks:stair_ice_inner") +minetest.register_alias(":default:stair_ice_outer", "moreblocks:stair_ice_outer") +minetest.register_alias(":default:stair_ice_alt", "moreblocks:stair_ice_alt") +minetest.register_alias(":default:stair_ice_alt_1", "moreblocks:stair_ice_alt_1") +minetest.register_alias(":default:stair_ice_alt_2", "moreblocks:stair_ice_2") +minetest.register_alias(":default:stair_ice_alt_4", "moreblocks:stair_ice_alt_4") + + +-- Slab +minetest.register_alias(":default:slab_snowblock", "moreblocks:slab_snowblock") +minetest.register_alias(":default:slab_snowblock_quarter", "moreblocks:slab_snowblock_quarter") +minetest.register_alias(":default:slab_snowblock_three_quarter", "moreblocks:slab_snowblock_three_quarter") +minetest.register_alias(":default:slab_snowblock_1", "moreblocks:slab_snowblock_1") +minetest.register_alias(":default:slab_snowblock_2", "moreblocks:slab_snowblock_2") +minetest.register_alias(":default:slab_snowblock_14", "moreblocks:slab_snowblock_14") +minetest.register_alias(":default:slab_snowblock_15", "moreblocks:slab_snowblock_15") + +minetest.register_alias(":default:slab_ice", "moreblocks:slab_ice") +minetest.register_alias(":default:slab_ice_quarter", "moreblocks:slab_ice_quarter") +minetest.register_alias(":default:slab_ice_three_quarter", "moreblocks:slab_ice_three_quarter") +minetest.register_alias(":default:slab_ice_1", "moreblocks:slab_ice_1") +minetest.register_alias(":default:slab_ice_2", "moreblocks:slab_ice_2") +minetest.register_alias(":default:slab_ice_14", "moreblocks:slab_ice_14") +minetest.register_alias(":default:slab_ice_15", "moreblocks:slab_ice_15") + + +-- Panel +minetest.register_alias(":default:panel_snowblock", "moreblocks:panel_snowblock") +minetest.register_alias(":default:panel_snowblock_1", "moreblocks:panel_snowblock_1") +minetest.register_alias(":default:panel_snowblock_2", "moreblocks:panel_snowblock_2") +minetest.register_alias(":default:panel_snowblock_4", "moreblocks:panel_snowblock_4") +minetest.register_alias(":default:panel_snowblock_12", "moreblocks:panel_snowblock_12") +minetest.register_alias(":default:panel_snowblock_14", "moreblocks:panel_snowblock_14") +minetest.register_alias(":default:panel_snowblock_15", "moreblocks:panel_snowblock_15") + +minetest.register_alias(":default:panel_ice", "moreblocks:panel_ice") +minetest.register_alias(":default:panel_ice_1", "moreblocks:panel_ice_1") +minetest.register_alias(":default:panel_ice_2", "moreblocks:panel_ice_2") +minetest.register_alias(":default:panel_ice_4", "moreblocks:panel_ice_4") +minetest.register_alias(":default:panel_ice_12", "moreblocks:panel_ice_12") +minetest.register_alias(":default:panel_ice_14", "moreblocks:panel_ice_14") +minetest.register_alias(":default:panel_ice_15", "moreblocks:panel_ice_15") + + +-- Micro +minetest.register_alias(":default:micro_snowblock", "moreblocks:micro_snowblock") +minetest.register_alias(":default:micro_snowblock_1", "moreblocks:micro_snowblock_1") +minetest.register_alias(":default:micro_snowblock_2", "moreblocks:micro_snowblock_2") +minetest.register_alias(":default:micro_snowblock_4", "moreblocks:micro_snowblock_4") +minetest.register_alias(":default:micro_snowblock_12", "moreblocks:micro_snowblock_12") +minetest.register_alias(":default:micro_snowblock_14", "moreblocks:micro_snowblock_14") +minetest.register_alias(":default:micro_snowblock_15", "moreblocks:micro_snowblock_15") + +minetest.register_alias(":default:micro_ice", "moreblocks:micro_ice") +minetest.register_alias(":default:micro_ice_1", "moreblocks:micro_ice_1") +minetest.register_alias(":default:micro_ice_2", "moreblocks:micro_ice_2") +minetest.register_alias(":default:micro_ice_4", "moreblocks:micro_ice_4") +minetest.register_alias(":default:micro_ice_12", "moreblocks:micro_ice_12") +minetest.register_alias(":default:micro_ice_14", "moreblocks:micro_ice_14") +minetest.register_alias(":default:micro_ice_15", "moreblocks:micro_ice_15") diff --git a/basic_stairs_slabs.lua b/basic_stairs_slabs.lua new file mode 100644 index 0000000..d62f448 --- /dev/null +++ b/basic_stairs_slabs.lua @@ -0,0 +1,326 @@ +-- Based on +-- Minetest 0.4 mod: stairs +-- See README.txt for licensing and other information. + + +-- ADD CHECK FOR MOREBLOCKS/SKIP IF NOT FOUND CODE STUFF HERE + + + + + +snow_stairs = {} -- This is a little trick. Without it Minetest will complain + -- "attempt to index global 'snow' (a nil value)" and + -- refuse to load. So a value without definition "={}"is assigned to snow. + +-- Node will be called snow:stair_ +function snow_stairs.register_stair(subname, recipeitem, groups, images, description, sounds) + minetest.register_node("snow:stair_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = true, + groups = groups, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.25}, + dig = {name="default_dig_crumbly", gain=0.4}, + dug = {name="default_snow_footstep", gain=0.75}, + place = {name="default_place_node", gain=1.0} + }), + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + local placer_pos = placer:getpos() + if placer_pos then + local dir = { + x = p1.x - placer_pos.x, + y = p1.y - placer_pos.y, + z = p1.z - placer_pos.z + } + param2 = minetest.dir_to_facedir(dir) + end + + if p0.y-1 == p1.y then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + + return minetest.item_place(itemstack, placer, pointed_thing, param2) + end, + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" + -- Thinking in terms of layers, dirt_with_snow could also double as + -- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04 + or minetest.get_node(pos).name == "default:dirt" then + minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + end + }) +--[[ + -- for replace ABM + minetest.register_node("snow:stair_" .. subname.."upside_down", { + replace_name = "snow:stair_" .. subname, + groups = {slabs_replace=1}, + }) +--]] + minetest.register_craft({ + output = 'snow:stair_' .. subname .. ' 6', + recipe = { + {recipeitem, "", ""}, + {recipeitem, recipeitem, ""}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Flipped recipe + minetest.register_craft({ + output = 'snow:stair_' .. subname .. ' 6', + recipe = { + {"", "", recipeitem}, + {"", recipeitem, recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) +end + +-- Node will be called snow:slab_ +function snow_stairs.register_slab(subname, recipeitem, groups, images, description, sounds) + minetest.register_node("snow:slab_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = true, + groups = groups, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.25}, + dig = {name="default_dig_crumbly", gain=0.4}, + dug = {name="default_snow_footstep", gain=0.75}, + place = {name="default_place_node", gain=1.0} + }), + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + -- If it's being placed on an another similar one, replace it with + -- a full block + local slabpos = nil + local slabnode = nil + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local n0 = minetest.get_node(p0) + local n1 = minetest.get_node(p1) + local param2 = 0 + + local n0_is_upside_down = (n0.name == "snow:slab_" .. subname and + n0.param2 >= 20) + + if n0.name == "snow:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then + slabpos = p0 + slabnode = n0 + elseif n1.name == "snow:slab_" .. subname then + slabpos = p1 + slabnode = n1 + end + if slabpos then + -- Remove the slab at slabpos + minetest.remove_node(slabpos) + -- Make a fake stack of a single item and try to place it + local fakestack = ItemStack(recipeitem) + fakestack:set_count(itemstack:get_count()) + + pointed_thing.above = slabpos + local success + fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + -- If the item was taken from the fake stack, decrement original + if success then + itemstack:set_count(fakestack:get_count()) + -- Else put old node back + else + minetest.set_node(slabpos, slabnode) + end + return itemstack + end + + -- Upside down slabs + if p0.y-1 == p1.y then + -- Turn into full block if pointing at a existing slab + if n0_is_upside_down then + -- Remove the slab at the position of the slab + minetest.remove_node(p0) + -- Make a fake stack of a single item and try to place it + local fakestack = ItemStack(recipeitem) + fakestack:set_count(itemstack:get_count()) + + pointed_thing.above = p0 + local success + fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + -- If the item was taken from the fake stack, decrement original + if success then + itemstack:set_count(fakestack:get_count()) + -- Else put old node back + else + minetest.set_node(p0, n0) + end + return itemstack + end + + -- Place upside down slab + param2 = 20 + end + + -- If pointing at the side of a upside down slab + if n0_is_upside_down and p0.y+1 ~= p1.y then + param2 = 20 + end + + return minetest.item_place(itemstack, placer, pointed_thing, param2) + end, + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" + -- Thinking in terms of layers, dirt_with_snow could also double as + -- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04 + or minetest.get_node(pos).name == "default:dirt" then + minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + end + + }) +--[[ + -- for replace ABM + minetest.register_node("snow:slab_" .. subname.."upside_down", { + replace_name = "snow:slab_"..subname, + groups = {slabs_replace=1}, + }) +--]] + + minetest.register_craft({ + output = 'snow:slab_' .. subname .. ' 6', + recipe = { + {recipeitem, recipeitem, recipeitem}, + }, + }) + + + + +end +--[[ +-- Replace old "upside_down" nodes with new param2 versions +minetest.register_abm({ + nodenames = {"group:slabs_replace"}, + interval = 1, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, +}) +--]] + + + +-- Snow stairs and slabs require extra definitions because of their extra +-- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ + +-- Nodes will be called snow:{stair,slab}_ +function snow_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates) + snow_stairs.register_stair(subname, recipeitem, groups, images, desc_stair, freezemelt, liquidtype, paramtype, sunlight_propagates) + snow_stairs.register_slab(subname, recipeitem, groups, images, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates) +end + + +list_of_snow_stuff = { + --{"row[1] = first item in row", + -- "row[2] = second item in row", + -- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ + {"ice", "default:ice", "default_ice.png", "Ice Stairs", "Ice Slabs"}, + {"snowblock", "default:snowblock", "default_snow.png", "Snowblock Stairs", "Snowblock Slabs"}, + {"snow_cobble", "snow:snow_cobble", "snow_snow_cobble.png", "Snow Cobble Stairs", "Snow Cobble Slabs"}, + {"snow_brick", "snow:snow_brick", "snow_snow_brick.png", "Snow Brick Stair", "Snow Brick Slab"}, +} + +for _, row in ipairs(list_of_snow_stuff) do + local snow_subname = row[1] + local snow_recipeitem = row[2] + local snow_images = row[3] + local snow_desc_stair = row[4] + local snow_desc_slab = row[5] + + + + + snow_stairs.register_stair_and_slab(snow_subname, snow_recipeitem, + {cracky=2, crumbly=2, choppy=2, oddly_breakable_by_hand=2, melts=1, icemaker=1}, + {snow_images}, + snow_desc_stair, + snow_desc_slab, + "default:water_source", + "none", + "light", + true + ) + +end -- End the "list of snow stuff" part of the above section. ~ LazyJ + + +-- Snow stairs and slabs should be easier to break than the more dense and +-- manufactured, other snow-type nodes in the list above. ~ lazyJ +minetest.override_item("snow:stair_snowblock", { + groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1}, +}) + +minetest.override_item("snow:slab_snowblock", { + groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1}, +}) + + + +-- Everything above is made of snow and uses snow sounds, ice, however, should sound more like glass +-- and be harder to dig. ~ LazyJ +minetest.override_item("snow:stair_ice", { + groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1}, + use_texture_alpha = true, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.override_item("snow:slab_ice", { + groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1}, + use_texture_alpha = true, + sounds = default.node_sound_glass_defaults(), +}) diff --git a/config.txt b/config.txt new file mode 100644 index 0000000..39611a7 --- /dev/null +++ b/config.txt @@ -0,0 +1,18 @@ +# Whether you are running a legacy minetest version (auto-detected). +legacy = false +# Enables falling snow. +enable_snowfall = false +# Disable this to stop snow from being smoothed. +smooth_snow = true +# Disable this to remove christmas saplings from being found. +christmas_content = true +# The minumum height a snow biome will generate. +min_height = 3 +# Disable this to prevent sleds from being riden. +sleds = true +# Enables debug output. +debug = false +# Reduces the amount of resources and fps used by snowfall. +lighter_snowfall = false +# Enables smooth transition of biomes +smooth_biomes = true diff --git a/crafting.lua b/crafting.lua new file mode 100644 index 0000000..8f31037 --- /dev/null +++ b/crafting.lua @@ -0,0 +1,185 @@ +--[[ + +Crafting Sections (in order, top to bottom): + 1. Fuel + 2. Cooking + 3. Crafting and Recycling + +The crafting recipe for the sled is in the sled.lua file. + +~ LazyJ + +--]] + +-- 1. Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "snow:needles", + burntime = 1, +}) + + + +minetest.register_craft({ + type = "fuel", + recipe = "snow:sapling_pine", + burntime = 10, +}) + + + +minetest.register_craft({ + type = "fuel", + recipe = "snow:needles_decorated", + burntime = 1, +}) + + + +minetest.register_craft({ + type = "fuel", + recipe = "snow:xmas_tree", + burntime = 10, +}) + + + +-- 2. Cooking + +--[[ +"Cooks_into_ice" is a custom group I assigned to full-sized, snow-stuff nodes +(snow bricks, snow cobble, snow blocks, etc.) so I wouldn't have to write an individual cooking +recipe for each one. + +~ LazyJ +--]] + +minetest.register_craft({ + type = "cooking", + cooktime = 12, + output = "default:ice", + recipe = "group:cooks_into_ice", +}) + + + + + + +-- 3. Crafting and Recycling + +-- Let's make moss craftable so players can more easily create mossycobble and +-- gives another useful purpose to pine needles. ~ LazyJ + +minetest.register_craft({ + output = 'snow:moss', + recipe = { + {'snow:needles', 'snow:needles'}, + {'snow:needles', 'snow:needles'}, + }, +}) + + +--[[ +Most snow biomes are too small to provide enough snow as a building material and +still have enough landscape snow to create the wintry surroundings of a +snow village or castle. So I added this snowblock crafting recipe as a way for +players to increase their snow supply in small increments. I considered making +the output 9 but that would make it all too quick and easy (especially for griefers) to create lots +of snowblocks (and then use them to water-grief by melting the snow blocks). + +~ LazyJ + +--]] + +minetest.register_craft({ + type = "shapeless", + output = 'default:snowblock 3', + recipe = { + 'snow:snow_cobble', + 'snow:snow_cobble' + } +}) + + + +minetest.register_craft({ + type = "shapeless", + output = 'default:snowblock 3', + recipe = { + 'default:snowblock', + 'default:snowblock' + } +}) + + + +minetest.register_craft({ + output = 'snow:snow_brick', + recipe = { + {'default:snowblock', 'default:snowblock'}, + {'default:snowblock', 'default:snowblock'} + } +}) + + + +-- Why not recycle snow_bricks back into snowblocks? ~ LazyJ +minetest.register_craft({ + output = 'default:snowblock 4', + recipe = { + {'snow:snow_brick'} + } +}) + + + +-- Recycle basic, half-block, slabs back into full blocks + +-- A little "list" magic here. Instead of writing four crafts I only have to write two. ~ LazyJ +local recycle_default_slabs = { + "ice", + "snowblock", +} + +for _, name in pairs(recycle_default_slabs) do + local subname_default = name + + -- This craft is for default snowblocks and default ice. + -- 1 crafting recipe handles 2, default blocks. ~ LazyJ + minetest.register_craft({ + type = "shapeless", + output = "default:"..subname_default, + recipe = { + "snow:slab_"..subname_default, + "snow:slab_"..subname_default, + } + }) +end + + + +-- Similar list magic here too. I couldn't successfully combine these in the first list +-- because we are dealing with slabs/blocks from two different mods, the "Snow" mod and +-- minetest_game's "Default" mod. ~ LazyJ + +local recycle_snowmod_slabs = { + "snow_brick", + "snow_cobble", +} + +for _, name in pairs(recycle_snowmod_slabs) do + local subname_snowmod = name + + -- This craft is for the Snow mod's full-sized blocks. + -- 1 crafting recipe handles 2, or more, Snow mod blocks. ~ LazyJ + minetest.register_craft({ + type = "shapeless", + output = "snow:"..subname_snowmod, + recipe = { + "snow:slab_"..subname_snowmod, + "snow:slab_"..subname_snowmod, + } + }) +end diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..9771003 --- /dev/null +++ b/depends.txt @@ -0,0 +1,2 @@ +default +moreblocks? \ No newline at end of file diff --git a/falling_snow.lua b/falling_snow.lua new file mode 100644 index 0000000..a453ad2 --- /dev/null +++ b/falling_snow.lua @@ -0,0 +1,201 @@ +--[[ +--================= +--====================================== +LazyJ's Fork of Splizard's "Snow" Mod +by LazyJ +version: Umpteen and 7/5ths something or another. +2014_04_12 +--====================================== +--================= + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +THE LIST OF CHANGES I'VE MADE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +* Falling snow would destroy nodes it deposited snow on. I figured out that if +I switched the 'snow.place' with 'minetest.place_node' and increased the +y position by 2, then the nodes were nolonger destroyed and the snow +would start to pile up. + + + +~~~~~~ +TODO +~~~~~~ + +* Add code to prevent snowfall from depositing snow on or +near torches and lava. + +* Add code to prevent snowfall from depositing snow on +'walkable = false' defined nodes. + +--]] + + + +--============================================================= +-- CODE STUFF +--============================================================= + + +if snow.enable_snowfall then + + local weather_legacy + + local read_weather_legacy = function () + local file = io.open(minetest.get_worldpath().."/weather_v6", "r") + if not file then return end + local readweather = file:read() + file:close() + return readweather + end + + --Weather for legacy versions of minetest. + local save_weather_legacy = function () + local file = io.open(minetest.get_worldpath().."/weather_v6", "w+") + file:write(weather_legacy) + file:close() + end + + weather_legacy = read_weather_legacy() or "" + + minetest.register_globalstep(function(dtime) + if weather_legacy == "snow" then + if math.random(1, 10000) == 1 then + weather_legacy = "none" + save_weather_legacy() + end + else + if math.random(1, 50000) == 2 then + weather_legacy = "snow" + save_weather_legacy() + end + end + end) + + --Get snow at position. + local get_snow = function(pos) + --Legacy support. + if weather_legacy == "snow" then + local perlin1 = minetest.env:get_perlin(112,3, 0.5, 150) + if perlin1:get2d( {x=pos.x, y=pos.z} ) > 0.53 then + return true + else + return false + end + else + return false + end + end + + local addvectors = vector and vector.add + + --Returns a random position between minp and maxp. + local randpos = function (minp, maxp) + local x,y,z + if minp.x > maxp.x then + x = math.random(maxp.x,minp.x) else x = math.random(minp.x,maxp.x) end + y = minp.y + if minp.z > maxp.z then + z = math.random(maxp.z,minp.z) else z = math.random(minp.z,maxp.z) end + return {x=x,y=y,z=z} + end + + local snow_fall=function (pos, player, animate) + local ground_y = nil + for y=pos.y+10,pos.y+20,1 do + local n = minetest.env:get_node({x=pos.x,y=y,z=pos.z}).name + if n ~= "air" and n ~= "ignore" then + return + end + end + for y=pos.y+10,pos.y-15,-1 do + local n = minetest.env:get_node({x=pos.x,y=y,z=pos.z}).name + if n ~= "air" and n ~= "ignore" then + ground_y = y + break + end + end + if not ground_y then return end + pos = {x=pos.x, y=ground_y, z=pos.z} + local spos = {x=pos.x, y=ground_y+10, z=pos.z} + + + if get_snow(pos) then + if animate then + local minp = addvectors(spos, {x=-9, y=3, z=-9}) + local maxp = addvectors(spos, {x= 9, y=5, z= 9}) + local vel = {x=0, y= -1, z=-1} + local acc = {x=0, y= 0, z=0} + minetest.add_particlespawner(3, 0.5, + minp, maxp, + vel, vel, + acc, acc, + 5, 5, + 50, 50, + false, "weather_snow.png", player:get_player_name()) + end + --snow.place(pos, true) + minetest.place_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="default:snow"}) -- LazyJ + end + end + + -- Snow + minetest.register_globalstep(function(dtime) + for _, player in ipairs(minetest.get_connected_players()) do + local ppos = player:getpos() + + local sminp = addvectors(ppos, {x=-20, y=0, z=-20}) + local smaxp = addvectors(ppos, {x= 20, y=0, z= 20}) + + -- Make sure player is not in a cave/house... + if get_snow(ppos) and minetest.env:get_node_light(ppos, 0.5) == 15 then + + local minp = addvectors(ppos, {x=-9, y=3, z=-9}) + local maxp = addvectors(ppos, {x= 9, y=5, z= 9}) + + local minp_deep = addvectors(ppos, {x=-5, y=3.2, z=-5}) + local maxp_deep = addvectors(ppos, {x= 5, y=1.6, z= 5}) + + local vel = {x=0, y= -1, z=-1} + local acc = {x=0, y= 0, z=0} + + if not snow.lighter_snowfall then + minetest.add_particlespawner(5, 0.5, + minp, maxp, + vel, vel, + acc, acc, + 5, 5, + 25, 25, + false, "weather_snow.png", player:get_player_name()) + + minetest.add_particlespawner(4, 0.5, + minp_deep, maxp_deep, + vel, vel, + acc, acc, + 4, 4, + 25, 25, + false, "weather_snow.png", player:get_player_name()) + + if math.random(1,5) == 4 then + snow_fall(randpos(sminp, smaxp), player) + end + else + if math.random(1,5) == 4 then + snow_fall(randpos(sminp, smaxp), player, true) + end + end + + + else + + if math.random(1,5) == 4 then + snow_fall(randpos(sminp, smaxp), player, true) + end + end + end + end) + +end diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..e013a3c --- /dev/null +++ b/init.lua @@ -0,0 +1,127 @@ +--[[ +--============================== +--========================================================== +LazyJ's Fork of Splizard's "Snow Biomes" Mod +by LazyJ +version: Umpteen-hundred and 7/5ths something or another. +2014_04_12 + +~~~ + +"Snow Biomes" Mod +By Splizard + +Download: +http//forum.minetest.net/viewtopic.php?id=2290 +http://github.com/Splizard/minetest-mod-snow/ + +--========================================================== +--============================== + + Snow Biomes + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. +]]-- + + + +-- Original Lua Files +--dofile(minetest.get_modpath("snow").."/util.lua") +--dofile(minetest.get_modpath("snow").."/mapgen.lua") +--dofile(minetest.get_modpath("snow").."/sled.lua") +-- "falling_snow.lua" disabled since weather functions minetest.get_heat(pos) and minetest.get_humidity(pos) +-- have been removed from Minetest. +-- Until something else can be figured out, use paramat's "Snowdrift" mod instead. +-- dofile(minetest.get_modpath("snow").."/falling_snow.lua") + +-- Original init.lua File Broken into Smaller Files +dofile(minetest.get_modpath("snow").."/abms.lua") +dofile(minetest.get_modpath("snow").."/aliases.lua") +dofile(minetest.get_modpath("snow").."/basic_stairs_slabs.lua") +dofile(minetest.get_modpath("snow").."/crafting.lua") +dofile(minetest.get_modpath("snow").."/snowball.lua") + + +-- The formspec menu didn't work when util.lua was the very first "dofile" so I moved +-- it and all the other original "dofiles", in order, to the bottom of the list. ~ LazyJ +-- Minetest would crash if the mapgen was called upon before the rest of other snow lua files so +-- I put it lower on the list and that seems to do the trick. ~ LazyJ +dofile(minetest.get_modpath("snow").."/util.lua") +-- To get Xmas tree saplings, the "christmas_content", true or false, in "util.lua" has to be determined first. +-- That means "nodes.lua", where the saplings are controlled, has to come after "util.lua". ~ LazyJ +dofile(minetest.get_modpath("snow").."/nodes.lua") +dofile(minetest.get_modpath("snow").."/mapgen.lua") +dofile(minetest.get_modpath("snow").."/sled.lua") +dofile(minetest.get_modpath("snow").."/falling_snow.lua") + + + +-- Check for "MoreBlocks". If not found, skip this next "dofile". + +if (minetest.get_modpath("moreblocks")) then + + dofile(minetest.get_modpath("snow").."/stairsplus.lua") + +else +end + + + +-- Checks if the snow level is even at any given pos. +-- Smooth Snow +local smooth_snow = snow.smooth_snow +snow.is_uneven = function(pos) + if smooth_snow then + local num = minetest.get_node_level(pos) + local get_node = minetest.get_node + local add_node = minetest.add_node + local found + local foundx + local foundy + for x=-1,1 do + for z=-1,1 do + local node = get_node({x=pos.x+x,y=pos.y,z=pos.z+z}) + local bnode = get_node({x=pos.x+x,y=pos.y-1,z=pos.z+z}) + local drawtype = minetest.registered_nodes[node.name].drawtype + + if drawtype == "plantlike" then + if bnode.name == "default:dirt_with_grass" then + add_node({x=pos.x+x,y=pos.y-1,z=pos.z+z}, {name="default:dirt_with_snow"}) + return true + end + end + + if (not(x == 0 and y == 0)) and node.name == "default:snow" and minetest.get_node_level({x=pos.x+x,y=pos.y,z=pos.z+z}) < num then + found = true + foundx = x + foundz=z + elseif node.name == "air" and bnode.name ~= "air" then + if not (bnode.name == "default:snow") then + snow.place({x=pos.x+x,y=pos.y-1,z=pos.z+z}) + return true + end + end + end + end + if found then + local node = get_node({x=pos.x+foundx,y=pos.y,z=pos.z+foundz}) + if snow.is_uneven({x=pos.x+foundx,y=pos.y,z=pos.z+foundz}) ~= true then + minetest.add_node_level({x=pos.x+foundx,y=pos.y,z=pos.z+foundz}, 7) + end + return true + end + end +end diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/license.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/mapgen.lua b/mapgen.lua new file mode 100644 index 0000000..c62815b --- /dev/null +++ b/mapgen.lua @@ -0,0 +1,181 @@ +--[[ +If you want to run PlantLife and mods that depend on it, i.e. MoreTrees, Disable the mapgen by +commenting-out the lines starting with "local mgname = " through "end" (I left a note were to start +and stop) Disabling "Snow's" mapgen allows MoreTrees and PlantLife to do their thing until the +issue is figured out. However, the pine and xmas tree code is still needed for when those +saplings grow into trees. + +The *starting* comment looks like this: --[[ +The *closing* comment looks like this: --]] + +-- ~ LazyJ, 2014_05_13 + + +-- Part 1: To disable the mapgen, add the *starting* comment under this line. + + +local mgname = "" + +--Identify the mapgen. +minetest.register_on_mapgen_init(function(MapgenParams) + if MapgenParams.mgname then + mgname = MapgenParams.mgname + else + io.write("[MOD] Snow Biomes: WARNING! mapgen could not be identifyed!\n") + end + if mgname == "v7" then + --Load mapgen_v7 compatibility. + dofile(minetest.get_modpath("snow").."/mapgen_v7.lua") + else + --Load mapgen_v6 compatibility. + dofile(minetest.get_modpath("snow").."/mapgen_v6.lua") + end +end) + +-- To complete the commenting-out add the *closing* comment under this line. + + + + +local pine_tree = { + axiom="TABff", + rules_a="[&T+f+ff+ff+ff+f]GA", + rules_b="[&T+f+Gf+Gf+Gf]GB", + trunk="default:tree", + leaves="snow:needles", + angle=90, + iterations=1, + random_level=0, + trunk_type="single", + thin_branches=true, +} + + + +local xmas_tree = { + axiom="TABff", + rules_a="[&T+f+ff+ff+ff+f]GA", + rules_b="[&T+f+Gf+Gf+Gf]GB", + trunk="default:tree", + leaves="snow:needles_decorated", + angle=90, + iterations=1, + random_level=0, + trunk_type="single", + thin_branches=true, +} + + + +--Makes pine tree +function snow.make_pine(pos,snow,xmas) + local env = minetest.env + local perlin1 = env:get_perlin(112,3, 0.5, 150) + local try_node = function(pos, node) + local n = env:get_node(pos).name + if n == "air" or n == "ignore" then + env:add_node(pos,node) + end + end + --Clear ground. + for x=-1,1 do + for z=-1,1 do + if env:get_node({x=pos.x+x,y=pos.y,z=pos.z+z}).name == "default:snow" then + env:remove_node({x=pos.x+x,y=pos.y,z=pos.z+z}) + end + if env:get_node({x=pos.x+x,y=pos.y,z=pos.z+z}).name == "default:snowblock" then + env:remove_node({x=pos.x+x,y=pos.y,z=pos.z+z}) + end + end + end + if xmas then + env:remove_node(pos) + minetest.env:spawn_tree(pos, xmas_tree) + else + minetest.env:spawn_tree(pos, pine_tree) + end + if snow then + local x,z = pos.x,pos.z + try_node({x=x+1,y=pos.y+3,z=z+1},{name="default:snow"}) + try_node({x=x-1,y=pos.y+3,z=z-1},{name="default:snow"}) + try_node({x=x-1,y=pos.y+3,z=z+1},{name="default:snow"}) + try_node({x=x+1,y=pos.y+3,z=z-1},{name="default:snow"}) + + try_node({x=x+1,y=pos.y+5,z=z},{name="default:snow"}) + try_node({x=x-1,y=pos.y+5,z=z},{name="default:snow"}) + try_node({x=x,y=pos.y+5,z=z+1},{name="default:snow"}) + try_node({x=x,y=pos.y+5,z=z-1},{name="default:snow"}) + end + if xmas then + try_node({x=pos.x,y=pos.y+7,z=pos.z},{name="snow:star_lit"}) -- Added lit star. ~ LazyJ + elseif snow and perlin1:get2d({x=pos.x,y=pos.z}) > 0.53 then + try_node({x=pos.x,y=pos.y+7,z=pos.z},{name="default:snow"}) + end +end + + + +--Makes pine tree +function snow.voxelmanip_pine(pos,a,data) + local c_snow = minetest.get_content_id("default:snow") + local c_pine_needles = minetest.get_content_id("snow:needles") + local c_tree = minetest.get_content_id("default:tree") + local c_air = minetest.get_content_id("air") + + local perlin1 = minetest.get_perlin(112,3, 0.5, 150) + --Clear ground. + for x=-1,1 do + for z=-1,1 do + local node = a:index(pos.x+x,pos.y,pos.z+z) + if data[node] == c_snow then + data[node] = c_air + end + end + end + --Make tree. + for i=0, 4 do + if i==1 or i==2 then + for x=-1,1 do + for z=-1,1 do + local x = pos.x + x + local z = pos.z + z + local node = a:index(x,pos.y+i,z) + data[node] = c_pine_needles + if snow and x ~= 0 and z ~= 0 and perlin1:get2d({x=x,y=z}) > 0.53 then + local abovenode = a:index(x,pos.y+i+1,z) + data[abovenode] = c_snow + end + end + end + end + if i==3 or i==4 then + local x = pos.x + local y = pos.y+i + local z = pos.z + data[a:index(x+1,y,z)] = c_pine_needles + data[a:index(x-1,y,z)] = c_pine_needles + data[a:index(x,y,z+1)] = c_pine_needles + data[a:index(x,y,z-1)] = c_pine_needles + if snow then + if perlin1:get2d({x=x+1,y=z}) > 0.53 then + data[a:index(x+1,y+1,z)] = c_snow + end + if perlin1:get2d({x=x+1,y=z}) > 0.53 then + data[a:index(x-1,y+1,z)] = c_snow + end + if perlin1:get2d({x=x,y=z+1}) > 0.53 then + data[a:index(x,y+1,z+1)] = c_snow + end + if perlin1:get2d({x=x,y=z-1}) > 0.53 then + data[a:index(x,y+1,z-1)] = c_snow + end + end + end + data[a:index(pos.x,pos.y+i,pos.z)] = c_tree + end + data[a:index(pos.x,pos.y+5,pos.z)] = c_pine_needles + data[a:index(pos.x,pos.y+6,pos.z)] = c_pine_needles + if snow and perlin1:get2d({x=pos.x,y=pos.z}) > 0.53 then + data[a:index(pos.x,pos.y+7,pos.z)] = c_snow + end +end diff --git a/mapgen_v6.lua b/mapgen_v6.lua new file mode 100644 index 0000000..dd0581b --- /dev/null +++ b/mapgen_v6.lua @@ -0,0 +1,278 @@ +--Identify content ID's of nodes +local c_dirt_with_grass = minetest.get_content_id("default:dirt_with_grass") +local c_snow = minetest.get_content_id("default:snow") +local c_snow_block = minetest.get_content_id("default:snowblock") +local c_dirt_with_snow = minetest.get_content_id("default:dirt_with_snow") +local c_air = minetest.get_content_id("air") +local c_ignore = minetest.get_content_id("ignore") +local c_stone = minetest.get_content_id("default:stone") +local c_dry_shrub = minetest.get_content_id("default:dry_shrub") +local c_leaves = minetest.get_content_id("default:leaves") +local c_jungleleaves = minetest.get_content_id("default:jungleleaves") +local c_junglegrass = minetest.get_content_id("default:junglegrass") +local c_ice = minetest.get_content_id("default:ice") +local c_water = minetest.get_content_id("default:water_source") +local c_papyrus = minetest.get_content_id("default:papyrus") +local c_sand = minetest.get_content_id("default:sand") + +--Snow biomes are found at 0.53 and greater perlin noise. +minetest.register_on_generated(function(minp, maxp, seed) + --if maxp.y >= -10 and maxp.y > snow.min_height then + + --Start timer + local t1 = os.clock() + local in_biome = false + + --Load Voxel Manipulator + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local a = VoxelArea:new{ + MinEdge={x=emin.x, y=emin.y, z=emin.z}, + MaxEdge={x=emax.x, y=emax.y, z=emax.z}, + } + local data = vm:get_data() + + local debug = snow.debug + local min_height = snow.min_height + + --Should make things a bit faster. + local env = minetest.env + + + -- Assume X and Z lengths are equal + local divlen = 16 + local divs = (maxp.x-minp.x)+1; + local x0 = minp.x + local z0 = minp.z + local x1 = maxp.x + local z1 = maxp.z + + + --Get map specific perlin noise. + local perlin1 = env:get_perlin(112,3, 0.5, 150) + + --Speed hack: checks the corners and middle of the chunk for "snow biome". + --[[if not ( perlin1:get2d( {x=x0, y=z0} ) > 0.53 ) --top left + and not ( perlin1:get2d( { x = x0 + ( (x1-x0)/2), y=z0 } ) > 0.53 )--top middle + and not (perlin1:get2d({x=x1, y=z1}) > 0.53) --bottom right + and not (perlin1:get2d({x=x1, y=z0+((z1-z0)/2)}) > 0.53) --right middle + and not (perlin1:get2d({x=x0, y=z1}) > 0.53) --bottom left + and not (perlin1:get2d({x=x1, y=z0}) > 0.53) --top right + and not (perlin1:get2d({x=x0+((x1-x0)/2), y=z1}) > 0.53) --left middle + and not (perlin1:get2d({x=(x1-x0)/2, y=(z1-z0)/2}) > 0.53) --middle + and not (perlin1:get2d({x=x0, y=z1+((z1-z0)/2)}) > 0.53) then --bottom middle + return + end]] + + --Choose a biome types. + local pr = PseudoRandom(seed+57) + local biome + + --Land biomes + biome = pr:next(1, 5) + local snowy = biome == 1 --spawns alot of snow + local plain = biome == 2 --spawns not much + local alpine = biome == 3 --rocky terrain + -- biome == 4 or biome == 5 -- normal biome + + --Water biomes + biome2 = pr:next(1, 5) + local cool = biome == 1 --only spawns ice on edge of water + local icebergs = biome == 2 + local icesheet = biome == 3 + local icecave = biome == 4 + local icehole = biome == 5 --icesheet with holes + + --Misc biome settings. + local icy = pr:next(1, 2) == 2 --If enabled spawns ice in sand instead of snow blocks. + local mossy = pr:next(1,2) == 1 --Spawns moss in snow. + local shrubs = pr:next(1,2) == 1 --Spawns dry shrubs in snow. + local pines = pr:next(1,2) == 1 --spawns pines. + + --Debugging function + local biomeToString = function(num,num2) + local biome, biome2 + if num == 1 then biome = "snowy" + elseif num == 2 then biome = "plain" + elseif num == 3 then biome = "alpine" + elseif num == 4 or num == 5 then biome = "normal" + else biome = "unknown "..num end + + if num2 == 1 then biome2 = "cool" + elseif num2 == 2 then biome2 = "icebergs" + elseif num2 == 3 then biome2 = "icesheet" + elseif num2 == 4 then biome2 = "icecave" + elseif num2 == 5 then biome2 = "icehole" + else biome2 = "unknown "..num end + + return biome, biome2 + end + + local spawn_pine = snow.voxelmanip_pine + local smooth = snow.smooth_biomes + local legacy = snow.legacy + + --Reseed random. + pr = PseudoRandom(seed+68) + + --[[if alpine then + local trees = env:find_nodes_in_area(minp, maxp, {"default:leaves","default:tree"}) + for i,v in pairs(trees) do + env:remove_node(v) + end + end]] + + --Loop through chunk. + for x = minp.x, maxp.x do + for z = minp.z, maxp.z do + + --Check if we are in a "Snow biome" + local in_biome = false + local test = perlin1:get2d({x=x, y=z}) + if smooth and (not snowy) and (test > 0.73 or (test > 0.43 and pr:next(0,29) > (0.73 - test) * 100 )) then + in_biome = true + elseif (not smooth or snowy) and test > 0.53 then + in_biome = true + end + + if in_biome then + + local perlin2 = env:get_perlin(322345,3, 0.5, 80) + local icetype = perlin2:get2d({x=x, y=z}) + local cool = icetype > 0 --only spawns ice on edge of water + local icebergs = icetype > -0.2 and icetype <= 0 + local icehole = icetype > -0.4 and icetype <= -0.2 + local icesheet = icetype > -0.6 and icetype <= -0.4 + local icecave = icetype <= -0.6 + + --if not plain or pr:next(1,12) == 1 then + + -- Find ground level (0...15) + local ground_y = nil + for y=maxp.y,minp.y,-1 do + local n = data[a:index(x, y, z)] + if n ~= c_air and n ~= c_ignore then + ground_y = y + break + end + end + + if ground_y then --and ground_y > min_height then + + -- Snowy biome stuff + local node = a:index(x, ground_y, z) + local abovenode = a:index(x, ground_y+1, z) + local belownode = a:index(x, ground_y+2, z) + + if ground_y and data[node] == c_dirt_with_grass then + --local veg + --if legacy and mossy and pr:next(1,10) == 1 then veg = 1 end + if alpine then + --Gets rid of dirt + data[abovenode] = c_snow + for y=ground_y,-6,-1 do + local stone = a:index(x, y, z) + if data[stone] == "default:stone" then + break + else + data[stone] = c_stone + end + end + elseif (shrubs and pr:next(1,28) == 1) then + --Spawns dry shrubs. + data[node] = c_dirt_with_snow + data[abovenode] = c_dry_shrub + elseif pines and pr:next(1,36) == 1 then + --Spawns pines. + data[node] = c_dirt_with_snow + spawn_pine({x=x, y=ground_y+1, z=z},a,data) + --elseif snowy then + --Spawns snow blocks. + --env:add_node({x=x,y=ground_y+1,z=z}, {name="snow:snow_block"}) + --data[aanode] = c_snow + else + --Spawns snow. + data[node] = c_dirt_with_snow + data[abovenode] = c_snow + end + elseif ground_y and data[belownode] == c_sand then + --Spawns ice in sand if icy, otherwise spawns snow on top. + if not icy then + data[node] = c_snow + else + data[belownode] = c_ice + end + elseif ground_y and data[node] == c_leaves or data[node] == c_jungleleaves then + data[abovenode] = c_snow + elseif ground_y and data[node] == c_junglegrass then + data[node] = c_dry_shrub + elseif ground_y and data[node] == c_papyrus then + for i=ground_y, ground_y-4, -1 do + local papyrus = a:index(x, y, z) + if data[papyrus] == c_papyrus then + local papyrusabove = a:index(x, ground_y, z) + data[papyrusabove] = c_snow + data[papyrus] = c_snow_block + end + end + elseif ground_y and data[node] == c_water then + if not icesheet and not icecave and not icehole then + --Coastal ice. + local x1 = data[a:index(x+1,ground_y,z)] + local z1 = data[a:index(x,ground_y,z+1)] + local xz1 = data[a:index(x+1,ground_y,z+1)] + local xz2 = data[a:index(x-1,ground_y,z-1)] + local x2 = data[a:index(x-1,ground_y,z)] + local z2 = data[a:index(x,ground_y,z-1)] + local y = data[a:index(x,ground_y-1,z)] + local rand = pr:next(1,4) == 1 + if + ((x1 and x1 ~= c_water and x1 ~= c_ice and x1 ~= c_air and x1 ~= c_ignore) or ((cool or icebergs) and x1 == c_ice and rand)) or + ((z1 and z1 ~= c_water and z1 ~= c_ice and z1 ~= c_air and z1 ~= c_ignore) or ((cool or icebergs) and z1 == c_ice and rand)) or + ((xz1 and xz1 ~= c_water and xz1 ~= c_ice and xz1 ~= c_air and xz1 ~= c_ignore) or ((cool or icebergs) and xz1 == c_ice and rand)) or + ((xz2 and xz2 ~= c_water and xz2 ~= c_ice and xz2 ~= c_air and xz2 ~= c_ignore) or ((cool or icebergs) and xz2 == c_ice and rand)) or + ((x2 and x2 ~= c_water and x2 ~= c_ice and x2 ~= c_air and x2 ~= c_ignore) or ((cool or icebergs) and x2 == c_ice and rand)) or + ((z2 and z2 ~= c_water and z2 ~= c_ice and z2 ~= c_air and z2 ~= c_ignore) or ((cool or icebergs) and z2 == c_ice and rand)) or + (y ~= c_water and y ~= c_ice and y ~= "air") or (pr:next(1,6) == 1 and icebergs) then + data[node] = c_ice + end + else + --Icesheets, Broken icesheet, Icecaves + if (icehole and pr:next(1,10) > 1) or icecave or icesheet then + data[node] = c_ice + end + if icecave then + --Gets rid of water underneath ice + for y=ground_y-1,-60,-1 do + local water = a:index(x, y, z) + if data[water] ~= c_water then + break + else + data[water] = c_air + end + end + end + end + end + end + --end + end + end + end + + vm:set_data(data) + + vm:calc_lighting( + {x=minp.x-16, y=minp.y, z=minp.z-16}, + {x=maxp.x+16, y=maxp.y, z=maxp.z+16} + ) + + vm:write_to_map(data) + + + if debug then + biome_string,biome2_string = biomeToString(biome,biome2) + print(biome_string.." and "..biome2_string..": Snow Biome Genarated near x"..minp.x.." z"..minp.z) + print(string.format("elapsed time: %.2fms", (os.clock() - t1) * 1000)) + end + --end +end) diff --git a/mapgen_v7.lua b/mapgen_v7.lua new file mode 100644 index 0000000..5bac309 --- /dev/null +++ b/mapgen_v7.lua @@ -0,0 +1,147 @@ +minetest.register_biome({ + name = "snow_biome_default", + + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 2, + + height_min = snow.min_height, + height_max = snow.min_height+60, + heat_point = 10.0, + humidity_point = 40.0, +}) + +minetest.register_biome({ + name = "snow_biome_forest", + + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 2, + + height_min = snow.min_height, + height_max = snow.min_height+60, + heat_point = 10.0, + humidity_point = 55.0, +}) + +minetest.register_biome({ + name = "snow_biome_lush", + + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 2, + + height_min = snow.min_height, + height_max = snow.min_height+60, + heat_point = 10.0, + humidity_point = 70.0, +}) + +minetest.register_biome({ + name = "snow_biome_alpine", + + node_top = "default:stone", + depth_top = 1, + node_filler = "default:stone", + + height_min = snow.min_height+60, + height_max = 31000, + heat_point = 10.0, + humidity_point = 40.0, +}) + +minetest.register_biome({ + name = "base_normal", + + height_min = 3, + height_max = 40, + heat_point = 40.0, + humidity_point = 40.0, +}) + +minetest.register_biome({ + name = "snow_biome_sand", + + node_top = "default:sand", + depth_top = 3, + node_filler = "default:stone", + depth_filler = 0, + + height_min = -31000, + height_max = 2, + heat_point = 10.0, + humidity_point = 40.0, +}) + + +--Pine tree. +minetest.register_decoration({ + deco_type = "schematic", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 0.005, + biomes = {"snow_biome_default"}, + schematic = minetest.get_modpath("snow").."/schematics/pine.mts", + flags = "place_center_x, place_center_z", +}) + +minetest.register_decoration({ + deco_type = "schematic", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 0.05, + biomes = {"snow_biome_forest"}, + schematic = minetest.get_modpath("snow").."/schematics/pine.mts", + flags = "place_center_x, place_center_z", +}) + +minetest.register_decoration({ + deco_type = "schematic", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 0.1, + biomes = {"snow_biome_lush"}, + schematic = minetest.get_modpath("snow").."/schematics/pine.mts", + flags = "place_center_x, place_center_z", +}) + +--Dry shrubs. +minetest.register_decoration({ + deco_type = "simple", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 0.005, + biomes = {"snow_biome_default"}, + decoration = "default:dry_shrub", +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 0.05, + biomes = {"snow_biome_forest", "snow_biome_lush"}, + decoration = "default:dry_shrub", +}) + +--Snow. +minetest.register_decoration({ + deco_type = "simple", + place_on = "default:dirt_with_snow", + sidelen = 16, + fill_ratio = 10, + biomes = {"snow_biome_default", "snow_biome_forest", "snow_biome_lush"}, + decoration = "default:snow", +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = "default:stone", + sidelen = 16, + fill_ratio = 10, + biomes = {"snow_biome_alpine"}, + decoration = "default:snow", +}) diff --git a/models/sled.blend b/models/sled.blend new file mode 100644 index 0000000000000000000000000000000000000000..57f4257c572603c7b6ed156c7ce7b28d901e6abd GIT binary patch literal 430048 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 literal 0 HcmV?d00001 diff --git a/sled.lua b/sled.lua new file mode 100644 index 0000000..4509b1e --- /dev/null +++ b/sled.lua @@ -0,0 +1,203 @@ +--[[ +--================= +--====================================== +LazyJ's Fork of Splizard's "Snow" Mod +by LazyJ +version: Umpteen and 7/5ths something or another. +2014_04_12 +--====================================== +--================= + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +THE LIST OF CHANGES I'VE MADE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + +* The HUD message that displayed when a player sat on the sled would not go away after the player +got off the sled. I spent hours on trial-and-error while reading the lua_api.txt and scrounging +the Internet for a needle-in-the-haystack solution as to why the hud_remove wasn't working. +Turns out Splizard's code was mostly correct, just not assembled in the right order. + +The key to the solution was found in the code of leetelate's scuba mod: +http://forum.minetest.net/viewtopic.php?id=7175 + +* Changed the wording of the HUD message for clarity. + + +~~~~~~ +TODO +~~~~~~ + +* Figure out why the player avatars remain in a seated position, even after getting off the sled, +if they flew while on the sled. 'default.player_set_animation', where is a better explanation +for this and what are it's available options? + +* Go through, clean-up my notes and get them better sorted. Some are in the code, some are +scattered in my note-taking program. This "Oh, I'll just make a little tweak here and a +little tweak there" project has evolved into something much bigger and more complex +than I originally planned. :p ~ LazyJ + + +--]] + + + +--============================================================= +-- CODE STUFF +--============================================================= + +-- +-- Helper functions +-- + +local function is_water(pos) + local nn = minetest.env:get_node(pos).name + return minetest.get_item_group(nn, "water") ~= 0 +end + + +-- +-- Sled entity +-- + +local sled = { + physical = false, + collisionbox = {-0.6,-0.25,-0.6, 0.6,0.3,0.6}, + visual = "mesh", + mesh = "sled.x", + textures = {"sled.png"}, + + driver = nil, + sliding = false, +} + +local players_sled = {} + +function sled:on_rightclick(clicker) + if (not self.driver) and snow.sleds then + players_sled[clicker:get_player_name()] = true + self.driver = clicker + self.object:set_attach(clicker, "", {x=0,y=-9,z=0}, {x=0,y=90,z=0}) + clicker:set_physics_override({ + speed = 2, -- multiplier to default value + jump = 0, -- multiplier to default value + gravity = 1 + }) +--[[ + local HUD = + { + hud_elem_type = "text", -- see HUD element types + position = {x=0.5, y=0.89}, + name = "sled", + scale = {x=2, y=2}, + text = "You are sledding, hold sneak to stop.", + direction = 0, + } + + clicker:hud_add(HUD) +--]] + +-- Here is part 1 of the fix. ~ LazyJ + HUD = clicker:hud_add({ + hud_elem_type = "text", + position = {x=0.5, y=0.89}, + name = "sled", + scale = {x=2, y=2}, + text = "You are on the sled! Press the sneak key to get off the sled.", -- LazyJ + direction = 0, + }) +-- End part 1 + end +end + +function sled:on_activate(staticdata, dtime_s) + self.object:set_armor_groups({immortal=1}) + if staticdata then + self.v = tonumber(staticdata) + end +end + +function sled:get_staticdata() + return tostring(v) +end + +function sled:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) + self.object:remove() + if puncher and puncher:is_player() then + puncher:get_inventory():add_item("main", "snow:sled") + end +end + + +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.get_connected_players()) do + if players_sled[player:get_player_name()] then + default.player_set_animation(player, "sit", 0) + end + end +end) + +function sled:on_step(dtime) + if self.driver then + local p = self.object:getpos() + p.y = p.y+0.4 + local s = self.object:getpos() + s.y = s.y -0.5 + local keys = self.driver:get_player_control() + if keys["sneak"] or is_water(p) or (not minetest.find_node_near(s, 1, {"default:snow","default:snowblock","default:ice","default:dirt_with_snow", "group:icemaker"})) then -- LazyJ + self.driver:set_physics_override({ + speed = 1, -- multiplier to default value + jump = 1, -- multiplier to default value + gravity = 1 + }) + + players_sled[self.driver:get_player_name()] = false + self.object:set_detach() + --self.driver:hud_remove("sled") + self.driver:hud_remove(HUD) -- And here is part 2. ~ LazyJ + self.driver = nil + self.object:remove() + + end + end +end + +minetest.register_entity("snow:sled", sled) + + +minetest.register_craftitem("snow:sled", { + description = "Sled", + inventory_image = "snow_sled.png", + wield_image = "snow_sled.png", + wield_scale = {x=2, y=2, z=1}, + liquids_pointable = true, + stack_max = 1, + + on_use = function(itemstack, placer) + local pos = {x=0,y=-1000, z=0} + local name = placer:get_player_name() + if not players_sled[name] then + local sled = minetest.env:add_entity(pos, "snow:sled") + sled:get_luaentity():on_rightclick(placer) + end + end, +}) + +minetest.register_craft({ + output = "snow:sled", + recipe = { + {"", "", ""}, + {"group:stick", "", ""}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) +minetest.register_craft({ + output = "snow:sled", + recipe = { + {"", "", ""}, + {"", "", "group:stick"}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) diff --git a/snowball.lua b/snowball.lua new file mode 100644 index 0000000..73e0c98 --- /dev/null +++ b/snowball.lua @@ -0,0 +1,190 @@ +--============ +--Snowballs +--============ + +-- Snowballs were destroying nodes if the snowballs landed just right. +-- Quite a bit of trial-and-error learning here and it boiled down to a +-- small handful of code lines making the difference. ~ LazyJ + +local snowball_GRAVITY=9 +local snowball_VELOCITY=19 + +--Shoot snowball +local snow_shoot_snowball=function (item, player, pointed_thing) + local playerpos=player:getpos() + local obj=minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, "snow:snowball_entity") + local dir=player:get_look_dir() + obj:setvelocity({x=dir.x*snowball_VELOCITY, y=dir.y*snowball_VELOCITY, z=dir.z*snowball_VELOCITY}) + obj:setacceleration({x=dir.x*-3, y=-snowball_GRAVITY, z=dir.z*-3}) + item:take_item() + return item +end + +--The snowball Entity +snow_snowball_ENTITY={ + physical = false, + timer=0, + textures = {"default_snowball.png"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +--Snowball_entity.on_step()--> called when snowball is moving. +snow_snowball_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + + --Become item when hitting a node. + if self.lastpos.x~=nil then --If there is no lastpos for some reason. ~ Splizard + -- Check to see what is one node above where the snow is + -- going to be placed. ~ LazyJ, 2014_04_08 + local abovesnowballtarget = {x=pos.x, y=pos.y+1, z=pos.z} + -- Identify the name of the node that was found above. ~ LazyJ, 2014_04_08 + local findwhatisabove = minetest.get_node(abovesnowballtarget).name + -- If the node above is air, then it's OK to go on to the next step. ~ LazyJ, 2014_04_08 + if findwhatisabove == "air" then + -- If the node where the snow is going is anything except air, then it's OK to put + -- the snow on it. ~ Original line of code by Splizard, comment by LazyJ so I can + -- keep track of what this code does. ~ LazyJ, 2014_04_07 + if node.name ~= "air" then + --snow.place(pos) -- this is the original code, I replaced it with + -- minetest.place_node and bumped the y position up by 2 (make the snow drop + -- from a node above and pile up). ~ LazyJ, 2014_04_07 + minetest.place_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="default:snow"}) + self.object:remove() + end + else -- If findwhatisabove is not equal to "air" then cancel the snowball + -- with self.object:remove() ~ LazyJ, 2014_04_08 + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + + + +minetest.register_entity("snow:snowball_entity", snow_snowball_ENTITY) + + + +-- Snowball and Default Snowball Merged + +-- They both look the same, they do basically the same thing (except one is a leftclick throw +-- and the other is a rightclick drop),... Why not combine snow:snowball with default:snow and +-- benefit from both? ~ LazyJ, 2014_04_08 + +--[[ Save this for reference and occasionally compare to the default code for any updates. + +minetest.register_node(":default:snow", { + description = "Snow", + tiles = {"default_snow.png"}, + inventory_image = "default_snowball.png", + wield_image = "default_snowball.png", + is_ground_content = true, + paramtype = "light", + buildable_to = true, + leveled = 7, + drawtype = "nodebox", + freezemelt = "default:water_flowing", + node_box = { + type = "leveled", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, + }, + }, + groups = {crumbly=3,falling_node=1, melts=1, float=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.25}, + dug = {name="default_snow_footstep", gain=0.75}, + }), + on_construct = function(pos) + if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "default:dirt_with_grass" or minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "default:dirt" then + minetest.set_node({x=pos.x, y=pos.y-1, z=pos.z}, {name="default:dirt_with_snow"}) + end + -- Now, let's turn the snow pile into a snowblock. ~ LazyJ + if minetest.get_node({x=pos.x, y=pos.y-2, z=pos.z}).name == "default:snow" and -- Minus 2 because at the end of this, the layer that triggers the change to a snowblock is the second layer more than a full block, starting into a second block (-2) ~ LazyJ, 2014_04_11 + minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "default:snow" then + minetest.set_node({x=pos.x, y=pos.y-2, z=pos.z}, {name="default:snowblock"}) + end + end, + on_use = snow_shoot_snowball -- This line is from the 'Snow' mod, the reset is default Minetest. +}) +--]] + + + +minetest.override_item("default:snow", { + groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3,falling_node=1, melts=2, float=1}, + on_construct = function(pos) + if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "default:dirt_with_grass" + or minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "default:dirt" then + minetest.set_node({x=pos.x, y=pos.y-1, z=pos.z}, {name="default:dirt_with_snow"}) + end + -- Now, let's turn the snow pile into a snowblock. + if minetest.get_node({x=pos.x, y=pos.y-2, z=pos.z}).name == "default:snow" and + -- Minus 2 because at the end of this, the layer that triggers the change to a snowblock + -- is the second snowball layer more than the full block below. That second layer,from + -- what I've observed, seems to push into a third node box above so by subracting 2, + -- the swap_node target is moved back down to the first get_node y=pos. + -- ~ LazyJ, 2014_04_24 + minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "default:snow" then + minetest.set_node({x=pos.x, y=pos.y-2, z=pos.z}, {name="default:snowblock"}) + end + end, + on_use = snow_shoot_snowball -- This line is from the 'Snow' mod, + -- the reset is default Minetest. ~ LazyJ +}) + + + +--[[ +A note about default torches, melting, and "buildable_to = true" in default snow. + +On servers where buckets are disabled, snow and ice stuff is used to set water for crops and +water stuff like fountains, pools, ponds, ect.. It is a common practice to set a default torch on +the snow placed where the players want water to be. + +If you place a default torch *on* default snow to melt it, instead of melting the snow is +*replaced* by the torch. Using "buildable_to = false" would fix this but then the snow would no +longer pile-up in layers; the snow would stack like thin shelves in a vertical column. + +I tinkered with the default torch's code (see below) to check for snow at the position and one +node above (layered snow logs as the next y position above) but default snow's +"buildable_to = true" always happened first. An interesting exercise to better learn how Minetest +works, but otherwise not worth it. If you set a regular torch near snow, the snow will melt +and disappear leaving you with nearly the same end result anyway. I say "nearly the same" +because if you set a default torch on layered snow, the torch will replace the snow and be +lit on the ground. If you were able to set a default torch *on* layered snow, the snow would +melt and the torch would become a dropped item. + +~ LazyJ + +--]] + + +-- Some of the ideas I tried. ~ LazyJ +--[[ +local can_place_torch_on_top = function(pos) + if minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "default:snow" + or minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "default:snow" then + minetest.override_item("default:snow", {buildable_to = false,}) + end + end +--]] + + +--[[ +minetest.override_item("default:torch", { + --on_construct = function(pos) + on_place = function(itemstack, placer, pointed_thing) + --if minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "default:snow" + -- Even though layered snow doesn't look like it's in the next position above (y+1) + -- it registers in that position. Check the terminal's output to see the coord change. + --or minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "default:snow" + if pointed_thing.name == "default:snow" + then minetest.set_node({x=pos.x, y=pos.y+1, z=pos.z}, {name="default:torch"}) + end + end +}) +--]] diff --git a/stairsplus.lua b/stairsplus.lua new file mode 100644 index 0000000..011fd85 --- /dev/null +++ b/stairsplus.lua @@ -0,0 +1,341 @@ +-- =============================================================================== +-- StairsPlus Bonus! +-- =============================================================================== +--[[ +This section of code that makes blocks compatible with MoreBlocks' circular saw. +I've added circular saw compatible code for default snowblocks and ice. :D +A big thanks to Calinou and ShadowNinja for making this possible. + +Because StairsPlus creates partial blocks, it didn't seem quite right that the +smallest microblocks would produce a full-sized water_source node when melted. +So I toned them down a bit by changing their melt to a temporary, +2-second water_source. See "melts" in abms.lua file for the various intensities. + +___...::: ATTENTION MINETEST SERVER OPERATORS :::...___ +You may or may not have noticed in your server logs that MoreBlocks stairs/slabs/ +panels/microblocks are not recorded as to when, who, what, and where. This is +important information when trying to determine if a player who dug these blocks +is the owner (the player who placed the block) or is a griefer stealing the block. + +There is an option that will log when these blocks are placed but it comes at the +cost of losing the auto-rotation of those blocks when placed. They can still be +rotated with a screwdriver but if screwdrivers are disabled on your server your +players won't be able to position MoreBlocks, saw-made blocks. + +To enable logging the placement of these blocks, un-comment these lines: + +--on_place = minetest.item_place + +There is one in each of the "stairsplus.register_all" sections. + +~ LazyJ +-- =============================================================================== +--]] + +--snow_stairsplus = {} + +-- Check for infinite stacks + +--if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then +-- snow_stairsplus.expect_infinite_stacks = false +--else +-- snow_stairsplus.expect_infinite_stacks = true +--end + + + + + + +-- First, let's run a check to see if MoreBlocks is installed; we're going to need it for the +-- next section of stairsplus stuff. ~LazyJ + +if (minetest.get_modpath("moreblocks")) + +-- 'If' MoreBlocks was found, well, 'then' go ahead with this next part: + +then + +--[[ Leave commented out - For reference only. ~ LazyJ +function stairsplus.register_all(modname, subname, recipeitem, fields) + --stairsplus.register_stair_slab_panel_micro(modname, subname, recipeitem, fields) + stairsplus:register_stair(modname, subname, recipeitem, fields) + stairsplus:register_slab(modname, subname, recipeitem, fields) + stairsplus:register_panel(modname, subname, recipeitem, fields) + stairsplus:register_micro(modname, subname, recipeitem, fields) +end + Leave commented out +--]] + + + +-- Leave commented out. Another, possible piece of the puzzle, as to why the placement of +-- stairsplus nodes aren't recorded in the logs. Shelved till I can concentrate on it again. +-- ~ LazyJ + +--ItemStack({name=nodename}):get_definition() +--itemstack ={} +--[[ + local def = itemstack:get_definition() + function minetest.item_place_node(itemstack, placer, pointed_thing, param2) + minetest.log("action", placer:get_player_name() .. " places node " + .. def.name .. " at " .. minetest.pos_to_string(place_to)) + end + Leave commented out +--]] + + +-- Leave commented out +--[[ FIGURE OUT HOW TO GET THE SLABS TO SHOW UP IN THE LOG ON PLACEMENT + + + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + -- If it's being placed on an another similar one, replace it with + -- a full block + local slabpos = nil + local slabnode = nil + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local n0 = minetest.get_node(p0) + local n1 = minetest.get_node(p1) + local param2 = 0 + + local n0_is_upside_down = (n0.name == "snow:slab_" .. subname and + n0.param2 >= 20) + + if n0.name == "snow:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then + slabpos = p0 + slabnode = n0 + elseif n1.name == "snow:slab_" .. subname then + slabpos = p1 + slabnode = n1 + end + if slabpos then + -- Remove the slab at slabpos + minetest.remove_node(slabpos) + -- Make a fake stack of a single item and try to place it + local fakestack = ItemStack(recipeitem) + fakestack:set_count(itemstack:get_count()) + + pointed_thing.above = slabpos + local success + fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + -- If the item was taken from the fake stack, decrement original + if success then + itemstack:set_count(fakestack:get_count()) + -- Else put old node back + else + minetest.set_node(slabpos, slabnode) + end + return itemstack + end + + -- Upside down slabs + if p0.y-1 == p1.y then + -- Turn into full block if pointing at a existing slab + if n0_is_upside_down then + -- Remove the slab at the position of the slab + minetest.remove_node(p0) + -- Make a fake stack of a single item and try to place it + local fakestack = ItemStack(recipeitem) + fakestack:set_count(itemstack:get_count()) + + pointed_thing.above = p0 + local success + fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + -- If the item was taken from the fake stack, decrement original + if success then + itemstack:set_count(fakestack:get_count()) + -- Else put old node back + else + minetest.set_node(p0, n0) + end + return itemstack + end + + -- Place upside down slab + param2 = 20 + end + + -- If pointing at the side of a upside down slab + if n0_is_upside_down and p0.y+1 ~= p1.y then + param2 = 20 + end + + return minetest.item_place(itemstack, placer, pointed_thing, param2) + end + Leave commented out +--]] + + + +--[[ +Below, in the "groups" line there is a "melts" category. Back in the ABMs lua file, melting +code, melts=1 will produce a water_source when the full-sized snow/ice block is melted making +a big, watery mess. melts=2 will produce a water_source only for a moment, then it changes back +to water_flowing and then dries-up and disappears. I gave these stairs/slabs/panels/microblocks +a melts value of 2 instead of 1 because they are not full blocks. + +~ LazyJ +--]] + +-- Default snowblock and ice stairs/slabs/panels/microblocks. + + local ndef = minetest.registered_nodes["default:ice"] + local groups = {} + for k, v in pairs(ndef.groups) do groups[k] = v end + + stairsplus:register_all("moreblocks", "ice", "default:ice", { + description = ndef.description, + paramtype2 = "facedir", + -- Added "icemaker=1" in groups. This ties into the freezing + -- function in the ABMs.lua file. ~ LazyJ + groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1}, + sounds = default.node_sound_glass_defaults(), + tiles = ndef.tiles, + -- Because of the "use_texture_alpha" line, that gives ice transparency, I couldn't combine + -- default ice and default snowblocks in a list like MoreBlocks does. ~ LazyJ + use_texture_alpha = true, + sunlight_propagates = true, + -- This "on_place" line makes placing these nodes recorded in the logs. + -- Useful for investigating griefings and determining ownership + -- BUT these nodes will nolonger auto-rotate into position. ~ LazyJ + + --on_place = minetest.item_place, + + -- The "on_construct" part below, thinking in terms of layers, dirt_with_snow could + -- also double as dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" + or minetest.get_node(pos).name == "default:dirt" then + minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + end + }) +--end + + + local ndef = minetest.registered_nodes["default:snowblock"] + local groups = {} + for k, v in pairs(ndef.groups) do groups[k] = v end + + stairsplus:register_all("moreblocks", "snowblock", "default:snowblock", { + description = ndef.description, + paramtype2 = "facedir", + -- Added "icemaker=1" in groups. This ties into the freezing function + -- in the ABMs.lua file. ~ LazyJ + groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1}, + tiles = ndef.tiles, + sunlight_propagates = true, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.25}, + dig = {name="default_dig_crumbly", gain=0.4}, + dug = {name="default_snow_footstep", gain=0.75}, + place = {name="default_place_node", gain=1.0} + }), + -- This "on_place" line makes placing these nodes recorded in the logs. + -- Useful for investigating griefings and determining ownership + -- BUT these nodes will nolonger auto-rotate into position. ~ LazyJ + + --on_place = minetest.item_place, + + -- The "on_construct" part below, thinking in terms of layers, + -- dirt_with_snow could also double as dirt_with_frost + -- which adds subtlety to the winterscape. ~ LazyJ + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" + or minetest.get_node(pos).name == "default:dirt" then + minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + end + }) + + + +-- Snow stairs/slabs/panels/microblocks. + +local snow_nodes = { + "snow_brick", + "snow_cobble", +} + +for _, name in pairs(snow_nodes) do + local nodename = "snow:"..name + local ndef = minetest.registered_nodes[nodename] + local groups = {} + for k, v in pairs(ndef.groups) do groups[k] = v end + + stairsplus:register_all("moreblocks", name, nodename, { + description = ndef.description, + drop = drop, + groups = {cracky=2, crumbly=2, choppy=2, oddly_breakable_by_hand=2, melts=2, icemaker=1}, + tiles = ndef.tiles, + --paramtype2 = "facedir", + sunlight_propagates = true, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_snow_footstep", gain=0.25}, + dig = {name="default_dig_crumbly", gain=0.4}, + dug = {name="default_snow_footstep", gain=0.75}, + place = {name="default_place_node", gain=1.0} + }), + -- This "on_place" line makes placing these nodes recorded in the logs. + -- Useful for investigating griefings and determining ownership + -- BUT these nodes will nolonger auto-rotate into position. ~ LazyJ + + --on_place = minetest.item_place, + + +-- Some attempts to have both, the recording in the logs of the placing of +-- the stairplus stuff *and* have the auto-rotation work. No luck yet. +-- ~ LazyJ + + --[[ + on_place = function (i, p, t) + minetest.item_place(i, p, t, 0) + minetest.rotate_node(i, p, t) + end, + --]] + --[[ + on_place = function (i, p, t) + minetest.rotate_node(i, p, t, 0) + minetest.item_place(i, p, t) + end, + --]] + + + +-- Picking up were we left off... ~ LazyJ + + -- The "on_construct" part below, thinking in terms of layers, dirt_with_snow could + -- also double as dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" + or minetest.get_node(pos).name == "default:dirt" + then minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + -- Some ideas I've tried. Leaving for future reference till I can figure out a workable solution. ~ LazyJ + --minetest.log("action", sender:get_player_name().." places" ..minetest.get_node(pos).name.. "at" ..minetest.pos_to_string(pos)) + --minetest.log("action", minetest.get_player_name().." places" ..minetest.get_node(pos).name.. "at" ..minetest.pos_to_string(pos)) + --minetest.log("action", "BINGO places "..minetest.get_name().." at "..minetest.pos_to_string(pos)) + --minetest.log("action", minetest.get_player_name().." places "..minetest.get_name().." at "..minetest.pos_to_string(pos)) + --minetest.log("action", placer:get_player_name().." places moreblocks-something at "..minetest.pos_to_string(pos)) + --minetest.log("action", " BINGO places "..minetest.get_pointed_thing().." at "..minetest.pos_to_string(pos)) + --minetest.log("action", "BINGO places moreblocks"..ndef.." at "..minetest.pos_to_string(pos)) + --minetest.log("action", "A pine sapling grows into a Christmas tree at "..minetest.pos_to_string(pos)) + --return minetest.item_place(itemstack, placer, pointed_thing, param2) + --return minetest.item_place(itemstack, pointed_thing, param2) + end, + }) +end + +else -- from clear up at the top, the MoreBlocks check. "Else", if MoreBlocks wasn't found, skip + -- down to here, "return" nothing and "end" this script. ~ LazyJ +return +end diff --git a/textures/character_snow_man.png b/textures/character_snow_man.png new file mode 100644 index 0000000000000000000000000000000000000000..de0f3c1fbea70883f8ceffcc7da2c7e82db859da GIT binary patch literal 1924 zcmV-~2YdL5P)@Pe zrtRJjDUGoE}}a=Zw4qrp3Ai<4=KQp&)M6vToXtEv6#qZDlCaAqfwPfI&tM8!1F zb1AZhMmn3q)ZlK@C0))=?cW?%@yXL9+qMHwpCvq{l8g_NPfNZMA`yb7i>Yb2Z68C^ zIGa!7+wR*BKoo&tfYqZ}n%VoVH-^inrS})AG`Dw|$(W!dIsR{uMh3tzAdZs{K(PSN zUVyG8*)Erc%crI7ttLfN#}8uETPU%S0noJl$Gl6i?D0p*r=erTG@VXBHe=!X(Hjqd zHZIKd^58K4s4%(u-9?_bA>XU!sreDd%UQM@mx7_=E5&R+O}*{YiiJ>wSRfYR+(MP7 zn+=v0XW4qupcyH2U^9pam2ftn;$+4GLnjJj)_(dcEX(53rAu7Dex2{!_&I;tu%UNo zSz8xr*vWOn-n*WkUy%9v1$n%d@VdXd^4?*npZ&OU5fR66J4;%a1=Or%fp8c<^KKqvbwq|A|ltWU6YNC4Y_&qrih5#yLV4a+exyt zd}=Vv4WqgZjsuJHpzHnZ>y5+n!d{6@Hz@#2^Nt2Jzq-eYPz z;4~8m6WJSV02=mwrwtn_<)lvlWHZoeLvuIbbz$cX|8(eD-4m;On0-anNqv zx+Pm%Tbwy_hDVPcaplStZD14Z!dE_@WOw~}0(02|bH~ymxL)$mDozl?G-0-y1g|vH z{{(gWNH?(m3%Y#yvNje9luNL-o@B7qhI|fMtv1kdM%>xYq`T-s}f2OH@qI!fk8qCmsm+t>zm{8Ni%9B2ReFO|xyKikh6WIs$k z?XvX7U~m-7ee_`&&-2M-(g583r`^}#Ap1e`NqWFr3BaW5@2HHu?e+Ql7tcyIogz{( zRyxD4Klu^q$_X^hz;iY^{?V0*0%}gW{{Fw$XQdQg5Mr8;HgzJeLu2*N6c?8fzdijr zJnee>w%6y5>k)(zky0p8c=Z>kIHLCXJ-kly&Fuoc>+Ml)c#wU+^?4Hi3W$_~KnMkN zT_-zRqF^0I1;O;YK)=DIAA}96=~4E*gU~qsKR#E%G%bpSET&}H#PukQ@)3Fe>?br5cks_DMta$~>!B>okUN?UkdNIHAC2iVOP z3-ib6m_DXyA_74ak;Bbq!K! zgD_BNnnuUnKqu5nR`&n9t&e5pB;0APi&18Jo<5H9P30>W#e&4Xf#{tXhFe zxt18ooD|G}OhB6vYeKBEzaF$$eb%3|kr9pB3&N8bvQj@$8w z;s_N-=!Qw5kS7QN#Ly8DViD5+-BV%}6Qhmw64e~GunZbe$CaP|;1qEz-2UscfwqHs zK(}0$mS)*)g_xGc;=&w35K((oCuQnbDU)5tVP+;n;Jc(!22RVRTq=?>b*jY-4_>^U zECBs*`Ka;>AAW;;es*lzemXaP`9q%n0000< KMNUMnLSTZW@U_hV literal 0 HcmV?d00001 diff --git a/textures/character_snow_man_preview.png b/textures/character_snow_man_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6abe23e734cf724c20deed3ee8c2199aaa1d07 GIT binary patch literal 28563 zcmY&fWmHvNv^_WImhJ}W?z$k2gdp9W(w!Gj5v3cEkQ8a@E~UFW6d^K6CkPq_en5GpKH4Fb8XR!|!nf zNRvfqy&TFgpNQQP3BJw}ExJXD%Y~pyk%|mcK#;QEN5~#QsPgGmjRIKVElM0=xDT1h z6O==P_VO-fsM<>2yP0Y)Ks3L>b+B_1%0jV@d$oX_NtoaL^_L^g{%h}O@DTn5I>6eL zVRa*<|14E;!*1Ch-sihq>P34SlhrZU(O5bOPK^np$-$rNBjT?11a#q-8-_99 zI$Xv*@6O9>=3hjxMMqMAvcIQ+$qD5R9SkLSCc86GiJFlzty{2;aMk!I^)L|CK(|L( zVNHl$RSkIq+uph5U}C(|MCWTU-?`HmeiUXSctM^_1MZ+WBCU}4QYB=|ouE|1z9Ql!^8fitf#krm5~oO%WGaiK9ebyi@J z_wztg3>bYw_@5mOxTU;W4|(Cu;9f?@7QxETPKtG0 z$$?x!yb#_tVJmV{!AKIJNKHfUmPDgb)2va?Oa?A6XR2$%^+CcBRc@JAmHAT`K&++= ztMq+`qWl^8j&BSNsqhvI=b*!aVh7~w>q{Xl4q97(^Z6gNqf@rHzTfx0g5^RKXm#-D z6{v*;CI|nRrfN{$^RWN-fZ%<|aFkA9SPsNP$VzAhLp9GKIwB~m&6CdUA=zcJ(ySz= zzmOPI9POyMGo#;s+39wEk_eX}$QQ3h121|}S;L2A` z?k5;SUT31a%SS`J=adB{-5bS*!e5t-F1jrVA<*qHZawU5js}EBeA2Y`kYIaPy@Bqh z%WM1k<<5UfV0RyNKgu6Zznsw=nUW)bhy3_>PJH6^#hJeXkWdbKyE@OR(p!v4f`OgK6sUw{Xm=mq*!8qXHyHBnN<#SPtiy>sftE>ioo%=~$Yp zfx}6UkdNAlx|y}^AXx?ZqsT17z!1N#G)@m%OPNcQ&8M(m)Y^8M!5kzP(Wmmk6cFLi zt+!$BwFruhw=|LDzTh9fGn!ap{>=)g3#P(vz6bxDhO0M?31neNy=J)p!z0^F+Puu- zWIkVHFkclvX*WOk7}Eq$kA|F?NL?k1-`NHR2R;?0m`6MQ4HigDJ@Cz>VxIHo^S>yKwHolhWczI;Q6F0J) z-#h*!*0v$W9U`bMGzfMb4<1=E4=sY8pS=9z3-0L7BiKL#aAGy1m;rHdWu5{Pw3l3i zgQvVc4*2g16#9`2GTOfVK_!!0{UnJh@9~7*j&n}jsxj&zqCuo@6sLCVT@K(HUf6uwBt3t4@22EYjvt{``VGY)M>ruc;LAE1o+0G zoRgVh7|wzDw-gEbXe?v*9l2urT*nmXy6M2~?G-7&_l$4H4k^Gkz zV47RldFT!#J~g*L{w99@gY7ofAZ5ZLFH-khW#F=Q+@oKs8de)hr!C3^ai?$(4>r0K z=Y7M8mfoDXdBg_^8coh;ltYoTWM8nXsa$AZT*1Fi`InDltQk5lZHtaPU%Mu$!~j@+ zO&;)zVly7S;xpyLmYIDoiJ=|wVVUUCgyiEiQb~Pj8wy>Kyjt|{&)chmKkQqqTdbo( zvBCv07hGwrBol5Fx4PH3j=7F2stoU}*xKR8%BvTT!x}D@tsCTJkX5C&r!yfWs$>N} z06~C`2K3kYO^$rbDH(FiRWa+`+g#;xK(lXim@di2YV+$f>GY|8XHkin(z(8YY9?#2TmJ?$?Y}ss7trb*rb~ATfqFz-Ec}=CEKcZ%N?%qU6eK%#!-Yn0DF1OYNF)Zv zA2X%~@8*L@g!&7BV)ep0fV)t|qkeLivZdFquT|VfZJqvPICiz>@sUlB-|WpH5_NdY zbk(i>zwQ|Z)rr#_h*wTbM2)}w#Y8Of>YKK_r~q$AUvcI!G*;}2Yp-Ny*WIYj&HYT| z{znAwVwNXmhKbSEC~b-N&`MAj7p zxm`CKrn|@phd-Ns&Y?(jPn?J0h@43DdbZ2c&2F~!zZe^8-%k%99r$C~r6fXlMtb0Ipu9K>=X8Q7=j4`7C zC4Z>o)Jgz?u(C`V&spO|f0?ru`|rLl_Fj*B`6$^xCn6~4`8;z}8lEA{d)eJjt@h}8 z%C+tGooBJZ%aC&QPWyh^bVO$RI_6{C&|SRqDKg|_Hd*o6|=N!u0XIle6OwSi@{ zu$`3;HS=y$s%b4>g~pYOIoo%E;_pdy_Zs_)K6=luwG%TMUNug>Us1>* zI*h4C?m}&L0=yea7T$UrXmE*7OD~7>)A{cn-}&i(Jd-#70+Gn26Vb>9BG3hXz(jJe zQ~R*i73^fiVs6eLxw4T&&Id_LER9;c9@yvHIQ#{V_-5)|iT4~2&nS`{gi59!ySwC) zs@PMgC-pz2bQSnZD!l61Gn)$GeL4PToh7FtT{YZ!w`#I1j?_*TzYS0e0topDn-uF6mq{?lTV4^F$6h}YYRAA2BQur8=9{?I{yDDG-$ zNML04`5>+Ig(j9ETi2DL(EwoyJZg|vGxG{+9L zK?6~_HOnENOo%Goaof3GS!UX9U+bL3O5()VoK%iwjFq-Lbxk8xHrTrpOOOlBV78h^ z5-j0=ZZN(&3aOA6Fo6VWhGN0qC!#?L9VgC=*T)?7)c@=tUF-F^RjVhD^BTx=HL0o3 zPF|d!2zZxVUAb-Hh>3$Li66=S15&IzLGQ^?P5M+0XGZLv?Snu;NIYd~^|#HO@P@R2 z92w~ki@$nbwK`nbjqv7I%<;(GeGarUObxn!W*CqE{MozSfUZ-<#;{URI8XcvMA zsVv}=QUkfJdo0gZGp9S0&3d80bOP!tQP4-lD_7WerLon|E0jDBO;v3!-CMH-zNg-J z{Z$|-Bgg(A-;p8|(%|FifqIi7A!-iY35e%WAwHg^wIw>c()C5kFKTxefH(}j3%*Hj z@3hu3U>Dzfx5o2?(wPr6S=)B92B$3#SKUI=Uh%UOFd+n2)*Yg0yLnrb>!8KBr1Z6u z^8KSBfw=eWupmaOR5^2Ru!6thb5OJj*De%KtCbN+c>i5eg0zRMU7-|nQJ=_m`qS(z zxRDNevT%RX1!kF8=ElBZSeQN#Z4N%?1=2?l8@NjFe?qV&e;vbH$4`EAr*^Szw`0JsNuV8mrhQzl9 z`%{GZiotU$jg=z_EWO>wTBA(N#TK34D;hn_&x^I8ILx|PXWuf$Bm|$8JUq>e=1}$= zaM=uthTtrSW*99ce=ML-2MGSy&UnAUstp_*BuqRO>K;*Alzu+=-hC0EhtkMsDE%Oe zw60^v-nMsiIsJInf~%y>ui}OTxLJw>tbcgJSN<^4qdI|#r1Zx>_ms%f!f*1L7LNw? zBBiaqT!XrdWz_CIqF8xjyNiP~pz$7b51{-)J^e>6uTd14tc#AldpkdPOW93Ihh9aQ z@!iegh6#%;NK$jn z5d1m%;t5#}kb*C;0vPW;GmP40<~ z?QzRokw}1lt}*b3o+<0aiH3r(>t4fC^y8`)ZwgHoAbftaDn-+@_!K}f@l0GTSL2r- zS2yB%CP4%rv@CsedDpI2d`B$tYGchTnj~3cyjOqMlw7e&dKWx!ex?*nrG|U+j+5XZ zP?ZwlmQifHvA+-hB}qK0yfF;;cRVXydRCu0-v0&mwcmOI!#C5~p9Qxdci%U2|DXBX z?6zdy$h}ynN{kwfQI!5PPwavysnTNlQ3-Br$T}LFZY-nBJ(E|v5Qx)yO}NXAhq=aZ zNN+8jxSK;MEjF1=#`zFPl12l$01HB1UCXvXg7g*k&{Kmm6}R4Tm-jcd$kU@@3lw=P zf+@+CaZRuf%v6SgKfYtB;7}MR^30qcF2$(HWwt#QK?=BMGh-Y{XlyHg9F;y&Ue;_A z-Knri;*xHk`OGuvD17rEw67xw(L!k5VC!`{%>b=j+5qOM<0uA<7br#!jPKGM&*sh86LsvU`$$Rup z%(Us7~QccekR*S>FKn47T*uI8U#=i<#M+)N&2>$A@2Wnd5$)5+kMr(h1y^Kd%abvm5;oWOqGU=f)S5 z)$4S|uTY=!yMejB>Z$RqNcnWkjbOeUsfff06gGZuza71AwtqrjN7?l9r-qyZm}P2g z2G>9Lj6P?**ihHYM&2+-C+9XLw&c2xuNEZURPPu0HSd3oU^>5ReNa&$a zP-ay65Y~&n!uk?e6_H2DD^!s({Fbib)%GfwvCZ5IH@rpyF+5COZ)~ZngR0`=LJf-(x)L*itk{ zbv^R=wG`_r$qNxMD}|xC`%S93Sv5vhvmHRk4=RFL&8r!H{*Yhtj`~&n>yia_h43@2bP$Q5HrXl&cp;Y*+EY$eTTl%GagdizaX2*0yRee;Z zysmW26V%sV+8?#~cxGChXu@T@X9jgjqj-JoYG6B<%;j0{k|>zQ7`#Gm;?!-5G?98g_|$L#x@x!Y># zELSV|t^sX`dN_87Ur)qhdcZ5Bt8~&P>oPB+Tjlox!G5bh7mke8^FolW;Zd!N)MHei z;jaExH9~uodxnBE@&IgUq`qCeU+a{IKi~Wdyz6Tj?|0SpK~0++oqd9=geXc!-f%JCpQH^Sex*Yu< zI}Y{VdN?tZ53I-##X>zCElaUJeecInf9Nz3>1F#SU8C%+^eIO_c>?vv6YcM380tt* zqmTV}jn}0p;=MEb71i(9)FNxa=seQ(`+}L@A(I(JK5W%;l689mjeo3D)c#|ZMHjpO z-V7oy`hWW;b9^@P# z0AvWrexlPTcW8_uWC{*i5KyfscGq255bQWv#yOjiz?o^XBGA`e^4b11J5qZ_nIh9t z7B2_ckC2+YEvD9!%JUk%sSIgXiP<|Fj|~bQx^W)asZO~|3HqmQ_oU{o@h19Le%MgL z*Fe-HW)99~xhemS0-of4FtP_23l956_2J_KDi=eAt zxy|2zxB2LVH>oIAImu6id0Oq~CqsQ^XBjv?X~cFO54}Rid$Y*pyOOl;9OlujN0gVp z>TZXcjH=&Vw{d6)OwtsqpG>p_PQ)0E{d~8WAJ4VFEV>Yw zE1kMSb9Qc5O|nrvsmb>-9{4WR6%FKnXwXKPbE&CF<`B9$N2CMtpR2H+n>mga-ipjv zFv(;*hF1+CzB!(dVmjnbVRdvxqzNT(Og@>up5aN*&CgY3+7BIq&4`FDe8*CbDxYQaWA8*e4QY?&0ro;$~1BH!>1c1WGZEs9J?Lx3@uesfeE4v6J-AnrJi=mHe4y?RrrpEa!eDxPQzzqMs#0xye(rj+6Nce{RqlN; zs~ub-TD8#O&?;>@vnNX1<9AeJfiiTtr3r7jI%NW<`RwXOW;p^INE`0(()z(b?6~t_ zO)=ocNb>W1r(eg)r2b0;Wj6Je+nBoNAIbUM-JFt29Mz?YtXywV9#{huCtT=^h+->dd{lV~IPaod;Jq~PVYzv`gg zM|75XgtaKCV4M@Q<<1|LQ9R|~!$SHCt<;z=`UznINnUR`l_HfJjV z647Nty_~G}ouw!p-b5?2M`NN=CSIX4NM)4vf1pTg5)eqZ1a{anEwH2AvM5u$ms-Zy zp<~GYFW^kY0aW)7vI_&L01I_~3`lV|!Kq;9Hh!*zVRhg~k=KPCu%&-2l3ChL6!7Z_ zDW-hgydR|a?%OFhyvD6I(o8mrf7LOrhOW`U)p%`S%m+!qnfh&bRE)m54!Vb9dh_6v zT05y=P^JCWOl;$ayZrLEeII|-6tc!ClZr8Qy)67qT8H5+DWaDx`|p}8g)#hXj%dFX zBv|l(U6lANtTdT(c94`G#UqmHyD19SX83P4pT7?PYn&<*?p$%IM9o9{w;WOh?qsKf zZ@rH%YN=lZpmd4{Lr~kv+a#B;1Z(CiT|MMJO+~VQT7nw&Pyew}7a!BxcS7+a0F%#m ze6)B`d4v+V3KCveH8wEEiG_T`OrX-F@{DM!kP2l_aq1Tx%liybVAjlX8h}&$iKhT{ z)W~M_oI%fpTl%Y&ztdh8{goFa*4nyQ>$t(aTtpiQhrW1vyn@0b6pEStWdmwAyN6EJ zVmbl_^{7XvwCJJj`Xgi=Yt$)_euh6aDq_m1tJfLUFj1DI`lqd6s>DMWveNrdowxM( zb~4t3+&a)+t=IwB`^JJ>j~=)CbW0XKFaB&mBc=3xR`1AfhKC(!PEiRC%$c|Zv5WZ# zcu(8ACUvP)x|8WnJib(v4F7?IY58maLA6j+UoS@XMz0B41ePtmV9=`=CI}+{q;8{2`1K1gI zFf)Ufcgvp|YFzR-@@dmNhFAPCcWzqDvQVe!6`ckfy}FMJiKgL>H%5tYthFY&pDgPO7NbM?DrJ3de4{wqB^mM|~Yfi0NtLB8KAGoHS>p^5}F{ z4xv|C8`SfA^+TW@R|+?+%)u{FN)-hOv~!GiKhn`M?Q<9;K{N5)L}naJ`;}n=GtD*i z_2Qy(wkO1W0lewi(yP-ImdMM(k2bc7E&x@%iVvXzG_e*YGBF48OzyFQVE95)C#ZQp z;oCunmT$JWqK`uqtEf;Oh8NK6>LgKNDJh>K^1{3J1MYL#YY$i3E$V&AU~JP z*KxcPVPqZl{2tBi-{e$&hE36CyqvjRFni*dY4SP>PPjPOVSa5%e^S+?qi6vYLBNB{ zb)pMmNxR8Dhe*!+N)hNFa;V1nVEFfs7TEv44#oeDQ#{8i3)4SQc%Pa;HMcsB59 z{9oYlh1U7);)Tc6lI)*o^()bG`;2Nz1?r-Ru!f{I$88$pTDk*vh&hDd>KHYY58Q|JmOBa=w%7qZ$+X&|j53u(tkT9j=#X zi5_H07TFP=g7}55H|(v`e0~=ZJp_EC0RAjPi`<9Nb-;>{JUTd0+Uy%JNj;f_75V!W zP6};dP!#^AOdHTB?fl(83cFEd+o?Yi=*Co(UbX zp(K>X(3hhk73^Ma!Adhmhb(ZWEq4uZj`l#?4O!k;gi zu$f+8-yflQn0+WuYunM}E>dWZ?)jAqJ;6r`Hj{99^^*BK=saj_oqwY`cXVU_uj6_M z#6i6@bM^$u?r9;CUd<0V?76^R$!yri3wT7>TQb1*){-!Rbh_!KThdvwNl=0)b7tux zY!wl7vRjnrKl`hkE3Z8Cz1k1o&Q3YGFsQKhGd$-ytzS@#VJQdzG)Rm1P6+2FA6=32$UG6VP5KQ&e z=vvH<<3Yw4?40gzAhkaCoY3z3MRm{SjRa3n;<{u2N~I*39O953BlS0QFHaae(lOZAklK)2 zO{s0O2K`d1qO5cJzsjKR_#2NR(|i!U&6~%O)&WSX9rbW{BP$CvN|m(yd_*5q2Mk0_&##&F`7#+JB3kWqpuq5d%%@7Cy6P1 z0yaxUoDofZm)kx6Bt9hU3ht;vwn|W9iuT3f{e0}##Ea=$^M<&&d@^=%CGo_rYC~AjH<8iP>_0V z1t`7+Pv9`nSnE;b1$`%U%GDi{TL^s}CvFdZo5$qb$u!IRz6hRTrGY9wtZ58<9VDXi z*(GM|a)`qma3j_^P{1lhq2rPdVBR!9stRj4-joG`v{&6TkhR&~%C|p{^MKDgp*ln! zA-WcSAp_N6?>b(b_UG+f5Y(0e>{g(R(5CnOkQqY!%eG}5y4gI@>Co)!L@8Gsa};j} zUS8BVs9SRID#{BNB)!*SyO4=^D_)q3k3Bm~w0(~&N2*df7Rc;)viDnKYnGi^xjv!I zsoyJ@dcT8WlSWAsZVk#X8qv-WMTF|l`kIWQyen3(#P@oieW-Wk5gn7EsbRw~g*^ow z*#{HZPcOhnQ~T%Olh%!WmThqTzMJ>Ow=^gb^0OHHp~K^`z@2tSokGhOJZ4<6&6x^9 zR*J`$4oSj+&`ZbUW%J+;^02bW-^mPa$dKEU!!;N@G2obq^Uh~xNdgl z!_6LV%66A?Z>gGW<<~Ppc2ac zG0au7Qe^@MredHxn*byhX>6<`$m$6{itwXZG~~tmZg)1 zw4kp$+4@Nh{cV1X6XfROY&4(rnRU%SPDL{P-^z$1RJdg=2JGdFx?dDN3*8c1rX(3r zE+CoYt_(D|iL{_LOltF;5GW^he-aUPli4Ue3V0OWR7+yr7fuSy`2V5|^(1Yt#Pa-M z<7hjEvm0f&^7rjNzAo3yU<25bfZmT-uZL+?S#3K`mi2^OVU0v4gezG8x5{56*ym)S zOx3zZmmr?Q3|Hs{yv&;^NomM}C{FcqDJtj#*A1M+PW7u4LT_KZ=0`!TioB~d>UL~?F07z&zeZ3ZFTXfGrtAn3?37*Lt+A?g;`oyvtq;U% zeF6pcIthYknf9Om`Q|eoPeng(PtZWD6V&ESa&3px%<+0hwGjD1zpiLZsgCf=# z3;WFRvtG0E>4tIRb?{ml&^+O6sFhJ)eN@`}=*nHZRci5FIaH!NT;jX3(nu!0R)Rd4 z{lUP!2VCSiKN6#as-1IpWXQz^t(m<5P$rxAJN}v4u7~h^S;-W2Qf$GdX`0Mfw7BA4 z(mOCwBlDil5IU&nG+vKuo@+h%bhfJzD11_0sk)rk8qf|%zb>Uq8EI4@S{8||WNWH? z+4Y_$)ZI!8^pbhA56Ws#Ty8-n1-{OIF%AED%P|e7S#(9Kk3Y4bY^SC#MunpNg``x5 zQRJXS|A?}#8|vnry*=;_rfD(!p7sG5)z$Da2VxXI}AEg6Iw08#+$XqiRbqalJO*$6G%z|Ggd45p$GRX$s@fu+Bx3g@K~-oy{;>}HQXS|is_pC zhMNi`sG{xG??}GLu;Odm(Qv3h6gOXN49pg3kw7g;a?jV7N%GHJ!OgOSXD zqIabj#oa~KWYcVD-SA@O>ZXAiGBr27d<3r*joDO!(l^ZFea-q`m{HRcX_Llk=iq5i zGN?aN;-<7>h}hwJz6s3(0^Ep!2)Ox54v+ACUk?YPqlNn=`SG98Z08=nNykB=CK#!D z5$X6vc4T#=-tPTH6LzkTeA{RUdhP{1q)X_T-Nz7QeLSf<*;B+v4Iz=_nIJsJEBsxv z&zvZWiy&>3Cz3hIgE>Bt(ikJW=8gT9R}6}#I?Ti>_1ZUW$CPYrJjK$o6(pnTkPa2S z7QI*mG5kK~NspuwGst!+wa|}o2W8g7@9ajD$9lbfH0jlBGLh2MgCWA%UtpZcCKNbE zqka~Db`3MAn+;e$coUejHSHwlYi$TT*Gf$vi+tE1P5`^k$L{!H4l=e{pOBMa#skk#~l`i`=?mEhA_bktD5t zP+-I*Bv^b{6y%R_mv|%8gd5fYc`O3%NgrpgNg6(z9028i#d+Z>A{mZ8&E*^x;68hI zUZ7TmuJE0Z=7DC6B$VOyqQ4pfYU2wbW}X1 zG-c0_6#gurQ+#{9K@2=r(PJ9K&xO%Yp}hai29m&5-`WcV{Q73tYuu&}d@1OB#emrB z2G|Iw)FK(MBz-c)-ga}1yQYNWj?2&xuN#%RD%9_lI`%UIQ+deK@H+l{!Lcy<%agy} zMjziX=6L2Xs=@;rzutxRP#C^nUi_>3IJOHz4zVNCNYSqWq0jXt z;9-O>u(v~AB{pXoka5VpVv8^bbgE~(R=zo*dfbr1dA#k^^k<))$}yc?i$+|CSBw{r z0kdTlSvj+Ym<#*o!0O8D+Snet$;h8Z?(>TI2Rv0JHa=3NXHNz91yuq{ZbUt`NR2 zj2-Nms-hG#lw%3~}3jS>_$R_o`mr`eokUmAb#NXA~*TGT$O7 z%p@cf!44abfliPCKy1$0)Le!obgyHHE+{l_zJsLHwHM!b;Yn629jV8s$GC@M?QU9l zzJbb46+gX`vp32isffLD+`r~rF{o3VD)%tYN0vMkd#v|dJ~ec?>&-V%+kRdKLgZ60 zQ5pUN(lcq^{F2+8PDzgw!4&~hfAY71O)Pg-0b6$lY&Iy1-G=gdHeDUFq5ME2kuF>L z!s^Tx^_B&EXLURSIOk((y!dkY<(}{c?eR$LIGHrj{2_7Q)WAnH%{0SQ-f|v~fD!%N zg3eUNOd}^28|g-wYLePpfNz03^*Rgrr$fvZm_xrjUE}W4f`{V@SfNbn=j$)(ovR(D z^QnD9s7gAx4MR!PK$r@6re&F}cBzRp0}BZ?n4lrz5ciO9o=B23_eyp@!_rtZD-SCj zG@dekIQ|j0kwcWtpW2n9U1S>NiiUFV7{TTz%?adLK!UwvRS|67vvgvP z1+OU(?c(6JDvYFv=djgo8k@0|qsz30Qw9Q42ue4XbzF1`_q@Jjs6TZduRvHAK*jz+;Y4`i%VygM7YAkb87YJ^ImX#Yra;`-9!_4s&5f z;RQuwltU5&V<_^%;jspk!8l;3VI zZ3hkDQz(ZuGp`U@vyo!s3z`wV^6nrR>sQqWXAL&pSk$yv84qS}!b42H24N1_iCONr zsL)Pvc)GvTNz$KFb6ieUNP~PUVwRIas&hvkJ)Uu9Q58l)-zN?>)hd=pP;JEuJE>Tc0sNF=JoasBctq)N#rb|9q&=0b zNW40~k#Sg>y!Di#EY-i2kfn|uiCjS%_sQL$(+xE#%>F&po&C8RNXHj0P z7}O)=o_Y@{rAya`ea}3Y9A6o=iFpmSZ1ChaK@R$In1FUG-rlrTW!FnYpjQ~{fdvFBO}w#iGWWt*oWo|Y=W3;F zFrwbHG(&&2bWjXECnQC6n)p=%p;RGH2~Cv$m@zz3 z*22(F2JG4fffdQ!ymr=62XQ)f=%m1koLnF?gUj38I1j5d%#SDcC%0qlbC)Z1|OvEz2Fh7Mhh$`BiHEqiz9x%~Nq zJ85rN+mJ&Lp=Vp0Oo$nGy?yCxh0VTv%$>Vi;djzal}S&KbjHlzjIZ85mngflF#WG* zd~v;_1Qrt1)?bc#4c@bM5V2Kj=Kf29N8tP+EIL(W2-wZXPN4|73nq;q3l?MSo4xO= zfPJJiJ#LMLB~l0-{mUDTig2`+ddsr^nfSh2sATy(0XTz)F>?5YzhP1dbVXb6xF)UrBl5auF)Tj3nM4*fPqce2^lDwKFTM z#+G}`iOxK(To-+3;-9DXV@a@{XEHWJ_uhI>dp)GGjVEN(Ki@^!Tc8!F^BP4tP*=U6 ztz`8}&jXHXtp`EfJWz?I%xsJPg$SEUe65ecE1k8@ICg7*Rym>8tEob*qD2Oxzm9&_ zk-ngQ45DP6t*Y5s-^II4b4D(tvGOXqFSrkFd#!$BxuDZhSGXNz|7EuZC+ieBFSv z`6k!Hb7#sl$U!nM7%&M=1V!{lBNnw9(hHoB+N{yqnSvLd)sUgEox`nvG+0q=`GjNH z`VGI+6Q%2nuwN$y2ou^_-P^bnSoGlTQ9D`F_MuwxYjvjnT|5#4=@pOug|KSS+T`DK zmp(uCFdW(+8qr8IO~a!?GU~=M(mp>qeI?eGOLQV>dW!5?UeY}Nl;!m6Ii?HTBi;C~ zB~OOYmT=n2+sfnhutn38Xdy$f!`Z`vxQFH=90ypU#t{jf<+4-(cqT8>zYD!Gf9mS= z7eLI8EXqixRb;p{#vBK3fn`UcFd=Kvnf(KXOrBJMb!JrG@zZep+PBz|xPw&;@EkTL zT=3XPAh+)um+w)cET3N;!Lsh@BrI#5VhE=odF^=IZAf{=$LNjJeewH;=f6JijN&H< zzK5@hWUzEJf34sOUn$&}KKw8dMK}cxTD(`}s78E<{8sm0AF*$^1@%;D)s3Q3EwwqN zu8%&t7A9FVSHMHInCC!L-5M7TkY9forZFTPA@BHyIAzd?c6j@FyrOvOJN5~?GN)Zu z%B)U@kxhej7Y|B?PUVSr7fL~$ka80DSW4YFg!Cn(7>nH|Z@QIHU&nmtt$zcm2h`iA>J1yx?d9wZ$*gpyZ0qn#2b1hU0>JbS!@v;hYj2_ie)C zz8JQ&xh7GLn1tf)$UmAxT&o{{s{b8^ONQkGi(d34p_HX`vjss(Mkyd^%|3wl2h58m)4l3vr_$GCt2c&9 zOvx~Rz7Kh!CHW|upAK=DVU8pDcqam1^q_&ioopb6sEtG@#`rxyL7EfO~sUtCBz2(ytUz(qSX#O+HP!)0zpJzDX0lfQaC~-flK)Y8C6k^ z6uXCt>r3vl8xsL_$?*ST0SQcT)+uhf*6IsnzV+&8a{G~LTy&}|q z8`@Roe;dSE7D&7cZCr@Z3Uv}mb~sSx%2JoSff4#^;N=TRus~xru~;<_{>w^Cgg-*9 z3ojvydZXxOD27H-o$hlml9x5ft!PaDbl?}ak@I-x!biMR$PNuDlJ7sd*OWt<_>`K$ zT3AL&_Cq6+RwWt{YVJx*I0(>)kbGFk$0zkC0&Y%zlyqZIJ7LAJcU^V3F_@N=`Yg2b zypYu{;BZ8%gQ+-Fr6xCKVisi8@J)@NufE$O^+aI^dy&JfXf`btI3P*4)xI%qQ7Bz* zA5FBEz_n35bAc-k?(hLig;&iNU$St^tl7hn@yQE?*xJ8qb`&N~$Zp(>az` zesvWzh{14eeBuR1^egEMceBX7R}i~m8!V>`OwY&1nJimle=vHY0pCK{KkY}Xhm_ec=!eOdQ&_HvMfy9AQLh37 zO@AY$4<_o!cth%|RleqyQ$)eC3U5&$Y-E&=_@BDYGAgbvO4GNhkl^kbB)Gd5N$_BS z;O_2D0YwN2uE7ZqEFbRffk5FFJXnyR!QH05?wQryYi91>T6bMJd++n^bI9f@h(H&gBLub`Z!w@Iyibfk$8>{+c)KeLN=9)P*e-A>bUUA6<+E_V z_1oSqv`m^wC#^Eub%adTlh-DMemN%Dn(DYH&YW|nCA%!Qb~vWx3oc4%$t^(voM(Pr z2l4KXAKpZNYk$t;56Z8~N<+VUxi0th$Q{E=_@g2-{3j(F9+)X8?K3ug?oc3~#HPWK zBTa!8a7xE@P4PRz>(-zP73mpVWyIW84S0dnOP)p?+P;ZnUTCWoomDW1?4k1!?nAURqT`eNZ1>RZA| z^s?7-poKrzIy8R&ULyc<`c_1;Z(7wkm){?<6c?NqK&0x!z^+n1etQJU=q4ajSHuqg0N%cxw+lDlq3pPCX^7xKFMgMe(A@_aEmW54^VN?kpc$@w@Ge5Y1F{OXN0yZf8RoUT_x&g!LdFp2g z!TMf-gS?9fF(?bo2uoh>{@WnZ2#qkktOc-&dij}PzGG;P2Q~@(FkqHeZ2C=gGQR42t&K9rK9?W5EW}KKPz`)F8Af(4+ zqIOU%O-flBlAu-8_Tjmg`Ofn9>7HL^ndLx#(z`bg#*SiJTKH*L7tWG-Pf#oG!i*90 zo0kSJtl{}7LOoF>4-8hQyAz>Ak?*M)(;#k{o9jts@o`?it;|qdPlT((t1AKFP;F2f zZ^cES-rO!D&Oh9-if9i#zX~&;rW@Lst#2+@DQ7dgi*9LM-=8NNy@11bri}-h!s9%M z5!jDYwuh@YZ+_J?8v%vVDZvV-E!|EP3bbwcADf%fl&%JkdSszvN zdi`k}zW8vXV5s2+-{)3x@_E%J*--gXIBFi#Wq6^&tLlz~bF&_p(`Y2o`Q>jX$n?}W z9;lAP)KK%G&s6ZQ;V*@WLU-gQVbY%tdwqY^S(5MU*ZUAPPkoGVh1rj4xX4y}HTPAYc4=3q#hHRh#KVD_?EG83 z1^a~17*{({UBmZ9U2M?ntap7c~d=@z0%vH1ChisQ62UmT-)AP^eOl z+{pMy^p=9T?cU_VEhCj|nS&VGd$mcn)~`F$EKf=8!VO}DK^c#lmj)Be0jab`E#wt9 zVyQl_Lo;=}ty&EJt{;d7%+-v>QH3sWA2M8Pcx7P3w4I1ii?smM@Hlooy3#Ffb0`Y;8Io%Of^EyWs<{KO~!gMz>JPht8! z+pxP&cw6{imfgJ2l$cUpS7-evRsrdVh`{?p)EA8@S$>QHSAgw2KgDnp)dIg4IZ=|; zP2U+$ICVc|33bxwQmgxJ5k())JQBX+*s2%;JZJ_cV{jH=kN1h%>g_6 zugRoJ6mV;4)q=anDe8|`GQ>1-)TrF=&< z5y5$^F0j9|(fyLL->3?=<>#7yf`YZ=06g)zk_UQ3?x_n$Z@Qi2ixv&u%4(HO);#{^ zwCH6KWCy8sG=I|Auluqdy6++Ix-!y5@LRK&UTp4Zx0HNN4f#11cQQ8=_v1So&m)Q& zS1T1IYY7A_NLB)V|Glb`&?D=fc|4S7nw6I{^dTETBIw4~TD2IuVKS zpFXpFWhT3}v$^s7ERkQtwgZPP)Jkbrx9|QYbbnL!B$Q_%jqnXB%!t)8N?N@e+X=fJ z%RZzCXJiLgl51R%Do-YDGOTZ%7@dZL5dZn6J+PuVy}e3@4RRf z+OVs!U-;7-H{?p=8Wl>760cFpw`>uAzG{i&M3g0qlpNcn4_nN(&2;}#K)zptEBnQo z0QT!yl-cV?0B2vZ$uDqmSm+m8|I%Y(PZYGWs^$b=BhDuq{|rs<_NXRv;4V*W+wUxB zE#SotO4?bwywG2uAm!w16$2uJzo(hlDjz#4<8eXWRhZ*7+RKHpj9fGidN)si6rkH( z=94J5g+R|AcPxSR(RBx4vTiicm}P8mL^nPhUUY%_&u>~>Y8oPnK@$At=hp#4gb1T7 zZ_fpFdRWl)qDDDt#v6WXD8uOo^OsXWN>@b{=rMMca~IE@h^l@AVs9>L)r11bJ1GPH}n&VjEA>Y$WVx_6e#rb`fw zNgi+Fo$*E9OtkH~ZK438V<{O2P6ff<%fsy677uQO2c3LK9xi0}FMp@%eV_IO$>iTj z(mX7N83x8s=G*EOeJ_#0uly<9Fv;7z1uPQ^{{D*8L+NBU(Aw&HnIn@dJ-*^eE|$0< zWG@vES7=n^;Qby-1oH)v#ALzfz+0lyHn3K$$s*Dw0fO_g9j-}*P-~~}T;B4alz(te zD?|C7!MI}Df~G^`u)UVv?&>{!Fv8c$e2cazFMcY%GtaORNL67m?vWM)Onl40fQ~j7 zv|O>JD;&`$$I>%yy)MD*H$BaSVaY=_Fc@ds(Ull*tcuD%Uv;zEYG1rVDPfE)a-ICc z*GS$0lL>9-bfuhuw|MmwJp^ySPB-VbtW0e5j2@Ew!@cQ)tiDPDJwiR^kJ6zm;(=siEjrG-ZAoI6#oKG{ScYI64gjFaly4NoJh=o zX1W)agU&4d_3wZXN2oDjDq{3B+Xyf5&ns019g_9%%JtE^2qegc^^54`h4vIHgvs#z zNnSAuQtbi9tQ~r?V(;U_s@8^|p8cnpl8_G9iLj<){mWi$v7=nF@#R)EO$XAsobJO` z8A2!HpzGZLwoG|OaA!MzAxUs|O(3x&cL;qx+_vI&J|0LBl~f%iHf9_Cpu6wzUGBq} zXjfCO4-pC4frs(zy-l*Jf1czPm#KH#@xTfb0Ta$MqNE``@f2mfcP`7NOEy|Lr%?T& zr0|RWn11)5;J{chj5pbBls;Hei+Hef^83J!j6g9}Dxb$S*zDnbs*Xh%Yv6R;VoD<8;Dt7`IZcfi=ji?qv&3%(%qbAHc! zA3!WCbNd1+XE4DcAJ|Z~K4ydaqFT;$#yzjjZ$>E8$9hPGCP8IXR}kY|yhSeyBIGT& z3Zi(Mya+`#n6_yOHr){qf{b`g5A2(z^2IZtHs?i@8T1+eb$yS_7N0{mK?iG28a#CkcWV8k4Zi(8hhv*?lb zQ6~Xra;mAc1y`$|x`l=|XNqj8TC&2&CWwHMMjIYSlRoEn2NL@i7*n!K86o>*-Ay*$ zXGRlbv97U$diyUh3$?RgQmQKAf|ON z{i2YU#kEz!(g^7!t=Y=A3i9l))J3 zTO*sIZZ^y@&mQ(4nt~6~4^R!VI)`e2H@?*`vkqcg^ShbLnIz{=g zqTaTcjpN19{DB|(x+=~;$DxseBdi~o{5WXZi^bdi@?P@CF>Wo%M-$d9>NU!Hw^AmR#;c8j-jqROtXn-7kxQbi6U0$>|PP z!_AuCaR4u3p7Yh!`AhGZCR#GEfDG#c2(X41F)NbZ@P~3*w(!xh@@VR+cRRh@1TP5Y zGyIdDMzIX{TG@6<3sx;5p~2c#N`wiA#YNM~@khwmRG)IcXkn&Or`~Jw0eXa$4&O8O zgtUZ6!j0INKA`u|{X@?ZP^J+2xfEill z{C>##q;$$hLH{Rx(JsVC@O8 z$a8s`)JNP@Hy+5U%E^*t4rDrq;)u@*Jyyr)<%{HQ5rb_rs%}ES_N-ma(sZ_GTp^*j z({H5E%8E~o2<3mHcCUXbqVb7x`0EIA1jQXu~0jQALnkXP7`y{n4%5_i30TrYhyDN0Ox;qdK#MG)76i1M3 zevl@s>mYJ&S{MtykJ6JJ579-g+WvVZDr4#gnO+%Rj7+X$r^v>o0DmpbVijTK1JUf zSrc@%3=pv9|*|V<%U-)d`Q=sTs3+((%a?>QU{Ouk=BMatS>S25@Wvhua~z;6)J% zW#~_fGg{II!4fqAdPUNAvZf+DakN<54NAJ?>S3E`0?iOa-R}qeuVp}C7&ees+tBW{ zD4p4|y=w!UIeLmhH%}2iE=>uuJm)+VWS8vF;TmPtMFU;$j+A!%sT-$oy0e`PtlMl$ zlReIs(htA5t!11-pl(Xtr3|pDpB_@M~3);B_Ooj5b19lttfQL6eDG3izkgmnqYTnm}zb~Vnm{t<6{ z*gvFdLmkxTT%&x(-vdt0u(o6um452s{9>euDeitt+9r23_=i75M79#+fhGXctSYJK zDX}jEOg&z4D(KcYB0vepE{IE6DtdOh@ZD%aw?&gItex?SLMs%%g-?iBI?(YUb(360 zHj{#d;t5@lWZJDvJ2#3SZ`0PY?1;y#<>V6&Ng=zn^|CVRCHRXD;;4B#OghxrX@!Mg`3T3g} z5Jc`A-lY<H)>c*KzqZ&i_K-82YFSoK}i+9iFQ8i&4j;&p&@ z5v@O`CrhTY$YzPErAeYh0`0|Yks%kgO=zz#LGQ;_2=}A$fC#T zFo~hDy*T5LTwXQG@GR-2ejXeQgH|4D(lka({f!+LwmPI&#z)wqmW9HEH{LE{Y6yeF z%Pkr4&AF)Hy!%FX&fBgpyA5wiB>)-5Vk6>Xj@+IveFbuNOw-z8d-v}Hx`s%V{$pZtdT7p6X~!dT{eV^cYKLR)P4)tF{lEC zB^AkHOWgO3zKghjR!8lJvAUIwhXvrW(iy}dA&1_1H|5MU&G8LRD5r-PH6ogr2-H)I zI@0;jB$NYIiw^PY!y7CDW&q_s7XQ|pmgLwtBmJiO=Fnhb^Yj;brW_qf{H@*tJc21a zH_`@P*WcN<1u)19c#tH7wj1aXsB!l;o$R0~*~y7D2S-2YA-l zFU0a}!;qUkMk~$cl5IhozG%SC;Ew}Q@%fYk%<`RAEHq*bhn&5EmeyQxis<6XGP8FA zuqSfWf9&E!a`JPB0}$Q(FL8bjgX%vT$V$B{tlhs(I@~NCSQ2s@J}~+_yYbtvd8vh% zM%LVjr3tt;IhDbt_wLK2Q#hVqNc(cWex4}ZKhwQY8#9zAlChs3?<5r#z2&v>yugm= zk7)4r6Fg;`^$;uITj$s4&{58xdi!iIL%roI3L&8q7q7-ZLC`Z}tte|{REJQ>@m`~6 z+MlO4?em1Wlz3XRI?JWJTiQ9wwruTbMj3jTi~xjF3#Z@xb+I6$$hkq?>frNI6$T|a zpPinD5zzKT0#7JTrV9T2_r>(1YJ3j;X9mVR5sw(07Gc3yPE4!{%Ijxx zLtSnKx&VKVR6{<+4$gq}IHMrui)4OBfpPzhSF7z%>sc?kRe{{tg`P2V{6k7(+-m>h z)HWc0YlH_00K|wxS@UVw!zgc}F(s|(YslSjJr+p;^jwZmbci+2e+9VRzeyZFhp;o{ zronRkLDH?e@*H@s1ZT&YBtK~~Xj&-qs$uI~K&DgcHwoXBYoY^@wwg5mpZ<>Ga_=~l z{efL4$!7_~m=!Yjsuh*;u?N zvU|Q58f_(UOhMuCqB?T*1d^3Lo=tw3%=(HXVSLlTl6>MbD+k&PC;?pLX* zastBr%lxDL?PES(W{tEDQ-i7>cVh)WBbk$ab>Jf^*P&>DO&~cCa?Nukf||gwm4uul zTT$os4}sHa8tgAzTffu_EWIV6exA)-P+6a^*2N=JluSvdRuJ-OSTBej$!Mj6yC+W$ zRAg1vRYh0feK36%LQ8Y@HQVhMMoRqfU)}o~Ww9JWUbRi(rBORohGhOgrWjN`d!d&( zd#O4-(W$gTrPj~$f;`h%t@x;Yd2NPFuO*?h!LQuPL3c`75`E%=0{ z))lhAPnznRDx)u+wyK|6a~x(f1;?;!Dx0@>TF6Idp`u&5CV^91WP`im!S5GElm{&7yQpjW%)-Uo=vh{DBgRwr>DD%*Ghgh|ZiU3Vg~u z0y8GC{h^mPy6cgsXy{IGW(Z&hv=#a6H?{0xQ zq;g67bU80VZCzG?eV$a4`YZ=f6l@eWp#9Aaum_y%-bG%>%M1=x>|nr?kiMfu{&QVB0N-3hwnQI!xyqCDIyj96^PQvtd{b^_$M(Mn{P|!*^MB z67Y%Q>J*9V{4gfvQ8gz9Dl1O7Ph+$-k7~74NQnFAV1-&VXdTjOkFiLbBB!}pn#qC6 zk9X_?xc^2DVj|iscv@F~XK|wPGo$rjeehRwT^9$5L*ZR&2wc6wYb{z2miLJ?y14`A zXJg~fdLJc414|H(?;1%4y#q5!_39Vwa5UURX$)17yu*!Yo%L;U_)pZlG= zQE0R$%IS}VF-tro%``h=NC&WIB>}mOybpZB9+U@4I0pgoFd5wQ`73%etRRK`kc2H! zZHbO1?#8HmWy`i(H_bEWr_UZ10OAk-E!4F4YoDz58J_-BS3M z%S^;f=`A^QMb*Cw#45fIHHE;%F@!Q59P_UCdY>$rhHG;W)BTF@pFM080Kc43!<{@4 zGM*Jz6nvFn z)4YJcN&3LO>YeD{v9XOowkhVyOIkQGKKs+1-=M4om!sd1756)(TS@tyhQToKu~Bj$ z6A}lD?{P_3@#wt|(d`+(fytL+xdEhm!x9NtHX^H6+YW>ywi3Sq^7V__mn zERczJoOSw|EtgK&W~>FnAyl~;`A86om@0_X)mn3w=Vq2x!5Z+-4Zf6I!Jor%aK^B+ z%!WBV75f-HAg2x>g2?~fU-Z1^EWoiH0nQ=1Qt{AhxS8^?4KRB^GXB?Z&DgrAp;#ga z0ROoihM-`*=K@(p#CTGr=`>D-kj1gLQ_=G?T44N>7IBE5>}WgLp;95Ty*vem*Is6| zvKH&VXP;QjeaP*fV>_h>@D?#-Fxlz{97p5phz4ukmJSMbqU0&_t^YKxIN#}S`q*%` z2v?v+f`ZlhOw7ug4t4_G65!D2YD=8O!I)eJyurCCC-TAuu2zMbPM!pCjOB_xu>RtDA4HkoV7Xh63=fcNR_`muVCj5kTseN@FAuQO~z zW$Ug>S?!$_*v0AluVNlop-jf5X;l0QY>JT}QytK|Nh|nHW~Ku7&KVEq z7Bt{)fkhHH`#DeK&2*~)9rQ_q1Mv?t8Pn-ecp-&v;=9XNiyytDF%BDM>@4wOva!v>Y%>-*K*+mBIv9;SgrIlGm zcd{YBh7tsjXdHyKYe^jSQTLT)bJ!jVo_hzOcaP|BRLbm|ZYbK1I(7ShkQR{8(>@jBJ)rIPWi&_W?)7n+7x_u0s~?L^o|P2( zm;KtZONUSzs`V!7V5a7}b3KcyD$#gFmXZ?xhyXQO`hNvgzj0?LuxNq~PA`k%wOqi` zad=D9on7h)h(?iOP(+*oE*1jtk-BL+1v^}5+?P1X$$9&+EzVsGvysmQAVI2O@wZu- zfI+wG)2?J(w^2VPuwiA7mM3sMU6IAtSM9)C9Iy+$Lj8AuT5$BAkS*KQDEfrRc}hBt zXT@gDw#cn8H2CJ;7vvSS{lbc#U}@c^o(sOGhu5iHo8&x1B8dtuPKg!K{4W95c_BR< z(}cn?RQ1Ui#T#?x^3Sz|QWHv)d*m>9(_y#HLqJF>Z3{9O`TZZd>dzx{3U| zUT?4SA_1PCCdgfXif*yXQ8a|w~3uVg9UcxQjZd?JF;gG zU8s3}q!0AET7h;fJYgdr%^85(_LNx(Bl5=*N-M@_&d2x zV(j^=dvh^Dc$L%shk{Wa%(gxE>#XAMF0y<;RTzrCbj1?BW?7`UG)B(gc=A z|J?ARKCv2W{XI>qqFj?pKmEo_Kzhpdz?7NU%jgr^zt#PV4cXu7-q42lma3aSR4It= zz37YnkX$ODd02QLc5C@VjxDQ>(NkioEv@09`uocOwMe71*xyD9eCCs;Q>bv|S(Zcv zn4fa@t1q=a3~@%B>b--^b<^~3p22hURv#M(?+=gMq5re@LdWOXIv_TPOB!dD_Y*&4 zNPU;rrwls`qFutQ5fDn(vgECeHy>2;@jI-v$O-%?lIAtYufV(;FF-B2Qf(gpFN8H4 zQDR~LK*dV|#bRo_879TH2w}|1EhQ=XQ#h<9XuSI@?`T&Ju(7Ta0Ia#JzhoGY-!=;m#MHi(sb^x$?J0 zSBpd4>^gp@W7W%k_U4W=e`@gI1)QI#A6_qkk*aHWB-N~_z)Ig6=f6`pD$V=*@q0^g zW9%{Brx8kw|HpJfRM0hv1O1zZ4vJ}u{mMtRm;>KdJi`K3sy8;fYF6?h<<$zP;EOz+ z5f5l7{Cbg!*&+@-(mFypPP#0O0{3>ITTk@C!Q7Gi^O0wfHF{}agwQF~LFQ9FufZaQ zY%yQM>jB?%Wcc@DpB(;F-F)~4p$Oa~?F&hmyY%dQ@C{dTU405mq5c2l=+2j004~X+ zga1Zz#`&-?PxAd%+lu^HL;Nv(|HOIgt6*KUa}J9wq+0*UFx8X=F`zVe$hvUwE4)x| zz3GFKt|?2$C3oO$NZok~8He1Q=Pf^cQ3%2uzL|bVv-}FR#^GUkII{BWP{Wi8w1a*N z0#@CgLMVONkX@bo+j+rr6u5hXo~&%Ipigxy5$-SbRmeoa`E#JsL#C73SsyFr4=fG1 zPP^_zUBg@|Z|a)IYp-wG*gWJl50W)S%`5Y&4X$zo3fsI;=vQkg?KCyRPxwucC@V@i zQb;=2==P;4X@8EL3cfv~GXy{Cg9|9ZoPX(1uwOzx2=FXhn0ZV=%II$7y$~7@h|_jA zuPC>hcb3;2uJ(_)nGIvlO{rze5}e%NI+s_QtS0x906iRGt008R@62ZfdT;JxW%@3y ze%UO0N~v(wtt?y2a3K0hU)(2jKo-feeaJJ$vcIEy9#1{}zc zlm@31o}<^+O=sjJv8cc{zb7B9JF=DWvoA{>ST++QfD7MRWJ}HU%?v3aCZiZZn*uFF zP$a;p7n#L4nN#G@;`y1lx+0^<5ksu<lMBg{z`@nX6+5_JfR9^pB8l%qxoBVbo9f^kFgKM&YY>I6{R#6 zjk9Basp>~PpGXGMZ3$=n>0J>LNdqs`Hqe6^vas3h@aQ9nOH_VKW5iWgzM@=Yo1{(Y zpS>W}G;}|5Gm&VrsCkz*;m&FT(a&@{q9lMA9O<&#zlR@5NYc0|Dj~@s4-%IJ zj$P|TY1#Hh-}}1_L!T=Rw)ZQaW~g;3E*x)vKm92fxL2}Gb{&OHw{i#K>Q{mO*=GkV ztKFI5M`#;NKu4O2rH`Am=7F0-%dBu-YMoXtiFeLjORR5Lkaa$1(p6)-`O__fq!AL< zn~k93PZs&q$z@8(zU3nRaqG4?yY$KAaSVwCD?-qBP(sO$@ie?}I*85%feP0~$lB`{ zAPpK{Q1z9+??a&a!3TO9oI0m^o)qvZY9}`J53{FFk5>;Iio+d(;xAyd(zEh`4$Pk? z#$MA0)(%Uta-%;l_+q|=_e@0!;LgJV9`p$7!p@3)QF=%`!~l}z)!n35G!D0M+vJPx q>y2XF>h7aipZ@>H!1|9T$cG}mrxW^2Y2=^n0ZMXeuPa}gz5ic;fm<&C literal 0 HcmV?d00001 diff --git a/textures/character_snow_man_preview_back.png b/textures/character_snow_man_preview_back.png new file mode 100644 index 0000000000000000000000000000000000000000..f3bd7f812203c81a72ca176eec0379fbf30befc6 GIT binary patch literal 25604 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 th3aisMr+?$(f@vr#{d3=GQ4H2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR42T^vI! xdXwi=y!>y>#>F74I?J6`!ZhJZ!@(2=hKZfb8E+hnP5>1$c)I$ztaD0e0swvHD&+tG literal 0 HcmV?d00001 diff --git a/textures/default_ice.xcf b/textures/default_ice.xcf new file mode 100644 index 0000000000000000000000000000000000000000..85c3036b2ce64d4f6fbfc0673c1a7a46aa823538 GIT binary patch literal 1681 zcmeHH&1)J#6ra`IRMVB%YJ2KokLIAPU~IkSA1NE%oi3~&xLVAg&{NOtF^VLGTnd4Z zQw|{zu!TTMprn-$gwm8!3u3Bvr|+#haV4ea9`fYv`@P@3kMYgUP_tN38hJx`uBvGQ z67@6yRv;t@N?5yf)NZ}sY9DR3J8w4MHJc|J8y{NDlkM$~J3F6tcR%m#b@%r#4h}93 z4||=?m*eBFr>Eb}&c1iMKhDqlz248u%R#^YYcLoOhoh^j$!PR@GI1P-LG@d?oxp!S zfqSq%0Z&2(98?6w)AG>68213;SHVUpoUf!=)To}MRkHvTo+^PP?Ap4e zD|Xp33(JcMgXYUtxvC^wldRG;O-ZLzR}}RI;IEb;b?slNJaATwGnm@2D_Y(xQ6-)A zS^&BJH`3#h^^#dr%u@cDZexDgFl@bcy+F*qNllsgRGh;C)rv*Un+S=ksmu!ea=F|S zHIvC@A7@waohRa3j==IeN&*~f6m&zYTeYXu(ri0bDN&5X4MAA|#SOxXCgfq + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/textures/mocha.png b/textures/mocha.png new file mode 100644 index 0000000000000000000000000000000000000000..39394a279ad74447724cbe2c3ce53646d6d610a9 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#9*eYywwA)2d7FSjk|nMYCC>S|xv6<249-QVi6yBi3gww484B*6z5(HleBwYw zQl2i3AsXkC|D69Yzft7C5eFrSs|KqQUt};ac=<8O`R;wI0#wD|>FVdQ&MBb@0Isho Ar2qf` literal 0 HcmV?d00001 diff --git a/textures/mocha.xcf b/textures/mocha.xcf new file mode 100644 index 0000000000000000000000000000000000000000..931d90f2a4adb3ddaafca2d6f102e4637a89243c GIT binary patch literal 665 zcmaJO zHx-YX5LarJ@bTTK0Uzy&c4>&x*?*;N;_qgyL#3;FkqBKXKE8KHz+C@jIxk+9+Hzfr zxvZ()WLYik&jqP^-`YC6rSuLC!B?vg{r>bOiFi?!S(eSSQ8x%jAa!R0cATaLoH&iZ xZav-gbkEbLp6+}444U?BaSTD{5&WOAby%pKXs>>NkMp+cg&#D357-85;y1uzXzKs~ literal 0 HcmV?d00001 diff --git a/textures/original_snow_snow_brick.png b/textures/original_snow_snow_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..47c85ee4108ad78250c96b513b848855321b9631 GIT binary patch literal 507 zcmVVGd000McNliru+zbo^HU-#m>1zN00fF)esHETj88S_8|@%3(NX>U3`6_j8=Fjg xDjFwL`WHT(bo002ovPDHLkV1kVa2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR42T^vI! wdXr1$ez@P?$aKJ^^I0IX8?S_Ef`KFh!z(@}C%ydv89;>$p00i_>zopr0F*5%k^lez literal 0 HcmV?d00001 diff --git a/textures/snow_ice.png b/textures/snow_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..0c795ffa6d564eedd2e04e77e68d8cdc4bc3bf1b GIT binary patch literal 742 zcmVVGd000McNliru+zA5~FcPWLqs?@P?Tkbac%`vIJe^Js%AO`?^`~7%6NH6D9akH;pD{f@KE7>OIa5D`qd#K z=q#%+1`ZD^X0u+`XcSm3Ax6PD$LG(E`Mk!t6=_;98iCdZV=}bX@a2o=^%X>5GJ*NL z*Qb=?=qTgq$@GS4&FSfy`+NUxrn#L#b zTFNpf1kfUp5Ii3~G`zj#3X;lpjA5^rjBm&j29=_V?lWxj`w| z+lwrh+c(evO|zyba+G32Ga?e{x|V~3gvA1442;L{@}fyog)y5lm1V*4aY@^Dguo`s z9bMOOel9E)J=LqLn%i58_a194XJV!Z07*qoM6N<$g5Ic9VGd000McNliru+y@mF9wdw=355Uv0<=j) zK~y-)b(2|7lTi?cpHsF1MM|MX39A$o%OWZ$F-A?JqDCo&fLjP&7_YqX4;W*N@eg=o zVq7o8H5vm(i%X&)Mo|G12&kBrMM@VaLj68^ydV~}`d+>>=gG{R8Td^N&83q6sHoET z?^u=9EVtP*B*6O3>Hh@)tlMOch-*3=gF;ax)wP8(JIBP~V{7D|hE@Lr6_@HFyl8-@ z4@L!y()zero;%-#qE3Yq8js{jzvl<4DsfNv!~W_G1{tq2BGzooms2x7Dl0PS|LEjE zV>X>{6hIL8?xppHQvlTLTP2mCBuYC+OjII5Be-?BM`+%@7!s-y!c?KbY&Bsr8!0PK zMNxyKrKJI2Z!$}Lx=L2A7Q4NWGJ6!?T(gTUeChLwzWXNWcDuPbsxaK+!C=%98xzNh z@}*LlizP4DKv7-{69JXJc9rzZn1vz!>gmz_e$m}ADKhkWnvbr=QkqH2#U4>nxs**+ zsqj5SXg-eiM}zqNK7zAiv4Y<1B zQu8-piB5;t8=%o<1icr4jsfuppk|*%HaBJR`h$mr_!Ml1 za^&=khcjni(cLjib&UzHZ<6CD*M=d{8OxJoQE?IpT0K$GlDR+})7}uLPWQ4bOV7K` zg_5m%wetFv0j%526lBFwd$3r#oU>>~K23|{Bm*lgiR|973@PJzcy~z5sT!QlAh!J$ zxvQ>7I_`}K2obNF$Kwfc=UT7mdNw4Y0d8OG6&J2p-r9j#bS;EFn`^tzz lTEC?r!mB%xC5tzv%b$bC6e&F$U)lfw002ovPDHLkV1hyGYasvt literal 0 HcmV?d00001 diff --git a/textures/snow_needles.png b/textures/snow_needles.png new file mode 100644 index 0000000000000000000000000000000000000000..b8140575bf6a587ec533161d2880558b3ffe497d GIT binary patch literal 860 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 AZU6uP literal 0 HcmV?d00001 diff --git a/textures/snow_needles_decorated_animated.xcf b/textures/snow_needles_decorated_animated.xcf new file mode 100644 index 0000000000000000000000000000000000000000..00b075e84beef085335a74df9d579b4d369aafb4 GIT binary patch literal 15052 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 DEU_-y literal 0 HcmV?d00001 diff --git a/textures/snow_sapling_pine.png b/textures/snow_sapling_pine.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8167a25dd52a3c8d84417984165294e2962fa3 GIT binary patch literal 406 zcmV;H0crk;P)e-vd2O3fm9*zeI zmMTymd-}3FyF0V<0skI{YoG6$$ylE0hXe(-eFp&0_8p>}=g*l01)^fmcS>`cITtT{RREdB3zwEp~pWNQY**w$C$-K`jV-xOn?P_ z`J-{iBrcvrx+7k_2sCWsjnISwoQ@ltHgWPG7JZ^AnxVH&cm}a&F`bRacLMu15epF2XskIMF-pr5d#Mmq^DDCgc4egdnNNxGO&+ zAX0>a3})d5Im7B5!37f|ec&935BDL!1hi}i&9^p!0fwQd#P^P_NrwY}IJ3zS$WaLa zMp3CX@%(CIJQm@O19FfrdKu`N$^}21QeC8W$^mHUfoidb&7reRJ34q&;THv1VY{$?&@9*UkrN zpG*4B3SYP^*)A0lJ^gd`PsSbo^VJoW-SW8qOHVrbgr3{pcJTDKlt1l3udN&(W;k6{V3L!} zF52m#Qn-hCFJpg;p_b5}tG1#WE!AJ&s?DAxrsXBiKkw)E)xmNe8Q*`-+Pd!S`X{2N lpH7+>o4o417{6T^!;|9Lqla(LPXKz7!PC{xWt~$(696JFj}rg@ literal 0 HcmV?d00001 diff --git a/textures/snow_snow_brick.png b/textures/snow_snow_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5b05b7817968b96e7e78ff75fa0c7049008751 GIT binary patch literal 732 zcmV<20wev2P)|ek8Q9IXFt%l}0nO+IQyNnOA$U`8_hzY3kJid;48f-bM(4 z*YBd~bG&)?o<|Sw6KN4<+Qjd>=!qnSVhOk7ARj+y;s*dwsies%;=Eqt+ujfi7o`-o zWl&TAmjMtOtY0l6cH7|ku?dZ7G1rGXHw+lstS%X>)*)v?P5}`pGkz;=6({G9AAn_o ztpLM?2%O%z2O13gIF#qXegH*#mb*S=@)rAjC}(GP0RJMmwg7VbHw3{LfUK$0@tFJ- z8dW&#_gG$-HE2}f_ymTh(DOjvtOMu}#nb?fM=+m^J%HN-D+if0gb~cAz?v}9HlA)q zsuof!X8G0WBZMFfL)Mq80Q~h&D5(?xA3t?y-inc})(+aJg!X#tC=x<|E(jwCx(7tz zm}a9wdoZ5P!^#=cxHlMbZ_VJz^H)eO@VL8HK}v82K)%LV1S0|0ugpz%?o5W~1!Izl zIo@vlA(OX|EA`kac*NI*jB_{U(#3Lm}*lIHF-zO=xV=;c;Pa1tE|v4NT01nGicN$mMs-7MOB@&Wov}JX>m(0wlZ2w4@!4-EmLPJuN|#q$h!79^z{XrK{x$$17~TO~{P^L}JOl7|0Yd-|@V?7g-g}V$Aj%a;v=W{C~#KSvkO2x{pknb#<^QA z@je7{xtZ5}T$-)*hYLS0l$RHm_@%}2!lQ4NOijapWq!Ga5gur!id0TJPzk?nnI;RF zoY~WGm*3Wq#$nEUu0eoI)-+93SIyN*rB=fbHcid^y3x@ zpULO>OoqQ%US2LQE<7!xGN zXM&kvK0le^Gx;E|%ava%Yijjz?D3Pe%9Gz#Y{MV`Ra7yYdSKWM)ZmPRMmyGW_H7+P zHfQ$?Ld6{e864s4hS9U_b`~2(qk(O_v4Jsxux%UrEnRnu8#z?ZNJqBQ9oU`RQvydq z_(*R<4kDXQ?1znCutA9aYzu>`Eq>S7*nqP9Isd=y8D!C3>Es{*b#WK+cXV zRZCJyQL2g}RjY+B4m;hh-t2WyhoeUwS}^D(kPM6x=m(Mm^^WA-qdpy`y~3Zg--qzY z29{Ki3RS5pDN3nYs49~D0G;%c_l8G53CF{sw2({$_^H$#_IkY*@Y?SI`2J7(U2(On xMOpcC05GqUnAKE)$Gi*a|HX z@01N9g%C6%DqqsE)M8f@Bv3G~Tt$~1cAZ&wcIV97nKPbwp8xajLi%2RuD72TP7cI?9SWJ&;huwmV@?o=kJwN~0#XBkVC@Yd7=a&9JX0TjzN z;ggNs+v{Fhv8*kqxJDH9uk5&eKd)!!>xM;nAWs4E>34sc$Q}J?q_|dcDKZzDAnznzQO|=ti@5>!SuM8vr>^yumF2|y!t=o@dN&4!wfz|8;z`f}Q#4G>+ z>^zt~abUQoO92QYZqFzH+sCpVkrNnW6KU`KH}B|b=%QFw_9|vv`#0|IA*F~2ZE4QU zTczmi;Vt;Ta-H?eyfs!58hbVm{qXzWyEkpLECMjoxrqto0YFgWnS$x*RH>v#r?1pK z52*xQx_2Y4QB-a@3jm}cjJ@w}99-oCxSwkQAOek!U2e&*?%>DlX(LW-Od5dhe_|6;m})~|V)5F3WIQf@S3WAcjuAUZ`qjt!?0 zo-Qo0^052`)jQ~yrcLf?v9G(+2^Olgxw%DXz)AM_C;(%{u;@n9z1XKO+-$@(%8qZ_ zy8j{oyG|(Qg6%W9Z1q&cH3?MtcEjL#z*hCILD! zv{16Xrl86Ie*1dl!;@E!zW>&A-t=~=kH5VFf;iDf_6-$+*3(k_-dC4@J~UDfol*o~ tzQke8RqF2bwaHyyT-x%+n)b8@;6JK8ad47l2U!3B002ovPDHLkV1lH{dR_nk literal 0 HcmV?d00001 diff --git a/textures/snow_snow_cobble.png_01 b/textures/snow_snow_cobble.png_01 new file mode 100644 index 0000000000000000000000000000000000000000..e726395cebe7df249efb3c4406222a1a955df387 GIT binary patch literal 788 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 UR$BV(i~s-t07*qoM6N<$g0B^sY5)KL literal 0 HcmV?d00001 diff --git a/textures/snow_snowball.png b/textures/snow_snowball.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4a14a2f9cceb6cfb7e9a5092f09e3e14abd989 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!AbW|YuPggq7BNl<=5MY)_W^~xJY5_^EP9g@Bv>sD)+_9&mT&aD z#$){8FFS{{i||s(B?3zXXEVA;G8r?ZaTv|lSf60b(B{~X!hC|uXGZS{DbGI68ET7| d^I4b~4#*z+^ndTo=|EE%JYD@<);T3K0RT^0H=zIk literal 0 HcmV?d00001 diff --git a/textures/snow_snowfall.png b/textures/snow_snowfall.png new file mode 100644 index 0000000000000000000000000000000000000000..08922ad436a50590af5ee649dd37650f10590918 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!AbW|YuPgf<9zjtxrp*o-bAUpxJzX3_EKX0Iw6W-rfq={X$`!io zRVSYOuh%>ru})FU^vp5=vq`DiDbZ_}>@Cj@F<~p*c_^`;!76>*7n9D&Cy32_H7Hq`2A#OEVvT(wZ-Fk z+_Y!02El6^b=LY8{$eWKn91iU}`GUKc1vfkIV s`;Kkt^xhG+dYk;B<+;yKw7wUAzUGNu`1!5fKyNd6y85}Sb4q9e09mDv)c^nh literal 0 HcmV?d00001 diff --git a/textures/snow_star.png b/textures/snow_star.png new file mode 100644 index 0000000000000000000000000000000000000000..b168c2479c62b24ef7fada78e14a472262127418 GIT binary patch literal 540 zcmV+%0^|LOP)VGd000McNliru+zb*GH#9w#G5Y`j0jWtu zK~y-)wUSRy6Hye!fA7&Z)0Qw8Mnxc&(1j*OR}D!MKSFnI{T?K)jP9Hbu0#@Cvh9wq z056tFBy`h)T^R9CbkL@;Ei<&wMNQkGf5OJMdda=#+;i_a@IT+)24-&qGp$EXE3QAZ zSa7BfkpMw4ZT4S`PAZkdiONnkd;JnX>n8Uf&GBQ`ijl16Q`~!SV+5Sf&r$t4q@ds- zv~D0%HkHkRl8>h$TL12YtM4q6%YxPo3LYYMgMx?f4;#35lN`K~24KzUkjwV!-*;xr zNhQRu(FX&A&#**g36_=<$YzA=NQAOT%&XYsi7pg8#O$o#j%(qrChb?Mg6ReQXtyaSnx!GZ*MUWax=3)6v5f&IziDj*COy=Cycu70tV>x!n9)Z;pluU zNsJ&UE}G1ejn)C~la_eCUFYR)NapE3_1|RrJ;X literal 0 HcmV?d00001 diff --git a/textures/snow_star_lit.png b/textures/snow_star_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..11579e347f3f0dcf9b1f550c77c20f54a62d7a3a GIT binary patch literal 514 zcmV+d0{#7oP)VGd000McNliru-UJyICIIIIHOv4202y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00C-AL_t(I%e9g_O9N35g}$)ng8^K2rM8v`_wTM{AA{G{6VI}td9REzf!l0rE5|t2A1PLiNAu16y4^cA~SF)~o zXyffJ%=zZb%z^)Wl1zvs6Vk6H(wE@OL)7M1fZXhe94>Wsdd&BBmRgsLP46w~m=bl$kURq&UU{1ie1GNGSMY@W6o>8rw zDwF}$CtdPtbQSjm$nmBSeFtX>Xu-3OTTWI`C8g<2srPTPT;uL-=g#Q>Haqj;}^<<<&d$MuLmqs*HP<$Q>q zxqV=0&oK0pP=T+V)X;2*&r%pq+kQz{gUqJ=ZD@z&F_ph03`VT@&{w zyP{2AA)aXhp(}q2^&EdE^E4c~QCZhBW-+IUM{WryH~*w`b)i>9)6&dhX3eN@d?}l) z7}l=_Ir^%~(OeGYdvHbh;1K@}SK+-8-)eACukfY5&^L`T+xbmc`T>3;8yIjo2MoF# z8{O^ULp}Uj55L~SgFSp0ob!4T0O5Kpz4PH{NG-Xd-cZALH$!5F{j6ek|Gh3 zyPU7Ne~jF*Fp489$~I62Jv?}fwZ+8<4!EDN51rQd1_k<$PjUarDehnJ+7fd_A{FP@ z#4;xmDS@piQuwvgg6MfvaR1@NG)1GdBm{an6XDs}SR9_{e<~Rl3Bmm@N5U!YKblO7 znKbu5lTI$jV-M4axzLjW1usO5^EGGV$UTbb6Ud6PNt99P#~^r1B&UgVfm!N^=zn;8 zXE>b4cZS9pB4-46kh~%54x=}o!%Ifq$XI5nsLkt@mu&N<+xuBt(EZEL;&02b{QEe) j4}f@|gw?M2--37@K<|I=8eE5;&b9jEl*uDOE9%HM`-DUMvBgwr9a`J z9>AoXc987iHlY|J_h`$})CoO

R!WW#Q8rsQ@OfnAKc{jt+L`y{?%h-&O99B2?LX zbF4PE3US6To_&#eb9eu`^qAaY0MMf9`0059g)!+D+Vhy~az4BjVILde5Z*s$2q_B2 hlj-K|@L}raegn=kcuB4}Hw6Fy002ovPDHLkV1f>$yX^n~ literal 0 HcmV?d00001 diff --git a/textures/weather_snow.png b/textures/weather_snow.png new file mode 100644 index 0000000000000000000000000000000000000000..8c44f7aff36360439073745ed99ede620c8093d4 GIT binary patch literal 2120 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn25lDE4H!+#K5uy^@npa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWxvZT!Kr3`guwil(-P*aT6O)<_q?}``x>V_`tVtBLVf|0fRXGB zA%}ervu3MG+{m@%YC6R5iPw+8X*r84(-UckK@HU(rs_|~SJ-2rA*67BbKz30nn;zX z;;ZH-%oCg#o=Bh26l$nBe`F&YkDkU_%OIAYY)Z>Hm$NC{_hV4Vu`*C?sJY)boAKa^ zyxV7!9QMs+aQHT50Vl)HYYY#1StjKFFthMqE#5AvuU5<`^GWxRmV>8BY2Ponqj-0*M<%Z^tPFyCMa9DG6#Qtk@f@eaNE`smBMubDsb z&P=TI(&Dq12if1Z?XIQHdA^3s5OJvmsAd;XZczbWXg_KP+9hTJDK7hc4f{`+T3?vH&B3Ihg6h_b#(& z#(O2l`zAVxFkEE;5}T zoLC=OzhS=*M*@(xD6Ic_RV;a%--=bMzTcbQzs)o~CFz@{OGO3!|(Kc7|1R(-JT?#smr8axX3Ef^I_yk;!*_z@!vipUJR>nuOZ zm>3oc_i8de`TZ`2nZdp63RLiBaFZG^17WukMKqx(H1zlJ$oYpShl@Os{;|R0jKl`f zdCVu;YCiAHE$_5(O)6$FF>ODkx%l4RgIN zpPrs#>VEr^<|n@2+;+2zWlaRbs#WuZ3*PTtZpNr^U#emH-$gf*&cw+43uO?x56l|C z%)dvM@3(8PN<`%?-)iG2`A?)fwE5nvwJgbIaM-7xcW7^k!8VT>Ob+`Pfo?t4VY{p# z2AKO=#MtjUvi)RJXIOao;0w)zDNH~yUk){4P+3;6So2}m%Lgm==RN|a_(N*K!t5u^ zEf_iG_^kW02B;!oVkh&2{5cE)7KOm%jU@;`LI>XO*vTSa+$;o45nC*FxN4p-_haCg x%jd(XaQ{s9W|o>erjVrGD~wu7GBmvY!zdWFSn=4BY5E|OJYD@<);T3K0RU0DKWP8} literal 0 HcmV?d00001 diff --git a/textures/xdefault_cobble.png b/textures/xdefault_cobble.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8896dc704649fe6ee1eceec3746a2fb180d9c0 GIT binary patch literal 585 zcmV-P0=E5$P)NVMDSYPA{!!LO9(c`6&t=W~omYBrmuX%btOCF=D$5&O&K zf@K`X1itUvwtYApxbHYluh+wu7z*)vz25KlYPAZa8jS{d+~n|jz5YmH*J`z>451*> zrFOd=Yd)VhrHC_`%x1Gus9_jVoQ4x5s~*axY&ui!-#MYGwA7dV|x#bQxUrI4s#OL6CR zyDCr&sU$rR)oL{= zG60IGmd@uh(4f=qbUJmVk{;B*z`UqHMa+~d*=jOsXygEy%jE>!u$fFIii8Joq?XGi zm$5XYAP183WJ;hz0wo{x4>1!?s6(FWCz%r56k%od{M+PdQdrUzNF0*KxQ4^wcs%|C XuIY2&$!&9X00000NkvXXu0mjfdENK# literal 0 HcmV?d00001 diff --git a/textures/xdefault_furnace_bottom.png b/textures/xdefault_furnace_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2d19b6b117ca93c69e04060a7734337f02d0ab3d GIT binary patch literal 604 zcmV-i0;BzjP)WRHXMskALrj{-v!wpw0-2QVO)R_COgt#ut9kb)Ut|_~JK7Hk&=3ByM~A zQJyw8@@;)B-?z8&V|OQ;`Gsk9_1?z);9kCZHMIQVnFH1WU|pWYdl zl`^1zApd$;KHmb-qOT7uBWr-dU@{z78zlJu!7;*QIvI<*SMp>dBK`X3e5Qw~q^LY9 zrJ`M_uap2`r){INXR6{^l8s#9;D#fCe q8v7@{HvI#XeJ^0s2KE$lZSgNBZ9ZwO#OAL60000QL70(Y)*K0-AbW|YuPgf;wBvGkO(bF8{akEHl_0H%r=8UXS@-^2FpBD-WFB z;M6L9xZ(c}ll-gCoC7yIMoxG*#gIKtKf(CLe^K?iHsxnFJnNl%CG3u#Tqx0X`s9n8 z7`>x<9p|GhbdHpmner&GO@70~WBP-sJA?T`uJY07h+rAdM2EZwf+h^JyA2o^GMZLQ USKQnt3v?xer>mdKI;Vst00sPCy8r+H literal 0 HcmV?d00001 diff --git a/textures/xdefault_furnace_fire_fg.png b/textures/xdefault_furnace_fire_fg.png new file mode 100644 index 0000000000000000000000000000000000000000..66aab6520c17f3527e0e53ea63df742fc4372879 GIT binary patch literal 803 zcmV+;1Kj+HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyh& z4*(X+Ro>PB00N^)L_t(IPmPmlNK{c6hL7|kw=strQ)XP!Y_O4}MPxE9m!`-Sqi8V~ zEXZhaBKl!eP?``z{V1U_C^Hlzib#YK+T8<{RxC@(R1$PXXLQPXx^qVyCi~HWm;2rK zJKuBOd%0JL|5(TTd}RH@XO@}jA!eJ?>rR-vU9SB-DsLB~W{Kdbe&LL_M(J)B2Bill z0_F-yoK$-WNsc|G{%$USGUXha;?x*}J=v-Bot5TNh(gpZmgVR*NBdHsa?o=8eW{9A z0EfeAU+DnX>wN5@dsB#fe>Y4i+E%(diG8UHW}PyYtz~eVhF6L6cpl@;_bn^zwUBBd z)xw+;WEZ1_S_G$~7%2>8e0Lyy8BUlvf9Xu!8Lz;U9m+tKzwFtJTHYDvgE0azv|S^c zKZ>;UWN8>Jc0}!7>mgq!4lUwyh96^jYNm=KWsh@lSdK5pTAkob-<#%x-?R7@x5xS`N2#*i>I^Fi{DR@9jCoEV7VN{*Lym6l#I1G z2|n(?)|1OCzBMD(X z5)7x7%LCsE<}-OyH#1DRmY>bhv{!i2k|~(HuZPd+v=#|!!llQsr{u*NDU!kETj(zd zz;soL+_jNkpOWaT^PnMH8mNuORJ|Gob7{=*VPMaC3GhZw$HgG&?Qezm1}N1r(UJ@! zyWqOC`K9D_KR(6^89jrc0t? hwTh#DfBl8i>kr&alT0f5b;SSx002ovPDHLkV1lr~Zxa9j literal 0 HcmV?d00001 diff --git a/textures/xdefault_furnace_front.png b/textures/xdefault_furnace_front.png new file mode 100644 index 0000000000000000000000000000000000000000..88069c7e3cee27729f247e3763a4ba7e51008caf GIT binary patch literal 628 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 M07*qoM6N<$f&jdFw*UYD literal 0 HcmV?d00001 diff --git a/textures/xdefault_furnace_side.png b/textures/xdefault_furnace_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2d19b6b117ca93c69e04060a7734337f02d0ab3d GIT binary patch literal 604 zcmV-i0;BzjP)WRHXMskALrj{-v!wpw0-2QVO)R_COgt#ut9kb)Ut|_~JK7Hk&=3ByM~A zQJyw8@@;)B-?z8&V|OQ;`Gsk9_1?z);9kCZHMIQVnFH1WU|pWYdl zl`^1zApd$;KHmb-qOT7uBWr-dU@{z78zlJu!7;*QIvI<*SMp>dBK`X3e5Qw~q^LY9 zrJ`M_uap2`r){INXR6{^l8s#9;D#fCe q8v7@{HvI#XeJ^0s2KE$lZSgNBZ9ZwO#OAL60000WRHXMskALrj{-v!wpw0-2QVO)R_COgt#ut9kb)Ut|_~JK7Hk&=3ByM~A zQJyw8@@;)B-?z8&V|OQ;`Gsk9_1?z);9kCZHMIQVnFH1WU|pWYdl zl`^1zApd$;KHmb-qOT7uBWr-dU@{z78zlJu!7;*QIvI<*SMp>dBK`X3e5Qw~q^LY9 zrJ`M_uap2`r){INXR6{^l8s#9;D#fCe q8v7@{HvI#XeJ^0s2KE$lZSgNBZ9ZwO#OAL60000B|mLR^7@ z%a)v6w&dK(WhYlGJF{xV*~N>mELwDR$>J+(*WTK?_3n-x_jc{Nf8fC5BS#(|JNER< znHLu?zPf(>&7C{%?%)6L@Zra&Pd~kW{q^I=pI^WJ{{H>fj~{=2{rdao&%b~F{sRpk z1*0J_m_r~WI*bSCKE{$DzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr z6l5>)^mS#w&CM^YBGzz7?t<8 literal 0 HcmV?d00001 diff --git a/textures/xdefault_ice.png b/textures/xdefault_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa583a30f38b655e985e7f6f58b2000c5d73545 GIT binary patch literal 490 zcmVVGd000McNliru+zA5~Fc2&hGEFT8k={!vrSe{?J<0GwlJbtUq zW-qgq~9s{j(}I#3@BLIGHj2+NdBWH6umNPDxnSTI7+cKe77d10w} zI4bORt4vVS+3c;T6Di+WrCEjWs^U3PBu? zZ;=Hc%jK6c0vODg6)*Fusx~lanwz0z*~JD(8+@xz21wF(M%TDGhoZ_*+wWf%Ouw3m zjtxds*1^RYq({SgM4Mz?95Gt6fFc8uSl$0s2^>Z`9BkZ(*6%nB0_dGLy+)*}UN%r2 zP+h;{Y-|fS@;nTM3Q(h8gqe_>(k4kWFaQ+jrM;8Ly4a4Wk_-qd=RF)gp#=?)1ofZ( gttGTaJMwGIKaLDRPUIx#3jhEB07*qoM6N<$f??##hX4Qo literal 0 HcmV?d00001 diff --git a/textures/xdefault_ice.xcf b/textures/xdefault_ice.xcf new file mode 100644 index 0000000000000000000000000000000000000000..425d23697e867ea237b2f41eeb65b4c7e5ccb826 GIT binary patch literal 1400 zcmeHE&2G~`5RMI$Qb4rg=fuGW4(%aTd*J~P55WzkY2sQ+ld4Ij_5>2Iuy&H2wf6-; zw6r<%08uMI#Lof9j*~d{G81e_Rm2l8_GG{P_WNchW7FE*GY-pDqiWSE1&rk^39n#k z8vfkJTzvL%{Dczm1I+7~I_9GclkOqvALF`gV%eg#TQVy}bKlxVs(|NOVYS&hs#T0; zqh@WdEv;6~a--JRH&$m$ao^l38Jp`HvoJQUfc$6;ty}-H=E6V4a)zvj&An3Ds+-2< z)9eZ)kN!qxT=Af8wG69X-l;Un->6obmDcYD$$gdj#ay=19J0{f>&2$;tOa9}z+hQ7o40{ph@w1L|ofenBkvo`p^ zd!7xp5A74-%072UB0mT?=e+$17z{YLpFJ430KG0a7aim@cwMmHF(FPx7v6&-1@FA| zfSoabQ`dI=E?fxK9taM77fVTy9yniI2k=_vOUVGc=>QBE6Fx8>Wapgj0^#;NI05On zZ5Mll?wKP`I0(mfu@NgQ85QeA=@lm4`cjF+9NOev92-9>tRwPs^RyWir zQNv-3gr*Yo>*`yA{79)Jjug^FeaAYnid2X+UXIdqh_&L;R1L|O%qUW(6WnV70;1wc wi0TCu;aw5dBrcpHOo$+>mc&>yz&^$k>@|$Y6~qBGorJ`vQ-p=|l~zzc0rkg+_5c6? literal 0 HcmV?d00001 diff --git a/textures/xdefault_snow.png b/textures/xdefault_snow.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d0cc8d3c86a279b3e55887b59eed43e9c04f38 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!?92>C8W$^mHUfpFdAc};SoF3A zHS#tXaJ>F+FXexM-(-ft?pszun>IQ&GWC6~T5|4EZvER`n_orW%wS+kY?#IuAT4`^ zv1-|N#tEn1=;%#gjk2;{YoWpVef^=@?Af*bGJhC9R6lu;KS!7$d_kl|v6T6o&70N= z&+sTYy~ttRUdKh}uCnfAoy8C&>NVqc^Xs!85B%3TZMf@_efN@cvrIn*Jm+PdeA#2I Tz_K+!7czLd`njxgN@xNAG2&@* literal 0 HcmV?d00001 diff --git a/textures/xdefault_stone_brick.png b/textures/xdefault_stone_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..8032f7d96f9e0f40ba3de49d2c74bc46ceb5764c GIT binary patch literal 636 zcmV-?0)zdDP)ejTvL;v<2dY$bc(NZEA;=|Bjh3@db(p@tg0Za5e8x|B?1$AGkNRk)cu5 zs!`=uqw%*0$4dr0