Compare commits
22 Commits
v1.2
...
numzero-fi
Author | SHA1 | Date | |
---|---|---|---|
7888566b2f | |||
15e743629e | |||
1bf862f932 | |||
1a9704f184 | |||
8baa789eb1 | |||
b0158f5674 | |||
073c92d487 | |||
737f366741 | |||
302a28934d | |||
6e767a6c76 | |||
9d239cbfff | |||
d3cabedbb0 | |||
df4e880d8b | |||
45bbd9f7e3 | |||
028c290cd7 | |||
8808bb8911 | |||
fa040eb085 | |||
a4f5ae5b89 | |||
9e6eac4285 | |||
c73b451f9b | |||
9ff2329253 | |||
444cd0f2f1 |
@ -24,7 +24,7 @@ Go get it!
|
|||||||
|
|
||||||
[DOWNLOAD IT NOW](https://github.com/minetest-mods/mesecons/archive/master.zip)
|
[DOWNLOAD IT NOW](https://github.com/minetest-mods/mesecons/archive/master.zip)
|
||||||
|
|
||||||
Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](http://wiki.minetest.com/wiki/Mods) over at the Minetest Wiki. For your convenience, here's a quick summary:
|
Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](https://wiki.minetest.net/Mods) over at the official Minetest Wiki. For your convenience, here's a quick summary:
|
||||||
|
|
||||||
1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer.
|
1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer.
|
||||||
2. Make sure that when you open the folder, you can directly find `README.md` in the listing. If you just see another folder, move that folder up one level and delete the old one.
|
2. Make sure that when you open the folder, you can directly find `README.md` in the listing. If you just see another folder, move that folder up one level and delete the old one.
|
||||||
@ -43,6 +43,8 @@ Or maybe a [comprehensive reference](http://mesecons.net/items.html) is your sty
|
|||||||
|
|
||||||
An overview for the very newest of new beginners? How does [this one](http://uberi.mesecons.net/projects/MeseconsBasics/index.html) look?
|
An overview for the very newest of new beginners? How does [this one](http://uberi.mesecons.net/projects/MeseconsBasics/index.html) look?
|
||||||
|
|
||||||
|
There is also a [wiki page](https://wiki.minetest.net/Mods/Mesecons) dedicated to this mod.
|
||||||
|
|
||||||
Want to get more into building? Why not check out the [Mesecons Laboratory](http://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders?
|
Want to get more into building? Why not check out the [Mesecons Laboratory](http://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders?
|
||||||
|
|
||||||
Want to contribute to Mesecons itself? Check out the [source code](https://github.com/minetest-mods/mesecons)!
|
Want to contribute to Mesecons itself? Check out the [source code](https://github.com/minetest-mods/mesecons)!
|
||||||
|
@ -30,7 +30,7 @@ minetest.register_node("mesecons:mesecon_on", {
|
|||||||
},
|
},
|
||||||
groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1},
|
groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1},
|
||||||
drop = "mesecons:mesecon_off 1",
|
drop = "mesecons:mesecon_off 1",
|
||||||
light_source = default.LIGHT_MAX-11,
|
light_source = minetest.LIGHT_MAX-11,
|
||||||
mesecons = {conductor={
|
mesecons = {conductor={
|
||||||
state = mesecon.state.on,
|
state = mesecon.state.on,
|
||||||
offstate = "mesecons:mesecon_off"
|
offstate = "mesecons:mesecon_off"
|
||||||
|
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 191 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 844 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 851 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 846 B |
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 222 B |
Before Width: | Height: | Size: 613 B After Width: | Height: | Size: 504 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 465 B After Width: | Height: | Size: 377 B |
Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 362 B |
@ -186,19 +186,11 @@ function mesecon.invertRule(r)
|
|||||||
return vector.multiply(r, -1)
|
return vector.multiply(r, -1)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.tablecopy(table) -- deep table copy
|
function mesecon.tablecopy(obj) -- deep copy
|
||||||
if type(table) ~= "table" then return table end -- no need to copy
|
if type(obj) == "table" then
|
||||||
local newtable = {}
|
return table.copy(obj)
|
||||||
|
|
||||||
for idx, item in pairs(table) do
|
|
||||||
if type(item) == "table" then
|
|
||||||
newtable[idx] = mesecon.tablecopy(item)
|
|
||||||
else
|
|
||||||
newtable[idx] = item
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
return obj
|
||||||
return newtable
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.cmpAny(t1, t2)
|
function mesecon.cmpAny(t1, t2)
|
||||||
|
@ -1 +1,2 @@
|
|||||||
The blinky plants toggles between on and off state every three seconds. Can be used to make clocks. Also works after having restarted the game.
|
The blinky plants toggles between on and off state every three seconds. Can be used to make clocks. Also works after having restarted the game.
|
||||||
|
It stops blinking in an inactive block, then starts again when the block becomes active.
|
||||||
|
BIN
mesecons_blinkyplant/doc/blinkyplant/preview.png
Executable file → Normal file
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 454 B After Width: | Height: | Size: 367 B |
Before Width: | Height: | Size: 463 B After Width: | Height: | Size: 394 B |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 4.3 KiB |
@ -73,7 +73,7 @@ minetest.register_node("mesecons_button:button_on", {
|
|||||||
legacy_wallmounted = true,
|
legacy_wallmounted = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
on_rotate = false,
|
on_rotate = false,
|
||||||
light_source = default.LIGHT_MAX-7,
|
light_source = minetest.LIGHT_MAX-7,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 409 B |
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 220 B |
@ -1 +1,2 @@
|
|||||||
There is no crafting recipe as this should only be available for server admins. Quite similar to the Minecraft counterpart. Executes server commands.
|
There is no crafting recipe as this should only be available for server admins. Quite similar to the Minecraft counterpart. Executes server commands.
|
||||||
|
It works in inactive blocks.
|
||||||
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 183 B |
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 183 B |
@ -1 +1 @@
|
|||||||
The delayer delays the signal from the input for a determined time. The time can be set by punching the delayer. Possible delays are: 0.1 seconds, 0.3 seconds, 0.5 seconds and 1 second. You may try to use it for creating songs with the noteblock.
|
The delayer delays the signal from the input for a determined time. The time can be set by punching the delayer. Possible delays are: 0.1 seconds, 0.3 seconds, 0.5 seconds and 1 second. You may try to use it for creating songs with the noteblock. It works in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 438 B After Width: | Height: | Size: 221 B |
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 176 B |
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 449 B |
Before Width: | Height: | Size: 561 B After Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 446 B |
Before Width: | Height: | Size: 635 B After Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 635 B After Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 630 B After Width: | Height: | Size: 538 B |
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 173 B |
Before Width: | Height: | Size: 234 B After Width: | Height: | Size: 181 B |
@ -1,7 +1,11 @@
|
|||||||
The node detector is a receptor. It changes its state when either any node
|
The node detector is a receptor. It changes its state when either any node
|
||||||
or a specific node is detected. Right-click it to set a nodename to scan for.
|
or a specific node is detected. Right-click it to set a nodename to scan for.
|
||||||
It can also receive digiline signals. You can either send "GET" and it will
|
It can also receive digiline signals. For example, you can send
|
||||||
respond with the detected nodename or you can send any other string and it will
|
<code>{distance=4, scanname="default:dirt"}</code>
|
||||||
set this string as the node to scan for.
|
to set distance to 4 and scan for dirt. You can omit either parameter.
|
||||||
|
There is also a command parameter: <code>{command="get"}</code> will respond
|
||||||
|
with the detected nodename and <code>{command="scan"}</code> will respond with
|
||||||
|
a boolean using the distance and nodename of the detector.
|
||||||
Nodenames must include the mod they reside in, so for instance default:dirt, not just dirt.
|
Nodenames must include the mod they reside in, so for instance default:dirt, not just dirt.
|
||||||
The distance parameter specifies how many blocks are between the node detector and the node to detect.
|
The distance parameter specifies how many blocks are between the node detector and the node to detect.
|
||||||
|
Automatic scanning with Mesecons output only works when the detector is in an active block, but Digilines queries always work.
|
||||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 7.3 KiB |
@ -2,3 +2,4 @@ The object detector is a receptor. It changes its state when a player approaches
|
|||||||
Right-click it to set a name to scan for.
|
Right-click it to set a name to scan for.
|
||||||
You can also search for comma-separated lists of players where the detector gets activated if any of the names in the list are found.
|
You can also search for comma-separated lists of players where the detector gets activated if any of the names in the list are found.
|
||||||
It can also receive digiline signals which are the name to scan for on the specified channel in the right-click menu.
|
It can also receive digiline signals which are the name to scan for on the specified channel in the right-click menu.
|
||||||
|
Automatic scanning with Mesecons output only works when the detector is in an active block, but Digilines queries always work.
|
||||||
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 7.1 KiB |
@ -189,28 +189,49 @@ local function node_detector_scan(pos)
|
|||||||
(frontname ~= "air" and frontname ~= "ignore" and scanname == "")
|
(frontname ~= "air" and frontname ~= "ignore" and scanname == "")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function node_detector_send_node_name(pos, node, channel, meta)
|
||||||
|
local distance = meta:get_int("distance")
|
||||||
|
local distance_max = mesecon.setting("node_detector_distance_max", 10)
|
||||||
|
if distance < 0 then distance = 0 end
|
||||||
|
if distance > distance_max then distance = distance_max end
|
||||||
|
local nodename = minetest.get_node(
|
||||||
|
vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
|
||||||
|
).name
|
||||||
|
|
||||||
|
digiline:receptor_send(pos, digiline.rules.default, channel, nodename)
|
||||||
|
end
|
||||||
|
|
||||||
-- set player name when receiving a digiline signal on a specific channel
|
-- set player name when receiving a digiline signal on a specific channel
|
||||||
local node_detector_digiline = {
|
local node_detector_digiline = {
|
||||||
effector = {
|
effector = {
|
||||||
action = function(pos, node, channel, msg)
|
action = function(pos, node, channel, msg)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
local distance = meta:get_int("distance")
|
|
||||||
local distance_max = mesecon.setting("node_detector_distance_max", 10)
|
|
||||||
if distance < 0 then distance = 0 end
|
|
||||||
if distance > distance_max then distance = distance_max end
|
|
||||||
|
|
||||||
if channel ~= meta:get_string("digiline_channel") then return end
|
if channel ~= meta:get_string("digiline_channel") then return end
|
||||||
|
|
||||||
if msg == GET_COMMAND then
|
if type(msg) == "table" then
|
||||||
local nodename = minetest.get_node(
|
if msg.distance or msg.scanname then
|
||||||
vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
|
if msg.distance then
|
||||||
).name
|
meta:set_string("distance", msg.distance)
|
||||||
|
end
|
||||||
digiline:receptor_send(pos, digiline.rules.default, channel, nodename)
|
if msg.scanname then
|
||||||
|
meta:set_string("scanname", msg.scanname)
|
||||||
|
end
|
||||||
|
node_detector_make_formspec(pos)
|
||||||
|
end
|
||||||
|
if msg.command == "get" then
|
||||||
|
node_detector_send_node_name(pos, node, channel, meta)
|
||||||
|
elseif msg.command == "scan" then
|
||||||
|
local result = node_detector_scan(pos)
|
||||||
|
digiline:receptor_send(pos, digiline.rules.default, channel, result)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
meta:set_string("scanname", msg)
|
if msg == GET_COMMAND then
|
||||||
node_detector_make_formspec(pos)
|
node_detector_send_node_name(pos, node, channel, meta)
|
||||||
|
else
|
||||||
|
meta:set_string("scanname", msg)
|
||||||
|
node_detector_make_formspec(pos)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 640 B |
Before Width: | Height: | Size: 727 B After Width: | Height: | Size: 687 B |
Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 655 B |
Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 693 B |
@ -2,13 +2,14 @@ local screwdriver_exists = minetest.global_exists("screwdriver")
|
|||||||
|
|
||||||
local corner_nodebox = {
|
local corner_nodebox = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
-- ±0.001 is to prevent z-fighting
|
||||||
fixed = {{ -16/32-0.001, -17/32, -3/32, 0, -13/32, 3/32 },
|
fixed = {{ -16/32-0.001, -17/32, -3/32, 0, -13/32, 3/32 },
|
||||||
{ -3/32, -17/32, -16/32+0.001, 3/32, -13/32, 3/32}}
|
{ -3/32, -17/32, -16/32+0.001, 3/32, -13/32, 3/32}}
|
||||||
}
|
}
|
||||||
|
|
||||||
local corner_selectionbox = {
|
local corner_selectionbox = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -16/32-0.001, -18/32, -16/32, 5/32, -12/32, 5/32 },
|
fixed = { -16/32, -16/32, -16/32, 5/32, -12/32, 5/32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
local corner_get_rules = function (node)
|
local corner_get_rules = function (node)
|
||||||
|
@ -32,7 +32,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
stack_max = 99,
|
stack_max = 99,
|
||||||
selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
|
selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
|
||||||
groups = {dig_immediate=3, mesecon=3},
|
groups = {dig_immediate=3, mesecon=3},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
mesecons = {
|
mesecons = {
|
||||||
@ -59,7 +59,7 @@ minetest.register_node("mesecons_extrawires:crossover_01", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
stack_max = 99,
|
stack_max = 99,
|
||||||
selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
|
selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
|
||||||
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
mesecons = {
|
mesecons = {
|
||||||
@ -86,7 +86,7 @@ minetest.register_node("mesecons_extrawires:crossover_10", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
stack_max = 99,
|
stack_max = 99,
|
||||||
selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
|
selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
|
||||||
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
mesecons = {
|
mesecons = {
|
||||||
@ -113,7 +113,7 @@ minetest.register_node("mesecons_extrawires:crossover_on", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
stack_max = 99,
|
stack_max = 99,
|
||||||
selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
|
selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
|
||||||
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
mesecons = {
|
mesecons = {
|
||||||
|
@ -1 +1 @@
|
|||||||
Insulated corners are conductors that only conduct between the inputs (also not up or down). When placing they always point to the left in direction of your vision.
|
Insulated corners are conductors that only conduct between the inputs (also not up or down). When placing they always point to the left in direction of your vision. Like uninsulated wires, they work through unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 1.9 KiB |
@ -1 +1 @@
|
|||||||
Insulated crossing are conductors that conduct two signals between the opposing sides, the signals are insulated to each other.
|
Insulated crossing are conductors that conduct two signals between the opposing sides, the signals are insulated to each other. Like uninsulated wires, they work through unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1 +1 @@
|
|||||||
The basic prerequesite for mesecons, can be crafted into wires and other stuff. Have a look at the <a href="http://wiki.minetest.net/Mese">Minetest Wiki</a> for more information. Mese is a conductor. It conducts in all six directions: Up/Down/Left/Right/Forward/Backward
|
The basic prerequesite for mesecons, can be crafted into wires and other stuff. Have a look at the <a href="http://wiki.minetest.net/Mese">Minetest Wiki</a> for more information. Mese is a conductor. It conducts in all six directions: Up/Down/Left/Right/Forward/Backward. Like horizontal wires, Mese conduction works through unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 2.5 KiB |
@ -1 +1 @@
|
|||||||
Insulated T-Junctions are conductors that only conduct between the inputs (also not up or down).
|
Insulated T-Junctions are conductors that only conduct between the inputs (also not up or down). Like uninsulated wires, they work through unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.9 KiB |
@ -1 +1 @@
|
|||||||
Vertical Mesecons only conduct up and down. Plates appear at the ends, at that place they also conduct to the side.
|
Vertical Mesecons only conduct up and down. Plates appear at the ends, at that place they also conduct to the side. Like horizontal wires, they work through unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.9 KiB |
@ -2,13 +2,14 @@ local screwdriver_exists = minetest.global_exists("screwdriver")
|
|||||||
|
|
||||||
local tjunction_nodebox = {
|
local tjunction_nodebox = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
-- ±0.001 is to prevent z-fighting
|
||||||
fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
|
fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
|
||||||
{ -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},}
|
{ -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},}
|
||||||
}
|
}
|
||||||
|
|
||||||
local tjunction_selectionbox = {
|
local tjunction_selectionbox = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 },
|
fixed = { -16/32, -16/32, -16/32, 16/32, -12/32, 7/32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
local tjunction_get_rules = function (node)
|
local tjunction_get_rules = function (node)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
FPGAs can be used to chain multiple logic gates together in a compact manner.
|
FPGAs can be used to chain multiple logic gates together in a compact manner.
|
||||||
They come with 4 I/O ports and 10 internal registers,
|
They come with 4 I/O ports and 10 internal registers,
|
||||||
which can then be connected with eachother to form logic circuits.<br />
|
which can then be connected with each other to form logic circuits.
|
||||||
|
They work fine in unloaded blocks.<br />
|
||||||
Supported gate types: <b>AND</b>, <b>OR</b>, <b>NOT</b>, <b>XOR</b>, <b>NAND</b>, <b>XNOR</b>, <b>Buffer</b> (=)<br />
|
Supported gate types: <b>AND</b>, <b>OR</b>, <b>NOT</b>, <b>XOR</b>, <b>NAND</b>, <b>XNOR</b>, <b>Buffer</b> (=)<br />
|
||||||
I/O ports: <b>A B C D</b>; Registers: numbered <b>0</b> to <b>9</b>
|
I/O ports: <b>A B C D</b>; Registers: numbered <b>0</b> to <b>9</b>
|
||||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 598 B After Width: | Height: | Size: 519 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 256 B |
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 480 B |
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 760 B |
@ -1 +1,2 @@
|
|||||||
AND gates power their output if both inputs (from left and right) are powered.
|
AND gates power their output if both inputs (from left and right) are powered.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1 +1,2 @@
|
|||||||
Diodes conduct signals in one direction only.
|
Diodes conduct signals in one direction only.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1 +1,2 @@
|
|||||||
NAND gates do not power their output if both inputs (from left and right) are powered, but power it in every other case.
|
NAND gates do not power their output if both inputs (from left and right) are powered, but power it in every other case.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1 +1,2 @@
|
|||||||
NOR gates only power their output if none of their two inputs is powered. They are basically OR gates with a NOT gate at their output.
|
NOR gates only power their output if none of their two inputs is powered. They are basically OR gates with a NOT gate at their output.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.1 KiB |
@ -1 +1,2 @@
|
|||||||
NOT gates invert signals, just like a mesecon torch does, but faster. The input is at the opposite side of the output.
|
NOT gates invert signals, just like a mesecon torch does, but faster. The input is at the opposite side of the output.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1 +1,2 @@
|
|||||||
OR gates power their output if either of their inputs (or both) are powered. You could basically get the same behaviour with two diodes, but OR gates save some space.
|
OR gates power their output if either of their inputs (or both) are powered. You could basically get the same behaviour with two diodes, but OR gates save some space.
|
||||||
|
They work in unloaded blocks.
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.1 KiB |
@ -1 +1,2 @@
|
|||||||
XOR gates power their output if only one input is powered, they're off if either both or none of the inputs is powered.
|
XOR gates power their output if only one input is powered, they're off if either both or none of the inputs is powered.
|
||||||
|
They work in unloaded blocks.
|
||||||
|