forked from mtcontrib/scifi_nodes
		
	Compare commits
	
		
			17 Commits
		
	
	
		
			f79e84b92d
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 2eb5841472 | ||
|  | 689a17a80e | ||
|  | b682b2123d | ||
|  | c615237114 | ||
|  | cb95483a12 | ||
|  | e52a890883 | ||
|  | 6fb3ded8ad | ||
|  | 373f06cd7c | ||
|  | d531ad4eda | ||
|  | 62037ad60a | ||
|  | 36b0c5cc05 | ||
|  | fbd56e67c9 | ||
|  | 08c83f52ce | ||
|  | 364211ebf1 | ||
|  | 93bdcda2dd | ||
|  | 1159a02f76 | ||
|  | e519d3c6e0 | 
							
								
								
									
										17
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,17 +1,10 @@ | ||||
| name: luacheck | ||||
|  | ||||
| on: [push, pull_request] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|   luacheck: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v1 | ||||
|     - name: apt | ||||
|       run: sudo apt-get install -y luarocks | ||||
|     - name: luacheck install | ||||
|       run: luarocks install --local luacheck | ||||
|     - name: luacheck run | ||||
|       run: $HOME/.luarocks/bin/luacheck ./ | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@main | ||||
|       - name: Luacheck | ||||
|         uses: lunarmodules/luacheck@master | ||||
							
								
								
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							| @@ -1,20 +1,14 @@ | ||||
| std = "min+minetest" | ||||
|  | ||||
| unused_args = false | ||||
| max_line_length = 180 | ||||
|  | ||||
| globals = { | ||||
| 	"scifi_nodes" | ||||
| } | ||||
|  | ||||
| read_globals = { | ||||
| 	-- Stdlib | ||||
| 	string = {fields = {"split"}}, | ||||
| 	table = {fields = {"copy", "getn"}}, | ||||
|  | ||||
| 	-- Minetest | ||||
| 	"vector", "ItemStack", | ||||
| 	"dump", | ||||
|  | ||||
| 	-- optional deps | ||||
| 	"advtrains", | ||||
| 	"default", | ||||
| 	"stairsplus", | ||||
| 	"xpanes", | ||||
| @@ -23,6 +17,7 @@ read_globals = { | ||||
| 	"mesecon", | ||||
| 	"unifieddyes", | ||||
| 	"letters", | ||||
| 	"signs_api", | ||||
| 	"stealthnode", | ||||
| 	"slats", | ||||
| 	"mtt" | ||||
|   | ||||
| @@ -49,6 +49,9 @@ CC BY 3.0 | ||||
|  | ||||
| CC0 | ||||
| * scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/ | ||||
| * scifi_nodes_ambience_fan.ogg https://freesound.org/people/itinerantmonk108/sounds/554430/ | ||||
| * scifi_nodes_ambience_vent.ogg https://freesound.org/people/kentspublicdomain/sounds/324665/ | ||||
| * scifi_nodes_ambience_engine.ogg https://freesound.org/people/firestorm185/sounds/423221/ | ||||
|  | ||||
|  | ||||
| # Contributors: | ||||
|   | ||||
							
								
								
									
										259
									
								
								access_card.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								access_card.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,259 @@ | ||||
| local FORMSPEC_NAME = "scifi_nodes:access_card_configure" | ||||
|  | ||||
| local function create_id() | ||||
|     local template = "xxxxxx" | ||||
|     return string.gsub(template, '[x]', function () | ||||
|             return string.format('%x', math.random(0, 0xf)) | ||||
|     end) | ||||
| end | ||||
|  | ||||
| local function get_door_access_table(meta) | ||||
|     local str = meta:get_string("access") | ||||
|     if str == "" then | ||||
|         -- no config | ||||
|         return {} | ||||
|     else | ||||
|         return minetest.deserialize(str) or {} | ||||
|     end | ||||
| end | ||||
|  | ||||
| local function set_door_access_table(meta, at) | ||||
|     if next(at) then | ||||
|         meta:set_string("access", minetest.serialize(at)) | ||||
|     else | ||||
|         meta:set_string("access", "") | ||||
|     end | ||||
| end | ||||
|  | ||||
| function scifi_nodes.door_check_access_card(node_pos, itemstack, player) | ||||
|     local node_meta = minetest.get_meta(node_pos) | ||||
|     local access_table = get_door_access_table(node_meta) | ||||
|     if not next(access_table) then | ||||
|         -- access not restricted | ||||
|         return true | ||||
|     end | ||||
|  | ||||
|     if not minetest.is_player(player) then | ||||
|         -- not a player, restrict access | ||||
|         return false | ||||
|     end | ||||
|  | ||||
|     local playername = player:get_player_name() | ||||
|  | ||||
|     if itemstack:get_name() ~= "scifi_nodes:access_card" then | ||||
|         minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: no access card detected!")) | ||||
|         minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 }) | ||||
|         return false | ||||
|     end | ||||
|  | ||||
|     local item_meta = itemstack:get_meta() | ||||
|     local id = item_meta:get_string("id") | ||||
|     if id == "" then | ||||
|         minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: unconfigured access card")) | ||||
|         minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 }) | ||||
|         return false | ||||
|     end | ||||
|  | ||||
|     if not access_table[id] then | ||||
|         minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: invalid access card")) | ||||
|         minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 }) | ||||
|         return false | ||||
|     end | ||||
|  | ||||
|     minetest.sound_play("scifi_nodes_scanner_granted", { pos = node_pos, max_hear_distance = 10 }) | ||||
|     return true | ||||
| end | ||||
|  | ||||
| -- using a card against a door toggles the access to it | ||||
| local function on_use(itemstack, player, pointed_thing) | ||||
|     local playername = player:get_player_name() | ||||
|     local pos = pointed_thing.under | ||||
|  | ||||
|     if not pos then | ||||
|         -- nothing selected | ||||
|         return | ||||
|     end | ||||
|  | ||||
|     if minetest.is_protected(pos, playername) then | ||||
|         -- protected | ||||
|         return | ||||
|     end | ||||
|  | ||||
|     local node = minetest.get_node(pos) | ||||
|     local node_def = minetest.registered_nodes[node.name] | ||||
|     if not node_def.groups or not node_def.groups.scifi_nodes_door then | ||||
|         -- incompatible node | ||||
|         return | ||||
|     end | ||||
|  | ||||
|     local item_meta = itemstack:get_meta() | ||||
|     local card_id = item_meta:get_string("id") | ||||
|     if card_id == "" then | ||||
|         minetest.chat_send_player(playername, "Access card is unconfigured") | ||||
|         return | ||||
|     end | ||||
|     local card_name = item_meta:get_string("name") | ||||
|  | ||||
|     local node_meta = minetest.get_meta(pos) | ||||
|     local access_table = get_door_access_table(node_meta) | ||||
|  | ||||
|     if access_table[card_id] then | ||||
|         -- remove access | ||||
|         access_table[card_id] = nil | ||||
|         minetest.chat_send_player(playername, "Revoked access to card-id '" .. card_id .. "'") | ||||
|         minetest.sound_play("scifi_nodes_scanner_refused", { pos = pos, max_hear_distance = 10 }) | ||||
|     else | ||||
|         -- grant access | ||||
|         access_table[card_id] = card_name | ||||
|         minetest.chat_send_player(playername, "Granted access to card-id '" .. card_id .. "'") | ||||
|         minetest.sound_play("scifi_nodes_scanner_granted", { pos = pos, max_hear_distance = 10 }) | ||||
|     end | ||||
|  | ||||
|     local msg = "" | ||||
|     if next(access_table) then | ||||
|         msg = msg .. "Current registered cards: " | ||||
|         for id, name in pairs(access_table) do | ||||
|             msg = msg .. "Name: '" .. name .. "' ID: '" .. id .. "' / " | ||||
|         end | ||||
|     else | ||||
|         -- access table is empty | ||||
|         msg = "No access-card left in access-table, door is free to use" | ||||
|     end | ||||
|     minetest.chat_send_player(playername, msg) | ||||
|  | ||||
|     -- set new access table | ||||
|     set_door_access_table(node_meta, access_table) | ||||
| end | ||||
|  | ||||
| local function configure_access_card(meta, name) | ||||
|     local id = meta:get_string("id") | ||||
|     if id == "" then | ||||
|         -- set new id | ||||
|         id = create_id() | ||||
|         meta:set_string("id", id) | ||||
|     end | ||||
|  | ||||
|     meta:set_string("name", name) | ||||
|     meta:set_string("description", "Access card '" .. name .. "' (id: '" .. id .. "')") | ||||
| end | ||||
|  | ||||
| -- right-click with a card for rename/configuration | ||||
| local function on_secondary_use(itemstack, player, pointed_thing) | ||||
|     local meta = itemstack:get_meta() | ||||
|     if meta:get_string("id") == "" then | ||||
|         -- initial configuration | ||||
|         configure_access_card(meta, "") | ||||
|     end | ||||
|     local name = meta:get_string("name") | ||||
|  | ||||
|     minetest.show_formspec(player:get_player_name(), FORMSPEC_NAME, [[ | ||||
|         size[10,1.4] | ||||
|         real_coordinates[true] | ||||
|         field[0.1,0.4;7,0.8;name;Name;]] .. minetest.formspec_escape(name) .. [[] | ||||
|         button_exit[7.3,0.4;2.5,0.8;save;Save] | ||||
|     ]]) | ||||
|  | ||||
|     return itemstack | ||||
| end | ||||
|  | ||||
| minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
|     if formname ~= FORMSPEC_NAME then | ||||
|         -- wrong formspec | ||||
|         return false | ||||
|     end | ||||
|  | ||||
|     if not fields.save and not fields.key_enter_field then | ||||
|         -- quit | ||||
|         return true | ||||
|     end | ||||
|  | ||||
|     local itemstack = player:get_wielded_item() | ||||
|     if itemstack:get_name() ~= "scifi_nodes:access_card" then | ||||
|         -- invalid item | ||||
|         return true | ||||
|     end | ||||
|  | ||||
|     local meta = itemstack:get_meta() | ||||
|     configure_access_card(meta, fields.name or "") | ||||
|     player:set_wielded_item(itemstack) | ||||
| end) | ||||
|  | ||||
| minetest.register_craftitem("scifi_nodes:access_card", { | ||||
|     description = "Access card (unconfigured)", | ||||
|     inventory_image = "scifi_nodes_access_card.png", | ||||
|     palette = "unifieddyes_palette_extended.png", | ||||
|     stack_max = 1, | ||||
|     paramtype2 = "color", | ||||
|     on_use = on_use, | ||||
|     on_secondary_use = on_secondary_use, | ||||
|     groups = { | ||||
|         ud_param2_colorable = 1 | ||||
|     } | ||||
| }) | ||||
|  | ||||
| -- initial recipe | ||||
| minetest.register_craft({ | ||||
|     output = "scifi_nodes:access_card", | ||||
|     recipe = { | ||||
|         {"scifi_nodes:white2", "", ""}, | ||||
|         {"scifi_nodes:white_pad", "", ""}, | ||||
|         {"scifi_nodes:white2", "", ""} | ||||
|     } | ||||
| }) | ||||
|  | ||||
| -- copy recipe | ||||
| minetest.register_craft({ | ||||
|     output = "scifi_nodes:access_card", | ||||
|     recipe = { | ||||
|         {"scifi_nodes:access_card", "scifi_nodes:white_pad", ""}, | ||||
|         {"", "", ""}, | ||||
|         {"", "", ""} | ||||
|     } | ||||
| }) | ||||
|  | ||||
| minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) | ||||
|     if itemstack:get_name() ~= "scifi_nodes:access_card" then | ||||
|         return | ||||
|     end | ||||
|  | ||||
|     local original | ||||
|     local index | ||||
|     for i = 1, #old_craft_grid do | ||||
|         if old_craft_grid[i]:get_name() == "scifi_nodes:access_card" then | ||||
|             original = old_craft_grid[i] | ||||
|             index = i | ||||
|             break | ||||
|         end | ||||
|     end | ||||
|     if not original then | ||||
|         return | ||||
|     end | ||||
|  | ||||
|     -- copy metadata | ||||
|     local src_meta = original:get_meta() | ||||
|     local dst_meta = itemstack:get_meta() | ||||
|     local copy_fields = {"id", "name", "description"} | ||||
|     for _, fieldname in ipairs(copy_fields) do | ||||
|         dst_meta:set_string(fieldname, src_meta:get_string(fieldname)) | ||||
|     end | ||||
|  | ||||
|     if old_craft_grid[2]:get_name() == "scifi_nodes:white_pad" then | ||||
|         -- keep original item if the copy-recipe is used | ||||
|         craft_inv:set_stack("craft", index, original) | ||||
|     end | ||||
| end) | ||||
|  | ||||
| if minetest.get_modpath("unifieddyes") then | ||||
|     -- add colored crafts | ||||
|     unifieddyes.register_color_craft({ | ||||
|         output = "scifi_nodes:access_card", | ||||
|         palette = "extended", | ||||
|         neutral_node = "scifi_nodes:access_card", | ||||
|         recipe = { | ||||
|             "NEUTRAL_NODE", | ||||
|             "MAIN_DYE" | ||||
|         }, | ||||
|         type = "shapeless" | ||||
|     }) | ||||
|  | ||||
| end | ||||
							
								
								
									
										73
									
								
								ambience.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								ambience.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
