From 5bd33df1a31d5b1eef4319476a2e0d16db59eb99 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Fri, 30 Mar 2012 11:15:31 +0300 Subject: [PATCH] Add doors --- mods/doors/README.txt | 43 ++++++ mods/doors/depends.txt | 1 + mods/doors/init.lua | 205 ++++++++++++++++++++++++++ mods/doors/textures/door_wood.png | Bin 0 -> 166 bytes mods/doors/textures/door_wood_a.png | Bin 0 -> 245 bytes mods/doors/textures/door_wood_a_r.png | Bin 0 -> 249 bytes mods/doors/textures/door_wood_b.png | Bin 0 -> 216 bytes mods/doors/textures/door_wood_b_r.png | Bin 0 -> 216 bytes 8 files changed, 249 insertions(+) create mode 100644 mods/doors/README.txt create mode 100644 mods/doors/depends.txt create mode 100644 mods/doors/init.lua create mode 100644 mods/doors/textures/door_wood.png create mode 100644 mods/doors/textures/door_wood_a.png create mode 100644 mods/doors/textures/door_wood_a_r.png create mode 100644 mods/doors/textures/door_wood_b.png create mode 100644 mods/doors/textures/door_wood_b_r.png diff --git a/mods/doors/README.txt b/mods/doors/README.txt new file mode 100644 index 0000000..7655e86 --- /dev/null +++ b/mods/doors/README.txt @@ -0,0 +1,43 @@ +Minetest 0.4 mod: doors +======================== + +License of source code: +----------------------- +Original license text: +-- (c) 2011 Fernando Zapata +-- Code licensed under GNU GPLv3 +-- Content licensed under CC BY-SA 3.0 +-- 2012-01-08 11:03:57 + +There has been unsuccesful attempts to contact the original author. Thus, +based on the intentions of the author, it is assumed that this code is +distributable and modifiable under GPLv2+later, under which Minetest is +distributed. + +Modifications: + Copyright (C) 2012 celeron55, Perttu Ahola + +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. + +http://www.gnu.org/licenses/gpl-2.0.html + +License of media (textures and sounds) +-------------------------------------- +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +Authors of media files +----------------------- +Everything not listed in here: +Copyright (C) 2010-2012 celeron55, Perttu Ahola + +From the original zlpdoors mod by Fernando Zapata: + door_wood_a.png + door_wood_a_r.png + door_wood_b.png + door_wood_b_r.png + door_wood.png + diff --git a/mods/doors/depends.txt b/mods/doors/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/doors/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/doors/init.lua b/mods/doors/init.lua new file mode 100644 index 0000000..d8cd807 --- /dev/null +++ b/mods/doors/init.lua @@ -0,0 +1,205 @@ +-- Minetest 0.4 mod: doors +-- See README.txt for licensing and other information. +-------------------------------------------------------------------------------- + +local WALLMX = 3 +local WALLMZ = 5 +local WALLPX = 2 +local WALLPZ = 4 + +-------------------------------------------------------------------------------- + +minetest.register_alias('door', 'doors:door_wood') +minetest.register_alias('door_wood', 'doors:door_wood') + +minetest.register_node( 'doors:door_wood', { + description = 'Wooden Door', + drawtype = 'signlike', + tile_images = { 'door_wood.png' }, + inventory_image = 'door_wood.png', + wield_image = 'door_wood.png', + paramtype2 = 'wallmounted', + selection_box = { type = 'wallmounted' }, + groups = { choppy=2, dig_immediate=2 }, +}) + +minetest.register_craft( { + output = 'doors:door_wood', + recipe = { + { 'default:wood', 'default:wood' }, + { 'default:wood', 'default:wood' }, + { 'default:wood', 'default:wood' }, + }, +}) + +minetest.register_craft({ + type = 'fuel', + recipe = 'doors:door_wood', + burntime = 30, +}) + +minetest.register_node( 'doors:door_wood_a_c', { + Description = 'Top Closed Door', + drawtype = 'signlike', + tile_images = { 'door_wood_a.png' }, + inventory_image = 'door_wood_a.png', + paramtype = 'light', + paramtype2 = 'wallmounted', + walkable = true, + selection_box = { type = "wallmounted", }, + groups = { choppy=2, dig_immediate=2 }, + legacy_wallmounted = true, + drop = 'doors:door_wood', +}) + +minetest.register_node( 'doors:door_wood_b_c', { + Description = 'Bottom Closed Door', + drawtype = 'signlike', + tile_images = { 'door_wood_b.png' }, + inventory_image = 'door_wood_b.png', + paramtype = 'light', + paramtype2 = 'wallmounted', + walkable = true, + selection_box = { type = "wallmounted", }, + groups = { choppy=2, dig_immediate=2 }, + legacy_wallmounted = true, + drop = 'doors:door_wood', +}) + +minetest.register_node( 'doors:door_wood_a_o', { + Description = 'Top Open Door', + drawtype = 'signlike', + tile_images = { 'door_wood_a_r.png' }, + inventory_image = 'door_wood_a_r.png', + paramtype = 'light', + paramtype2 = 'wallmounted', + walkable = false, + selection_box = { type = "wallmounted", }, + groups = { choppy=2, dig_immediate=2 }, + legacy_wallmounted = true, + drop = 'doors:door_wood', +}) + +minetest.register_node( 'doors:door_wood_b_o', { + Description = 'Bottom Open Door', + drawtype = 'signlike', + tile_images = { 'door_wood_b_r.png' }, + inventory_image = 'door_wood_b_r.png', + paramtype = 'light', + paramtype2 = 'wallmounted', + walkable = false, + selection_box = { type = "wallmounted", }, + groups = { choppy=2, dig_immediate=2 }, + legacy_wallmounted = true, + drop = 'doors:door_wood', +}) + +-------------------------------------------------------------------------------- + +local round = function( n ) + if n >= 0 then + return math.floor( n + 0.5 ) + else + return math.ceil( n - 0.5 ) + end +end + +local on_door_placed = function( pos, node, placer ) + if node.name ~= 'doors:door_wood' then return end + + upos = { x = pos.x, y = pos.y - 1, z = pos.z } + apos = { x = pos.x, y = pos.y + 1, z = pos.z } + und = minetest.env:get_node( upos ) + abv = minetest.env:get_node( apos ) + + dir = placer:get_look_dir() + + if round( dir.x ) == 1 then + newparam = WALLPX + elseif round( dir.x ) == -1 then + newparam = WALLMX + elseif round( dir.z ) == 1 then + newparam = WALLPZ + elseif round( dir.z ) == -1 then + newparam = WALLMZ + end + + if und.name == 'air' then + minetest.env:add_node( pos, { name = 'doors:door_wood_a_c', param2 = newparam } ) + minetest.env:add_node( upos, { name = 'doors:door_wood_b_c', param2 = newparam } ) + elseif abv.name == 'air' then + minetest.env:add_node( pos, { name = 'doors:door_wood_b_c', param2 = newparam } ) + minetest.env:add_node( apos, { name = 'doors:door_wood_a_c', param2 = newparam } ) + else + minetest.env:remove_node( pos ) + placer:get_inventory():add_item( "main", 'doors:door_wood' ) + minetest.chat_send_player( placer:get_player_name(), 'not enough space' ) + end +end + +local on_door_punched = function( pos, node, puncher ) + if string.find( node.name, 'doors:door_wood' ) == nil then return end + + upos = { x = pos.x, y = pos.y - 1, z = pos.z } + apos = { x = pos.x, y = pos.y + 1, z = pos.z } + + if string.find( node.name, '_c', -2 ) ~= nil then + if node.param2 == WALLPX then + newparam = WALLMZ + elseif node.param2 == WALLMZ then + newparam = WALLMX + elseif node.param2 == WALLMX then + newparam = WALLPZ + elseif node.param2 == WALLPZ then + newparam = WALLPX + end + elseif string.find( node.name, '_o', -2 ) ~= nil then + if node.param2 == WALLMZ then + newparam = WALLPX + elseif node.param2 == WALLMX then + newparam = WALLMZ + elseif node.param2 == WALLPZ then + newparam = WALLMX + elseif node.param2 == WALLPX then + newparam = WALLPZ + end + end + + if ( node.name == 'doors:door_wood_a_c' ) then + minetest.env:add_node( pos, { name = 'doors:door_wood_a_o', param2 = newparam } ) + minetest.env:add_node( upos, { name = 'doors:door_wood_b_o', param2 = newparam } ) + + elseif ( node.name == 'doors:door_wood_b_c' ) then + minetest.env:add_node( pos, { name = 'doors:door_wood_b_o', param2 = newparam } ) + minetest.env:add_node( apos, { name = 'doors:door_wood_a_o', param2 = newparam } ) + + elseif ( node.name == 'doors:door_wood_a_o' ) then + minetest.env:add_node( pos, { name = 'doors:door_wood_a_c', param2 = newparam } ) + minetest.env:add_node( upos, { name = 'doors:door_wood_b_c', param2 = newparam } ) + + elseif ( node.name == 'doors:door_wood_b_o' ) then + minetest.env:add_node( pos, { name = 'doors:door_wood_b_c', param2 = newparam } ) + minetest.env:add_node( apos, { name = 'doors:door_wood_a_c', param2 = newparam } ) + + end +end + +local on_door_digged = function( pos, node, digger ) + upos = { x = pos.x, y = pos.y - 1, z = pos.z } + apos = { x = pos.x, y = pos.y + 1, z = pos.z } + + if ( node.name == 'doors:door_wood_a_c' ) or ( node.name == 'doors:door_wood_a_o' ) then + minetest.env:remove_node( upos ) + elseif ( node.name == 'doors:door_wood_b_c' ) or ( node.name == 'doors:door_wood_b_o' ) then + minetest.env:remove_node( apos ) + end +end + +-------------------------------------------------------------------------------- + +minetest.register_on_placenode( on_door_placed ) +minetest.register_on_punchnode( on_door_punched ) +minetest.register_on_dignode( on_door_digged ) + +-------------------------------------------------------------------------------- + diff --git a/mods/doors/textures/door_wood.png b/mods/doors/textures/door_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..120fc982f7aeb151b2c014678b205072b2b20907 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z>whS z;uvCaIyuFGd1+(Nf5{IGhr{m~&)M;JuHdosgG)Oi4zzebI`Z~?k9uBx`j)GLE{Vdq z3>zC*r?<3fJ+Gfpo{-bE*I^Rl5hk};E{_*~*O}t}cm-pLNki+TIVTPrIKaSQ{lQ>f V?!tYa85kHCJYD@<);T3K0RS1gKr;XU literal 0 HcmV?d00001 diff --git a/mods/doors/textures/door_wood_a.png b/mods/doors/textures/door_wood_a.png new file mode 100644 index 0000000000000000000000000000000000000000..1617b65938d2fca874f862977c4095a87264fcfb GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4h>9aTU z(tq;%KFO{AvG}`ynJ{x}!UNs}$M4c+u0Iw@9c?%qelIz+#ka;pEJKj{)1^f`{r8gn sKlk4ge%LgXUG5<3Vc91g-k44ofy`glX=O&z`&N| z?e4dxa0o2HU3NZ5R22vI=oYUop)eNNK8mbsQ5CkRp%`K{C#N&j?X4AJz451sMpXaynVm1(r0hx zrT^sjeUe-KWAS$ZGhyb|ga^C{j^CxtTz@Q*I@)kJ{9bZsi*JpIScV|?r%Q`?`tK$C tf9}60{F2Ej;c26LLD`OG8Dr!tJ3@!oa}5;OXk;vd$@?2>{R3Qi1>g literal 0 HcmV?d00001 diff --git a/mods/doors/textures/door_wood_b.png b/mods/doors/textures/door_wood_b.png new file mode 100644 index 0000000000000000000000000000000000000000..80d43151ca5e7f2c859354372348a5f24ed55387 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL7>k44ofy`glX=O&z`&N| z?e4k44ofy`glX=O&z`&N| z?e4@o!AlM@KPT~89m)SL54_{5#8Nkawf1lcl;J7G}g^cHp zvp!+@Z&P*tz<~n?jyNbuTs5#T*`RP-l~d};QddPo|0!%qL2@z-46&)AeGfPG8!|93 OFnGH9xvX