From f559f25e075e7bf8838328db29b68aa8e65b56bc Mon Sep 17 00:00:00 2001 From: Grossam Date: Mon, 22 Apr 2019 19:38:20 +0200 Subject: [PATCH 01/22] Switches collision bu corrected. Some sound added --- init.lua | 62 +++++++++++++++++++++++++++++++++++++-------------- nodeboxes.lua | 34 ++++++++++++++++++++-------- 2 files changed, 70 insertions(+), 26 deletions(-) diff --git a/init.lua b/init.lua index 99f451e..b20e570 100644 --- a/init.lua +++ b/init.lua @@ -129,7 +129,8 @@ minetest.register_node("scifi_nodes:rfloor", { paramtype = "light", paramtype2 = "facedir", light_source = 10, - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() }) minetest.register_node("scifi_nodes:bfloor", { @@ -140,7 +141,8 @@ minetest.register_node("scifi_nodes:bfloor", { paramtype = "light", paramtype2 = "facedir", light_source = 10, - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() }) @@ -156,7 +158,8 @@ minetest.register_node("scifi_nodes:stripes2", { "scifi_nodes_stripes2.png" }, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() }) minetest.register_node("scifi_nodes:gblock", { @@ -171,7 +174,8 @@ minetest.register_node("scifi_nodes:gblock", { "scifi_nodes_gblock.png" }, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}; + sounds = default.node_sound_metal_defaults() }) minetest.register_node("scifi_nodes:gblock2", { @@ -187,7 +191,8 @@ minetest.register_node("scifi_nodes:gblock2", { }, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() }) minetest.register_node("scifi_nodes:gblock3", { @@ -203,7 +208,8 @@ minetest.register_node("scifi_nodes:gblock3", { }, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() }) @@ -221,7 +227,8 @@ minetest.register_node("scifi_nodes:green_light", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:red_light", { @@ -237,7 +244,8 @@ minetest.register_node("scifi_nodes:red_light", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:discs", { @@ -252,7 +260,8 @@ minetest.register_node("scifi_nodes:discs", { "scifi_nodes_discs.png" }, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:disc", { @@ -279,6 +288,7 @@ minetest.register_node("scifi_nodes:blink", { paramtype = "light", groups = {cracky=1}, light_source = 5, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:black_lights", { @@ -290,6 +300,7 @@ minetest.register_node("scifi_nodes:black_lights", { }}, paramtype = "light", groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:black_screen", { @@ -302,6 +313,7 @@ minetest.register_node("scifi_nodes:black_screen", { paramtype = "light", groups = {cracky=1}, light_source = 1, + sounds = default.node_sound_stone_defaults() }) minetest.register_node("scifi_nodes:screen", { @@ -314,6 +326,7 @@ minetest.register_node("scifi_nodes:screen", { paramtype = "light", groups = {cracky=1}, light_source = 5, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:screen2", { @@ -326,6 +339,7 @@ minetest.register_node("scifi_nodes:screen2", { paramtype = "light", groups = {cracky=1}, light_source = 5, + sounds = default.node_sound_glass_defaults() }) @@ -343,7 +357,8 @@ minetest.register_node("scifi_nodes:white_pad", { }, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:white_base", { @@ -359,7 +374,8 @@ minetest.register_node("scifi_nodes:white_base", { }, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:grnpipe", { @@ -376,6 +392,7 @@ minetest.register_node("scifi_nodes:grnpipe", { paramtype = "light", paramtype2 = "facedir", groups = {cracky=1}, + sounds = default.node_sound_metal_defaults(), on_place = minetest.rotate_node }) @@ -394,6 +411,7 @@ minetest.register_node("scifi_nodes:grnpipe2", { paramtype = "light", paramtype2 = "facedir", groups = {cracky=1}, + sounds = default.node_sound_metal_defaults(), on_place = minetest.rotate_node }) @@ -410,6 +428,7 @@ minetest.register_node("scifi_nodes:octrng", { light_source = 10, groups = {cracky=2}, sounds = default.node_sound_glass_defaults(), + sounds = default.node_sound_glass_defaults(), }) minetest.register_node("scifi_nodes:octgrn", { @@ -440,6 +459,7 @@ minetest.register_node("scifi_nodes:octbl", { light_source = 10, groups = {cracky=2}, sounds = default.node_sound_glass_defaults(), + sounds = default.node_sound_glass_defaults(), }) minetest.register_node("scifi_nodes:octppl", { @@ -469,6 +489,7 @@ minetest.register_node("scifi_nodes:tower", { inventory_image = "scifi_nodes_tower.png", paramtype = "light", groups = {cracky=2}, + sounds = default.node_sound_metal_defaults() }) minetest.register_node("scifi_nodes:junk", { @@ -594,6 +615,7 @@ for _, row in ipairs(node.types) do paramtype = "light", paramtype2 = "facedir", light_source = light, + sounds = default.node_sound_glass_defaults() }) end @@ -782,7 +804,8 @@ minetest.register_node("scifi_nodes:blumetlight", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) @@ -794,7 +817,8 @@ minetest.register_node("scifi_nodes:lightstp", { }, light_source = default.LIGHT_MAX, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:blklt2", { @@ -805,7 +829,8 @@ minetest.register_node("scifi_nodes:blklt2", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:blumetstr", { @@ -816,7 +841,8 @@ minetest.register_node("scifi_nodes:blumetstr", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:glass", { @@ -828,7 +854,8 @@ minetest.register_node("scifi_nodes:glass", { }, use_texture_alpha = true, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) minetest.register_node("scifi_nodes:whtlightbnd", { @@ -839,7 +866,8 @@ minetest.register_node("scifi_nodes:whtlightbnd", { }, light_source = 10, paramtype = "light", - groups = {cracky=1} + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() }) --extra stuff diff --git a/nodeboxes.lua b/nodeboxes.lua index ebaa635..e862fc4 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -32,6 +32,7 @@ minetest.register_node("scifi_nodes:alienslope", { {-0.125, 0.375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox17 } }, + sounds = default.node_sound_wood_defaults(), on_place = minetest.rotate_node }) @@ -61,6 +62,7 @@ minetest.register_node("scifi_nodes:wallpipe", { {-0.5, -0.125, 0, 0.5, 0, 0.0625}, -- NodeBox24 } }, + sounds = default.node_sound_wood_defaults() }) minetest.register_node("scifi_nodes:plant_trap", { @@ -88,7 +90,8 @@ minetest.register_node("scifi_nodes:plant_trap", { {-0.0625, -0.5, -0.0625, 0, -0.4375, 0.375}, -- NodeBox27 {-0.0625, -0.5, 0.3125, 0, 0.5, 0.375}, -- NodeBox28 } - } + }, + sounds = default.node_sound_wood_defaults(), }) minetest.register_node("scifi_nodes:egg", { @@ -118,7 +121,8 @@ minetest.register_node("scifi_nodes:egg", { {-0.1875, 0.6875, -0.1875, 0.1875, 0.75, 0.1875}, -- NodeBox7 {-0.125, 0.75, -0.125, 0.125, 0.8125, 0.125}, -- NodeBox8 {-0.375, -0.3125, -0.4375, 0.375, 0.3125, 0.4375}, -- NodeBox9 - } + }, + sounds = default.node_sound_wood_defaults() } }) @@ -261,7 +265,8 @@ minetest.register_node("scifi_nodes:pad", { {-0.8125, -0.5, -0.875, 0.75, -0.375, 0.875}, -- NodeBox2 {-0.875, -0.5, -0.8125, 0.8125, -0.375, 0.8125}, -- NodeBox3 {-0.8125, -0.5, -0.75, 0.75, -0.3125, 0.75}, -- NodeBox4 - } + }, + sounds = default.node_sound_wood_defaults() } }) @@ -506,7 +511,8 @@ minetest.register_node("scifi_nodes:ladder", { {0.3125, -0.5, 0.3125, 0.4375, -0.375, 0.4375}, -- NodeBox24 {0.3125, -0.5, 0.0625, 0.4375, -0.375, 0.1875}, -- NodeBox25 {0.3125, -0.5, -0.1875, 0.4375, -0.375, -0.0625}, -- NodeBox26 - } + }, + sounds = default.node_sound_metal_defaults() }, paramtype2 = "wallmounted", walkable = false, @@ -631,6 +637,7 @@ minetest.register_node("scifi_nodes:cover", { {-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox6 } }, + sounds = default.node_sound_wood_defaults(), groups = {cracky=1, oddly_breakable_by_hand=1} }) @@ -735,6 +742,7 @@ minetest.register_node("scifi_nodes:table", { {-0.0625, 0.25, -0.125, 0.0625, 0.4375, -0.0625}, -- NodeBox7 } }, + sounds = default.node_sound_metal_defaults(), groups = {cracky=1} }) @@ -1209,9 +1217,11 @@ if (mesecon ~= nil) and wield_image = "scifi_nodes_switch_on.png", drawtype = "signlike", sunlight_propagates = true, + node_box = { + type = "wallmounted", + }, selection_box = { type = "wallmounted", - fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} }, paramtype = "light", paramtype2 = "wallmounted", @@ -1233,9 +1243,11 @@ if (mesecon ~= nil) and inventory_image = "scifi_nodes_switch_on.png", wield_image = "scifi_nodes_switch_on.png", drawtype = "signlike", + node_box = { + type = "wallmounted", + }, selection_box = { type = "wallmounted", - fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} }, paramtype = "light", paramtype2 = "wallmounted", @@ -1267,9 +1279,11 @@ else wield_image = "scifi_nodes_switch_on.png", drawtype = "signlike", sunlight_propagates = true, + node_box = { + type = "wallmounted", + }, selection_box = { type = "wallmounted", - fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} }, paramtype = "light", paramtype2 = "wallmounted", @@ -1289,9 +1303,11 @@ else inventory_image = "scifi_nodes_switch_on.png", wield_image = "scifi_nodes_switch_on.png", drawtype = "signlike", - selection_box = { + node_box = { + type = "wallmounted", + }, + selecion_box = { type = "wallmounted", - fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} }, paramtype = "light", paramtype2 = "wallmounted", From 643e3c40db6dbfa931744e70248795d7a06d3f99 Mon Sep 17 00:00:00 2001 From: Grossam Date: Tue, 23 Apr 2019 13:58:06 +0200 Subject: [PATCH 02/22] Corrected lightbar recipe --- crafts.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crafts.lua b/crafts.lua index 2e34836..b6dee67 100644 --- a/crafts.lua +++ b/crafts.lua @@ -96,11 +96,13 @@ minetest.register_craft({ } }) --- 6 ceiling light from 2 plastic and 1 trap super glow glass +-- 8 ceiling light from 2 plastic and 1 meselamp +-- Old recipe used "moreblocks:trap_super_glow_glass" +-- but moreblocks is an optional dependance minetest.register_craft({ - output = "scifi_nodes:lightbar 6", + output = "scifi_nodes:lightbar 8", recipe = { - {"scifi_nodes:white2", "moreblocks:trap_super_glow_glass", "scifi_nodes:white2"} + {"scifi_nodes:white2", "default:meselamp", "scifi_nodes:white2"} } }) From 5f2b22cd55687808514d5510cb5d1bb0d71ad5e5 Mon Sep 17 00:00:00 2001 From: Grossam Date: Tue, 23 Apr 2019 14:59:51 +0200 Subject: [PATCH 03/22] A little code tidying --- doors.lua | 218 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 113 insertions(+), 105 deletions(-) diff --git a/doors.lua b/doors.lua index 2186c6c..7dd7ed7 100644 --- a/doors.lua +++ b/doors.lua @@ -14,32 +14,37 @@ -- will the authors be held liable for any damages arising from the use of this content. +-- This table now uses named parameters and more convenient variables names local doors = { + -- DOOM door {closed, closed top, opened, opened top, texture number, main ingredient, sound} + {base_name = "Doom", tex_number = "1", base_ingredient = "doors:door_obsidian_glass", sound = "scifi_nodes_door_mechanic"}, -- Black door - {"scifi_nodes:door2a","scifi_nodes:door2b","scifi_nodes:door2c","scifi_nodes:door2d","2","black", "doors:door_steel", "scifi_nodes_door_mechanic"}, + {base_name = "black", tex_number = "2", base_ingredient = "doors:door_steel", sound = "scifi_nodes_door_mechanic"}, -- White door - {"scifi_nodes:door3a","scifi_nodes:door3b","scifi_nodes:door3c","scifi_nodes:door3d","3","white", "doors:door_glass", "scifi_nodes_door_normal"}, + {base_name = "white", tex_number = "3", base_ingredient = "doors:door_glass", sound = "scifi_nodes_door_normal"}, -- Green door - {"scifi_nodes:door4a","scifi_nodes:door4b","scifi_nodes:door4c","scifi_nodes:door4d","4","green", "doors:door_wood", "scifi_nodes_door_mechanic"}, - -- DOOM door - {"scifi_nodes:door1a","scifi_nodes:door1b","scifi_nodes:door1c","scifi_nodes:door1d","1","Doom", "doors:door_obsidian_glass", "scifi_nodes_door_mechanic"} + {base_name = "green", tex_number = "4", base_ingredient = "doors:door_wood", sound = "scifi_nodes_door_mechanic"}, } +-- Maybe useful later with mesecons_doors.meseconify_door() +function get_doors_list() + return doors +end + + for i in ipairs (doors) do --- TODO: make a map with entries: {a="", b="", desc="", etc} -local doora = doors[i][1] -local doorb = doors[i][2] -local doorc = doors[i][3] -local doord = doors[i][4] -local num = doors[i][5] -local des = doors[i][6] -local base_ingredient = doors[i][7] -local sound = doors[i][8] +local closed = "scifi_nodes:"..doors[i].base_name.."_door_closed" +local closed_top = "scifi_nodes:"..doors[i].base_name.."_door_closed_top" +local opened = "scifi_nodes:"..doors[i].base_name.."_door_opened" +local opened_top = "scifi_nodes:"..doors[i].base_name.."_door_opened_top" +local tex_number = doors[i].tex_number +local base_ingredient = doors[i].base_ingredient +local sound = doors[i].sound minetest.register_craft({ - output = doora .. " 2", + output = closed .. " 2", recipe = { {"scifi_nodes:white2", base_ingredient, "scifi_nodes:white2"}, {"scifi_nodes:black", base_ingredient, "scifi_nodes:black"} @@ -80,12 +85,12 @@ function onplace(itemstack, placer, pointed_thing) pt3.z = pt3.z-1 p4 = 1 end - if minetest.get_node(pt3).name == doora then - minetest.set_node(pt, {name=doora, param2=p4}) - minetest.set_node(pt2, {name=doorb, param2=p4}) + 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=doora, param2=p2}) - minetest.set_node(pt2, {name=doorb, param2=p2}) + minetest.set_node(pt, {name=closed, param2=p2}) + minetest.set_node(pt2, {name=closed_top, param2=p2}) end itemstack:take_item(1) @@ -115,40 +120,40 @@ function rightclick(pos, node, player, itemstack, pointed_thing) local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}) - minetest.set_node(pos, {name=doorc, param2=node.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doord, param2=node.param2}) + minetest.set_node(pos, {name=opened, param2=node.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2}) - if a.name == doora then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc, param2=a.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord, param2=a.param2}) + if a.name == closed then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=opened, param2=a.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=opened_top, param2=a.param2}) end - if b.name == doora then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc, param2=b.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord, param2=b.param2}) + if b.name == closed then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=opened, param2=b.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=opened_top, param2=b.param2}) end - if c.name == doora then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc, param2=c.param2}) - minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord, param2=c.param2}) + if c.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=opened, param2=c.param2}) + minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=c.param2}) end - if d.name == doora then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc, param2=d.param2}) - minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord, param2=d.param2}) + if d.name == closed then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=opened, param2=d.param2}) + minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=d.param2}) end - if e.name == doora then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=doorc, param2=e.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=doord, param2=e.param2}) + if e.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=opened, param2=e.param2}) + minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=e.param2}) end - if f.name == doora then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=doorc, param2=f.param2}) - minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=doord, param2=f.param2}) + if f.name == closed then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=opened, param2=f.param2}) + minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=f.param2}) end - if g.name == doora then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=doorc, param2=g.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=doord, param2=g.param2}) + if g.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=opened, param2=g.param2}) + minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=g.param2}) end - if h.name == doora then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=doorc, param2=h.param2}) - minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=doord, param2=h.param2}) + if h.name == closed then + 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}) end timer:start(3) @@ -156,7 +161,7 @@ function rightclick(pos, node, player, itemstack, pointed_thing) end function afterplace(pos, placer, itemstack, pointed_thing) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=doord,param2=nodeu.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=nodeu.param2}) end function ontimer(pos, elapsed) @@ -178,55 +183,55 @@ function ontimer(pos, elapsed) local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}) - minetest.set_node(pos, {name=doora, param2=node.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb, param2=node.param2}) + 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 == doorc then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora, param2=a.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb, param2=a.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+1,z=pos.z-1}, {name=closed_top, param2=a.param2}) end - if b.name == doorc then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora, param2=b.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb, param2=b.param2}) + 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+1,z=pos.z+1}, {name=closed_top, param2=b.param2}) end - if c.name == doorc then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora, param2=c.param2}) - minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb, param2=c.param2}) + 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+1,z=pos.z}, {name=closed_top, param2=c.param2}) end - if d.name == doorc then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora, param2=d.param2}) - minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb, param2=d.param2}) + 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+1,z=pos.z}, {name=closed_top, param2=d.param2}) end - if e.name == doorc then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=doora, param2=e.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=doorb, param2=e.param2}) + 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+1, z=pos.z-1}, {name=closed_top, param2=e.param2}) end - if f.name == doorc then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=doora, param2=f.param2}) - minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=doorb, param2=f.param2}) + 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+1, z=pos.z-1}, {name=closed_top, param2=f.param2}) end - if g.name == doorc then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=doora, param2=g.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=doorb, param2=g.param2}) + 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 - if h.name == doorc then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=doora, param2=h.param2}) - minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=doorb, param2=h.param2}) + 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+1, z=pos.z+1}, {name=closed_top, param2=h.param2}) end end -minetest.register_node(doora, { - description = des.." Sliding Door", - inventory_image = "scifi_nodes_door"..num.."a_inv.png", - wield_image = "scifi_nodes_door"..num.."a_inv.png", +minetest.register_node(closed, { + description = doors[i].base_name.." sliding door", + inventory_image = "scifi_nodes_door"..tex_number.."a_inv.png", + wield_image = "scifi_nodes_door"..tex_number.."a_inv.png", tiles = { - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_rbottom.png", - "scifi_nodes_door"..num.."a_bottom.png" + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_rbottom.png", + "scifi_nodes_door"..tex_number.."a_bottom.png" }, drawtype = "nodebox", paramtype = "light", @@ -251,14 +256,15 @@ after_destruct = afterdestruct, on_rightclick = rightclick, }) -minetest.register_node(doorb, { + +minetest.register_node(closed_top, { tiles = { - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_rtop.png", - "scifi_nodes_door"..num.."a_top.png" + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_rtop.png", + "scifi_nodes_door"..tex_number.."a_top.png" }, drawtype = "nodebox", paramtype = "light", @@ -277,19 +283,20 @@ minetest.register_node(doorb, { } }, }) -minetest.register_node(doorc, { + +minetest.register_node(opened, { tiles = { - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_rbottom0.png", - "scifi_nodes_door"..num.."a_bottom0.png" + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_rbottom0.png", + "scifi_nodes_door"..tex_number.."a_bottom0.png" }, drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", - drop = doora, + drop = closed, groups = {cracky = 1}, node_box = { type = "fixed", @@ -307,14 +314,15 @@ after_place_node = afterplace, after_destruct = afterdestruct, on_timer = ontimer, }) -minetest.register_node(doord, { + +minetest.register_node(opened_top, { tiles = { - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_edge.png", - "scifi_nodes_door"..num.."a_rtopo.png", - "scifi_nodes_door"..num.."a_topo.png" + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_edge.png", + "scifi_nodes_door"..tex_number.."a_rtopo.png", + "scifi_nodes_door"..tex_number.."a_topo.png" }, drawtype = "nodebox", paramtype = "light", From a20f090bf96ce58a004bfb7098dfd5ea4da84ef3 Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 24 Apr 2019 12:14:44 +0200 Subject: [PATCH 04/22] Changed texture namming policy. Added a door for testing. --- doors.lua | 91 ++++++++++-------- ...m.png => scifi_nodes_door_Doom_bottom.png} | Bin ....png => scifi_nodes_door_Doom_bottom0.png} | Bin ...dge.png => scifi_nodes_door_Doom_edge.png} | Bin ..._inv.png => scifi_nodes_door_Doom_inv.png} | Bin ....png => scifi_nodes_door_Doom_rbottom.png} | Bin ...png => scifi_nodes_door_Doom_rbottom0.png} | Bin ...top.png => scifi_nodes_door_Doom_rtop.png} | Bin ...po.png => scifi_nodes_door_Doom_rtopo.png} | Bin ..._top.png => scifi_nodes_door_Doom_top.png} | Bin ...opo.png => scifi_nodes_door_Doom_topo.png} | Bin ....png => scifi_nodes_door_black_bottom.png} | Bin ...png => scifi_nodes_door_black_bottom0.png} | Bin ...ge.png => scifi_nodes_door_black_edge.png} | Bin ...inv.png => scifi_nodes_door_black_inv.png} | Bin ...png => scifi_nodes_door_black_rbottom.png} | Bin ...ng => scifi_nodes_door_black_rbottom0.png} | Bin ...op.png => scifi_nodes_door_black_rtop.png} | Bin ...o.png => scifi_nodes_door_black_rtopo.png} | Bin ...top.png => scifi_nodes_door_black_top.png} | Bin ...po.png => scifi_nodes_door_black_topo.png} | Bin textures/scifi_nodes_door_blue_bottom.png | Bin 0 -> 238 bytes textures/scifi_nodes_door_blue_bottom0.png | Bin 0 -> 210 bytes textures/scifi_nodes_door_blue_edge.png | Bin 0 -> 128 bytes textures/scifi_nodes_door_blue_inv.png | Bin 0 -> 269 bytes textures/scifi_nodes_door_blue_rbottom.png | Bin 0 -> 219 bytes textures/scifi_nodes_door_blue_rbottom0.png | Bin 0 -> 209 bytes textures/scifi_nodes_door_blue_rtop.png | Bin 0 -> 264 bytes textures/scifi_nodes_door_blue_rtopo.png | Bin 0 -> 223 bytes textures/scifi_nodes_door_blue_top.png | Bin 0 -> 251 bytes textures/scifi_nodes_door_blue_topo.png | Bin 0 -> 204 bytes ....png => scifi_nodes_door_green_bottom.png} | Bin ...png => scifi_nodes_door_green_bottom0.png} | Bin ...ge.png => scifi_nodes_door_green_edge.png} | Bin ...inv.png => scifi_nodes_door_green_inv.png} | Bin ...png => scifi_nodes_door_green_rbottom.png} | Bin ...ng => scifi_nodes_door_green_rbottom0.png} | Bin ...op.png => scifi_nodes_door_green_rtop.png} | Bin ...o.png => scifi_nodes_door_green_rtopo.png} | Bin ...top.png => scifi_nodes_door_green_top.png} | Bin ...po.png => scifi_nodes_door_green_topo.png} | Bin ....png => scifi_nodes_door_white_bottom.png} | Bin ...png => scifi_nodes_door_white_bottom0.png} | Bin ...ge.png => scifi_nodes_door_white_edge.png} | Bin ...inv.png => scifi_nodes_door_white_inv.png} | Bin ...png => scifi_nodes_door_white_rbottom.png} | Bin ...ng => scifi_nodes_door_white_rbottom0.png} | Bin ...op.png => scifi_nodes_door_white_rtop.png} | Bin ...o.png => scifi_nodes_door_white_rtopo.png} | Bin ...top.png => scifi_nodes_door_white_top.png} | Bin ...po.png => scifi_nodes_door_white_topo.png} | Bin 51 files changed, 52 insertions(+), 39 deletions(-) rename textures/{scifi_nodes_door1a_bottom.png => scifi_nodes_door_Doom_bottom.png} (100%) rename textures/{scifi_nodes_door1a_bottom0.png => scifi_nodes_door_Doom_bottom0.png} (100%) rename textures/{scifi_nodes_door1a_edge.png => scifi_nodes_door_Doom_edge.png} (100%) rename textures/{scifi_nodes_door1a_inv.png => scifi_nodes_door_Doom_inv.png} (100%) rename textures/{scifi_nodes_door1a_rbottom.png => scifi_nodes_door_Doom_rbottom.png} (100%) rename textures/{scifi_nodes_door1a_rbottom0.png => scifi_nodes_door_Doom_rbottom0.png} (100%) rename textures/{scifi_nodes_door1a_rtop.png => scifi_nodes_door_Doom_rtop.png} (100%) rename textures/{scifi_nodes_door1a_rtopo.png => scifi_nodes_door_Doom_rtopo.png} (100%) rename textures/{scifi_nodes_door1a_top.png => scifi_nodes_door_Doom_top.png} (100%) rename textures/{scifi_nodes_door1a_topo.png => scifi_nodes_door_Doom_topo.png} (100%) rename textures/{scifi_nodes_door2a_bottom.png => scifi_nodes_door_black_bottom.png} (100%) rename textures/{scifi_nodes_door2a_bottom0.png => scifi_nodes_door_black_bottom0.png} (100%) rename textures/{scifi_nodes_door2a_edge.png => scifi_nodes_door_black_edge.png} (100%) rename textures/{scifi_nodes_door2a_inv.png => scifi_nodes_door_black_inv.png} (100%) rename textures/{scifi_nodes_door2a_rbottom.png => scifi_nodes_door_black_rbottom.png} (100%) rename textures/{scifi_nodes_door2a_rbottom0.png => scifi_nodes_door_black_rbottom0.png} (100%) rename textures/{scifi_nodes_door2a_rtop.png => scifi_nodes_door_black_rtop.png} (100%) rename textures/{scifi_nodes_door2a_rtopo.png => scifi_nodes_door_black_rtopo.png} (100%) rename textures/{scifi_nodes_door2a_top.png => scifi_nodes_door_black_top.png} (100%) rename textures/{scifi_nodes_door2a_topo.png => scifi_nodes_door_black_topo.png} (100%) create mode 100644 textures/scifi_nodes_door_blue_bottom.png create mode 100644 textures/scifi_nodes_door_blue_bottom0.png create mode 100644 textures/scifi_nodes_door_blue_edge.png create mode 100644 textures/scifi_nodes_door_blue_inv.png create mode 100644 textures/scifi_nodes_door_blue_rbottom.png create mode 100644 textures/scifi_nodes_door_blue_rbottom0.png create mode 100644 textures/scifi_nodes_door_blue_rtop.png create mode 100644 textures/scifi_nodes_door_blue_rtopo.png create mode 100644 textures/scifi_nodes_door_blue_top.png create mode 100644 textures/scifi_nodes_door_blue_topo.png rename textures/{scifi_nodes_door4a_bottom.png => scifi_nodes_door_green_bottom.png} (100%) rename textures/{scifi_nodes_door4a_bottom0.png => scifi_nodes_door_green_bottom0.png} (100%) rename textures/{scifi_nodes_door4a_edge.png => scifi_nodes_door_green_edge.png} (100%) rename textures/{scifi_nodes_door4a_inv.png => scifi_nodes_door_green_inv.png} (100%) rename textures/{scifi_nodes_door4a_rbottom.png => scifi_nodes_door_green_rbottom.png} (100%) rename textures/{scifi_nodes_door4a_rbottom0.png => scifi_nodes_door_green_rbottom0.png} (100%) rename textures/{scifi_nodes_door4a_top.png => scifi_nodes_door_green_rtop.png} (100%) rename textures/{scifi_nodes_door4a_rtopo.png => scifi_nodes_door_green_rtopo.png} (100%) rename textures/{scifi_nodes_door4a_rtop.png => scifi_nodes_door_green_top.png} (100%) rename textures/{scifi_nodes_door4a_topo.png => scifi_nodes_door_green_topo.png} (100%) rename textures/{scifi_nodes_door3a_bottom.png => scifi_nodes_door_white_bottom.png} (100%) rename textures/{scifi_nodes_door3a_bottom0.png => scifi_nodes_door_white_bottom0.png} (100%) rename textures/{scifi_nodes_door3a_edge.png => scifi_nodes_door_white_edge.png} (100%) rename textures/{scifi_nodes_door3a_inv.png => scifi_nodes_door_white_inv.png} (100%) rename textures/{scifi_nodes_door3a_rbottom.png => scifi_nodes_door_white_rbottom.png} (100%) rename textures/{scifi_nodes_door3a_rbottom0.png => scifi_nodes_door_white_rbottom0.png} (100%) rename textures/{scifi_nodes_door3a_rtop.png => scifi_nodes_door_white_rtop.png} (100%) rename textures/{scifi_nodes_door3a_rtopo.png => scifi_nodes_door_white_rtopo.png} (100%) rename textures/{scifi_nodes_door3a_top.png => scifi_nodes_door_white_top.png} (100%) rename textures/{scifi_nodes_door3a_topo.png => scifi_nodes_door_white_topo.png} (100%) diff --git a/doors.lua b/doors.lua index 7dd7ed7..173bb52 100644 --- a/doors.lua +++ b/doors.lua @@ -17,13 +17,14 @@ -- This table now uses named parameters and more convenient variables names local doors = { -- DOOM door {closed, closed top, opened, opened top, texture number, main ingredient, sound} - {base_name = "Doom", tex_number = "1", 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", tex_number = "2", 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", tex_number = "3", 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", tex_number = "4", 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"} } @@ -33,15 +34,15 @@ function get_doors_list() end -for i in ipairs (doors) do +for _, current_door in ipairs(doors) do -local closed = "scifi_nodes:"..doors[i].base_name.."_door_closed" -local closed_top = "scifi_nodes:"..doors[i].base_name.."_door_closed_top" -local opened = "scifi_nodes:"..doors[i].base_name.."_door_opened" -local opened_top = "scifi_nodes:"..doors[i].base_name.."_door_opened_top" -local tex_number = doors[i].tex_number -local base_ingredient = doors[i].base_ingredient -local sound = doors[i].sound +local closed = "scifi_nodes:"..current_door.base_name.."_door_closed" +local closed_top = "scifi_nodes:"..current_door.base_name.."_door_closed_top" +local opened = "scifi_nodes:"..current_door.base_name.."_door_opened" +local opened_top = "scifi_nodes:"..current_door.base_name.."_door_opened_top" +local base_name = current_door.base_name +local base_ingredient = current_door.base_ingredient +local sound = current_door.sound minetest.register_craft({ output = closed .. " 2", @@ -222,16 +223,16 @@ function ontimer(pos, elapsed) end minetest.register_node(closed, { - description = doors[i].base_name.." sliding door", - inventory_image = "scifi_nodes_door"..tex_number.."a_inv.png", - wield_image = "scifi_nodes_door"..tex_number.."a_inv.png", + description = current_door.base_name.." sliding door", + inventory_image = "scifi_nodes_door_"..base_name.."_inv.png", + wield_image = "scifi_nodes_door_"..base_name.."_inv.png", tiles = { - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_rbottom.png", - "scifi_nodes_door"..tex_number.."a_bottom.png" + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rbottom.png", + "scifi_nodes_door_"..base_name.."_bottom.png" }, drawtype = "nodebox", paramtype = "light", @@ -249,6 +250,18 @@ minetest.register_node(closed, { {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} } }, + mesecon = { + effector = { + action_on = function (pos, node) + minetest.sound_play(sound, { + max_hear_distance = 16, + pos = pos, + gain = 1.0 + }) + end, + rules = mesecon.rules.pplate + }, + }, on_place = onplace, @@ -259,12 +272,12 @@ on_rightclick = rightclick, minetest.register_node(closed_top, { tiles = { - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_rtop.png", - "scifi_nodes_door"..tex_number.."a_top.png" + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rtop.png", + "scifi_nodes_door_"..base_name.."_top.png" }, drawtype = "nodebox", paramtype = "light", @@ -286,12 +299,12 @@ minetest.register_node(closed_top, { minetest.register_node(opened, { tiles = { - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_rbottom0.png", - "scifi_nodes_door"..tex_number.."a_bottom0.png" + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rbottom0.png", + "scifi_nodes_door_"..base_name.."_bottom0.png" }, drawtype = "nodebox", paramtype = "light", @@ -317,12 +330,12 @@ on_timer = ontimer, minetest.register_node(opened_top, { tiles = { - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_edge.png", - "scifi_nodes_door"..tex_number.."a_rtopo.png", - "scifi_nodes_door"..tex_number.."a_topo.png" + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rtopo.png", + "scifi_nodes_door_"..base_name.."_topo.png" }, drawtype = "nodebox", paramtype = "light", diff --git a/textures/scifi_nodes_door1a_bottom.png b/textures/scifi_nodes_door_Doom_bottom.png similarity index 100% rename from textures/scifi_nodes_door1a_bottom.png rename to textures/scifi_nodes_door_Doom_bottom.png diff --git a/textures/scifi_nodes_door1a_bottom0.png b/textures/scifi_nodes_door_Doom_bottom0.png similarity index 100% rename from textures/scifi_nodes_door1a_bottom0.png rename to textures/scifi_nodes_door_Doom_bottom0.png diff --git a/textures/scifi_nodes_door1a_edge.png b/textures/scifi_nodes_door_Doom_edge.png similarity index 100% rename from textures/scifi_nodes_door1a_edge.png rename to textures/scifi_nodes_door_Doom_edge.png diff --git a/textures/scifi_nodes_door1a_inv.png b/textures/scifi_nodes_door_Doom_inv.png similarity index 100% rename from textures/scifi_nodes_door1a_inv.png rename to textures/scifi_nodes_door_Doom_inv.png diff --git a/textures/scifi_nodes_door1a_rbottom.png b/textures/scifi_nodes_door_Doom_rbottom.png similarity index 100% rename from textures/scifi_nodes_door1a_rbottom.png rename to textures/scifi_nodes_door_Doom_rbottom.png diff --git a/textures/scifi_nodes_door1a_rbottom0.png b/textures/scifi_nodes_door_Doom_rbottom0.png similarity index 100% rename from textures/scifi_nodes_door1a_rbottom0.png rename to textures/scifi_nodes_door_Doom_rbottom0.png diff --git a/textures/scifi_nodes_door1a_rtop.png b/textures/scifi_nodes_door_Doom_rtop.png similarity index 100% rename from textures/scifi_nodes_door1a_rtop.png rename to textures/scifi_nodes_door_Doom_rtop.png diff --git a/textures/scifi_nodes_door1a_rtopo.png b/textures/scifi_nodes_door_Doom_rtopo.png similarity index 100% rename from textures/scifi_nodes_door1a_rtopo.png rename to textures/scifi_nodes_door_Doom_rtopo.png diff --git a/textures/scifi_nodes_door1a_top.png b/textures/scifi_nodes_door_Doom_top.png similarity index 100% rename from textures/scifi_nodes_door1a_top.png rename to textures/scifi_nodes_door_Doom_top.png diff --git a/textures/scifi_nodes_door1a_topo.png b/textures/scifi_nodes_door_Doom_topo.png similarity index 100% rename from textures/scifi_nodes_door1a_topo.png rename to textures/scifi_nodes_door_Doom_topo.png diff --git a/textures/scifi_nodes_door2a_bottom.png b/textures/scifi_nodes_door_black_bottom.png similarity index 100% rename from textures/scifi_nodes_door2a_bottom.png rename to textures/scifi_nodes_door_black_bottom.png diff --git a/textures/scifi_nodes_door2a_bottom0.png b/textures/scifi_nodes_door_black_bottom0.png similarity index 100% rename from textures/scifi_nodes_door2a_bottom0.png rename to textures/scifi_nodes_door_black_bottom0.png diff --git a/textures/scifi_nodes_door2a_edge.png b/textures/scifi_nodes_door_black_edge.png similarity index 100% rename from textures/scifi_nodes_door2a_edge.png rename to textures/scifi_nodes_door_black_edge.png diff --git a/textures/scifi_nodes_door2a_inv.png b/textures/scifi_nodes_door_black_inv.png similarity index 100% rename from textures/scifi_nodes_door2a_inv.png rename to textures/scifi_nodes_door_black_inv.png diff --git a/textures/scifi_nodes_door2a_rbottom.png b/textures/scifi_nodes_door_black_rbottom.png similarity index 100% rename from textures/scifi_nodes_door2a_rbottom.png rename to textures/scifi_nodes_door_black_rbottom.png diff --git a/textures/scifi_nodes_door2a_rbottom0.png b/textures/scifi_nodes_door_black_rbottom0.png similarity index 100% rename from textures/scifi_nodes_door2a_rbottom0.png rename to textures/scifi_nodes_door_black_rbottom0.png diff --git a/textures/scifi_nodes_door2a_rtop.png b/textures/scifi_nodes_door_black_rtop.png similarity index 100% rename from textures/scifi_nodes_door2a_rtop.png rename to textures/scifi_nodes_door_black_rtop.png diff --git a/textures/scifi_nodes_door2a_rtopo.png b/textures/scifi_nodes_door_black_rtopo.png similarity index 100% rename from textures/scifi_nodes_door2a_rtopo.png rename to textures/scifi_nodes_door_black_rtopo.png diff --git a/textures/scifi_nodes_door2a_top.png b/textures/scifi_nodes_door_black_top.png similarity index 100% rename from textures/scifi_nodes_door2a_top.png rename to textures/scifi_nodes_door_black_top.png diff --git a/textures/scifi_nodes_door2a_topo.png b/textures/scifi_nodes_door_black_topo.png similarity index 100% rename from textures/scifi_nodes_door2a_topo.png rename to textures/scifi_nodes_door_black_topo.png diff --git a/textures/scifi_nodes_door_blue_bottom.png b/textures/scifi_nodes_door_blue_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..04a45e04ffee47e0eb2f12617c6470da4552e061 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#F^dEjr;@2msyk4q*VDx@MB{vN&g|W14m^xbT6{|TZ7h7&ketUc)B z9_iwgc6?rQf#9*oX#Isdg{J!}*7AMu`%&@xB8N5 zsYRs^nnZWAZJD5Uzs)%O-J*#ByfZFxGQPjR$3F?hQAxvX{MQ+!J^e xk1B}h->LXF*D=JY?clY5sfpLFdAmq5Feq0kURl;-19S=lgQu&X%Q~loCIAkgL0$j= literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_edge.png b/textures/scifi_nodes_door_blue_edge.png new file mode 100644 index 0000000000000000000000000000000000000000..2d560db11560bcc9a3755135e0a05f33291d8543 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI^MS@et;B%Od6HtiP)5S4_<9hOre{X)*GjK96Z+Wre R#aW;PgQu&X%Q~loCIGf{AY}jm literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_inv.png b/textures/scifi_nodes_door_blue_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..83285bfe64ecc25593ce58598897deed124ec63a GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-iv*`UpQIF%7EoxGr;B5V#p&b}2j=H;b$|bVIP2f` zTHMbdfjRVKT+fLbu@Y8;v$NR5BxY@tJk{bmaakj4^BxXs5I+1`-2Z`z*?}Vt3^QJ6 z7#jdVhu4V-=?sbvQy70RO>K=hdxL3eivEf24g3KT3f1jT3?_&trY9I|I3U^KbL7|D zCk`!^;zopr E0JOYYP5=M^ literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_rbottom.png b/textures/scifi_nodes_door_blue_rbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1920318856596afc2664fcb60ed81d8125ed9855 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#F^dEjr*Zrm*R4RIDo+>35RLQ6Hs3#JGxNN;Q5@jnbj-zlCL{Zejn5T?nL8Vp zcvlWEz&v8rvx38uhP2M#z~$XUUAM0@Ft%SRZ5WmBt;G1oD02Dh{shre4i zktL_%|1(vo&P*GXFOs*P<$W&Lc>J-@7MBA`N{Y>=dGq6J4*KXb9BMbNViugT3Frz2 MPgg&ebxsLQ0EwbUVE_OC literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_rbottom0.png b/textures/scifi_nodes_door_blue_rbottom0.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc4b070699432baade9e0d97f66143ca0d0f97a GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-iv*_p?T zzr+j)4HoAc4cGPO8QhRs)%U_60SI<{{PR2DE0Ycv`!QC7+xa&C&m8~(r!F@(Ha3y7 rJV4NMBxByzuR_gh7rv@b=`~d{XE z)7O>#F^dEjm&U&*_h$ixmV3H5hG?8m&Y8Wtm(g5c;)KM61cQr#ZQUCT3=ArE+<1Ix zL-Kh?HnuinkE)0VMd|DAv`Vn0A2@q!<8y@=e&HDBCI3V>vzngZvG`E1vHtTT&X(Q_ zA0FQ|G+~o!xY1K^>CNRh9yuO44;~Y51-@iQF{k7NRv#V}re7Hr#ZUEASUMPWczAdw z7}zz>VkuxeR?NTuP;g^M3s0S`^*5Omr*6Ndyv4N|j0`oqoo>q=dz}MxGJ~h9pUXO@ GgeCxh$60Ow literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_rtopo.png b/textures/scifi_nodes_door_blue_rtopo.png new file mode 100644 index 0000000000000000000000000000000000000000..4651bc6c7a3d33c9fa702bfaaa6abb960b3d6405 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-iv*{R(9Z(vP@qtbr;B5V#p&b}1*R=$?;d;bFzNsN z#>U2n4`h& z(qkW^0YfosB%4BYYmRupo7O<)6CS5tpWpYpU$5-%q0WZ_Yzz{*GLbhYuQ~{{m%-E3 K&t;ucLK6UN7)vGq literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_top.png b/textures/scifi_nodes_door_blue_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0f007f533f039b30d5ee2b195196b912c823df7a GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#F^dEjmzaI)Aw!_hEKe855RLQ6Hs3#JGxN;ZSv0+|@!{ESb)FrJ+?%pGg80R& zV^)>Fu{_bVMk-SCh?%f#ss*#sIhKVNLW~UzX6UZyyt2RPj6+7lj7HA7J=Sf<5`e(0 ztoMM)yvD{v>&Y*6rmxcS;woTcWh`XM6k(U}8{`4>}}m5UvJvC4;A{pUXO@geCxX{Y_N> literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door_blue_topo.png b/textures/scifi_nodes_door_blue_topo.png new file mode 100644 index 0000000000000000000000000000000000000000..07f951d3967dc0aea0cf43220ad4898a579317bc GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-iv*_*)05-chCrc6PZ!4!i_^(5_22H+v#BWPA3Apc z2sR|2cRaQ#MW4;7fi?DXpDnwj1Q2vw>`7wq*}SZgm07ca^O%CW@g0U4`%g0ZJh75J o%$>43;R=J6goCFD-(&-zV|BzDHqZRQ4YY*8)78&qol`;+0Kcw0lK=n! literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_door4a_bottom.png b/textures/scifi_nodes_door_green_bottom.png similarity index 100% rename from textures/scifi_nodes_door4a_bottom.png rename to textures/scifi_nodes_door_green_bottom.png diff --git a/textures/scifi_nodes_door4a_bottom0.png b/textures/scifi_nodes_door_green_bottom0.png similarity index 100% rename from textures/scifi_nodes_door4a_bottom0.png rename to textures/scifi_nodes_door_green_bottom0.png diff --git a/textures/scifi_nodes_door4a_edge.png b/textures/scifi_nodes_door_green_edge.png similarity index 100% rename from textures/scifi_nodes_door4a_edge.png rename to textures/scifi_nodes_door_green_edge.png diff --git a/textures/scifi_nodes_door4a_inv.png b/textures/scifi_nodes_door_green_inv.png similarity index 100% rename from textures/scifi_nodes_door4a_inv.png rename to textures/scifi_nodes_door_green_inv.png diff --git a/textures/scifi_nodes_door4a_rbottom.png b/textures/scifi_nodes_door_green_rbottom.png similarity index 100% rename from textures/scifi_nodes_door4a_rbottom.png rename to textures/scifi_nodes_door_green_rbottom.png diff --git a/textures/scifi_nodes_door4a_rbottom0.png b/textures/scifi_nodes_door_green_rbottom0.png similarity index 100% rename from textures/scifi_nodes_door4a_rbottom0.png rename to textures/scifi_nodes_door_green_rbottom0.png diff --git a/textures/scifi_nodes_door4a_top.png b/textures/scifi_nodes_door_green_rtop.png similarity index 100% rename from textures/scifi_nodes_door4a_top.png rename to textures/scifi_nodes_door_green_rtop.png diff --git a/textures/scifi_nodes_door4a_rtopo.png b/textures/scifi_nodes_door_green_rtopo.png similarity index 100% rename from textures/scifi_nodes_door4a_rtopo.png rename to textures/scifi_nodes_door_green_rtopo.png diff --git a/textures/scifi_nodes_door4a_rtop.png b/textures/scifi_nodes_door_green_top.png similarity index 100% rename from textures/scifi_nodes_door4a_rtop.png rename to textures/scifi_nodes_door_green_top.png diff --git a/textures/scifi_nodes_door4a_topo.png b/textures/scifi_nodes_door_green_topo.png similarity index 100% rename from textures/scifi_nodes_door4a_topo.png rename to textures/scifi_nodes_door_green_topo.png diff --git a/textures/scifi_nodes_door3a_bottom.png b/textures/scifi_nodes_door_white_bottom.png similarity index 100% rename from textures/scifi_nodes_door3a_bottom.png rename to textures/scifi_nodes_door_white_bottom.png diff --git a/textures/scifi_nodes_door3a_bottom0.png b/textures/scifi_nodes_door_white_bottom0.png similarity index 100% rename from textures/scifi_nodes_door3a_bottom0.png rename to textures/scifi_nodes_door_white_bottom0.png diff --git a/textures/scifi_nodes_door3a_edge.png b/textures/scifi_nodes_door_white_edge.png similarity index 100% rename from textures/scifi_nodes_door3a_edge.png rename to textures/scifi_nodes_door_white_edge.png diff --git a/textures/scifi_nodes_door3a_inv.png b/textures/scifi_nodes_door_white_inv.png similarity index 100% rename from textures/scifi_nodes_door3a_inv.png rename to textures/scifi_nodes_door_white_inv.png diff --git a/textures/scifi_nodes_door3a_rbottom.png b/textures/scifi_nodes_door_white_rbottom.png similarity index 100% rename from textures/scifi_nodes_door3a_rbottom.png rename to textures/scifi_nodes_door_white_rbottom.png diff --git a/textures/scifi_nodes_door3a_rbottom0.png b/textures/scifi_nodes_door_white_rbottom0.png similarity index 100% rename from textures/scifi_nodes_door3a_rbottom0.png rename to textures/scifi_nodes_door_white_rbottom0.png diff --git a/textures/scifi_nodes_door3a_rtop.png b/textures/scifi_nodes_door_white_rtop.png similarity index 100% rename from textures/scifi_nodes_door3a_rtop.png rename to textures/scifi_nodes_door_white_rtop.png diff --git a/textures/scifi_nodes_door3a_rtopo.png b/textures/scifi_nodes_door_white_rtopo.png similarity index 100% rename from textures/scifi_nodes_door3a_rtopo.png rename to textures/scifi_nodes_door_white_rtopo.png diff --git a/textures/scifi_nodes_door3a_top.png b/textures/scifi_nodes_door_white_top.png similarity index 100% rename from textures/scifi_nodes_door3a_top.png rename to textures/scifi_nodes_door_white_top.png diff --git a/textures/scifi_nodes_door3a_topo.png b/textures/scifi_nodes_door_white_topo.png similarity index 100% rename from textures/scifi_nodes_door3a_topo.png rename to textures/scifi_nodes_door_white_topo.png From ac4f79ccd2885098f7fd0d1ad7071cf1847a3552 Mon Sep 17 00:00:00 2001 From: Grossam Date: Fri, 26 Apr 2019 10:43:53 +0200 Subject: [PATCH 05/22] Doors now work with mesecons --- sounds/scifi_nodes_digicode.ogg | Bin 0 -> 11861 bytes sounds/scifi_nodes_switch.ogg | Bin 0 -> 8877 bytes textures/scifi_nodes_digicode_off.png | Bin 0 -> 450 bytes textures/scifi_nodes_digicode_on.png | Bin 0 -> 457 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 sounds/scifi_nodes_digicode.ogg create mode 100644 sounds/scifi_nodes_switch.ogg create mode 100644 textures/scifi_nodes_digicode_off.png create mode 100644 textures/scifi_nodes_digicode_on.png diff --git a/sounds/scifi_nodes_digicode.ogg b/sounds/scifi_nodes_digicode.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4b5d4e40d9ff71d3cabbfef6d11d58bdf03dc423 GIT binary patch literal 11861 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 literal 0 HcmV?d00001 diff --git a/sounds/scifi_nodes_switch.ogg b/sounds/scifi_nodes_switch.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b1f9efc7738b3432db9faffcd9b90dae16160037 GIT binary patch literal 8877 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 SL^KeZ00YeM*P@pN(EkD5gKJX& literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_digicode_off.png b/textures/scifi_nodes_digicode_off.png new file mode 100644 index 0000000000000000000000000000000000000000..8e2bb726444d3f28a3b2e758b2eb24fcbc079f15 GIT binary patch literal 450 zcmV;z0X_bSP)!8b?Ks_;7~*mmx5Ao)5S@|LHk!6+#HIlf`T{} zgsyI_A}R%GAk;*fhJY=JgA^MyI=JYazWd-F?t%N@-&L(v3-nTdQ!bZ%%d*fk4aadv zBof5qaa`9W8jWJxHjPFDAkv$O_5%#VU~yrB$&p8z%_iB5N@}o5y9*Eo(7$Q&NgIX(MySOJArt3~NzfNodN={#_7^NJ)% s#A0=dNez;7_@?>0Q?67hf9!L;0aW{)X&HgnW&i*H07*qoM6N<$g7Rd%QUCw| literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_digicode_on.png b/textures/scifi_nodes_digicode_on.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d86e4eef38ab265d8ff958ab7a06f26f9f908d GIT binary patch literal 457 zcmV;)0XF`LP)qP(n0ai&w zK~y-))sw$V0&y6|KOLvum+OQh7oi5Hf*cAG3WwS%T8fr%i>7LbYKhkV18Hb2+@z(o z#U%@(p~;{hV3-GDcc6DjD0fYgM_x-yz0>m!@5A%qeP8%@RVtNyz1-Ur3I)%yEOcGR zaU3*FBNB`IQ;Y6Hia?yGHk=4XS8+erXaRVJI)QIt5k{)J#!W-x+b z7-Uw)S)H>1INV)gdu$<@PU4(vHIN_A5x9e|*`Tr3v<*mHdX`>vj6n0rsv00000NkvXXu0mjf)v&?< literal 0 HcmV?d00001 From cbcbc3dfb8535eb4429243e168173381849bd519 Mon Sep 17 00:00:00 2001 From: Grossam Date: Sat, 27 Apr 2019 10:22:38 +0200 Subject: [PATCH 06/22] =?UTF-8?q?Latest=20versions=20I=20hope=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + doors.lua | 638 ++++++++++++++++++++++++++------------------------ nodeboxes.lua | 234 ++++++++++++++---- 3 files changed, 526 insertions(+), 348 deletions(-) diff --git a/README.md b/README.md index 1d4e12a..f77c41d 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,5 @@ Minetest mod that adds scifi themed nodes CC BY-NC 3.0 * scifi_nodes_door_normal.ogg tlwmdbt https://freesound.org/people/tlwmdbt/sounds/165862/ * 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_switch.ogg http://soundbible.com/1950-Button-Push.html diff --git a/doors.lua b/doors.lua index 173bb52..0adf5c8 100644 --- a/doors.lua +++ b/doors.lua @@ -27,331 +27,355 @@ local doors = { {base_name = "blue", base_ingredient = "default:steel_block", sound = "scifi_nodes_door_normal"} } - --- Maybe useful later with mesecons_doors.meseconify_door() -function get_doors_list() - return doors -end - - for _, current_door in ipairs(doors) do -local closed = "scifi_nodes:"..current_door.base_name.."_door_closed" -local closed_top = "scifi_nodes:"..current_door.base_name.."_door_closed_top" -local opened = "scifi_nodes:"..current_door.base_name.."_door_opened" -local opened_top = "scifi_nodes:"..current_door.base_name.."_door_opened_top" -local base_name = current_door.base_name -local base_ingredient = current_door.base_ingredient -local sound = current_door.sound + local closed = "scifi_nodes:"..current_door.base_name.."_door_closed" + local closed_top = "scifi_nodes:"..current_door.base_name.."_door_closed_top" + local opened = "scifi_nodes:"..current_door.base_name.."_door_opened" + local opened_top = "scifi_nodes:"..current_door.base_name.."_door_opened_top" + local base_name = current_door.base_name + local base_ingredient = current_door.base_ingredient + local sound = current_door.sound -minetest.register_craft({ - output = closed .. " 2", - recipe = { - {"scifi_nodes:white2", base_ingredient, "scifi_nodes:white2"}, - {"scifi_nodes:black", base_ingredient, "scifi_nodes:black"} - } -}) + minetest.register_craft({ + output = closed .. " 2", + recipe = { + {"scifi_nodes:white2", base_ingredient, "scifi_nodes:white2"}, + {"scifi_nodes:black", base_ingredient, "scifi_nodes:black"} + } + }) -function onplace(itemstack, placer, pointed_thing) - local pos1 = pointed_thing.above - local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z} - pos2.y = pos2.y+1 - if + function onplace(itemstack, placer, pointed_thing) + local pos1 = pointed_thing.above + local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z} + pos2.y = pos2.y+1 + if - 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 placer or - not placer:is_player() or - minetest.is_protected(pos1, placer:get_player_name()) or - minetest.is_protected(pos2, placer:get_player_name()) then - return + 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 placer or + not placer:is_player() or + minetest.is_protected(pos1, placer:get_player_name()) or + minetest.is_protected(pos2, placer:get_player_name()) then + return + 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) + + return itemstack; 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 + + function afterdestruct(pos, oldnode) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) + end + + function rightclick(pos, node, player, itemstack, pointed_thing) + -- play sound + minetest.sound_play(sound,{ + max_hear_distance = 16, + pos = pos, + gain = 1.0 + }) + + local timer = minetest.get_node_timer(pos) + local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) + local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) + local e = 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 h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}) + + + minetest.set_node(pos, {name=opened, param2=node.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2}) + + if a.name == closed then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=opened, param2=a.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=opened_top, param2=a.param2}) 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}) + if b.name == closed then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=opened, param2=b.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=opened_top, param2=b.param2}) + end + if c.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=opened, param2=c.param2}) + minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=c.param2}) + end + if d.name == closed then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=opened, param2=d.param2}) + minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=d.param2}) + end + if e.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=opened, param2=e.param2}) + minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=e.param2}) + end + if f.name == closed then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=opened, param2=f.param2}) + minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=f.param2}) + end + if g.name == closed then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=opened, param2=g.param2}) + minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=g.param2}) + end + if h.name == closed then + 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}) end - itemstack:take_item(1) - return itemstack; -end + timer:start(3) -function afterdestruct(pos, oldnode) - 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) - -- play sound - minetest.sound_play(sound,{ - max_hear_distance = 16, - pos = pos, - gain = 1.0 - }) + function afterplace(pos, placer, itemstack, pointed_thing) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=nodeu.param2}) + end - local timer = minetest.get_node_timer(pos) - local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) - local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) - local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) - local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) - local e = 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 h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}) + function ontimer(pos, elapsed) + -- play sound + minetest.sound_play(sound,{ + max_hear_distance = 16, + pos = pos, + gain = 1.0 + }) + + local node = minetest.get_node(pos) + local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) + local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) + local e = 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 h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}) - minetest.set_node(pos, {name=opened, param2=node.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2}) + 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 == closed then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=opened, param2=a.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=opened_top, param2=a.param2}) - end - if b.name == closed then - minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=opened, param2=b.param2}) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=opened_top, param2=b.param2}) - end - if c.name == closed then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=opened, param2=c.param2}) - minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=c.param2}) - end - if d.name == closed then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=opened, param2=d.param2}) - minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=d.param2}) - end - if e.name == closed then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=opened, param2=e.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=e.param2}) - end - if f.name == closed then - minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=opened, param2=f.param2}) - minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=f.param2}) - end - if g.name == closed then - minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=opened, param2=g.param2}) - minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=g.param2}) - end - if h.name == closed then - 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}) - end + 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+1,z=pos.z-1}, {name=closed_top, param2=a.param2}) + end + 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+1,z=pos.z+1}, {name=closed_top, param2=b.param2}) + end + 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+1,z=pos.z}, {name=closed_top, param2=c.param2}) + end + 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+1,z=pos.z}, {name=closed_top, param2=d.param2}) + end + 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+1, z=pos.z-1}, {name=closed_top, param2=e.param2}) + end + 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+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 + 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+1, z=pos.z+1}, {name=closed_top, param2=h.param2}) + end - timer:start(3) + end -end - -function afterplace(pos, placer, itemstack, pointed_thing) - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=nodeu.param2}) -end - -function ontimer(pos, elapsed) - -- play sound - minetest.sound_play(sound,{ - max_hear_distance = 16, - pos = pos, - gain = 1.0 - }) - - local node = minetest.get_node(pos) - local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) - local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) - local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) - local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) - local e = 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 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({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}) - end - 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+1,z=pos.z+1}, {name=closed_top, param2=b.param2}) - end - 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+1,z=pos.z}, {name=closed_top, param2=c.param2}) - end - 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+1,z=pos.z}, {name=closed_top, param2=d.param2}) - end - 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+1, z=pos.z-1}, {name=closed_top, param2=e.param2}) - end - 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+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 - 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+1, z=pos.z+1}, {name=closed_top, param2=h.param2}) - end - -end - -minetest.register_node(closed, { - description = current_door.base_name.." sliding door", - inventory_image = "scifi_nodes_door_"..base_name.."_inv.png", - wield_image = "scifi_nodes_door_"..base_name.."_inv.png", - tiles = { - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_rbottom.png", - "scifi_nodes_door_"..base_name.."_bottom.png" - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - groups = {cracky = 3}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} - } - }, - mesecon = { +-- allow doors opening on mesecon signal +-- 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 + {x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + -- 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}, + } + mesecons_door_def = { effector = { - action_on = function (pos, node) - minetest.sound_play(sound, { - max_hear_distance = 16, - pos = pos, - gain = 1.0 - }) - end, - rules = mesecon.rules.pplate + action_on = rightclick, + rules = mesecons_door_rules }, - }, - -on_place = onplace, - -after_destruct = afterdestruct, - -on_rightclick = rightclick, -}) - -minetest.register_node(closed_top, { - tiles = { - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_rtop.png", - "scifi_nodes_door_"..base_name.."_top.png" - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - groups = {cracky = 1}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} - } - }, - selection_box = { - type = "fixed", - fixed = { - {0, 0, 0, 0, 0, 0}, - } - }, -}) - -minetest.register_node(opened, { - tiles = { - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_rbottom0.png", - "scifi_nodes_door_"..base_name.."_bottom0.png" - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - drop = closed, - groups = {cracky = 1}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, -0.25, 1.5, 0.0625}, - } - }, -after_place_node = afterplace, -after_destruct = afterdestruct, -on_timer = ontimer, -}) - -minetest.register_node(opened_top, { - tiles = { - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_edge.png", - "scifi_nodes_door_"..base_name.."_rtopo.png", - "scifi_nodes_door_"..base_name.."_topo.png" - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - groups = {cracky = 1}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {0, 0, 0, 0, 0, 0}, - } - }, -}) + } +-- 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, { + description = current_door.base_name.." sliding door", + inventory_image = "scifi_nodes_door_"..base_name.."_inv.png", + wield_image = "scifi_nodes_door_"..base_name.."_inv.png", + tiles = { + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rbottom.png", + "scifi_nodes_door_"..base_name.."_bottom.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} + } + }, + mesecons = mesecons_door_def, + + on_place = onplace, + + after_destruct = afterdestruct, + + on_rightclick = rightclick, + }) + + minetest.register_node(closed_top, { + tiles = { + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rtop.png", + "scifi_nodes_door_"..base_name.."_top.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + } + }, +-- mesecons = mesecons_door_top_def, + }) + + minetest.register_node(opened, { + tiles = { + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rbottom0.png", + "scifi_nodes_door_"..base_name.."_bottom0.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + drop = closed, + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 1.5, 0.0625}, + } + }, + after_place_node = afterplace, + after_destruct = afterdestruct, + on_timer = ontimer, + }) + + minetest.register_node(opened_top, { + tiles = { + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_edge.png", + "scifi_nodes_door_"..base_name.."_rtopo.png", + "scifi_nodes_door_"..base_name.."_topo.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + } + }, + }) +end -- end of doors table browsing diff --git a/nodeboxes.lua b/nodeboxes.lua index e862fc4..8f825ea 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -366,8 +366,6 @@ minetest.register_node("scifi_nodes:pot_lid", { sounds = default.node_sound_glass_defaults() }) - - minetest.register_node("scifi_nodes:pot", { description = "metal plant pot (right click for lid, shift+rightclick to plant)", tiles = { @@ -1205,34 +1203,25 @@ minetest.register_node("scifi_nodes:windowpanel", { sounds = default.node_sound_glass_defaults(), }) +-------------- +-- Switches -- +-------------- +local switch_rules = {} +local mesecons_switch_on_def = {} +local mesecons_switch_off_def = {} + if (mesecon ~= nil) and (mesecon.receptor_on ~= nil) and (mesecon.receptor_off ~= nil) then - minetest.register_node("scifi_nodes:switch_off", { - description = "Wall switch", - tiles = { - "scifi_nodes_switch_off.png", - }, - inventory_image = "scifi_nodes_switch_on.png", - wield_image = "scifi_nodes_switch_on.png", - drawtype = "signlike", - sunlight_propagates = true, - node_box = { - type = "wallmounted", - }, - selection_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, - on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) - mesecon.receptor_on(pos) - end, - sounds = default.node_sound_glass_defaults(), - mesecons = {receptor = { state = mesecon.state.off }} - }) + + switch_rules = { + {x=1, y=-1, z=1}, + {x=1, y=-1, z=-1}, + {x=-1, y=-1, z=1}, + {x=-1, y=-1, z=-1} + } + mesecons_switch_on_def = {receptor = {state = mesecon.state.on, rules = switch_rules}} + mesecons_switch_off_def = {receptor = {state = mesecon.state.off, rules = switch_rules}} minetest.register_node("scifi_nodes:switch_on", { description = "Wall switch", @@ -1253,21 +1242,44 @@ if (mesecon ~= nil) and paramtype2 = "wallmounted", light_source = 5, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + mesecons = mesecons_switch_on_def, on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) - mesecon.receptor_off(pos) + minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) + mesecon.receptor_off(pos, switch_rules) + if switch_rules == {} or nil then minetest.chat_send_all("Nib !") end + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) + end, + sounds = default.node_sound_glass_defaults(), + }) + + minetest.register_node("scifi_nodes:switch_off", { + description = "Wall switch", + tiles = {"scifi_nodes_switch_off.png",}, + inventory_image = "scifi_nodes_switch_on.png", + wield_image = "scifi_nodes_switch_on.png", + drawtype = "signlike", + sunlight_propagates = true, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = mesecons_switch_off_def, + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) + mesecon.receptor_on(pos, switch_rules) + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) end, sounds = default.node_sound_glass_defaults(), - mesecons = {receptor = { state = mesecon.state.on }} }) - minetest.register_craft({ - output = "scifi_nodes:switch_off 2", - recipe = { - {"mesecons_button:button_off", "scifi_nodes:grey", ""} - } - }) - + minetest.register_craft({ + output = "scifi_nodes:switch_off 2", + recipe = { + {"mesecons_button:button_off", "scifi_nodes:grey", ""} + } + }) + else --wall switch, currently does not do anything minetest.register_node("scifi_nodes:switch_off", { @@ -1290,6 +1302,7 @@ else groups = {cracky=1, oddly_breakable_by_hand=1}, on_rightclick = function(pos, node, clicker, item, _) minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) end, sounds = default.node_sound_glass_defaults() }) @@ -1315,10 +1328,149 @@ else groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, on_rightclick = function(pos, node, clicker, item, _) minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) end, sounds = default.node_sound_glass_defaults() - }) - - --end of wall switch - + }) --end of wall switch +end -- if(mesecon.receptor ~= on + +-------------- +-- Digicode -- +-------------- +local digicode_rules = {} +local mesecons_digicode_on_def = {} +local mesecons_digicode_off_def = {} + +if (mesecon ~= nil) and + (mesecon.receptor_on ~= nil) and + (mesecon.receptor_off ~= nil) then + + digicode_rules = { + {x=1, y=-1, z=1}, + {x=1, y=-1, z=-1}, + {x=-1, y=-1, z=1}, + {x=-1, y=-1, z=-1} + } + mesecons_digicode_on_def = {receptor = {state = mesecon.state.on, rules = digicode_rules}} + mesecons_digicode_off_def = {receptor = {state = mesecon.state.off, rules = digicode_rules}} + + local function toggle_digicode(pos) + local node = minetest.get_node(pos) + local name = node.name + if name == "scifi_nodes:digicode_off" then + minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.set_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) + mesecon.receptor_on(pos, digicode_rules) + minetest.get_node_timer(pos):start(2) + else + minetest.set_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) + mesecon.receptor_off(pos, digicode_rules) + end + end + +-- local function digicode_turn_off (pos) +-- local node = minetest.get_node(pos) +-- minetest.set_node (pos, {name = "scifi_nodes:digicode_off", param2 = node.param2}) +-- mesecon.receptor_off(pos, digicode_rules) +-- return false +-- end + + minetest.register_node("scifi_nodes:digicode_on", { + description = "Wall switch", + sunlight_propagates = true, + tiles = {"scifi_nodes_digicode_on.png",}, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + mesecons = mesecons_digicode_on_def, + on_rightclick = toggle_digicode, + on_timer = toggle_digicode, + sounds = default.node_sound_glass_defaults(), + }) + + minetest.register_node("scifi_nodes:digicode_off", { + description = "Digicode", + tiles = {"scifi_nodes_digicode_off.png",}, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + sunlight_propagates = true, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = mesecons_digicode_off_def, + on_rightclick = toggle_digicode, + sounds = default.node_sound_glass_defaults(), + }) + + + minetest.register_craft({ + output = "scifi_nodes:digicode_off 2", + recipe = { + {"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""} + } + }) + +-- In case mesecons mod is missing : +else + minetest.register_node("scifi_nodes:digicode_off", { + description = "Digicode", + tiles = { + "scifi_nodes_digicode_off.png", + }, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + sunlight_propagates = true, + node_box = { + type = "wallmounted", + }, + selection_box = { + type = "wallmounted", + }, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.swap_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) + end, + sounds = default.node_sound_glass_defaults() + }) + + minetest.register_node("scifi_nodes:digicode_on", { + description = "Digicode", + sunlight_propagates = true, + tiles = { + "scifi_nodes_switch_on.png", + }, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + node_box = { + type = "wallmounted", + }, + selecion_box = { + type = "wallmounted", + }, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.swap_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) + end, + on_timer = function(pos, node, clicker, item, _) + minetest.swap_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) + end, + sounds = default.node_sound_glass_defaults() + }) end -- if(mesecon.receptor ~= on From 8414bbe54bdd350611cea43eb4874db6aa020add Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 1 May 2019 18:53:13 +0200 Subject: [PATCH 07/22] Added aliases in doors.lua --- README.md | 18 +++++- doors.lua | 188 +++++++++++++++++++++++++++--------------------------- 2 files changed, 110 insertions(+), 96 deletions(-) diff --git a/README.md b/README.md index f77c41d..9b2d87b 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,18 @@ +![Scifi nodes][screenshot.png] + # 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 @@ -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_digicode.ogg https://freesound.org/people/Robinhood76/sounds/94933/ * 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/ diff --git a/doors.lua b/doors.lua index 0adf5c8..ebf7eec 100644 --- a/doors.lua +++ b/doors.lua @@ -14,15 +14,32 @@ -- 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 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"}, - -- Black door {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"}, - -- Green door {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"} } @@ -47,11 +64,12 @@ for _, current_door in ipairs(doors) do function onplace(itemstack, placer, pointed_thing) + -- Is there room enough ? local pos1 = pointed_thing.above local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z} - pos2.y = pos2.y+1 - if + pos2.y = pos2.y+1 -- 2 nodes above + if 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 placer or @@ -60,39 +78,47 @@ for _, current_door in ipairs(doors) do minetest.is_protected(pos2, placer:get_player_name()) then return 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; end 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 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+1, z=pos.z+1}, {name=opened_top, param2=h.param2}) end - timer:start(3) - end 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 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}) - - - 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+1,z=pos.z-1}, {name=closed_top, param2=a.param2}) - end - if b.name == opened then + end + 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+1,z=pos.z+1}, {name=closed_top, param2=b.param2}) - end - if c.name == opened then + end + 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+1,z=pos.z}, {name=closed_top, param2=c.param2}) - end - if d.name == opened then + end + 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+1,z=pos.z}, {name=closed_top, param2=d.param2}) - end - if e.name == opened then + end + 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+1, z=pos.z-1}, {name=closed_top, param2=e.param2}) - end - if f.name == opened then + end + 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+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 - 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 - if h.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=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 --- allow doors opening on mesecon signal --- 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 = { + local mesecons_doors_rules = { -- get signal from pressure plate - {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 - {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 = { 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, { description = current_door.base_name.." sliding door", @@ -284,12 +289,10 @@ end {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} } }, - mesecons = mesecons_door_def, + mesecons = mesecons_doors_def, on_place = onplace, - after_destruct = afterdestruct, - on_rightclick = rightclick, }) @@ -318,7 +321,6 @@ end {0, 0, 0, 0, 0, 0}, } }, --- mesecons = mesecons_door_top_def, }) minetest.register_node(opened, { From 7d50eb73ad9220f1e8e6fe07b9367cbe5c0c058e Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 1 May 2019 18:58:52 +0200 Subject: [PATCH 08/22] Added aliases in doors.lua --- depends.txt | 3 +-- mod.conf | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/depends.txt b/depends.txt index 95a1e7b..8005f6d 100644 --- a/depends.txt +++ b/depends.txt @@ -1,11 +1,10 @@ default basic_materials +mesecons xpanes? moreblocks? -mesecons? mesecons_microcontroller? mesecons_button? mesecons_torch? mesecons_receiver? dye? - diff --git a/mod.conf b/mod.conf index 3bd6219..798a21b 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = scifi_nodes description = A mod which the vegan kitchen to Minetest. -depends = default,dye,basic_materials -optional_depends = xpanes,moreblocks,mesecons,mesecons_microcontroller,mesecons_button,mesecons_torch,mesecons_receiver +depends = default,dye,basic_materials, mesecons +optional_depends = xpanes,moreblocks,mesecons_microcontroller,mesecons_button,mesecons_torch,mesecons_receiver From e0e04587fa0db546375a2ccfae55ffe1063b15f1 Mon Sep 17 00:00:00 2001 From: Grossam Date: Fri, 3 May 2019 18:40:40 +0200 Subject: [PATCH 09/22] Hand scanners are now usable --- nodeboxes.lua | 465 +++++++++++++------------- sounds/scifi_nodes_access_granted.ogg | Bin 0 -> 34801 bytes sounds/scifi_nodes_access_refused.ogg | Bin 0 -> 20909 bytes sounds/scifi_nodes_palm_scanner.ogg | Bin 0 -> 19726 bytes 4 files changed, 225 insertions(+), 240 deletions(-) create mode 100644 sounds/scifi_nodes_access_granted.ogg create mode 100644 sounds/scifi_nodes_access_refused.ogg create mode 100644 sounds/scifi_nodes_palm_scanner.ogg diff --git a/nodeboxes.lua b/nodeboxes.lua index 8f825ea..69fc6e3 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -1206,271 +1206,256 @@ minetest.register_node("scifi_nodes:windowpanel", { -------------- -- Switches -- -------------- -local switch_rules = {} -local mesecons_switch_on_def = {} -local mesecons_switch_off_def = {} -if (mesecon ~= nil) and - (mesecon.receptor_on ~= nil) and - (mesecon.receptor_off ~= nil) then +local function get_switch_rules(param2) - switch_rules = { - {x=1, y=-1, z=1}, + -- param2 = 2 + local rules = { {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}, } - mesecons_switch_on_def = {receptor = {state = mesecon.state.on, rules = switch_rules}} - mesecons_switch_off_def = {receptor = {state = mesecon.state.off, rules = switch_rules}} - minetest.register_node("scifi_nodes:switch_on", { - description = "Wall switch", - sunlight_propagates = true, - tiles = { - "scifi_nodes_switch_on.png", - }, - inventory_image = "scifi_nodes_switch_on.png", - wield_image = "scifi_nodes_switch_on.png", - drawtype = "signlike", - node_box = { - type = "wallmounted", - }, - selection_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - light_source = 5, - groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, - mesecons = mesecons_switch_on_def, - on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) - mesecon.receptor_off(pos, switch_rules) - if switch_rules == {} or nil then minetest.chat_send_all("Nib !") end - minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) - end, - sounds = default.node_sound_glass_defaults(), - }) +-- Left and right when looking to +y ? + if param2 == 3 then + rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right (rules)) + elseif param2 == 4 then + rules = mesecon.rotate_rules_right(rules) + elseif param2 == 5 then + rules = mesecon.rotate_rules_left(rules) + end + return rules +end - minetest.register_node("scifi_nodes:switch_off", { - description = "Wall switch", - tiles = {"scifi_nodes_switch_off.png",}, - inventory_image = "scifi_nodes_switch_on.png", - wield_image = "scifi_nodes_switch_on.png", - drawtype = "signlike", - sunlight_propagates = true, - node_box = {type = "wallmounted",}, - selection_box = {type = "wallmounted",}, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, - mesecons = mesecons_switch_off_def, - on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) - mesecon.receptor_on(pos, switch_rules) - minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) - end, - sounds = default.node_sound_glass_defaults(), - }) +local function toggle_switch(pos) + local node = minetest.get_node(pos) + local name = node.name + if name == "scifi_nodes:switch_on" then + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos}) + minetest.set_node(pos, {name = "scifi_nodes:switch_off", param2 = node.param2}) + mesecon.receptor_off(pos, get_switch_rules(node.param2)) + elseif name == "scifi_nodes:switch_off" then + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos}) + minetest.set_node(pos, {name = "scifi_nodes:switch_on", param2 = node.param2}) + mesecon.receptor_on(pos, get_switch_rules(node.param2)) + minetest.get_node_timer(pos):start(2) + end +end - minetest.register_craft({ - output = "scifi_nodes:switch_off 2", - recipe = { - {"mesecons_button:button_off", "scifi_nodes:grey", ""} - } - }) +minetest.register_node("scifi_nodes:switch_on", { + description = "Wall switch", + sunlight_propagates = true, + buildable_to = false, + tiles = {"scifi_nodes_switch_on.png",}, + inventory_image = "scifi_nodes_switch_on.png", + wield_image = "scifi_nodes_switch_on.png", + drawtype = "signlike", + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.on,}}, + sounds = default.node_sound_glass_defaults(), + on_rightclick = toggle_switch, + on_timer = toggle_switch +}) -else - --wall switch, currently does not do anything - minetest.register_node("scifi_nodes:switch_off", { - description = "Wall switch", - tiles = { - "scifi_nodes_switch_off.png", - }, - inventory_image = "scifi_nodes_switch_on.png", - wield_image = "scifi_nodes_switch_on.png", - drawtype = "signlike", - sunlight_propagates = true, - node_box = { - type = "wallmounted", - }, - selection_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1}, - on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) - minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) - end, - sounds = default.node_sound_glass_defaults() - }) +minetest.register_node("scifi_nodes:switch_off", { + description = "Wall switch", + tiles = {"scifi_nodes_switch_off.png",}, + inventory_image = "scifi_nodes_switch_on.png", + wield_image = "scifi_nodes_switch_on.png", + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.off,}}, + sounds = default.node_sound_glass_defaults(), + on_rightclick = toggle_switch +}) - minetest.register_node("scifi_nodes:switch_on", { - description = "Wall switch", - sunlight_propagates = true, - tiles = { - "scifi_nodes_switch_on.png", - }, - inventory_image = "scifi_nodes_switch_on.png", - wield_image = "scifi_nodes_switch_on.png", - drawtype = "signlike", - node_box = { - type = "wallmounted", - }, - selecion_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - light_source = 5, - groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, - on_rightclick = function(pos, node, clicker, item, _) - minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) - minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) - end, - sounds = default.node_sound_glass_defaults() - }) --end of wall switch -end -- if(mesecon.receptor ~= on +minetest.register_craft({ + output = "scifi_nodes:switch_off 2", + recipe = {{"mesecons_button:button_off", "scifi_nodes:grey", ""}} +}) -------------- -- Digicode -- -------------- -local digicode_rules = {} -local mesecons_digicode_on_def = {} -local mesecons_digicode_off_def = {} -if (mesecon ~= nil) and - (mesecon.receptor_on ~= nil) and - (mesecon.receptor_off ~= nil) then +local secret_code = {"1234"} +local allowed_chars = {"0123456789"} +local code_length = 4 - digicode_rules = { - {x=1, y=-1, z=1}, - {x=1, y=-1, z=-1}, - {x=-1, y=-1, z=1}, - {x=-1, y=-1, z=-1} - } - mesecons_digicode_on_def = {receptor = {state = mesecon.state.on, rules = digicode_rules}} - mesecons_digicode_off_def = {receptor = {state = mesecon.state.off, rules = digicode_rules}} - - local function toggle_digicode(pos) - local node = minetest.get_node(pos) - local name = node.name - if name == "scifi_nodes:digicode_off" then - minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.set_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) - mesecon.receptor_on(pos, digicode_rules) - minetest.get_node_timer(pos):start(2) - else - minetest.set_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) - mesecon.receptor_off(pos, digicode_rules) - end +local function toggle_digicode(pos) + local node = minetest.get_node(pos) + local name = node.name + if name == "scifi_nodes:digicode_off" then + minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.set_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) + mesecon.receptor_on(pos, get_switch_rules(node.param2)) + minetest.get_node_timer(pos):start(2) + elseif name == "scifi_nodes:digicode_on" then + minetest.set_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) + mesecon.receptor_off(pos, get_switch_rules(node.param2)) end +end + +local function code_is_valid(code) + local valid = true + return valid +end -- local function digicode_turn_off (pos) -- local node = minetest.get_node(pos) -- minetest.set_node (pos, {name = "scifi_nodes:digicode_off", param2 = node.param2}) --- mesecon.receptor_off(pos, digicode_rules) +-- mesecon.receptor_off(pos, get_switch_rules(node.param2)) -- return false -- end - minetest.register_node("scifi_nodes:digicode_on", { - description = "Wall switch", - sunlight_propagates = true, - tiles = {"scifi_nodes_digicode_on.png",}, - inventory_image = "scifi_nodes_digicode_on.png", - wield_image = "scifi_nodes_digicode_on.png", - drawtype = "signlike", - node_box = {type = "wallmounted",}, - selection_box = {type = "wallmounted",}, - paramtype = "light", - paramtype2 = "wallmounted", - light_source = 5, - groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, - mesecons = mesecons_digicode_on_def, - on_rightclick = toggle_digicode, - on_timer = toggle_digicode, - sounds = default.node_sound_glass_defaults(), - }) +minetest.register_node("scifi_nodes:digicode_on", { + description = "Digicode", + sunlight_propagates = true, + buildable_to = false, + tiles = {"scifi_nodes_digicode_on.png",}, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.on,}}, + on_timer = toggle_digicode, + sounds = default.node_sound_glass_defaults(), +}) - minetest.register_node("scifi_nodes:digicode_off", { - description = "Digicode", - tiles = {"scifi_nodes_digicode_off.png",}, - inventory_image = "scifi_nodes_digicode_on.png", - wield_image = "scifi_nodes_digicode_on.png", - drawtype = "signlike", - sunlight_propagates = true, - node_box = {type = "wallmounted",}, - selection_box = {type = "wallmounted",}, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, - mesecons = mesecons_digicode_off_def, - on_rightclick = toggle_digicode, - sounds = default.node_sound_glass_defaults(), - }) +minetest.register_node("scifi_nodes:digicode_off", { + description = "Digicode", + tiles = {"scifi_nodes_digicode_off.png",}, + inventory_image = "scifi_nodes_digicode_on.png", + wield_image = "scifi_nodes_digicode_on.png", + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.off,}}, + on_rightclick = toggle_digicode, + sounds = default.node_sound_glass_defaults(), +}) +minetest.register_craft({ + output = "scifi_nodes:digicode_off 2", + recipe = { + {"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""} + } +}) - minetest.register_craft({ - output = "scifi_nodes:digicode_off 2", - recipe = { - {"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""} - } - }) +------------------ +-- Palm scanner -- +------------------ --- In case mesecons mod is missing : -else - minetest.register_node("scifi_nodes:digicode_off", { - description = "Digicode", - tiles = { - "scifi_nodes_digicode_off.png", - }, - inventory_image = "scifi_nodes_digicode_on.png", - wield_image = "scifi_nodes_digicode_on.png", - drawtype = "signlike", - sunlight_propagates = true, - node_box = { - type = "wallmounted", - }, - selection_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1}, - on_rightclick = function(pos, node, clicker, item, _) - minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.swap_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) - end, - sounds = default.node_sound_glass_defaults() - }) +----------------------------------------------- +-- /!\ When "overriding" a callback function -- +-- re-use all the parameters in same order ! -- +----------------------------------------------- - minetest.register_node("scifi_nodes:digicode_on", { - description = "Digicode", - sunlight_propagates = true, - tiles = { - "scifi_nodes_switch_on.png", - }, - inventory_image = "scifi_nodes_digicode_on.png", - wield_image = "scifi_nodes_digicode_on.png", - drawtype = "signlike", - node_box = { - type = "wallmounted", - }, - selecion_box = { - type = "wallmounted", - }, - paramtype = "light", - paramtype2 = "wallmounted", - light_source = 5, - groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, - on_rightclick = function(pos, node, clicker, item, _) - minetest.swap_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) - end, - on_timer = function(pos, node, clicker, item, _) - minetest.swap_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) - end, - sounds = default.node_sound_glass_defaults() - }) -end -- if(mesecon.receptor ~= on +local function toggle_palm_scanner(pos) + local node = minetest.get_node(pos) + local name = node.name + if name == "scifi_nodes:palm_scanner_off" then + minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_on", param2=node.param2}) + mesecon.receptor_on(pos, get_switch_rules(node.param2)) + minetest.get_node_timer(pos):start(2) + elseif name == "scifi_nodes:palm_scanner_on" then + minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_off", param2=node.param2}) + mesecon.receptor_off(pos, get_switch_rules(node.param2)) + end +end + +-- after_place_node +-- placer is a player object +local function set_owner(pos, placer, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) +end + +-- on_rightclick +-- player is a player object +local function check_owner(pos, node, player, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local player = player:get_player_name() + print(dump(owner)..dump(player)) + minetest.sound_play("scifi_nodes_palm_scanner", {max_hear_distance = 8, pos = pos, gain = 1.0}) + -- wait a minute please ! + local clock = os.clock + local t0 = clock() + while clock() - t0 <= 1.5 do end + if owner == player then + minetest.sound_play("scifi_nodes_access_granted", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.chat_send_player(player, "Access granted !") + toggle_palm_scanner(pos) + else + minetest.chat_send_player(player, "Access refused !") + minetest.sound_play("scifi_nodes_access_refused", {max_hear_distance = 8, pos = pos, gain = 1.0}) + end +end + +minetest.register_node("scifi_nodes:palm_scanner_on", { + description = "Palm scanner", + sunlight_propagates = true, + buildable_to = false, + tiles = {"scifi_nodes_palm_scanner_on.png",}, + inventory_image = "scifi_nodes_palm_scanner_on.png", + wield_image = "scifi_nodes_palm_scanner_on.png", + drawtype = "signlike", + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.on,}}, + on_timer = toggle_palm_scanner, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:palm_scanner_off", { + description = "Palm scannner", + tiles = {"scifi_nodes_palm_scanner_off.png",}, + inventory_image = "scifi_nodes_palm_scanner_on.png", + wield_image = "scifi_nodes_palm_scanner_on.png", + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.off,}}, + after_place_node = set_owner, + on_rightclick = check_owner, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft({ + output = "scifi_nodes:palm_scanner_off 2", + recipe = { + {"mesecons_powerplant:power_plant", "scifi_nodes:grey", ""} + } +}) diff --git a/sounds/scifi_nodes_access_granted.ogg b/sounds/scifi_nodes_access_granted.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ef5d541d6314cf901f6b9e012a73326279b0d83d GIT binary patch literal 34801 zcmbTe1yohf`Y^l?-O?c-2c!-q-JR0i-3`*x2ctsy|M>f9uK?r`#Mj-^%F*k-0!g;= z{uh{j{nPk8ME$lYSHt@ZH<1+^ibx(V!i=&m^-{GN( zP;O2xK29!9J}C3gtnmM2*!_46;E%SuowuK*r>&TZs;V}W8SLrhW@G2*V$06O!O6kR z|IE{t4+cT~=Oe7rGI|gI1MJ470_}xQBkNDZ+{oZ<+nm5l`=*dO2g# z5iz~w*700@|1O}sHY5Om0>GIu6ACvJoyLUh$(a&7^MxGM1WTdlv6|n7Fh8F%TDz4r zmN>hO!5A=b4N*b*0FqB>BZ#%`3#(|_NOG`&!^3nm{^eP7!-U!OVOV8iqX z=p_SHX+7-%AwC3f{7V2$j(jl?VT3!adsoK$459 z*Mn*hq=pvzlqa9Qm)M+_>KsUldy4$uQ`ld50TH3iu}gJ=WAG$e{v`_>9G3hoh78U> zUjiFMzg>f7PGlaB3gKn0=a&&@O?`^d$zp0POV9etL65z1tIj{;{Yxy$ z%(BNm3H<;AX+NP>K`{7T-J^8y;2fM!KZTSEKhk@su7 zH~Cxxu%bt=66BT2UTSDjFco{h_=`Cd0K)PAO7XvozoPt)6c;7OvJ5ddjBpRL-4~VJ zW5T<&-S{#%T%Z)Q@qtqOs%azFt6J!(b8*wG5o<9*O9@u|k4Aw^h1w)ap;7!*lE`$= zAy_G>75|-azv;&bs3-qh9zUegBxC^dBsaS@kC?8GuD-9UVVciEON8lHpOv}bmAO~u zWRd?{u>PYt0H`$Ke{~XJ70=b5{ZdUD^B)HPTXQ^!`;({!ljxP}=~ch5jUMr;AM;KU z$!YScYLl2wlK4!K+G_KgPVw1J>Dtct+J0-cHEszuZ2p(R{G&E2b3Xq~bM94yPAFmZ zX)?-xX-+9nFJn8?N=5%pU$$;8a&!&3(4~}A!AVIz5$o@M60H7-o zNBOTE(bQs}(c+uYV%OCX`@d@p_;!X@b&3}xYzhESfTj@En;EW=ETyKjC+FA)MXy3z zhlP{B`5L#KEB!D53$u_ie<%@v7%Y-L?aEIkr;SnL%q^`!5;mNfGx4AAVM0Ga@R zrbwqquXw~;@brX!^l_{x0h~TS^!27G+5AdcSuk>ZhP@|r)dDlu(ra!Cx`IFD+sU95_>?%VQzftgI1f5BYlau(1`mT$M& zEHqmV{|hYHX>TwK7b#i-3nfnXB|0stI>4!{ATAxV&g5I8dcMEx{K1`e(M>IO%w>u#aL6n#FQ4H3ry3L|aNzr< z<>hT0Apbzo0_#l4GB^D1Tkf<~V~eU2t7_|-&iUL22>&C2c9}{Lw0Y!GOcc7LmW7yP zkKq3nC^%O%S8uu|mNblkS4j$!0f8m$SXP8kd|K5s%MB|74HiRjW2(_`e$lLvb4EB= zQ~^LOGCKH!{q`?jj{x9ByjHx>CKaDNtS{Ru;b9@M^_Y-Ciq??OCbS5_(wpstr=>)3 zZ-<$S!FJhR2(7;kU8xKK)=?GfD1l&t77GK|jR^qWbwL1VmweJFru+*mTtiHt2nisk z>aPb0r!vXQuK0yllUNQUlydStAvF1PQ*0gYi33swBnwE|d%@lDFDWYr4TO&V2`JE} z`l-U6x|8bTro{6!AqX0^fQ}in+M>9akR|k*wvcX&o=c%uqaA;7kjG zN>y@m()XZIoL0Gxl2cVLd9h9z0tC5~%Dj|7&>Eq2jxdU=n`JKc<_4p!s!^d$8!+xN z!UiNAo&kVJt))-+n}WJ7kX=ZCKj`hHmF}Z5eA;4i>k+P~M6LTEO(&MCkIEVkoH`h@ zq0@o`Y-Yd2zaMW*3M0oW0i0|2giwFF7ryjnw)Kb*##^s=u8nLkC_%axa7sCTCUQ)c zdmQmWlR@5{?iDYDmJ^Oey9xEilV&N?!4N`!>xHkRSoR!G7)A^FFP2^q#C(fD7_o9h zYAG=n7fov=afO494a7Ebb3E-NN?X6qwg4Rm7fGq476$}@I?m6%`yoc_-MxKgc0WJ*!P=gIGX>Cg&B zviEdI2j%5nkQ9r_?}ZB*ejg7alt9$H#-z|`L6G@g>i#}~K2JkyC*2G0-uvCRE1v#$ z4-f>|0g~#U7vTu4e?Nikz<~JQJrIN-DiL5ELpY%l215}-3+uiItTLna_%);KI##1edq(IEAA{h}`i2`VW z(tkf6uo+*x=HE}mQvEaT->&z?{Y?HD=s#8e|3FCB5*Z#`oale(7r1=jj09QcIVMyL z>JTVjh^H`6zSNXpV)y*W2}cC{WfTl{N-o1p3le9yE>cYxqquR}`2lS>!pN!Y{1Nv% z=Hg_n1F=$fCHhHWGxkTQow@n2LOL>(Y=GgBxfB4 zk^l*?0+mMwNBZeMIR0m4^IvNmE(ibz?E(PNt7UCybSivb_NHU&WfzlokDbjxvChbv z?8IZfX)A`WZ%G!vqgvei1b`a=dNeEf`pj6Z$itJJ*l?xdrD9rb`vy)n=p zKxmB^#xi)Tz~o^igwlP8B2e;S-d~Ky#9DNeut6^a1-c}|M^KPZH7r0ggojU91i(Kd z$@D)Xz)w^jVCH0|A{tXH#RVks>3C%6thk=4yhDqP-3BZ?!f0s#ZeIQ`931(>0GYSP zTp0cf{BS5Kx`reYp4$5#F#@7L(3rM}Q-r~_9+)tI=b-E5hetcuZ3qgBic3n%%0E?7 zQPa@U0eu9R@BwiENG5^OWo8H^;Jtp3h@V7|O!$TfK@3JQlHg+IzKtY+g!IpH_Z~(< z`e(@tqVYG~FM03Z`muaSCD%^Kh`1ZMtG>&+tBa0|y(_y*xJc?lV>BLq3``V&w+@%Ooitcu}l5xLwUBw!(`|4W1EeU>hs-=`p5CPnLY=zk3w@tpM@dqewgh}uCUKw z(@I&Z+cmkIl9Nr_k#Gv5-hH)Jzg!DDu51o9TU)9akF&B=@IG``bq&9;u-|&3FjDRQ z(QsI*|7rk`Jv4hIK|{f*>w9u!c38cc`@q~H7KN0mJo zmh+~4{#7Rx)waW>$Dd%^#e>qHb8a_>W!miv7rt)h?R)ciQ!6XlW)k}6gM*tnvsJp+20}+bM!b_IB-OZFx@UKYNbXj$5vBQ#&vR@!|Q}WePRWDdpVDegDX~m z(}DA&14o#%$LVpBgxHcwtNx84>d)U3%EJz}!7~bpNNpVj9lS~!trr-2gt8nW?z1!s zwC}LJbuFz%{`3h~w~b_YaTo&UO6oCUKQr zu}vTG&2nZw*z4=N!66cD`BGI?RoBHoUqea)tX|IT0izlKVNaJZhhhm<-dV(phR(DP zgQaGsHwRvJ68q^+xWg#dkWLn}^Q!pky!2Pvm;etgLIa8-2Zj%G!j?_(ZfZF=G&MFo zztyXB59>AF*9sCPY*iRs^N;Da*dCkoc~qF+RHkW=D^k=Os0)3>7u>KCM9uy3xyoVA za%aXeylK#3k6(-24pJVT&p;=F_hDH(xY$8^H~e6f;D>xDxeQ_%(@TZGkS`n+2+(Gd z@5JFGA}2v7f?@b*Gl{N<fZ@^5Jv3P_jz>70J?ccD$q)o`nHZcTYOWnSSCm}dCX^Npz0?+bt^X*np`d6g zXj#+-%5UMJVr8w>rEq}+Yex-k4(x?^pft<&+zI`h)+!F&s^>rRS zAS+!jN(hw_nt{@TU-(m4gg)gGtnR)^mouzw@{lLsDcO$B+(xjR4inJm0vei_=OWXK zXiQqV@#!!ycy#KkxNbFl?f;0E!{5GCkB7?gLSDSicg(DQSW&(K27KR~Bt+#fDk%zw z0545WGuz7NRouqsaV{2l?^;&%k8OiwKx3KbYO7k_;t$D$8b5)UhJU7Dr zHOKZ&YFHV1;km)Zp@{RjexN53CVtvoU&e&p`Y;dTE&Ir%!3WD&PnQ<7y~ z0MLO6e=7e>miCNE;adUoCVr}q$()xYd|k5^uM+8IsNsb!*+b4MQD>@`#Hi4us`JBN zKTd7UqEMcyzY^jo|FcC50IbG=v=a{ifcuynw9=Bq=BNOEcZy_0F51ZzCh!ayu&Aco zHl76OA?ffZ&h4T8emC}p2x}Fj3-r7WdU!~{voC-dI;yoF`n#(zCZDK){G#Vdp}MW{ zSMp;AVFnLd znv^2gpy)(7hsZUu&h;JFS7dnPE0xhdd3}ULpvN%#XlW>cBnM&uT+8e3I!N#u1x8Tf zuv52Cpj#u)G+a4VRUrz-kO%1ZB+%eG6dSj3HI67GR{JF59~xHKogWOFs3^y}{9N1; zDSE|q7^F79xboTu70|G6$Tl!L%d+0v5e}2P_jB;lSVg$Ak*?@q=r7NaiE@23A)b8B zfSh8r(#P>jKT1=3Da&CL$G<B`@EX~TUYT_NqO~`_MsD2 zunvj@z=@FI2@DW83h=Cr2tkmxNEjAF6+xlbn*>IxNRm;QK(BYRuuv>h2FGVG4l2P_ z9yH{Wv_3imyZ?!xguKJx-$eOv0ayoh8*_eER}6~v)81ktKw(*73gS9ddd!o3qP3%G0A(EK1Gc#Y}R#X)ae}juGgjV^xwm%2U z`qcuu-H#w(R1kJ)u&^TTq2y}HWY8e*!a+?2X?jE7TSzV5)(r4C&qyGJ5aETtF11d( z!Z_FCnYvSPj@p?1{W#_|(KZAK>Fn3`$^Pt-{khDK9rZzH$E^H zFn-%A^@@N|B2e0v2YeC#`N|lSAP4jgA={DOZ#l!30T)ZE8N2!{zh=kjJ{GzQYlkj+ zgi0I@YIDgZkgwf%MEJi6662GpHJrnp!RHCWEt?^p#&caZ+V&%NukkQTrVdrwbW{79 ze-IppMps{F5k-M=!ra-eY+pJ2ZMCy~eq$~#t6z)5?WoWGv}t4+jjF-(cl}LueBU+`&tEo_ zm8qJuxUJ5ltQ|57r|@L38yXssCr~)NmVF@1kBm`YN@}X1Y8jr1lZzN;>_GbyN%|0k-@}Z_6V~YT(ib2PN2?Dep(s*FLSb@L4$=&Six{b;@!}wqC}IP&-4L z_@YE1j=BEhNt*Ftul**4)%A(HKTYROeQ5meCiQ_Xu}*_JNEaV&=2OzH!-7AzzVo!) zD3ULd_vUEt3Xz}cgcVVt(bA%*6|)o-CD8PE1(KV!T@Ji*-H5>di@=H5Z7`EywGf`Bgxu9Ndy2rY+1-Y=g|FXd4Fx3}3IPmt=d<~Q#5-rl`v<-sO#cqzms8ci-EIm(6eF|iz=AAd=UN4Z zVK3#YHKze`Y(sOATtM zZlj!Yhy#J^okTQ_9GQyy zDm-pIG06KAzTLU7rv}BJAiIv@X{Uw1wJfe1CS%@-eik0dql<}*3_xWC69);b0sJ~0 zfDPzc%|eG*VC0*)1!YCIMY90#8q4a1m?OwYb(<6b?5A|kVQ_O)EyY-(N`AedSbOq>$f0)YUKd^>|ick6u4=vfuUU`7yhavR=m@ zWjy|J_3QJ5rc{!{AqOmdJESd-iJvEw!0%YJI6lcqxX9R1-RV+3B+;SyL1HvYbUH2Q z)Kw`?nAw*Du{sy%$cwj$1bx}pi-qYPIX&UUc9 z6xn#+V9VXr+q5z4Qn)=PWeMng+L{PE-aBh_zGBMwT) zX4?7A=nx>Sl+QNi2k+&DX9~O^XNi9ZuD3tq3 zuF}u@Ypozt=D6vFghDWpkKvH-@jMKF8$w{CQYX}R`jDXaQ?7~q?TQ#v|7qDwkWtK! z^L`dcfGLlo?g4^SOO`0UJ$w1j{zXI`L?iTBF-hXaiEg~i{SRrK;CcGX&Ohj+{nUFe zU#@EHo$=u(bJb>6p8lG}VSiTVJ+*BTc=sjD!!GPL`(yFx$FZxoxFTJooe;_SQ_2)! zOUN|ITh#%JFJ#xeP;0Sz=o~9evsB9vxASZTUCBU>zlm>Mo1yuQdhp4T_R+_fr!XO$ zL$r3GQvHwici!uW=sC(mJL^a2<;Q-edS)DS9BvSMY?eE1brp<~o3#u9@n$`_?3~Ny zV|V*i@2-aV`K$Gb<=Jxb)Uv5j&YYayMBcew)7D|x-L0*!-8I1U4_Vu^RAMFRhw6E+ z__2vQ9Ch?`$A;)iPj^pq$!x)mJd8%PRtA0Y?$6J+%g&}$54zsIG@duE{Utt?F>=CY zFYaSfowrSuyIyH8d^|mfl}Ft!xSjTMT6xYNJa7sf~0 z1y4N=vxE0*PuH{hNjBa;a`#y$H~6qv?Upw0P?2U_c?icr)A)2lM7T}?$NF`-Z+Hi_*T)3KnNRYr{@N&{dPR*gR`~Bd|6d*?SmCP8j(GA(!jk+?LC`IOv=C}p3*F0vT*NqOkQ10x?{t^xt7AmFG zYeAniJ>m?#3?f5O582n?QuKJEsI9%fC)@P0=RA49v^L~nFcCrNWd4#nvb27qyK)E3 zDhJh^dif3maC}Q<%j32l@N3ZTmZKdRLywADB5QfR`tDWF21RaicPZ=Adj=@7H_32C zxELd*yE~)$c5iOmpN9#HnjIZwhEpH=AJuyGww*7Ej30~gh%JmX@@b6UroAlaFT}lM z-&6KSG{3N%%A;b5Z96(Q2#P%33BAQD3C}UmnLI5|_q*BFTMTxJBGN9+a*J%p?&a$A z{nq<~*Z9i#DlbvIIdgoGHCI$*^kbQQe7UfIa~krh&B$c*kUO*KLgqw&A4NJG@Vt*kAasg&eYZFAXpQX}8-sI}}GUkW~6 zA+w+SMQVv;z+gdW034-;liyS;N_;Zj41c1i`q@KC_QyeH<4dtB-|+Qtp}}Q@JWXN! za`kMzlbQF_=*Wma=^^Sqb=hE&)=>Emv*GSsV5@-t3H;VfWuEO)*~fP_pS(@@2A1XH)pDcV7@mdhlW4oQ9c3(@9|4qxn^6=rt_ukpxH+)DLF&g<;?>FMn z*w^dR?eNNS=)2%Q;C}rg{d=N<)Vmj-RZQbHBgrkluu~?&Hg6dZAFIg; zzm|(@uaQc4OK|z;4>n38+q--@Oo+bCI`gzAmjkkD`W=9B zYnALYFFq!L3a#Gz@pp5m;Tav{z9@sEh$ zVLa8~!wyFc=G33NO?aZ>C}_T@`M9;?+>caAmCfk^1LV`&TXfk(W&GH8**iBA{@l+Q z!vSJ=;8O+Bv0B#fPplra1>cd6JdPz4F##W*S4hbD4-gm3^kk>4H8;IN^XTVx^j4ke zX?J|RRyD_p@{c@&6rBOtfO8p6M@jjC30~c8nf&S!J}Kl(I}!Lmz$3+l*kCfOGhC-X8;>URba<%5hTNNx%S139t9!2Fs@firp zkYZr6CJGH2*VS4O2(t$-rwfaMo@Y{b6+v#^*r4luSe+6MX_h8=PEBOpJ{QJ zY*)_%k<5IOeo>ZftY2pVvCqY&Gb#NE;*~|?CR5Gj#|W)ht@KOvx@Tl%y}hNZCG%!W zD&?ZG9dS)g{_mHP+;4)$1-iZYf3Dt5#~3fDsJw6BSs7ygcpW^}2-B{dsw~`HI4~9R z>HZzMGo7!!w|`ULlII!p{Ag`(eJ@KW{a40S>gma#CS>yPQNS-DV1z_jvi52Gn5ghl zyA1`N@7wLG#e}`g6irRdB(Afq^wF_Lhu(VK9=2jrjXu{R+)wdJN`B__kZ4yXvl&1# z6xVMX(|hXof0YM5X;mm`bh)d#%^q}{zjL|z8Y8XrKI6Yj~R1CWgQ=y?Tx9bUF z6BDJ|tSi+)d{}y?<5bFB(V$g^Fq5R9;A=)@rlA*7zxw0`VODTGq(q^M>t5Ow#Dk(- z02BSHQD5q zD|R`y9_p!dU6{!wU@1fY$s*sk>siD#XG^1D*t!U*Lzgc^mJl7 zNY{V9INbUyby+pDd#X<`g&ud{MBANV`L>Tsz@&T)QIFk^9R33Bch*Y+J-N#%^M?j= z+&pEE)JnZ|Q@@g*99pKa56@zn2xt$)8LEC);*kGQ-ndwO!0?%$!CKT=Eq(IO!p+IH z2)(TN)00c)@JK$4j=jg^)j0ty-z6YjL>4`mEH7f|vE+gQG7fUR9a*GjnBdVAKp<;o zX1F@7y=3PXDJLf{RXiyl7E)x+9O;Jve*ma?NGrf)gag+3;LKfnQc zR6lU)Ct)$kl~AUxU1{r|CYt!f2h=+xp(Storkt(!4fePC-C{ zU8{81ehoWb(q<7r@LPFM#V)aD)oFZ3AR!frYRy5$$eW z#2-pFnS@L#!eHllJODlMq|6dV^d)~m&=q~pZoV$V+bh=^ticP*tF{bTN9Cy8IUFNe=oT%6u=pj+w=bDcuj)!4;aNwX#zTCEBfAehA z(8+T~H};XNah$hGzq9b#P55i5xw*RJ$7^kLoS-}Q0J?p8Mj5)n0fY*&#W$ndx$Q2) z3p20YMX25YR2&~mB`+(;RRW&LLRAaQUb2VPI%>yTj}I;SR*Fciy!NT z2wcUU)j#zdDp|A}HUC^C^2wBllIZ+Ru`CY0-6zp6r zR_(o_u-m@!RGt*N%XO>=vc&87fY=&bym*hR6X<76>X~b>LPww6uh$OO7a&MmoD{TL|hJIa>$#y?rq(3$NK2QMX zqWxYt*Koj^(C27cmFd)mEztlhDyF37r}BwsjeH$lsSxI!b27d}nM&sKd|pGmJGT2a ziY?&dRb%N-7c#6|FVLD4Tc4B38~yb#Q*?(4gtm#@tIRmz{{QvzIu*A zCLX&T@uZZs*Lpk>ug&&MalEl#k7fQ+$aE3fqHM7FQ`I<{`EgK+DXeAN$#LM#cvBzV`87AW%LD^|TwTgPq=Q+on6|790a^&tSJGp@o_&D>J zlJwm5-wf|=OtHhY?VHAWdSXxjCR$Tl&)~0XbuDhDTAu51!FA4tdg8xkOmP5a`{%9| zBnFKv#obQpxu%n9nfr5``eai0DAt93les&pYQ5GcX|92icc(j0X!w_J*+ii$b5-eG zdZ|CiE7?XIw@_-Gimm%AE!vB{iMm(}D_;9h+9=1x3VCM`-5RiBFvDx8XIi2$7Q$KecS9ek71L-y>@*Cy z2qwlkM@Mnf&pyZ_P+WFR`(PmxG$_(aU-BxM>jg8HqBOowh69ksXO~mDb;nk4>62rr zJKk*lxyX&}oIs`i%kYr1O$?=2KYM%}%;%LAeAcOHhJgW3Ic&e|Ji%W|40*m;G#wC5 z2U9~Wkq4?O`VMbB&IcT=MCrMBS<}z}qa=4-@n{mXBO1k)bc>rb4G~sU$q>V@blTKo8TS?GD^3Gk?<*B@d?v7?r4bVAB%+AY=qtlRSgaNBgQG&fF*WJ&ux&tt+)&k97Ej#>zLRSUSl;wDX=u>C>DH*WsG zTmEQs$fd$Ynt*%BAUUt7gDX2z3yvRKPVCOvn|CAJU|{w9X`VgOH>XgVFciF0OrR&k zH{U;pB5eIwsfe(I6>?f(0X!f_&eZ|DVVb6$+)&1lq%WgQijK+7zWseesHhrX*>roD8@1VXz*H1Kby1Tj( z8xYzqWnFZ>=o4oh0Kn4n`~%0smXXSIvdXQlF;?HXVho9tSk&5@&(TFNSuRcC(8kxU zH!%~ech0efw{E^IDVRlB&2!5+8$xH{tSOOWD><4OB%-rJe1$)M2gAMcXrLwUIc+B3 zhZ%&LIw3=9{hp=uwJjL4!$JBM9bE99pMa7JD$D6-Au^y2Xh;53Wtg>$|c{;Ox zR8f&)qoo}w(S57_VEB3C%6ZF*VeSuok`9tn(YFpbJivm`J2SK?gNq2xg;$S$V!y~~ zruA)B%WkMnjm5$=E@cqHzl*?oEhDt)@Wb0b1FoQMbYfM;!P&9MtN55t>9(b1&`)^a57kLm+xD^ zL7I24Z+F}5YTjoVD$sqhdqF2lC{%?%(I6tTtD6LY?jtv@ z7#HAQAtRUlqQmra6MZlxjU&Pwo@(nXN_HdF?j9u3} zNHaIa`#i+&r~7#HZvOWl*W|jR#F8Jr&Ku)fE&H)%uj@_ZR)nC$C_w($O@X4hC=(zf z*DXn)&-NY7p{GOe?2Z&@SOzABYk>4F`V8<;-IJ)@+eN+j(Ob2SK!nkx{pap10NeUS~Vr{Vh3uy0kW5ZN;*K`7;FI znxaGk%4zh9j;BY|-9t80Z4l=>?H^}Z|U#d0E%z1%x zREmK%drxecKd7kaK&}Aan{#Z@8#PW0=_<3qtiGZfU|4+r+>$m3Yq60)OlItnPX=8V ztDMSUP-s2H1f^u&w#SLZDUyY!8PWL2?ShESBg!sHVC!HGkWRv1Sx3qz1G;SEpio;B zD0mV4RgGIEBO*b}@v(QH`GWRgm}Ub!m?$zhlXQM9<|SG3vO8Sxx{+(eFEx6DNYnrG z?&r?-*m@5npw{C2&$)H-GwZ^96cj9Rhn!et?265~h^ADgZ_Pazf1n=^bx3vfQeVDA z-xak{GhS*h4%ugnSye=n>b4SD+-}{X|Gq2K(EJTe_=M}6*XyyD zGY)0b0I{+w|7%%jkZSp^VG_(#GmoYu@ON;c5G-uV`TJs{V{@?>$9fQ)bn)0gZm)7! zvh;n1^(nXVfu_*3XWnd|ZZ{7v;p1y%G4;9Oui`oNlkTbcO!3@yN0<@@I@Pgd*VRHGwz3Dq%GE=No^EIZmTY`gVbw{d}LB8^AygUiHG+6 zPT~*!X04}2<~;-R{4NfR`Basja;m}EFsX?*FWvoBeWgCt(KL{spJFSeQvge z8(yw7jkz5i^?vAFq$zFZsMaLaZMB-7Kb9To#D(hWv=CP)EgI+E8oyrKBb12pH!T`r z5|8j=o0<#loToN4PC5uwp#KvTdc)$Ow(s5X)VePqLMoso%GJIocZ!Q{H|Vv!@Hb=# zWV&Jx*+BK(>RW&cjO;k`e=I%U2z>~iK+C#ejUQel$(ALvgh>Mq4tD97AKB|UXnq*l zLVgdM0ph$Nu)w>B>&~oCpHSIQyO3P?#Q626YcC@v>D*bjd1Asow?DhEH{YJVsXTkI zxiOo)?eC8?a-w%Al0iW%Qo|;wYvr%4=UH`jwj?usqZbt1Qn2^?>af@P^vKQ8tE1Mn zDyrK|vdPqxw>aIHe`*f*>`dU|@EphYHs@C@xk~29SctvVd;23c)|Q{kCf(+Ov$ld% zKs*-#FPRl|UV{25!)J4CLRvCn_8S4L!%)}BgXE)v6rcX8?mDJ+*tYQ0?K`_CFBLN$ z_$J4NYp+mlD=6H#1~cg^FCuQ-7a!MD$c}9_T`qm_s$hPDB`VuoAbepyAJbi^hHrDU z9zacD6+5%BA<%Yo`HY4}PR?=T$((AbxJZzyiie#dFi&br{f9dHwtICLx>yrxT#s^% zq?%@~UZP=JRCZ#C1AE+8XcF~@%0YipI3VbzZE1Yh+ZBNjphb>JfuS;%_DtA>LAo_bR-3!r=n*-SmyY>t@ZH9vp-*+n#wz}!?@A$!4H2S zDHS%q+lEo!v{>a!J?Aevyp&C8zpZ;hj$3S^*=n(5{{egTXnfx7*q5WbdhG7H_oK>k zvI>WtFRFXXeo(Y`eervN+;{KZrSrM^K3>MKeEl-e>8yUbFGn{Gfk-a>X;|dZ-!pIN zHt`C!sfa{P(v9!KGmb^x27C&V+iT?$w?18vr?7Rk?(-k3x0#e{ zJ>K}dYaAO9N#P;FD1{`Zms2fc{xZCm*=V}P=VM>?D=z$+D7-Pb4{j57ifXxw649Ac zRj(`cgMWq3ukiBWxVG^!tO)8&Y?+PQyYbYnn3UvgDZcNw-}Z2xdnsC?Ne)E++}Sz5f%!QG1&Y+6?ohvntzJ_aM5GfGP-H>uWi&p;IOxQQb_kzPN^|}* zr7zWVpIuDj50Ih?m=}i>J@NAlzcnOf;dFeVr{g`(Lk~cHWY`M&yH#$a*e?@xu z=m|-g-=^nf_OcX&kDRfgHnsl;W}KpDvQ!*t5~;~3h+h{mYcRiasfCJ^6oH^%tcuUH zqh>OA-M)(SNU#tCdpRw%G$z)+6@tLEdBxWNMiXS0xzZj1qwM1RV4Dyz^Q4m^_vo-2t3$b|0R%kF>%qQ zn-}zX&kdW|R^)9%Ub}H}K_;@Ef>!6EQW58u-##08huY}jV=qoVlK z4OxvCNAjHBvx`dJHT${5}eJx~*g7e%oye(N>8AJtRDgRl9SP zK7a&`QTLf7J%Hcge*V@)jER=gn_Po)A{R1|*PpoxxPTKrZt(nyYxR*UOb9e^00RVu z4EW9xPe$WU|IX-K!AX8%D*e65&mv1N#5Gf+kSXxi)=cg@XfWG*0#wXjZ(CP2>5N&@CWNI9ys(xg-&s@vnn$wlYw}Gx&E0693NjY4gd7oD> zZKw+QFN*i+Jknyk+$Ia_Sb%p}Jl=kR*KgC;_;T>YVsB-F`gXR&c61bd5yNBIa79hPcumI$DxHL3T!|R@gcr{)P zKmC6-k8jGo!1q?{Iep^A&!Yd$4>icybWk)RbntHdRd08rY9&{-f#Yr}nxWB{uX&`^ z1LK0{ld#Q-Tloa*%s4#NNreH$`G5`4!0gRyl*(yuJL@Zj9PjL>FTJOwbf2+Ve3W(= z59=rJ%{M~AdXCOfSlF2J0s!)Gb>?$B1wwN&GRQIE25xi^$spw9m!Zd&oO{Ups=qG) z4zN`khLVpvrez7U8V0=B?dFWg@t9sYmarBKQv|?2+5gv;PXGvl>Hd-l_>T&JfLi-A zs#o#B26``Y!tM(1itd_qbWL7|!1aqtGVj{&3T$8m>DZfuorJMn10zao1Wz%!v&tQ|@v?K`1O zyIEQ0PnhzES~yapQtXhusR`)y8@P5PitShI+=og_390vbpGZYCI$c$t&XjgKpG61r z6)ut$QaAUjIc^Tj%V#=WaTYy;B_Pw4n@q*GhzC&K;lwSq@A-?;T^Mt*8e+`c%*;49 zupRo}E%QY&eM%<7qzJmu`*eycf%c|b#|>8U%bnjNWSQdw)m_k>Cy)DZ10{JYr#%OQ z3$3PbU9S5uxQV=Fr%|w|OR(j+zGbZU0*R3)wJ{L3bT07tD)we+(;5F%>6c@w!#D4( zfCtk&i8#Y{TOk^%4f+!HgUT%yKZDs1LS{eOx3?^b?<+f)xiL|HrYbEF`sjQn2m6g?~Te}AogxGLwBr#8u2O)k8*Ky zhZMvJqb^H%d_wts?Yy<}L4y0QyrbpH{Om$$dH-vyQ--mkST};^3!RfM~z{iJrfEAUvi&0YXQ9^tGja zV6%eo!}vN6KhJFWd6s%qde7+$s~FpmLg}XmO?RGy@g!VMBUC_7Mg3>;e2F1ha`8Mm z^@S{FY5w=g9keeLT+j*dC4-Zu@$` z<`}-Kr%kol9bw?8xjjvlaS-$Q8Sf zuMCT-jk-Rxv=R!EBB7Gf9fAVV-Jl@d-6bj@-5p9QEgi!k9m3EsbPwGF48t(*Jn#3t z`_GvlbImo^z0TQtops-P?Fw|;TO)sH18o3R=MA5OLY>sL%j>s@R`+0y56jPNY9fb> z(`XnSDU;HHwzpr*zq{G3+}&zC^ZuS!6ZS>U1xNnkV2CVv)Nqg2r9t1}NF$h@=VVyL`BNNTa6T1E0#XDGhNg zDX|EFEG)1YjkHJui(zI|P_tA`aYFu^>tuO$cv_DRGU3?_1(TM1ymRn(P^e0t|Ap6` z*Bz=e1O^F^s%aZF)5{5c+_$(yl$DsuwsHFg*Yao<|1H*crRmKwLO<9PtD3lS!P$gF z_K6R2wQi_-tXP1Ck0$K0Dbimd)Qr4h;(Ma*vNX*25vRrc?OjB>|2^XCVvQs`I%KuO zuwXi+FmAsKPxENM+_$@!LkP5iduBelhamaK@thvxYjSJz|k z`RtQx(8~RCNL-2*lI_*Co$Ws7D(cwkP=tYgK|ne^Ks)JU{ogkiU5)SY?{tCm{He$?w+sfOyI~+TdHN zJ-V`|0T`dF*84jzE&Ipv7Fz_k0)f#>fEIJuY*!HrHYJt{%NL-l(g-A?8j|ESv1%8Wt&>nj!-SNMrTahOTH}B@1Lm!9=omQ`mEugGs`!-faOm(SRm!+PNa1>3l;EF@7|zKmg$8UBZho-wwkD zfWd`a$eqiJ=Y+Kzr+LEGx0QZb#U%=}zRPp2HQuXW;u!el?f2}MCfjM`P+b2+g0VnB z?Jngg;pyhrc)rS!vj;}+9T+y<{7pAKbnvU*+foe-{O}#KZmk+ncqLa`Hl~Q!ZcuHY zG+;+jcHP)W=lhm}C0(nIstaztzQPr8t)*3dv-zFUlRT8w<~I2h_PcvO zaS7;pPgaW6MF3>}fwyjPM6l?y8}M+6vh%Xmiiq}qUGK0EmbN{=>8gXh@YUZ@axoT* zzyrkJZ&Om^1LNiG+b6314lrif+p6`nNBlRmFA2i2nfmeEW8$NBw^6 z4VVh`0bj+Kh=#^g4Po$EBQWz_Ir8q~T(Ez_wMW-3T=~h~Xa?@n@9$?)J?L@*wH#<; z40j|kf^4cUc8dGa?XcGw$m%Q6w}@Oc8_WPp@v4(Gc;eS*+|#L`eMED(uq>A0(&KrP z-`CQ>tEG)V?VH9<0n^h>4Z!bWIzK<`3}3gUbHgCjy<6%ButW@W83AGF0~2(m#jKXd53_C{#eF?Q#@C?x|MrY%E%BbsLemNnW88#SE70>Sg%wVY;%9 zz;p90)6CH4j@4=QsfEAQL>f=60$o$!U6;}mnrMv;9>>aRS#Yz3dqIn zuD!<#4EoAfS9^7m@pBv*Om%X+2~J>8OmqzZ$zkE)w{ZSI*+QYSwBmU9TXT_oKzrEs zFgWVu-)&)D^YWK=O_`4LeZwKC?ZOok$e0ecb%ks^RGhu344v@mIZT_ug=6ND&?z z!_xY;zS{pwCseH~n21%EIxBI+#np`Pt&&H<-K%F)Y%7SDcjI%RidQ#2EhTv_q&td4 zQQS}|cBpu9bn!G^@@vyh;~<}p!tFosqeW`8&qn+jwUi*{(kQ9K^gyzTqd!Vtqms+o zzm3*N(!=ecgr4b_52G7yz?FKL_2;>6>BK2jD>W+mjn1rnTndj$r03GjtJxX6tlsZv zkVeSNDQ0cs;wgy8TC8p-7Z7PVcJ$VA=NO?nM=}cn%}-KFQLdU64{)uPJM3yC+v82C z>YvnP)JNu%v9Kp5>LyojbK0HA#fU9kt8~8~JqFViF+bmPY6~wc4_0}%)f;*Vy}S76 z$Y2_|GO+BZjmrgpXmS66#V)VVl3yo$QW~M)S}n>5wqWmlA0EriG$x&{Qi*r3N5n;Q zGwP!oZC4Oo87vE|X||I9DWN8&EK$hdr(Vkf{!@=aty<%E7lrJmTI2MA-XkjNt}NsA z(x1$i+W|$3Gheu5jbGn%uC(`lui=1$ARu4I8qoETD}isR3T&Z0Z8fmjVJUq0G&YE?%2iss4<&dCB~g8gKMMhFO+Bf8+?8zS!lhT5YaFBlGqaUhV zv0N+6h@T>i1ajKv_oZ}q1~s9F$nukr{*WD^t278W1fhJvP?H5S+?3uikiHHUFauu> zCPEjzRx{?M#zOjO1Gm!*s)-hCY1#sRgzSSARjrt6Oc0`wP}9SY=03~K33TTgaOdqO zyi~E-4M&}Uhfj#-(AzzI7&Ro8FV;Z!+L?OOQYbyd=T>n#<hO56dqfR%Y8X~ir z0EOauy`&y%6n9D`Br@d8!#qGl`M%-z&jjEiE4vx@QwB`sycVVs{EVoks80U&6L<5S zcC$*lvRg{kO_emzp5Ud@&jzEF2Z7vh{a44=LA2Sr5=b_tpAT-U$Qg;{t|rRwnqIGa zny^OdQ3hllU%mFeAlIqMy`ClPC389~f-ZwQ- zELeYf^WDzvX_^K4tE#@lkT!KO#SMOvS_q0TVi!u~eJd85pFjmQ0f{(D4XpdL9E~sr z=7XFbSS7gnX9@k2X!#`&6pxY)z^3ma_)y%-YK0ccCJe}t2Ke%Mz^~1p@)&dXul6H5>}x@r_8Pz3Zu>tIFeadL-o$f1?pG-*p9RfM+Xvs+p;l7xh$uRG5*uQY! zT?EsuRN?)m6*_C}6-~H?4JA9SdP7k#+gAIS9xUd^cdjEHSF60`n=$WBGlK~ui^e*^ zLZfUk5=<7aje?%-mzh{wr0#1jUBL6M4SZkR3pAt8Rm=+-a`5(-n$CbAUALwWsI9%? z@Kkx_BaE4j>1QNcGD#}Hvi1`@Okq7u6V=-Qm+jd5JI`#UnYUe$OOA_Y2>tV(E#C6- zt(O3n1F~@S>esR|o4%nNz$}lgn5;w#+$$90wpuL6NS9^Py)+DfDty>Pnj4ixL3GQWAl*rkib zn*NDB3HWd;i(-Nf|C3RsAG_%=mGcOiZ~VivoH6# zb@!I&+^!1IDLqr(cP~lw1GuAB`*MPgb4g$R*X=twF(^`_AD0u0`;ZVr2)?`%je1BJ1-XkAz?yuX5hKyvCJN*+m0Y>r16Y%EMtWJ-X4)CXMV+A91 zFNauw2eWWILY8n{hr8;E_TRoCn7l@4jR<&4mEAOFDv#E12Zz)vt3A#d_dq)*9$Sg$ zOPS_8SQ@F>6hB-S_f@;&9XT<5Y9n5aMh0}pAFB)XQ1crOv_LabOsFxoa(^0&Ne&n* zeSzTvl>UFLlZQH?5ZjQa#c5j+&-snZAs~xbwT?Tf*st=w#z%+xr|Ah?9sI!K9{NTv zRmv>`v*FDezIYXpN=n=Ul-H`o{GWJ|iCG9t{3o9L=cYB9+8siJ2I=V=B*n#QM;H7= z51^0G+32DCLUg;2kZSzHvo4#h&Gi1+TeIpYb_$lK+2|Wo!4m#UwL5vAo-%jNt@c1L zGQ`~1HM^9shU9e|gdjZs;^SasQeW0=A=hf@qQhM|o zA7NvBg5xAQxPWityhCGvw^1waaeZnN8bKbjb+0hH63C0EA&5r)gHEd`kRN-D3JK>U zGc_)4j_!l@p#C8mQc@CoJX(9T;pqDmwh$Ess%a{pydA4zkU$IBIH{Fc0y6(tJvT2a zLq+4U#qki#BmH=+a8)1}YlpvYN8*WxbQa>WgjfFK(Xp$(Y2z~m_7)GZGvc{@Av{bz z=uvtr#3fr7@*f(KA@8@_he5iq#kCC_oUUMCAE-U}g)6>!Nd8 zGu{upqLC4_^~)+abfP54^RqW;+T8Omv?=JpYbmFa{fH$A$IWy!q7J4c+8wt|!kuot zo1uYRzz0i|OI{mlvVf zia_z=0Cn~y_BWLtdX-P1>}aA5#S6FTHfb1f-zEC0=i4d4`5fxE08n6Ru+l~Bi22nt zP8*$#0!zZ+0(lTivdsHmqnxOsoaRibNXE`~7wPw%I~Q*sW`1r``SRXleBt__PZm}X zoQK3St&!P-8N`W!3b=Ok_{f%6(#@Y@13MXn=7zLfk4Uo*zJej4rF_i_*=#IWt+U&| zY(Dd|6LKLhEMmQG7TZ46p9i%HGcx>Ezc@tHBM$|ymfA0z`zgD;Rcs3B{30eQilFC~ z!2^yOBD5`OX!J`hp3tLR@W+Nbm!6i+p{LW8sNAcB z9_4|bRgdUUsx_1K7C~P6R4ul zr*TNr^ScJJ0E!-n8}l*AOPUJ4+Y~6CA(xB*cnCDA{su9R5&dkDSdKrCnOo1={k7%n z{kHkcJjx6)Q59A;D~RfTyK#rsnn`@wEb`MwpHe5H-_F}%X=&YNISpN5vgmS?jz~3Z zP9p8i1O!QoWai#vz}Q|h%yxE^70tkm=Le7mlZ3{68QRy?Gak3Dq>xO|%VUBZ1}kCk z$w%?41G~?y8E?Im z3GQ}75u4roXZvK5W6=^O^5ke@bXhhP*z;&!_JeD$T1z7=i@lBU1rfEd(Zd zvE@zJzOVbAQyce=ozbbuSbcb#!S}BfJ>Q80 zs=ivDuuch@ZDd`T`vt5iD7)g{kyMGy9o7_yDXS)DdLOCLMx?7aXPmITz~B4UFcdhO zc^`3d`?S5L9^5~8WZ&CSBk60jGvivXm8?N}5mvJN?;#dXf7ObkDOEy-j_>z3DEq{o zVy$cbX@i34wW~4|2gX4(Qx>Q-2*pe-5w=fa~{0I`4f^+o+q?Pcp5b&REPY zQzZ&e&IG8J*oz){=8=>FJ^ek9ORssSY0_o z-FOEQW}JwvORNKZq~DHT|4atY9e83#r)8u;EHpcM%#zo0Q zkzl=peYQXMr>jfxzP@S+2R%syIg8QJQlTV#GrBE{M`$Jxx6E3kuW*kjPs!Rsy0oi1 zJv!tQchwLa%P55KeWuHXaEm|zR&-V}R6qM_fei%`J5{3@h)|$7hV$j2h>-3d1II zP}ecT^|r!Hw~bya2&P<_S(8-dH*d}UZe=k&>^VOeR4&)vKTQ#lxUC&~Tb<68Kb3o& zIae5H{V-1S^ywN7y)0JZ6G8CpG*F90G&8`|u}d1}FDjRB-SY!l&F*4!el2g5 z6nL^lb-e3W+`I`@8EfFO4wn#AzQ@J-uoe8LWEIuf5z*8Mi?m(6vJYLf5dRI~jeaOT zXPBWUL$uS|I}5kmzlOI4tCbGJM|XA7C184}!eu07!L`k%wNG0@oT420h$L3nxB5mQ zNYbh{BsCGIkyS?NU1{<292j00?gwURdzcKp#huGXLxFFvKRl+W>}9cz@faD&`=_P7 zVA9z_%X*$B+j*n^c5E=I4yuOP`QQB`HuK z(6%TUOh*z*e0FPh!M(~*IKfo?RAMJ+$bUZSTF|HJIQMR7#gH)lw;jkmn{}j zjzIm!TF6gR{QCaKC{sF<3_>+Vk;4Y9&LW7X0HH5V+nx>`H76Ra`=j*zNn_=|ITG#S z_pbif24lk}#ItN7&tCD5)r%>8UX6f7!$bg8@~|&`I;0-SkYPpXb0OcW%AS-B!YRMV zLNqif(TiOzi|N&_vgc%OgU{r!J=ECWal5{T@I6#~w8^jOT=DCYU_-C&S&CnZf>?9_ zgx@#WDzBk9ZR$@WD=k2HpB6iVBuJ7m|7s`t^CiF8uwjX-=2h8Udao+(OM3F)-Pqn8K4&4Kr4aTRLJ6 z1D%BH5y@pcOlfoA;qhd9E%T6nKAR!GLVK+@h=_?fWrx~Jtnx1cc>A=CF5dl2FWIc0 zLv2=dC4aF@yB;9d>uU^%dv^%{OfLbz*p&!<{b0I%MuQMI#lry#H_EWq;*E8+;`oZu zIZ|k1_3m3YHcg%&3}=)@e|U1(lV}>AonpzID3vr5n+6NLx*w9>3UMD3s}&M`KQwxS zpe7S#2GYGRlcMdI=@7xm->3w1JNeUztyEM*yB$(cP0#j3TmE14p6^p@~X*rAe6NL+#q%JZBd25%S6V&pSS}$+>-0ysS2jWOUa3bD=7aW&XE4`=v#a)qM{0 zGi33{H;q^?xFKGxzk3VJ^1vZgiIKp+!l(vvHFjJDTr^ZHTWkyD`S4$2P@n%*C0I3d zr7mV$!qW#I3sA_t?-m*L+E)1FbHc=-aN9Z9nELe)61?ZS57QcBjMDtO%~UaUU}}5e zlNG#wk`h0ezVw=1gmF2=1l*2JBBjJvIc23J>lxEP=_P}E_Z;(T^dsU{HBRBMRMdD-CrmbUDqh^id z?8l9I_^*?t8qX7aE!=#YrSn#f;QG+3j<$22${mn`^E4T5@ z31N?r$5Mh%$azV?lGkv^Dr!~5A{$*v+v;`%Lu?%%LvGgy_V@mk`7$yw5vM-l*4Q;l zvG|_(Pj|KGv+`i0dHR$x$5#3!lCKGA9OE3^cHnGf`q@;*QNe=K)=D^kbI-()A=LgS z(nX)wz`XTpK%}#c#{a0%N^x&^d~)Z!s_TpYSfIoTe0@$(is$IyDd&q}%44|#F`1-} zSnz@N^rpXAbbH1h(4-A#C?~^7QU|Pp1Hollr zVob!L)&KkWg{aYOJlwlS1Iv8qU#IT3nnvAcKFt@N53p?^!vf$K_u+gFutRsU;BVQFtRNTaSclTzf9weF-*)B9Jg zN80BY!4~p3?9C1faS{X@`>E+E_5UdtT^QK{6aOg~1ehyh6gD3fMzu&occIVF_2?jU zDtZiEiO!K0iZw*yC?z~0{iw}l@b}YZ$nxU^?zCrpz|_p{>)R@!88m&z5wex(HWN9V zC}>`5DFnJlhjuy3+W~Oxn)kZw9iY{7HJ z#xvJq$6fY&JLXo?(Lah2T;5T*=y5r!cc0mGyE^ArZ5o2gC*;)hze44O5MYhdpWBB1 zlAJnJMZtCU%7%+JOwVV;ykB!{5M>X3JHPT)Z`$&DoscouU~#^JAkT4=b0@e=m6;}x z!pu7N&NCixs*DjrlA@&L~kJa-Czg&ZN*kMgDTbC4BKlRd;UmL|F{ z-!R?7nqMCLle8a;wFx&+3i0vA$xyqg5E-qnV3}^L++V!Wj3nb5s%+MpO@;6v-6U{8IZ~=Vg(+BfP^%7wL*f$Ev{xwP2 z*K$ie8K(W3P^R3Ho1-*2JdOJi`!t9xLjD{oIX=#p;;Pn^J%V}y6L>w>fBq~q7?eA5 zVMMcnlWz3vEV=8?qCubnW@}X|?2N4$yli3wd-MFaXdtcw6a~yvV+hV#4bdz%vC2CK z#8S6-a6$KbKyfH~lVL=It>#spg*2c4Q{d@vPSGuZ^B4DTWYy8Rl2{AcD@QrDPY#Fd z?OjNFGu6xWm0qj-VqGVaSjNJx>yIr&UD)|-PTEn-g=QgI9^E8qHBm*8_u+#{77d~V zkCe|!$OkV3R;vm``An+ra$%jFmqGhdNI$j*y)co-gJk2pgFOa7L(w{^a{w0LzvyZu zf%7nVu_3m|jRdpQ>T)@6t5d0u`vV-~R%~=Q1E<~2hnD7dii#wb#-y}ug`x&X$FZ=I zokKFdrR(1JJ_(>~#g%Yj2;`2YCq(`Qr(7Lv*t)ny9l&*TtrDX9 zCB<*3n;skuTq@~ZymI$`rCWUh;ruwYUTb}t}SlkYyB0jACI6ft2d-D)96yY z0CQS1vZ;1ll8TBJOg$)8`lrzY#fJ$6`Z;sQmh{l&{Fr1qoDj_5cxEMn88WkLrFf2g zcy@H}%fvk0(G^S%IEB^NGBID_hqY`~V==4%X}!sY7~r~|&R4;5A|)W9R>Cdl28IX=It*E! zU2Ob%{-#$HnPLPs@<@J%+VX zbk8mAph(QS(QpUwYJmA3p6AS@gM=NBg}8j6bZ{fE%7y+>Ce+XYD}N8Lx6 z(p+xUODp?F&W=B>&g;-PNd1W|1r2$_(5}`2506kY=}6x+Q3@{h%@<`pjS1Ojatyh< z7Hek$-kU=sIc49i+}r$~Kk) zxB3wei*Gft$WKEmkdN4_?hHJCCv#<`svp*?DXjsR3(=Q6mIKI`V)1r1{aCJK=fg9H zHtq2zMJRWM$6cjPsvt%uoA={L#^=6YR0V!813(}gd(#r1Pl&YUO%@1iEoj*hU}ww{ zOOL_@fRL}NMM~>A={1k%?A;`S7-l_k&{ZbKIBV(ztVO+p+cjmz8|9xQDPUZy3g&lGXBi5 zI>Y-r;zF#IcW#61%=OE2NfAB%zdx(s)RN)3E8;0}(E?!-9H4Y)JqTm=@q+@JIa2WS z!QdbF!AFwpD0}%)7nSSvXg^76{|9|^FE7MD?Q==9%NcF?$*0&;%k~{u4h0bt0MbJA zdDrB28BZwJOB6olz4EcS!`j_^JA(i5U!m!b)@5Ydoad79ro9MGSPhx*ywF-W8y+bqIUioccxWzqERRwtGYWMyc**!ui--V8rD2iGJC#lPEaP zAtVyKT=B;CD~{f`d7osegj9!VOyxMNXR0MWa$~~`Lh&mWypvjS0m%k^z*AMOeVt4q zs&46!Q6AZp5ZK*C><;d>0~vnLfcqKVZ~@7P=dIx59Fp=?-3w2iYm`)mYH%xU5&o|l zmCqst_jjU?gYc7r-{}QEE@8nYrc&-xVd*$v3xVA|Z-Xt^`H)|UpVYxz#&K26?&qgo zcIsUAH+$Q?cp9eIb%SGm8*DUW#yeBuac4=-!vuWdu14Ab^dE`{?LMTgOwJ()ZN6bW zVDaQi?f#6@fpoM^)Bwbc{YcvCPBf!rYVjv;V!{of??9UB6ltK9=W=Jb2|n+Ni)c77 zr|&2KjRuoZ6VPLpKDX`6)&ucji;pUtmce_*ExudkAt=bhVJcQf9F8wObzw7W#s0mq z26yOiQ-k8+4d5SrjRVjXiawQ|2YwQCIV^$WBberaacjp9S)!JYG0V@@^&7?Q^A^cM zJxNO zRxx3Z-mE@>zL*{~s&bJ1Lrot)wZ!M-b*hR3Bz7TQNJ%@~&4nz1Y?XXoU?n~nKMZbN zK765DzVDsGzPn79XYqITo?W;JHw?GqBAU#KP+Z)iwbLQAiQ>3Gf*8Wk3HM>YR|>#6Z<)=LjzCz=o2hw_~t_=iTXrSbV{ z*0~q%LsHShn`b33aC5T4#zdEU=yP|GWSrs>+^!OTCTB7MdQOIC+wMERV}j0zd}ohy zuv9(gk>+75kp$%DHQW%!X`Q3Lel^HFmqVF~>)Rj0Uc99*&B>bP(&)VjMF%mKpweu) zN}J@&oaT!PIkMAkurph#NDD!G8~lMgtp2-0$K4;Jnak3f2`Bd*CyeGVi|baz(T~d` z&F4d0fe$z@AOw7YIE8y6oLJF~?i4Xe7(BkmUcg)<(*^Cz-k+UI%y|#}T#KXHJbRfU z&|Z24O}V>{;Pp(e4OxPF{=;%^pYBoSb#{p(g>W|y;GTQp#Ho@=>S+yfN{;)REs(t%Hrc+pNO#-ZvKO@ZrII};;PzjU)}S7GGCM>zW* z1IFkhDFbgdBDB>itgjnEl4d!PHB*--#Gbq+norp*5}x=C5f^A{VVMh=#$t+*d&|7p zq$D3xO4+w3Z|`}w&ggL-cABpRgz*Q-hpN_d-mxngdtA4D0!`8!Y z7QkVbbE(`1{yaQDBL8D$bWi1f-2t+tCS>PVKBU7}`kb5E7sYkIPMaYvwpF=l)G>3_ z)gr@8E8Z>&*K8kQI_dzv9ZO0cSy@_4+3L|lTzP|L2>E5*FOrDQUp~KKJ4I%xb!veP zHYh}%#^q{^iRGN@KGYx=xY!+jVD$Lav|rr?1Ly*J4Xe*jZ873Gy^V(LmH+(yB<=wq zo`H&qI6Ii#%zk-@?Ed}dN2mU%4^P{aCbu!Jt5pL zoIf<;&EKKW2#DP#P_pOtPm|2C=^1l0_T2DD70Q6fJmifpCeM^YuY0S1*fMEut~t8% zA8bN9s%tKPm7EWp(j-p!67VaQj9J2<47~{6gK~6z3zs4%!Z}SnCWt4QX6Qma03Haj z9Sizki-sKyFV22@d`h8rY-S_|Gy5@15?Q3*T=lE5F+m7z*dpT>r(BKdXV^%I!8gXn zK&3+U>|xzq|Dj!J_QYh>`f!7E96j|92nh5!t6)`3!;+(2 zz3FTA)sl5uaEE|c;awnxn%L0y;PYQik*?&(a-|EZshVTo10I@{Ib#i{+Gl?CdFqgX ze2iqyLx-EjeO<)CzKQ$jmX&X_6FLYQG|`RNEA> z$tc}%l2!*{&2}EuE!{W1YOle4q`b!gV3B?ZiuT0`bHCDB%~YjxLu8CnRxr^O7%NnwF+qg@*3FuF?bcM)AoT0bi>_4B%;{S}@PMhVX zyt2YE{VRO1t%BhhlA5Wf*)OCcr&26sOTTd>Q;=CAK9x2p4NY>=SlnKeBn5&46ckR7 zt#q?Xr|-kP-EZu$@^@i3oLIFuoyY1J8wS_FnJ`xB7)ve;Dq+hZcXDQ%i3&-y-N({Q zA&#LMUp2(LwjB;2k`osoUoVHw`~hFgkq!f;9_(Qb+3`I~;<1l;3e@K7Nnx^Ln#j<} zjh$}%uUl+cSqLWX)t<`^A_fe-}dbQDN>SC-VL7-2Hqcke06Fnp% zcbSpv5^Mo~H&`w3x9ns7#GG~9b3qemjjM=Ne%4K?Me0bCN>SY?+auczwg-)wpp3a( z78@=+xtI`3%O1AwE zIsSRnY8^z@LLskKaM10U7aV>=ht5t(T2;3jW%U$BM0TL5%As;1J{!Q=?E*Fb?+-^4 zYmQ9v=x{#e)36=q<*t>(iQXYHxO>7BiLeuMT)-9g-<^bQ>y3%Cz?;2Sa&*F?ayZ@& z^J_Jer`&1%HVH>L2SnSs0ki%xn;{ml8?WX43BHp{3oTiv`myCac|P?|V@Q?sWL%m4 z(|Pur!esu_u!(_dc$?*u*84+f{K4G?>hL+gKH0>64byDPRhZ+gZu~cqhI&tc5+#M! z(C$xG#WWHCd^!iA-`qusIhR}}6x-=OcO<@dyjtss>bD5Q42?KqEc$!2kr|TVuwGO_ z>BgK_>wIm^LOO;G5NJ5RrjgAbn{=at#8PDza2W} zcl`9dJuN_tEjkKS60)*hmT>#AfH}Ej&`3Iv3+V0NMd8+zucqIxnyZD+IpMRmAx;zB zsJuL+ct&pdFui=2o7tp44@Q5<^9Pw6UT=@x!h=JZB4UFrq{_5WNR@Q;4eX3eL z_|La;-llN+s}DuO(G4O#5)iYFm;2W`(rG`FUt!*KJ6L(&bUB#+BeUVt>XG*@aHguU zPZexz!s;X6z23bxa6du8?(QzxdBpzvY2~LkD4tH5 z_FP}1fd*Fo!o)BuvFj%m{tRkKo^5&*zi?!q!BKWs&5a&!y0=vh%&>kT3ci#nlZh;j ztp}S2#4Yjuei(eqT;_1%^f>i!^S*w1Ipsl>RuTEgIv%_g!JZ0z)% z*AP?Y5NPUtm9*E^hsa{F6X~v%@vmp(fDZB|Ld97&x|c=$P3(WQCk#6X)DYqxvUC6u zcVN(SHK4@)c!?uY&HL+mzcLs))iCTFC>MtH8Amo754zAlcH8LlypV_$Fnk)yS>TFz zjJHjL8FbaU=o*!!{4I00&sOGGB0V9WciX2Y@$CzTxlv?@ai=a%82U#KRDjUWo#8YEn+PH%YeFo=`|JU!yJ5=aky%@ zAgzj)Sc8~Bhc_3rsOza(b(_WOPB#4G5&eL2wEHuyI@iKc#2Z}=Bhbu?Zx;|a(@Ce- z!`>BE`8QwC8xt1LVqXeo3k6adZsE0BAPB`cAFo`Yu5?uN#h)m#3*6($xcW9vaY639CdxA#U3QNtl z{Szcbybn)ef;(Vi#>_cfU`cds>FwhIE!*+#nPUCy7;F?2oP<**=TK;QMh3=ert8Tu zFJH6*X`!=o+E*h4c`i^k}vBes`4ZJ&zWLPgjt7qQ%lXnGQ|y^>7g@v8=p+c#o_p z^5!2LSueB{rfLnE#0iXxDuSe>JNkp98q|=d**oT{Ioh)_*79uGxX-@6f3v0%2QjN0 zzLv(0JCv?0fY2CIdg!@L9-a@X124`oCih3EzmgD_v4QUa_=>gRz4dtbQVgl(T>~DE zE(7klxif^HNabCdws}eIY+o6@th0zryUWl%2kUC*<;lj5;PA=`LOdhQ=2!pXr5 z0v}R@YeyrN?K*6r`TBJs3vDF*>@9;3#ud^0Ta+1sZ)ACgPsxH^=TyPZ{ z$<{`4;T%a|9yjmzPf_qNSj0j1Gdyol$|4!@;Mdo)8@04_@~XNl5smKI!XH_8_k4=) z+S!D8WyZj7&yF%S6p4LhS0DtU%VGVZN~lq%^k75na_`U*MT2VX4(sb?IeRjHzZBel zFA0C&Y;?14lPlNtgAP_72gymK|7-xWIrl-ezJb)P>C^1*7C<+`j;K3A zZ!JGkng)CD@8iR${#EvennyU5%U!y3vJ%Z${^9A+d} z@Q!^^bHoS9P2pr>HvC|RiD#9+mXi3yJgd`Mneinho^r3o_db|YH{*2ZQRMy+XKZHG zi8~9&QX++Gpl!EtDGI~y+3tf2FC^{@@>H%HZtn{gSI{{nia7S-!(D<~KEogw`1{4% z3X%r@rA=Io8rc-CtbsP%Nz{6q$w}CO#lVgOG}QSRG-N9w8!fZ2GaM=KCH(~L3h#A= zc_l;945Ms0`Ol|q#o?~^fghxZwzegQ#wY`SsvvzY(Qa}hFnsdh#E&4tSX7{@8zd8< zDDtdZUc7ZpSB}vpiwUk`qcS^8KXCc?aE~Kf;PGuj_9%P%-k}8t4g(##gTFzLSE8>g z;#vkIv`W>=t_OG6&?T3L`rxjDET2_$Rpf5dE^$!BunS9oh<*F89v)bTN$MY-k9Dgt z=)4&+t%E&1l*o7%x9oUCKjnn}v=xgV^Z2xzSZR9zNA?>zhGzs-PmmX?T|A$NdP!=~ zGe?1voxIcg5dR>ztGe|lwi7u%IbbN}Q+zW-h-D}1jI)b50ILb)Id!FY(i01Cu>6-5 z3&TGm^+N+}%4psmro;XAZ^0ByFP=uNJ{cUABLNa=G6g+qw`1yle%NpX%{+<0tJH~z zC-va?qzMrV(xl9{YuePdQK0dw#F5RI$gL3(p!kG4(9y9~a@5w!|8zJW;;D7U-Nl1w zy@#;bqP%&7nXkUe23F^aN{&9?FsA!0L!nw``tT%S_hc+>#$#`h_pEs^#jUWj};VM@Kf@gpQps26>{RDk=gi~R55Ds_wCw$Wm9TI=6%iFHnf#jCY81LqI4DuYjb2$m(Fz=%c$!EyRp%!A z|FjI;$48iD$HaeH#(&SuN0Nmc9CX(wX`!H6md^lt!vLLv#@Ao#lpN8tLj&K$Xc-Hk z2Me&L7e;6HAlHHe2%--bd_7n%dvlW@Jr{O`aW-?^|5ZWGJPia;s9Qe%57jPz<9?@= zMx=dBV z3uQu^6R2=DnizOA-cnA-(~ysv3%xh!8fm=(0d~6WygFFp>ZO0000000000 zfE~TsOZRiL?e#Tt$6Z HPXNjVLR2K5 literal 0 HcmV?d00001 diff --git a/sounds/scifi_nodes_access_refused.ogg b/sounds/scifi_nodes_access_refused.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2a4083c94f2fef7040f3666bf329bb30d10743f6 GIT binary patch literal 20909 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 literal 0 HcmV?d00001 diff --git a/sounds/scifi_nodes_palm_scanner.ogg b/sounds/scifi_nodes_palm_scanner.ogg new file mode 100644 index 0000000000000000000000000000000000000000..05bdcd55bab710c88221dfaa0ed93ddac0288f00 GIT binary patch literal 19726 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 Dak7(R literal 0 HcmV?d00001 From 6aaf2fa665eb5a01d3f19c71ff01baf2f98b6b00 Mon Sep 17 00:00:00 2001 From: Grossam Date: Sun, 5 May 2019 19:13:36 +0200 Subject: [PATCH 10/22] Palm scanner added --- README.md | 3 ++- doors.lua | 2 +- nodeboxes.lua | 66 +++++++++++++++++++++++++++++++-------------------- 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 9b2d87b..fa4fc1c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ -![Scifi nodes][screenshot.png] +![Scifi nodes](screenshot.png) # scifi_nodes Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. +* 05/05/2019 : added palm_scanner, which emmits mesecon signal when rightclicked by owner * 05/01/2019 : create aliases to deal with old namming policy un doors.lua * 04/26/2019 : * sliding doors now open with mesecon signal diff --git a/doors.lua b/doors.lua index ebf7eec..a73458e 100644 --- a/doors.lua +++ b/doors.lua @@ -276,7 +276,7 @@ for _, current_door in ipairs(doors) do drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", - groups = {cracky = 3}, + groups = {cracky = 3, oddly_breakable_by_hand = 1}, node_box = { type = "fixed", fixed = { diff --git a/nodeboxes.lua b/nodeboxes.lua index 69fc6e3..98441ef 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -1359,9 +1359,7 @@ minetest.register_node("scifi_nodes:digicode_off", { minetest.register_craft({ output = "scifi_nodes:digicode_off 2", - recipe = { - {"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""} - } + recipe = {{"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""}} }) ------------------ @@ -1376,14 +1374,8 @@ minetest.register_craft({ local function toggle_palm_scanner(pos) local node = minetest.get_node(pos) local name = node.name - if name == "scifi_nodes:palm_scanner_off" then - minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_on", param2=node.param2}) - mesecon.receptor_on(pos, get_switch_rules(node.param2)) - minetest.get_node_timer(pos):start(2) - elseif name == "scifi_nodes:palm_scanner_on" then - minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_off", param2=node.param2}) - mesecon.receptor_off(pos, get_switch_rules(node.param2)) - end + minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_off", param2=node.param2}) + mesecon.receptor_off(pos, get_switch_rules(node.param2)) end -- after_place_node @@ -1398,21 +1390,25 @@ end local function check_owner(pos, node, player, itemstack, pointed_thing) local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - local player = player:get_player_name() - print(dump(owner)..dump(player)) + local tested_player = player:get_player_name() + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_checking", param2 = node.param2}) minetest.sound_play("scifi_nodes_palm_scanner", {max_hear_distance = 8, pos = pos, gain = 1.0}) - -- wait a minute please ! - local clock = os.clock - local t0 = clock() - while clock() - t0 <= 1.5 do end - if owner == player then - minetest.sound_play("scifi_nodes_access_granted", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.chat_send_player(player, "Access granted !") - toggle_palm_scanner(pos) - else - minetest.chat_send_player(player, "Access refused !") - minetest.sound_play("scifi_nodes_access_refused", {max_hear_distance = 8, pos = pos, gain = 1.0}) - end + minetest.chat_send_player(tested_player, "Checking : please wait.") + + -- wait for a bit please ! + minetest.after(1.5, function(pos, node, tested_player, owner) + if tested_player == owner then + minetest.sound_play("scifi_nodes_access_granted", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.chat_send_player(tested_player, "Access granted !") + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_on", param2 = node.param2}) + mesecon.receptor_on(pos, get_switch_rules(node.param2)) + minetest.get_node_timer(pos):start(2) + else + minetest.chat_send_player(tested_player, "Access refused !") + minetest.sound_play("scifi_nodes_access_refused", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2}) + end + end, pos, node, tested_player, owner) -- end of anonymous function end minetest.register_node("scifi_nodes:palm_scanner_on", { @@ -1435,7 +1431,7 @@ minetest.register_node("scifi_nodes:palm_scanner_on", { }) minetest.register_node("scifi_nodes:palm_scanner_off", { - description = "Palm scannner", + description = "Palm scanner", tiles = {"scifi_nodes_palm_scanner_off.png",}, inventory_image = "scifi_nodes_palm_scanner_on.png", wield_image = "scifi_nodes_palm_scanner_on.png", @@ -1453,6 +1449,24 @@ minetest.register_node("scifi_nodes:palm_scanner_off", { sounds = default.node_sound_glass_defaults(), }) +minetest.register_node("scifi_nodes:palm_scanner_checking", { + description = "Palm scanner", + tiles = {{ + name = "scifi_nodes_palm_scanner_checking.png", + animation = {type = "vertical_frames",aspect_w = 16,aspect_h = 16,length = 1.5} + }}, + wield_image = "scifi_nodes_palm_scanner_on.png", + inventory_image = "scifi_nodes_palm_scanner_on.png", + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, +}) + minetest.register_craft({ output = "scifi_nodes:palm_scanner_off 2", recipe = { From 23fa45bfa8ffbb0ec0a8f8a9959fb790074ef4c9 Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 8 May 2019 18:10:12 +0200 Subject: [PATCH 11/22] working digicodes --- README.md | 3 + nodeboxes.lua | 267 +++++++++++++++--------- sounds/scifi_nodes_digicode_granted.ogg | Bin 0 -> 45819 bytes sounds/scifi_nodes_digicode_refused.ogg | Bin 0 -> 38082 bytes sounds/scifi_nodes_scanner_granted.ogg | Bin 0 -> 35649 bytes sounds/scifi_nodes_scanner_refused.ogg | Bin 0 -> 29211 bytes sounds/scifi_nodes_wrong.ogg | Bin 0 -> 20909 bytes 7 files changed, 176 insertions(+), 94 deletions(-) create mode 100644 sounds/scifi_nodes_digicode_granted.ogg create mode 100644 sounds/scifi_nodes_digicode_refused.ogg create mode 100644 sounds/scifi_nodes_scanner_granted.ogg create mode 100644 sounds/scifi_nodes_scanner_refused.ogg create mode 100644 sounds/scifi_nodes_wrong.ogg diff --git a/README.md b/README.md index fa4fc1c..d671540 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. +* 05/08/2019 : + * digicodes now work + * new (and cleaner) implementation for palm scanner * 05/05/2019 : added palm_scanner, which emmits mesecon signal when rightclicked by owner * 05/01/2019 : create aliases to deal with old namming policy un doors.lua * 04/26/2019 : diff --git a/nodeboxes.lua b/nodeboxes.lua index 98441ef..586ba96 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -1140,12 +1140,12 @@ minetest.register_node("scifi_nodes:widescreen", { type = "fixed", fixed = { {-0.375, -0.3125, 0.4375, 0.375, 0.3125, 0.5}, -- NodeBox1 - {-0.5, -0.375, 0.375, -0.375, 0.375, 0.5}, -- NodeBox2 - {0.375, -0.375, 0.375, 0.5, 0.375, 0.5}, -- NodeBox3 - {-0.3125, 0.25, 0.375, 0.3125, 0.375, 0.5}, -- NodeBox4 - {-0.3125, -0.375, 0.375, 0.25, -0.25, 0.5}, -- NodeBox5 - {-0.5, -0.3125, 0.375, 0.5, -0.25, 0.5}, -- NodeBox6 - {-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7 + {-0.5, -0.375, 0.375, -0.375, 0.375, 0.5}, -- NodeBox2 + {0.375, -0.375, 0.375, 0.5, 0.375, 0.5}, -- NodeBox3 + {-0.3125, 0.25, 0.375, 0.3125, 0.375, 0.5}, -- NodeBox4 + {-0.3125, -0.375, 0.375, 0.25, -0.25, 0.5}, -- NodeBox5 + {-0.5, -0.3125, 0.375, 0.5, -0.25, 0.5}, -- NodeBox6 + {-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7 } }, groups = {cracky=1, oddly_breakable_by_hand=1} @@ -1203,6 +1203,7 @@ minetest.register_node("scifi_nodes:windowpanel", { sounds = default.node_sound_glass_defaults(), }) + -------------- -- Switches -- -------------- @@ -1286,39 +1287,110 @@ minetest.register_craft({ recipe = {{"mesecons_button:button_off", "scifi_nodes:grey", ""}} }) + -------------- -- Digicode -- -------------- -local secret_code = {"1234"} -local allowed_chars = {"0123456789"} +local secret_code = "1234" +local allowed_chars = "0123456789" local code_length = 4 +local digicode_context = {} + +-- after_place_node, use by digicode and palm_scanner +-- placer is a player object +local function set_owner(pos, placer, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + meta:set_string("code", secret_code) +end local function toggle_digicode(pos) local node = minetest.get_node(pos) local name = node.name if name == "scifi_nodes:digicode_off" then - minetest.sound_play("scifi_nodes_digicode", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.set_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) + minetest.swap_node(pos, {name="scifi_nodes:digicode_on", param2=node.param2}) mesecon.receptor_on(pos, get_switch_rules(node.param2)) minetest.get_node_timer(pos):start(2) elseif name == "scifi_nodes:digicode_on" then - minetest.set_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) + minetest.swap_node(pos, {name="scifi_nodes:digicode_off", param2=node.param2}) mesecon.receptor_off(pos, get_switch_rules(node.param2)) end end local function code_is_valid(code) - local valid = true + local valid = false + if type(code) == "string" and #code == code_length then + valid = true + end + for i=1, #code do + if not string.find(allowed_chars, string.sub(code,i,i)) then + valid = false + end + end return valid end --- local function digicode_turn_off (pos) --- local node = minetest.get_node(pos) --- minetest.set_node (pos, {name = "scifi_nodes:digicode_off", param2 = node.param2}) --- mesecon.receptor_off(pos, get_switch_rules(node.param2)) --- return false --- end +local function update_code(pos, code) + local meta = minetest.get_meta(pos) + meta:set_string("code", code) +end + +local function show_digicode_formspec(pos, node, player, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local current_code = meta:get_string("code") + local current_player = player:get_player_name() + + -- Gathering datas that will be used by callback function + digicode_context[current_player] = {code = current_code, pos = pos} + + if current_player == owner then + minetest.show_formspec(current_player, "digicode_formspec", + "size[6,3]".. + "field[1,1;3,1;code;Code;]".. -- type, position, size, name, label + "button_exit[1,2;2,1;change;Change code]".. + "button_exit[3,2;2,1;open;Open door]") + else + minetest.show_formspec(current_player, "digicode_formspec", + "size[6,3]".. + "field[2,1;3,1;code;Code;]".. + "button_exit[2,2;3,1;open;Open door]") + end +end + +-- Process datas from digicode_formspec +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "digicode_formspec" then + return false + end + + local sounds = {"scifi_nodes_scanner_granted","scifi_nodes_scanner_refused", + "scifi_nodes_digicode_granted","scifi_nodes_digicode_refused" + } + local sound_index + + -- We have the right formspec so we can proceed it. + -- Let's retrieve the datas we need : + local context = digicode_context[player:get_player_name()] + + if fields.change and code_is_valid(fields.code) then + update_code(context.pos, fields.code) + sound_index = 1 + elseif + fields.change and not code_is_valid(fields.code) then + sound_index = 2 + elseif + fields.open and fields.code == context.code then + toggle_digicode(context.pos) + sound_index = 3 + elseif + fields.open and fields.code ~= context.code then + sound_index = 4 + end + minetest.sound_play(sounds[sound_index]) + context[player:get_player_name()] = nil -- we don't need it anymore +end) minetest.register_node("scifi_nodes:digicode_on", { description = "Digicode", @@ -1334,6 +1406,7 @@ minetest.register_node("scifi_nodes:digicode_on", { paramtype2 = "wallmounted", light_source = 5, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + drop = {items = {"scifi_nodes:digicode_off"}}, mesecons = {receptor = {state = mesecon.state.on,}}, on_timer = toggle_digicode, sounds = default.node_sound_glass_defaults(), @@ -1342,8 +1415,8 @@ minetest.register_node("scifi_nodes:digicode_on", { minetest.register_node("scifi_nodes:digicode_off", { description = "Digicode", tiles = {"scifi_nodes_digicode_off.png",}, - inventory_image = "scifi_nodes_digicode_on.png", - wield_image = "scifi_nodes_digicode_on.png", + inventory_image = "scifi_nodes_digicode_off.png", + wield_image = "scifi_nodes_digicode_off.png", drawtype = "signlike", sunlight_propagates = true, buildable_to = false, @@ -1353,7 +1426,8 @@ minetest.register_node("scifi_nodes:digicode_off", { paramtype2 = "wallmounted", groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, mesecons = {receptor = {state = mesecon.state.off,}}, - on_rightclick = toggle_digicode, + after_place_node = set_owner, + on_rightclick = show_digicode_formspec, sounds = default.node_sound_glass_defaults(), }) @@ -1362,55 +1436,98 @@ minetest.register_craft({ recipe = {{"mesecons_switch:mesecon_switch_off", "scifi_nodes:grey", ""}} }) ------------------- --- Palm scanner -- ------------------- +----------------------------------------------- +-- Palm scanner -- ----------------------------------------------- -- /!\ When "overriding" a callback function -- -- re-use all the parameters in same order ! -- ----------------------------------------------- -local function toggle_palm_scanner(pos) - local node = minetest.get_node(pos) - local name = node.name - minetest.swap_node(pos, {name="scifi_nodes:palm_scanner_off", param2=node.param2}) - mesecon.receptor_off(pos, get_switch_rules(node.param2)) -end - -- after_place_node -- placer is a player object -local function set_owner(pos, placer, itemstack, pointed_thing) +local function set_scanner_owner(pos, placer, itemstack, pointed_thing) local meta = minetest.get_meta(pos) meta:set_string("owner", placer:get_player_name()) end --- on_rightclick --- player is a player object -local function check_owner(pos, node, player, itemstack, pointed_thing) +local function toggle_palm_scanner(pos, node, player, itemstack, pointed_thing) + -- Some calling function don't send node param, but everybody sends a pos, so : + local node = minetest.get_node(pos) + if node.name == "scifi_nodes:palm_scanner_off" then + local meta = minetest.get_meta(pos) + meta:set_string("clicker", player:get_player_name()) -- need to keep it somewhere + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_checking", param2 = node.param2}) + minetest.sound_play("scifi_nodes_palm_scanner", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.chat_send_player(player:get_player_name(), "Checking : please wait.") + minetest.get_node_timer(pos):start(2) + elseif node.name == "scifi_nodes:palm_scanner_checking" then + minetest.swap_node(pos,{name = "scifi_nodes:palm_scanner_on", param2 = node.param2}) + mesecon.receptor_on(pos, get_switch_rules(node.param2)) + minetest.get_node_timer(pos):start(2) + elseif node.name == "scifi_nodes:palm_scanner_on" then + minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2}) + mesecon.receptor_off (pos, get_switch_rules(node.param2)) + end +end + +-- palm_scanner_checking.on_timer +local function check_owner(pos, elapsed) local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - local tested_player = player:get_player_name() - minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_checking", param2 = node.param2}) - minetest.sound_play("scifi_nodes_palm_scanner", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.chat_send_player(tested_player, "Checking : please wait.") - - -- wait for a bit please ! - minetest.after(1.5, function(pos, node, tested_player, owner) - if tested_player == owner then - minetest.sound_play("scifi_nodes_access_granted", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.chat_send_player(tested_player, "Access granted !") - minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_on", param2 = node.param2}) - mesecon.receptor_on(pos, get_switch_rules(node.param2)) - minetest.get_node_timer(pos):start(2) - else - minetest.chat_send_player(tested_player, "Access refused !") - minetest.sound_play("scifi_nodes_access_refused", {max_hear_distance = 8, pos = pos, gain = 1.0}) - minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2}) - end - end, pos, node, tested_player, owner) -- end of anonymous function + local clicker = meta:get_string("clicker") + local node = minetest.get_node(pos) + if clicker == owner then + minetest.sound_play("scifi_nodes_scanner_granted", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.chat_send_player(clicker, "Access granted !") + toggle_palm_scanner (pos) + else + minetest.chat_send_player(clicker, "Access refused !") + minetest.sound_play("scifi_nodes_scanner_refused", {max_hear_distance = 8, pos = pos, gain = 1.0}) + minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2}) + mesecon.receptor_off(pos, get_switch_rules(node.param2)) + end end +minetest.register_node("scifi_nodes:palm_scanner_off", { + description = "Palm scanner", + tiles = {"scifi_nodes_palm_scanner_off.png",}, + inventory_image = "scifi_nodes_palm_scanner_off.png", + wield_image = "scifi_nodes_palm_scanner_on.png", + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, + mesecons = {receptor = {state = mesecon.state.off,}}, + after_place_node = set_scanner_owner, + on_rightclick = toggle_palm_scanner, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:palm_scanner_checking", { + description = "Palm scanner", + tiles = {{ + name = "scifi_nodes_palm_scanner_checking.png", + animation = {type = "vertical_frames",aspect_w = 16,aspect_h = 16,length = 1.5} + }}, + drawtype = "signlike", + sunlight_propagates = true, + buildable_to = false, + node_box = {type = "wallmounted",}, + selection_box = {type = "wallmounted",}, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + drop = "scifi_nodes:palm_scanner_off", + sounds = default.node_sound_glass_defaults(), + on_timer = check_owner, +}) + minetest.register_node("scifi_nodes:palm_scanner_on", { description = "Palm scanner", sunlight_propagates = true, @@ -1425,51 +1542,13 @@ minetest.register_node("scifi_nodes:palm_scanner_on", { paramtype2 = "wallmounted", light_source = 5, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + drop = "scifi_nodes:palm_scanner_off", mesecons = {receptor = {state = mesecon.state.on,}}, on_timer = toggle_palm_scanner, sounds = default.node_sound_glass_defaults(), }) -minetest.register_node("scifi_nodes:palm_scanner_off", { - description = "Palm scanner", - tiles = {"scifi_nodes_palm_scanner_off.png",}, - inventory_image = "scifi_nodes_palm_scanner_on.png", - wield_image = "scifi_nodes_palm_scanner_on.png", - drawtype = "signlike", - sunlight_propagates = true, - buildable_to = false, - node_box = {type = "wallmounted",}, - selection_box = {type = "wallmounted",}, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, - mesecons = {receptor = {state = mesecon.state.off,}}, - after_place_node = set_owner, - on_rightclick = check_owner, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("scifi_nodes:palm_scanner_checking", { - description = "Palm scanner", - tiles = {{ - name = "scifi_nodes_palm_scanner_checking.png", - animation = {type = "vertical_frames",aspect_w = 16,aspect_h = 16,length = 1.5} - }}, - wield_image = "scifi_nodes_palm_scanner_on.png", - inventory_image = "scifi_nodes_palm_scanner_on.png", - drawtype = "signlike", - sunlight_propagates = true, - buildable_to = false, - node_box = {type = "wallmounted",}, - selection_box = {type = "wallmounted",}, - paramtype = "light", - paramtype2 = "wallmounted", - groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, -}) - minetest.register_craft({ output = "scifi_nodes:palm_scanner_off 2", - recipe = { - {"mesecons_powerplant:power_plant", "scifi_nodes:grey", ""} - } + recipe = {{"mesecons_powerplant:power_plant", "scifi_nodes:grey", ""}} }) diff --git a/sounds/scifi_nodes_digicode_granted.ogg b/sounds/scifi_nodes_digicode_granted.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c3c257970028f329f5f4d2d3900d29e6bd90ab24 GIT binary patch literal 45819 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

VZ(0Te2# z5-}D*AH#7q=y1~plsW)VmOw8limpwzi8TVsKpzlSCk9QHR|B0-eL)aE@Gn5cOuCR8 z8k(ph1aXCbl3z@*3)!gQVQmr-1ext_^K>~FCiHI!WG1!`;~D~+#UMy!HfJzFFh=bE zt2j*9^^n|NKfPX#^B&gd-ex!SINkX=yVBxvpFOu1KvA~xV+ zCa8sF{&FWRP(U5Q#~{H+2YohWA~?Z|s(h4uzDXB&b%qFhR_>I;s3ZeLe^C`P;Q*Ir z6jPs9fldijF5tRub|yF#GdYeZaLK?8NivEZl&ZO^#2182B;Bkz5bmHX%|J1|nol4d zO^KlWG8+a#6{%Ppw%d~D&m=e0&-#~Bxu9VKu@z7oxn=&$=APhUs+1cDHukcMOTaFm z>}bX$n;V^%OA+|2Nv1v6m^P3K5&N4Pa7pGPxYe9Qi;<8R5T~!g6HOZ<)BwuKRDi?m zOyixezdks<^pOrXK~Gjr2MH)IazXNHz{!P+z?J)hVkU@M#-xif5d_I{sry(1ZJw|H zx+DWBw|??|4YPlZ06~x)AgMlG;EMhKs)7ALhxo4%Vs#Le0+LHVJRKY~Vbdv7GS`9|PX@Pe30mdg7zh~s(>&^ zGkFtO`E>r+WZD4U2yFb=q|TIk=>E))Gym0(sVZ+WZ2Lmv-Ftd>PSa&!>Jv6LX zv;tlm4Dbh~U;aE`H``*rkGBxuKh67bsQe^Trl5TJFirQ$`BBXkpZdrsQ`2`iS27VK&Z{n-k0ZRHdp2n&kt+^M zZ2nc>s)^iC;s5jA9$)`N(~+k+`;D$Y2ur&2;^}@f(~-qfKRev0@Ml?IfhhH5fYTQ> zv<^3Mi^&B^00r2f^0*@Co}Y01JF@vtj6;P09B^F#Ai7@0!GV>;Pyek~M?Grh2lPlmvp8KvY^TaTj1^WB0()vgRJ3 zm6H80&!r4x9i@uN{XUfB3n*qw_u*o#F1u zWcm2|2ZA;NEGS?f090raNR<~IM99*eWvFs=h59*+SOfH8XkaiS??VHi&`;s69EL*w z40&zj7eVrYA+P+ZQ?$-2V!$7$nFo`9xctF({@iKrzGLx6=%3kqk@8OV-5z;HWSC=To{9}4u4XZ)4B*!LcWahx0PX!Pq)0Yues=FIA&$nF zIYuMBq3(X_4$43Bn%FH=TweYrAUIeB)E`Gug`rop9q5wEQ8VYmfD3s=1yN;U z7&Z?AcUVdd`KE02$5ibL(b}LEbJZ^_U*{Hf@@(6pceL(fg$(ID?BvbW9@_ca*|lH) z_1jqv_G`8fO+cIhWLRAQZh)}qf^$5R7i8|Zc-)6Uf?fFuRASV0-_q1M&o#cc z4dsM_P#U<4_YE@AcXi899c~-N^}xxnmx`ve+%dY*@XDjYLAa~X+lD(WYb=mneJRMJ zfa74`EqFCWa0PEI7g{n7N*bitcr!RkPvLg+SB}xjZ$>Iw+rHDX$-DpVrLJ%6(Srjl z@81-;-ztNQZ8?Y>R{&6+R_D~u8G?2XC;@|a(1RI-3up{z*bE{_fu-Cum)Ao4_sL)4 z?o|r7Xz=oe26%$oOrhdyh*NO3HFv=l)>VRL>?P62wlQ4v_Y%&zb+mS@%#Mn7->97W zYON9%Ejvuwikat9Zrz8wk|VhNI8~)%bQcwuCMg#(0w7>gCGZy&&t6NiP<0j3zregp z@WX`_E7el@2u2J_TNY1%>Z@4Z`1*4i>Bjyc)WI6MVc+AQeg}#kTkdd;$W{FdBTca~ zP$5�R3f!>BIqC=i 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

C-C2IH7|`N#b{uisj_{Rx2plCo0mrXH+frP< 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 literal 0 HcmV?d00001 diff --git a/sounds/scifi_nodes_scanner_granted.ogg b/sounds/scifi_nodes_scanner_granted.ogg new file mode 100644 index 0000000000000000000000000000000000000000..195a216d6b8d8739d6600d3e7e2ca27ff471917c GIT binary patch literal 35649 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

  • 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

    sw>$3QDNT)Tl|13t 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 literal 0 HcmV?d00001 From 1ca3adc46db6f0d31a988391dd690aaa5797f433 Mon Sep 17 00:00:00 2001 From: Grossam Date: Thu, 9 May 2019 16:08:43 +0200 Subject: [PATCH 12/22] Doors open with mesecon only --- README.md | 3 +++ doors.lua | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d671540..c86e35a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. +# Changes log + +* 05/09/2019 : door opening on rightclick is disabled (maybe reactivated via a mod option) * 05/08/2019 : * digicodes now work * new (and cleaner) implementation for palm scanner diff --git a/doors.lua b/doors.lua index a73458e..c0eed8f 100644 --- a/doors.lua +++ b/doors.lua @@ -14,6 +14,11 @@ -- will the authors be held liable for any damages arising from the use of this content. +-- Retrieving mod settings +local scifi_nodes = {} +scifi_nodes.doors_open_with_mesecon_only = minetest.settings:get_bool("scifi_nodes.doors_open_with_mesecon_only", true) +print("Ici !"..dump(scifi_nodes)) + -- 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") @@ -53,6 +58,7 @@ for _, current_door in ipairs(doors) do local base_name = current_door.base_name local base_ingredient = current_door.base_ingredient local sound = current_door.sound + local doors_rightclick minetest.register_craft({ output = closed .. " 2", @@ -121,7 +127,7 @@ for _, current_door in ipairs(doors) do minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) end - function rightclick(pos, node, player, itemstack, pointed_thing) + function open_door(pos, node, player, itemstack, pointed_thing) -- play sound minetest.sound_play(sound,{ max_hear_distance = 16, @@ -177,6 +183,7 @@ for _, current_door in ipairs(doors) do end timer:start(3) end + if scifi_nodes.doors_open_with_mesecon_only then rightclick = nil end function afterplace(pos, placer, itemstack, pointed_thing) minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=nodeu.param2}) @@ -256,10 +263,13 @@ for _, current_door in ipairs(doors) do local mesecons_doors_def = { effector = { - action_on = rightclick, + action_on = open_door, rules = mesecons_doors_rules }, } + local doors_rightclick + if scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = {} + else doors_rightclick = open_door end minetest.register_node(closed, { description = current_door.base_name.." sliding door", @@ -290,7 +300,6 @@ for _, current_door in ipairs(doors) do } }, mesecons = mesecons_doors_def, - on_place = onplace, after_destruct = afterdestruct, on_rightclick = rightclick, From e5dc013f6ea8b22fe7489595c6de396b07549ab3 Mon Sep 17 00:00:00 2001 From: Grossam Date: Thu, 9 May 2019 16:11:37 +0200 Subject: [PATCH 13/22] Un oubli --- settingtypes.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 settingtypes.txt diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 0000000..513c37b --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,2 @@ +# Doors can only be opened by mesecon signal +scifi_nodes.doors_open_with_mesecon_only (disables right click on doors) bool true From 805733a443019a6d576b4a908c055a34a41f4873 Mon Sep 17 00:00:00 2001 From: Grossam Date: Sat, 11 May 2019 12:34:01 +0200 Subject: [PATCH 14/22] Forgotten textures added --- textures/scifi_nodes_palm_scanner_checking.png | Bin 0 -> 1104 bytes textures/scifi_nodes_palm_scanner_off.png | Bin 0 -> 408 bytes textures/scifi_nodes_palm_scanner_on.png | Bin 0 -> 409 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/scifi_nodes_palm_scanner_checking.png create mode 100644 textures/scifi_nodes_palm_scanner_off.png create mode 100644 textures/scifi_nodes_palm_scanner_on.png diff --git a/textures/scifi_nodes_palm_scanner_checking.png b/textures/scifi_nodes_palm_scanner_checking.png new file mode 100644 index 0000000000000000000000000000000000000000..eef3c0f6a2e46602f4fb45ed69dafd64fe3538ac GIT binary patch literal 1104 zcmV-W1h4yvP)xxR~u%W_+ij)XOr@I%> zMiWa+SX9{1VMDMXjUtd0L1#8Q1g){LB{+VW(%s`PLaC@I6-drOdXoaiB!?hk$a`xQs&8Ay8YG9}GP)gQ=`i8=a+Ag?bh0G5lKYu|K%=#YeP>j!LMo>yAB>-UFY`@gD5dJdyM$ES-XZ zaRTQ^1&XwWu-Ey)zGr5eT}i##=ul$#Hj>^vxLJQ3`TPtLH9%>=BCk%jdC>MaCmskg zd6u8weJy!wS%w(6|3D)U)H@903ZQa?}lwg|hVMfgGM=e{{VKm2V>H z-Gd)$!$hB)OI~$KP2fjbp74aT;584X&dE);z-UIJJTLJIE_VO1P WQwz)L^7kMB0000*h|j^EF|#^p2IuX*-#S?U_oPS=&U(|B)g4o4KoXQ z7P}B33o+5gY35Dl{a@yvfqxf^#bU3{zZa9qByHb;fU1zIq9SOUm+#A_-30&`k8c22 zuQ#|my|*F7#b=QSv(Zj0D#rnVuoHXj#1di&RS~GC*SI?> zdK@4scGo14M<|YhoF& zn6L;IX(7;eM|!6$h+wsm-9A%o{g+UcfvTX{L4E?D+E{Qm`gc!MWonn0IKO}Byh45m zFf&w?!C=6};|n4^R0S15RLQc=%l|y)^ZD-pe;!|-TA}Ow=U&(V0000Q?{&0VYXA zK~y-))sekQ13?spzZv#k`w&Zul-3re7i5kf^rGPGSHK7%MJs~jaoIc6e(eC z4irGSnc(DD1T(6-;^O6jyb0tfuDXfa2%a4QxUV8e6~pIy@)Vh+73lWqZtpLIT`?Yy zmu7~WV{W(`W+%8CZicxNW2DpRw0u9R$z<|t@88rX?jx2|vnDKg00000NkvXXu0mjf D>F=b4 literal 0 HcmV?d00001 From b7acbebd0f9f53a559afe902b8aef05a1c76d9f9 Mon Sep 17 00:00:00 2001 From: fwhcat Date: Fri, 21 Jun 2019 09:27:26 +0000 Subject: [PATCH 15/22] Digicode sound not being globally heard anymore ^^ --- nodeboxes.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nodeboxes.lua b/nodeboxes.lua index 586ba96..18866a2 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -1388,7 +1388,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) fields.open and fields.code ~= context.code then sound_index = 4 end - minetest.sound_play(sounds[sound_index]) + -- play sound at context position + minetest.sound_play(sounds[sound_index], + context.pos, + max_hear_distance = 40 + ) context[player:get_player_name()] = nil -- we don't need it anymore end) From 03443e41d9ee2fc80b23df6a0516fbe2573fe9b3 Mon Sep 17 00:00:00 2001 From: fwhcat Date: Fri, 21 Jun 2019 09:30:41 +0000 Subject: [PATCH 16/22] Fix options being passed with {} for playing digicode sound --- nodeboxes.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nodeboxes.lua b/nodeboxes.lua index 18866a2..e71447d 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -1389,10 +1389,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) sound_index = 4 end -- play sound at context position - minetest.sound_play(sounds[sound_index], - context.pos, - max_hear_distance = 40 - ) + minetest.sound_play(sounds[sound_index], { + pos = context.pos, + max_hear_distance = 10 + }) context[player:get_player_name()] = nil -- we don't need it anymore end) From e847e4167f610ea40b36f0906ac643dc19ceaa31 Mon Sep 17 00:00:00 2001 From: Grossam Date: Tue, 13 Aug 2019 06:25:38 +0200 Subject: [PATCH 17/22] Doors righclick bug fixed --- README.md | 3 +++ doors.lua | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c86e35a..d2036e2 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other a # Changes log +* 13/08/2019 : + * doors_open_with_mesecon_only is now a mod option (default is false) + * corrected a typo wich prevented the option to work properly * 05/09/2019 : door opening on rightclick is disabled (maybe reactivated via a mod option) * 05/08/2019 : * digicodes now work diff --git a/doors.lua b/doors.lua index c0eed8f..cffc92d 100644 --- a/doors.lua +++ b/doors.lua @@ -16,8 +16,7 @@ -- Retrieving mod settings local scifi_nodes = {} -scifi_nodes.doors_open_with_mesecon_only = minetest.settings:get_bool("scifi_nodes.doors_open_with_mesecon_only", true) -print("Ici !"..dump(scifi_nodes)) +scifi_nodes.doors_open_with_mesecon_only = minetest.settings:get_bool("scifi_nodes.doors_open_with_mesecon_only", false) -- Some aliases to deal with old namming policy -- minetest.register_alias("scifi_nodes:doors_1a","scifi_nodes:Doom_door_closed") @@ -267,9 +266,8 @@ for _, current_door in ipairs(doors) do rules = mesecons_doors_rules }, } - local doors_rightclick - if scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = {} - else doors_rightclick = open_door end + local doors_rightclick = nil -- Crashes serv if empty table ! + if not scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = open_doors end minetest.register_node(closed, { description = current_door.base_name.." sliding door", @@ -302,7 +300,7 @@ for _, current_door in ipairs(doors) do mesecons = mesecons_doors_def, on_place = onplace, after_destruct = afterdestruct, - on_rightclick = rightclick, + on_rightclick = doors_rightclick, }) minetest.register_node(closed_top, { From b1345bd3027ab9a97590aa5a722d7da68c758339 Mon Sep 17 00:00:00 2001 From: Grossam Date: Tue, 13 Aug 2019 07:09:52 +0200 Subject: [PATCH 18/22] =?UTF-8?q?Je=20gal=C3=A8re=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 6354eaf..990f09c 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,6 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other a # Changes log -* 13/08/2019 : - * doors_open_with_mesecon_only is now a mod option (default is false) - * corrected a typo wich prevented the option to work properly * 05/09/2019 : door opening on rightclick is disabled (maybe reactivated via a mod option) * 05/08/2019 : * digicodes now work From cdc7b6dd95cb84d93ea576b11b889efffcdfae6d Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 14 Aug 2019 07:18:42 +0200 Subject: [PATCH 19/22] Retrocompatibility issue fixed --- README.md | 4 ++++ doors.lua | 32 ++++++++++++++++---------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 990f09c..fa00562 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other a # Changes log +* 14/08/2019 : retrocompatibility fixed (aliases in doors.lua) +* 13/08/2019 : + * added mod option doors_open_with_mesecon_only (default = false) + * fixed a bug preventing the option from working * 05/09/2019 : door opening on rightclick is disabled (maybe reactivated via a mod option) * 05/08/2019 : * digicodes now work diff --git a/doors.lua b/doors.lua index cffc92d..88012e3 100644 --- a/doors.lua +++ b/doors.lua @@ -19,25 +19,25 @@ local scifi_nodes = {} scifi_nodes.doors_open_with_mesecon_only = minetest.settings:get_bool("scifi_nodes.doors_open_with_mesecon_only", false) -- 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:doors1a","scifi_nodes:Doom_door_closed") +minetest.register_alias("scifi_nodes:doors1b","scifi_nodes:Doom_door_closed_top") +minetest.register_alias("scifi_nodes:doors1c","scifi_nodes:Doom_door_opened") +minetest.register_alias("scifi_nodes:doors1d","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:doors2a","scifi_nodes:black_door_closed") +minetest.register_alias("scifi_nodes:doors2b","scifi_nodes:black_door_closed_top") +minetest.register_alias("scifi_nodes:doors2c","scifi_nodes:black_door_opened") +minetest.register_alias("scifi_nodes:doors2d","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:doors3a","scifi_nodes:white_door_closed") +minetest.register_alias("scifi_nodes:doors3b","scifi_nodes:white_door_closed_top") +minetest.register_alias("scifi_nodes:doors3c","scifi_nodes:white_door_opened") +minetest.register_alias("scifi_nodes:doors3d","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") +minetest.register_alias("scifi_nodes:doors4a","scifi_nodes:green_door_closed") +minetest.register_alias("scifi_nodes:doors4b","scifi_nodes:green_door_closed_top") +minetest.register_alias("scifi_nodes:doors4c","scifi_nodes:green_door_opened") +minetest.register_alias("scifi_nodes:doors4d","scifi_nodes:green_door_opened_top") -- This table now uses named parameters and more convenient variables names local doors = { From e5dba902841e8268d6ee8d934565e9a0e798fd9e Mon Sep 17 00:00:00 2001 From: Grossam Date: Wed, 14 Aug 2019 19:13:38 +0200 Subject: [PATCH 20/22] =?UTF-8?q?100=20fois=20sur=20le=20m=C3=A9tier?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doors.lua | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/doors.lua b/doors.lua index 88012e3..7071a92 100644 --- a/doors.lua +++ b/doors.lua @@ -19,25 +19,25 @@ local scifi_nodes = {} scifi_nodes.doors_open_with_mesecon_only = minetest.settings:get_bool("scifi_nodes.doors_open_with_mesecon_only", false) -- Some aliases to deal with old namming policy -- -minetest.register_alias("scifi_nodes:doors1a","scifi_nodes:Doom_door_closed") -minetest.register_alias("scifi_nodes:doors1b","scifi_nodes:Doom_door_closed_top") -minetest.register_alias("scifi_nodes:doors1c","scifi_nodes:Doom_door_opened") -minetest.register_alias("scifi_nodes:doors1d","scifi_nodes:Doom_door_opened_top") +minetest.register_alias("scifi_nodes:door1a","scifi_nodes:Doom_door_closed") +minetest.register_alias("scifi_nodes:door1b","scifi_nodes:Doom_door_closed_top") +minetest.register_alias("scifi_nodes:door1c","scifi_nodes:Doom_door_opened") +minetest.register_alias("scifi_nodes:door1d","scifi_nodes:Doom_door_opened_top") -minetest.register_alias("scifi_nodes:doors2a","scifi_nodes:black_door_closed") -minetest.register_alias("scifi_nodes:doors2b","scifi_nodes:black_door_closed_top") -minetest.register_alias("scifi_nodes:doors2c","scifi_nodes:black_door_opened") -minetest.register_alias("scifi_nodes:doors2d","scifi_nodes:black_door_opened_top") +minetest.register_alias("scifi_nodes:door2a","scifi_nodes:black_door_closed") +minetest.register_alias("scifi_nodes:door2b","scifi_nodes:black_door_closed_top") +minetest.register_alias("scifi_nodes:door2c","scifi_nodes:black_door_opened") +minetest.register_alias("scifi_nodes:door2d","scifi_nodes:black_door_opened_top") -minetest.register_alias("scifi_nodes:doors3a","scifi_nodes:white_door_closed") -minetest.register_alias("scifi_nodes:doors3b","scifi_nodes:white_door_closed_top") -minetest.register_alias("scifi_nodes:doors3c","scifi_nodes:white_door_opened") -minetest.register_alias("scifi_nodes:doors3d","scifi_nodes:white_door_opened_top") +minetest.register_alias("scifi_nodes:door3a","scifi_nodes:white_door_closed") +minetest.register_alias("scifi_nodes:door3b","scifi_nodes:white_door_closed_top") +minetest.register_alias("scifi_nodes:door3c","scifi_nodes:white_door_opened") +minetest.register_alias("scifi_nodes:door3d","scifi_nodes:white_door_opened_top") -minetest.register_alias("scifi_nodes:doors4a","scifi_nodes:green_door_closed") -minetest.register_alias("scifi_nodes:doors4b","scifi_nodes:green_door_closed_top") -minetest.register_alias("scifi_nodes:doors4c","scifi_nodes:green_door_opened") -minetest.register_alias("scifi_nodes:doors4d","scifi_nodes:green_door_opened_top") +minetest.register_alias("scifi_nodes:door4a","scifi_nodes:green_door_closed") +minetest.register_alias("scifi_nodes:door4b","scifi_nodes:green_door_closed_top") +minetest.register_alias("scifi_nodes:door4c","scifi_nodes:green_door_opened") +minetest.register_alias("scifi_nodes:door4d","scifi_nodes:green_door_opened_top") -- This table now uses named parameters and more convenient variables names local doors = { From 3344f45bd10d1f0241e15215dc0ce0c9afe45bd6 Mon Sep 17 00:00:00 2001 From: Grossam Date: Thu, 15 Aug 2019 07:13:12 +0200 Subject: [PATCH 21/22] Green doors texture fixed --- textures/scifi_nodes_door_green_bottom.png | Bin 382 -> 410 bytes textures/scifi_nodes_door_green_rbottom.png | Bin 373 -> 419 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/scifi_nodes_door_green_bottom.png b/textures/scifi_nodes_door_green_bottom.png index f434b1b9fc5cc685be197a514eabfadff9ea97ed..2fabfa27b7a8bb5fc6347b11fbe3ecd749439ebd 100644 GIT binary patch delta 364 zcmV-y0h9jz0-6JmBo78+OGiWi{{a60|De66laV18e*gz`Nliru;|LE03lBk;o~i%< z0VhdBK~y-)eN(||!!QheODnRPvW(L9v>bLRj2`-(`;z`r31dAZm(k4NQN%#7?NH>% ztusNuIMRDhPx9S<|N7f??`WD1o6Qq!hzN)%IWHDVc;5p6nx;d6Oo#{o#A16s9Nv=L zB3En+e=Q&Ytk;id+tUER{DuD_2e{k4j4L1_h)Ddb2h5BR0-Sq@`O`60=Ui5Wy-yU( zW+ecCnctUjh_qB7R?D*p7o&#v+Hq^92YI37Q47RDMm_PDm&XZ!)*Y`g3ZM4}}C0000< KMNUMnLSTZ5T&KSP delta 355 zcmV-p0i6Dt1O5V#B!3BTNLh0L01FcU01FcV0GgZ_0003nNkl-SHyF*nS;k^eD0YKub?f37nwnSMzViX5Tj{~tpk9~<^{{; zeOiICSJg2D)Xz6i!MY!XwI#OOx6Un$!SOpk_Y0h;vpdygnG^s3002ovPDHLkV1mU= Br3e53 diff --git a/textures/scifi_nodes_door_green_rbottom.png b/textures/scifi_nodes_door_green_rbottom.png index afc80f56c7c32acd7ccbc30899dc9953fa65a4af..bbfc1dcb10d358088adf86c350f0652b70500047 100644 GIT binary patch delta 373 zcmV-*0gC?h0;2dl(4rVPR!^q{lZ z-GtDAkV$6Wo0&JW7wh%&kF_NLU^cr$RUP5I2N3~4;;ZfV@36K+Sw3PE2X?zx07w8a zQJ)2Zf5YJe^Z9KE<$Cu%Jk@h5kfQTR>U}m&!a;K8fkVr%X=iJ~Ji~Psw^d0=krJ{HzDej1U5xdx-hdF;?eXR)xJ!6wGEN0Dzg{oQn#^OwB5=%$m&1 zv8`)EvmV%_5JHwUQD6~?2q6SiRh9I6K7YrYvYey<)@3bH)3l}ed>~-vaSyB#HB%KR zXi@wigwGVfj#EjQwVjKCdx%V;x*G*Vgt}g#ZBKE_?6O>@F>I_prf8xv*7Yj>^uEuo s@%5yp-uE~jKW-Mr8aej3w%cd?0pD!9><&btB>(^b07*qoM6N<$f)oIrm;e9( From f78328759c885c65e59f5ae45aaed6441da78fa7 Mon Sep 17 00:00:00 2001 From: Grossam Date: Thu, 15 Aug 2019 09:25:03 +0200 Subject: [PATCH 22/22] =?UTF-8?q?Second=20fix=20of=20the=20same=20door=20b?= =?UTF-8?q?ug=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doors.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doors.lua b/doors.lua index 7071a92..8b033b9 100644 --- a/doors.lua +++ b/doors.lua @@ -182,7 +182,6 @@ for _, current_door in ipairs(doors) do end timer:start(3) end - if scifi_nodes.doors_open_with_mesecon_only then rightclick = nil end function afterplace(pos, placer, itemstack, pointed_thing) minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=nodeu.param2}) @@ -266,8 +265,9 @@ for _, current_door in ipairs(doors) do rules = mesecons_doors_rules }, } + local doors_rightclick = nil -- Crashes serv if empty table ! - if not scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = open_doors end + if not scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = open_door end minetest.register_node(closed, { description = current_door.base_name.." sliding door",