|  | ||||
| -- currently playing sounds per mapblock | ||||
| -- mapblock_pos[number] | ||||
| local currently_playing = {} | ||||
|  | ||||
| -- clear the currently playing tracker every few seconds | ||||
| local function clear_currently_playing() | ||||
|     currently_playing = {} | ||||
|     minetest.after(5, clear_currently_playing) | ||||
| end | ||||
| minetest.after(5, clear_currently_playing) | ||||
|  | ||||
| -- mapblock resolution | ||||
| local function get_key(pos) | ||||
|     return minetest.pos_to_string(vector.round(vector.divide(pos, 16))) | ||||
| end | ||||
|  | ||||
| local function add_currently_playing(pos, value) | ||||
|     local key = get_key(pos) | ||||
|     local count = currently_playing[key] | ||||
|     if not count then | ||||
|         -- new entry | ||||
|         count = value | ||||
|     else | ||||
|         -- update entry | ||||
|         count = count + value | ||||
|     end | ||||
|     currently_playing[key] = count | ||||
| end | ||||
|  | ||||
| -- limit plaing sounds per mapblock | ||||
| local function can_play(pos) | ||||
|     local count = currently_playing[get_key(pos)] | ||||
|     return not count or count < 25 | ||||
| end | ||||
|  | ||||
| -- register ambience sounds with node-timer | ||||
| function scifi_nodes.register_ambience(nodename, soundname, opts) | ||||
|     assert(opts) | ||||
|     opts.interval = opts.interval or 60 | ||||
|  | ||||
|     local function play(pos) | ||||
|         minetest.sound_play(soundname ,{ | ||||
|             max_hear_distance = opts.max_hear_distance or 16, | ||||
|             pos = pos, | ||||
|             gain = opts.gain or 0.7 | ||||
|         }) | ||||
|     end | ||||
|  | ||||
|     minetest.override_item(nodename, { | ||||
|         on_timer = function(pos) | ||||
|             local timer = minetest.get_node_timer(pos) | ||||
|  | ||||
|             if not can_play(pos) then | ||||
|                 -- too many sounds playing, recheck again soon | ||||
|                 timer:start(1) | ||||
|                 return | ||||
|             end | ||||
|  | ||||
|             -- increment usage count | ||||
|             add_currently_playing(pos, 1) | ||||
|             play(pos) | ||||
|  | ||||
|             -- restart timer | ||||
|             timer:start(opts.interval) | ||||
|         end, | ||||
|         on_construct = function(pos) | ||||
|             play(pos) | ||||
|             local timer = minetest.get_node_timer(pos) | ||||
|             timer:start(opts.interval) | ||||
|         end | ||||
|     }) | ||||
| end | ||||
							
								
								
									
										11
									
								
								chest.lua
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								chest.lua
									
									
									
									
									
								
							| @@ -1,20 +1,21 @@ | ||||
