summaryrefslogtreecommitdiff
path: root/nixie_tubes/init.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 20:02:19 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 21:09:33 -0400
commitda66780a569712c23ae4f2996cfb4608a9f9d69d (patch)
tree217556029a78bc23ad4564720afc86de97228a04 /nixie_tubes/init.lua
parent615b22df4d423aded3613db7716943a2f389b047 (diff)
downloaddreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.gz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.bz2
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.xz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.zip
copy all standard Dreambuilder mods in from the old subgame
(exactly as last supplied there, updates to these mods will follow later)
Diffstat (limited to 'nixie_tubes/init.lua')
-rw-r--r--nixie_tubes/init.lua413
1 files changed, 413 insertions, 0 deletions
diff --git a/nixie_tubes/init.lua b/nixie_tubes/init.lua
new file mode 100644
index 0000000..97bbd68
--- /dev/null
+++ b/nixie_tubes/init.lua
@@ -0,0 +1,413 @@
+-- simple nixie tubes mod
+-- by Vanessa Ezekowitz
+
+nixie_tubes = {}
+
+local S
+if minetest.get_modpath("intllib") then
+ S = intllib.Getter()
+else
+ S = function(s) return s end
+end
+
+local nixie_types = {
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "0",
+ "colon",
+ "period",
+ "off"
+}
+
+local tube_cbox = {
+ type = "fixed",
+ fixed = { -11/32, -8/16, -11/32, 11/32, 8/16, 11/32 }
+}
+
+-- the following functions based on the so-named ones in Jeija's digilines mod
+
+local reset_meta = function(pos)
+ minetest.get_meta(pos):set_string("formspec", "field[channel;Channel;${channel}]")
+end
+
+local on_digiline_receive_std = function(pos, node, channel, msg)
+ local meta = minetest.get_meta(pos)
+ local setchan = meta:get_string("channel")
+ if setchan ~= channel then return end
+ local num = tonumber(msg)
+ if msg == "colon" or msg == "period" or msg == "off" or (num and (num >= 0 and num <= 9)) then
+ minetest.swap_node(pos, { name = "nixie_tubes:tube_"..msg, param2 = node.param2})
+ end
+end
+
+local on_digiline_receive_deca = function(pos, node, channel, msg)
+
+ local meta = minetest.get_meta(pos)
+ local setchan = meta:get_string("channel")
+ if setchan ~= channel then return end
+ local tubenum = string.gsub(node.name, "nixie_tubes:decatron_", "")
+ local num = tonumber(msg)
+
+ if msg == "off" or (num and (num >= 0 and num <= 9)) then
+ minetest.swap_node(pos, { name = "nixie_tubes:decatron_"..msg, param2 = node.param2})
+
+ elseif msg == "inc" then
+ num = (tonumber(tubenum) or 0) + 1
+ if num > 9 then
+ num = 0
+ digiline:receptor_send(pos, digiline.rules.default, channel, "carry")
+ end
+ minetest.swap_node(pos, { name = "nixie_tubes:decatron_"..num, param2 = node.param2})
+
+ elseif msg == "dec" then
+ num = (tonumber(tubenum) or 0) - 1
+ if num < 0 then
+ num = 9
+ digiline:receptor_send(pos, digiline.rules.default, channel, "borrow")
+ end
+ minetest.swap_node(pos, { name = "nixie_tubes:decatron_"..num, param2 = node.param2})
+
+ elseif msg == "get" then
+ digiline:receptor_send(pos, digiline.rules.default, channel, tubenum)
+
+ end
+end
+
+-- the nodes:
+
+for _,tube in ipairs(nixie_types) do
+ local groups = { cracky = 2, not_in_creative_inventory = 1}
+ local light = LIGHT_MAX-4
+ local light2 = LIGHT_MAX-5
+ local description = S("Nixie Tube ("..tube..")")
+ local description2 = S("Decatron ("..tube..")")
+ local cathode = "nixie_tube_cathode_off.png^nixie_tube_cathode_"..tube..".png"
+ local cathode2 = "decatron_cathode_"..tube..".png"
+
+ if tube == "off" then
+ groups = {cracky = 2}
+ light = nil
+ light2 = nil
+ description = S("Nixie Tube")
+ description2 = S("Decatron")
+ cathode = "nixie_tube_cathode_off.png"
+ cathode2 = "nixie_tube_blank.png"
+ end
+
+ minetest.register_node("nixie_tubes:tube_"..tube, {
+ description = description,
+ drawtype = "mesh",
+ mesh = "nixie_tube.obj",
+ tiles = {
+ "nixie_tube_base.png",
+ "nixie_tube_backing.png",
+ cathode,
+ "nixie_tube_anode.png",
+ "nixie_tube_glass.png",
+ },
+ use_texture_alpha = true,
+ groups = groups,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ light_source = light,
+ selection_box = tube_cbox,
+ collision_box = tube_cbox,
+ on_construct = function(pos)
+ reset_meta(pos)
+ end,
+ on_receive_fields = function(pos, formname, fields, sender)
+ if (fields.channel) then
+ minetest.get_meta(pos):set_string("channel", fields.channel)
+ end
+ end,
+ digiline = {
+ receptor = {},
+ effector = {
+ action = on_digiline_receive_std
+ },
+ },
+ drop = "nixie_tubes:tube_off"
+ })
+
+ if tube ~= "colon" and tube ~= "period" then
+ minetest.register_node("nixie_tubes:decatron_"..tube, {
+ description = description2,
+ drawtype = "mesh",
+ mesh = "decatron.obj",
+ tiles = {
+ "nixie_tube_base.png",
+ "decatron_internals.png",
+ "decatron_anode.png",
+ "decatron_cathode_pins.png",
+ cathode2,
+ "nixie_tube_glass.png",
+ },
+ use_texture_alpha = true,
+ groups = groups,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ light_source = light2,
+ selection_box = tube_cbox,
+ collision_box = tube_cbox,
+ after_place_node = function(pos, placer, itemstack, pointed_thing)
+ minetest.set_node(pos, { name = "air"})
+ minetest.rotate_node(itemstack, placer, pointed_thing)
+ if minetest.get_node(pos).param2 == 12 then
+ minetest.set_node(pos, { name = "nixie_tubes:decatron_off", param2 = 15 })
+ end
+ end,
+ on_construct = function(pos)
+ reset_meta(pos)
+ end,
+ on_receive_fields = function(pos, formname, fields, sender)
+ if (fields.channel) then
+ minetest.get_meta(pos):set_string("channel", fields.channel)
+ end
+ end,
+ digiline = {
+ receptor = {},
+ effector = {
+ action = on_digiline_receive_deca
+ },
+ },
+ drop = "nixie_tubes:decatron_off"
+ })
+ end
+end
+
+-- Alpha-numeric tubes (Burroughs B-7971 or similar)
+
+--[[
+
+Map of display wires:
+
+ --1------
+ |\ |8 /|
+ 6| \ | / |2
+ | 7\ | /9 |
+ | \|/ |
+14--> ---- ---- <--10
+ | /|\ |
+ |13/ | \11|
+ 5| / | \ |3
+ |/ 12| \|
+ ------4--
+ _
+ --¯¯ ¯¯-- <--15
+
+-- Wire positions in table:
+-- char = { 1, 2, 3, 4, .... , 13, 14, 15 }
+
+]]--
+
+local alnum_chars = {
+ { " ", { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } }, -- 32
+ { "!", { 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0 } },
+ { '"', { 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0 } },
+ { "#", { 0,1,1,1,0,0,0,1,0,1,0,1,0,1,0 } },
+ { "$", { 1,0,1,1,0,1,0,1,0,1,0,1,0,1,0 } },
+ { "%", { 0,0,1,0,0,1,0,0,1,0,0,0,1,0,0 } },
+ { "&", { 1,0,0,1,1,0,1,0,1,0,1,0,0,1,0 } },
+ { "'", { 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 } },
+ { "(", { 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0 } },
+ { ")", { 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0 } },
+ { "*", { 0,0,0,0,0,0,1,1,1,1,1,1,1,1,0 } },
+ { "+", { 0,0,0,0,0,0,0,1,0,1,0,1,0,1,0 } },
+ { ",", { 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 } },
+ { "-", { 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 } },
+ { ".", { 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 } },
+ { "/", { 0,0,0,0,0,0,0,0,1,0,0,0,1,0,0 } },
+ { "0", { 1,1,1,1,1,1,0,0,1,0,0,0,1,0,0 } }, -- 48
+ { "1", { 0,1,1,0,0,0,0,0,1,0,0,0,0,0,0 } },
+ { "2", { 1,1,0,1,0,0,0,0,0,1,0,0,1,0,0 } },
+ { "3", { 1,1,1,1,0,0,0,0,0,1,0,0,0,0,0 } },
+ { "4", { 0,1,1,0,0,1,0,0,0,1,0,0,0,1,0 } },
+ { "5", { 1,0,1,1,0,1,0,0,0,1,0,0,0,1,0 } },
+ { "6", { 1,0,1,1,1,1,0,0,0,1,0,0,0,1,0 } },
+ { "7", { 1,0,0,0,0,0,0,0,1,0,0,1,0,0,0 } },
+ { "8", { 1,1,1,1,1,1,0,0,0,1,0,0,0,1,0 } },
+ { "9", { 1,1,1,0,0,1,0,0,0,1,0,0,0,1,0 } },
+ { ":", { 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0 } }, -- 58
+ { ";", { 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0 } },
+ { "<", { 0,0,0,0,0,0,0,0,1,0,1,0,0,1,0 } },
+ { "=", { 0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 } },
+ { ">", { 0,0,0,0,0,0,1,0,0,1,0,0,1,0,0 } },
+ { "?", { 1,1,0,0,0,0,0,0,0,1,0,1,0,0,0 } },
+ { "@", { 1,1,0,1,1,1,0,1,0,1,0,0,0,0,0 } }, -- 64
+ { "A", { 1,1,1,0,1,1,0,0,0,1,0,0,0,1,0 } },
+ { "B", { 1,1,1,1,0,0,0,1,0,1,0,1,0,0,0 } },
+ { "C", { 1,0,0,1,1,1,0,0,0,0,0,0,0,0,0 } },
+ { "D", { 1,1,1,1,0,0,0,1,0,0,0,1,0,0,0 } },
+ { "E", { 1,0,0,1,1,1,0,0,0,0,0,0,0,1,0 } },
+ { "F", { 1,0,0,0,1,1,0,0,0,0,0,0,0,1,0 } },
+ { "G", { 1,0,1,1,1,1,0,0,0,1,0,0,0,0,0 } },
+ { "H", { 0,1,1,0,1,1,0,0,0,1,0,0,0,1,0 } },
+ { "I", { 1,0,0,1,0,0,0,1,0,0,0,1,0,0,0 } },
+ { "J", { 0,1,1,1,1,0,0,0,0,0,0,0,0,0,0 } },
+ { "K", { 0,0,0,0,1,1,0,0,1,0,1,0,0,1,0 } },
+ { "L", { 0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 } },
+ { "M", { 0,1,1,0,1,1,1,0,1,0,0,0,0,0,0 } },
+ { "N", { 0,1,1,0,1,1,1,0,0,0,1,0,0,0,0 } },
+ { "O", { 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 } },
+ { "P", { 1,1,0,0,1,1,0,0,0,1,0,0,0,1,0 } },
+ { "Q", { 1,1,1,1,1,1,0,0,0,0,1,0,0,0,0 } },
+ { "R", { 1,1,0,0,1,1,0,0,0,1,1,0,0,1,0 } },
+ { "S", { 1,0,1,1,0,1,0,0,0,1,0,0,0,1,0 } },
+ { "T", { 1,0,0,0,0,0,0,1,0,0,0,1,0,0,0 } },
+ { "U", { 0,1,1,1,1,1,0,0,0,0,0,0,0,0,0 } },
+ { "V", { 0,0,0,0,1,1,0,0,1,0,0,0,1,0,0 } },
+ { "W", { 0,1,1,0,1,1,0,0,0,0,1,0,1,0,0 } },
+ { "X", { 0,0,0,0,0,0,1,0,1,0,1,0,1,0,0 } },
+ { "Y", { 0,0,0,0,0,0,1,0,1,0,0,1,0,0,0 } },
+ { "Z", { 1,0,0,1,0,0,0,0,1,0,0,0,1,0,0 } },
+ { "[", { 1,0,0,1,1,1,0,0,0,0,0,0,0,0,0 } }, -- 91
+ { "\\", { 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0 } },
+ { "]", { 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 } },
+ { "^", { 0,0,0,0,0,0,0,0,0,0,1,0,1,0,0 } },
+ { "_", { 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 } },
+ { "`", { 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 } },
+ { "a", { 1,1,1,1,0,0,0,0,0,1,0,0,1,0,0 } }, -- 97
+ { "b", { 0,0,0,1,1,1,0,0,0,0,1,0,0,1,0 } },
+ { "c", { 0,0,0,1,1,0,0,0,0,1,0,0,0,1,0 } },
+ { "d", { 0,1,1,1,0,0,0,0,0,1,0,0,1,0,0 } },
+ { "e", { 0,0,0,1,1,0,0,0,0,0,0,0,1,1,0 } },
+ { "f", { 1,0,0,0,1,1,0,0,0,0,0,0,0,1,0 } },
+ { "g", { 1,1,1,1,0,0,1,0,0,1,0,0,0,0,0 } },
+ { "h", { 0,0,0,0,1,1,0,0,0,0,1,0,0,1,0 } },
+ { "i", { 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 } },
+ { "j", { 0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 } },
+ { "k", { 0,0,0,0,0,0,0,1,1,0,1,1,0,0,0 } },
+ { "l", { 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0 } },
+ { "m", { 0,0,1,0,1,0,0,0,0,1,0,1,0,1,0 } },
+ { "n", { 0,0,0,0,1,0,0,0,0,0,1,0,0,1,0 } },
+ { "o", { 0,0,1,1,1,0,0,0,0,1,0,0,0,1,0 } },
+ { "p", { 1,0,0,0,1,1,0,0,1,0,0,0,0,1,0 } },
+ { "q", { 1,1,1,0,0,0,1,0,0,1,0,0,0,0,0 } },
+ { "r", { 0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 } },
+ { "s", { 0,0,0,1,0,0,0,0,0,1,1,0,0,0,0 } },
+ { "t", { 0,0,0,1,1,1,0,0,0,0,0,0,0,1,0 } },
+ { "u", { 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0 } },
+ { "v", { 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0 } },
+ { "w", { 0,0,1,0,1,0,0,0,0,0,1,0,1,0,0 } },
+ { "x", { 0,0,0,0,0,0,1,0,1,0,1,0,1,0,0 } },
+ { "y", { 0,0,0,0,0,0,1,0,1,0,0,0,1,0,0 } },
+ { "z", { 0,0,0,4,0,0,0,0,0,0,0,0,1,1,0 } },
+ { "{", { 1,0,0,1,0,0,1,0,0,0,0,0,1,1,0 } },
+ { "|", { 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0 } },
+ { "}", { 1,0,0,1,0,0,0,0,1,1,1,0,0,0,0 } },
+ { "~", { 0,1,0,0,0,1,1,0,0,1,0,0,0,0,0 } },
+ { string.char(127), { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 } }, -- "DEL"
+ { string.char(128), { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } }, -- all-on
+ { string.char(129), { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } }, -- "cursor" segment
+}
+
+local on_digiline_receive_alnum = function(pos, node, channel, msg)
+ local meta = minetest.get_meta(pos)
+ local setchan = meta:get_string("channel")
+ if setchan ~= channel then return end
+ if msg and msg ~= "" then
+ local asc = string.byte(msg)
+ if msg == "off" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_32", param2 = node.param2})
+ elseif msg == "colon" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_58", param2 = node.param2})
+ elseif msg == "period" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_46", param2 = node.param2})
+ elseif msg == "del" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_127", param2 = node.param2})
+ elseif msg == "allon" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_128", param2 = node.param2})
+ elseif msg == "cursor" then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_129", param2 = node.param2})
+ elseif asc > 31 and alnum_chars[asc - 31] then
+ minetest.swap_node(pos, { name = "nixie_tubes:alnum_"..asc, param2 = node.param2})
+ end
+ end
+end
+
+for i in ipairs(alnum_chars) do
+ local char = alnum_chars[i][1]
+ local bits = alnum_chars[i][2]
+
+ local groups = { cracky = 2, not_in_creative_inventory = 1}
+ local light = LIGHT_MAX-4
+ local description = S("Alphanumeric Nixie Tube ("..char..")")
+
+ local wires = "nixie_tube_alnum_wires.png"
+ for j = 1, 15 do
+ if bits[j] == 1 then
+ wires = wires.."^nixie_tube_alnum_seg_"..j..".png"
+ end
+ end
+
+ if char == " " then
+ groups = {cracky = 2}
+ light = nil
+ description = S("Alphanumeric Nixie Tube")
+ wires = "nixie_tube_alnum_wires.png"
+ end
+
+ minetest.register_node("nixie_tubes:alnum_"..string.byte(char), {
+ description = description,
+ drawtype = "mesh",
+ mesh = "nixie_tube.obj",
+ tiles = {
+ "nixie_tube_base.png",
+ "nixie_tube_backing.png",
+ wires,
+ "nixie_tube_anode.png",
+ "nixie_tube_glass.png",
+ },
+ use_texture_alpha = true,
+ groups = groups,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ light_source = light,
+ selection_box = tube_cbox,
+ collision_box = tube_cbox,
+ on_construct = function(pos)
+ reset_meta(pos)
+ end,
+ on_receive_fields = function(pos, formname, fields, sender)
+ if (fields.channel) then
+ minetest.get_meta(pos):set_string("channel", fields.channel)
+ end
+ end,
+ digiline = {
+ receptor = {},
+ effector = {
+ action = on_digiline_receive_alnum
+ },
+ },
+ drop = "nixie_tubes:alnum_32"
+ })
+end
+
+-- crafts
+
+minetest.register_craft({
+ output = "nixie_tubes:tube_off 4",
+ recipe = {
+ { "", "default:glass", "" },
+ { "default:glass", "default:sign_wall", "default:glass" },
+ { "default:glass", "default:mese_crystal_fragment", "default:glass" }
+ },
+})
+
+
+minetest.register_craft({
+ output = "nixie_tubes:alnum_32 4",
+ recipe = {
+ { "", "default:glass", "" },
+ { "default:glass", "default:sign_wall", "default:glass" },
+ { "default:glass", "default:mese_crystal", "default:glass" }
+ },
+})
+