From 67e23b8533c361573459460ee38deffea8859513 Mon Sep 17 00:00:00 2001 From: Andrey01 Date: Wed, 1 Mar 2017 22:00:02 +0300 Subject: [PATCH] Added letters, numbers, punctuations and frames --- depends.txt | 1 + init.lua | 6 + node_frames.lua | 1173 +++++++++++++++++++++++++ node_machine.lua | 396 +++++++++ nodes.lua | 563 ++++++++++++ textures/node_1.png | Bin 0 -> 214 bytes textures/node_2.png | Bin 0 -> 221 bytes textures/node_3.png | Bin 0 -> 220 bytes textures/node_4.png | Bin 0 -> 222 bytes textures/node_5.png | Bin 0 -> 222 bytes textures/node_6.png | Bin 0 -> 215 bytes textures/node_7.png | Bin 0 -> 220 bytes textures/node_8.png | Bin 0 -> 221 bytes textures/node_9.png | Bin 0 -> 214 bytes textures/node_A.png | Bin 0 -> 227 bytes textures/node_B.png | Bin 0 -> 211 bytes textures/node_C.png | Bin 0 -> 230 bytes textures/node_D.png | Bin 0 -> 224 bytes textures/node_E.png | Bin 0 -> 218 bytes textures/node_F.png | Bin 0 -> 208 bytes textures/node_G.png | Bin 0 -> 230 bytes textures/node_H.png | Bin 0 -> 210 bytes textures/node_I.png | Bin 0 -> 207 bytes textures/node_J.png | Bin 0 -> 212 bytes textures/node_K.png | Bin 0 -> 224 bytes textures/node_L.png | Bin 0 -> 208 bytes textures/node_M.png | Bin 0 -> 225 bytes textures/node_N.png | Bin 0 -> 229 bytes textures/node_O.png | Bin 0 -> 205 bytes textures/node_P.png | Bin 0 -> 211 bytes textures/node_Q.png | Bin 0 -> 222 bytes textures/node_R.png | Bin 0 -> 226 bytes textures/node_S.png | Bin 0 -> 221 bytes textures/node_T.png | Bin 0 -> 202 bytes textures/node_U.png | Bin 0 -> 209 bytes textures/node_V.png | Bin 0 -> 225 bytes textures/node_W.png | Bin 0 -> 222 bytes textures/node_X.png | Bin 0 -> 241 bytes textures/node_Y.png | Bin 0 -> 224 bytes textures/node_Z.png | Bin 0 -> 223 bytes textures/node_bracket1.png | Bin 0 -> 192 bytes textures/node_bracket2.png | Bin 0 -> 194 bytes textures/node_comma.png | Bin 0 -> 192 bytes textures/node_dash.png | Bin 0 -> 186 bytes textures/node_division_mark.png | Bin 0 -> 189 bytes textures/node_empty.png | Bin 0 -> 191 bytes textures/node_equality_mark.png | Bin 0 -> 188 bytes textures/node_evil.png | Bin 0 -> 214 bytes textures/node_exclamation_mark.png | Bin 0 -> 191 bytes textures/node_line1.png | Bin 0 -> 211 bytes textures/node_line2.png | Bin 0 -> 217 bytes textures/node_minus.png | Bin 0 -> 186 bytes textures/node_multiplication_mark.png | Bin 0 -> 213 bytes textures/node_normal.png | Bin 0 -> 199 bytes textures/node_plus.png | Bin 0 -> 210 bytes textures/node_procent.png | Bin 0 -> 229 bytes textures/node_question_mark.png | Bin 0 -> 215 bytes textures/node_sad.png | Bin 0 -> 198 bytes textures/node_smile.png | Bin 0 -> 197 bytes textures/node_star.png | Bin 0 -> 232 bytes textures/node_stop.png | Bin 0 -> 187 bytes 61 files changed, 2139 insertions(+) create mode 100644 depends.txt create mode 100644 init.lua create mode 100644 node_frames.lua create mode 100644 node_machine.lua create mode 100644 nodes.lua create mode 100644 textures/node_1.png create mode 100644 textures/node_2.png create mode 100644 textures/node_3.png create mode 100644 textures/node_4.png create mode 100644 textures/node_5.png create mode 100644 textures/node_6.png create mode 100644 textures/node_7.png create mode 100644 textures/node_8.png create mode 100644 textures/node_9.png create mode 100644 textures/node_A.png create mode 100644 textures/node_B.png create mode 100644 textures/node_C.png create mode 100644 textures/node_D.png create mode 100644 textures/node_E.png create mode 100644 textures/node_F.png create mode 100644 textures/node_G.png create mode 100644 textures/node_H.png create mode 100644 textures/node_I.png create mode 100644 textures/node_J.png create mode 100644 textures/node_K.png create mode 100644 textures/node_L.png create mode 100644 textures/node_M.png create mode 100644 textures/node_N.png create mode 100644 textures/node_O.png create mode 100644 textures/node_P.png create mode 100644 textures/node_Q.png create mode 100644 textures/node_R.png create mode 100644 textures/node_S.png create mode 100644 textures/node_T.png create mode 100644 textures/node_U.png create mode 100644 textures/node_V.png create mode 100644 textures/node_W.png create mode 100644 textures/node_X.png create mode 100644 textures/node_Y.png create mode 100644 textures/node_Z.png create mode 100644 textures/node_bracket1.png create mode 100644 textures/node_bracket2.png create mode 100644 textures/node_comma.png create mode 100644 textures/node_dash.png create mode 100644 textures/node_division_mark.png create mode 100644 textures/node_empty.png create mode 100644 textures/node_equality_mark.png create mode 100644 textures/node_evil.png create mode 100644 textures/node_exclamation_mark.png create mode 100644 textures/node_line1.png create mode 100644 textures/node_line2.png create mode 100644 textures/node_minus.png create mode 100644 textures/node_multiplication_mark.png create mode 100644 textures/node_normal.png create mode 100644 textures/node_plus.png create mode 100644 textures/node_procent.png create mode 100644 textures/node_question_mark.png create mode 100644 textures/node_sad.png create mode 100644 textures/node_smile.png create mode 100644 textures/node_star.png create mode 100644 textures/node_stop.png diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..1810f69 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..e43278f --- /dev/null +++ b/init.lua @@ -0,0 +1,6 @@ +cube_nodes= {} + +local modpath = minetest.get_modpath("cube_nodes") + +dofile(modpath .. "/nodes.lua") +dofile(modpath .. "/node_frames.lua") diff --git a/node_frames.lua b/node_frames.lua new file mode 100644 index 0000000..ff2a8a3 --- /dev/null +++ b/node_frames.lua @@ -0,0 +1,1173 @@ +--NODE FRAMES-- +minetest.register_node("cube_nodes:sign_A", { + description = "Sign A", + drawtype = "signlike", + tiles = {"node_A.png", "node_empty"}, + inventory_image = "node_A.png", + wield_image = "node_A.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_B", { + description = "Sign B", + drawtype = "signlike", + tiles = {"node_B.png", "node_empty"}, + inventory_image = "node_B.png", + wield_image = "node_B.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_C", { + description = "Sign C", + drawtype = "signlike", + tiles = {"node_C.png", "node_empty"}, + inventory_image = "node_C.png", + wield_image = "node_C.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_D", { + description = "Sign D", + drawtype = "signlike", + tiles = {"node_D.png", "node_empty"}, + inventory_image = "node_D.png", + wield_image = "node_D.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_E", { + description = "Sign E", + drawtype = "signlike", + tiles = {"node_E.png", "node_empty"}, + inventory_image = "node_E.png", + wield_image = "node_E.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_F", { + description = "Sign F", + drawtype = "signlike", + tiles = {"node_F.png", "node_empty"}, + inventory_image = "node_F.png", + wield_image = "node_F.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_G", { + description = "Sign G", + drawtype = "signlike", + tiles = {"node_G.png", "node_empty"}, + inventory_image = "node_G.png", + wield_image = "node_G.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_H", { + description = "Sign H", + drawtype = "signlike", + tiles = {"node_H.png", "node_empty"}, + inventory_image = "node_H.png", + wield_image = "node_H.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_I", { + description = "Sign I", + drawtype = "signlike", + tiles = {"node_I.png", "node_empty"}, + inventory_image = "node_I.png", + wield_image = "node_I.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_J", { + description = "Sign J", + drawtype = "signlike", + tiles = {"node_J.png", "node_empty"}, + inventory_image = "node_J.png", + wield_image = "node_J.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_K", { + description = "Sign K", + drawtype = "signlike", + tiles = {"node_K.png", "node_empty"}, + inventory_image = "node_K.png", + wield_image = "node_K.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_L", { + description = "Sign l", + drawtype = "signlike", + tiles = {"node_L.png", "node_empty"}, + inventory_image = "node_L.png", + wield_image = "node_L.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_M", { + description = "Sign M", + drawtype = "signlike", + tiles = {"node_M.png", "node_empty"}, + inventory_image = "node_M.png", + wield_image = "node_M.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_N", { + description = "Sign N", + drawtype = "signlike", + tiles = {"node_N.png", "node_empty"}, + inventory_image = "node_N.png", + wield_image = "node_N.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_O", { + description = "Sign O", + drawtype = "signlike", + tiles = {"node_O.png", "node_empty"}, + inventory_image = "node_O.png", + wield_image = "node_O.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_P", { + description = "Sign P", + drawtype = "signlike", + tiles = {"node_P.png", "node_empty"}, + inventory_image = "node_P.png", + wield_image = "node_P.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_Q", { + description = "Sign Q", + drawtype = "signlike", + tiles = {"node_Q.png", "node_empty"}, + inventory_image = "node_Q.png", + wield_image = "node_Q.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_R", { + description = "Sign R", + drawtype = "signlike", + tiles = {"node_R.png", "node_empty"}, + inventory_image = "node_R.png", + wield_image = "node_R.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_S", { + description = "Sign S", + drawtype = "signlike", + tiles = {"node_S.png", "node_empty"}, + inventory_image = "node_S.png", + wield_image = "node_S.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_T", { + description = "Sign T", + drawtype = "signlike", + tiles = {"node_T.png", "node_empty"}, + inventory_image = "node_T.png", + wield_image = "node_T.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_U", { + description = "Sign U", + drawtype = "signlike", + tiles = {"node_U.png", "node_empty"}, + inventory_image = "node_U.png", + wield_image = "node_U.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_V", { + description = "Sign V", + drawtype = "signlike", + tiles = {"node_V.png", "node_empty"}, + inventory_image = "node_V.png", + wield_image = "node_V.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_W", { + description = "Sign W", + drawtype = "signlike", + tiles = {"node_W.png", "node_empty"}, + inventory_image = "node_W.png", + wield_image = "node_W.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_X", { + description = "Sign X", + drawtype = "signlike", + tiles = {"node_X.png", "node_empty"}, + inventory_image = "node_X.png", + wield_image = "node_X.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_Y", { + description = "Sign Y", + drawtype = "signlike", + tiles = {"node_Y.png", "node_empty"}, + inventory_image = "node_Y.png", + wield_image = "node_Y.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_Z", { + description = "Sign Z", + drawtype = "signlike", + tiles = {"node_Z.png", "node_empty"}, + inventory_image = "node_Z.png", + wield_image = "node_Z.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_0", { + description = "Sign 0", + drawtype = "signlike", + tiles = {"node_0.png", "node_empty"}, + inventory_image = "node_O.png", + wield_image = "node_0.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_1", { + description = "Sign 1", + drawtype = "signlike", + tiles = {"node_1.png", "node_empty"}, + inventory_image = "node_1.png", + wield_image = "node_1.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_2", { + description = "Sign 2", + drawtype = "signlike", + tiles = {"node_2.png", "node_empty"}, + inventory_image = "node_2.png", + wield_image = "node_2.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_3", { + description = "Sign 3", + drawtype = "signlike", + tiles = {"node_3.png", "node_empty"}, + inventory_image = "node_3.png", + wield_image = "node_3.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_4", { + description = "Sign 4", + drawtype = "signlike", + tiles = {"node_4.png", "node_empty"}, + inventory_image = "node_4.png", + wield_image = "node_4.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_5", { + description = "Sign 5", + drawtype = "signlike", + tiles = {"node_5.png", "node_empty"}, + inventory_image = "node_5.png", + wield_image = "node_5.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_6", { + description = "Sign 6", + drawtype = "signlike", + tiles = {"node_6.png", "node_empty"}, + inventory_image = "node_6.png", + wield_image = "node_6.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_7", { + description = "Sign 7", + drawtype = "signlike", + tiles = {"node_7.png", "node_empty"}, + inventory_image = "node_7.png", + wield_image = "node_7.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_8", { + description = "Sign 8", + drawtype = "signlike", + tiles = {"node_8.png", "node_empty"}, + inventory_image = "node_8.png", + wield_image = "node_8.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_9", { + description = "Sign 9", + drawtype = "signlike", + tiles = {"node_9.png", "node_empty"}, + inventory_image = "node_9.png", + wield_image = "node_9.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_line1", { + description = "Sign Line1", + drawtype = "signlike", + tiles = {"node_line1.png", "node_empty"}, + inventory_image = "node_line1.png", + wield_image = "node_line1.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_line2", { + description = "Sign Line2", + drawtype = "signlike", + tiles = {"node_line2.png", "node_empty"}, + inventory_image = "node_line2.png", + wield_image = "node_line2.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_star", { + description = "Sign Star", + drawtype = "signlike", + tiles = {"node_star.png", "node_empty"}, + inventory_image = "node_star.png", + wield_image = "node_star.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_plus", { + description = "Sign Plus", + drawtype = "signlike", + tiles = {"node_plus.png", "node_empty"}, + inventory_image = "node_plus.png", + wield_image = "node_plus.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_minus", { + description = "Sign Minus", + drawtype = "signlike", + tiles = {"node_minus.png", "node_empty"}, + inventory_image = "node_minus.png", + wield_image = "node_minus.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_exclamation_mark", { + description = "Sign Exclamation Mark", + drawtype = "signlike", + tiles = {"node_exclamation_mark.png", "node_empty"}, + inventory_image = "node_exclamation_mark.png", + wield_image = "node_exclamation_mark.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_question_mark", { + description = "Sign Question Mark", + drawtype = "signlike", + tiles = {"node_question_mark.png", "node_empty"}, + inventory_image = "node_question_mark.png", + wield_image = "node_question_mark.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) +minetest.register_node("cube_nodes:sign_stop", { + description = "Sign Stop", + drawtype = "signlike", + tiles = {"node_stop.png", "node_empty"}, + inventory_image = "node_stop.png", + wield_image = "node_stop.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_bracket1", { + description = "Sign Bracket1", + drawtype = "signlike", + tiles = {"node_bracket1.png", "node_empty"}, + inventory_image = "node_bracket1.png", + wield_image = "node_bracket1.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_bracket2", { + description = "Sign Bracket2", + drawtype = "signlike", + tiles = {"node_bracket2.png", "node_empty"}, + inventory_image = "node_bracket2.png", + wield_image = "node_bracket2.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_comma", { + description = "Sign Comma", + drawtype = "signlike", + tiles = {"node_comma.png", "node_empty"}, + inventory_image = "node_comma.png", + wield_image = "node_comma.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_dash", { + description = "Sign Dash", + drawtype = "signlike", + tiles = {"node_dash.png", "node_empty"}, + inventory_image = "node_dash.png", + wield_image = "node_dash.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_procent", { + description = "Sign Procent", + drawtype = "signlike", + tiles = {"node_procent.png", "node_empty"}, + inventory_image = "node_procent.png", + wield_image = "node_procent.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_multiplication_mark", { + description = "Sign Multiplication Mark", + drawtype = "signlike", + tiles = {"node_multiplication_mark.png", "node_empty"}, + inventory_image = "node_multiplication_mark.png", + wield_image = "node_multiplication_mark.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_division_mark", { + description = "Sign Division Mark", + drawtype = "signlike", + tiles = {"node_division_mark.png", "node_empty"}, + inventory_image = "node_division_mark.png", + wield_image = "node_division_mark.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_equality_mark", { + description = "Sign Equality Mark", + drawtype = "signlike", + tiles = {"node_equality_mark.png", "node_empty"}, + inventory_image = "node_equality_mark.png", + wield_image = "node_equality_mark.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_smile", { + description = "Sign Smile", + drawtype = "signlike", + tiles = {"node_smile.png", "node_empty"}, + inventory_image = "node_smile.png", + wield_image = "node_smile.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) +minetest.register_node("cube_nodes:sign_sad", { + description = "Sign Sad", + drawtype = "signlike", + tiles = {"node_sad.png", "node_empty"}, + inventory_image = "node_sad.png", + wield_image = "node_sad.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) +minetest.register_node("cube_nodes:sign_evil", { + description = "Sign Evil", + drawtype = "signlike", + tiles = {"node_evil.png", "node_empty"}, + inventory_image = "node_evil.png", + wield_image = "node_evil.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("cube_nodes:sign_normal", { + description = "Sign Normal", + drawtype = "signlike", + tiles = {"node_normal.png", "node_empty"}, + inventory_image = "node_normal.png", + wield_image = "node_normal.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), +}) diff --git a/node_machine.lua b/node_machine.lua new file mode 100644 index 0000000..77891fe --- /dev/null +++ b/node_machine.lua @@ -0,0 +1,396 @@ +node_machine.known_nodes = {} +node_machine.names = { + {"node_A"}, + {"node_B"}, + {"node_C"}, + {"node_D"}, + {"node_E"}, + {"node_F"}, + {"node_G"}, + {"node_H"}, + {"node_I"}, + {"node_J"}, + {"node_K"}, + {"node_L"}, + {"node_M"}, + {"node_N"}, + {"node_O"}, + {"node_P"}, + {"node_Q"}, + {"node_R"}, + {"node_S"}, + {"node_T"}, + {"node_U"}, + {"node_V"}, + {"node_W"}, + {"node_X"}, + {"node_Y"}, + {"node_Z"}, + {"node_0"}, + {"node_1"}, + {"node_2"}, + {"node_3"}, + {"node_4"}, + {"node_5"}, + {"node_6"}, + {"node_7"}, + {"node_8"}, + {"node_9"}, + {"node_line1"}, + {"node_line2"}, + {"node_star"}, + {"node_plus"}, + {"node_minus"}, + {"node_bracket1"}, + {"node_bracket2"}, + {"node_stop"}, + {"node_multiplication_mark"}, + {"node_question_mark"}, + {"node_equality_mark"}, + {"node_exclamation_mark"}, + {"node_division_mark"}, + {"node_comma"}, + {"node_dash"}, + {"node_procent"}, + {"node_smile"}, + {"node_sad"}, + {"node_evil"}, + {"node_normal"}, +} + +function node_machine:get_cost(inv, stackname) + for i, item in pairs(inv:get_list("output")) do + if item:get_name() == stackname then + return node_machine.cost_in_nodes[i] + end + end +end + +function circular_saw:get_output_inv(modname, material, amount, max) + if (not max or max < 1 or max > 99) then max = 99 end + + local list = {} + local pos = #list + + -- If there is nothing inside, display empty inventory: + if amount < 1 then + return list + end + + for i = 1, #circular_saw.names do + local t = circular_saw.names[i] + local cost = circular_saw.cost_in_microblocks[i] + local balance = math.min(math.floor(amount/cost), max) + local nodename = modname .. ":" .. t[1] .. "_" .. material .. t[2] + if minetest.registered_nodes[nodename] then + pos = pos + 1 + list[pos] = nodename .. " " .. balance + end + end + return list +end + + +-- Reset empty circular_saw after last full block has been taken out +-- (or the circular_saw has been placed the first time) +-- Note: max_offered is not reset: +function circular_saw:reset(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + inv:set_list("input", {}) + inv:set_list("micro", {}) + inv:set_list("output", {}) + meta:set_int("anz", 0) + + meta:set_string("infotext", + S("Circular Saw is empty (owned by %s)") + :format(meta:get_string("owner") or "")) +end + + +-- Player has taken something out of the box or placed something inside +-- that amounts to count microblocks: +function circular_saw:update_inventory(pos, amount) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + amount = meta:get_int("anz") + amount + + -- The material is recycled automaticly. + inv:set_list("recycle", {}) + + if amount < 1 then -- If the last block is taken out. + self:reset(pos) + return + end + + local stack = inv:get_stack("input", 1) + -- At least one "normal" block is necessary to see what kind of stairs are requested. + if stack:is_empty() then + -- Any microblocks not taken out yet are now lost. + -- (covers material loss in the machine) + self:reset(pos) + return + + end + local node_name = stack:get_name() or "" + local name_parts = circular_saw.known_nodes[node_name] or "" + local modname = name_parts[1] or "" + local material = name_parts[2] or "" + + inv:set_list("input", { -- Display as many full blocks as possible: + node_name.. " " .. math.floor(amount / 8) + }) + + -- The stairnodes made of default nodes use moreblocks namespace, other mods keep own: + if modname == "default" then + modname = "moreblocks" + end + -- print("circular_saw set to " .. modname .. " : " + -- .. material .. " with " .. (amount) .. " microblocks.") + + -- 0-7 microblocks may remain left-over: + inv:set_list("micro", { + modname .. ":micro_" .. material .. "_bottom " .. (amount % 8) + }) + -- Display: + inv:set_list("output", + self:get_output_inv(modname, material, amount, + meta:get_int("max_offered"))) + -- Store how many microblocks are available: + meta:set_int("anz", amount) + + meta:set_string("infotext", + S("Circular Saw is working on %s (owned by %s)") + :format(material, meta:get_string("owner") or "")) +end + + +-- The amount of items offered per shape can be configured: +function circular_saw.on_receive_fields(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local max = tonumber(fields.max_offered) + if max and max > 0 then + meta:set_string("max_offered", max) + -- Update to show the correct number of items: + circular_saw:update_inventory(pos, 0) + end +end + + +-- Moving the inventory of the circular_saw around is not allowed because it +-- is a fictional inventory. Moving inventory around would be rather +-- impractical and make things more difficult to calculate: +function circular_saw.allow_metadata_inventory_move( + pos, from_list, from_index, to_list, to_index, count, player) + return 0 +end + + +-- Only input- and recycle-slot are intended as input slots: +function circular_saw.allow_metadata_inventory_put( + pos, listname, index, stack, player) + -- The player is not allowed to put something in there: + if listname == "output" or listname == "micro" then + return 0 + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stackname = stack:get_name() + local count = stack:get_count() + + -- Only alow those items that are offered in the output inventory to be recycled: + if listname == "recycle" then + if not inv:contains_item("output", stackname) then + return 0 + end + local stackmax = stack:get_stack_max() + local instack = inv:get_stack("input", 1) + local microstack = inv:get_stack("micro", 1) + local incount = instack:get_count() + local incost = (incount * 8) + microstack:get_count() + local maxcost = (stackmax * 8) + 7 + local cost = circular_saw:get_cost(inv, stackname) + if (incost + cost) > maxcost then + return math.max((maxcost - incost) / cost, 0) + end + return count + end + + -- Only accept certain blocks as input which are known to be craftable into stairs: + if listname == "input" then + if not inv:is_empty("input") then + if inv:get_stack("input", index):get_name() ~= stackname then + return 0 + end + end + if not inv:is_empty("micro") then + local microstackname = inv:get_stack("micro", 1):get_name():gsub("^.+:micro_", "", 1) + local cutstackname = stackname:gsub("^.+:", "", 1) + if microstackname ~= cutstackname then + return 0 + end + end + for name, t in pairs(circular_saw.known_nodes) do + if name == stackname and inv:room_for_item("input", stack) then + return count + end + end + return 0 + end +end + +-- Taking is allowed from all slots (even the internal microblock slot). +-- Putting something in is slightly more complicated than taking anything +-- because we have to make sure it is of a suitable material: +function circular_saw.on_metadata_inventory_put( + pos, listname, index, stack, player) + -- We need to find out if the circular_saw is already set to a + -- specific material or not: + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stackname = stack:get_name() + local count = stack:get_count() + + -- Putting something into the input slot is only possible if that had + -- been empty before or did contain something of the same material: + if listname == "input" then + -- Each new block is worth 8 microblocks: + circular_saw:update_inventory(pos, 8 * count) + elseif listname == "recycle" then + -- Lets look which shape this represents: + local cost = circular_saw:get_cost(inv, stackname) + local input_stack = inv:get_stack("input", 1) + -- check if this would not exceed input itemstack max_stacks + if input_stack:get_count() + ((cost * count) / 8) <= input_stack:get_stack_max() then + circular_saw:update_inventory(pos, cost * count) + end + end +end + +function circular_saw.on_metadata_inventory_take( + pos, listname, index, stack, player) + + -- Prevent (inbuilt) swapping between inventories with different blocks + -- corrupting player inventory or Saw with 'unknown' items. + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local input_stack = inv:get_stack(listname, index) + if not input_stack:is_empty() and input_stack:get_name()~=stack:get_name() then + local player_inv = player:get_inventory() + if player_inv:room_for_item("main", input_stack) then + player_inv:add_item("main", input_stack) + end + + circular_saw:reset(pos) + return + end + + -- If it is one of the offered stairs: find out how many + -- microblocks have to be substracted: + if listname == "output" then + -- We do know how much each block at each position costs: + local cost = circular_saw.cost_in_microblocks[index] + * stack:get_count() + + circular_saw:update_inventory(pos, -cost) + elseif listname == "micro" then + -- Each microblock costs 1 microblock: + circular_saw:update_inventory(pos, -stack:get_count()) + elseif listname == "input" then + -- Each normal (= full) block taken costs 8 microblocks: + circular_saw:update_inventory(pos, 8 * -stack:get_count()) + end + -- The recycle field plays no role here since it is processed immediately. +end + +function circular_saw.on_construct(pos) + local meta = minetest.get_meta(pos) + local fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots + meta:set_string("formspec", "size[11,10]"..fancy_inv.. + "label[0,0;" ..S("Input\nmaterial").. "]" .. + "list[current_name;input;1.5,0;1,1;]" .. + "label[0,1;" ..S("Left-over").. "]" .. + "list[current_name;micro;1.5,1;1,1;]" .. + "label[0,2;" ..S("Recycle\noutput").. "]" .. + "list[current_name;recycle;1.5,2;1,1;]" .. + "field[0.3,3.5;1,1;max_offered;" ..S("Max").. ":;${max_offered}]" .. + "button[1,3.2;1,1;Set;" ..S("Set").. "]" .. + "list[current_name;output;2.8,0;8,6;]" .. + "list[current_player;main;1.5,6.25;8,4;]") + + meta:set_int("anz", 0) -- No microblocks inside yet. + meta:set_string("max_offered", 99) -- How many items of this kind are offered by default? + meta:set_string("infotext", S("Circular Saw is empty")) + + local inv = meta:get_inventory() + inv:set_size("input", 1) -- Input slot for full blocks of material x. + inv:set_size("micro", 1) -- Storage for 1-7 surplus microblocks. + inv:set_size("recycle", 1) -- Surplus partial blocks can be placed here. + inv:set_size("output", 6*8) -- 6x8 versions of stair-parts of material x. + + circular_saw:reset(pos) +end + + +function circular_saw.can_dig(pos,player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if not inv:is_empty("input") or + not inv:is_empty("micro") or + not inv:is_empty("recycle") then + return false + end + -- Can be dug by anyone when empty, not only by the owner: + return true +end + +minetest.register_node("moreblocks:circular_saw", { + description = S("Circular Saw"), + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- Leg + {0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- Leg + {-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- Leg + {0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- Leg + {-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- Tabletop + {-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- Saw blade (top) + {-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- Saw blade (bottom) + {-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- Motor case + }, + }, + tiles = {"moreblocks_circular_saw_top.png", + "moreblocks_circular_saw_bottom.png", + "moreblocks_circular_saw_side.png"}, + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + groups = {choppy = 2,oddly_breakable_by_hand = 2}, + sounds = default.node_sound_wood_defaults(), + on_construct = circular_saw.on_construct, + can_dig = circular_saw.can_dig, + -- Set the owner of this circular saw. + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local owner = placer and placer:get_player_name() or "" + meta:set_string("owner", owner) + meta:set_string("infotext", + S("Circular Saw is empty (owned by %s)") + :format(owner)) + end, + + -- The amount of items offered per shape can be configured: + on_receive_fields = circular_saw.on_receive_fields, + allow_metadata_inventory_move = circular_saw.allow_metadata_inventory_move, + -- Only input- and recycle-slot are intended as input slots: + allow_metadata_inventory_put = circular_saw.allow_metadata_inventory_put, + -- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden. + -- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material: + on_metadata_inventory_put = circular_saw.on_metadata_inventory_put, + on_metadata_inventory_take = circular_saw.on_metadata_inventory_take, +}) + diff --git a/nodes.lua b/nodes.lua new file mode 100644 index 0000000..37bd7d7 --- /dev/null +++ b/nodes.lua @@ -0,0 +1,563 @@ +--NODES-- +minetest.register_node("cube_nodes:node_A", { + description = ("Node A"), + tiles = {"node_A.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_B", { + description = ("Node B"), + tiles = {"node_B.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_C", { + description = ("Node C"), + tiles = {"node_C.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_D", { + description = ("Node D"), + tiles = {"node_D.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_E", { + description = ("Node E"), + tiles = {"node_E.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_F", { + description = ("Node F"), + tiles = {"node_F.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_G", { + description = ("Node G"), + tiles = {"node_G.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_H", { + description = ("Node H"), + tiles = {"node_H.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_I", { + description = ("Node I"), + tiles = {"node_I.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_J", { + description = ("Node J"), + tiles = {"node_J.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_K", { + description = ("Node K"), + tiles = {"node_K.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_L", { + description = ("Node L"), + tiles = {"node_L.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_M", { + description = ("Node M"), + tiles = {"node_M.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_N", { + description = ("Node N"), + tiles = {"node_N.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_O", { + description = ("Node O"), + tiles = {"node_O.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_P", { + description = ("Node P"), + tiles = {"node_P.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_Q", { + description = ("Node Q"), + tiles = {"node_Q.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_R", { + description = ("Node R"), + tiles = {"node_R.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_S", { + description = ("Node S"), + tiles = {"node_S.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_T", { + description = ("Node T"), + tiles = {"node_T.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_U", { + description = ("Node U"), + tiles = {"node_U.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_V", { + description = ("Node V"), + tiles = {"node_V.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_W", { + description = ("Node W"), + tiles = {"node_W.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_X", { + description = ("Node X"), + tiles = {"node_X.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_Y", { + description = ("Node Y"), + tiles = {"node_Y.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_Z", { + description = ("Node Z"), + tiles = {"node_Z.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_0", { + description = ("Node 0"), + tiles = {"node_O.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_1", { + description = ("Node 1"), + tiles = {"node_1.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_2", { + description = ("Node 2"), + tiles = {"node_2.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_3", { + description = ("Node 3"), + tiles = {"node_3.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_4", { + description = ("Node 4"), + tiles = {"node_4.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_5", { + description = ("Node 5"), + tiles = {"node_5.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_6", { + description = ("Node 6"), + tiles = {"node_6.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_7", { + description = ("Node 7"), + tiles = {"node_7.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_8", { + description = ("Node 8"), + tiles = {"node_8.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_9", { + description = ("Node 9"), + tiles = {"node_9.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_line1", { + description = ("Node Line1"), + tiles = {"node_line1.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_line2", { + description = ("Node Line2"), + tiles = {"node_line2.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("cube_nodes:node_star", { + description = ("Node Star"), + tiles = {"node_star.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("cube_nodes:node_plus", { + description = ("Node Plus"), + tiles = {"node_plus.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("cube_nodes:node_minus", { + description = ("Node Minus"), + tiles = {"node_minus.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_exclamation_mark", { + description = ("Node Exclamation Mark"), + tiles = {"node_exclamation_mark.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_question_mark", { + description = ("Node Question Mark"), + tiles = {"node_question_mark.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_stop", { + description = ("Node Stop"), + tiles = {"node_stop.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_bracket1", { + description = ("Node Bracket1"), + tiles = {"node_bracket1.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_bracket2", { + description = ("Node Bracket2"), + tiles = {"node_bracket2.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_comma", { + description = ("Node Comma"), + tiles = {"node_comma.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_dash", { + description = ("Node Dash"), + tiles = {"node_dash.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_procent", { + description = ("Node Procent"), + tiles = {"node_procent.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_multiplication_mark", { + description = ("Node Multiplication Mark"), + tiles = {"node_multiplication_mark.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_division_mark", { + description = ("Node Division Mark"), + tiles = {"node_division_mark.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_equality_mark", { + description = ("Node Equality Mark"), + tiles = {"node_equality_mark.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_smile", { + description = ("Node Smile"), + tiles = {"node_smile.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_sad", { + description = ("Node Sad"), + tiles = {"node_sad.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_evil", { + description = ("Node Evil"), + tiles = {"node_evil.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("cube_nodes:node_normal", { + description = ("Node Normal"), + tiles = {"node_normal.png"}, + paramtype = "light", + sunlight_propagates = true, + light_source = 15, + groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) diff --git a/textures/node_1.png b/textures/node_1.png new file mode 100644 index 0000000000000000000000000000000000000000..29bd8cb85021222ec41259a183c6d83b65a70f25 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2r1XT>hctjfvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!m)5S4F<9u?0f}nwsfx(~u|K~?s?dj3kq4FTd=&# BKD+<` literal 0 HcmV?d00001 diff --git a/textures/node_2.png b/textures/node_2.png new file mode 100644 index 0000000000000000000000000000000000000000..69a39dce974163dad3e2865a4efc6223272b25e6 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2EZ019^?N`e+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~`>EaloaenSZPd)|%4yKDA{_Ee)PL6$j){XE z)7O>#A)}n2oZR{Y3le}rvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5x)5S4FsHCz=x$^JlV-s{9lJ-(Bh4qt3uxk${a+`#kO)S9!rGcwKOv<~raN(5Q!>FVdQ I&MBb@01XU5&Hw-a literal 0 HcmV?d00001 diff --git a/textures/node_4.png b/textures/node_4.png new file mode 100644 index 0000000000000000000000000000000000000000..de8897ab6280751f6e32c18c187033c6b5125d45 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2yej*J3Ra+yY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ipdZba4#PIG>!LAZTD@VDRVv|M?MDdwO(ss65Cqc|7C8>SHWEJ3<~8sSA6q3N#T| zEY&@kqfLU_QQq0*0h{4OsY0C!ndUUJnPwN_n7QRF9|^14F)*AzBd7S@MNJB1v8St_ J%Q~loCIHuHJ(B{XE z)7O>#A)}n2f~nI^r&yqnY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ipdZba4#PIKOnFBNu}L2TS~*(GEzA9_ zf)O)wlbP0l+XkK9S}xK literal 0 HcmV?d00001 diff --git a/textures/node_6.png b/textures/node_6.png new file mode 100644 index 0000000000000000000000000000000000000000..c97f8886a0fcdd6bae04440dded068ef16e795f9 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2qW-c2U1>le+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVW>EaloaeiyiX)Xo@j@g_3|4-fB)v0zh@6iosmNo%~w6arTi8F%dgVw4 zNO9ZF<`%#8N30IKD}H-nnw)iw_FM}Q`KRG)r0owdWeQ8Hs~tBG1KH^5>gTe~DWM4f DWGX;J literal 0 HcmV?d00001 diff --git a/textures/node_7.png b/textures/node_7.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ad0977b61c9818ca6ad1fd779f3f24a7a71da7 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2ve@a*32%TxvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5x)5S4F literal 0 HcmV?d00001 diff --git a/textures/node_8.png b/textures/node_8.png new file mode 100644 index 0000000000000000000000000000000000000000..5106d63233a88a1f662eec6df1cb9ecb080a1b5e GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n23jc$faj$_wvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5>)5S4F{XE z)7O>#A)}n2DodWgHYK2tY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ixwCba4#PIKOqmK|Tfp7H98Y|M%xycU^MA$UN{Wd&D%xj*gYLdRFR}ZeP6pmB}Il z?cN&hy>Scp7U=QJ_x4@0;I;wlmz3xHUu<73jDO7#u~0%!%0cBX$U;w7KbLh*2~7Z& C){XE z)7O>#A)}mtK0A*|swz-OHZvrm#5q4VH#M&W$Yo$~E=o--Nlj5G&n(GMaQE~LNYP7W z2Z~2}x;TbtoZmX>AlCr{4(G`m{{Mga#^8nH+A~hJoRwx9bq#cwHvFBgwpG|;+9WS4 zle-QLpL}Fbe#1J?^K`ykH|SeZbob598b4XRx_uv|_Xx77OQ%lV QtOT;%)78&qol`;+08=MNRsaA1 literal 0 HcmV?d00001 diff --git a/textures/node_B.png b/textures/node_B.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a0a59c4875ae24fbf530a5e2bef91d8884713b GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}mtA=3)^b)`Td+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVU>EaloasF(OBNu}K$EFwmgTe~DWM4f7A`=z literal 0 HcmV?d00001 diff --git a/textures/node_C.png b/textures/node_C.png new file mode 100644 index 0000000000000000000000000000000000000000..42969f776e8da346b13386856dfa0081b5c36c83 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}mtk^Zr_3l9T@WHUn|N}Tg^b5rw5fLsO!=c3falGGH1^30M91$R&1fE2w{ zcA$8Sr;B5V#`(RI0=W(ta5&dK`n&#(9b5E8-E2*rdf(&=D{d+oY(6t5)Okv|xTy8@ zSLfQd*<3x~TD4J=_sd78`qh$ZABztrZ#r;dx8L6AJIgX|Mw2-@l_sF US6iK9(gJdTr>mdKI;Vst0QQDXP5=M^ literal 0 HcmV?d00001 diff --git a/textures/node_D.png b/textures/node_D.png new file mode 100644 index 0000000000000000000000000000000000000000..a1216c83ba99502c186f2000338dc6d1687d7815 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}mtiD2M0>32XO+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~=>EaloasKFpK&}G@JWioS|FzTQn*}dD3X;&N-@1Momkb|c%CjkIi|0yjtU7ri z+OX%T@8mU$&h*Q#dpFVlr4i5b@9f!YXI(I@+7q>HQHs=^u7~UGXK{XE z)7O>#A)}mtsR{GRe=mSSvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5p)5S4FB{!Kd`xUQve4FFzH@l}V9!-ym@Q~Kh3F=h^S?cNP=d#Wz Gp$P!*WkMeS literal 0 HcmV?d00001 diff --git a/textures/node_F.png b/textures/node_F.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab87a5481e21d12ac447a1477fe919139dfa54d GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}mtne~q74ZDCsvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!s)5S4F{XE z)7O>#A)}mtCBIyG!~vj?Y-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4it~^ba4#PIKMQ=lZ!!-C)?})|EFgh1x|YO&X{eIcF`?{Nzn09DzoZy-Tcrq%F%9D zJJ#kfBu_bhM=8+ndM&%~Rr^QxRsMbnQbP0l+XkK?Vm`C literal 0 HcmV?d00001 diff --git a/textures/node_H.png b/textures/node_H.png new file mode 100644 index 0000000000000000000000000000000000000000..73cb1470da94770903312e83f35e1600b9ece5fc GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}mtl~!HceHWmRY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ixwBba4#PIG>!LAZTD@VDRVv|M?MDdwO&V#9A6xO8RznhNv4pG?L&wAUYwN`C|j? ybn(nI=6MNAr!Sw`@kKj^QTVK|{7Nwc1_pa+QI&b2mw=9AVDNPHb6Mw<&;$Sw**U%d literal 0 HcmV?d00001 diff --git a/textures/node_I.png b/textures/node_I.png new file mode 100644 index 0000000000000000000000000000000000000000..d47e95d10154083221a635eb6195eaf9aac6eaba GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}ligH+9%=w(15+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVV>EaloaXvXgLD0a+z~ImS|MMfR_Vnn?aLQ21IA-{8`mrr@I4{TTP+H@cs&w`8 uVyP2X82WS0L>ynl=qtEPPVA3oGtj}8dPHT}f@&XuZ1QyVb6Mw<&;$T7i#+)N literal 0 HcmV?d00001 diff --git a/textures/node_J.png b/textures/node_J.png new file mode 100644 index 0000000000000000000000000000000000000000..7260b26d1537c190157f77e207a831e3ac3f1bf7 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}li6I1NAg+)Li+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVQ>EaloasF=5MqUO34yMQd^=~hnEww6Jk~1NsL6t*6X<61K?Wr?F(xYNM#S?Q| za;N`0=dfw-o8+c%PwZp1ewd->l)5MF%x;TAjMCplbrpgQD?rwHy85}Sb4q9e0M=kW AZ~y=R literal 0 HcmV?d00001 diff --git a/textures/node_K.png b/textures/node_K.png new file mode 100644 index 0000000000000000000000000000000000000000..6534b612f50120182af11e1eb2e664ff8d423b95 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liv$1IL1WurkY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ipdbba4#PI6rlgBNu}L2TS9)kx25_0{#?4ei?gmpUG{xSh9Jml MPgg&ebxsLQ01j70F#rGn literal 0 HcmV?d00001 diff --git a/textures/node_L.png b/textures/node_L.png new file mode 100644 index 0000000000000000000000000000000000000000..3e29ae8d1b475e1347775b8f1e8d864a37003d73 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}lis}R3~`bD6SY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4itCuba4#PIG>!LAZTD@VDRVv|M?MDdwO(E$XH1C3;N9H`Vf7>WtF^}>4Q%F3LQhi t#Zog*I|Z;t{XE z)7O>#A)}lio8s)fqAWlm+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~|>Ealoaeix%BOikSi}uI=`nMB1nYa3EvOIZZ3#&vML&5jxEgi1gCf}OlHLD=- zo!zCCY)f5UZjrs#xqI#emvDZLr3`_)Eteini`(&K`NGfp_VxGYpW@)&rKhMqaf9j{ OklmiHelF{r5}E+GlSd!` literal 0 HcmV?d00001 diff --git a/textures/node_N.png b/textures/node_N.png new file mode 100644 index 0000000000000000000000000000000000000000..139cca6f0bf92ee3afca7baae1f30f33964d5cbd GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liyUri+h#x>9+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~{>EaloaenF~N3H`79L&it{_oGp4_ef=Yq_e0#fk$TSsTv$iI)9%W&I`n`^8=p zOI}-62j?FR{K8h@)>w3R#=_?GG}Xfe#do)P8c&$GaDG*~#yX|DpFe+$T`#TQvQtae SZ~;5WLkym-elF{r5}E)%8cVVO literal 0 HcmV?d00001 diff --git a/textures/node_O.png b/textures/node_O.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1bb2193bd9b12c652cf92a5305cd4db1ffea65 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liheVY1h9;npY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ifitaSYKopPZl|XkcVu@aO;k`4LxpdUR$uWhiAFGkh4{t9hbnCDTn0ALSVyU%#wi qOJd+YIO9+{^EH=NwG&P8vw+V1ut`XzK}hl=$R1BuKbLh*2~7Yh(K^2X literal 0 HcmV?d00001 diff --git a/textures/node_P.png b/textures/node_P.png new file mode 100644 index 0000000000000000000000000000000000000000..030fce6d447d0d4d2f0cf364dc09292db4801f2c GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}lir}m!@53T}*WHUn|N}Tg^b5rw5fLsO!=c3falGGH1^30M91$R&1fE2w{ zcA&VYr;B5V#`)v~1wjKN1A{;R|Id%O+S8+RLS{|Zg`VU?s*R@=#QwM?MV)q8wLEiu yW9tHa&uxslUm`eGNgN1h`YpPDd1Ob4)lZ-etfFe+C$6pq+2-l$=d#Wzp$PyD8$l8P literal 0 HcmV?d00001 diff --git a/textures/node_Q.png b/textures/node_Q.png new file mode 100644 index 0000000000000000000000000000000000000000..45a5bc786cfac158746b6ae001e0902c6d9fafe6 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liH~SyCcUyo$vY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5t)5S4F<9u?0f}nwsfx(~u|K~?s?dj3Us9E!Bf^Uk_3Mt<%*8P<;mKi(@?7dp; zv!v~kz=Z}eof!*{G}&MIc+f{s^4s{;~S?uZR K=d#Wzp$Py}*h7Q> literal 0 HcmV?d00001 diff --git a/textures/node_R.png b/textures/node_R.png new file mode 100644 index 0000000000000000000000000000000000000000..1f94c29a34e0209db8898bc27858b13fc65837ac GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liFWX(`$|XP{+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~*>Ealoaeir#C)WW7j_!m1>u<_&t@YR-{K|KeMHI#CGM_u Qw*y)3>FVdQ&MBb@0CE*fj{pDw literal 0 HcmV?d00001 diff --git a/textures/node_S.png b/textures/node_S.png new file mode 100644 index 0000000000000000000000000000000000000000..be6d34beae1f7213e620af5b9b81d3fd6ca95144 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}liACK7X!<9fG+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~`>EaloaenE|A_`zJ2mUGp6l6lb>m>*f6(FQ=O{`=uDjUQbs) Jmvv4FO#mn{LfZfU literal 0 HcmV?d00001 diff --git a/textures/node_T.png b/textures/node_T.png new file mode 100644 index 0000000000000000000000000000000000000000..37c6a23d4a150e1c56333e55383a0dea5dad4ee8 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}lizu2ck+)h9t+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVL>EaloaXvXgLD0a+z~ImS|MMfR_Vnmv)U0_m!8b+es;5uInZvI_#A3o83oUG$ p?6!ohq9(bwVp49x!TCii7#JFrMJ3HIWh#Iy@pScbS?83{1OUgZI${6- literal 0 HcmV?d00001 diff --git a/textures/node_U.png b/textures/node_U.png new file mode 100644 index 0000000000000000000000000000000000000000..e69969e55e0564c2dec7837a7eb32367f76fffb3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n20C&v1Oje+fY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4itCyba4#PIG>!LAZTD@VDRVv|M?MDdwO&V#9~Au?Uz{y&r&kEZE$p^$JfIv*osUP wj*F;GZ)|L2&Hf{t$~;e`Rp)4vcT*Mv!z5)nv6ef(G(mQGy85}Sb4q9e0Ct)=)c^nh literal 0 HcmV?d00001 diff --git a/textures/node_V.png b/textures/node_V.png new file mode 100644 index 0000000000000000000000000000000000000000..edfd17e95796ebb9cfa8d66a57664ebfa2c1a047 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n25R-VxW@Vs|Y-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ipdfba4#PIKOm~H6MclhcoxXf8oatwlwy0l{x9&5NDmG#IWkuD>b3jWrDNs3WnRM z8y8G(eB5*R#}hX1IePz&!rR1w>ioOcOi Nx2LP0%Q~loCIHA+Lumj2 literal 0 HcmV?d00001 diff --git a/textures/node_W.png b/textures/node_W.png new file mode 100644 index 0000000000000000000000000000000000000000..3646695048cb42eb5da864de978a40c9735e1c2d GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2u+F8O{cC|jvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5t)5S4FWA6eIycq6oHhTY=9E7B_^AxMk{d+zi$y*df-LrQ L^>bP0l+XkK5G6w! literal 0 HcmV?d00001 diff --git a/textures/node_X.png b/textures/node_X.png new file mode 100644 index 0000000000000000000000000000000000000000..3858836a2e6e4a5cbd58d077cd440933112d7d86 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2s7jZ`0!g5dY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ir!Kba4#PI6pPWk?(*3N6@DK^)qE>?O4ldY#ZsiCF95iBPEZ2uIX`4b)W0p3o6)g zmW$!I`uzD#k2EIC5#E$9ETXmdxJ7V=Myj*N#=HG%y;Q_&mrq)Jr>Q`Cs*^qIJCh?t e%Z{7xeYbJWAaZzpq$St0(elF{r5}E)CrAw*+ literal 0 HcmV?d00001 diff --git a/textures/node_Y.png b/textures/node_Y.png new file mode 100644 index 0000000000000000000000000000000000000000..8b97923594f0efa4a4cfae6bbfdcd0da7f546f0a GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n2nB^hi`OH8e+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~=>Ealoaei-rBi{i94(*ix|Bb8*Hs~GoFnP>!=~mE!NHztfvWscwoLL`T6u16q z#F5z}c(b0T`umH{14^H&7aowAId8+19a^t9OaD_U@Ddl9r?oWuD^uKbIh9XpyrCeg NJzf1=);T3K0RT2RL~Z~8 literal 0 HcmV?d00001 diff --git a/textures/node_Z.png b/textures/node_Z.png new file mode 100644 index 0000000000000000000000000000000000000000..d411db23162975692619f3664461807993a3a847 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#A)}n21P8C*rtLr>+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~^>EaloaenS3YrX>p97lOh{ax?VuBWJ4^UG{PuK*{Ha>LBhOu=7=x?jdkG1;(h zZ9={XE z)7O>#Arm8?hQQ1tN8NxzvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!r)5S4F<9u?0f}nwsfx(~u|K~?s?dkDxS(TiU(z0P@hl%t%F14V)2CEV?G8@!+ e#U@>1wPau@UB#*Bu{VklWVENNpUXO@geCwzJ2R31 literal 0 HcmV?d00001 diff --git a/textures/node_bracket2.png b/textures/node_bracket2.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccf9a0b768105ba69debf5d962570b56958fe18 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?hPq;9f+tW&HZvrm#5q4VH#M&W$Yo$~E=o--Nlj5G&n(GMaQE~LNYP7W z2Z~#Gx;TbtoKH?r5Hv6{F!=NT|NMxnJv}}JV#>LHNrXss_=xlH f@aQa2{XE z)7O>#Arm8?f+nBDaW|llY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4iq=@ba4#PIG>!LAZTD@VDRVv|M?MDdwP79+%l*!H828!OPAPe44W@|?l9R9aJ-GN cmwgf=gWMuc#UPE;;~=9wUHx3vIVCg!0G&!QQvd(} literal 0 HcmV?d00001 diff --git a/textures/node_dash.png b/textures/node_dash.png new file mode 100644 index 0000000000000000000000000000000000000000..6f65d3dbc9f2518ac9a1618d1bd3fcfee473f709 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?qS(UJ+g3m!+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vl+#>EaloaXvXgLD0a+z~ImS|MMfR_VoBHxn&?@vO%GpL9X<}ge3>ql#-KOjxnEP ZU{XE z)7O>#Arm8?8h@AnQ(K^rY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4iq=`ba4#PIG>!LAZTD@VDRVv|M?MDdwP79+%gD|l8^*}mC4N9VSzRe&0ew3%21GG YVDO#HsrIimdKI;Vst00dAk-v9sr literal 0 HcmV?d00001 diff --git a/textures/node_empty.png b/textures/node_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9377073cae691249ecfa6e8ae3d9acb8c27137 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt6C{XE z)7O>#Arm8?iqzF5$ss@?+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vl+(>EaloaXvXgLD0a+z~ImS|MMfR_VoBHx#dvJtCQh(WEIEF$y07R_!RVd*k6ca bKFPrF@)Ez?-^qGUK*oBy`njxgN@xNAlcY5q literal 0 HcmV?d00001 diff --git a/textures/node_evil.png b/textures/node_evil.png new file mode 100644 index 0000000000000000000000000000000000000000..bddbdd17e30e25c4ee8f2db9a26660b015516c5b GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?p>EU~1%IHBY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4ixwCba4#PIDa5p*xGQ(LMv-(B9JH3CfS7BQHh6#o*mqy#|xn!tyuUlG6mG9>tkcFPEelF{r5}E)6 C7ebo= literal 0 HcmV?d00001 diff --git a/textures/node_exclamation_mark.png b/textures/node_exclamation_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe743f34e41e020e2181493501afcfe3c3d2e30 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?tl7&SO}s!M+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vl+<>EaloaXvXgLD0a+z~ImS|MMfR_VoDdP?3<7+~{RE@zs(*UXzOlnnFeV?_9Q9 d=2<3ml7Yc<9jBVg!mv(|$)2u$F6*2UngAPMG%f%D literal 0 HcmV?d00001 diff --git a/textures/node_line1.png b/textures/node_line1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0dc7516ec0f25e322f55f7ab80856116fcc339c GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?CeM_6D?ETgvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!y)5S4F{{NSZ4qO*-ei3Vf1{XE z)7O>#Arm8?rk>-zmurARvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!;)5S4FuM}RfyV-$ZBM-yLx7nK)ms!MRH#|9J6Mt)l z#o>%e3#%vRuQYrbrG5FXqUqs>b;j{lGeS*jZamRBS<3kJyrPVDhyHGmou00KF6*2U FngIO(Lx%tW literal 0 HcmV?d00001 diff --git a/textures/node_minus.png b/textures/node_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..515c7ad9fbb5f0b7785b46c2817598fdfbbceb6a GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?ve@L{ojZU+vY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!f)5S4F<9u?0f}nwsfx(~u|K~?s?dkDZa?3!*WJ5w5^DK@iiJ%mdKI;Vst0MPj`r~m)} literal 0 HcmV?d00001 diff --git a/textures/node_multiplication_mark.png b/textures/node_multiplication_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..0135e3229fc43c2a8a4e3f9efe176e041947b477 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?s$}Rk=Jh}!+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVY>EaloaXvXgLD0a+z~ImS|MMfR_VoBHx#dvL+tbriu_M9+C@8{XE z)7O>#Arm8?kS|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!#)5S4F<9u?0f}nwsfx(~u|K~?s?dkDZa?4>Rn;RJXQSv!__VN)1F%$Kq(3Urz iVlhI@&)FxLPT*m%vf$Bpb;bNU$OcbWKbLh*2~7a~IyZ~} literal 0 HcmV?d00001 diff --git a/textures/node_plus.png b/textures/node_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c733c99c5812754f8901ae2139ad37293abce998 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?lA_U9-ETl4+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVM>EaloaXvXgLD0a+z~ImS|MMfR_VoBHxpkoBw2GUXn~=$b9A;C~4GO!ZFRK@r x*{Eo4V6-$-NK5XW?{XE z)7O>#Arm8?j>QSt6+3`JvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5@)5S4FMkpclhmHVq2=cp~&yUa0& zgF$6|SL+ncOYT?94?mmNzOH#|<>9EiZBv%+k6dXSF|onj_083<3+w-TKelANaKu}A TWxHOD literal 0 HcmV?d00001 diff --git a/textures/node_question_mark.png b/textures/node_question_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..c7333862f805bd719686eeceaa72ca4940602240 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?y!F!hIYvMs+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVW>EaloaenOtZ$1VG7H97}|4*f*Kfax^WqI?#RK1$iGpnOboFyt=akR{ E0EQVu&Hw-a literal 0 HcmV?d00001 diff --git a/textures/node_sad.png b/textures/node_sad.png new file mode 100644 index 0000000000000000000000000000000000000000..4cdb3fa0443f77caf19290c29c97cacaaf8fc6e7 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?f$`2AI=Mh0+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vl+&>EaloaXvXgLD0a+z~ImS|MMfR_VoBHx#cjE%?%9xDES;da9JnAEGe|*O`4cZ hQG~A~-$EB728L;A{93sSqz;2D@O1TaS?83{1ORp=HTVDk literal 0 HcmV?d00001 diff --git a/textures/node_smile.png b/textures/node_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7027d087ef51d6257c8594121fb395595a48f9 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?zIk!~vsXYN+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vl+?>EaloaXvXgLD0a+z~ImS|MMfR_VoBHx#cjE%?%9xDES<|a5-YG<3wJaA7_;p hG|qUis8(Yl55tCKoQ87>{I-M4_jL7hS?83{1OWP_IlBM= literal 0 HcmV?d00001 diff --git a/textures/node_star.png b/textures/node_star.png new file mode 100644 index 0000000000000000000000000000000000000000..1a79c860af77a8c4681e39cb0ca4e26a9329b90d GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?o|)|A=e9s0+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~>>EaloaenEfK&}G{JkG)&|An8kV|!#2t^3WnTgR-cqh?eIAN!R*Z$qZu#%OGGV-Gs?@{x#r9zF}?cUBHKf| W?fHHM9RWI-fx*+&&t;ucLK6V-9!k{! literal 0 HcmV?d00001 diff --git a/textures/node_stop.png b/textures/node_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7e3c97183a708bc5a27bd783a962df21236b42 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Arm8?oZiKqo-=?#vY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5b!v)5S4F<9u?0f}nwsfx(~u|K~?s?dkDZa?7B`)W8S?f{wF^tyxr&l;(1b`6L5F X%Q7~_NoyxLf=u;v^>bP0l+XkKA