| local has_default = minetest.get_modpath("default") | ||||
|  | ||||
| --chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>) | ||||
| local chest_formspec = | ||||
| 	"size[8,9]" .. | ||||
| 	default.gui_bg .. | ||||
| 	default.gui_bg_img .. | ||||
| 	default.gui_slots .. | ||||
| 	(has_default and default.gui_bg or "") .. | ||||
| 	(has_default and default.gui_bg_img or "") .. | ||||
| 	(has_default and default.gui_slots or "") .. | ||||
| 	"list[current_name;main;0,0.3;8,4;]" .. | ||||
| 	"list[current_player;main;0,4.85;8,1;]" .. | ||||
| 	"list[current_player;main;0,6.08;8,3;8]" .. | ||||
| 	"listring[current_name;main]" .. | ||||
| 	"listring[current_player;main]" .. | ||||
| 	default.get_hotbar_bg(0,4.85) | ||||
| 	(has_default and default.get_hotbar_bg(0,4.85) or "") | ||||
|  | ||||
| -- Helper functions | ||||
| local function drop_chest_stuff() | ||||
| 	return function(pos, oldnode, oldmetadata, digger) | ||||
| 	return function(pos, _, oldmetadata) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		meta:from_table(oldmetadata) | ||||
| 		local inv = meta:get_inventory() | ||||
|   | ||||
							
								
								
									
										26
									
								
								common.lua
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								common.lua
									
									
									
									
									
								
							| @@ -1,7 +1,5 @@ | ||||
