mirror of
https://github.com/D00Med/scifi_nodes.git
synced 2024-12-22 16:10:18 +01:00
Merge branch 'master' of Grossam/scifi_nodes into master
This commit is contained in:
commit
95b5171e09
18
README.md
18
README.md
@ -1,9 +1,18 @@
|
|||||||
|
![Scifi nodes][screenshot.png]
|
||||||
|
|
||||||
# scifi_nodes
|
# scifi_nodes
|
||||||
Minetest mod that adds scifi themed nodes
|
|
||||||
|
|
||||||
**Adding Recipes for the unfinished scifi_nodes**
|
Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets.
|
||||||
|
|
||||||
** Added support for stairsplus **
|
* 05/01/2019 : create aliases to deal with old namming policy un doors.lua
|
||||||
|
* 04/26/2019 :
|
||||||
|
* sliding doors now open with mesecon signal
|
||||||
|
* added blue sliding doors
|
||||||
|
* added digicode node
|
||||||
|
* changed ceiling lights recipe
|
||||||
|
* added some sounds
|
||||||
|
* Added Recipes for the unfinished scifi_nodes
|
||||||
|
* Added support for stairsplus
|
||||||
|
|
||||||
# Attributions
|
# Attributions
|
||||||
|
|
||||||
@ -12,3 +21,6 @@ CC BY-NC 3.0
|
|||||||
* scifi_nodes_door_mechanic.ogg primeval_polypod https://freesound.org/people/primeval_polypod/sounds/156507/
|
* scifi_nodes_door_mechanic.ogg primeval_polypod https://freesound.org/people/primeval_polypod/sounds/156507/
|
||||||
* scifi_nodes_digicode.ogg https://freesound.org/people/Robinhood76/sounds/94933/
|
* scifi_nodes_digicode.ogg https://freesound.org/people/Robinhood76/sounds/94933/
|
||||||
* scifi_nodes_switch.ogg http://soundbible.com/1950-Button-Push.html
|
* scifi_nodes_switch.ogg http://soundbible.com/1950-Button-Push.html
|
||||||
|
* scifi_nodes_palm_scanner.ogg https://freesound.org/people/THE_bizniss/sounds/39313/
|
||||||
|
* scifi_nodes_access_granted https://freesound.org/people/TheBuilder15/sounds/415762/
|
||||||
|
* scifi_nodes_access_refused https://freesound.org/people/RICHERlandTV/sounds/216090/
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
default
|
default
|
||||||
basic_materials
|
basic_materials
|
||||||
|
mesecons
|
||||||
xpanes?
|
xpanes?
|
||||||
moreblocks?
|
moreblocks?
|
||||||
mesecons?
|
|
||||||
mesecons_microcontroller?
|
mesecons_microcontroller?
|
||||||
mesecons_button?
|
mesecons_button?
|
||||||
mesecons_torch?
|
mesecons_torch?
|
||||||
mesecons_receiver?
|
mesecons_receiver?
|
||||||
dye?
|
dye?
|
||||||
|
|
||||||
|
188
doors.lua
188
doors.lua
@ -14,15 +14,32 @@
|
|||||||
-- will the authors be held liable for any damages arising from the use of this content.
|
-- will the authors be held liable for any damages arising from the use of this content.
|
||||||
|
|
||||||
|
|
||||||
|
-- Some aliases to deal with old namming policy --
|
||||||
|
minetest.register_alias("scifi_nodes:doors_1a","scifi_nodes:Doom_door_closed")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_1b","scifi_nodes:Doom_door_closed_top")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_1c","scifi_nodes:Doom_door_opened")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_1d","scifi_nodes:Doom_door_opened_top")
|
||||||
|
|
||||||
|
minetest.register_alias("scifi_nodes:doors_2a","scifi_nodes:black_door_closed")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_2b","scifi_nodes:black_door_closed_top")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_2c","scifi_nodes:black_door_opened")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_2d","scifi_nodes:black_door_opened_top")
|
||||||
|
|
||||||
|
minetest.register_alias("scifi_nodes:doors_3a","scifi_nodes:white_door_closed")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_3b","scifi_nodes:white_door_closed_top")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_3c","scifi_nodes:white_door_opened")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_3d","scifi_nodes:white_door_opened_top")
|
||||||
|
|
||||||
|
minetest.register_alias("scifi_nodes:doors_4a","scifi_nodes:green_door_closed")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_4b","scifi_nodes:green_door_closed_top")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_4c","scifi_nodes:green_door_opened")
|
||||||
|
minetest.register_alias("scifi_nodes:doors_4d","scifi_nodes:green_door_opened_top")
|
||||||
|
|
||||||
-- This table now uses named parameters and more convenient variables names
|
-- This table now uses named parameters and more convenient variables names
|
||||||
local doors = {
|
local doors = {
|
||||||
-- DOOM door {closed, closed top, opened, opened top, texture number, main ingredient, sound}
|
|
||||||
{base_name = "Doom", base_ingredient = "doors:door_obsidian_glass", sound = "scifi_nodes_door_mechanic"},
|
{base_name = "Doom", base_ingredient = "doors:door_obsidian_glass", sound = "scifi_nodes_door_mechanic"},
|
||||||
-- Black door
|
|
||||||
{base_name = "black", base_ingredient = "doors:door_steel", sound = "scifi_nodes_door_mechanic"},
|
{base_name = "black", base_ingredient = "doors:door_steel", sound = "scifi_nodes_door_mechanic"},
|
||||||
-- White door
|
|
||||||
{base_name = "white", base_ingredient = "doors:door_glass", sound = "scifi_nodes_door_normal"},
|
{base_name = "white", base_ingredient = "doors:door_glass", sound = "scifi_nodes_door_normal"},
|
||||||
-- Green door
|
|
||||||
{base_name = "green", base_ingredient = "doors:door_wood", sound = "scifi_nodes_door_mechanic"},
|
{base_name = "green", base_ingredient = "doors:door_wood", sound = "scifi_nodes_door_mechanic"},
|
||||||
{base_name = "blue", base_ingredient = "default:steel_block", sound = "scifi_nodes_door_normal"}
|
{base_name = "blue", base_ingredient = "default:steel_block", sound = "scifi_nodes_door_normal"}
|
||||||
}
|
}
|
||||||
@ -47,11 +64,12 @@ for _, current_door in ipairs(doors) do
|
|||||||
|
|
||||||
|
|
||||||
function onplace(itemstack, placer, pointed_thing)
|
function onplace(itemstack, placer, pointed_thing)
|
||||||
|
-- Is there room enough ?
|
||||||
local pos1 = pointed_thing.above
|
local pos1 = pointed_thing.above
|
||||||
local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z}
|
local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z}
|
||||||
pos2.y = pos2.y+1
|
pos2.y = pos2.y+1 -- 2 nodes above
|
||||||
if
|
|
||||||
|
|
||||||
|
if
|
||||||
not minetest.registered_nodes[minetest.get_node(pos1).name].buildable_to or
|
not minetest.registered_nodes[minetest.get_node(pos1).name].buildable_to or
|
||||||
not minetest.registered_nodes[minetest.get_node(pos2).name].buildable_to or
|
not minetest.registered_nodes[minetest.get_node(pos2).name].buildable_to or
|
||||||
not placer or
|
not placer or
|
||||||
@ -60,39 +78,47 @@ for _, current_door in ipairs(doors) do
|
|||||||
minetest.is_protected(pos2, placer:get_player_name()) then
|
minetest.is_protected(pos2, placer:get_player_name()) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local pt = pointed_thing.above
|
|
||||||
local pt2 = {x=pt.x, y=pt.y, z=pt.z}
|
|
||||||
pt2.y = pt2.y+1
|
|
||||||
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
|
|
||||||
local pt3 = {x=pt.x, y=pt.y, z=pt.z}
|
|
||||||
local p4 = 0
|
|
||||||
if p2 == 0 then
|
|
||||||
pt3.x = pt3.x-1
|
|
||||||
p4 = 2
|
|
||||||
elseif p2 == 1 then
|
|
||||||
pt3.z = pt3.z+1
|
|
||||||
p4 = 3
|
|
||||||
elseif p2 == 2 then
|
|
||||||
pt3.x = pt3.x+1
|
|
||||||
p4 = 0
|
|
||||||
elseif p2 == 3 then
|
|
||||||
pt3.z = pt3.z-1
|
|
||||||
p4 = 1
|
|
||||||
end
|
|
||||||
if minetest.get_node(pt3).name == closed then
|
|
||||||
minetest.set_node(pt, {name=closed, param2=p4})
|
|
||||||
minetest.set_node(pt2, {name=closed_top, param2=p4})
|
|
||||||
else
|
|
||||||
minetest.set_node(pt, {name=closed, param2=p2})
|
|
||||||
minetest.set_node(pt2, {name=closed_top, param2=p2})
|
|
||||||
end
|
|
||||||
itemstack:take_item(1)
|
|
||||||
|
|
||||||
|
local pt = pointed_thing.above
|
||||||
|
local pt2 = {x=pt.x, y=pt.y, z=pt.z}
|
||||||
|
pt2.y = pt2.y+1
|
||||||
|
-- Player look dir is converted to node rotation ?
|
||||||
|
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
|
||||||
|
-- Where to look for another door ?
|
||||||
|
local pt3 = {x=pt.x, y=pt.y, z=pt.z}
|
||||||
|
|
||||||
|
-- Door param2 depends of placer's look dir
|
||||||
|
local p4 = 0
|
||||||
|
if p2 == 0 then
|
||||||
|
pt3.x = pt3.x-1
|
||||||
|
p4 = 2
|
||||||
|
elseif p2 == 1 then
|
||||||
|
pt3.z = pt3.z+1
|
||||||
|
p4 = 3
|
||||||
|
elseif p2 == 2 then
|
||||||
|
pt3.x = pt3.x+1
|
||||||
|
p4 = 0
|
||||||
|
elseif p2 == 3 then
|
||||||
|
pt3.z = pt3.z-1
|
||||||
|
p4 = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- First door of a pair is already there
|
||||||
|
if minetest.get_node(pt3).name == closed then
|
||||||
|
minetest.set_node(pt, {name=closed, param2=p4,})
|
||||||
|
minetest.set_node(pt2, {name=closed_top, param2=p4})
|
||||||
|
-- Placed door is the first of a pair
|
||||||
|
else
|
||||||
|
minetest.set_node(pt, {name=closed, param2=p2,})
|
||||||
|
minetest.set_node(pt2, {name=closed_top, param2=p2})
|
||||||
|
end
|
||||||
|
|
||||||
|
itemstack:take_item(1)
|
||||||
return itemstack;
|
return itemstack;
|
||||||
end
|
end
|
||||||
|
|
||||||
function afterdestruct(pos, oldnode)
|
function afterdestruct(pos, oldnode)
|
||||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
|
||||||
end
|
end
|
||||||
|
|
||||||
function rightclick(pos, node, player, itemstack, pointed_thing)
|
function rightclick(pos, node, player, itemstack, pointed_thing)
|
||||||
@ -149,9 +175,7 @@ for _, current_door in ipairs(doors) do
|
|||||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=opened, param2=h.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=opened, param2=h.param2})
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=h.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=h.param2})
|
||||||
end
|
end
|
||||||
|
|
||||||
timer:start(3)
|
timer:start(3)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function afterplace(pos, placer, itemstack, pointed_thing)
|
function afterplace(pos, placer, itemstack, pointed_thing)
|
||||||
@ -175,86 +199,67 @@ for _, current_door in ipairs(doors) do
|
|||||||
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
|
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
|
||||||
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
|
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
|
||||||
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
|
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
|
||||||
|
|
||||||
|
|
||||||
minetest.set_node(pos, {name=closed, param2=node.param2})
|
|
||||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
|
|
||||||
|
|
||||||
if a.name == opened then
|
minetest.set_node(pos, {name=closed, param2=node.param2})
|
||||||
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
|
||||||
|
|
||||||
|
if a.name == opened then
|
||||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=closed, param2=a.param2})
|
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=closed, param2=a.param2})
|
||||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=closed_top, param2=a.param2})
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=closed_top, param2=a.param2})
|
||||||
end
|
end
|
||||||
if b.name == opened then
|
if b.name == opened then
|
||||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=closed, param2=b.param2})
|
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=closed, param2=b.param2})
|
||||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=closed_top, param2=b.param2})
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=closed_top, param2=b.param2})
|
||||||
end
|
end
|
||||||
if c.name == opened then
|
if c.name == opened then
|
||||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=closed, param2=c.param2})
|
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=closed, param2=c.param2})
|
||||||
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=c.param2})
|
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=c.param2})
|
||||||
end
|
end
|
||||||
if d.name == opened then
|
if d.name == opened then
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=closed, param2=d.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=closed, param2=d.param2})
|
||||||
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=d.param2})
|
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=d.param2})
|
||||||
end
|
end
|
||||||
if e.name == opened then
|
if e.name == opened then
|
||||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=closed, param2=e.param2})
|
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=closed, param2=e.param2})
|
||||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=e.param2})
|
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=e.param2})
|
||||||
end
|
end
|
||||||
if f.name == opened then
|
if f.name == opened then
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=closed, param2=f.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=closed, param2=f.param2})
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=f.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=f.param2})
|
||||||
|
end
|
||||||
|
if g.name == opened then
|
||||||
|
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=closed, param2=g.param2})
|
||||||
|
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=g.param2})
|
||||||
end
|
end
|
||||||
if g.name == opened then
|
if h.name == opened then
|
||||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=closed, param2=g.param2})
|
|
||||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=g.param2})
|
|
||||||
end
|
|
||||||
if h.name == opened then
|
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=closed, param2=h.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=closed, param2=h.param2})
|
||||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=h.param2})
|
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=h.param2})
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- allow doors opening on mesecon signal
|
local mesecons_doors_rules = {
|
||||||
-- from a pressure plate
|
|
||||||
local mesecons_door_def
|
|
||||||
--local mesecons_door_top_def
|
|
||||||
local mesecons_door_rules
|
|
||||||
--local mesecons_door_top_rules
|
|
||||||
if minetest.get_modpath("mesecons") then
|
|
||||||
mesecons_door_rules = {
|
|
||||||
-- get signal from pressure plate
|
-- get signal from pressure plate
|
||||||
{x=1, y=0, z=0},
|
|
||||||
{x=-1, y=0, z=0},
|
{x=-1, y=0, z=0},
|
||||||
{x=0, y=0, z=1},
|
{x=0, y=0, z=1},
|
||||||
{x=0, y=0, z=-1},
|
{x=0, y=0, z=-1},
|
||||||
|
{x=1, y=0, z=0},
|
||||||
-- get signal from wall mounted button
|
-- get signal from wall mounted button
|
||||||
{x=1, y=1, z=1},
|
|
||||||
{x=-1, y=1, z=1},
|
|
||||||
{x=1, y=1, z=-1},
|
|
||||||
{x=-1, y=1, z=-1},
|
{x=-1, y=1, z=-1},
|
||||||
|
{x=-1, y=1, z=1},
|
||||||
|
{x=0, y=1, z=-1},
|
||||||
|
{x=0, y=1, z=1},
|
||||||
|
{x=1, y=1, z=-1},
|
||||||
|
{x=1, y=1, z=1},
|
||||||
|
{x=-1, y=1, z=0},
|
||||||
|
{x=1, y=1, z=0},
|
||||||
}
|
}
|
||||||
mesecons_door_def = {
|
|
||||||
|
local mesecons_doors_def = {
|
||||||
effector = {
|
effector = {
|
||||||
action_on = rightclick,
|
action_on = rightclick,
|
||||||
rules = mesecons_door_rules
|
rules = mesecons_doors_rules
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
-- mesecons_door_top_rules = {
|
|
||||||
-- -- get signal switch or digicode
|
|
||||||
-- {x=1, y=0, z=1},
|
|
||||||
-- {x=-1, y=0, z=1},
|
|
||||||
-- {x=1, y=0, z=1},
|
|
||||||
-- {x=-1, y=0, z=-1},
|
|
||||||
-- -- get signal from door_bottom
|
|
||||||
-- {x=0, y=-1, z=0},
|
|
||||||
-- }
|
|
||||||
-- mesecons_door_top_def = {
|
|
||||||
-- conductor = {
|
|
||||||
-- rules = mesecons_door_top_rules
|
|
||||||
-- }
|
|
||||||
-- }
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node(closed, {
|
minetest.register_node(closed, {
|
||||||
description = current_door.base_name.." sliding door",
|
description = current_door.base_name.." sliding door",
|
||||||
@ -284,12 +289,10 @@ end
|
|||||||
{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}
|
{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = mesecons_door_def,
|
mesecons = mesecons_doors_def,
|
||||||
|
|
||||||
on_place = onplace,
|
on_place = onplace,
|
||||||
|
|
||||||
after_destruct = afterdestruct,
|
after_destruct = afterdestruct,
|
||||||
|
|
||||||
on_rightclick = rightclick,
|
on_rightclick = rightclick,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -318,7 +321,6 @@ end
|
|||||||
{0, 0, 0, 0, 0, 0},
|
{0, 0, 0, 0, 0, 0},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
-- mesecons = mesecons_door_top_def,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(opened, {
|
minetest.register_node(opened, {
|
||||||
|
4
mod.conf
4
mod.conf
@ -1,4 +1,4 @@
|
|||||||
name = scifi_nodes
|
name = scifi_nodes
|
||||||
description = A mod which the vegan kitchen to Minetest.
|
description = A mod which the vegan kitchen to Minetest.
|
||||||
depends = default,dye,basic_materials
|
depends = default,dye,basic_materials, mesecons
|
||||||
optional_depends = xpanes,moreblocks,mesecons,mesecons_microcontroller,mesecons_button,mesecons_torch,mesecons_receiver
|
optional_depends = xpanes,moreblocks,mesecons_microcontroller,mesecons_button,mesecons_torch,mesecons_receiver
|
||||||
|
Loading…
Reference in New Issue
Block a user