forked from mtcontrib/scifi_nodes
		
	Compare commits
	
		
			16 Commits
		
	
	
		
			f79e84b92d
			...
			fb1fdcf69e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| fb1fdcf69e | |||
|  | 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 | name: luacheck | ||||||
|  |  | ||||||
| on: [push, pull_request] | on: [push, pull_request] | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build: |   luacheck: | ||||||
|  |  | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|     - uses: actions/checkout@v1 |       - name: Checkout | ||||||
|     - name: apt |         uses: actions/checkout@main | ||||||
|       run: sudo apt-get install -y luarocks |       - name: Luacheck | ||||||
|     - name: luacheck install |         uses: lunarmodules/luacheck@master | ||||||
|       run: luarocks install --local luacheck |  | ||||||
|     - name: luacheck run |  | ||||||
|       run: $HOME/.luarocks/bin/luacheck ./ |  | ||||||
							
								
								
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							| @@ -1,20 +1,14 @@ | |||||||
|  | std = "min+minetest" | ||||||
|  |  | ||||||
| unused_args = false | unused_args = false | ||||||
| max_line_length = 180 |  | ||||||
|  |  | ||||||
| globals = { | globals = { | ||||||
| 	"scifi_nodes" | 	"scifi_nodes" | ||||||
| } | } | ||||||
|  |  | ||||||
| read_globals = { | read_globals = { | ||||||
| 	-- Stdlib |  | ||||||
| 	string = {fields = {"split"}}, |  | ||||||
| 	table = {fields = {"copy", "getn"}}, |  | ||||||
|  |  | ||||||
| 	-- Minetest |  | ||||||
| 	"vector", "ItemStack", |  | ||||||
| 	"dump", |  | ||||||
|  |  | ||||||
| 	-- optional deps | 	-- optional deps | ||||||
|  | 	"advtrains", | ||||||
| 	"default", | 	"default", | ||||||
| 	"stairsplus", | 	"stairsplus", | ||||||
| 	"xpanes", | 	"xpanes", | ||||||
| @@ -23,6 +17,7 @@ read_globals = { | |||||||
| 	"mesecon", | 	"mesecon", | ||||||
| 	"unifieddyes", | 	"unifieddyes", | ||||||
| 	"letters", | 	"letters", | ||||||
|  | 	"signs_api", | ||||||
| 	"stealthnode", | 	"stealthnode", | ||||||
| 	"slats", | 	"slats", | ||||||
| 	"mtt" | 	"mtt" | ||||||
|   | |||||||
| @@ -49,6 +49,9 @@ CC BY 3.0 | |||||||
|  |  | ||||||
| CC0 | CC0 | ||||||
| * scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/ | * 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: | # 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>) | --chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>) | ||||||
| local chest_formspec = | local chest_formspec = | ||||||
| 	"size[8,9]" .. | 	"size[8,9]" .. | ||||||
| 	default.gui_bg .. | 	(has_default and default.gui_bg or "") .. | ||||||
| 	default.gui_bg_img .. | 	(has_default and default.gui_bg_img or "") .. | ||||||
| 	default.gui_slots .. | 	(has_default and default.gui_slots or "") .. | ||||||
| 	"list[current_name;main;0,0.3;8,4;]" .. | 	"list[current_name;main;0,0.3;8,4;]" .. | ||||||
| 	"list[current_player;main;0,4.85;8,1;]" .. | 	"list[current_player;main;0,4.85;8,1;]" .. | ||||||
| 	"list[current_player;main;0,6.08;8,3;8]" .. | 	"list[current_player;main;0,6.08;8,3;8]" .. | ||||||
| 	"listring[current_name;main]" .. | 	"listring[current_name;main]" .. | ||||||
| 	"listring[current_player;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 | -- Helper functions | ||||||
| local function drop_chest_stuff() | local function drop_chest_stuff() | ||||||
| 	return function(pos, oldnode, oldmetadata, digger) | 	return function(pos, _, oldmetadata) | ||||||
| 		local meta = minetest.get_meta(pos) | 		local meta = minetest.get_meta(pos) | ||||||
| 		meta:from_table(oldmetadata) | 		meta:from_table(oldmetadata) | ||||||
| 		local inv = meta:get_inventory() | 		local inv = meta:get_inventory() | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								common.lua
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								common.lua
									
									
									
									
									
								
							| @@ -1,7 +1,5 @@ | |||||||
|  |  | ||||||
|  | function scifi_nodes.get_switch_rules(param2) | ||||||
| scifi_nodes.get_switch_rules = function(param2) |  | ||||||
|  |  | ||||||
| 	-- param2 = 2 | 	-- param2 = 2 | ||||||
| 	local rules = { | 	local rules = { | ||||||
| 		{x=1, y=-1, z=-1}, | 		{x=1, y=-1, z=-1}, | ||||||
| @@ -10,7 +8,7 @@ scifi_nodes.get_switch_rules = function(param2) | |||||||
| 		{x=0, y=-1, z=1}, | 		{x=0, y=-1, z=1}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| -- Left and right when looking to +y ? | 	-- Left and right when looking to +y ? | ||||||
| 	if param2 == 3 then | 	if param2 == 3 then | ||||||
| 		rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right (rules)) | 		rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right (rules)) | ||||||
| 	elseif param2 == 4 then | 	elseif param2 == 4 then | ||||||
| @@ -20,3 +18,23 @@ scifi_nodes.get_switch_rules = function(param2) | |||||||
| 	end | 	end | ||||||
| 	return rules | 	return rules | ||||||
| end | 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 | -- after_place_node, use by digicode and palm_scanner | ||||||
| -- placer is a player object | -- 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) | 	local meta = minetest.get_meta(pos) | ||||||
| 	meta:set_string("owner", placer:get_player_name()) | 	meta:set_string("owner", placer:get_player_name()) | ||||||
| 	meta:set_string("code", secret_code) | 	meta:set_string("code", secret_code) | ||||||
| @@ -48,7 +48,7 @@ local function update_code(pos, code) | |||||||
| 	meta:set_string("code", code) | 	meta:set_string("code", code) | ||||||
| end | 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 meta = minetest.get_meta(pos) | ||||||
| 	local owner = meta:get_string("owner") | 	local owner = meta:get_string("owner") | ||||||
| 	local current_code = meta:get_string("code") | 	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; | 		return itemstack; | ||||||
| 	end | 	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"}) | 		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -148,14 +148,18 @@ for _, current_door in ipairs(doors) do | |||||||
|  |  | ||||||
| 			local adjacent = minetest.get_node({x=x, y=y, z=z}) | 			local adjacent = minetest.get_node({x=x, y=y, z=z}) | ||||||
| 			if adjacent.name == target_opposite then | 			if adjacent.name == target_opposite then | ||||||
| 				minetest.set_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2}) | 				minetest.swap_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+1, z=z}, {name=target_top, param2 = adjacent.param2}) | ||||||
| 			end | 			end | ||||||
| 		end | 		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 | 		-- play sound | ||||||
| 		minetest.sound_play(sound,{ | 		minetest.sound_play(sound,{ | ||||||
| 			max_hear_distance = 16, | 			max_hear_distance = 16, | ||||||
| @@ -165,20 +169,20 @@ for _, current_door in ipairs(doors) do | |||||||
|  |  | ||||||
| 		local timer = minetest.get_node_timer(pos) | 		local timer = minetest.get_node_timer(pos) | ||||||
|  |  | ||||||
| 		minetest.set_node(pos, {name=opened, param2=node.param2}) | 		minetest.swap_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({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2}) | ||||||
|  |  | ||||||
| 		change_adjacent(opened, pos, node) | 		change_adjacent(opened, pos, node) | ||||||
|  |  | ||||||
| 		timer:start(3) | 		timer:start(3) | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	local function afterplace(pos, placer, itemstack, pointed_thing) | 	local function afterplace(pos) | ||||||
| 		local node = minetest.get_node(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}) | 		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=node.param2}) | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	local function ontimer(pos, elapsed) | 	local function ontimer(pos) | ||||||
| 		-- play sound | 		-- play sound | ||||||
| 		minetest.sound_play(sound,{ | 		minetest.sound_play(sound,{ | ||||||
| 			max_hear_distance = 16, | 			max_hear_distance = 16, | ||||||
| @@ -188,8 +192,8 @@ for _, current_door in ipairs(doors) do | |||||||
|  |  | ||||||
| 		local node = minetest.get_node(pos) | 		local node = minetest.get_node(pos) | ||||||
|  |  | ||||||
| 		minetest.set_node(pos, {name=closed, param2=node.param2}) | 		minetest.swap_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({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2}) | ||||||
|  |  | ||||||
| 		change_adjacent(closed, pos, node) | 		change_adjacent(closed, pos, node) | ||||||
| 	end | 	end | ||||||
| @@ -218,7 +222,7 @@ for _, current_door in ipairs(doors) do | |||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	local function nodig(pos, digger) | 	local function nodig() | ||||||
| 		return false | 		return false | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -242,7 +246,7 @@ for _, current_door in ipairs(doors) do | |||||||
| 		paramtype2 = "facedir", | 		paramtype2 = "facedir", | ||||||
| 		groups = { | 		groups = { | ||||||
| 			cracky = 3, | 			cracky = 3, | ||||||
| 			oddly_breakable_by_hand = 1, | 			dig_generic = 3, | ||||||
| 			scifi_nodes_door = 1, | 			scifi_nodes_door = 1, | ||||||
| 			door = 1 | 			door = 1 | ||||||
| 		}, | 		}, | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								init.lua
									
									
									
									
									
								
							| @@ -14,15 +14,17 @@ end | |||||||
| dofile(MP.."/common.lua") | dofile(MP.."/common.lua") | ||||||
|  |  | ||||||
| if minetest.get_modpath("default") then | 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 | 	-- the formspecs depend on it | ||||||
| 	dofile(MP.."/builder.lua") | 	dofile(MP.."/builder.lua") | ||||||
| 	dofile(MP.."/chest.lua") |  | ||||||
| end | end | ||||||
|  |  | ||||||
|  | dofile(MP.."/ambience.lua") | ||||||
|  | dofile(MP.."/chest.lua") | ||||||
| dofile(MP.."/plants.lua") | dofile(MP.."/plants.lua") | ||||||
| dofile(MP.."/models.lua") | dofile(MP.."/models.lua") | ||||||
| dofile(MP.."/nodes.lua") | dofile(MP.."/nodes.lua") | ||||||
|  | dofile(MP.."/access_card.lua") | ||||||
| dofile(MP.."/doors.lua") | dofile(MP.."/doors.lua") | ||||||
| dofile(MP.."/switch.lua") | dofile(MP.."/switch.lua") | ||||||
| dofile(MP.."/protected_switch.lua") | dofile(MP.."/protected_switch.lua") | ||||||
| @@ -30,6 +32,7 @@ dofile(MP.."/nodeboxes.lua") | |||||||
| dofile(MP.."/palm_scanner.lua") | dofile(MP.."/palm_scanner.lua") | ||||||
| dofile(MP.."/digicode.lua") | dofile(MP.."/digicode.lua") | ||||||
| dofile(MP.."/octagon_panes.lua") | dofile(MP.."/octagon_panes.lua") | ||||||
|  | dofile(MP.."/octagon_glass.lua") | ||||||
| dofile(MP.."/forcefield.lua") | dofile(MP.."/forcefield.lua") | ||||||
| dofile(MP.."/crafts.lua") | dofile(MP.."/crafts.lua") | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| name = scifi_nodes | name = scifi_nodes | ||||||
| description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. | description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. | ||||||
| optional_depends = """ | optional_depends = """ | ||||||
|  | advtrains, | ||||||
| default, | default, | ||||||
| xpanes, | xpanes, | ||||||
| mesecons, | mesecons, | ||||||
| @@ -15,5 +16,6 @@ unifieddyes, | |||||||
| letters, | letters, | ||||||
| mesecons_stealthnode, | mesecons_stealthnode, | ||||||
| mtt, | 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", | 		drawtype = "mesh", | ||||||
| 		mesh = "scifi_nodes_slope.obj", | 		mesh = "scifi_nodes_slope.obj", | ||||||
| 		tiles = texture, | 		tiles = texture, | ||||||
| 		selection_box = { | 		selection_box = scifi_nodes.slope_box, | ||||||
| 			type = "fixed", | 		collision_box = scifi_nodes.slope_box, | ||||||
| 			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", | 		paramtype = "light", | ||||||
| 		paramtype2 = "facedir", | 		paramtype2 = "facedir", | ||||||
| 		use_texture_alpha = "clip", | 		use_texture_alpha = "clip", | ||||||
| @@ -47,8 +31,8 @@ end | |||||||
|  |  | ||||||
| -- register some blocks in stairsplus if available (part of moreblocks) | -- 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("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("super_white", "Super Plastic", {"scifi_nodes_white2.png",}, 11, "stone") | ||||||
| scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_ultra_white.png",}, minetest.LIGHT_MAX, "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("black", "Black", {"scifi_nodes_black.png",}, 0) | ||||||
| scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0) | scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0) | ||||||
| scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.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 | ||||||
							
								
								
									
										61
									
								
								nodes.json
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								nodes.json
									
									
									
									
									
								
							| @@ -8,20 +8,29 @@ | |||||||
|     "white2": { |     "white2": { | ||||||
|         "description": "plastic", |         "description": "plastic", | ||||||
|         "colorable": true, |         "colorable": true, | ||||||
|         "sounds": "stone" |         "sounds": "stone", | ||||||
|  |         "signs_banner": true, | ||||||
|  |         "signs_banner_color": "#000" | ||||||
|     }, |     }, | ||||||
|     "super_white": { |     "super_white": { | ||||||
|         "description": "Super Plastic", |         "description": "Super Plastic", | ||||||
|         "light": 11, |         "light": 11, | ||||||
|         "sounds": "stone" |         "sounds": "stone", | ||||||
|  |         "texture_name": "white2" | ||||||
|     }, |     }, | ||||||
|     "ultra_white": { |     "ultra_white": { | ||||||
|         "description": "Ultra Plastic", |         "description": "Ultra Plastic", | ||||||
|         "light": 14, |         "light": 14, | ||||||
|         "sounds": "stone" |         "sounds": "stone", | ||||||
|  |         "texture_name": "white2" | ||||||
|     }, |     }, | ||||||
|     "engine": { |     "engine": { | ||||||
|         "description": "Engine" |         "description": "Engine", | ||||||
|  |         "ambience": { | ||||||
|  |             "scifi_nodes_ambience_engine": { | ||||||
|  |                 "interval": 16.1 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     }, |     }, | ||||||
|     "wall": { |     "wall": { | ||||||
|         "description": "metal wall" |         "description": "metal wall" | ||||||
| @@ -54,11 +63,17 @@ | |||||||
|         "description": "transparent vent", |         "description": "transparent vent", | ||||||
|         "texture_name": "vent2", |         "texture_name": "vent2", | ||||||
|         "texture_modifier": "^[makealpha:33,33,33", |         "texture_modifier": "^[makealpha:33,33,33", | ||||||
|         "drawtype": "glasslike" |         "drawtype": "glasslike", | ||||||
|  |         "ambience": { | ||||||
|  |             "scifi_nodes_ambience_vent": { | ||||||
|  |                 "interval": 4.2 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     }, |     }, | ||||||
|     "stripes": { |     "stripes": { | ||||||
|         "description": "hazard stripes", |         "description": "hazard stripes", | ||||||
|         "slat": true |         "slat": true, | ||||||
|  |         "advtrains_platform": true | ||||||
|     }, |     }, | ||||||
|     "rust": { |     "rust": { | ||||||
|         "description": "rusty metal" |         "description": "rusty metal" | ||||||
| @@ -67,7 +82,8 @@ | |||||||
|         "description": "metal mesh" |         "description": "metal mesh" | ||||||
|     }, |     }, | ||||||
|     "black": { |     "black": { | ||||||
|         "description": "black wall" |         "description": "black wall", | ||||||
|  |         "signs_banner": true | ||||||
|     }, |     }, | ||||||
|     "blackoct": { |     "blackoct": { | ||||||
|         "description": "black octagon" |         "description": "black octagon" | ||||||
| @@ -79,7 +95,8 @@ | |||||||
|         "description": "black tile" |         "description": "black tile" | ||||||
|     }, |     }, | ||||||
|     "blacktile2": { |     "blacktile2": { | ||||||
|         "description": "black tile 2" |         "description": "black tile 2", | ||||||
|  |         "paramtype2": "none" | ||||||
|     }, |     }, | ||||||
|     "blackvent": { |     "blackvent": { | ||||||
|         "description": "black vent" |         "description": "black vent" | ||||||
| @@ -88,7 +105,8 @@ | |||||||
|         "description": "blue bars" |         "description": "blue bars" | ||||||
|     }, |     }, | ||||||
|     "bluemetal": { |     "bluemetal": { | ||||||
|         "description": "blue metal" |         "description": "blue metal", | ||||||
|  |         "signs_banner": true | ||||||
|     }, |     }, | ||||||
|     "bluetile": { |     "bluetile": { | ||||||
|         "description": "blue tile", |         "description": "blue tile", | ||||||
| @@ -134,7 +152,8 @@ | |||||||
|         "description": "red metal block" |         "description": "red metal block" | ||||||
|     }, |     }, | ||||||
|     "grey_square": { |     "grey_square": { | ||||||
|         "description": "grey metal block" |         "description": "grey metal block", | ||||||
|  |         "paramtype2": "none" | ||||||
|     }, |     }, | ||||||
|     "blue_square": { |     "blue_square": { | ||||||
|         "description": "blue metal block" |         "description": "blue metal block" | ||||||
| @@ -147,7 +166,8 @@ | |||||||
|         "colorable": true |         "colorable": true | ||||||
|     }, |     }, | ||||||
|     "greenmetal": { |     "greenmetal": { | ||||||
|         "description": "green metal wall" |         "description": "green metal wall", | ||||||
|  |         "signs_banner": true | ||||||
|     }, |     }, | ||||||
|     "greenmetal2": { |     "greenmetal2": { | ||||||
|         "description": "green metal wall2" |         "description": "green metal wall2" | ||||||
| @@ -171,7 +191,8 @@ | |||||||
|         "description": "green pipes" |         "description": "green pipes" | ||||||
|     }, |     }, | ||||||
|     "grey": { |     "grey": { | ||||||
|         "description": "grey wall" |         "description": "grey wall", | ||||||
|  |         "signs_banner": true | ||||||
|     }, |     }, | ||||||
|     "greybolts": { |     "greybolts": { | ||||||
|         "description": "grey wall bolts" |         "description": "grey wall bolts" | ||||||
| @@ -225,7 +246,8 @@ | |||||||
|     }, |     }, | ||||||
|     "blackdmg": { |     "blackdmg": { | ||||||
|         "description": "Damaged black wall", |         "description": "Damaged black wall", | ||||||
|         "slat": true |         "slat": true, | ||||||
|  |         "paramtype2": "none" | ||||||
|     }, |     }, | ||||||
|     "blackdmgstripe": { |     "blackdmgstripe": { | ||||||
|         "description": "Damaged black wall(stripes)" |         "description": "Damaged black wall(stripes)" | ||||||
| @@ -252,7 +274,12 @@ | |||||||
|         "light": 5 |         "light": 5 | ||||||
|     }, |     }, | ||||||
|     "fan": { |     "fan": { | ||||||
|         "description": "Fan" |         "description": "Fan", | ||||||
|  |         "ambience": { | ||||||
|  |             "scifi_nodes_ambience_fan": { | ||||||
|  |                 "interval": 7 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     }, |     }, | ||||||
|     "ppllght": { |     "ppllght": { | ||||||
|         "description": "Purple wall light", |         "description": "Purple wall light", | ||||||
| @@ -275,7 +302,8 @@ | |||||||
|         "slat": true |         "slat": true | ||||||
|     }, |     }, | ||||||
|     "purple": { |     "purple": { | ||||||
|         "description": "Purple node" |         "description": "Purple node", | ||||||
|  |         "signs_banner": true | ||||||
|     }, |     }, | ||||||
|     "rock": { |     "rock": { | ||||||
|         "description": "Moonstone", |         "description": "Moonstone", | ||||||
| @@ -291,6 +319,7 @@ | |||||||
|         "description": "Black vent" |         "description": "Black vent" | ||||||
|     }, |     }, | ||||||
|     "blackplate": { |     "blackplate": { | ||||||
|         "description": "Black plate" |         "description": "Black plate", | ||||||
|  |         "paramtype2": "none" | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										124
									
								
								nodes.lua
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								nodes.lua
									
									
									
									
									
								
							| @@ -1,6 +1,8 @@ | |||||||
| local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") | local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") | ||||||
| local has_moreblocks_mod = minetest.get_modpath("moreblocks") | local has_moreblocks_mod = minetest.get_modpath("moreblocks") | ||||||
| local has_slats_mod = minetest.get_modpath("slats") | 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 | --nodes | ||||||
|  |  | ||||||
| @@ -367,95 +369,6 @@ minetest.register_node("scifi_nodes:grnpipe2", { | |||||||
| 	on_place = minetest.rotate_node | 	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", { | minetest.register_node("scifi_nodes:tower", { | ||||||
| 	description = "Wind tower", | 	description = "Wind tower", | ||||||
| 	sunlight_propagates = false, | 	sunlight_propagates = false, | ||||||
| @@ -624,7 +537,8 @@ for name, def in pairs(nodes) do | |||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- register node | 	-- register node | ||||||
| 	minetest.register_node("scifi_nodes:"..name, node_def) | 	local nodename = "scifi_nodes:" .. name | ||||||
|  | 	minetest.register_node(nodename , node_def) | ||||||
|  |  | ||||||
| 	-- unified dyes registration | 	-- unified dyes registration | ||||||
| 	if def.colorable and has_unifieddyes_mod then | 	if def.colorable and has_unifieddyes_mod then | ||||||
| @@ -661,6 +575,36 @@ for name, def in pairs(nodes) do | |||||||
| 		}) | 		}) | ||||||
| 	end | 	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 | 	if has_slats_mod and def.slat then | ||||||
| 		slats.register_slat( | 		slats.register_slat( | ||||||
| 			name, | 			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_single = "scifi_nodes:" .. basename .. "_pane" | ||||||
|   local nodename_double = "scifi_nodes:" .. basename .. "_pane_double" |   local nodename_double = "scifi_nodes:" .. basename .. "_pane_double" | ||||||
|   local nodename_offset = "scifi_nodes:" .. basename .. "_pane_offset" |   local nodename_offset = "scifi_nodes:" .. basename .. "_pane_offset" | ||||||
|  |   local nodename_slope = "scifi_nodes:" .. basename .. "_slope" | ||||||
|   local recipe_ingredient = "scifi_nodes:" .. basename |   local recipe_ingredient = "scifi_nodes:" .. basename | ||||||
|  |   local base_decription = color ..  " octagon glass" | ||||||
|  |  | ||||||
|   -- single height |   -- single height | ||||||
|   minetest.register_node(nodename_single, { |   minetest.register_node(nodename_single, { | ||||||
|     description = description, |     description = base_decription .. " pane", | ||||||
|     drawtype = "nodebox", |     drawtype = "nodebox", | ||||||
|     tiles = { |     tiles = { | ||||||
|       texture |       texture | ||||||
| @@ -25,14 +27,17 @@ local function register(basename, description, texture) | |||||||
|       type = "fixed", |       type = "fixed", | ||||||
|       fixed = {{-0.5, -0.5, -0.25, 0.5, 0.5, 0.25}}, |       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", |     use_texture_alpha = "blend", | ||||||
|     sounds = scifi_nodes.node_sound_glass_defaults() |     sounds = scifi_nodes.node_sound_glass_defaults() | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   -- double height |   -- double height | ||||||
|   minetest.register_node(nodename_double, { |   minetest.register_node(nodename_double, { | ||||||
|     description = description, |     description = base_decription .. " pane (double)", | ||||||
|     drawtype = "nodebox", |     drawtype = "nodebox", | ||||||
|     tiles = { |     tiles = { | ||||||
|       texture |       texture | ||||||
| @@ -50,14 +55,17 @@ local function register(basename, description, texture) | |||||||
|       type = "fixed", |       type = "fixed", | ||||||
|       fixed = {{-0.5, -0.5, -0.25, 0.5, 1.5, 0.25}}, |       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", |     use_texture_alpha = "blend", | ||||||
|     sounds = scifi_nodes.node_sound_glass_defaults() |     sounds = scifi_nodes.node_sound_glass_defaults() | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   -- single height with offset |   -- single height with offset | ||||||
|   minetest.register_node(nodename_offset, { |   minetest.register_node(nodename_offset, { | ||||||
|     description = description, |     description = base_decription .. " pane (offset)", | ||||||
|     drawtype = "nodebox", |     drawtype = "nodebox", | ||||||
|     tiles = { |     tiles = { | ||||||
|       texture |       texture | ||||||
| @@ -75,11 +83,37 @@ local function register(basename, description, texture) | |||||||
|       type = "fixed", |       type = "fixed", | ||||||
|       fixed = {{-0.5, -0.5, 0.75, 0.5, 0.5, 1.25}}, |       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", |     use_texture_alpha = "blend", | ||||||
|     sounds = scifi_nodes.node_sound_glass_defaults() |     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 |   -- register recipes | ||||||
|  |  | ||||||
|   minetest.register_craft({ |   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({ |   minetest.register_craft({ | ||||||
|     output = nodename_double .. " 16", |     output = nodename_double .. " 16", | ||||||
|     recipe = { |     recipe = { | ||||||
| @@ -104,8 +147,9 @@ local function register(basename, description, texture) | |||||||
|   }) |   }) | ||||||
| end | end | ||||||
|  |  | ||||||
| register("octrng", "Orange Octagon Glass pane", "scifi_nodes_octrng.png") | register("octrng", "Orange", "scifi_nodes_octrng.png") | ||||||
| register("octgrn", "Green Octagon Glass pane", "scifi_nodes_octgrn.png") | register("octgrn", "Green", "scifi_nodes_octgrn.png") | ||||||
| register("octbl", "Blue Octagon Glass pane", "scifi_nodes_octbl.png") | register("octbl", "Blue", "scifi_nodes_octbl.png") | ||||||
| register("octppl", "Purple Octagon Glass pane", "scifi_nodes_octppl.png") | register("octppl", "Purple", "scifi_nodes_octppl.png") | ||||||
|  | register("octwht", "White", "scifi_nodes_octwht.png") | ||||||
| register("glass", "Dark Glass pane", "scifi_nodes_glass.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