|  | ||||
|  | ||||
| scifi_nodes.get_switch_rules = function(param2) | ||||
|  | ||||
| function scifi_nodes.get_switch_rules(param2) | ||||
| 	-- param2 = 2 | ||||
| 	local rules = { | ||||
| 		{x=1, y=-1, z=-1}, | ||||
| @@ -10,7 +8,7 @@ scifi_nodes.get_switch_rules = function(param2) | ||||
| 		{x=0, y=-1, z=1}, | ||||
| 	} | ||||
|  | ||||
| -- Left and right when looking to +y ? | ||||
| 	-- 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 | ||||
| @@ -20,3 +18,23 @@ scifi_nodes.get_switch_rules = function(param2) | ||||
| 	end | ||||
| 	return rules | ||||
| end | ||||
|  | ||||
| scifi_nodes.slope_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} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| scifi_nodes.slope_box_simple = { | ||||
| 	type = "fixed", | ||||
| 	fixed = { | ||||
| 		{-0.5,  -0.5,  -0.5, 0.5, -0.25, -0.25}, | ||||
| 		{-0.5, -0.25, -0.25, 0.5,     0, 0}, | ||||
| 		{-0.5,     0,     0, 0.5,  0.25, 0.25}, | ||||
| 		{-0.5,  0.25,  0.25, 0.5,   0.5, 0.5} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -11,7 +11,7 @@ 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 function set_owner(pos, placer) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	meta:set_string("owner", placer:get_player_name()) | ||||
| 	meta:set_string("code", secret_code) | ||||
| @@ -48,7 +48,7 @@ local function update_code(pos, code) | ||||
| 	meta:set_string("code", code) | ||||
| end | ||||
|  | ||||
| local function show_digicode_formspec(pos, node, player, itemstack, pointed_thing) | ||||
| local function show_digicode_formspec(pos, _, player) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	local owner = meta:get_string("owner") | ||||
| 	local current_code = meta:get_string("code") | ||||
|   | ||||
							
								
								
									
										28
									
								
								doors.lua
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								doors.lua
									
									
									
									
									
								
							| @@ -120,7 +120,7 @@ for _, current_door in ipairs(doors) do | ||||
| 		return itemstack; | ||||
| 	end | ||||
|  | ||||
| 	local function afterdestruct(pos, oldnode) | ||||
| 	local function afterdestruct(pos) | ||||
| 		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) | ||||
| 	end | ||||
|  | ||||
| @@ -148,14 +148,18 @@ for _, current_door in ipairs(doors) do | ||||
|  | ||||
| 			local adjacent = minetest.get_node({x=x, y=y, z=z}) | ||||
| 			if adjacent.name == target_opposite then | ||||
| 				minetest.set_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2}) | ||||
| 				minetest.set_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2}) | ||||
| 				minetest.swap_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2}) | ||||
| 				minetest.swap_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2}) | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 	end | ||||
|  | ||||
| 	local function open_door(pos, node) | ||||
| 	local function open_door(pos, node, player, itemstack) | ||||
| 		if not scifi_nodes.door_check_access_card(pos, itemstack, player) then | ||||
| 			return | ||||
| 		end | ||||
|  | ||||
| 		-- play sound | ||||
| 		minetest.sound_play(sound,{ | ||||
| 			max_hear_distance = 16, | ||||
| @@ -165,20 +169,20 @@ for _, current_door in ipairs(doors) do | ||||
|  | ||||
| 		local timer = minetest.get_node_timer(pos) | ||||
|  | ||||
| 		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.swap_node(pos, {name=opened, param2=node.param2}) | ||||
| 		minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2}) | ||||
|  | ||||
| 		change_adjacent(opened, pos, node) | ||||
|  | ||||
| 		timer:start(3) | ||||
| 	end | ||||
|  | ||||
| 	local function afterplace(pos, placer, itemstack, pointed_thing) | ||||
| 	local function afterplace(pos) | ||||
| 		local node = minetest.get_node(pos) | ||||
| 		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=node.param2}) | ||||
| 	end | ||||
|  | ||||
| 	local function ontimer(pos, elapsed) | ||||
| 	local function ontimer(pos) | ||||
| 		-- play sound | ||||
| 		minetest.sound_play(sound,{ | ||||
| 			max_hear_distance = 16, | ||||
| @@ -188,8 +192,8 @@ for _, current_door in ipairs(doors) do | ||||
|  | ||||
| 		local node = minetest.get_node(pos) | ||||
|  | ||||
| 		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}) | ||||
| 		minetest.swap_node(pos, {name=closed, param2=node.param2}) | ||||
| 		minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2}) | ||||
|  | ||||
| 		change_adjacent(closed, pos, node) | ||||
| 	end | ||||
| @@ -218,7 +222,7 @@ for _, current_door in ipairs(doors) do | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	local function nodig(pos, digger) | ||||
| 	local function nodig() | ||||
| 		return false | ||||
| 	end | ||||
|  | ||||
| @@ -242,7 +246,7 @@ for _, current_door in ipairs(doors) do | ||||
| 		paramtype2 = "facedir", | ||||
| 		groups = { | ||||
| 			cracky = 3, | ||||
| 			oddly_breakable_by_hand = 1, | ||||
| 			dig_generic = 3, | ||||
| 			scifi_nodes_door = 1, | ||||
| 			door = 1 | ||||
| 		}, | ||||
|   | ||||
							
								
								
									
										11
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								init.lua
									
									
									
									
									
								
							| @@ -14,15 +14,17 @@ end | ||||
