From da66780a569712c23ae4f2996cfb4608a9f9d69d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 20:02:19 -0400 Subject: copy all standard Dreambuilder mods in from the old subgame (exactly as last supplied there, updates to these mods will follow later) --- cottages/nodes_doorlike.lua | 437 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) create mode 100644 cottages/nodes_doorlike.lua (limited to 'cottages/nodes_doorlike.lua') diff --git a/cottages/nodes_doorlike.lua b/cottages/nodes_doorlike.lua new file mode 100644 index 0000000..d989c05 --- /dev/null +++ b/cottages/nodes_doorlike.lua @@ -0,0 +1,437 @@ + +----------------------------------------------------------------------------------------------------------- +-- These nodes are all like doors in a way: +-- * window shutters (they open on right-click and when it turns day; they close at night) +-- * a half-door where the top part can be opened seperately from the bottom part +-- * a gate that drops to the floor when opened +-- +----------------------------------------------------------------------------------------------------------- +-- IMPORTANT NOTICE: If you have a very slow computer, it might be wise to increase the rate at which the +-- abm that opens/closes the window shutters is called. Anything less than 10 minutes +-- (600 seconds) ought to be ok. +----------------------------------------------------------------------------------------------------------- +local S = cottages.S + +----------------------------------------------------------------------------------------------------------- +-- small window shutters for single-node-windows; they open at day and close at night if the abm is working +----------------------------------------------------------------------------------------------------------- + +-- propagate shutting/closing of window shutters to window shutters below/above this one +cottages_window_sutter_operate = function( pos, old_node_state_name, new_node_state_name ) + + local offsets = {-1,1,-2,2,-3,3}; + local stop_up = 0; + local stop_down = 0; + + for i,v in ipairs(offsets) do + + local node = minetest.get_node_or_nil( {x=pos.x, y=(pos.y+v), z=pos.z } ); + if( node and node.name and node.name==old_node_state_name + and ( (v > 0 and stop_up == 0 ) + or (v < 0 and stop_down == 0 ))) then + + minetest.swap_node({x=pos.x, y=(pos.y+v), z=pos.z }, {name = new_node_state_name, param2 = node.param2}) + + -- found a diffrent node - no need to search further up + elseif( v > 0 and stop_up == 0 ) then + stop_up = 1; + + elseif( v < 0 and stop_down == 0 ) then + stop_down = 1; + end + end +end + +-- window shutters - they cover half a node to each side +minetest.register_node("cottages:window_shutter_open", { + description = S("opened window shutters"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {"cottages_minimal_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + -- larger than one node but slightly smaller than a half node so that wallmounted torches pose no problem + node_box = { + type = "fixed", + fixed = { + {-0.90, -0.5, 0.4, -0.45, 0.5, 0.5}, + { 0.45, -0.5, 0.4, 0.9, 0.5, 0.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.9, -0.5, 0.4, 0.9, 0.5, 0.5}, + }, + }, + on_rightclick = function(pos, node, puncher) + minetest.swap_node(pos, {name = "cottages:window_shutter_closed", param2 = node.param2}) + cottages_window_sutter_operate( pos, "cottages:window_shutter_open", "cottages:window_shutter_closed" ); + end, + is_ground_content = false, +}) + +minetest.register_node("cottages:window_shutter_closed", { + description = S("closed window shutters"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {"cottages_minimal_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.4, -0.05, 0.5, 0.5}, + { 0.05, -0.5, 0.4, 0.5, 0.5, 0.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}, + }, + }, + on_rightclick = function(pos, node, puncher) + minetest.swap_node(pos, {name = "cottages:window_shutter_open", param2 = node.param2}) + cottages_window_sutter_operate( pos, "cottages:window_shutter_closed", "cottages:window_shutter_open" ); + end, + is_ground_content = false, + drop = "cottages:window_shutter_open", +}) + + +-- open shutters in the morning +minetest.register_abm({ + nodenames = {"cottages:window_shutter_closed"}, + interval = 20, -- change this to 600 if your machine is too slow + chance = 3, -- not all people wake up at the same time! + action = function(pos) + + -- at this time, sleeping in a bed is not possible + if( not(minetest.get_timeofday() < 0.2 or minetest.get_timeofday() > 0.805)) then + local old_node = minetest.get_node( pos ); + minetest.swap_node(pos, {name = "cottages:window_shutter_open", param2 = old_node.param2}) + cottages_window_sutter_operate( pos, "cottages:window_shutter_closed", "cottages:window_shutter_open" ); + end + end +}) + + +-- close them at night +minetest.register_abm({ + nodenames = {"cottages:window_shutter_open"}, + interval = 20, -- change this to 600 if your machine is too slow + chance = 2, + action = function(pos) + + -- same time at which sleeping is allowed in beds + if( minetest.get_timeofday() < 0.2 or minetest.get_timeofday() > 0.805) then + local old_node = minetest.get_node( pos ); + minetest.swap_node(pos, {name = "cottages:window_shutter_closed", param2 = old_node.param2}) + cottages_window_sutter_operate( pos, "cottages:window_shutter_open", "cottages:window_shutter_closed" ); + end + end +}) + + +------------------------------------------------------------------------------------------------------------------------------ +-- a half door; can be combined to a full door where the upper part can be operated seperately; usually found in barns/stables +------------------------------------------------------------------------------------------------------------------------------ +minetest.register_node("cottages:half_door", { + description = S("half door"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {"cottages_minimal_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.4, 0.48, 0.5, 0.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.4, 0.48, 0.5, 0.5}, + }, + }, + on_rightclick = function(pos, node, puncher) + local node2 = minetest.get_node( {x=pos.x,y=(pos.y+1),z=pos.z}); + + local param2 = node.param2; + if( param2%4 == 1) then param2 = param2+1; --2; + elseif( param2%4 == 2) then param2 = param2-1; --1; + elseif( param2%4 == 3) then param2 = param2-3; --0; + elseif( param2%4 == 0) then param2 = param2+3; --3; + end; + minetest.swap_node(pos, {name = "cottages:half_door", param2 = param2}) + -- if the node above consists of a door of the same type, open it as well + -- Note: doors beneath this one are not opened! It is a special feature of these doors that they can be opend partly + if( node2 ~= nil and node2.name == node.name and node2.param2==node.param2) then + minetest.swap_node( {x=pos.x,y=(pos.y+1),z=pos.z}, {name = "cottages:half_door", param2 = param2}) + end + end, + is_ground_content = false, +}) + + + +minetest.register_node("cottages:half_door_inverted", { + description = S("half door inverted"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {"cottages_minimal_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.48, 0.5, -0.4}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.48, 0.5, -0.4}, + }, + }, + on_rightclick = function(pos, node, puncher) + local node2 = minetest.get_node( {x=pos.x,y=(pos.y+1),z=pos.z}); + + local param2 = node.param2; + if( param2%4 == 1) then param2 = param2-1; --0; + elseif( param2%4 == 0) then param2 = param2+1; --1; + elseif( param2%4 == 2) then param2 = param2+1; --3; + elseif( param2%4 == 3) then param2 = param2-1; --2; + end; + minetest.swap_node(pos, {name = "cottages:half_door_inverted", param2 = param2}) + -- open upper parts of this door (if there are any) + if( node2 ~= nil and node2.name == node.name and node2.param2==node.param2) then + minetest.swap_node( {x=pos.x,y=(pos.y+1),z=pos.z}, {name = "cottages:half_door_inverted", param2 = param2}) + end + end, + is_ground_content = false, +}) + + + + +------------------------------------------------------------------------------------------------------------------------------ +-- this gate for fences solves the "where to store the opened gate" problem by dropping it to the floor in optened state +------------------------------------------------------------------------------------------------------------------------------ +minetest.register_node("cottages:gate_closed", { + description = S("closed fence gate"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {cottages.texture_furniture}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + { -0.85, -0.25, -0.02, 0.85, -0.05, 0.02}, + { -0.85, 0.15, -0.02, 0.85, 0.35, 0.02}, + + { -0.80, -0.05, -0.02, -0.60, 0.15, 0.02}, + { 0.60, -0.05, -0.02, 0.80, 0.15, 0.02}, + { -0.15, -0.05, -0.02, 0.15, 0.15, 0.02}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + { -0.85, -0.25, -0.1, 0.85, 0.35, 0.1}, + }, + }, + on_rightclick = function(pos, node, puncher) + minetest.swap_node(pos, {name = "cottages:gate_open", param2 = node.param2}) + end, + is_ground_content = false, +}) + + +minetest.register_node("cottages:gate_open", { + description = S("opened fence gate"), + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = {cottages.texture_furniture}, + paramtype = "light", + paramtype2 = "facedir", + drop = "cottages:gate_closed", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + node_box = { + type = "fixed", + fixed = { + { -0.85, -0.5, -0.25, 0.85, -0.46, -0.05}, + { -0.85, -0.5, 0.15, 0.85, -0.46, 0.35}, + + { -0.80, -0.5, -0.05, -0.60, -0.46, 0.15}, + { 0.60, -0.5, -0.05, 0.80, -0.46, 0.15}, + { -0.15, -0.5, -0.05, 0.15, -0.46, 0.15}, + + }, + }, + selection_box = { + type = "fixed", + fixed = { + { -0.85, -0.5, -0.25, 0.85, -0.3, 0.35}, + }, + }, + on_rightclick = function(pos, node, puncher) + minetest.swap_node(pos, {name = "cottages:gate_closed", param2 = node.param2}) + end, + is_ground_content = false, + drop = "cottages:gate_closed", +}) + + + +----------------------------------------------------------------------------------------------------------- +-- a hatch; nodebox definition taken from realtest +----------------------------------------------------------------------------------------------------------- + +-- hatches rotate around their axis +-- old facedir: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +new_facedirs = { 10,19, 4,13, 2,18,22,14,20,16, 0,12,11, 3, 7,21, 9,23, 5, 1, 8,15, 6,17}; + + +cottages.register_hatch = function( nodename, description, texture, receipe_item ) + + minetest.register_node( nodename, { + description = S(description), -- not that there are any other... + drawtype = "nodebox", + -- top, bottom, side1, side2, inner, outer + tiles = { texture }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + + node_box = { + type = "fixed", + fixed = { + {-0.49, -0.55, -0.49, -0.3, -0.45, 0.45}, +-- {-0.5, -0.55, 0.3, 0.3, -0.45, 0.5}, + {0.3, -0.55, -0.3, 0.49, -0.45, 0.45}, + {0.49, -0.55, -0.49, -0.3, -0.45, -0.3}, + {-0.075, -0.55, -0.3, 0.075, -0.45, 0.3}, + {-0.3, -0.55, -0.075, -0.075, -0.45, 0.075}, + {0.075, -0.55, -0.075, 0.3, -0.45, 0.075}, + + {-0.3, -0.55, 0.3, 0.3, -0.45, 0.45}, + + -- hinges + {-0.45,-0.530, 0.45, -0.15,-0.470, 0.525}, + { 0.15,-0.530, 0.45, 0.45,-0.470, 0.525}, + + -- handle + {-0.05,-0.60,-0.35, 0.05,-0.40,-0.45}, + }, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.55, -0.5, 0.5, -0.45, 0.5}, + }, + on_rightclick = function(pos, node, puncher) + + minetest.swap_node(pos, {name = node.name, param2 = new_facedirs[ node.param2+1 ]}) + end, + is_ground_content = false, + on_place = minetest.rotate_node, + }) + + minetest.register_craft({ + output = nodename, + recipe = { + { '', '', receipe_item }, + { receipe_item, cottages.craftitem_stick, '' }, + { '', '', '' }, + } + }) +end + + +-- further alternate hatch materials: wood, tree, copper_block +cottages.register_hatch( 'cottages:hatch_wood', 'wooden hatch', 'cottages_minimal_wood.png', cottages.craftitem_slab_wood ); +cottages.register_hatch( 'cottages:hatch_steel', 'metal hatch', 'cottages_steel_block.png', cottages.craftitem_steel ); + + + + +----------------------------------------------------------------------------------------------------------- +-- and now the crafting receipes: +----------------------------------------------------------------------------------------------------------- + +-- transform opend and closed shutters into each other for convenience +minetest.register_craft({ + output = "cottages:window_shutter_open", + recipe = { + {"cottages:window_shutter_closed" }, + } +}) + +minetest.register_craft({ + output = "cottages:window_shutter_closed", + recipe = { + {"cottages:window_shutter_open" }, + } +}) + +minetest.register_craft({ + output = "cottages:window_shutter_open", + recipe = { + {cottages.craftitem_wood, "", cottages.craftitem_wood }, + } +}) + +-- transform one half door into another +minetest.register_craft({ + output = "cottages:half_door", + recipe = { + {"cottages:half_door_inverted" }, + } +}) + +minetest.register_craft({ + output = "cottages:half_door_inverted", + recipe = { + {"cottages:half_door" }, + } +}) + +minetest.register_craft({ + output = "cottages:half_door 2", + recipe = { + {"", cottages.craftitem_wood, "" }, + {"", cottages.craftitem_door, "" }, + } +}) + + +-- transform open and closed versions into into another for convenience +minetest.register_craft({ + output = "cottages:gate_closed", + recipe = { + {"cottages:gate_open" }, + } +}) + +minetest.register_craft({ + output = "cottages:gate_open", + recipe = { + {"cottages:gate_closed"}, + } +}) + +minetest.register_craft({ + output = "cottages:gate_closed", + recipe = { + {cottages.craftitem_stick, cottages.craftitem_stick, cottages.craftitem_wood }, + } +}) + -- cgit v1.2.3