From bd4ff1d50025f76c70d415db2ff6e387352e0857 Mon Sep 17 00:00:00 2001 From: A S Lewis Date: Wed, 23 Sep 2020 17:01:39 +0100 Subject: [PATCH] Add shift-click, double ink capacity, improve textures --- citysigns.lua | 4 +- customsigns.lua | 41 ++++++- generic.lua | 3 +- init.lua | 11 +- machine.lua | 107 +++++++++++------- serversigns.lua | 18 +++ textures/metrosigns_here_front.png | Bin 0 -> 142 bytes textures/metrosigns_here_width_long_inv.png | Bin 0 -> 273 bytes textures/metrosigns_here_width_medium_inv.png | Bin 0 -> 274 bytes textures/metrosigns_here_width_short_inv.png | Bin 0 -> 269 bytes textures/metrosigns_map_tabyss_gsm4b_line.png | Bin 0 -> 118 bytes .../metrosigns_map_tabyss_gsm4b_station.png | Bin 0 -> 203 bytes textures/metrosigns_map_tabyss_gsm5b_line.png | Bin 0 -> 115 bytes .../metrosigns_map_tabyss_gsm5b_station.png | Bin 0 -> 208 bytes textures/metrosigns_map_tabyss_gsm8b_line.png | Bin 0 -> 117 bytes .../metrosigns_map_tabyss_gsm8b_station.png | Bin 0 -> 212 bytes textures/metrosigns_sign_tabyss_line_gsm1.png | Bin 0 -> 213 bytes .../metrosigns_sign_tabyss_line_gsm1_inv.png | Bin 0 -> 200 bytes textures/metrosigns_sign_tabyss_line_gsm2.png | Bin 0 -> 219 bytes .../metrosigns_sign_tabyss_line_gsm2_inv.png | Bin 0 -> 205 bytes textures/metrosigns_sign_tabyss_line_gsm3.png | Bin 0 -> 215 bytes .../metrosigns_sign_tabyss_line_gsm3_inv.png | Bin 0 -> 199 bytes .../metrosigns_sign_tabyss_line_gsm4a.png | Bin 0 -> 225 bytes .../metrosigns_sign_tabyss_line_gsm4a_inv.png | Bin 0 -> 218 bytes .../metrosigns_sign_tabyss_line_gsm4b.png | Bin 0 -> 228 bytes .../metrosigns_sign_tabyss_line_gsm4b_inv.png | Bin 0 -> 210 bytes .../metrosigns_sign_tabyss_line_gsm5a.png | Bin 0 -> 230 bytes .../metrosigns_sign_tabyss_line_gsm5a_inv.png | Bin 0 -> 216 bytes .../metrosigns_sign_tabyss_line_gsm5b.png | Bin 0 -> 236 bytes .../metrosigns_sign_tabyss_line_gsm5b_inv.png | Bin 0 -> 225 bytes textures/metrosigns_sign_tabyss_line_gsm6.png | Bin 0 -> 222 bytes .../metrosigns_sign_tabyss_line_gsm6_inv.png | Bin 0 -> 202 bytes textures/metrosigns_sign_tabyss_line_gsm7.png | Bin 0 -> 220 bytes .../metrosigns_sign_tabyss_line_gsm7_inv.png | Bin 0 -> 211 bytes .../metrosigns_sign_tabyss_line_gsm8a.png | Bin 0 -> 230 bytes .../metrosigns_sign_tabyss_line_gsm8a_inv.png | Bin 0 -> 207 bytes .../metrosigns_sign_tabyss_line_gsm8b.png | Bin 0 -> 233 bytes .../metrosigns_sign_tabyss_line_gsm8b_inv.png | Bin 0 -> 209 bytes textures/metrosigns_text_width_long_inv.png | Bin 226 -> 238 bytes textures/metrosigns_text_width_medium_inv.png | Bin 226 -> 238 bytes textures/metrosigns_text_width_short_inv.png | Bin 225 -> 236 bytes textures/metrosigns_writer_front.png | Bin 321 -> 449 bytes textures/metrosigns_writer_side.png | Bin 175 -> 351 bytes textures/metrosigns_writer_top.png | Bin 260 -> 405 bytes 44 files changed, 135 insertions(+), 49 deletions(-) create mode 100644 textures/metrosigns_here_front.png create mode 100644 textures/metrosigns_here_width_long_inv.png create mode 100644 textures/metrosigns_here_width_medium_inv.png create mode 100644 textures/metrosigns_here_width_short_inv.png create mode 100644 textures/metrosigns_map_tabyss_gsm4b_line.png create mode 100644 textures/metrosigns_map_tabyss_gsm4b_station.png create mode 100644 textures/metrosigns_map_tabyss_gsm5b_line.png create mode 100644 textures/metrosigns_map_tabyss_gsm5b_station.png create mode 100644 textures/metrosigns_map_tabyss_gsm8b_line.png create mode 100644 textures/metrosigns_map_tabyss_gsm8b_station.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm1.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm1_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm2.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm2_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm3.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm3_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm4a.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm4a_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm4b.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm4b_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm5a.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm5a_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm5b.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm5b_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm6.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm6_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm7.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm7_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm8a.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm8a_inv.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm8b.png create mode 100644 textures/metrosigns_sign_tabyss_line_gsm8b_inv.png diff --git a/citysigns.lua b/citysigns.lua index 7ced8de..95ebbef 100644 --- a/citysigns.lua +++ b/citysigns.lua @@ -313,7 +313,7 @@ if metrosigns.create_all_flag or metrosigns.create_london_flag then minetest.register_node(node, { description = city_descrip.." "..line_descrip.." "..unit_descrip.." sign", - tiles = {img}, + tiles = {img, img, img, img, img.."^[transform4", img}, inventory_image = img, groups = {cracky = 3}, light_source = 5, @@ -779,7 +779,7 @@ if metrosigns.create_all_flag or metrosigns.create_stockholm_flag then minetest.register_node(node, { description = cap_city.." "..route.. " station sign ("..side_descrip.." terminus)", - tiles = {img}, + tiles = {img, img, img, img, img.."^[transform4", img}, inventory_image = img, groups = {cracky = 3}, light_source = 5, diff --git a/customsigns.lua b/customsigns.lua index c022fd2..a67e091 100644 --- a/customsigns.lua +++ b/customsigns.lua @@ -22,6 +22,7 @@ if HAVE_SIGNS_API_FLAG and (metrosigns.create_all_flag or metrosigns.create_text for width, width_descrip in pairs(width_table) do + -- Default sign: text on a white background signs_api.register_sign( ":signs_road", "metrosigns_text_"..width_descrip, @@ -35,7 +36,7 @@ if HAVE_SIGNS_API_FLAG and (metrosigns.create_all_flag or metrosigns.create_text color = "#000", }, node_fields = { - description = "Metrosigns Map Text ("..width_descrip..")", + description = "Metrosigns Text Sign ("..width_descrip..")", tiles = { "metrosigns_text_side.png", "metrosigns_text_side.png", @@ -56,6 +57,44 @@ if HAVE_SIGNS_API_FLAG and (metrosigns.create_all_flag or metrosigns.create_text minetest.override_item("signs_road:metrosigns_text_"..width_descrip, { light_source = 5 }) + -- "You are here sign": text on a reddish background + signs_api.register_sign( + ":signs_road", + "metrosigns_here_"..width_descrip, + { + depth = 2/16, + width = width, + height = 1, + entity_fields = { + size = { x = width, y = 12/16 }, + maxlines = 3, + color = "#000", + }, + node_fields = { + description = "Metrosigns You Are Here Sign ("..width_descrip..")", + tiles = { + "metrosigns_text_side.png", + "metrosigns_text_side.png", + "metrosigns_text_side.png", + "metrosigns_text_side.png", + "metrosigns_text_side.png", + "metrosigns_here_front.png", + }, + inventory_image = "metrosigns_here_width_"..width_descrip.."_inv.png", + }, + } + ) + metrosigns.register_sign( + category, + "signs_road:metrosigns_here_"..width_descrip, + (metrosigns.writer.text_units * width) + ) + + minetest.override_item( + "signs_road:metrosigns_here_"..width_descrip, + { light_source = 5 } + ) + end end diff --git a/generic.lua b/generic.lua index 035e8fd..eb37e90 100644 --- a/generic.lua +++ b/generic.lua @@ -174,7 +174,8 @@ function add_map_unit( minetest.register_node(node, { description = description, - tiles = {img}, + -- Reverse the back image, so map signs can be viewed from the front or back + tiles = {img, img, img, img, img.."^[transform4", img}, inventory_image = img, groups = {cracky = 3}, light_source = 5, diff --git a/init.lua b/init.lua index 33d4c0e..551563d 100644 --- a/init.lua +++ b/init.lua @@ -36,7 +36,7 @@ metrosigns = {} metrosigns.name = "metrosigns" metrosigns.ver_max = 1 -metrosigns.ver_min = 10 +metrosigns.ver_min = 18 metrosigns.ver_rev = 0 metrosigns.writer = {} @@ -87,10 +87,11 @@ metrosigns.writer.cartridge_max = 60000 -- Amount of ink used for one unit metrosigns.writer.cartridge_min = 1000 -- Number of units used for printing various kinds of sign -metrosigns.writer.box_units = 30 -metrosigns.writer.sign_units = 6 -metrosigns.writer.map_units = 12 -metrosigns.writer.text_units = 12 +-- (The printing capacity of a cartridge was doubled in v1.12.0) +metrosigns.writer.box_units = 15 +metrosigns.writer.sign_units = 3 +metrosigns.writer.map_units = 6 +metrosigns.writer.text_units = 6 -- Used in material copied from advtrains_subwayblocks and trainblocks box_groups = {cracky = 3} diff --git a/machine.lua b/machine.lua index 2c65550..f37c8fe 100644 --- a/machine.lua +++ b/machine.lua @@ -97,7 +97,13 @@ function metrosigns.writer.populateoutput(pos) local dropdown_index = 1 inv:set_list("output", {}) - inv:set_size("output", typescount) + -- For aesthetic reasons, I prefer that the first page is a full 8x5 grid, even if all of the + -- slots are empty. Later pages, however, can have exactly as many slots as they need + if typescount > 40 then + inv:set_size("output", typescount) + else + inv:set_size("output", 40) + end if metrosigns.writer.check_supplies(pos) then @@ -126,26 +132,35 @@ function metrosigns.writer.populateoutput(pos) meta:set_string("formspec", "size[11,10]".. -- Cartridges - "label[0,0;Red\nCartridge]" .. - "list[current_name;redcart;1.5,0;1,1;]" .. - "label[0,1;Green\nCartridge]" .. - "list[current_name;greencart;1.5,1;1,1;]" .. - "label[0,2;Blue\nCartridge]" .. - "list[current_name;bluecart;1.5,2;1,1;]" .. + "label[0,0;Red\nCartridge]".. + "list[current_name;redcart;1.5,0;1,1;]".. + "label[0,1;Green\nCartridge]".. + "list[current_name;greencart;1.5,1;1,1;]".. + "label[0,2;Blue\nCartridge]".. + "list[current_name;bluecart;1.5,2;1,1;]".. -- Plastic - "label[0,3;Plastic\nSheet]" .. - "list[current_name;plastic;1.5,3;1,1;]" .. + "label[0,3;Plastic\nSheet]".. + "list[current_name;plastic;1.5,3;1,1;]".. -- Sign categories - "label[0,5;Sign\nCategory]" .. - "dropdown[1.5,5;3.75,1;category;"..dropdown_string..";"..tostring(dropdown_index).."]" .. + "label[0,5;Sign\nCategory]".. + "dropdown[1.5,5;3.75,1;category;"..dropdown_string..";"..tostring(dropdown_index).."]".. -- List of signs - "list[current_name;output;2.8,0;8,5;"..tostring((page-1)*pagesize).."]" .. + "list[current_name;output;2.8,0;8,5;"..tostring((page-1)*pagesize).."]".. -- Player inventory "list[current_player;main;1.5,6.25;8,4;]".. -- Page buttons "button[5.5,5;1,1;prevpage;<<<]".. "button[8.5,5;1,1;nextpage;>>>]".. - "label[6.75,5.25;Page "..page.." of "..maxpage.."]" + "label[6.75,5.25;Page "..page.." of "..maxpage.."]".. + -- List rings + "listring[current_player;main]".. + "listring[current_name;redcart]".. + "listring[current_player;main]".. + "listring[current_name;greencart]".. + "listring[current_player;main]".. + "listring[current_name;bluecart]".. + "listring[current_player;main]".. + "listring[current_name;plastic]" ) meta:set_int("maxpage",maxpage) @@ -157,44 +172,56 @@ end function metrosigns.writer.allow_metadata_inventory_put(pos, listname, index, stack, player) - if listname == "redcart" then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local player_inv = player:get_inventory() + local move_flag - if stack:get_name() == "metrosigns:cartridge_red" then - return 1 - else - return 0 + if listname == "redcart" and stack:get_name() == "metrosigns:cartridge_red" then + return 1 + elseif listname == "greencart" and stack:get_name() == "metrosigns:cartridge_green" then + return 1 + elseif listname == "bluecart" and stack:get_name() == "metrosigns:cartridge_blue" then + return 1 + elseif listname == "plastic" and stack:get_name() == "basic_materials:plastic_sheet" then + return stack:get_count() + end + + -- Cannot rely on the listring to put the right type of cartridge into the right slot; + -- a green cartridge would be put into the red cartridge slot + -- The workaround is to move the green cartridge into the green slot directly + if stack:get_name() == "metrosigns:cartridge_green" and inv:is_empty("greencart") then + + if player_inv:remove_item("main", stack) then + inv:add_item("greencart", stack) + move_flag = true end - elseif listname == "greencart" then + elseif stack:get_name() == "metrosigns:cartridge_blue" and inv:is_empty("bluecart") then - if stack:get_name() == "metrosigns:cartridge_green" then - return 1 - else - return 0 + if player_inv:remove_item("main", stack) then + inv:add_item("bluecart", stack) + move_flag = true end - elseif listname == "bluecart" then + elseif stack:get_name() == "basic_materials:plastic_sheet" and inv:is_empty("plastic") then - if stack:get_name() == "metrosigns:cartridge_blue" then - return 1 - else - return 0 + if player_inv:remove_item("main", stack) then + inv:add_item("plastic", stack) + move_flag = true end - elseif listname == "plastic" then - - if stack:get_name() == "basic_materials:plastic_sheet" then - return stack:get_count() - else - return 0 - end - - else - - return 0 - end + -- In this situation, the list of writeable signs is not updated automatically + if move_flag then + metrosigns.writer.populateoutput(pos) + end + + -- Having put the green cartridge in the green slot, don't put the greed cartridge in the red + -- slot (etc), as well + return 0 + end function metrosigns.writer.can_dig(pos) diff --git a/serversigns.lua b/serversigns.lua index e654270..fa53321 100644 --- a/serversigns.lua +++ b/serversigns.lua @@ -38,6 +38,7 @@ if metrosigns.create_all_flag or metrosigns.create_tabyss_flag then metrosigns.writer.box_units ) + -- Trains add_sign(server, server_descrip, "s1", "Abyssal Express", 1, 1) add_sign(server, server_descrip, "s2", "Fractal Plains", 1, 1) add_sign(server, server_descrip, "s3", "Erosion Trap", 1, 1) @@ -48,11 +49,24 @@ if metrosigns.create_all_flag or metrosigns.create_tabyss_flag then add_sign(server, server_descrip, "r1", "Narsh Express", 1, 1) add_sign(server, server_descrip, "t1", "Tommy's Line", 1, 1) add_sign(server, server_descrip, "t2", "Subway", 1, 1) + -- GS Metro + add_sign(server, server_descrip, "gsm1", "GSM Line 1", 3, 3) + add_sign(server, server_descrip, "gsm2", "GSM Line 2", 3, 3) + add_sign(server, server_descrip, "gsm3", "GSM Line 3", 3, 3) + add_sign(server, server_descrip, "gsm4a", "GSM Line 4A", 3, 3) + add_sign(server, server_descrip, "gsm4b", "GSM Line 4B", 3, 3) + add_sign(server, server_descrip, "gsm5a", "GSM Line 5A", 3, 3) + add_sign(server, server_descrip, "gsm5b", "GSM Line 5B", 3, 3) + add_sign(server, server_descrip, "gsm6", "GSM Line 6", 3, 3) + add_sign(server, server_descrip, "gsm7", "GSM Line 7", 3, 3) + add_sign(server, server_descrip, "gsm8a", "GSM Line 8A", 3, 3) + add_sign(server, server_descrip, "gsm8b", "GSM Line 8B", 3, 3) add_map( server, server_descrip, { + -- Trains ["s1"] = "Abyssal Express", ["s2"] = "Fractal Plains", ["s3"] = "Erosion Trap", @@ -63,6 +77,10 @@ if metrosigns.create_all_flag or metrosigns.create_tabyss_flag then ["r1"] = "Narsh Express", ["t1"] = "Tommy's Line", ["t2"] = "Subway", + -- GS Metro (lines 1-3, 4A, 5A, 6-7, 8A use the same colours as above) + ["gsm4b"] = "GSM Line 4B", + ["gsm5b"] = "GSM Line 5B", + ["gsm8b"] = "GSM Line 8B", }, { ["line"] = "Line", diff --git a/textures/metrosigns_here_front.png b/textures/metrosigns_here_front.png new file mode 100644 index 0000000000000000000000000000000000000000..5b462c8034bdd99fa4345bee6e2ba153140c948b GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DCpqn z;usRq`u4h^D1(B);R`bS4;OT^rnmPPEn)j~{aTaSj#mZ=MgE)4cU)uT5KwSvU|?io j0Wlct=UkqbP0l+XkK*7hlN literal 0 HcmV?d00001 diff --git a/textures/metrosigns_here_width_long_inv.png b/textures/metrosigns_here_width_long_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1ec71f64b0aa72c9b121b6970f9a8ff5be4ab5 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsA!(2i(`mI@6zCdf`=7&CKv6o zo@}pk;ml0E1MM?+HGFzu`P8YP_^7_}IVX>FE&(;Ih0|tM>ReRSZJzdDc|od2(~=1) zd*9q`)DH8A&sJ$vG0XWbdS~sIHT`@dTpn^-9!|`gFLy+Kb$;|Wz)?kC>Pr+u%&t30 z_o~b@mtfCKA-Da5w&dF#LchwFy}6Is0~nC Rc^T+Z22WQ%mvv4FO#lIAX6yg} literal 0 HcmV?d00001 diff --git a/textures/metrosigns_here_width_medium_inv.png b/textures/metrosigns_here_width_medium_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..1bdb39f9f1bf1b3bcf5f35b99992b849629599cc GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsA#^Yi(`mI@6yQ!1rICmu)LSJ zx3ZI;_eiM~?}tF&%m;r?Jg`VG@wvdQvLw<^h?Rp|EHPD8{vfwes=?F$Tn4EgO)A?x zYL=Eizq7&dmzOf9%EsjR>NB?f*y8?Ngv(=|h|0po8-*c}-!y~HJ2Ua0_g+($bwMlk z{q?YWTTOc=xv6aWB+UQTdD)$X)x{UKetdU-o>*{kfocY)rndL(6IV;^80Ka;eO7Ym RISX_ugQu&X%Q~loCID>4VfFw3 literal 0 HcmV?d00001 diff --git a/textures/metrosigns_here_width_short_inv.png b/textures/metrosigns_here_width_short_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..057af4bd8b48f4b9e93d739e41efbdda1013254e GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsA!g_i(`mI@6zC%f`<)wm}^!U zPnOaZIR8>-L7Q-{>%f{-7t6|Y`7Uv#6jVp$k-YUK;_qA%9#*TgyHOGcjk4|FAi Mr>mdKI;Vst05I=lI{*Lx literal 0 HcmV?d00001 diff --git a/textures/metrosigns_map_tabyss_gsm4b_line.png b/textures/metrosigns_map_tabyss_gsm4b_line.png new file mode 100644 index 0000000000000000000000000000000000000000..62a4cb7d3ddbe3d58892fec459617f46036044da GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP*B6u z#WBR9H~G*1|NraRxEO?0XSwq>Fu1k-=TWv5i_qX{a(vL5n83hLwT?qFWW&paKs^ke Lu6{1-oD!M<1hF2( literal 0 HcmV?d00001 diff --git a/textures/metrosigns_map_tabyss_gsm4b_station.png b/textures/metrosigns_map_tabyss_gsm4b_station.png new file mode 100644 index 0000000000000000000000000000000000000000..a1cb743100008e23ffcae398d68b0eef9309228d GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP_Wk1 z#WBR9_vqw@dVv@X(R`@Vz!nV&SK y3*P<2=F6AlvAuAe@r3Z7TBi=ZNzYFdVCLZ<{E`-LqJ;P(Xr#;g&V$RiR@n5kL(Lp00i_ I>zopr0H)U+2LJ#7 literal 0 HcmV?d00001 diff --git a/textures/metrosigns_map_tabyss_gsm5b_station.png b/textures/metrosigns_map_tabyss_gsm5b_station.png new file mode 100644 index 0000000000000000000000000000000000000000..12b4eb41a13b3e39077be7868bf6fc6534949adc GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP_W6< z#WBR9_vqw6t_B4G7t_5{7d<#>bJJ6fr3&5z|0!y+voKW3e_6|<6R=K1RRugE{JMaVDZ9=pf;9~*OyznfTknDd|c z1i5cg2Yef|Hs#qk+7>94yuOq5vOM&dn#hy%s>5t03eJ8lW+yy>u3_+W^>bP0l+XkK DCA&FiflW?PY%5)M(yNXrju;#LUq3g-c5PypkGF3xlVt KpUXO@geCyxC>?$P literal 0 HcmV?d00001 diff --git a/textures/metrosigns_map_tabyss_gsm8b_station.png b/textures/metrosigns_map_tabyss_gsm8b_station.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5979b03c5b22081865d6f0ec08ee5c5d11411f GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP_WI@ z#WBR9H~G*1|NraRxEQ#1HO$@18^_zuCwDLx#5~NH9=?a|#?9LcBo1+WX4;h2zIXS= zEVpUxl1&d;Q#^CFE#5tWbA5FugUMs&s zz%5fyc68>PjZ1^vo}6*<33Bt#=y|bo;*~Qki3}?l7%sfCyLM7#mkiKF44$rjF6*2U FngDeNPX_=1 literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm1.png b/textures/metrosigns_sign_tabyss_line_gsm1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4b034eaa84328c8b36ff7311375afaaa8e0207 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^(P#WBR9_h^u#P=f=9)AIT+ z|I@z;?N;;5uI#wo_lPM=P*CE4dJ4mhki_kO>{|SixqVVTEJ#UoT~`$&dZqu)Z;3^p zVzpLW*k}^>_&@U{*%BLO%b4(1zMsn;be&)RN9?hHf8`PtEe7r8RY2PqJYD@<);T3K F0RXc*M^XR) literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm1_inv.png b/textures/metrosigns_sign_tabyss_line_gsm1_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..169972ccbcea9ee4164ffd63560abcf08fab1740 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_Fa#WBR9H#xw1C0W)z4*}Q$iB}Mpr&r literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm2.png b/textures/metrosigns_sign_tabyss_line_gsm2.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd31be5527247b511902ec42cbbae87597d5c5a GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^nJ#WBR9cWaO%-vI?4r_J?m z{-3|)z3VYkS6TM4vjH48wsmlbT+mKpu+X{eS9jc0URrBKfTCMWqWZiuHk@S>dFTIT zzFeQXLEtHmN$bJ>a)tul$!+fyHoF+@JDB_#0q>y-FKds?NtChPI?yD?P(?PTzD L^>bP0l+XkK{VqnU literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm2_inv.png b/textures/metrosigns_sign_tabyss_line_gsm2_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd6653e6f11da7e5101fae3faf491bd17185f62 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^+Q#WBR9H#x0oe~Y^n zncdpldsfsanLaY=m?(4hM4Lg<)j$6g`D8yyIQcxe(Zdtbv59kfcgAxj8?#F%Sq&Og wue^N2^ku^WSE~g!nuje!Qq@u%vdY*P7DUR}y*;r+3up_2r>mdKI;Vst0939)=l}o! literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm3.png b/textures/metrosigns_sign_tabyss_line_gsm3.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0aec892f8b5bdce33dbe600be27db6de8b8151 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^tL#WBR9cWaO%-vI-TLuvfq zpTF7W5*;mNoX_jDAW5b3SP!2h!#u8n&p(#wf7fw8am3Stvz0^rQ`Yn1f=w|GFUg1e z{LUmjNln4($42&~mJ7^Jdm?K>8eZjOB|UXp_v!7H^&glR-dJ&S_J)K3?PKtC^>bP0 Hl+XkK2aZSl literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm3_inv.png b/textures/metrosigns_sign_tabyss_line_gsm3_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..ac90e86645aa56509d178426cd9964c6a565ff01 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^qK#WBR9H#xhIa=TK1heHan!-$@7rHwH6+RaMlYiiX!ba9&=5UQ0CexdhbN!*{%bZ70YgYj$M+v z$Y+7!S4GhiT-w6?j8eh+TJ^{34a5rSFIXx+_!}X5K~Y}V;=z0E`reJ5=86VZ9pUHQ R?SM8jc)I$ztaD0e0sx(uNYDTP literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm4a_inv.png b/textures/metrosigns_sign_tabyss_line_gsm4a_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..608d17faee91ec0fece18bec6e7f1f957b0451a6 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_gj#WBR9ckkqfd<_a5Ejyo8 zd;9y@-+AShGgTe~DWM4f;j>LB literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm4b.png b/textures/metrosigns_sign_tabyss_line_gsm4b.png new file mode 100644 index 0000000000000000000000000000000000000000..78e68f0e0225b78f3ef79ed7137ba7481f609ac8 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsHo7>#WBR9cWscT&;bPw?wg*G*2&u%qatMFC^+ee>kD6FhADxL3T(nVFDg8c{<~NFQjZDu`HKMpH#R@JbeQd% z{6xPJtqHzL>rVtVSbjWn(D4oT8aIw^r|Fy9c_r8v=guxXq!xDQd8l0>^Pdmg{8C5c Vl{UY%(*jz~;OXk;vd$@?2>_W*OXvUq literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm4b_inv.png b/textures/metrosigns_sign_tabyss_line_gsm4b_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..8f578587a51b0d2a30532dc08b21802bdf1183b9 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_jk#WBR9ck5(tp#usW&XfDT z?=RZ5$~k!MuY=o}S(8N$34S^0%CYb8#Y29|dZO)WEelpTmoAh&{E1=R(#g!JS>?`& zo0#^metb{Cx6wYy|70cqKZ}Qshr;V_NG&_@#Nz(#(-QLTlex8kRxxK>gf<>z{nG!6>e&Y7T_=bP0l+XkK`zB4k literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm5a_inv.png b/textures/metrosigns_sign_tabyss_line_gsm5a_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2ebc4a843c7056612bb17002fa108d9a32f406 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_Ib#WBR9cWtmE*8u|#%lSudk*vThA(c5k@_WryJ7k14)K}C$_4PV_6Zbo4>xg$%Pj{+@Z@O1Ta JS?83{1OUYjNM8T| literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm5b.png b/textures/metrosigns_sign_tabyss_line_gsm5b.png new file mode 100644 index 0000000000000000000000000000000000000000..f46851c6048e89fc716e2302ca92fce4732c5fa1 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsHoD@#WBR9cWKZ;!2=2$%1J>ReMvIV|iE|7boX|w6qezw`@KxUqU!VzrF8kE!rZ`*l8hP$*pa$>ZeH0kvoe2 z&OZ3a-oD~cCEK9_z8MRmwXWq|NK$gR+b=rDWmj|7{i&?w?AF;mzEM+eFsiez`|w_K d{;{uOanlMtPWg!~JPvdOgQu&X%Q~loCIGH!PsIQL literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm5b_inv.png b/textures/metrosigns_sign_tabyss_line_gsm5b_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..44edb9c0af081ecaf679af9694871f83bb775b76 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_0V#WBR9cWZDo-vI>oZ zG3e-?lUlv}kE)=%)Z7P&VXt*0CLbu?G-EsS`H#~Qj`984ziGm{~vTinwRU5#%?g_h}%|KV}>s=MwQ1GI5tRqz0baN$4agHmyHjqobJEnHz|oN zt7|ongyyCVMZHhvJUVZ^gTF|~p=b7ri~1W=4|PRyY}%J_ZGjrfdKI z8_m6S=4SO#U*Q5BPIk^uw%kHFuR@djJJeIO4|VvsJ#Ju{UGgYrqI>_u$M<<_#QcpU txI8|~{7d_g()@dUO!w;KO*d?xGj%%2OGdFDTn)5>!PC{xWt~$(698|dK~Mky literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm7.png b/textures/metrosigns_sign_tabyss_line_gsm7.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2bab817dfffe3c6f5d53db5307e61948266d34 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3_CZ#WBR9cWsa(UxNY1Yq9vV z%)fH?NFFo{c$3?>X`4Yv=*0tXCNMte;8IGur!u|vaP$Wke)|&#YSpS$21jO`*eEHvK_FRJPdxA_D|0@> zHG>Am8TU7~+U3SN^qdVTW_;=?d2FGEu_ANOW@84E(`sGDAxwNgyBIuO{an^LB{Ts5 DY*#?V literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm8a.png b/textures/metrosigns_sign_tabyss_line_gsm8a.png new file mode 100644 index 0000000000000000000000000000000000000000..1a09df52c8baed4bc7eabee39ef6da5a934ab22b GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsHoV}#WBR9cWKZ;!2=2$&g-fz zntt~`K($vH+%uW)V*zT4U|9x@ zxbLu)zse1lCHu=>FsnJV2?`erZ!q^NXxPKjRLXC3|AmwWcS_e|7UR10pA^^CKV)^( W*0)+|Tb2T}p25@A&t;ucLK6TfMN0qx literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm8a_inv.png b/textures/metrosigns_sign_tabyss_line_gsm8a_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..a9386f2693ebdcbb6078eded6cad1e368d169367 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^wM#WBR9H#xE$n#Ub{Gq*{0+3LwR4dAHV_U&?BEBUdhN0W$s9u8OL)$CI w*GqN(>ELG8X-EmdKI;Vst0PLzi{{R30 literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm8b.png b/textures/metrosigns_sign_tabyss_line_gsm8b.png new file mode 100644 index 0000000000000000000000000000000000000000..a04361df06da5c7d09cd9857cf33d5c576456c98 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~FsHn`-#WBR9cWcl^p#}wx*|*A< zf4lGMU*%Ad8B=|^*RsXIg@t|5atVfQf`zi7`?jP9i+64^V~V%> z`KTkY)}K|LsTV2kfBfw338M`yn&Ov#%xBRq*sky`A+4w3POF7dT9-Vhh28p3T6cnX aFuwWX%KGBwv1XtP7(8A5T-G@yGywov7Emex literal 0 HcmV?d00001 diff --git a/textures/metrosigns_sign_tabyss_line_gsm8b_inv.png b/textures/metrosigns_sign_tabyss_line_gsm8b_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcb2878e9d2577635a61790c9a3ded2fa8d0a60 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*AeO zHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs3^|U#WBR9_ieBv-vI>Tf=2DSz*BzJgt_O2IAUI^(LCqxUZ9l3+FH7%nj*_Pq93 zW4x_`FYo!?rcm8LRIrTkYY(yaScpG$%gc(&JJ`kXCEiYOIuVCI@S(f_0000%L_t(Ijm=U)4!|G?Yt8=uCxhFpJ2hVwQ7D3hp2YBul^&zy&Tg;A?=YV9EQBjM-vrC!u3khrXMB u_FD?o^p}tH1k%MOh1jVRCco%=8E>zzIX%T#X3hWr002ovP6b4+LSTY`E%L_t(Ijm=Tf3IHJt(*6HGdryn8GJ+nuASyO(DkTXQD{jDp zfaKWqo%ep$dH_JGsA`0qg;gUVnK>L_t(IjipjS4!|G?YnT1dck;&WMB-4y&0aJiw9rCH!U3+6 z=8}LUNd6-r2}zK&B%#3u4;mVxH6&rM{Rwu#ECpX7{v+;;x!--2bV^V)I$j=lY_2?e zW3+>b9^Go9zCI8{g-?exQ?Gn@nOLdKklw*AjxX^6lej&9*AH0cRR91007*qoM6N<$ Eg6{!A^8f$< delta 139 zcmV;60CfNC0pS6VUVm;$L_t(Ijm=R(3cxT3GiCq(a&}4)XK0~^PAFD1(I`kV4s4u& zCjo%@a;$&#IX@yIq#~NxO07 t?F6|?j<+Rr-B&w)YWJ1Zn)_#b0sd+^I|(=g-2eap07*qoLJ~2U4H>iNkl*1prpthQlzCrVijt91u7y+ z3XYHiM7Xk)6Oh`{TDbxRcc1{728m5UoWj}lIsyrgG}_tudHZHY>jAkCg1Xx2bO?fg zrg7}o2VC*9(mwaf`?*(~v$rV#UboxL_v-`R30`KBTO^5<1%GJ@A%L=2DP-EP$b0S1K(ev0^ll$j2v}FqA`UKYW+% zC9&fC2jI=;^Za-`^1g^{f*F<>sQZzO@BaC&U=RcWP<#xnb#46xB(THvn$_a800000 LNkvXXu0mjfI(4S{ delta 236 zcmVsCGTvWr0Fr;quE*{`T&__7 z{e1WUfV|ewNK_~7T$Tpo5}HETaT1bMC&|ho{-i)Itr0*~er3G}FiBMn=6&ZE8^|KS zEiz^Ut()oU5cHsL1${9s0ub%|yakx9#%lE%4RkH%9YIPt8v|%PzIY+VYg`0`a!sy& m>cLtrf$?L+$auuo@B9VHSwpwBn#H;R0000#+OFHv(J9wtu5@Vs{GMRKS*u?br~J zG6h|6{(NboKC^op1y*)W#c?e=r;?MbNucMi`(=wiTljX-s@oCRss!i8Xtj#9g`Bod zwfpo=lC4@1l31ES+3WV@H^xp)vl08k!=i2S|YBJQSCChm*D Q00000NkvXXt^-0~f`+wz*8l(j delta 88 zcmcc5w4QN7T%e7oi(`mIZ*opS>A&+1j0uf~uacQOFWuOYV#^Ey!j`ipel?i5Mwqup p${_22f)T?sLk~s++ny0NklXEQXn#{Dt)gL&D>|Z+`F1OaSOOjyZOvX^K*c6C3#Y z{Ki*Q!}ezjz}3Z?s5bE~GvB+XTL3~^9JCO$%&N;^pWr~x_kS-mO=AF7I_VcoY47ET z$N}INFGV6@5fO6=kFO7lwks<4UzR0hS&kk2Mobeel`ksd1o`0?g|Yk)ziizObLO T8?7B400000NkvXXu0mjfC;E}4 delta 175 zcmbQr+`=>=ww__4r;B5VMQ?IWLFvEq4vYznhOd&D3|06~y*2=W8}@se6tC|{v1JAU zVZF003_kqAC#^0XFfeFnZES2@`0=0gn@!*O!K!5(gt9U+5;8I}7Hr~vCF;7tE6JPv zEBEpPH+$VVcN{o)u<;-eZ{RLyWM=1ckcbGFVdQ&MBb@0QeC=xc~qF