| dofile(MP.."/common.lua") | ||||
|  | ||||
| if minetest.get_modpath("default") then | ||||
| 	-- only load builder and chest if the default mod is available | ||||
| 	-- only load builder if the default mod is available | ||||
| 	-- the formspecs depend on it | ||||
| 	dofile(MP.."/builder.lua") | ||||
| 	dofile(MP.."/chest.lua") | ||||
| end | ||||
|  | ||||
| dofile(MP.."/ambience.lua") | ||||
| dofile(MP.."/chest.lua") | ||||
| dofile(MP.."/plants.lua") | ||||
| dofile(MP.."/models.lua") | ||||
| dofile(MP.."/nodes.lua") | ||||
| dofile(MP.."/access_card.lua") | ||||
| dofile(MP.."/doors.lua") | ||||
| dofile(MP.."/switch.lua") | ||||
| dofile(MP.."/protected_switch.lua") | ||||
| @@ -30,6 +32,7 @@ dofile(MP.."/nodeboxes.lua") | ||||
| dofile(MP.."/palm_scanner.lua") | ||||
| dofile(MP.."/digicode.lua") | ||||
| dofile(MP.."/octagon_panes.lua") | ||||
| dofile(MP.."/octagon_glass.lua") | ||||
| dofile(MP.."/forcefield.lua") | ||||
| dofile(MP.."/crafts.lua") | ||||
|  | ||||
| @@ -45,6 +48,4 @@ end | ||||
|  | ||||
| if minetest.get_modpath("mtt") and mtt.enabled then | ||||
| 	dofile(MP .. "/mtt.lua") | ||||
| end | ||||
|  | ||||
| minetest.log("action", "[scifi_nodes] loaded.") | ||||
| end | ||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | ||||
| name = scifi_nodes | ||||
| description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. | ||||
| optional_depends = """ | ||||
| advtrains, | ||||
| default, | ||||
| xpanes, | ||||
| mesecons, | ||||
| @@ -15,5 +16,6 @@ unifieddyes, | ||||
| letters, | ||||
| mesecons_stealthnode, | ||||
| mtt, | ||||
| slats | ||||
| slats, | ||||
| signs_api | ||||
| """ | ||||
|   | ||||
							
								
								
									
										24
									
								
								models.lua
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								models.lua
									
									
									
									
									
								
							| @@ -16,24 +16,8 @@ function scifi_nodes.register_slope(name, desc, texture, light, soundtype) | ||||
| 		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} | ||||
| 			} | ||||
| 		}, | ||||
| 		selection_box = scifi_nodes.slope_box, | ||||
| 		collision_box = scifi_nodes.slope_box, | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		use_texture_alpha = "clip", | ||||
| @@ -47,8 +31,8 @@ end | ||||
|  | ||||
| -- register some blocks in stairsplus if available (part of moreblocks) | ||||
| scifi_nodes.register_slope("white2", "Plastic", {"scifi_nodes_white2.png",}, 0, "stone") | ||||
| scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_super_white.png",}, 11, "stone") | ||||
| scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_ultra_white.png",}, minetest.LIGHT_MAX, "stone") | ||||
| scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_white2.png",}, 11, "stone") | ||||
| scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_white2.png",},minetest.LIGHT_MAX, "stone") | ||||
| scifi_nodes.register_slope("black", "Black", {"scifi_nodes_black.png",}, 0) | ||||
| scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0) | ||||
| scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.png",}, 0) | ||||
|   | ||||
							
								
								
									
										12
									
								
								models/scifi_nodes_slope_simple.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								models/scifi_nodes_slope_simple.obj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| g top | ||||
| v 0.500000 0.500000 0.500000 | ||||
| v -0.500000 0.500000 0.500000 | ||||
| v -0.500000 -0.500000 -0.500000 | ||||
| v 0.500000 -0.500000 -0.500000 | ||||
| vt 1.0000 1.0000 | ||||
| vt 0.0000 1.0000 | ||||
| vt 0.0000 0.0000 | ||||
| vt 1.0000 0.0000 | ||||
| vn 0.0000 0.7071 -0.7071 | ||||
| s off | ||||
| f 2/1/1 1/2/1 4/3/1 3/4/1 | ||||
							
								
								
									
										68
									
								
								nodes.json
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								nodes.json
									
									
									
									
									
								
							| @@ -8,20 +8,31 @@ | ||||
