From acf7361c765d1fa203701fdbe42f796511d2db2b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Rollo Date: Sun, 9 Dec 2018 17:17:14 +0100 Subject: [PATCH] Added some Scifi monitors --- depends.txt | 1 + functions.lua | 98 +++++++++++++- init.lua | 8 ++ nodes.lua | 160 +++------------------- scifi.lua | 36 ----- scifi_nodes.lua | 169 ++++++++++++++++++++++++ svg/scifi_monitors.svg | 68 +++++----- textures/digiterms_scifi_glscrn.png | Bin 267 -> 238 bytes textures/digiterms_scifi_monitor.png | Bin 0 -> 1209 bytes textures/digiterms_scifi_tallscreen.png | Bin 0 -> 1154 bytes textures/digiterms_scifi_widescreen.png | Bin 0 -> 1089 bytes 11 files changed, 318 insertions(+), 222 deletions(-) delete mode 100644 scifi.lua create mode 100644 scifi_nodes.lua create mode 100644 textures/digiterms_scifi_monitor.png create mode 100644 textures/digiterms_scifi_tallscreen.png create mode 100644 textures/digiterms_scifi_widescreen.png diff --git a/depends.txt b/depends.txt index 36dd5c2..cf4425b 100644 --- a/depends.txt +++ b/depends.txt @@ -1,3 +1,4 @@ display_api font_api digilines +scifi_nodes? diff --git a/functions.lua b/functions.lua index 0fcfd26..50c69f2 100644 --- a/functions.lua +++ b/functions.lua @@ -18,8 +18,6 @@ along with signs. If not, see . --]] -digiterms.columns = 30 - local function get_lines(pos) local lines = {} local meta = minetest.get_meta(pos) @@ -74,8 +72,96 @@ local function push_text(lines, text, maxlines, maxcolumns) end function digiterms.push_text_on_screen(pos, text) - local lines = get_lines(pos) - push_text(lines, text, 6, digiterms.columns) - set_lines(pos, lines) - display_api.update_entities(pos) + local def = minetest.registered_nodes[minetest.get_node(pos).name] + if def.display_entities and def.display_entities["digiterms:screen"] then + def = def.display_entities["digiterms:screen"] + if def.lines and def.columns then + local lines = get_lines(pos) + push_text(lines, text, def.lines, def.columns) + set_lines(pos, lines) + display_api.update_entities(pos) + else + minetest.log("warning", "[digiterms] At "..minetest.pos_to_string(pos) + ..", digiterms:screen entity should have 'lines' and 'columns' attribures.") + end + else + minetest.log("warning", "[digiterms] Node at "..minetest.pos_to_string(pos) + .." does not have digiterms:screen entity.") + end +end + +local node_def_defaults = { + groups = { display_api = 1}, + on_place = display_api.on_place, + on_destruct = display_api.on_destruct, + on_rotate = display_api.on_rotate, + on_punch = display_api.update_entities, + on_construct = function(pos) + minetest.get_meta(pos):set_string("formspec", + "field[channel;Channel;${channel}]") + display_api.on_construct(pos) + end, + on_receive_fields = function(pos, formname, fields, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return + end + + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + digiline = { + wire = { use_autoconnect = false }, + receptor = {}, + effector = { + action = function(pos, _, channel, msg) + if channel ~= minetest.get_meta(pos):get_string("channel") then + return + end + digiterms.push_text_on_screen(pos, msg) + end, + }, + }, +} + +function superpose_table(base, exceptions) + local result = table.copy(base) + for key, value in pairs(exceptions) do + if type(value) == 'table' then + result[key] = superpose_table(result[key] or {}, value) + else + result[key] = value + end + end + return result +end + +function digiterms.register_monitor( + nodename, nodedef, nodedefon, nodedefoff) + local ndef = superpose_table(node_def_defaults, nodedef) + if nodedefon and nodedefoff then + ndef.on_punch = function(pos, node) + display_api.on_destruct(pos) + local meta = minetest.get_meta(pos) + meta:set_string("display_text", nil) + minetest.swap_node(pos, {name = nodename..'_off', + param = node.param, param2 = node.param2 }) + end + minetest.register_node(nodename, superpose_table(ndef, nodedefon)) + + -- Register the corresponding Off node + ndef.drops = nodename + ndef.groups.not_in_creative_inventory = 1 + ndef.on_destruct = nil + ndef.on_punch = function(pos, node) + minetest.swap_node(pos, {name = nodename, -- Stange but it works + param = node.param, param2 = node.param2 }) + display_api.update_entities(pos) + end + minetest.register_node(nodename..'_off', superpose_table(ndef, nodedefoff)) + else + minetest.register_node(nodename, ndef) + end end diff --git a/init.lua b/init.lua index 1d16ddc..bb3cc69 100644 --- a/init.lua +++ b/init.lua @@ -28,4 +28,12 @@ dofile(digiterms.path.."/functions.lua") dofile(digiterms.path.."/nodes.lua") --dofile(digiterms.path.."/crafts.lua") +if minetest.get_modpath("scifi_nodes") then + print ('[digiterms] scifi_nodes present, adding some more nodes') + dofile(digiterms.path.."/scifi_nodes.lua") +else + print ('[digiterms] scifi_nodes absent') +end + + display_api.register_display_entity("digiterms:screen") diff --git a/nodes.lua b/nodes.lua index 8108aed..4b9bdb8 100644 --- a/nodes.lua +++ b/nodes.lua @@ -18,57 +18,6 @@ along with signs. If not, see . --]] -local common_node_def = { - groups = { display_api = 1}, - on_place = display_api.on_place, - on_destruct = display_api.on_destruct, - on_rotate = display_api.on_rotate, - on_punch = display_api.update_entities, - on_construct = function(pos) - minetest.get_meta(pos):set_string("formspec", - "field[channel;Channel;${channel}]") - display_api.on_construct(pos) - end, - on_receive_fields = function(pos, formname, fields, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - - if (fields.channel) then - minetest.get_meta(pos):set_string("channel", fields.channel) - end - end, - digiline = { - wire = { use_autoconnect = false }, - receptor = {}, - effector = { - action = function(pos, _, channel, msg) - if channel ~= minetest.get_meta(pos):get_string("channel") then - return - end - digiterms.push_text_on_screen(pos, msg) - end, - }, - }, -} - -function digiterms.register_monitor(nodename, nodedef) - def = table.copy(common_node_def) - for key, value in pairs(nodedef) do - if key == 'groups' then - def[key] = def[key] or {} - for key2, value2 in pairs(value) do - def[key][key2] = value2 - end - else - def[key] = value - end - end - minetest.register_node(nodename, def) -end - local cathodic_node_box = { type = "fixed", fixed = { @@ -111,9 +60,6 @@ digiterms.register_monitor('digiterms:lcd_monitor', { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = false, - tiles = { "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", - "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", - "digiterms_lcd_back.png", "digiterms_lcd_front.png" }, drawtype = "nodebox", groups = {choppy = 1, oddly_breakable_by_hand = 1}, node_box = lcd_node_box, @@ -129,36 +75,14 @@ digiterms.register_monitor('digiterms:lcd_monitor', { color = "#203020", font_name = digiterms.font, halign="left", valing="top", }, }, - on_punch = function(pos, node) - display_api.on_destruct(pos) - local meta = minetest.get_meta(pos) - meta:set_string("display_text", nil) - minetest.swap_node(pos, {name = 'digiterms:lcd_monitor_off', - param = node.param, param2 = node.param2 }) - end -}) - -minetest.register_node('digiterms:lcd_monitor_off', { - description = "LCD monitor", - paramtype = "light", - paramtype2 = "facedir", - drops = "digiterms:lcd_monitor", - sunlight_propagates = false, +}, { + tiles = { "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", + "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", + "digiterms_lcd_back.png", "digiterms_lcd_front.png" }, +}, { tiles = { "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", "digiterms_lcd_sides.png", "digiterms_lcd_back.png", "digiterms_lcd_front_off.png" }, - drawtype = "nodebox", - groups = {choppy = 1, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1}, - node_box = lcd_node_box, - collision_box = lcd_collision_box, - selection_box = lcd_collision_box, - on_place = display_api.on_place, - on_receive_fields = common_node_def.on_receive_fields, - on_punch = function(pos, node) - minetest.swap_node(pos, {name = 'digiterms:lcd_monitor', - param = node.param, param2 = node.param2 }) - display_api.update_entities(pos) - end, }) digiterms.register_monitor('digiterms:cathodic_amber_monitor', { @@ -166,9 +90,6 @@ digiterms.register_monitor('digiterms:cathodic_amber_monitor', { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = false, - tiles = { "digiterms_amber_top.png", "digiterms_amber_bottom.png", - "digiterms_amber_sides.png", "digiterms_amber_sides.png^[transformFX]", - "digiterms_amber_back.png", "digiterms_amber_front.png",}, drawtype = "nodebox", groups = {choppy = 1, oddly_breakable_by_hand = 1}, node_box = cathodic_node_box, @@ -184,36 +105,14 @@ digiterms.register_monitor('digiterms:cathodic_amber_monitor', { color = "#FFA000", font_name = digiterms.font, halign="left", valing="top", }, }, - on_punch = function(pos, node) - display_api.on_destruct(pos) - local meta = minetest.get_meta(pos) - meta:set_string("display_text", nil) - minetest.swap_node(pos, {name = 'digiterms:cathodic_amber_monitor_off', - param = node.param, param2 = node.param2 }) - end -}) - -minetest.register_node('digiterms:cathodic_amber_monitor_off', { - description = "Cathodic amber monitor", - paramtype = "light", - paramtype2 = "facedir", - drops = "digiterms:cathodic_amber_monitor", - sunlight_propagates = false, - tiles = { "digiterms_amber_top.png", "digiterms_amber_bottom.png", +}, { + tiles = { "digiterms_amber_top.png", "digiterms_amber_bottom.png", "digiterms_amber_sides.png", "digiterms_amber_sides.png^[transformFX]", - "digiterms_amber_back.png", "digiterms_amber_front_off.png",}, - drawtype = "nodebox", - groups = {choppy = 1, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1}, - node_box = cathodic_node_box, - collision_box = cathodic_collision_box, - selection_box = cathodic_collision_box, - on_place = display_api.on_place, - on_receive_fields = common_node_def.on_receive_fields, - on_punch = function(pos, node) - minetest.swap_node(pos, {name = 'digiterms:cathodic_amber_monitor', - param = node.param, param2 = node.param2 }) - display_api.update_entities(pos) - end, + "digiterms_amber_back.png", "digiterms_amber_front.png",}, +}, { + tiles = { "digiterms_amber_top.png", "digiterms_amber_bottom.png", + "digiterms_amber_sides.png", "digiterms_amber_sides.png^[transformFX]", + "digiterms_amber_back.png", "digiterms_amber_front_off.png",}, }) digiterms.register_monitor('digiterms:cathodic_green_monitor', { @@ -221,9 +120,6 @@ digiterms.register_monitor('digiterms:cathodic_green_monitor', { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = false, - tiles = { "digiterms_green_top.png", "digiterms_green_bottom.png", - "digiterms_green_sides.png", "digiterms_green_sides.png^[transformFX]", - "digiterms_green_back.png", "digiterms_green_front.png",}, drawtype = "nodebox", groups = {choppy = 1, oddly_breakable_by_hand = 1}, node_box = cathodic_node_box, @@ -239,34 +135,12 @@ digiterms.register_monitor('digiterms:cathodic_green_monitor', { color = "#00FF00", font_name = digiterms.font, halign="left", valing="top", }, }, - on_punch = function(pos, node) - display_api.on_destruct(pos) - local meta = minetest.get_meta(pos) - meta:set_string("display_text", nil) - minetest.swap_node(pos, {name = 'digiterms:cathodic_green_monitor_off', - param = node.param, param2 = node.param2 }) - end -}) - -minetest.register_node('digiterms:cathodic_green_monitor_off', { - description = "Cathodic green monitor", - paramtype = "light", - paramtype2 = "facedir", - drops = "digiterms:cathodic_green_monitor", - sunlight_propagates = false, +}, { + tiles = { "digiterms_green_top.png", "digiterms_green_bottom.png", + "digiterms_green_sides.png", "digiterms_green_sides.png^[transformFX]", + "digiterms_green_back.png", "digiterms_green_front.png",}, +}, { tiles = { "digiterms_green_top.png", "digiterms_green_bottom.png", "digiterms_green_sides.png", "digiterms_green_sides.png^[transformFX]", "digiterms_green_back.png", "digiterms_green_front_off.png",}, - drawtype = "nodebox", - groups = {choppy = 1, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1}, - node_box = cathodic_node_box, - collision_box = cathodic_collision_box, - selection_box = cathodic_collision_box, - on_place = display_api.on_place, - on_receive_fields = common_node_def.on_receive_fields, - on_punch = function(pos, node) - minetest.swap_node(pos, {name = 'digiterms:cathodic_green_monitor', - param = node.param, param2 = node.param2 }) - display_api.update_entities(pos) - end, }) diff --git a/scifi.lua b/scifi.lua deleted file mode 100644 index ff348a7..0000000 --- a/scifi.lua +++ /dev/null @@ -1,36 +0,0 @@ -digiterms.register_monitor('digiterms:scifi_monitor', { - description = "Scifi monitor", - paramtype = "light", - paramtype2 = "facedir", - use_texture_alpha = true, - sunlight_propagates = true, - light_source = 15, - tiles = { - "digiterms_scifi_glscrn.png", - "digiterms_scifi_glscrn.png", - "digiterms_scifi_glscrn.png", - "digiterms_scifi_glscrn.png", - "digiterms_scifi_glscrn.png", - "digiterms_scifi_glscrn.png", - }, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -0.125, 0.4375, -0.1875, 0.0625}, -- NodeBox1 - {-0.375, -0.5, -0.0625, 0.375, 0.5, 0}, -- NodeBox10 - } - }, - sounds = default.node_sound_glass_defaults(), - groups = {choppy = 1, oddly_breakable_by_hand = 1}, - display_entities = { - ["digiterms:screen"] = { - on_display_update = font_api.on_display_update, - depth = -7/16 - display_api.entity_spacing, - top = -1/16, - size = { x = 23/32, y = 10/16 }, - columns = 20, lines = 4, - color = "#76EDCD", font_name = digiterms.font, halign="left", valing="top", - }, - }, -}) diff --git a/scifi_nodes.lua b/scifi_nodes.lua new file mode 100644 index 0000000..9ab4dcb --- /dev/null +++ b/scifi_nodes.lua @@ -0,0 +1,169 @@ +--[[ + font_api mod for Minetest - Library to add font display capability + to display_api mod. + (c) Pierre-Yves Rollo + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +--]] + +digiterms.register_monitor('digiterms:scifi_glassscreen', { + description = "Digiline glassscreen", + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + sunlight_propagates = true, + light_source = 15, + tiles = { + "digiterms_scifi_glscrn.png", + "digiterms_scifi_glscrn.png", + "digiterms_scifi_glscrn.png", + "digiterms_scifi_glscrn.png", + "digiterms_scifi_glscrn.png", + "digiterms_scifi_glscrn.png", + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.125, 0.4375, -0.1875, 0.0625}, -- NodeBox1 + {-0.375, -0.5, -0.0625, 0.375, 0.5, 0}, -- NodeBox10 + } + }, + sounds = default.node_sound_glass_defaults(), + groups = {choppy = 1, oddly_breakable_by_hand = 1}, + display_entities = { + ["digiterms:screen"] = { + on_display_update = font_api.on_display_update, + depth = -1/32, + top = -5/32, + size = { x = 23/32, y = 10/16 }, + columns = 20, lines = 4, + color = "#76EDCD", font_name = digiterms.font, halign="left", valing="top", + }, + }, +}) + +digiterms.register_monitor("digiterms:scifi_widescreen", { + description = "Digiline widescreen", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "digiterms_scifi_widescreen.png" + }, + drawtype = "nodebox", + paramtype = "light", + light_source = 5, + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.3125, 0.4375, 0.375, 0.3125, 0.5}, -- NodeBox1 + {-0.5, -0.375, 0.375, -0.375, 0.375, 0.5}, -- NodeBox2 + {0.375, -0.375, 0.375, 0.5, 0.375, 0.5}, -- NodeBox3 + {-0.3125, 0.25, 0.375, 0.3125, 0.375, 0.5}, -- NodeBox4 + {-0.3125, -0.375, 0.375, 0.25, -0.25, 0.5}, -- NodeBox5 + {-0.5, -0.3125, 0.375, 0.5, -0.25, 0.5}, -- NodeBox6 + {-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + display_entities = { + ["digiterms:screen"] = { + on_display_update = font_api.on_display_update, + depth = 7/16 - display_api.entity_spacing, + size = { x = 11/16, y = 8/16 }, + columns = 12, lines = 2, + color = "#72ba9a", font_name = digiterms.font, halign="left", valing="top", + }, + }, +}) + +digiterms.register_monitor("digiterms:scifi_tallscreen", { + description = "Digiline tallscreen", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "digiterms_scifi_tallscreen.png" + }, + drawtype = "nodebox", + light_source = 5, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.375, 0.4375, 0.3125, 0.375, 0.5}, -- NodeBox1 + {-0.375, 0.375, 0.375, 0.375, 0.5, 0.5}, -- NodeBox2 + {-0.375, -0.5, 0.375, 0.375, -0.375, 0.5}, -- NodeBox3 + {0.25, -0.3125, 0.375, 0.375, 0.3125, 0.5}, -- NodeBox4 + {-0.375, -0.25, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox5 + {-0.3125, -0.5, 0.375, -0.25, 0.5, 0.5}, -- NodeBox6 + {0.25, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox7 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + display_entities = { + ["digiterms:screen"] = { + on_display_update = font_api.on_display_update, + depth = 7/16 - display_api.entity_spacing, + size = { x = 7/16, y = 12/16 }, + columns = 8, lines = 3, + color = "#72ba9a", font_name = digiterms.font, halign="left", valing="top", + }, + }, +}) + +digiterms.register_monitor("digiterms:scifi_keysmonitor", { + description = "Digiline keyboard and monitor", + tiles = { + "scifi_nodes_keyboard.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "digiterms_scifi_monitor.png" + }, + drawtype = "nodebox", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.4375, 0.5, -0.4375, -0.0625}, -- NodeBox1 + {-0.125, -0.5, 0.375, 0.125, 0.0625, 0.4375}, -- NodeBox2 + {-0.25, -0.5, 0.125, 0.25, -0.4375, 0.5}, -- NodeBox3 + {-0.5, -0.3125, 0.25, 0.5, 0.5, 0.375}, -- NodeBox4 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + display_entities = { + ["digiterms:screen"] = { + on_display_update = font_api.on_display_update, + depth = 4/16 - display_api.entity_spacing, + top = -5/32, + size = { x = 10/16, y = 7/16 }, + columns = 16, lines = 3, + color = "#B4F1EC", font_name = digiterms.font, halign="left", valing="top", + }, + }, +}) diff --git a/svg/scifi_monitors.svg b/svg/scifi_monitors.svg index f97acfb..1a7396b 100644 --- a/svg/scifi_monitors.svg +++ b/svg/scifi_monitors.svg @@ -33,10 +33,10 @@ inkscape:document-units="px" inkscape:current-layer="g1617" showgrid="true" - inkscape:window-width="1462" - inkscape:window-height="707" - inkscape:window-x="299" - inkscape:window-y="40" + inkscape:window-width="1423" + inkscape:window-height="824" + inkscape:window-x="900" + inkscape:window-y="229" inkscape:window-maximized="0" inkscape:grid-bbox="true"> - - - - - @@ -336,7 +313,7 @@ image/svg+xml - + @@ -357,16 +334,33 @@ inkscape:export-filename="/home/pyrollo/dev/minetest-mods/digiterms/textures/digiterms_scifi_glscrn.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> - + x="0" + id="image1262" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAFCAYAAABM6GxJAAADJXpUWHRSYXcgcHJvZmlsZSB0eXBl +IGV4aWYAAHjarZVblusoDEX/GUUPAb0QDAeDWatn0MPvAyZJxVW37qPbJBY+EQK0ZRLOf/4e4S9c +xJKDmudUUoq4tGjhik6O13VZirru+yE+Om96iLZ/YEgCK9djOrd/hW6vAa5bP9714G3HyTvQY8od +UObMjM72yzuQ8KXTfg5lj6v6YTv7K75CPJ3vz+pIRjeIwoFPIYm4z4EsWIFkqbgz7lEKT4XQl6WI +6Ne5C8/uLXmP1N1zF+v2kPdUhJi2Q7rlaOtkX+duZejjiujR5fcf2mvIp9yN0fMY57W7qgmZSmFv +6lEiqwfHA6mUNSyhOb6Gvq9W0DK22JD0jhkPtBaoECPbg5Q6VRp0LtuoYYnKJzssc2NZWhbnwm1B +0dlosEuRHsCIpYEaeAg/10Jr3rLma5Qxcyd4MiHYJPqpha/EP2nPQGPM0iWaybQrV1gXzwLEMia5 +eYcXgNDYObWV39XC6y2M8QNYAUFbac7YYI3HFeIwetWWLM4CP4sa4lXu5H0HQIowt2ExqGilmEiM +EkVndiLkMYNPxcpZlA8QIDPuFAbYiCTAyTznxhin5cvGl4yjBSBMkjjQFKmApWqoH9eMGqompsHM +krllK1aTJE2WUvI0z6jq4urmyd2zF69ZsmbLKXvOueRauAiOMCupeCi5lFIrJq0IXTG6wqPWgw85 +9LAjHX7koxy1oXyaNmupecuttNq5S8fr31P30HMvvZ50opROPe1Mp5/5LGcdqLUhQ4eNNHzkUUZ9 +UttU36nRjdz31GhTm8R0+fmLGmT3Rwiax4lNZiDGSiDukwAKmiezmEmVJ7nJLBbGS2EMamQTTqdJ +DAT1JLZBT3Yvct9yC6a/xY1/RC5MdP8HuTDRbXKfuX1Brdd16skCNN/CmdMoAwfbsFg54xMflv0u +2F3QmxDD3UPuAt+F+7SXDf9tHS8b/nQdXDqpzb9KWxaVLfamRFTTdK3zb/zXbfgo1DEjzfNxW9Td +u3C32h9C2B3LP97+L9nAR7/tLN4FSz/Z2uFq4duV/8zaC2P4eqEyUMMl/AuT5DQTcg0bzgAAAAZi +S0dEAMQAxADE73nNUQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+IMCQogJIuw9wcAAABX +SURBVBjTpc5BCsMgAETR16IoeP97eRgVjYF2VWg22eRvhoH5MK9a6wdSSiDGCEII/jnPE+y9wVoL +vD0ktNbAcRwg53wrzDkv++cPxhjgl6WUW6H3fulfIiIg+TJ8scIAAAAASUVORK5CYII= +" + style="image-rendering:optimizeSpeed" + preserveAspectRatio="none" + height="5" + width="16" /> diff --git a/textures/digiterms_scifi_glscrn.png b/textures/digiterms_scifi_glscrn.png index 46b4a105c4c7488f73a3ee8d5961970d6c4b1543..c1bcdedccca41c33dc8bd94e2d5de261a81df408 100644 GIT binary patch delta 136 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 UHjrX^od5s;07*qoM6N<$f`7sxEC2ui literal 0 HcmV?d00001 diff --git a/textures/digiterms_scifi_widescreen.png b/textures/digiterms_scifi_widescreen.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac56e687cbe6549dfc1b59bdd42acf8e345bb06 GIT binary patch literal 1089 zcmV-H1it%;P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHaw97YhTpY{vjij|F3X`Cs5(11%RfIf?!yd1ks zfk-jx@fh0DFOb{Eg6NlgyOvYjmz}f>T`VtyIy?&|OD`=$Du zQ~CDUMaLjC1?9OcQZpb)GnT{UTpDnahJQ^YwEonyDL5*Q-Ri|E?b#1C~iol&Se2@7&Xk} zY#A+Ki#w8DL32afi8Bkb-Pv>H!kyb3cis`AmnIRT$Syi%Nuy-hClo&#cZr&{5*Uf@ zpr#PZ84FLpdHUNq!ESY4~Hj~QK!A3OzPLkmpYa&lwF*(GzTIK->8i6Kj0W9wg^%H$U4HZ-K zWM;vlCCgTV1|KYh5W~2mO4R71#SmjmF~^cL`D7`im{Q8AWXXyv%yP()a>_ZE0;dJ0 z3sx6sl(NaDo8N2;Tinu?x3Z&rcE8&m_PD1#@1;uBisN5HjZ{<3wKQ%hrRJNp&|*t1 zx6)B-UAynrLytZ6+{;OAQN5Yv@liqzxxyOgB}WsvphK>v3oc^>E|0 zHhL@?>6N{)-&^`-0X-dvB%3xa&9@Vy%pJs-^1LD8q0dMhY;DVQ&UqU%C`z0T>)gMZdJT^IVJG2Ls? z`!~_yh8~IL@16Y{49RvBqH}gP(swVO9e*~2p9~d0dg*_+X19_tpujW$000JJOGiWi z!~nzq#P4~{Q2+n{32;bRa{vGf6951U69E94oEQKA00(qQO+^Rd3<(M?El0vJ?f?J) zS4l)cR5;6Hw6e1L&p-iSVxSNVya6mQM)I0&k~Gc@DMdAafq{WRnq816%};;6$8-S$ z0|NsuGy8~+1qKENhR=V0Qf2^h=n@MUhkjmQ`SIfiMFs!>`}Pt#alH7%00000NkvXX Hu0mjfAzbGH literal 0 HcmV?d00001