diff --git a/init.lua b/init.lua index 4f8df32..fef8fba 100644 --- a/init.lua +++ b/init.lua @@ -21,6 +21,7 @@ if minetest.get_modpath("default") then end dofile(MP.."/plants.lua") +dofile(MP.."/models.lua") dofile(MP.."/nodes.lua") dofile(MP.."/doors.lua") dofile(MP.."/switch.lua") @@ -28,7 +29,6 @@ dofile(MP.."/protected_switch.lua") dofile(MP.."/nodeboxes.lua") dofile(MP.."/palm_scanner.lua") dofile(MP.."/digicode.lua") -dofile(MP.."/models.lua") dofile(MP.."/octagon_panes.lua") dofile(MP.."/forcefield.lua") dofile(MP.."/crafts.lua") diff --git a/models.lua b/models.lua index 23e4b17..5704faa 100644 --- a/models.lua +++ b/models.lua @@ -3,44 +3,45 @@ --Licensed under the zlib license. function scifi_nodes.register_slope(name, desc, texture, light, soundtype) -local sounds -if soundtype == "stone" then - sounds = scifi_nodes.node_sound_stone_defaults() -else - sounds = scifi_nodes.node_sound_metal_defaults() -end -minetest.register_node("scifi_nodes:slope_"..name, { - description = desc.." Slope", - sunlight_propagates = false, - drawtype = "mesh", - mesh = "scifi_nodes_slope.obj", - tiles = texture, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, - {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.25, 0.5}, - {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} - } - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, - {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.25, 0.5}, - {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} - } - }, - paramtype = "light", - paramtype2 = "facedir", - use_texture_alpha = "clip", - light_source = light, - groups = {cracky=1, dig_generic = 3}, - on_place = minetest.rotate_node, - sounds = sounds, -}) + local sounds + if soundtype == "stone" then + sounds = scifi_nodes.node_sound_stone_defaults() + else + sounds = scifi_nodes.node_sound_metal_defaults() + end + + minetest.register_node("scifi_nodes:slope_"..name, { + description = desc.." Slope", + sunlight_propagates = false, + drawtype = "mesh", + mesh = "scifi_nodes_slope.obj", + tiles = texture, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", + light_source = light, + groups = {cracky=1, dig_generic = 3}, + on_place = minetest.rotate_node, + sounds = sounds, + }) end -- register some blocks in stairsplus if available (part of moreblocks) @@ -72,117 +73,3 @@ scifi_nodes.register_slope("bluemetal", "Blue metal", {"scifi_nodes_bluemetal.pn scifi_nodes.register_slope("wall", "Metal wall", {"scifi_nodes_wall.png",}, 0) scifi_nodes.register_slope("rough", "Rough metal", {"scifi_nodes_rough.png",}, 0) scifi_nodes.register_slope("blklt2", "Black stripe light", {"scifi_nodes_black_light2.png",}, 10) - --- Register Nodes for Stairsplus -local node = {} - -node.types = { - {"blue", "blue lines"}, - {"holes", "metal with holes"}, - {"white2", "plastic",}, - {"super_white", "Super Plastic", 11, "stone"}, - {"ultra_white", "Ultra Plastic", minetest.LIGHT_MAX}, --- {"engine", "engine", "engine"}, - {"wall", "metal wall"}, - {"white", "plastic wall"}, - {"stripes2top", "dirty metal block"}, - {"rough", "rough metal"}, - {"lighttop", "metal block"}, - {"red", "red lines"}, - {"green", "green lines"}, - {"vent2", "vent"}, - {"stripes", "hazard stripes"}, - {"rust", "rusty metal"}, - {"mesh", "metal mesh"}, - {"black", "black wall"}, - {"blackoct", "black octagon"}, - {"blackpipe", "black pipe"}, - {"blacktile", "black tile"}, - {"blacktile2", "black tile 2"}, - {"blackvent", "black vent"}, - {"bluebars", "blue bars"}, - {"bluemetal", "blue metal"}, - {"bluetile", "blue tile"}, - {"greytile", "grey tile"}, - {"mesh2", "metal floormesh"}, - {"pipe", "wall pipe"}, - {"pipeside", "side pipe"}, - {"tile", "white tile"}, - {"whiteoct", "white octagon"}, - {"whitetile", "white tile2"}, - {"black_detail", "black detail"}, - {"green_square", "green metal block"}, - {"red_square", "red metal block"}, - {"grey_square", "grey metal block"}, - {"blue_square", "blue metal block"}, - {"black_mesh", "black vent block"}, - {"dent", "dented metal block"}, - {"greenmetal", "green metal wall"}, - {"greenmetal2", "green metal wall2"}, - {"greenlights", "green wall lights", 10}, - {"greenlights2", "green wall lights2", 10}, - {"greenbar", "green light bar", 10}, - {"green2", "green wall panel"}, - {"greentubes", "green pipes"}, - {"grey", "grey wall"}, - {"greybolts", "grey wall bolts"}, - {"greybars", "grey bars"}, - {"greydots", "grey wall dots"}, - {"greygreenbar", "gray power pipe", 10}, - {"octofloor", "Doom floor"}, - {"octofloor2", "Brown Doom floor"}, - {"doomwall1", "Doom wall 1"}, - {"doomwall2", "Doom wall 2"}, - {"doomwall3", "Doom wall 3"}, - {"doomwall4", "Doom wall 4"}, - {"doomwall41", "Doom wall 4.1"}, - {"doomwall42", "Doom wall 4.2"}, - {"doomwall43", "Doom wall 4.3"}, - {"doomwall431", "Doom wall 4.3.1"}, - {"doomwall44", "Doom wall 4.4"}, - {"blackdmg", "Damaged black wall"}, - {"blackdmgstripe", "Damaged black wall(stripes)"}, - {"doomengine", "Doom engine wall"}, --- {"monitorwall", "Wall monitors", "monitorwall"}, - {"screen3", "Wall monitor"}, - {"doomlight", "Doom light", 12}, - {"bluwllight", "Blue wall light", minetest.LIGHT_MAX}, - {"bluegrid", "Blue Grid", 5}, - {"fan", "Fan"}, - {"ppllght", "Purple wall light", minetest.LIGHT_MAX}, - {"pplwll", "Purple wall"}, - {"pplwll2", "Purple wall2"}, - {"pplwll3", "Purple wall3"}, - {"pplwll4", "Purple wall4"}, - {"pplblk", "Purple tile"}, - {"purple", "Purple node"}, - {"rock", "Moonstone", nil, "stone"}, - {"rock2", "Moonstone2", nil, "stone"}, - {"blackvnt", "Black vent"}, - {"blackplate", "Black plate"}, -} - -if minetest.global_exists("stairsplus") then - for _, row in ipairs(node.types) do - local name = row[1] - local soundtype = row[4] - local sounds - if soundtype == "stone" then - sounds = scifi_nodes.node_sound_stone_defaults() - else - sounds = scifi_nodes.node_sound_metal_defaults() - end - - -- Node Definition - stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, { - description = row[2], - tiles = {"scifi_nodes_"..name..".png"}, - use_texture_alpha = "clip", - groups = {cracky=1, dig_generic = 3}, - paramtype = "light", - paramtype2 = "facedir", - light_source = row[3], - sounds = sounds, - }) - end -end diff --git a/nodes.json b/nodes.json new file mode 100644 index 0000000..50099b7 --- /dev/null +++ b/nodes.json @@ -0,0 +1,273 @@ +{ + "blue": { + "description": "Blue lines" + }, + "holes": { + "description": "Metal with holes" + }, + "white2": { + "description": "plastic", + "colorable": true, + "sounds": "stone" + }, + "super_white": { + "description": "Super Plastic", + "light": 11, + "sounds": "stone" + }, + "ultra_white": { + "description": "Ultra Plastic", + "light": 14, + "sounds": "stone" + }, + "engine": { + "description": "Engine" + }, + "wall": { + "description": "metal wall" + }, + "white": { + "description": "plastic wall", + "colorable": true, + "sounds": "stone" + }, + "stripes2top": { + "description": "Dirty metal block" + }, + "rough": { + "description": "rough metal" + }, + "lighttop": { + "description": "metal block" + }, + "red": { + "description": "red lines" + }, + "green": { + "description": "green lines" + }, + "vent2": { + "description": "vent" + }, + "stripes": { + "description": "hazard stripes" + }, + "rust": { + "description": "rusty metal" + }, + "mesh": { + "description": "metal mesh" + }, + "black": { + "description": "black wall" + }, + "blackoct": { + "description": "black octagon" + }, + "blackpipe": { + "description": "black pipe" + }, + "blacktile": { + "description": "black tile" + }, + "blacktile2": { + "description": "black tile 2" + }, + "blackvent": { + "description": "black vent" + }, + "bluebars": { + "description": "blue bars" + }, + "bluemetal": { + "description": "blue metal" + }, + "bluetile": { + "description": "blue tile" + }, + "greytile": { + "description": "grey tile" + }, + "mesh2": { + "description": "metal floormesh" + }, + "pipe": { + "description": "wall pipe" + }, + "pipeside": { + "description": "side pipe" + }, + "tile": { + "description": "white tile" + }, + "whiteoct": { + "description": "white octagon", + "colorable": true + }, + "whitetile": { + "description": "white tile 2", + "colorable": true + }, + "black_detail": { + "description": "black detail" + }, + "green_square": { + "description": "green metal block" + }, + "red_square": { + "description": "red metal block" + }, + "grey_square": { + "description": "grey metal block" + }, + "blue_square": { + "description": "blue metal block" + }, + "black_mesh": { + "description": "black vent block" + }, + "dent": { + "description": "dented metal block" + }, + "greenmetal": { + "description": "green metal wall" + }, + "greenmetal2": { + "description": "green metal wall2" + }, + "greenlights": { + "description": "green wall lights", + "light": 10 + }, + "greenlights2": { + "description": "green wall lights2", + "light": 10 + }, + "greenbar": { + "description": "green light bar", + "light": 10 + }, + "green2": { + "description": "green wall panel" + }, + "greentubes": { + "description": "green pipes" + }, + "grey": { + "description": "grey wall" + }, + "greybolts": { + "description": "grey wall bolts" + }, + "greybars": { + "description": "grey bars" + }, + "greydots": { + "description": "grey wall dots" + }, + "greygreenbar": { + "description": "gray power pipe", + "light": 10 + }, + "octofloor": { + "description": "Doom floor", + "sounds": "stone" + }, + "octofloor2": { + "description": "Brown Doom floor", + "sounds": "stone" + }, + "doomwall1": { + "description": "Doom wall 1" + }, + "doomwall2": { + "description": "Doom wall 2" + }, + "doomwall3": { + "description": "Doom wall 3" + }, + "doomwall4": { + "description": "Doom wall 4" + }, + "doomwall41": { + "description": "Doom wall 4.1" + }, + "doomwall42": { + "description": "Doom wall 4.2" + }, + "doomwall43": { + "description": "Doom wall 4.3" + }, + "doomwall431": { + "description": "Doom wall 4.3.1" + }, + "doomwall44": { + "description": "Doom wall 4.4" + }, + "blackdmg": { + "description": "Damaged black wall" + }, + "blackdmgstripe": { + "description": "Damaged black wall(stripes)" + }, + "doomengine": { + "description": "Doom engine wall" + }, + "monitorwall": { + "description": "Wall monitors" + }, + "screen3": { + "description": "Wall monitor" + }, + "doomlight": { + "description": "Doom light", + "light": 12 + }, + "bluwllight": { + "description": "Blue wall light", + "light": 14 + }, + "bluegrid": { + "description": "Blue Grid", + "light": 5 + }, + "fan": { + "description": "Fan" + }, + "ppllght": { + "description": "Purple wall light", + "light": 14 + }, + "pplwll": { + "description": "Purple wall" + }, + "pplwll2": { + "description": "Purple wall 2" + }, + "pplwll3": { + "description": "Purple wall 3" + }, + "pplwll4": { + "description": "Purple wall 4" + }, + "pplblk": { + "description": "Purple tile" + }, + "purple": { + "description": "Purple node" + }, + "rock": { + "description": "Moonstone", + "sounds": "stone" + }, + "rock2": { + "description": "Moonstone 2", + "sounds": "stone" + }, + "blackvnt": { + "description": "Black vent" + }, + "blackplate": { + "description": "Black plate" + } +} \ No newline at end of file diff --git a/nodes.lua b/nodes.lua index 6200c9b..c446a0f 100644 --- a/nodes.lua +++ b/nodes.lua @@ -514,111 +514,20 @@ minetest.register_node("scifi_nodes:whtlightbnd", { sounds = scifi_nodes.node_sound_metal_defaults() }) ---edited wool code (Copyright (C) 2012 celeron55, Perttu Ahola ) - - --- This uses a trick: you can first define the recipes using all of the base --- colors, and then some recipes using more specific colors for a few non-base --- colors available. When crafting, the last recipes will be checked first. ---add new block using texture name(without "scifi_nodes_" prefix) then the description, and then the name of the block -local nodetypes = { - -- { name, description, shortname?, light, colorable, sounds } - {"blue", "blue lines", "blue"}, - {"holes", "metal with holes","holes"}, - {"white2", "plastic", "white2", 0, true, "stone"}, - {"super_white", "Super Plastic", "super_white", 11, nil, "stone"}, - {"ultra_white", "Ultra Plastic", "ultra_white", minetest.LIGHT_MAX, nil, "stone"}, - {"engine", "engine", "engine"}, - {"wall", "metal wall", "wall"}, - {"white", "plastic wall", "white", 0, true, "stone"}, - {"stripes2top", "dirty metal block","metal2"}, - {"rough", "rough metal", "rough"}, - {"lighttop", "metal block", "metal"}, - {"red", "red lines", "red"}, - {"green", "green lines", "green"}, - {"vent2", "vent", "vent"}, - {"stripes", "hazard stripes", "stripes"}, - {"rust", "rusty metal", "rust"}, - {"mesh", "metal mesh", "mesh"}, - {"black", "black wall", "black"}, - {"blackoct", "black octagon", "blackoct"}, - {"blackpipe", "black pipe", "blackpipe"}, - {"blacktile", "black tile", "blktl"}, - {"blacktile2", "black tile 2", "blktl2"}, - {"blackvent", "black vent", "blkvnt"}, - {"bluebars", "blue bars", "bluebars"}, - {"bluemetal", "blue metal", "blumtl"}, - {"bluetile", "blue tile", "blutl"}, - {"greytile", "grey tile", "grytl"}, - {"mesh2", "metal floormesh", "mesh2"}, - {"pipe", "wall pipe", "pipe2"}, - {"pipeside", "side pipe", "pipe3"}, - {"tile", "white tile", "tile"}, - {"whiteoct", "white octagon", "whiteoct", 0, true}, - {"whitetile", "white tile2", "whttl", 0, true}, - {"black_detail", "black detail", "blckdtl"}, - {"green_square", "green metal block", "grnblck"}, - {"red_square", "red metal block", "redblck"}, - {"grey_square", "grey metal block", "greyblck"}, - {"blue_square", "blue metal block", "blublck"}, - {"black_mesh", "black vent block", "blckmsh"}, - {"dent", "dented metal block", "dent"}, - {"greenmetal", "green metal wall", "grnmetl"}, - {"greenmetal2", "green metal wall2", "grnmetl2"}, - {"greenlights", "green wall lights", "grnlt", 10}, - {"greenlights2", "green wall lights2", "grnlt2", 10}, - {"greenbar", "green light bar", "grnlghtbr", 10}, - {"green2", "green wall panel", "grn2"}, - {"greentubes", "green pipes", "grntubes"}, - {"grey", "grey wall", "gry"}, - {"greybolts", "grey wall bolts", "gryblts"}, - {"greybars", "grey bars", "grybrs"}, - {"greydots", "grey wall dots", "grydts"}, - {"greygreenbar", "gray power pipe", "grygrnbr", 10}, - {"octofloor", "Doom floor", "octofloor", nil, nil, "stone"}, - {"octofloor2", "Brown Doom floor", "octofloor2", nil, nil, "stone"}, - {"doomwall1", "Doom wall 1", "doomwall1"}, - {"doomwall2", "Doom wall 2", "doomwall2"}, - {"doomwall3", "Doom wall 3", "doomwall3"}, - {"doomwall4", "Doom wall 4", "doomwall4"}, - {"doomwall41", "Doom wall 4.1", "doomwall4.1"}, - {"doomwall42", "Doom wall 4.2", "doomwall4.2"}, - {"doomwall43", "Doom wall 4.3", "doomwall4.3"}, - {"doomwall431", "Doom wall 4.3.1", "doomwall4.3.1"}, - {"doomwall44", "Doom wall 4.4", "doomwall4.4"}, - {"blackdmg", "Damaged black wall", "blckdmg"}, - {"blackdmgstripe", "Damaged black wall(stripes)", "blckdmgstripe"}, - {"doomengine", "Doom engine wall", "doomengine"}, - {"monitorwall", "Wall monitors", "monitorwall"}, - {"screen3", "Wall monitor", "screen3"}, - {"doomlight", "Doom light", "doomlight", 12}, - {"bluwllight", "Blue wall light", "capsule3", minetest.LIGHT_MAX}, - {"bluegrid", "Blue Grid", "bluegrid", 5}, - {"fan", "Fan", "fan"}, - {"ppllght", "Purple wall light", "", minetest.LIGHT_MAX}, - {"pplwll", "Purple wall", "", 0}, - {"pplwll2", "Purple wall2", "", 0}, - {"pplwll3", "Purple wall3", "", 0}, - {"pplwll4", "Purple wall4", "", 0}, - {"pplblk", "Purple tile", "", 0}, - {"purple", "Purple node", "", 0}, - {"rock", "Moonstone", "", 0, nil, "stone"}, - {"rock2", "Moonstone2", "", 0, nil, "stone"}, - {"blackvnt", "Black vent", "", 0}, - {"blackplate", "Black plate", "", 0}, -} +-- read "nodes.json" +local f = assert(io.open(minetest.get_modpath("scifi_nodes") .. "/nodes.json", "rb")) +local nodes = assert(minetest.parse_json(f:read("*all"))) +f:close() local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") +local has_moreblocks_mod = minetest.get_modpath("moreblocks") -for _, row in ipairs(nodetypes) do - local name = row[1] - local desc = row[2] - local light = row[4] - local is_colorable = row[5] - local soundtype = row[6] +-- register all nodes +for name, def in pairs(nodes) do + -- default to "metal" sounds if not specified local sounds - if soundtype == "stone" then + if def.sounds == "stone" then sounds = scifi_nodes.node_sound_stone_defaults() else sounds = scifi_nodes.node_sound_metal_defaults() @@ -626,16 +535,16 @@ for _, row in ipairs(nodetypes) do -- Node Definition local node_def = { - description = desc, + description = def.description, tiles = {"scifi_nodes_"..name..".png"}, groups = {cracky=1, dig_generic = 3}, paramtype = "light", paramtype2 = "facedir", - light_source = light, + light_source = def.light, sounds = sounds, } - if is_colorable and has_unifieddyes_mod then + if def.colorable and has_unifieddyes_mod then -- overwrite attributes on the "uncolored" node node_def.palette = "unifieddyes_palette_extended.png" node_def.groups.ud_param2_colorable = 1 @@ -645,10 +554,10 @@ for _, row in ipairs(nodetypes) do -- register node minetest.register_node("scifi_nodes:"..name, node_def) - if is_colorable and has_unifieddyes_mod then - -- register colored node + -- unified dyes registration + if def.colorable and has_unifieddyes_mod then minetest.register_node("scifi_nodes:"..name.."_colored", { - description = desc, + description = def.description, tiles = {"scifi_nodes_"..name..".png"}, groups = { cracky = 1, @@ -658,10 +567,24 @@ for _, row in ipairs(nodetypes) do palette = "unifieddyes_palette_extended.png", paramtype = "light", paramtype2 = "color", - light_source = light, + light_source = def.light, sounds = scifi_nodes.node_sound_glass_defaults(), on_construct = unifieddyes.on_construct, on_dig = unifieddyes.on_dig }) end + + -- moreblocks registration + if has_moreblocks_mod then + stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, { + description = def.description, + tiles = {"scifi_nodes_"..name..".png"}, + use_texture_alpha = "clip", + groups = {cracky=1, dig_generic = 3}, + paramtype = "light", + paramtype2 = "facedir", + light_source = def.light, + sounds = sounds, + }) + end end