|     "white2": { | ||||
|         "description": "plastic", | ||||
|         "colorable": true, | ||||
|         "sounds": "stone" | ||||
|         "sounds": "stone", | ||||
|         "signs_banner": true, | ||||
|         "signs_banner_color": "#000" | ||||
|     }, | ||||
|     "super_white": { | ||||
|         "description": "Super Plastic", | ||||
|         "colorable": true, | ||||
|         "light": 11, | ||||
|         "sounds": "stone" | ||||
|         "sounds": "stone", | ||||
|         "texture_name": "white2" | ||||
|     }, | ||||
|     "ultra_white": { | ||||
|         "description": "Ultra Plastic", | ||||
|         "colorable": true, | ||||
|         "light": 14, | ||||
|         "sounds": "stone" | ||||
|         "sounds": "stone", | ||||
|         "texture_name": "white2" | ||||
|     }, | ||||
|     "engine": { | ||||
|         "description": "Engine" | ||||
|         "description": "Engine", | ||||
|         "ambience": { | ||||
|             "scifi_nodes_ambience_engine": { | ||||
|                 "interval": 16.1 | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|     "wall": { | ||||
|         "description": "metal wall" | ||||
| @@ -54,11 +65,17 @@ | ||||
|         "description": "transparent vent", | ||||
|         "texture_name": "vent2", | ||||
|         "texture_modifier": "^[makealpha:33,33,33", | ||||
|         "drawtype": "glasslike" | ||||
|         "drawtype": "glasslike", | ||||
|         "ambience": { | ||||
|             "scifi_nodes_ambience_vent": { | ||||
|                 "interval": 4.2 | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|     "stripes": { | ||||
|         "description": "hazard stripes", | ||||
|         "slat": true | ||||
|         "slat": true, | ||||
|         "advtrains_platform": true | ||||
|     }, | ||||
|     "rust": { | ||||
|         "description": "rusty metal" | ||||
| @@ -67,7 +84,8 @@ | ||||
|         "description": "metal mesh" | ||||
|     }, | ||||
|     "black": { | ||||
|         "description": "black wall" | ||||
|         "description": "black wall", | ||||
|         "signs_banner": true | ||||
|     }, | ||||
|     "blackoct": { | ||||
|         "description": "black octagon" | ||||
| @@ -79,7 +97,8 @@ | ||||
|         "description": "black tile" | ||||
|     }, | ||||
|     "blacktile2": { | ||||
|         "description": "black tile 2" | ||||
|         "description": "black tile 2", | ||||
|         "paramtype2": "none" | ||||
|     }, | ||||
|     "blackvent": { | ||||
|         "description": "black vent" | ||||
| @@ -88,7 +107,8 @@ | ||||
|         "description": "blue bars" | ||||
|     }, | ||||
|     "bluemetal": { | ||||
|         "description": "blue metal" | ||||
|         "description": "blue metal", | ||||
|         "signs_banner": true | ||||
|     }, | ||||
|     "bluetile": { | ||||
|         "description": "blue tile", | ||||
| @@ -104,7 +124,8 @@ | ||||
|         "description": "transparent metal floormesh", | ||||
|         "texture_name": "mesh", | ||||
|         "texture_modifier": "^[contrast:10:-50^[makealpha:0,0,0", | ||||
|         "drawtype": "glasslike" | ||||
|         "drawtype": "glasslike", | ||||
|         "sunlight_propagates": true | ||||
|     }, | ||||
|     "pipe": { | ||||
|         "description": "wall pipe" | ||||
| @@ -134,7 +155,8 @@ | ||||
|         "description": "red metal block" | ||||
|     }, | ||||
|     "grey_square": { | ||||
|         "description": "grey metal block" | ||||
|         "description": "grey metal block", | ||||
|         "paramtype2": "none" | ||||
|     }, | ||||
|     "blue_square": { | ||||
|         "description": "blue metal block" | ||||
| @@ -147,7 +169,8 @@ | ||||
|         "colorable": true | ||||
|     }, | ||||
|     "greenmetal": { | ||||
|         "description": "green metal wall" | ||||
|         "description": "green metal wall", | ||||
|         "signs_banner": true | ||||
|     }, | ||||
|     "greenmetal2": { | ||||
|         "description": "green metal wall2" | ||||
| @@ -171,7 +194,8 @@ | ||||
|         "description": "green pipes" | ||||
|     }, | ||||
|     "grey": { | ||||
|         "description": "grey wall" | ||||
|         "description": "grey wall", | ||||
|         "signs_banner": true | ||||
|     }, | ||||
|     "greybolts": { | ||||
|         "description": "grey wall bolts" | ||||
| @@ -225,7 +249,8 @@ | ||||
|     }, | ||||
|     "blackdmg": { | ||||
|         "description": "Damaged black wall", | ||||
|         "slat": true | ||||
|         "slat": true, | ||||
|         "paramtype2": "none" | ||||
|     }, | ||||
|     "blackdmgstripe": { | ||||
|         "description": "Damaged black wall(stripes)" | ||||
| @@ -252,7 +277,12 @@ | ||||
|         "light": 5 | ||||
|     }, | ||||
|     "fan": { | ||||
|         "description": "Fan" | ||||
|         "description": "Fan", | ||||
|         "ambience": { | ||||
|             "scifi_nodes_ambience_fan": { | ||||
|                 "interval": 7 | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|     "ppllght": { | ||||
|         "description": "Purple wall light", | ||||
| @@ -275,7 +305,8 @@ | ||||
|         "slat": true | ||||
|     }, | ||||
|     "purple": { | ||||
|         "description": "Purple node" | ||||
|         "description": "Purple node", | ||||
|         "signs_banner": true | ||||
|     }, | ||||
|     "rock": { | ||||
|         "description": "Moonstone", | ||||
| @@ -291,6 +322,7 @@ | ||||
|         "description": "Black vent" | ||||
|     }, | ||||
|     "blackplate": { | ||||
|         "description": "Black plate" | ||||
|         "description": "Black plate", | ||||
|         "paramtype2": "none" | ||||
|     } | ||||
| } | ||||
| } | ||||
|   | ||||
							
								
								
									
										125
									
								
								nodes.lua
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								nodes.lua
									
									
									
									
									
								
							| @@ -1,6 +1,8 @@ | ||||
| local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") | ||||
| local has_moreblocks_mod = minetest.get_modpath("moreblocks") | ||||
| local has_slats_mod = minetest.get_modpath("slats") | ||||
| local has_advtrains_mod = minetest.get_modpath("advtrains") | ||||
| local has_signs_api_mod = minetest.get_modpath("signs_api") | ||||
|  | ||||
| --nodes | ||||
|  | ||||
| @@ -367,95 +369,6 @@ minetest.register_node("scifi_nodes:grnpipe2", { | ||||
| 	on_place = minetest.rotate_node | ||||
| }) | ||||
|  | ||||
| minetest.register_node("scifi_nodes:octrng", { | ||||
| 	description = "Orange Octagon Glass", | ||||
| 	sunlight_propagates = true, | ||||
| 	drawtype = "glasslike", | ||||
| 	tiles = { | ||||
| 		"scifi_nodes_octrng.png", | ||||
| 	}, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	use_texture_alpha = "blend", | ||||
| 	light_source = 10, | ||||
| 	groups = {cracky=2, dig_generic = 3}, | ||||
| 	is_ground_content = false, | ||||
| 	sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_node("scifi_nodes:octgrn", { | ||||
| 	description = "Green Octagon Glass", | ||||
| 	sunlight_propagates = true, | ||||
| 	drawtype = "glasslike", | ||||
| 	tiles = { | ||||
| 		"scifi_nodes_octgrn.png", | ||||
| 	}, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	use_texture_alpha = "blend", | ||||
| 	light_source = 10, | ||||
| 	groups = {cracky=2, dig_generic = 3}, | ||||
| 	is_ground_content = false, | ||||
| 	sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_node("scifi_nodes:octbl", { | ||||
| 	description = "Blue Octagon Glass", | ||||
| 	sunlight_propagates = true, | ||||
| 	drawtype = "glasslike", | ||||
| 	tiles = { | ||||
| 		"scifi_nodes_octbl.png", | ||||
| 	}, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	use_texture_alpha = "blend", | ||||
| 	light_source = 10, | ||||
| 	groups = {cracky=2, dig_generic = 3}, | ||||
| 	is_ground_content = false, | ||||
| 	sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_node("scifi_nodes:octppl", { | ||||
| 	description = "Purple Octagon Glass", | ||||
| 	sunlight_propagates = true, | ||||
| 	drawtype = "glasslike", | ||||
| 	tiles = { | ||||
| 		"scifi_nodes_octppl.png", | ||||
| 	}, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	use_texture_alpha = "blend", | ||||
| 	light_source = 10, | ||||
| 	groups = {cracky=2, dig_generic = 3}, | ||||
| 	is_ground_content = false, | ||||
| 	sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| }) | ||||
|  | ||||
| if has_unifieddyes_mod then | ||||
| 	minetest.register_node("scifi_nodes:octwht", { | ||||
| 		description = "Octagon Glass", | ||||
| 		sunlight_propagates = true, | ||||
| 		drawtype = "glasslike", | ||||
| 		tiles = { | ||||
| 			"scifi_nodes_octwht.png", | ||||
| 		}, | ||||
| 		palette = "unifieddyes_palette_extended.png", | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "color", | ||||
| 		use_texture_alpha = "blend", | ||||
| 		light_source = 10, | ||||
| 		groups = { | ||||
| 			cracky = 2, | ||||
| 			dig_generic = 3, | ||||
| 			ud_param2_colorable = 1 | ||||
| 		}, | ||||
| 		is_ground_content = false, | ||||
| 		sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| 		on_construct = unifieddyes.on_construct, | ||||
| 		on_dig = unifieddyes.on_dig | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| minetest.register_node("scifi_nodes:tower", { | ||||
| 	description = "Wind tower", | ||||
| 	sunlight_propagates = false, | ||||
| @@ -607,6 +520,7 @@ for name, def in pairs(nodes) do | ||||
| 	local node_def = { | ||||
| 		description = def.description, | ||||
| 		drawtype = def.drawtype or "normal", | ||||
| 		sunlight_propagates = def.sunlight_propagates, | ||||
| 		tiles = tiles, | ||||
| 		groups = {cracky=1, dig_generic = 3}, | ||||
| 		is_ground_content = false, | ||||
| @@ -624,7 +538,8 @@ for name, def in pairs(nodes) do | ||||
| 	end | ||||
|  | ||||
| 	-- register node | ||||
| 	minetest.register_node("scifi_nodes:"..name, node_def) | ||||
| 	local nodename = "scifi_nodes:" .. name | ||||
| 	minetest.register_node(nodename , node_def) | ||||
|  | ||||
| 	-- unified dyes registration | ||||
| 	if def.colorable and has_unifieddyes_mod then | ||||
| @@ -661,6 +576,36 @@ for name, def in pairs(nodes) do | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	if def.ambience then | ||||
| 		for soundname, opts in pairs(def.ambience) do | ||||
| 			scifi_nodes.register_ambience(nodename, soundname, opts) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- advtrains platform registration | ||||
| 	if has_advtrains_mod and def.advtrains_platform then | ||||
| 		advtrains.register_platform("scifi_nodes", "scifi_nodes:" .. name) | ||||
| 	end | ||||
|  | ||||
| 	if has_signs_api_mod and def.signs_banner then | ||||
| 		signs_api.register_sign("scifi_nodes", name .. "_banner", { | ||||
| 			depth = 1/16, | ||||
| 			width = 5, | ||||
| 			height = 1, | ||||
| 			entity_fields = { | ||||
| 				maxlines = 1, | ||||
| 				color = def.signs_banner_color or "#fff", | ||||
| 			}, | ||||
| 			node_fields = { | ||||
| 				visual_scale = 1, | ||||
| 				description = name .. " banner", | ||||
| 				tiles = tiles, | ||||
| 				inventory_image = "scifi_nodes_" .. name .. ".png", | ||||
| 				use_texture_alpha = "clip", | ||||
| 			}, | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	if has_slats_mod and def.slat then | ||||
| 		slats.register_slat( | ||||
| 			name, | ||||
|   | ||||
							
								
								
									
										53
									
								
								octagon_glass.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								octagon_glass.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") | ||||
|  | ||||
| local function register_glass(key, name) | ||||
|     local tiles = {"scifi_nodes_" .. key .. ".png"} | ||||
|  | ||||
|     minetest.register_node("scifi_nodes:" .. key, { | ||||
|         description = name .. " Octagon Glass", | ||||
|         sunlight_propagates = true, | ||||
|         drawtype = "glasslike", | ||||
|         tiles = tiles, | ||||
|         paramtype = "light", | ||||
|         paramtype2 = "facedir", | ||||
|         use_texture_alpha = "blend", | ||||
|         light_source = 10, | ||||
|         groups = { | ||||
|             cracky = 2, | ||||
|             dig_generic = 3 | ||||
|         }, | ||||
|         is_ground_content = false, | ||||
|         sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
|     }) | ||||
| end | ||||
|  | ||||
| register_glass("octppl", "Purple") | ||||
| register_glass("octbl", "Blue") | ||||
| register_glass("octgrn", "Green") | ||||
| register_glass("octrng", "Orange") | ||||
| register_glass("octwht", "White") | ||||
|  | ||||
| if has_unifieddyes_mod then | ||||
| 	minetest.register_node("scifi_nodes:octwht", { | ||||
| 		description = "Octagon Glass", | ||||
| 		sunlight_propagates = true, | ||||
| 		drawtype = "glasslike", | ||||
| 		tiles = { | ||||
| 			"scifi_nodes_octwht.png", | ||||
| 		}, | ||||
| 		palette = "unifieddyes_palette_extended.png", | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "color", | ||||
| 		use_texture_alpha = "blend", | ||||
| 		light_source = 10, | ||||
| 		groups = { | ||||
| 			cracky = 2, | ||||
| 			dig_generic = 3, | ||||
| 			ud_param2_colorable = 1 | ||||
| 		}, | ||||
| 		is_ground_content = false, | ||||
| 		sounds = scifi_nodes.node_sound_glass_defaults(), | ||||
| 		on_construct = unifieddyes.on_construct, | ||||
| 		on_dig = unifieddyes.on_dig | ||||
| 	}) | ||||
| end | ||||
| @@ -1,13 +1,15 @@ | ||||
|  | ||||
| local function register(basename, description, texture) | ||||
| local function register(basename, color, texture) | ||||
|   local nodename_single = "scifi_nodes:" .. basename .. "_pane" | ||||
|   local nodename_double = "scifi_nodes:" .. basename .. "_pane_double" | ||||
|   local nodename_offset = "scifi_nodes:" .. basename .. "_pane_offset" | ||||
|   local nodename_slope = "scifi_nodes:" .. basename .. "_slope" | ||||
|   local recipe_ingredient = "scifi_nodes:" .. basename | ||||
|   local base_decription = color ..  " octagon glass" | ||||
|  | ||||
|   -- single height | ||||
|   minetest.register_node(nodename_single, { | ||||
|     description = description, | ||||
|     description = base_decription .. " pane", | ||||
|     drawtype = "nodebox", | ||||
|     tiles = { | ||||
|       texture | ||||
| @@ -25,14 +27,17 @@ local function register(basename, description, texture) | ||||
|       type = "fixed", | ||||
|       fixed = {{-0.5, -0.5, -0.25, 0.5, 0.5, 0.25}}, | ||||
|     }, | ||||
|     groups = {cracky = 3, oddly_breakable_by_hand = 3}, | ||||
|     groups = { | ||||
|       cracky = 3, | ||||
|       oddly_breakable_by_hand = 3 | ||||
|     }, | ||||
|     use_texture_alpha = "blend", | ||||
|     sounds = scifi_nodes.node_sound_glass_defaults() | ||||
|   }) | ||||
|  | ||||
|   -- double height | ||||
|   minetest.register_node(nodename_double, { | ||||
|     description = description, | ||||
|     description = base_decription .. " pane (double)", | ||||
|     drawtype = "nodebox", | ||||
|     tiles = { | ||||
|       texture | ||||
| @@ -50,14 +55,17 @@ local function register(basename, description, texture) | ||||
|       type = "fixed", | ||||
|       fixed = {{-0.5, -0.5, -0.25, 0.5, 1.5, 0.25}}, | ||||
|     }, | ||||
|     groups = {cracky = 3, oddly_breakable_by_hand = 3}, | ||||
|     groups = { | ||||
|       cracky = 3, | ||||
|       oddly_breakable_by_hand = 3 | ||||
|     }, | ||||
|     use_texture_alpha = "blend", | ||||
|     sounds = scifi_nodes.node_sound_glass_defaults() | ||||
|   }) | ||||
|  | ||||
|   -- single height with offset | ||||
|   minetest.register_node(nodename_offset, { | ||||
|     description = description, | ||||
|     description = base_decription .. " pane (offset)", | ||||
|     drawtype = "nodebox", | ||||
|     tiles = { | ||||
|       texture | ||||
| @@ -75,11 +83,37 @@ local function register(basename, description, texture) | ||||
|       type = "fixed", | ||||
|       fixed = {{-0.5, -0.5, 0.75, 0.5, 0.5, 1.25}}, | ||||
|     }, | ||||
|     groups = {cracky = 3, oddly_breakable_by_hand = 3}, | ||||
|     groups = { | ||||
|       cracky = 3, | ||||
|       oddly_breakable_by_hand = 3, | ||||
|       not_blocking_trains = 1 | ||||
|     }, | ||||
|     use_texture_alpha = "blend", | ||||
|     sounds = scifi_nodes.node_sound_glass_defaults() | ||||
|   }) | ||||
|  | ||||
|   -- slope pane | ||||
|   minetest.register_node(nodename_slope, { | ||||
|     description = base_decription .. " pane (slope)", | ||||
| 		sunlight_propagates = true, | ||||
| 		drawtype = "mesh", | ||||
| 		mesh = "scifi_nodes_slope_simple.obj", | ||||
| 		tiles = { | ||||
|       texture | ||||
|     }, | ||||
|     paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		use_texture_alpha = "blend", | ||||
| 		light_source = 10, | ||||
| 		groups = { | ||||
| 			cracky = 2, | ||||
| 			dig_generic = 3 | ||||
| 		}, | ||||
| 		selection_box = scifi_nodes.slope_box_simple, | ||||
| 		collision_box = scifi_nodes.slope_box_simple, | ||||
| 		is_ground_content = false, | ||||
| 		sounds = scifi_nodes.node_sound_glass_defaults() | ||||
| 	}) | ||||
|   -- register recipes | ||||
|  | ||||
|   minetest.register_craft({ | ||||
| @@ -89,6 +123,15 @@ local function register(basename, description, texture) | ||||
|     }, | ||||
|   }) | ||||
|  | ||||
|   minetest.register_craft({ | ||||
|     output = nodename_slope .. " 16", | ||||
|     recipe = { | ||||
|       {"", "", recipe_ingredient}, | ||||
|       {"", recipe_ingredient, ""}, | ||||
|       {recipe_ingredient, "", ""} | ||||
|     }, | ||||
|   }) | ||||
|  | ||||
|   minetest.register_craft({ | ||||
|     output = nodename_double .. " 16", | ||||
|     recipe = { | ||||
| @@ -104,8 +147,9 @@ local function register(basename, description, texture) | ||||
|   }) | ||||
| end | ||||
|  | ||||
| register("octrng", "Orange Octagon Glass pane", "scifi_nodes_octrng.png") | ||||
| register("octgrn", "Green Octagon Glass pane", "scifi_nodes_octgrn.png") | ||||
| register("octbl", "Blue Octagon Glass pane", "scifi_nodes_octbl.png") | ||||
| register("octppl", "Purple Octagon Glass pane", "scifi_nodes_octppl.png") | ||||
| register("octrng", "Orange", "scifi_nodes_octrng.png") | ||||
| register("octgrn", "Green", "scifi_nodes_octgrn.png") | ||||
| register("octbl", "Blue", "scifi_nodes_octbl.png") | ||||
| register("octppl", "Purple", "scifi_nodes_octppl.png") | ||||
| register("octwht", "White", "scifi_nodes_octwht.png") | ||||
| register("glass", "Dark Glass pane", "scifi_nodes_glass.png") | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_engine.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_engine.ogg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_fan.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_fan.ogg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_vent.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sounds/scifi_nodes_ambience_vent.ogg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								textures/scifi_nodes_access_card.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/scifi_nodes_access_card.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.8 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 83 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 83 B | 
		Reference in New Issue
	
	Block a user