diff --git a/baystation12.dme b/baystation12.dme index 44d3553bcb..bc352f8f24 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -176,6 +176,7 @@ #include "code\datums\wires\radio.dm" #include "code\datums\wires\robot.dm" #include "code\datums\wires\smartfridge.dm" +#include "code\datums\wires\smes.dm" #include "code\datums\wires\suit_storage_unit.dm" #include "code\datums\wires\vending.dm" #include "code\datums\wires\wires.dm" @@ -387,12 +388,14 @@ #include "code\game\machinery\computer\pod.dm" #include "code\game\machinery\computer\prisoner.dm" #include "code\game\machinery\computer\prisonshuttle.dm" +#include "code\game\machinery\computer\RCON_Console.dm" #include "code\game\machinery\computer\robot.dm" #include "code\game\machinery\computer\security.dm" #include "code\game\machinery\computer\shuttle.dm" #include "code\game\machinery\computer\skills.dm" #include "code\game\machinery\computer\specops_shuttle.dm" #include "code\game\machinery\computer\station_alert.dm" +#include "code\game\machinery\computer\supply.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_control.dm" @@ -583,6 +586,23 @@ #include "code\game\objects\items\weapons\twohanded.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\wires.dm" +#include "code\game\objects\items\weapons\circuitboards\broken.dm" +#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" +#include "code\game\objects\items\weapons\circuitboards\mecha.dm" +#include "code\game\objects\items\weapons\circuitboards\other.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\research.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm" @@ -1017,15 +1037,22 @@ #include "code\modules\mob\living\carbon\human\login.dm" #include "code\modules\mob\living\carbon\human\logout.dm" #include "code\modules\mob\living\carbon\human\say.dm" -#include "code\modules\mob\living\carbon\human\species.dm" -#include "code\modules\mob\living\carbon\human\species_attack.dm" +#include "code\modules\mob\living\carbon\human\unarmed_attack.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\whisper.dm" -#include "code\modules\mob\living\carbon\human\alien\alien.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_embryo.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_facehugger.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_powers.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_species.dm" +#include "code\modules\mob\living\carbon\human\species\species.dm" +#include "code\modules\mob\living\carbon\human\species\species_attack.dm" +#include "code\modules\mob\living\carbon\human\species\species_hud.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" +#include "code\modules\mob\living\carbon\human\species\station\golem.dm" +#include "code\modules\mob\living\carbon\human\species\station\slime.dm" +#include "code\modules\mob\living\carbon\human\species\station\station.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_embryo.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_facehugger.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" @@ -1370,7 +1397,6 @@ #include "code\modules\scripting\Scanner\Tokens.dm" #include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\security levels.dm" -#include "code\modules\shieldgen\circuits_and_designs.dm" #include "code\modules\shieldgen\emergency_shield.dm" #include "code\modules\shieldgen\energy_field.dm" #include "code\modules\shieldgen\sheldwallgen.dm" diff --git a/code/ATMOSPHERICS/_atmos_setup.dm b/code/ATMOSPHERICS/_atmos_setup.dm index 6f38eb6089..14efbb7de1 100644 --- a/code/ATMOSPHERICS/_atmos_setup.dm +++ b/code/ATMOSPHERICS/_atmos_setup.dm @@ -14,6 +14,10 @@ #define PIPE_COLOR_YELLOW "#ffcc00" #define PIPE_COLOR_PURPLE "#5c1ec0" +#define CONNECT_TYPE_REGULAR 1 +#define CONNECT_TYPE_SUPPLY 2 +#define CONNECT_TYPE_SCRUBBER 4 + var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE) /proc/pipe_color_lookup(var/color) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 43d7d0fe4c..3558e5a9d6 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -18,8 +18,7 @@ Pipelines + Other Objects -> Pipe network layer = 2.4 //under wires with their 2.44 - var/connect_types[] = list(1) //1=regular, 2=supply, 3=scrubber - var/connected_to = 1 //same as above, currently not used for anything + var/connect_types = CONNECT_TYPE_REGULAR var/icon_connect_type = "" //"-supply" or "-scrubbers" var/initialize_directions = 0 @@ -63,29 +62,10 @@ Pipelines + Other Objects -> Pipe network return 0 obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/atmos1, obj/machinery/atmospherics/atmos2) - var/i - var/list1[] = atmos1.connect_types - var/list2[] = atmos2.connect_types - for(i=1,i<=list1.len,i++) - var/j - for(j=1,j<=list2.len,j++) - if(list1[i] == list2[j]) - var/n = list1[i] - return n - return 0 - -obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2) - var/i - var/list1[] = atmos1.connect_types - var/list2[] = pipe2.connect_types - for(i=1,i<=list1.len,i++) - var/j - for(j=1,j<=list2.len,j++) - if(list1[i] == list2[j]) - var/n = list1[i] - return n - return 0 + return (atmos1.connect_types & atmos2.connect_types) +/obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2) + return (atmos1.connect_types & pipe2.connect_types) /obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) if(!istype(icon_manager)) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 649972297a..7d57ea6c8f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -67,19 +67,13 @@ obj/machinery/atmospherics/binary for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 632803cd3b..5ddedd42c8 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -27,7 +27,7 @@ active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP var/last_power_draw = 0 - connect_types = list(1,2,3) //connects to regular, supply and scrubbers pipes + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER //connects to regular, supply and scrubbers pipes var/on = 0 var/pump_direction = 1 //0 = siphoning, 1 = releasing diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index dda2e707a7..60206d54bf 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -248,10 +248,7 @@ continue for(var/obj/machinery/atmospherics/target in get_step(src, P.dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) P.node = target break diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 4bfd61a0a2..315de2ce7c 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -81,10 +81,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node = target break diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 822c9a4d6d..934e1802ec 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -82,27 +82,18 @@ obj/machinery/atmospherics/trinary for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node3 = target break diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 39ca1e25fd..68a1036a78 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -199,26 +199,17 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node3 = target break diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 8af26e51eb..6635631f2d 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -46,10 +46,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node = target break diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index ff43e91385..a602c553d7 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -19,7 +19,7 @@ idle_power_usage = 150 //internal circuitry, friction losses and stuff active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP - connect_types = list(1,2) //connects to regular and supply pipes + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY //connects to regular and supply pipes var/area/initial_loc level = 1 diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 6c71e72e27..8ba175cb9a 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -9,7 +9,7 @@ active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP var/last_power_draw = 0 - connect_types = list(1,3) //connects to regular and scrubber pipes + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER //connects to regular and scrubber pipes level = 1 diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index aa6ac1bf11..9cc6f7451c 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -160,18 +160,12 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break @@ -316,4 +310,8 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) \ No newline at end of file + del(src) + +/obj/machinery/atmospherics/valve/examine(mob/user) + ..() + user << "It is [open ? "open" : "closed"]." diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 34ece52777..808e3580f7 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -277,18 +277,12 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break @@ -324,7 +318,7 @@ name = "Scrubbers pipe" desc = "A one meter section of scrubbers pipe" icon_state = "intact-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -333,7 +327,7 @@ name = "Air supply pipe" desc = "A one meter section of supply pipe" icon_state = "intact-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -359,7 +353,7 @@ name = "Scrubbers pipe" desc = "A one meter section of scrubbers pipe" icon_state = "intact-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -368,7 +362,7 @@ name = "Air supply pipe" desc = "A one meter section of supply pipe" icon_state = "intact-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -532,10 +526,7 @@ if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target connect_directions &= ~direction break @@ -547,10 +538,7 @@ if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target connect_directions &= ~direction break @@ -562,10 +550,7 @@ if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node3 = target connect_directions &= ~direction break @@ -589,7 +574,7 @@ name="Scrubbers pipe manifold" desc = "A manifold composed of scrubbers pipes" icon_state = "map-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -598,7 +583,7 @@ name="Air supply pipe manifold" desc = "A manifold composed of supply pipes" icon_state = "map-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -624,7 +609,7 @@ name="Scrubbers pipe manifold" desc = "A manifold composed of scrubbers pipes" icon_state = "map-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -633,7 +618,7 @@ name="Air supply pipe manifold" desc = "A manifold composed of supply pipes" icon_state = "map-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -796,37 +781,25 @@ for(var/obj/machinery/atmospherics/target in get_step(src,1)) if(target.initialize_directions & 2) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,2)) if(target.initialize_directions & 1) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,4)) if(target.initialize_directions & 8) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node3 = target break for(var/obj/machinery/atmospherics/target in get_step(src,8)) if(target.initialize_directions & 4) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node4 = target break @@ -847,7 +820,7 @@ name="4-way scrubbers pipe manifold" desc = "A manifold composed of scrubbers pipes" icon_state = "map_4way-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -856,7 +829,7 @@ name="4-way air supply pipe manifold" desc = "A manifold composed of supply pipes" icon_state = "map_4way-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -882,7 +855,7 @@ name="4-way scrubbers pipe manifold" desc = "A manifold composed of scrubbers pipes" icon_state = "map_4way-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -891,7 +864,7 @@ name="4-way air supply pipe manifold" desc = "A manifold composed of supply pipes" icon_state = "map_4way-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -974,10 +947,7 @@ /obj/machinery/atmospherics/pipe/cap/initialize() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node = target break @@ -993,7 +963,7 @@ name = "scrubbers pipe endcap" desc = "An endcap for scrubbers pipes" icon_state = "cap-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -1002,7 +972,7 @@ name = "supply pipe endcap" desc = "An endcap for supply pipes" icon_state = "cap-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -1016,7 +986,7 @@ name = "scrubbers pipe endcap" desc = "An endcap for scrubbers pipes" icon_state = "cap-f-scrubbers" - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -1025,7 +995,7 @@ name = "supply pipe endcap" desc = "An endcap for supply pipes" icon_state = "cap-f-supply" - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -1084,10 +1054,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break @@ -1269,10 +1236,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break @@ -1299,7 +1263,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal name="Universal pipe adapter" desc = "An adapter for regular, supply and scrubbers pipes" - connect_types = list(1,2,3) + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0) @@ -1334,7 +1298,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal name="Universal pipe adapter" desc = "An adapter for regular, supply and scrubbers pipes" - connect_types = list(1,2,3) + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0) diff --git a/code/TriDimension/Pipes.dm b/code/TriDimension/Pipes.dm index 776716f567..d6b87f2909 100644 --- a/code/TriDimension/Pipes.dm +++ b/code/TriDimension/Pipes.dm @@ -134,10 +134,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize() for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break @@ -148,10 +145,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize() if(above) for(var/obj/machinery/atmospherics/target in above) if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/down)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break @@ -181,10 +175,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize() for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) if(target.initialize_directions & get_dir(target,src)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node1 = target break @@ -195,10 +186,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize() if(below) for(var/obj/machinery/atmospherics/target in below) if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/up)) - var/c = check_connect_types(target,src) - if (c) - target.connected_to = c - src.connected_to = c + if (check_connect_types(target,src)) node2 = target break @@ -214,7 +202,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers icon_state = "up-scrubbers" name = "upwards scrubbers pipe" desc = "A scrubbers pipe segment to connect upwards." - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -223,7 +211,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply icon_state = "up-supply" name = "upwards supply pipe" desc = "A supply pipe segment to connect upwards." - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -232,7 +220,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers icon_state = "down-scrubbers" name = "downwards scrubbers pipe" desc = "A scrubbers pipe segment to connect downwards." - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -241,7 +229,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply icon_state = "down-supply" name = "downwards supply pipe" desc = "A supply pipe segment to connect downwards." - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm index 41f2c4cdf9..87873775b0 100644 --- a/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm +++ b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm @@ -1,7 +1,7 @@ //Engine control and monitoring console /obj/machinery/computer/engines - name = "engines control console" + name = "engine control console" icon_state = "id" var/state = "status" var/list/engines = list() diff --git a/code/WorkInProgress/computer3/computers/atmos_alert.dm b/code/WorkInProgress/computer3/computers/atmos_alert.dm index 6596b76d7c..00d6f87438 100644 --- a/code/WorkInProgress/computer3/computers/atmos_alert.dm +++ b/code/WorkInProgress/computer3/computers/atmos_alert.dm @@ -8,9 +8,6 @@ desc = "Recieves alerts over the radio." active_state = "alert:2" refresh = 1 - var/list/priority_alarms = list() - var/list/minor_alarms = list() - execute(var/datum/file/program/source) ..(source) @@ -20,14 +17,6 @@ computer.radio.set_frequency(1437,RADIO_ATMOSIA) - - Reset() - ..() - // Never save your work - priority_alarms.Cut() - minor_alarms.Cut() - - // This will be called as long as the program is running on the parent computer // and the computer has the radio peripheral receive_signal(datum/signal/signal) @@ -37,12 +26,12 @@ var/severity = signal.data["alert"] if(!zone || !severity) return - minor_alarms -= zone - priority_alarms -= zone + minor_air_alarms -= zone + priority_air_alarms -= zone if(severity=="severe") - priority_alarms += zone + priority_air_alarms += zone else if (severity=="minor") - minor_alarms += zone + minor_air_alarms += zone update_icon() return @@ -59,9 +48,9 @@ update_icon() ..() - if(priority_alarms.len > 0) + if(priority_air_alarms.len > 0) overlay.icon_state = "alert:2" - else if(minor_alarms.len > 0) + else if(minor_air_alarms.len > 0) overlay.icon_state = "alert:1" else overlay.icon_state = "alert:0" @@ -74,14 +63,14 @@ var/priority_text = "

Priority Alerts:

" var/minor_text = "

Minor Alerts:

" - if(priority_alarms.len) - for(var/zone in priority_alarms) + if(priority_air_alarms.len) + for(var/zone in priority_air_alarms) priority_text += "[format_text(zone)] [topic_link(src,"priority_clear=[ckey(zone)]","X")]
" else priority_text += "No priority alerts detected.
" - if(minor_alarms.len) - for(var/zone in minor_alarms) + if(minor_air_alarms.len) + for(var/zone in minor_air_alarms) minor_text += "[format_text(zone)] [topic_link(src,"minor_clear=[ckey(zone)]","X")]
" else minor_text += "No minor alerts detected.
" @@ -95,16 +84,16 @@ if("priority_clear" in href_list) var/removing_zone = href_list["priority_clear"] - for(var/zone in priority_alarms) + for(var/zone in priority_air_alarms) if(ckey(zone) == removing_zone) usr << "\green Priority Alert for area [zone] cleared." - priority_alarms -= zone + priority_air_alarms -= zone if("minor_clear" in href_list) var/removing_zone = href_list["minor_clear"] - for(var/zone in minor_alarms) + for(var/zone in minor_air_alarms) if(ckey(zone) == removing_zone) usr << "\green Minor Alert for area [zone] cleared." - minor_alarms -= zone + minor_air_alarms -= zone computer.updateUsrDialog() diff --git a/code/WorkInProgress/computer3/computers/scanconsole.dm b/code/WorkInProgress/computer3/computers/scanconsole.dm index 3092f51fb8..446fb5c8ff 100644 --- a/code/WorkInProgress/computer3/computers/scanconsole.dm +++ b/code/WorkInProgress/computer3/computers/scanconsole.dm @@ -189,17 +189,10 @@ target.unique_enzymes = md5(target.real_name) updateappearance(scanner.occupant,target.uni_identity) domutcheck(scanner.occupant, scanner, 1) - - if(ishuman(scanner.occupant)) - target.mutantrace = buffer.mutantrace - scanner.occupant:update_mutantrace() if("se") if(buffer.struc_enzymes) target.struc_enzymes = buffer.struc_enzymes domutcheck(scanner.occupant, scanner, 1) - if(ishuman(scanner.occupant)) - target.mutantrace = buffer.mutantrace - scanner.occupant:update_mutantrace() if("ui") if(buffer.uni_identity) target.uni_identity = buffer.uni_identity diff --git a/code/WorkInProgress/computer3/file.dm b/code/WorkInProgress/computer3/file.dm index 849312ec50..1cbb363894 100644 --- a/code/WorkInProgress/computer3/file.dm +++ b/code/WorkInProgress/computer3/file.dm @@ -140,7 +140,6 @@ /datum/file/data/genome/SE name = "Structural Enzymes" - var/mutantrace = null /datum/file/data/genome/UE name = "Unique Enzymes" diff --git a/code/ZAS/ConnectionGroup.dm b/code/ZAS/ConnectionGroup.dm index 94731228a6..f377efe74f 100644 --- a/code/ZAS/ConnectionGroup.dm +++ b/code/ZAS/ConnectionGroup.dm @@ -62,6 +62,7 @@ Class Procs: /connection_edge/var/list/connecting_turfs = list() /connection_edge/var/direct = 0 +/connection_edge/var/sleeping = 1 /connection_edge/var/coefficient = 0 @@ -88,6 +89,8 @@ Class Procs: /connection_edge/proc/tick() +/connection_edge/proc/recheck() + /connection_edge/proc/flow(list/movable, differential, repelled) for(var/i = 1; i <= movable.len; i++) var/atom/movable/M = movable[i] @@ -147,35 +150,38 @@ Class Procs: if(A.invalid || B.invalid) erase() return - //world << "[id]: Tick [air_master.current_cycle]: \..." - if(direct) - if(air_master.equivalent_pressure(A, B)) - //world << "merged." - erase() - air_master.merge(A, B) - //world << "zones merged." - return - //air_master.equalize(A, B) - A.air.share_ratio(B.air, coefficient) - air_master.mark_zone_update(A) - air_master.mark_zone_update(B) - //world << "equalized." + var/equiv = A.air.share_ratio(B.air, coefficient) var/differential = A.air.return_pressure() - B.air.return_pressure() - if(abs(differential) < vsc.airflow_lightest_pressure) return + if(abs(differential) >= vsc.airflow_lightest_pressure) + var/list/attracted + var/list/repelled + if(differential > 0) + attracted = A.movables() + repelled = B.movables() + else + attracted = B.movables() + repelled = A.movables() - var/list/attracted - var/list/repelled - if(differential > 0) - attracted = A.movables() - repelled = B.movables() - else - attracted = B.movables() - repelled = A.movables() + flow(attracted, abs(differential), 0) + flow(repelled, abs(differential), 1) - flow(attracted, abs(differential), 0) - flow(repelled, abs(differential), 1) + if(equiv) + if(direct) + erase() + air_master.merge(A, B) + return + else + A.air.equalize(B.air) + air_master.mark_edge_sleeping(src) + + air_master.mark_zone_update(A) + air_master.mark_zone_update(B) + +/connection_edge/zone/recheck() + if(!A.air.compare(B.air)) + air_master.mark_edge_active(src) //Helper proc to get connections for a zone. /connection_edge/zone/proc/get_connected_zone(zone/from) @@ -214,20 +220,27 @@ Class Procs: if(A.invalid) erase() return - //world << "[id]: Tick [air_master.current_cycle]: To [B]!" - //A.air.mimic(B, coefficient) - A.air.share_space(air, dbg_out) - air_master.mark_zone_update(A) + + var/equiv = A.air.share_space(air) var/differential = A.air.return_pressure() - air.return_pressure() - if(abs(differential) < vsc.airflow_lightest_pressure) return + if(abs(differential) >= vsc.airflow_lightest_pressure) + var/list/attracted = A.movables() + flow(attracted, abs(differential), differential < 0) - var/list/attracted = A.movables() - flow(attracted, abs(differential), differential < 0) + if(equiv) + A.air.copy_from(air) + air_master.mark_edge_sleeping(src) + + air_master.mark_zone_update(A) + +/connection_edge/unsimulated/recheck() + if(!A.air.compare(air)) + air_master.mark_edge_active(src) proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //This implements a simplistic version of the Stefan-Boltzmann law. - var/energy_delta = ((A.temperature - B.temperature) ** 4) * 5.6704e-8 * connecting_tiles * 2.5 + var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5 var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier)) if(maximum_energy_delta > abs(energy_delta)) if(energy_delta < 0) @@ -235,4 +248,4 @@ proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) energy_delta = maximum_energy_delta A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier) - B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier) \ No newline at end of file + B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier) diff --git a/code/ZAS/Controller.dm b/code/ZAS/Controller.dm index 756887cc09..4ba30f47b3 100644 --- a/code/ZAS/Controller.dm +++ b/code/ZAS/Controller.dm @@ -75,6 +75,7 @@ Class Procs: /datum/controller/air_system/var/list/zones_to_update = list() /datum/controller/air_system/var/list/active_fire_zones = list() /datum/controller/air_system/var/list/active_hotspots = list() +/datum/controller/air_system/var/list/active_edges = list() /datum/controller/air_system/var/active_zones = 0 @@ -97,7 +98,7 @@ Class Procs: set background = 1 #endif - world << "\red \b Processing Geometry..." + world << "Processing Geometry..." sleep(-1) var/start_time = world.timeofday @@ -108,10 +109,15 @@ Class Procs: simulated_turf_count++ S.update_air_properties() - world << {"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds. + world << {"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds. + Total Simulated Turfs: [simulated_turf_count] Total Zones: [zones.len] -Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"} +Total Edges: [edges.len] +Total Active Edges: [active_edges.len ? "[active_edges.len]" : "None"] +Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] +"} + // spawn Start() @@ -169,7 +175,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun if(.) tick_progress = "processing edges" - for(var/connection_edge/edge in edges) + for(var/connection_edge/edge in active_edges) edge.tick() //Process fire zones. @@ -299,6 +305,22 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun zones_to_update.Add(Z) Z.needs_update = 1 +/datum/controller/air_system/proc/mark_edge_sleeping(connection_edge/E) + #ifdef ZASDBG + ASSERT(istype(E) + #endif + if(E.sleeping) return + active_edges.Remove(E) + E.sleeping = 1 + +/datum/controller/air_system/proc/mark_edge_active(connection_edge/E) + #ifdef ZASDBG + ASSERT(istype(E) + #endif + if(!E.sleeping) return + active_edges.Add(E) + E.sleeping = 0 + /datum/controller/air_system/proc/equivalent_pressure(zone/A, zone/B) return A.air.compare(B.air) @@ -309,12 +331,14 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun if(edge.contains_zone(B)) return edge var/connection_edge/edge = new/connection_edge/zone(A,B) edges.Add(edge) + edge.recheck() return edge else for(var/connection_edge/unsimulated/edge in A.edges) if(has_same_air(edge.B,B)) return edge var/connection_edge/edge = new/connection_edge/unsimulated(A,B) edges.Add(edge) + edge.recheck() return edge /datum/controller/air_system/proc/has_same_air(turf/A, turf/B) @@ -325,5 +349,6 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun if(A.temperature != B.temperature) return 0 return 1 -/datum/controller/air_system/proc/remove_edge(connection/c) - edges.Remove(c) \ No newline at end of file +/datum/controller/air_system/proc/remove_edge(connection_edge/E) + edges.Remove(E) + if(!E.sleeping) active_edges.Remove(E) \ No newline at end of file diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm index 1f2cbee8d3..7c9c5f32ed 100644 --- a/code/ZAS/Zone.dm +++ b/code/ZAS/Zone.dm @@ -138,6 +138,10 @@ Class Procs: graphic_add.len = 0 graphic_remove.len = 0 + for(var/connection_edge/E in edges) + if(E.sleeping) + E.recheck() + /zone/proc/dbg_data(mob/M) M << name for(var/g in air.gas) diff --git a/code/ZAS/_gas_mixture_xgm.dm b/code/ZAS/_gas_mixture_xgm.dm index 01f95ee9a5..3390cb9fd3 100644 --- a/code/ZAS/_gas_mixture_xgm.dm +++ b/code/ZAS/_gas_mixture_xgm.dm @@ -17,7 +17,8 @@ //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() var/list/graphic = list() -//Takes a gas string, and the amount of moles to adjust by. Calls update_values() if update isn't 0. + +//Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0. /datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1) if(moles == 0) return @@ -30,6 +31,7 @@ if(update) update_values() + //Same as adjust_gas(), but takes a temperature which is mixed in with the gas. /datum/gas_mixture/proc/adjust_gas_temp(gasid, moles, temp, update = 1) if(moles == 0) @@ -50,7 +52,8 @@ if(update) update_values() -//Variadic version of adjust_gas(). Takes any number of gas and mole pairs, and applies them. + +//Variadic version of adjust_gas(). Takes any number of gas and mole pairs and applies them. /datum/gas_mixture/proc/adjust_multi() ASSERT(!(args.len % 2)) @@ -59,7 +62,8 @@ update_values() -//Variadic version of adjust_gas_temp(). Takes any number of gas, mole, and temperature tuples, and applies them. + +//Variadic version of adjust_gas_temp(). Takes any number of gas, mole and temperature associations and applies them. /datum/gas_mixture/proc/adjust_multi_temp() ASSERT(!(args.len % 3)) @@ -68,8 +72,10 @@ update_values() + //Merges all the gas from another mixture into this one. Respects group_multipliers and adjusts temperature correctly. -/datum/gas_mixture/proc/merge(datum/gas_mixture/giver) +//Does not modify giver in any way. +/datum/gas_mixture/proc/merge(const/datum/gas_mixture/giver) if(!giver) return @@ -89,6 +95,25 @@ update_values() + +/datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer) + for(var/g in sharer.gas) + var/comb = gas[g] + sharer.gas[g] + comb /= volume + sharer.volume + gas[g] = comb * volume + sharer.gas[g] = comb * sharer.volume + + var/our_heatcap = heat_capacity() + var/share_heatcap = sharer.heat_capacity() + + temperature = 0 + if(our_heatcap + share_heatcap) + temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap) + sharer.temperature = temperature + + return 1 + + //Returns the heat capacity of the gas mix based on the specific heat of the gases. /datum/gas_mixture/proc/heat_capacity() . = 0 @@ -96,11 +121,12 @@ . += gas_data.specific_heat[g] * gas[g] . *= group_multiplier + //Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB. /datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy) if (total_moles == 0) return 0 - + var/heat_capacity = heat_capacity() if (thermal_energy < 0) if (temperature < TCMB) @@ -114,43 +140,47 @@ /datum/gas_mixture/proc/get_thermal_energy_change(var/new_temperature) return heat_capacity()*(max(new_temperature, 0) - temperature) + //Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out. #define SPECIFIC_ENTROPY_VACUUM 150000 + //Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas. /datum/gas_mixture/proc/specific_entropy() if (!gas.len || total_moles == 0) return SPECIFIC_ENTROPY_VACUUM - + . = 0 for(var/g in gas) . += gas[g] * specific_entropy_gas(g) . /= total_moles + /* It's arguable whether this should even be called entropy anymore. It's more "based on" entropy than actually entropy now. - + Returns the ideal gas specific entropy of a specific gas in the mix. This is the entropy due to that gas per mole of /that/ gas in the mixture, not the entropy due to that gas per mole of gas mixture. - + For the purposes of SS13, the specific entropy is just a number that tells you how hard it is to move gas. You can replace this with whatever you want. Just remember that returning a SMALL number == adding gas to this gas mix is HARD, taking gas away is EASY, and that returning a LARGE number means the opposite (so a vacuum should approach infinity). - So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way + So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures. */ /datum/gas_mixture/proc/specific_entropy_gas(var/gasid) if (!(gasid in gas) || gas[gasid] == 0) return SPECIFIC_ENTROPY_VACUUM //that gas isn't here - + //group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure) var/molar_mass = gas_data.molar_mass[gasid] var/specific_heat = gas_data.specific_heat[gasid] return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * temperature)) * (molar_mass*specific_heat*temperature)**(2/3) + 1 ) + 15 ) - + //alternative, simpler equation //var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume //return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 ) + //Updates the total_moles count and trims any empty gases. /datum/gas_mixture/proc/update_values() total_moles = 0 @@ -160,12 +190,14 @@ else total_moles += gas[g] + //Returns the pressure of the gas mix. Only accurate if there have been no gas modifications since update_values() has been called. /datum/gas_mixture/proc/return_pressure() if(volume) return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume return 0 + //Removes moles from the gas mixture and returns a gas_mixture containing the removed air. /datum/gas_mixture/proc/remove(amount) amount = min(amount, total_moles * group_multiplier) //Can not take more air than the gas mixture has! @@ -184,6 +216,7 @@ return removed + //Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air. /datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1) if(ratio <= 0) @@ -205,6 +238,7 @@ return removed + //Removes moles from the gas mixture, limited by a given flag. Returns a gax_mixture containing the removed air. /datum/gas_mixture/proc/remove_by_flag(flag, amount) if(!flag || amount <= 0) @@ -228,8 +262,9 @@ return removed + //Copies gas and temperature from another gas_mixture. -/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample) +/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample) gas = sample.gas.Copy() temperature = sample.temperature @@ -237,8 +272,9 @@ return 1 + //Checks if we are within acceptable range of another gas_mixture to suspend processing or merge. -/datum/gas_mixture/proc/compare(datum/gas_mixture/sample) +/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample) if(!sample) return 0 var/list/marked = list() @@ -264,9 +300,11 @@ return 1 + /datum/gas_mixture/proc/react(atom/dump_location) zburn(null) + //Rechecks the gas_mixture and adjusts the graphic list if needed. //Two lists can be passed by reference if you need know specifically which graphics were added and removed. /datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null) @@ -293,6 +331,7 @@ graphic -= graphic_remove . = 1 + //Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier. /datum/gas_mixture/proc/add(datum/gas_mixture/right_side) for(var/g in right_side.gas) @@ -301,6 +340,7 @@ update_values() return 1 + //Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier. /datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side) for(var/g in right_side.gas) @@ -309,6 +349,7 @@ update_values() return 1 + //Multiply all gas amounts by a factor. /datum/gas_mixture/proc/multiply(factor) for(var/g in gas) @@ -317,6 +358,7 @@ update_values() return 1 + //Divide all gas amounts by a factor. /datum/gas_mixture/proc/divide(factor) for(var/g in gas) @@ -325,6 +367,7 @@ update_values() return 1 + //Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table. /datum/gas_mixture/proc/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0) var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66) @@ -369,19 +412,13 @@ update_values() other.update_values() - if(compare(other)) return 1 - else return 0 + return compare(other) + //A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room. /datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air) - if(!unsim_air) - return 0 + return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1) - var/old_pressure = return_pressure() - - share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1) - - return abs(old_pressure - return_pressure()) //Equalizes a list of gas mixtures. Used for pipe networks. /proc/equalize_gases(datum/gas_mixture/list/gases) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c0fa2370ef..67e7dd2948 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -22,8 +22,9 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI //Languages/species/whitelist. var/global/list/all_species[0] var/global/list/all_languages[0] -var/global/list/language_keys[0] //table of say codes for all languages -var/global/list/whitelisted_species = list("Human") +var/global/list/language_keys[0] // Table of say codes for all languages +var/global/list/whitelisted_species = list("Human") // Species that require a whitelist check. +var/global/list/playable_species = list("Human") // A list of ALL playable species, whitelisted, latejoin or otherwise. // Posters var/global/list/poster_designs = list() @@ -106,9 +107,10 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al for (var/language_name in all_languages) var/datum/language/L = all_languages[language_name] - language_keys[":[lowertext(L.key)]"] = L - language_keys[".[lowertext(L.key)]"] = L - language_keys["#[lowertext(L.key)]"] = L + if(!(L.flags & NONGLOBAL)) + language_keys[":[lowertext(L.key)]"] = L + language_keys[".[lowertext(L.key)]"] = L + language_keys["#[lowertext(L.key)]"] = L var/rkey = 0 paths = typesof(/datum/species)-/datum/species @@ -118,6 +120,8 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al S.race_key = rkey //Used in mob icon caching. all_species[S.name] = S + if(!(S.flags & IS_RESTRICTED)) + playable_species += S.name if(S.flags & IS_WHITELISTED) whitelisted_species += S.name @@ -126,7 +130,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al for(var/T in paths) var/datum/poster/P = new T poster_designs += P - + return 1 /* // Uncomment to debug chemical reaction list. diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 3c7582b816..32838765e8 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -38,8 +38,18 @@ proc/random_facial_hair_style(gender, species = "Human") return f_style proc/random_name(gender, species = "Human") - if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + + var/datum/species/current_species + if(species) + current_species = all_species[species] + + if(!current_species || current_species.name == "Human") + if(gender==FEMALE) + return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + else + return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + return current_species.get_random_name(gender) proc/random_skin_tone() switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino")) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9e05a1e39a..365865543f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -23,14 +23,8 @@ /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) - if (!istype(M)) // not sure if this is the right thing... - return 0 - var/messagesource = M - if (can_operate(M)) //Checks if mob is lying down on table for surgery - if (do_surgery(M,user,src)) - return 0 - if (istype(M,/mob/living/carbon/brain)) - messagesource = M:container + if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 + ///////////////////////// user.lastattacked = M M.lastattacker = user @@ -38,125 +32,29 @@ user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) - - //spawn(1800) // this wont work right - // M.lastattacker = null ///////////////////////// var/power = force if(HULK in user.mutations) power *= 2 - if(!istype(M, /mob/living/carbon/human)) - if(istype(M, /mob/living/carbon/slime)) - var/mob/living/carbon/slime/slime = M - if(prob(25)) - user << "\red [src] passes right through [M]!" - return - - if(power > 0) - slime.attacked += 10 - - if(slime.Discipline && prob(50)) // wow, buddy, why am I getting attacked?? - slime.Discipline = 0 - - if(power >= 3) - if(slime.is_adult) - if(prob(5 + round(power/2))) - - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - slime.Victim = null - slime.anchored = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - spawn(0) - if(slime) - slime.canmove = 0 - step_away(slime, user) - if(prob(25 + power)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - else - if(prob(10 + power*2)) - if(slime) - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - - if(slime.Discipline == 1) - slime.attacked = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - slime.Victim = null - slime.anchored = 0 - - - spawn(0) - if(slime && user) - step_away(slime, user) - slime.canmove = 0 - if(prob(25 + power*4)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - - var/showname = "." - if(user) - showname = " by [user]." - if(!(user in viewers(M, null))) - showname = "." - - for(var/mob/O in viewers(messagesource, null)) - if(attack_verb.len) - O.show_message("\red [M] has been [pick(attack_verb)] with [src][showname] ", 1) - else - O.show_message("\red [M] has been attacked with [src][showname] ", 1) - - if(!showname && user) - if(user.client) - user << "\red You attack [M] with [src]. " - - - + // TODO: needs to be refactored into a mob/living level attacked_by() proc. ~Z if(istype(M, /mob/living/carbon/human)) - var/hit = M:attacked_by(src, user, def_zone) - if (hit && hitsound) + var/mob/living/carbon/human/H = M + var/hit = H.attacked_by(src, user, def_zone) + if(hit && hitsound) playsound(loc, hitsound, 50, 1, -1) return hit else + user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!") if (hitsound) playsound(loc, hitsound, 50, 1, -1) switch(damtype) if("brute") - if(istype(src, /mob/living/carbon/slime)) - M.adjustBrainLoss(power) - - else - - M.take_organ_damage(power) - if (prob(33)) // Added blood for whacking non-humans too - var/turf/location = M.loc - if (istype(location, /turf/simulated)) - location:add_blood_floor(M) + M.take_organ_damage(power) + if(prob(33)) // Added blood for whacking non-humans too + var/turf/simulated/location = get_turf(M) + if(istype(location)) location.add_blood_floor(M) if("fire") if (!(COLD_RESISTANCE in M.mutations)) M.take_organ_damage(0, power) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 3532bf7bcd..a2d2ed352d 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -83,6 +83,7 @@ var/limitalienplayers = 0 var/alien_to_human_ratio = 0.5 + var/guests_allowed = 1 var/debugparanoid = 0 var/server @@ -118,6 +119,8 @@ var/use_loyalty_implants = 0 + var/welder_vision = 1 + //Used for modifying movement speed for mobs. //Unversal modifiers var/run_speed = 0 @@ -145,6 +148,8 @@ var/comms_password = "" + var/enter_allowed = 1 + var/use_irc_bot = 0 var/irc_bot_host = "" var/main_irc = "" @@ -170,6 +175,12 @@ // 15, 45, 70 minutes respectively var/list/event_delay_upper = list(EVENT_LEVEL_MUNDANE = 9000, EVENT_LEVEL_MODERATE = 27000, EVENT_LEVEL_MAJOR = 42000) + var/aliens_allowed = 0 + var/ninjas_allowed = 0 + var/abandon_allowed = 1 + var/ooc_allowed = 1 + var/dooc_allowed = 1 + var/dsay_allowed = 1 /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode @@ -367,7 +378,22 @@ config.guest_jobban = 1 if ("guest_ban") - guests_allowed = 0 + config.guests_allowed = 0 + + if ("disable_ooc") + config.ooc_allowed = 0 + + if ("disable_entry") + config.enter_allowed = 0 + + if ("disable_dead_ooc") + config.dooc_allowed = 0 + + if ("disable_dsay") + config.dsay_allowed = 0 + + if ("disable_respawn") + config.abandon_allowed = 0 if ("usewhitelist") config.usewhitelist = 1 @@ -381,6 +407,12 @@ if ("traitor_scaling") config.traitor_scaling = 1 + if ("aliens_allowed") + config.aliens_allowed = 1 + + if ("ninjas_allowed") + config.ninjas_allowed = 1 + if ("objectives_disabled") config.objectives_disabled = 1 @@ -544,6 +576,9 @@ if("expected_round_length") config.expected_round_length = MinutesToTicks(text2num(value)) + if("disable_welder_vision") + config.welder_vision = 0 + if("event_custom_start_mundane") var/values = text2numlist(value, ";") config.event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm index 08c29e1a07..b59d3c73d6 100644 --- a/code/controllers/lighting_controller.dm +++ b/code/controllers/lighting_controller.dm @@ -65,7 +65,7 @@ datum/controller/lighting/proc/process() //Does not loop. Should be run prior to process() being called for the first time. //Note: if we get additional z-levels at runtime (e.g. if the gateway thin ever gets finished) we can initialize specific //z-levels with the z_level argument -datum/controller/lighting/proc/Initialize(var/z_level) +datum/controller/lighting/proc/initializeLighting(var/z_level) processing = 0 spawn(-1) set background = 1 diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 0a7c6c1a23..1e972dd46d 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -84,7 +84,7 @@ datum/controller/game_controller/proc/setup() if(ticker) ticker.pregame() - lighting_controller.Initialize() + lighting_controller.initializeLighting() datum/controller/game_controller/proc/setup_objects() diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index d5503890a2..679c7a09bc 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -67,14 +67,6 @@ datum/controller/vote current_votes.Cut() additional_text.Cut() - /* if(auto_muted && !ooc_allowed) - auto_muted = 0 - ooc_allowed = !( ooc_allowed ) - world << "The OOC channel has been automatically enabled due to vote end." - log_admin("OOC was toggled automatically due to vote end.") - message_admins("OOC has been toggled on automatically.") - */ - proc/get_result() //get the highest number of votes var/greatest_votes = 0 @@ -262,27 +254,6 @@ datum/controller/vote if(mode == "gamemode" && going) going = 0 world << "Round start has been delayed." - /* if(mode == "crew_transfer" && ooc_allowed) - auto_muted = 1 - ooc_allowed = !( ooc_allowed ) - world << "The OOC channel has been automatically disabled due to a crew transfer vote." - log_admin("OOC was toggled automatically due to crew_transfer vote.") - message_admins("OOC has been toggled off automatically.") - if(mode == "gamemode" && ooc_allowed) - auto_muted = 1 - ooc_allowed = !( ooc_allowed ) - world << "The OOC channel has been automatically disabled due to the gamemode vote." - log_admin("OOC was toggled automatically due to gamemode vote.") - message_admins("OOC has been toggled off automatically.") - if(mode == "custom" && ooc_allowed) - auto_muted = 1 - ooc_allowed = !( ooc_allowed ) - world << "The OOC channel has been automatically disabled due to a custom vote." - log_admin("OOC was toggled automatically due to custom vote.") - message_admins("OOC has been toggled off automatically.") - */ - - time_remaining = round(config.vote_period/10) return 1 diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 3df48454de..e666a03653 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -268,7 +268,6 @@ client body += "" if(ishuman(D)) body += "" - body += "" body += "" body += "" body += "" @@ -582,7 +581,7 @@ client usr << "This can only be used on instances of type /mob/living/carbon/human" return - H.makeSkeleton() + H.ChangeToSkeleton() href_list["datumrefresh"] = href_list["make_skeleton"] else if(href_list["delall"]) @@ -744,27 +743,6 @@ client return holder.Topic(href, list("makeai"=href_list["makeai"])) - else if(href_list["setmutantrace"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["setmutantrace"]) - if(!istype(H)) - usr << "This can only be done to instances of type /mob/living/carbon/human" - return - - var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox") - switch(new_mutantrace) - if(null) - return - if("NONE") - new_mutantrace = "" - if(!H) - usr << "Mob doesn't exist anymore" - return - if(H.dna) - H.dna.mutantrace = new_mutantrace - H.update_mutantrace() - else if(href_list["setspecies"]) if(!check_rights(R_SPAWN)) return @@ -921,6 +899,7 @@ client del(I) return + H.internal_organs |= I H.internal_organs_by_name[organ_slot] = I usr << "Added new [new_organ] to [H] as slot [organ_slot]." else diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 0d817b7c8d..4ff625defb 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -16,11 +16,11 @@ New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) ..() - if(!Init(arglist(args))) + if(!initTeleport(arglist(args))) return 0 return 1 - proc/Init(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout) + proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout) if(!setTeleatom(ateleatom)) return 0 if(!setDestination(adestination)) diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm new file mode 100644 index 0000000000..17b232dd54 --- /dev/null +++ b/code/datums/wires/smes.dm @@ -0,0 +1,60 @@ +/datum/wires/smes + holder_type = /obj/machinery/power/smes/buildable + wire_count = 5 + +var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable +var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s +var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s +var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks +var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable + + +/datum/wires/smes/CanUse(var/mob/living/L) + var/obj/machinery/power/smes/buildable/S = holder + if(S.open_hatch) + return 1 + return 0 + + +/datum/wires/smes/GetInteractWindow() + var/obj/machinery/power/smes/buildable/S = holder + . += ..() + . += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]
" + . += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]
" + . += "The blue light is [S.RCon ? "on" : "off"]" + + +/datum/wires/smes/UpdateCut(var/index, var/mended) + var/obj/machinery/power/smes/buildable/S = holder + switch(index) + if(SMES_WIRE_RCON) + S.RCon = mended + if(SMES_WIRE_INPUT) + S.input_cut = !mended + if(SMES_WIRE_OUTPUT) + S.output_cut = !mended + if(SMES_WIRE_GROUNDING) + S.grounding = mended + if(SMES_WIRE_FAILSAFES) + S.safeties_enabled = mended + + +/datum/wires/smes/UpdatePulsed(var/index) + var/obj/machinery/power/smes/buildable/S = holder + switch(index) + if(SMES_WIRE_RCON) + if(S.RCon) + S.RCon = 0 + spawn(10) + S.RCon = 1 + if(SMES_WIRE_INPUT) + S.toggle_input() + if(SMES_WIRE_OUTPUT) + S.toggle_output() + if(SMES_WIRE_GROUNDING) + S.grounding = 0 + if(SMES_WIRE_FAILSAFES) + if(S.safeties_enabled) + S.safeties_enabled = 0 + spawn(10) + S.safeties_enabled = 1 \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 79074cfbe6..0921cfabd9 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -206,14 +206,6 @@ name = "warning cone" icon_state = "cone" -/obj/item/weapon/rack_parts - name = "rack parts" - desc = "Parts of a rack." - icon = 'icons/obj/items.dmi' - icon_state = "rack_parts" - flags = FPRINT | TABLEPASS| CONDUCT - matter = list("metal" = 3750) - /*/obj/item/weapon/syndicate_uplink name = "station bounced radio" desc = "Remain silent about this..." @@ -292,36 +284,6 @@ w_class = 2.0 flags = FPRINT | TABLEPASS | NOSHIELD -/obj/item/weapon/table_parts - name = "table parts" - desc = "Parts of a table. Poor table." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "table_parts" - matter = list("metal" = 3750) - flags = FPRINT | TABLEPASS| CONDUCT - attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") - -/obj/item/weapon/table_parts/reinforced - name = "reinforced table parts" - desc = "Hard table parts. Well...harder..." - icon = 'icons/obj/items.dmi' - icon_state = "reinf_tableparts" - matter = list("metal" = 7500) - flags = FPRINT | TABLEPASS| CONDUCT - -/obj/item/weapon/table_parts/wood - name = "wooden table parts" - desc = "Keep away from fire." - icon_state = "wood_tableparts" - flags = null - -/obj/item/weapon/table_parts/gambling - name = "gamble table parts" - desc = "Keep away from security." - icon_state = "gamble_tableparts" - flags = null - /obj/item/weapon/wire desc = "This is just a simple piece of regular insulated wire." name = "wire" @@ -629,9 +591,9 @@ icon = 'icons/obj/wizard.dmi' icon_state = "ectoplasm" -/obj/item/weapon/research//Makes testing much less of a pain -Sieve - name = "research" +/obj/item/weapon/research + name = "research debugging device" + desc = "Instant research tool. For testing purposes only." icon = 'icons/obj/stock_parts.dmi' - icon_state = "capacitor" - desc = "A debug item for research." - origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;phorontech=8;engineering=8" + icon_state = "smes_coil" + origin_tech = "materials=19;programming=19;magnets=19;powerstorage=19;bluespace=19;combat=19;biotech=19;syndicate=19;phorontech=19;engineering=19" diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm index 0af47ba12c..1aef60bf05 100644 --- a/code/defines/procs/AStar.dm +++ b/code/defines/procs/AStar.dm @@ -38,148 +38,144 @@ length to avoid portals or something i guess?? Not that they're counted right no PriorityQueue - var/L[] - var/cmp + var/list/queue + var/proc/comparison_function + New(compare) - L = new() - cmp = compare - proc - IsEmpty() - return !L.len - Enqueue(d) - var/i - var/j - L.Add(d) - i = L.len - j = i>>1 - while(i > 1 && call(cmp)(L[j],L[i]) > 0) - L.Swap(i,j) - i = j - j >>= 1 + queue = list() + comparison_function = compare - Dequeue() - if(!L.len) return 0 - . = L[1] - Remove(1) + proc/IsEmpty() + return !queue.len - Remove(i) - if(i > L.len) return 0 - L.Swap(i,L.len) - L.Cut(L.len) - if(i < L.len) - _Fix(i) - _Fix(i) - var/child = i + i - var/item = L[i] - while(child <= L.len) - if(child + 1 <= L.len && call(cmp)(L[child],L[child + 1]) > 0) - child++ - if(call(cmp)(item,L[child]) > 0) - L[i] = L[child] - i = child - else - break - child = i + i - L[i] = item - List() - var/ret[] = new() - var/copy = L.Copy() - while(!IsEmpty()) - ret.Add(Dequeue()) - L = copy - return ret - RemoveItem(i) - var/ind = L.Find(i) - if(ind) - Remove(ind) -PathNode - var/datum/source - var/PathNode/prevNode - var/f - var/g - var/h - var/nt // Nodes traversed - New(s,p,pg,ph,pnt) - source = s - prevNode = p - g = pg - h = ph - f = g + h - source.bestF = f - nt = pnt + proc/Enqueue(var/data) + queue.Add(data) + var/index = queue.len -datum - var/bestF -proc - PathWeightCompare(PathNode/a, PathNode/b) - return a.f - b.f + //From what I can tell, this automagically sorts the added data into the correct location. + while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0) + queue.Swap(index, index / 2) + index /= 2 - AStar(start,end,adjacent,dist,maxnodes,maxnodedepth = 30,mintargetdist,minnodedist,id=null, var/turf/exclude=null) + proc/Dequeue() + if(!queue.len) + return 0 + return Remove(1) -// world << "A*: [start] [end] [adjacent] [dist] [maxnodes] [maxnodedepth] [mintargetdist], [minnodedist] [id]" - var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) - var/closed[] = new() - var/path[] - start = get_turf(start) - if(!start) return 0 + proc/Remove(var/index) + if(index > queue.len) + return 0 - open.Enqueue(new /PathNode(start,null,0,call(start,dist)(end))) + var/thing = queue[index] + queue.Swap(index, queue.len) + queue.Cut(queue.len) + if(index < queue.len) + FixQueue(index) + return thing - while(!open.IsEmpty() && !path) - { - var/PathNode/cur = open.Dequeue() - closed.Add(cur.source) + proc/FixQueue(var/index) + var/child = 2 * index + var/item = queue[index] - var/closeenough - if(mintargetdist) - closeenough = call(cur.source,dist)(end) <= mintargetdist - - if(cur.source == end || closeenough) - path = new() - path.Add(cur.source) - while(cur.prevNode) - cur = cur.prevNode - path.Add(cur.source) + while(child <= queue.len) + if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0) + child++ + if(call(comparison_function)(item, queue[child]) > 0) + queue[index] = queue[child] + index = child + else break + child = 2 * index + queue[index] = item - var/L[] = call(cur.source,adjacent)(id) - if(minnodedist && maxnodedepth) - if(call(cur.source,minnodedist)(end) + cur.nt >= maxnodedepth) - continue - else if(maxnodedepth) - if(cur.nt >= maxnodedepth) - continue + proc/List() + return queue.Copy() - for(var/datum/d in L) - if(d == exclude) - continue - var/ng = cur.g + call(cur.source,dist)(d) - if(d.bestF) - if(ng + call(d,dist)(end) < d.bestF) - for(var/i = 1; i <= open.L.len; i++) - var/PathNode/n = open.L[i] - if(n.source == d) - open.Remove(i) - break + proc/Length() + return queue.len + + proc/RemoveItem(data) + var/index = queue.Find(data) + if(index) + return Remove(index) + +PathNode + var/datum/position + var/PathNode/previous_node + + var/best_estimated_cost + var/estimated_cost + var/known_cost + var/cost + var/nodes_traversed + + New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) + position = _position + previous_node = _previous_node + + known_cost = _known_cost + cost = _cost + estimated_cost = cost + known_cost + + best_estimated_cost = estimated_cost + nodes_traversed = _nodes_traversed + +proc/PathWeightCompare(PathNode/a, PathNode/b) + return a.estimated_cost - b.estimated_cost + +proc/AStar(var/start, var/end, var/proc/adjacent, var/proc/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude) + var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) + var/list/closed = list() + var/list/path + var/list/path_node_by_position = list() + start = get_turf(start) + if(!start) + return 0 + + open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0)) + + while(!open.IsEmpty() && !path) + var/PathNode/current = open.Dequeue() + closed.Add(current.position) + + if(current.position == end || call(current.position, dist)(end) <= min_target_dist) + path = new /list(current.nodes_traversed + 1) + path[path.len] = current.position + var/index = path.len - 1 + + while(current.previous_node) + current = current.previous_node + path[index--] = current.position + break + + if(min_node_dist && max_node_depth) + if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth) + continue + + if(max_node_depth) + if(current.nodes_traversed >= max_node_depth) + continue + + for(var/datum/datum in call(current.position, adjacent)(id)) + if(datum == exclude) + continue + + var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum) + + //handle removal of sub-par positions + if(datum in path_node_by_position) + var/PathNode/target = path_node_by_position[datum] + if(target.best_estimated_cost) + if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost) + open.RemoveItem(target) else continue - open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1)) - if(maxnodes && open.L.len > maxnodes) - open.L.Cut(open.L.len) - } + var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1) + path_node_by_position[datum] = next_node + open.Enqueue(next_node) - var/PathNode/temp - while(!open.IsEmpty()) - temp = open.Dequeue() - temp.source.bestF = 0 - while(closed.len) - temp = closed[closed.len] - temp.bestF = 0 - closed.Cut(closed.len) + if(max_nodes && open.Length() > max_nodes) + open.Remove(open.Length()) - if(path) - for(var/i = 1; i <= path.len/2; i++) - path.Swap(i,path.len-i+1) - - return path + return path diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 7f115404b3..f875b9975c 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -770,9 +770,16 @@ var/list/ghostteleportlocs = list() /area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. name = "Engineering Substation" +// No longer used: /area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room. name = "Medical Research Substation" +/area/maintenance/substation/medical // Medbay + name = "Medical Substation" + +/area/maintenance/substation/research // Research + name = "Research Substation" + /area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ... name = "Civilian East Substation" @@ -1040,6 +1047,7 @@ var/list/ghostteleportlocs = list() /area/holodeck/source_space name = "\improper Holodeck - Space" + has_gravity = 0 diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 32c7ef1dd6..e30de18f4e 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -80,7 +80,6 @@ var/global/list/datum/dna/gene/dna_genes[0] // From old dna. var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. - var/mutantrace = null // The type of mutant race the player is, if applicable (i.e. potato-man) var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, // New stuff @@ -92,7 +91,6 @@ var/global/list/datum/dna/gene/dna_genes[0] var/datum/dna/new_dna = new() new_dna.unique_enzymes=unique_enzymes new_dna.b_type=b_type - new_dna.mutantrace=mutantrace new_dna.real_name=real_name new_dna.species=species for(var/b=1;b<=DNA_SE_LENGTH;b++) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 534d6d109c..e2c41fcbb4 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -70,7 +70,6 @@ /datum/game_mode/traitor/autotraitor/post_setup() ..() - abandon_allowed = 1 traitorcheckloop() /datum/game_mode/traitor/autotraitor/proc/traitorcheckloop() diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 59aede3ac9..26e38476b7 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -26,7 +26,7 @@ var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events. - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. + if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. eventNumbersToPickFrom += 3 switch(pick(eventNumbersToPickFrom)) if(1) @@ -74,7 +74,7 @@ del(P) */ if(3) - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. + if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. if(4) mini_blob_event() diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 3dac9f2148..d8b22e629c 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -90,7 +90,6 @@ I decided to scrap round-specific objectives since keeping track of them would r When I already created about 4 new objectives, this doesn't seem terribly important or needed. */ -/var/global/toggle_space_ninja = 0//If ninjas can spawn or not. /var/global/sent_ninja_to_station = 0//If a ninja is already on the station. var/ninja_selection_id = 1 @@ -437,7 +436,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. if(!ticker) alert("Wait until the game starts") return - if(!toggle_space_ninja) + if(!config.ninjas_allowed) alert("Space Ninjas spawning is disabled.") return @@ -467,7 +466,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. if(!ticker.mode) alert("The game hasn't started yet!") return - if(!toggle_space_ninja) + if(!config.ninjas_allowed) alert("Space Ninjas spawning is disabled.") return if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No") @@ -531,7 +530,6 @@ As such, it's hard-coded for now. No reason for it not to be, really. else equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) - equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) var/obj/item/weapon/rig/light/ninja/ninjasuit = new(src) @@ -546,16 +544,16 @@ As such, it's hard-coded for now. No reason for it not to be, really. equip_to_slot_or_del(ninjasuit,slot_back) - if(istype(wear_suit,/obj/item/weapon/rig)) - var/obj/item/weapon/rig/rig = wear_suit - if(rig.air_supply) - internal = rig.air_supply - if(!internal && s_store) - internal = s_store - if(internal) - internals.icon_state = "internal1" - spawn(10) ninjasuit.toggle_seals(src,1) + if(istype(back,/obj/item/weapon/rig)) + var/obj/item/weapon/rig/rig = back + if(rig.air_supply) + internal = rig.air_supply + if(!internal && s_store) + internal = s_store + if(internal) + internals.icon_state = "internal1" + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 3534c5f63e..e90b65a333 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -56,7 +56,7 @@ "Devices and Tools" = list( new/datum/uplink_item(/obj/item/weapon/card/emag, 3, "Cryptographic Sequencer", "EC"), new/datum/uplink_item(/obj/item/weapon/storage/toolbox/syndicate, 1, "Fully Loaded Toolbox", "ST"), - new/datum/uplink_item(/obj/item/weapon/stamp/chameleon, 3, "Morphic Chameleon Stmap", "CS"), + new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/clerical, 3, "Morphic Clerical Kit", "CK"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/space, 3, "Space Suit", "SS"), new/datum/uplink_item(/obj/item/clothing/glasses/thermal/syndi, 3, "Thermal Imaging Glasses", "TM"), new/datum/uplink_item(/obj/item/device/encryptionkey/binary, 3, "Binary Translator Key", "BT"), diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 14e1b5a30e..8157acc1a0 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -102,7 +102,6 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' vox.name = vox.real_name newraider.name = vox.name vox.age = rand(12,20) - vox.dna.mutantrace = "vox" vox.set_species("Vox") vox.languages = list() // Removing language from chargen. vox.flavor_text = "" diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 1c8f8b9b40..77b6d67357 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -181,7 +181,7 @@ usr << "You are unable to access the self-destruct system as you don't control the station yet." return - if(ticker.mode:explosion_in_progress || ticker.mode:station_was_nuked) + if(ticker.mode.explosion_in_progress || ticker.mode:station_was_nuked) usr << "The self-destruct countdown is already triggered!" return @@ -192,7 +192,7 @@ usr << "\red Self-Destruct sequence initialised!" ticker.mode:to_nuke_or_not_to_nuke = 0 - ticker.mode:explosion_in_progress = 1 + ticker.mode.explosion_in_progress = 1 for(var/mob/M in player_list) M << 'sound/machines/Alarm.ogg' @@ -235,16 +235,15 @@ R.autosay(msg, AN) if(abort) - ticker.mode:explosion_in_progress = 0 + ticker.mode.explosion_in_progress = 0 set_security_level("red") //Delta's over return - enter_allowed = 0 if(ticker) ticker.station_explosion_cinematic(0,null) if(ticker.mode) ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 + ticker.mode.explosion_in_progress = 0 return diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index cc57ccd855..ef78dd4286 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -389,8 +389,6 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) ticker.mode.explosion_in_progress = 1 sleep(100) - enter_allowed = 0 - var/off_station = 0 var/turf/bomb_location = get_turf(src) if(bomb_location && (bomb_location.z in config.station_levels)) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 48f0a94faf..19f2216272 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -100,7 +100,7 @@ C.auto_turn() C.network = uniquelist(tempnetwork) - tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS) + tempnetwork = difflist(C.network,restricted_camera_networks) if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility. cameranet.removeCamera(C) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index aa5d7a02f1..454e6e44fc 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -33,7 +33,7 @@ var/datum/dna2/record/buf=null var/read_only = 0 //Well,it's still a floppy disk -/obj/item/weapon/disk/data/proc/Initialize() +/obj/item/weapon/disk/data/proc/initializeDisk() buf = new buf.dna=new @@ -42,7 +42,7 @@ read_only = 1 New() - Initialize() + initializeDisk() buf.types=DNA2_BUF_UE|DNA2_BUF_UI //data = "066000033000000000AF00330660FF4DB002690" //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff @@ -57,7 +57,7 @@ read_only = 1 New() - Initialize() + initializeDisk() buf.types=DNA2_BUF_SE var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 726a84cb1f..abcdb51a51 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -16,14 +16,22 @@ var/global/list/holodeck_programs = list( ) /obj/machinery/computer/HolodeckControl - name = "Holodeck Control Computer" + name = "holodeck control console" desc = "A computer used to control a nearby holodeck." icon_state = "holocontrol" + + use_power = 1 + active_power_usage = 8000 //8kW for the scenery + 500W per holoitem + var/item_power_usage = 500 + var/area/linkedholodeck = null var/area/target = null var/active = 0 var/list/holographic_items = list() + var/list/holographic_mobs = list() var/damaged = 0 + var/safety_disabled = 0 + var/mob/last_to_emag = null var/last_change = 0 var/list/supported_programs = list( \ "Empty Court" = "emptycourt", \ @@ -38,84 +46,111 @@ var/global/list/holodeck_programs = list( "Theatre" = "theatre", \ "Meeting Hall" = "meetinghall" \ ) - var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "ildlife Simulation" = "wildlifecarp") + var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp") - attack_ai(var/mob/user as mob) - return src.attack_hand(user) +/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob) + return src.attack_hand(user) - attack_hand(var/mob/user as mob) +/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat + if(..()) + return + user.set_machine(src) + var/dat - dat += "Holodeck Control System
" - dat += "
Current Loaded Programs:
" - for(var/prog in supported_programs) - dat += "(([prog]))
" + dat += "Holodeck Control System
" + dat += "
Current Loaded Programs:
" + for(var/prog in supported_programs) + dat += "(([prog]))
" - dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
" + dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
" - if(issilicon(user)) - if(emagged) - dat += "(Re-Enable Safety Protocols?)
" + if(issilicon(user)) + if(safety_disabled) + if (emagged) + dat += "ERROR: Cannot re-enable Safety Protocols.
" else - dat += "(Override Safety Protocols?)
" - - if(emagged) - for(var/prog in restricted_programs) - dat += "(Begin [prog])
" - dat += "Ensure the holodeck is empty before testing.
" - dat += "
" - dat += "Safety Protocols are DISABLED
" + dat += "(Re-Enable Safety Protocols?)
" else - dat += "Safety Protocols are ENABLED
" + dat += "(Override Safety Protocols?)
" - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") + if(safety_disabled) + for(var/prog in restricted_programs) + dat += "(Begin [prog])
" + dat += "Ensure the holodeck is empty before testing.
" + dat += "
" + dat += "Safety Protocols are DISABLED
" + else + dat += "Safety Protocols are ENABLED
" + user << browse(dat, "window=computer;size=400x500") + onclose(user, "computer") + + return + + +/obj/machinery/computer/HolodeckControl/Topic(href, href_list) + if(..()) return + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.set_machine(src) + if(href_list["program"]) + var/prog = href_list["program"] + if(prog in holodeck_programs) + target = locate(holodeck_programs[prog]) + if(target) + loadProgram(target) - Topic(href, href_list) - if(..()) - return - if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) + else if(href_list["AIoverride"]) + if(!issilicon(usr)) + return - if(href_list["program"]) - var/prog = href_list["program"] - if(prog in holodeck_programs) - target = locate(holodeck_programs[prog]) - if(target) - loadProgram(target) + if(safety_disabled && emagged) + return //if a traitor has gone through the trouble to emag the thing, let them keep it. - else if(href_list["AIoverride"]) - if(!issilicon(usr)) return - emagged = !emagged - if(emagged) - message_admins("[key_name_admin(usr)] overrode the holodeck's safeties") - log_game("[key_name(usr)] overrided the holodeck's safeties") - else - message_admins("[key_name_admin(usr)] restored the holodeck's safeties") - log_game("[key_name(usr)] restored the holodeck's safeties") + safety_disabled = !safety_disabled + update_projections() + if(safety_disabled) + message_admins("[key_name_admin(usr)] overrode the holodeck's safeties") + log_game("[key_name(usr)] overrided the holodeck's safeties") + else + message_admins("[key_name_admin(usr)] restored the holodeck's safeties") + log_game("[key_name(usr)] restored the holodeck's safeties") - src.add_fingerprint(usr) - src.updateUsrDialog() - return - - -/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/card/emag) && !emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - user << "\blue You vastly increase projector power and override the safety and security protocols." - user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator." - log_game("[key_name(usr)] emagged the Holodeck Control Computer") + src.add_fingerprint(usr) src.updateUsrDialog() return +/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) + if(istype(D, /obj/item/weapon/card/emag)) + playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + last_to_emag = user //emag again to change the owner + if (!emagged) + emagged = 1 + safety_disabled = 1 + update_projections() + user << "You vastly increase projector power and override the safety and security protocols." + user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator." + log_game("[key_name(usr)] emagged the Holodeck Control Computer") + src.updateUsrDialog() + return + +/obj/machinery/computer/HolodeckControl/proc/update_projections() + if (safety_disabled) + item_power_usage = 2500 + for(var/obj/item/weapon/holo/esword/H in linkedholodeck) + H.damtype = BRUTE + else + item_power_usage = initial(item_power_usage) + for(var/obj/item/weapon/holo/esword/H in linkedholodeck) + H.damtype = initial(H.damtype) + + for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs) + C.set_safety(!safety_disabled) + if (last_to_emag) + C.friends = list(last_to_emag) + /obj/machinery/computer/HolodeckControl/New() ..() linkedholodeck = locate(/area/holodeck/alphadeck) @@ -148,14 +183,27 @@ var/global/list/holodeck_programs = list( emergencyShutdown() ..() +/obj/machinery/computer/HolodeckControl/power_change() + var/oldstat + ..() + if (stat != oldstat && active && (stat & NOPOWER)) + emergencyShutdown() + /obj/machinery/computer/HolodeckControl/process() for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down. if(!(get_turf(item) in linkedholodeck)) derez(item, 0) + if (!safety_disabled) + for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs) + if (get_area(C.loc) != linkedholodeck) + holographic_mobs -= C + C.derez() + if(!..()) return if(active) + use_power(item_power_usage * (holographic_items.len + holographic_mobs.len)) if(!checkInteg(linkedholodeck)) damaged = 1 @@ -163,6 +211,7 @@ var/global/list/holodeck_programs = list( if(target) loadProgram(target) active = 0 + use_power = 1 for(var/mob/M in range(10,src)) M.show_message("The holodeck overloads!") @@ -199,6 +248,7 @@ var/global/list/holodeck_programs = list( return 1 +//Why is it called toggle if it doesn't toggle? /obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) if(toggleOn) @@ -218,12 +268,14 @@ var/global/list/holodeck_programs = list( T.hotspot_expose(50000,50000,1) active = 1 + use_power = 2 else for(var/item in holographic_items) derez(item) var/area/targetsource = locate(/area/holodeck/source_plating) targetsource.copy_contents_to(linkedholodeck , 1) active = 0 + use_power = 1 /obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A) @@ -238,22 +290,20 @@ var/global/list/holodeck_programs = list( last_change = world.time active = 1 + use_power = 2 for(var/item in holographic_items) derez(item) + for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs) + holographic_mobs -= C + C.derez() + for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) del(B) - for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck) - del(C) - holographic_items = A.copy_contents_to(linkedholodeck , 1) - if(emagged) - for(var/obj/item/weapon/holo/esword/H in linkedholodeck) - H.damtype = BRUTE - spawn(30) for(var/obj/effect/landmark/L in linkedholodeck) if(L.name=="Atmospheric Test Start") @@ -266,13 +316,22 @@ var/global/list/holodeck_programs = list( T.temperature = 5000 T.hotspot_expose(50000,50000,1) if(L.name=="Holocarp Spawn") - new /mob/living/simple_animal/hostile/carp(L.loc) + holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc) + + if(L.name=="Holocarp Spawn Random") + if (prob(4)) //With 4 spawn points, carp should only appear 15% of the time. + holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc) + + update_projections() /obj/machinery/computer/HolodeckControl/proc/emergencyShutdown() //Get rid of any items for(var/item in holographic_items) derez(item) + for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs) + holographic_mobs -= C + C.derez() //Turn it back to the regular non-holographic room target = locate(/area/holodeck/source_plating) if(target) @@ -281,6 +340,7 @@ var/global/list/holodeck_programs = list( var/area/targetsource = locate(/area/holodeck/source_plating) targetsource.copy_contents_to(linkedholodeck , 1) active = 0 + use_power = 1 @@ -308,6 +368,16 @@ var/global/list/holodeck_programs = list( var/turf/simulated/floor/FF = get_step(src,direction) FF.update_icon() //so siding get updated properly +/turf/simulated/floor/holofloor/desert + name = "desert sand" + desc = "Uncomfortably gritty for a hologram." + icon_state = "asteroid" + +/turf/simulated/floor/holofloor/desert/New() + ..() + if(prob(10)) + overlays += "asteroid[rand(0,9)]" + /turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob) return // HOLOFLOOR DOES NOT GIVE A FUCK @@ -327,17 +397,6 @@ var/global/list/holodeck_programs = list( /obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) - var/obj/item/weapon/grab/G = W - if(G.state<2) - user << "\red You need a better grip to do that!" - return - G.affecting.loc = src.loc - G.affecting.Weaken(5) - visible_message("\red [G.assailant] puts [G.affecting] on the table.") - del(W) - return - if (istype(W, /obj/item/weapon/wrench)) user << "It's a holotable! There are no bolts!" return @@ -424,13 +483,13 @@ var/global/list/holodeck_programs = list( icon_state = "sword[item_color]" w_class = 4 playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - user << "\blue [src] is now active." + user << "[src] is now active." else force = 3 icon_state = "sword0" w_class = 2 playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - user << "\blue [src] can now be concealed." + user << "[src] can now be concealed." if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -463,16 +522,16 @@ var/global/list/holodeck_programs = list( if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(G.state<2) - user << "\red You need a better grip to do that!" + user << "You need a better grip to do that!" return G.affecting.loc = src.loc G.affecting.Weaken(5) - visible_message("\red [G.assailant] dunks [G.affecting] into the [src]!", 3) + visible_message("[G.assailant] dunks [G.affecting] into the [src]!", 3) del(W) return else if (istype(W, /obj/item) && get_dist(src,user)<2) user.drop_item(src) - visible_message("\blue [user] dunks [W] into the [src]!", 3) + visible_message("[user] dunks [W] into the [src]!", 3) return /obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -482,9 +541,9 @@ var/global/list/holodeck_programs = list( return if(prob(50)) I.loc = src.loc - visible_message("\blue Swish! \the [I] lands in \the [src].", 3) + visible_message("Swish! \the [I] lands in \the [src].", 3) else - visible_message("\red \the [I] bounces off of \the [src]'s rim!", 3) + visible_message("\The [I] bounces off of \the [src]'s rim!", 3) return 0 else return ..(mover, target, height, air_group) @@ -565,16 +624,52 @@ var/global/list/holodeck_programs = list( //Holorack -/obj/structure/rack/holorack +/obj/structure/table/rack/holorack name = "rack" desc = "Different from the Middle Ages version." icon = 'icons/obj/objects.dmi' icon_state = "rack" -/obj/structure/rack/holorack/attack_hand(mob/user as mob) +/obj/structure/table/rack/holorack/attack_hand(mob/user as mob) return -/obj/structure/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/structure/table/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) user << "It's a holorack! You can't unwrench it!" return + +//Holocarp + +/mob/living/simple_animal/hostile/carp/holodeck + icon = 'icons/mob/AI.dmi' + icon_state = "holo4" + icon_living = "holo4" + icon_dead = "holo4" + icon_gib = null + meat_amount = 0 + meat_type = null + +/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe) + if (safe) + faction = "neutral" + melee_damage_lower = 0 + melee_damage_upper = 0 + wall_smash = 0 + destroy_surroundings = 0 + else + faction = "carp" + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + wall_smash = initial(wall_smash) + destroy_surroundings = initial(destroy_surroundings) + +/mob/living/simple_animal/hostile/carp/holodeck/gib() + derez() //holograms can't gib + +/mob/living/simple_animal/hostile/carp/holodeck/death() + ..() + derez() + +/mob/living/simple_animal/hostile/carp/holodeck/proc/derez() + visible_message("\The [src] fades away!") + del(src) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index f1a1f02db7..bcd7beda08 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/operating - name = "Operating Computer" + name = "patient monitoring console" density = 1 anchored = 1.0 icon_state = "operating" diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm new file mode 100644 index 0000000000..e88de45c94 --- /dev/null +++ b/code/game/machinery/computer/RCON_Console.dm @@ -0,0 +1,107 @@ +/obj/machinery/computer/rcon + name = "\improper RCON remote control console" + desc = "Console used to remotely control machinery on the station." + icon = 'icons/obj/computer.dmi' + icon_state = "ai-fixer" + circuit = /obj/item/weapon/circuitboard/rcon_console + req_one_access = list(access_engine) + var/current_tag = null + var/list/known_SMESs = null + var/list/known_breakers = null + +/obj/machinery/computer/rcon/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/rcon/attack_hand(var/mob/user as mob) + ..() + ui_interact(user) + +/obj/machinery/computer/rcon/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + FindDevices() // Update our devices list + var/data[0] + + // SMES DATA (simplified view) + var/list/smeslist[0] + for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs) + smeslist.Add(list(list( + "charge" = round(SMES.Percentage()), + "input_set" = SMES.input_attempt, + "input_val" = round(SMES.input_level), + "output_set" = SMES.output_attempt, + "output_val" = round(SMES.output_level), + "output_load" = round(SMES.output_used), + "RCON_tag" = SMES.RCon_tag + ))) + data["smes_info"] = smeslist + + // BREAKER DATA (simplified view) + var/list/breakerlist[0] + for(var/obj/machinery/power/breakerbox/BR in known_breakers) + breakerlist.Add(list(list( + "RCON_tag" = BR.RCon_tag, + "enabled" = BR.on + ))) + data["breaker_info"] = breakerlist + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "rcon.tmpl", "RCON Control Console", 600, 400) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/computer/rcon/Topic(href, href_list) + if(href_list["smes_in_toggle"]) + var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_toggle"]) + if(SMES) + SMES.toggle_input() + if(href_list["smes_out_toggle"]) + var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_toggle"]) + if(SMES) + SMES.toggle_output() + if(href_list["smes_in_set"]) + var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_set"]) + if(SMES) + var/inputset = input(usr, "Enter new input level (0-[SMES.input_level_max])", "SMES Input Power Control") as num + SMES.set_input(inputset) + if(href_list["smes_out_set"]) + var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_set"]) + if(SMES) + var/outputset = input(usr, "Enter new output level (0-[SMES.output_level_max])", "SMES Input Power Control") as num + SMES.set_output(outputset) + + if(href_list["toggle_breaker"]) + var/obj/machinery/power/breakerbox/toggle = null + for(var/obj/machinery/power/breakerbox/breaker in known_breakers) + if(breaker.RCon_tag == href_list["toggle_breaker"]) + toggle = breaker + if(toggle) + if(toggle.update_locked) + usr << "The breaker box was recently toggled. Please wait before toggling it again." + else + toggle.auto_toggle() + +/obj/machinery/computer/rcon/proc/GetSMESByTag(var/tag) + if(!tag) + return + + for(var/obj/machinery/power/smes/buildable/S in known_SMESs) + if(S.RCon_tag == tag) + return S + +/obj/machinery/computer/rcon/proc/FindDevices() + known_SMESs = new /list() + for(var/obj/machinery/power/smes/buildable/SMES in machines) + if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon) + known_SMESs.Add(SMES) + + known_breakers = new /list() + for(var/obj/machinery/power/breakerbox/breaker in machines) + if(breaker.RCon_tag != "NO_TAG") + known_breakers.Add(breaker) \ No newline at end of file diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 2dbfcd9620..69c884ec70 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -1,7 +1,7 @@ /obj/structure/AIcore density = 1 anchored = 0 - name = "AI core" + name = "\improper AI core" icon = 'icons/mob/AI.dmi' icon_state = "0" var/state = 0 @@ -175,7 +175,7 @@ del(src) /obj/structure/AIcore/deactivated - name = "Inactive AI" + name = "inactive AI" icon = 'icons/mob/AI.dmi' icon_state = "ai-empty" anchored = 1 diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 2182d989dc..223f9523cc 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/aifixer - name = "AI System Integrity Restorer" + name = "\improper AI system integrity restorer" icon = 'icons/obj/computer.dmi' icon_state = "ai-fixer" circuit = /obj/item/weapon/circuitboard/aifixer diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 6047b221b8..8e978853c4 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -1,13 +1,16 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +// Converting these to global lists may be a bit laggy when removal procs are called. Consider +// rewriting this properly to fix the update bug, rather than unifying all monitors. ~Z + +var/global/list/priority_air_alarms = list() +var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert - name = "Atmospheric Alert Computer" + name = "atmospheric alert computer" desc = "Used to access the station's atmospheric sensors." circuit = "/obj/item/weapon/circuitboard/atmos_alert" icon_state = "alert:0" - var/list/priority_alarms = list() - var/list/minor_alarms = list() var/receive_frequency = 1437 var/datum/radio_frequency/radio_connection @@ -24,12 +27,12 @@ if(!zone || !severity) return - minor_alarms -= zone - priority_alarms -= zone + minor_air_alarms -= zone + priority_air_alarms -= zone if(severity=="severe") - priority_alarms += zone + priority_air_alarms |= zone else if (severity=="minor") - minor_alarms += zone + minor_air_alarms |= zone update_icon() return @@ -55,10 +58,10 @@ ..() if(stat & (NOPOWER|BROKEN)) return - if(priority_alarms.len) + if(priority_air_alarms.len) icon_state = "alert:2" - else if(minor_alarms.len) + else if(minor_air_alarms.len) icon_state = "alert:1" else @@ -70,14 +73,14 @@ var/priority_text var/minor_text - if(priority_alarms.len) - for(var/zone in priority_alarms) + if(priority_air_alarms.len) + for(var/zone in priority_air_alarms) priority_text += "[zone] X
" else priority_text = "No priority alerts detected.
" - if(minor_alarms.len) - for(var/zone in minor_alarms) + if(minor_air_alarms.len) + for(var/zone in minor_air_alarms) minor_text += "[zone] X
" else minor_text = "No minor alerts detected.
" @@ -100,14 +103,14 @@ if(href_list["priority_clear"]) var/removing_zone = href_list["priority_clear"] - for(var/zone in priority_alarms) + for(var/zone in priority_air_alarms) if(ckey(zone) == removing_zone) - priority_alarms -= zone + priority_air_alarms -= zone if(href_list["minor_clear"]) var/removing_zone = href_list["minor_clear"] - for(var/zone in minor_alarms) + for(var/zone in minor_air_alarms) if(ckey(zone) == removing_zone) - minor_alarms -= zone + minor_air_alarms -= zone update_icon() return diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 3c30ffa198..ac648624f2 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -3,363 +3,13 @@ /obj/structure/computerframe density = 1 anchored = 0 - name = "Computer-frame" + name = "computer frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "0" var/state = 0 var/obj/item/weapon/circuitboard/circuit = null // weight = 1.0E8 -/obj/item/weapon/circuitboard - density = 0 - anchored = 0 - w_class = 2.0 - name = "Circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - origin_tech = "programming=2" - var/build_path = null - var/board_type = "computer" - var/list/req_components = null - var/frame_desc = null - var/contain_parts = 1 - -//Not sure where else to put this -/obj/item/weapon/circuitboard/broken - name = "broken electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics_smoked" - origin_tech = null - board_type = "other" - -//Called when the circuitboard is used to contruct a new machine. -/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M) - if (istype(M, build_path)) - return 1 - return 0 - -//Called when a computer is deconstructed to produce a circuitboard. -//Only used by computers, as other machines store their circuitboard instance. -/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M) - if (istype(M, build_path)) - return 1 - return 0 - -/* - Circuit Board Definitions -*/ - -/obj/item/weapon/circuitboard/message_monitor - name = "Circuit board (Message Monitor)" - build_path = /obj/machinery/computer/message_monitor - origin_tech = "programming=3" - -//TODO: Move these into computer/camera.dm -/obj/item/weapon/circuitboard/security - name = "Circuit board (Security Camera Monitor)" - build_path = /obj/machinery/computer/security - var/network = list("SS13") - req_access = list(access_security) - var/locked = 1 - var/emagged = 0 - -/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) - if (..(C)) - C.network = network - -/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C) - if (..(C)) - network = C.network - -/obj/item/weapon/circuitboard/security/engineering - name = "Circuit board (Engineering Camera Monitor)" - build_path = /obj/machinery/computer/security/engineering - network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") - req_access = list() -/obj/item/weapon/circuitboard/security/mining - name = "Circuit board (Mining Camera Monitor)" - build_path = /obj/machinery/computer/security/mining - network = list("MINE") - req_access = list() -/obj/item/weapon/circuitboard/aicore - name = "Circuit board (AI Core)" - origin_tech = "programming=4;biotech=2" - board_type = "other" -/obj/item/weapon/circuitboard/aiupload - name = "Circuit board (AI Upload)" - build_path = /obj/machinery/computer/aiupload - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/borgupload - name = "Circuit board (Cyborg Upload)" - build_path = /obj/machinery/computer/borgupload - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/med_data - name = "Circuit board (Medical Records)" - build_path = /obj/machinery/computer/med_data -/obj/item/weapon/circuitboard/pandemic - name = "Circuit board (PanD.E.M.I.C. 2200)" - build_path = /obj/machinery/computer/pandemic - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/scan_consolenew - name = "Circuit board (DNA Machine)" - build_path = /obj/machinery/computer/scan_consolenew - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/communications - name = "Circuit board (Communications)" - build_path = /obj/machinery/computer/communications - origin_tech = "programming=2;magnets=2" -/obj/item/weapon/circuitboard/card - name = "Circuit board (ID Computer)" - build_path = /obj/machinery/computer/card -/obj/item/weapon/circuitboard/card/centcom - name = "Circuit board (CentCom ID Computer)" - build_path = /obj/machinery/computer/card/centcom -//obj/item/weapon/circuitboard/shield -// name = "Circuit board (Shield Control)" -// build_path = "/obj/machinery/computer/stationshield" -/obj/item/weapon/circuitboard/teleporter - name = "Circuit board (Teleporter)" - build_path = /obj/machinery/computer/teleporter - origin_tech = "programming=2;bluespace=2" -/obj/item/weapon/circuitboard/secure_data - name = "Circuit board (Security Records)" - build_path = /obj/machinery/computer/secure_data -/obj/item/weapon/circuitboard/skills - name = "Circuit board (Employment Records)" - build_path = /obj/machinery/computer/skills -/obj/item/weapon/circuitboard/stationalert - name = "Circuit board (Station Alerts)" - build_path = /obj/machinery/computer/station_alert -///obj/item/weapon/circuitboard/atmospheresiphonswitch -// name = "Circuit board (Atmosphere Siphon Control)" -// build_path = /obj/machinery/computer/atmosphere/siphonswitch -/obj/item/weapon/circuitboard/air_management - name = "Circuit board (Atmospheric Monitor)" - build_path = /obj/machinery/computer/general_air_control - var/frequency = 1439 -/obj/item/weapon/circuitboard/air_management/tank_control - name = "Circuit board (Tank Control)" - build_path = /obj/machinery/computer/general_air_control/large_tank_control - frequency = 1441 -/obj/item/weapon/circuitboard/air_management/supermatter_core - name = "Circuit board (Core Control)" - build_path = /obj/machinery/computer/general_air_control/supermatter_core - frequency = 1438 -/obj/item/weapon/circuitboard/air_management/injector_control - name = "Circuit board (Injector Control)" - build_path = /obj/machinery/computer/general_air_control/fuel_injection - -/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C) - if (..(C)) - C.frequency = frequency - -/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C) - if (..(C)) - frequency = C.frequency - -/obj/item/weapon/circuitboard/atmos_alert - name = "Circuit board (Atmospheric Alert)" - build_path = /obj/machinery/computer/atmos_alert -/obj/item/weapon/circuitboard/pod - name = "Circuit board (Massdriver control)" - build_path = /obj/machinery/computer/pod -/obj/item/weapon/circuitboard/robotics - name = "Circuit board (Robotics Control)" - build_path = /obj/machinery/computer/robotics - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/drone_control - name = "Circuit board (Drone Control)" - build_path = /obj/machinery/computer/drone_control - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/cloning - name = "Circuit board (Cloning)" - build_path = /obj/machinery/computer/cloning - origin_tech = "programming=3;biotech=3" -/obj/item/weapon/circuitboard/arcade - name = "Circuit board (Arcade)" - build_path = /obj/machinery/computer/arcade - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/turbine_control - name = "Circuit board (Turbine control)" - build_path = /obj/machinery/computer/turbine_computer -/obj/item/weapon/circuitboard/solar_control - name = "Circuit board (Solar Control)" - build_path = /obj/machinery/power/solar_control - origin_tech = "programming=2;powerstorage=2" -/obj/item/weapon/circuitboard/powermonitor - name = "Circuit board (Power Monitor)" - build_path = /obj/machinery/computer/power_monitor -/obj/item/weapon/circuitboard/olddoor - name = "Circuit board (DoorMex)" - build_path = /obj/machinery/computer/pod/old -/obj/item/weapon/circuitboard/syndicatedoor - name = "Circuit board (ProComp Executive)" - build_path = /obj/machinery/computer/pod/old/syndicate -/obj/item/weapon/circuitboard/swfdoor - name = "Circuit board (Magix)" - build_path = /obj/machinery/computer/pod/old/swf -/obj/item/weapon/circuitboard/prisoner - name = "Circuit board (Prisoner Management)" - build_path = /obj/machinery/computer/prisoner -/obj/item/weapon/circuitboard/rdconsole - name = "Circuit Board (RD Console)" - build_path = /obj/machinery/computer/rdconsole/core -/obj/item/weapon/circuitboard/mecha_control - name = "Circuit Board (Exosuit Control Console)" - build_path = /obj/machinery/computer/mecha -/obj/item/weapon/circuitboard/rdservercontrol - name = "Circuit Board (R&D Server Control)" - build_path = /obj/machinery/computer/rdservercontrol -/obj/item/weapon/circuitboard/crew - name = "Circuit board (Crew monitoring computer)" - build_path = /obj/machinery/computer/crew - origin_tech = "programming=3;biotech=2;magnets=2" -/obj/item/weapon/circuitboard/mech_bay_power_console - name = "Circuit board (Mech Bay Power Control Console)" - build_path = /obj/machinery/computer/mech_bay_power_console - origin_tech = "programming=2;powerstorage=3" -/obj/item/weapon/circuitboard/ordercomp - name = "Circuit board (Supply ordering console)" - build_path = /obj/machinery/computer/ordercomp - origin_tech = "programming=2" - -/obj/item/weapon/circuitboard/supplycomp - name = "Circuit board (Supply shuttle console)" - build_path = /obj/machinery/computer/supplycomp - origin_tech = "programming=3" - var/contraband_enabled = 0 - -/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC) - if (..(SC)) - SC.can_order_contraband = contraband_enabled - -/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC) - if (..(SC)) - contraband_enabled = SC.can_order_contraband - -/obj/item/weapon/circuitboard/operating - name = "Circuit board (Operating Computer)" - build_path = /obj/machinery/computer/operating - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/comm_monitor - name = "Circuit board (Telecommunications Monitor)" - build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/comm_server - name = "Circuit board (Telecommunications Server Monitor)" - build_path = /obj/machinery/computer/telecomms/server - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/comm_traffic - name = "Circuitboard (Telecommunications Traffic Control)" - build_path = /obj/machinery/computer/telecomms/traffic - origin_tech = "programming=3" - -/obj/item/weapon/circuitboard/curefab - name = "Circuit board (Cure fab)" - build_path = /obj/machinery/computer/curer -/obj/item/weapon/circuitboard/splicer - name = "Circuit board (Disease Splicer)" - build_path = /obj/machinery/computer/diseasesplicer -/obj/item/weapon/circuitboard/mining_shuttle - name = "Circuit board (Mining Shuttle)" - build_path = /obj/machinery/computer/shuttle_control/mining - origin_tech = "programming=2" -/obj/item/weapon/circuitboard/engineering_shuttle - name = "Circuit board (Engineering Shuttle)" - build_path = /obj/machinery/computer/shuttle_control/engineering - origin_tech = "programming=2" -/obj/item/weapon/circuitboard/research_shuttle - name = "Circuit board (Research Shuttle)" - build_path = /obj/machinery/computer/shuttle_control/research - origin_tech = "programming=2" -/obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future - name = "Circuit board (Holodeck Control)" - build_path = /obj/machinery/computer/HolodeckControl - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/aifixer - name = "Circuit board (AI Integrity Restorer)" - build_path = /obj/machinery/computer/aifixer - origin_tech = "programming=3;biotech=2" -/obj/item/weapon/circuitboard/area_atmos - name = "Circuit board (Area Air Control)" - build_path = /obj/machinery/computer/area_atmos - origin_tech = "programming=2" -/obj/item/weapon/circuitboard/prison_shuttle - name = "Circuit board (Prison Shuttle)" - build_path = /obj/machinery/computer/prison_shuttle - origin_tech = "programming=2" - - -/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/device/multitool)) - var/catastasis = src.contraband_enabled - var/opposite_catastasis - if(catastasis) - opposite_catastasis = "STANDARD" - catastasis = "BROAD" - else - opposite_catastasis = "BROAD" - catastasis = "STANDARD" - - switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") ) - //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") ) - if("Switch to STANDARD","Switch to BROAD") - src.contraband_enabled = !src.contraband_enabled - - if("Cancel") - return - else - user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri" - return - -/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/weapon/card/emag)) - if(emagged) - user << "Circuit lock is already removed." - return - user << "\blue You override the circuit lock and open controls." - emagged = 1 - locked = 0 - else if(istype(I,/obj/item/weapon/card/id)) - if(emagged) - user << "\red Circuit lock does not respond." - return - if(check_access(I)) - locked = !locked - user << "\blue You [locked ? "" : "un"]lock the circuit controls." - else - user << "\red Access denied." - else if(istype(I,/obj/item/device/multitool)) - if(locked) - user << "\red Circuit controls are locked." - return - var/existing_networks = list2text(network,",") - var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks)) - if(!input) - usr << "No input found please hang up and try your call again." - return - var/list/tempnetwork = text2list(input, ",") - tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1) - if(tempnetwork.len < 1) - usr << "No network found please hang up and try your call again." - return - network = tempnetwork - return - -/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/weapon/screwdriver)) - user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.") - if(src.build_path == /obj/machinery/computer/rdconsole/core) - src.name = "Circuit Board (RD Console - Robotics)" - src.build_path = /obj/machinery/computer/rdconsole/robotics - user << "\blue Access protocols set to robotics." - else - src.name = "Circuit Board (RD Console)" - src.build_path = /obj/machinery/computer/rdconsole/core - user << "\blue Access protocols set to default." - return - /obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob) switch(state) if(0) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 14c7847c6a..0a7f27d701 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -2,7 +2,7 @@ /obj/machinery/computer/security - name = "Security Cameras" + name = "security camera monitor" desc = "Used to access the various cameras on the station." icon_state = "cameras" var/obj/machinery/camera/current = null @@ -23,6 +23,69 @@ user.reset_view(current) return 1 + ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + if(src.z > 6) return + if(stat & (NOPOWER|BROKEN)) return + if(user.stat) return + + var/data[0] + + data["current"] = null + + var/list/L = list() + for (var/obj/machinery/camera/C in cameranet.cameras) + if(can_access_camera(C)) + L.Add(C) + + camera_sort(L) + + var/cameras[0] + for(var/obj/machinery/camera/C in L) + var/cam[0] + cam["name"] = C.c_tag + cam["deact"] = !C.can_use() + cam["camera"] = "\ref[C]" + cam["x"] = C.x + cam["y"] = C.y + cam["z"] = C.z + + cameras[++cameras.len] = cam + + if(C == current) + data["current"] = cam + + data["cameras"] = cameras + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) + + // adding a template with the key "mapContent" enables the map ui functionality + ui.add_template("mapContent", "sec_camera_map_content.tmpl") + // adding a template with the key "mapHeader" replaces the map header content + ui.add_template("mapHeader", "sec_camera_map_header.tmpl") + + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + + Topic(href, href_list) + if(href_list["switchTo"]) + if(src.z>6 || stat&(NOPOWER|BROKEN)) return + if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return + var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras + if(!C) return + + switch_to_camera(usr, C) + return 1 + else if(href_list["reset"]) + if(src.z>6 || stat&(NOPOWER|BROKEN)) return + if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return + current = null + usr.check_eye(current) + return 1 + else + . = ..() attack_hand(var/mob/user as mob) if (src.z > 6) @@ -32,35 +95,7 @@ if(!isAI(user)) user.set_machine(src) - - var/list/L = list() - for (var/obj/machinery/camera/C in cameranet.cameras) - L.Add(C) - - camera_sort(L) - - var/list/D = list() - D["Cancel"] = "Cancel" - for(var/obj/machinery/camera/C in L) - if(can_access_camera(C)) - D[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - var/t = input(user, "Which camera should you change to?") as null|anything in D - if(!t) - user.unset_machine() - return 0 - - var/obj/machinery/camera/C = D[t] - - if(t == "Cancel") - user.unset_machine() - return 0 - - if(C) - switch_to_camera(user, C) - spawn(5) - attack_hand(user) - return + ui_interact(user) proc/can_access_camera(var/obj/machinery/camera/C) var/list/shared_networks = src.network & C.network @@ -79,6 +114,7 @@ if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon))) return 0 src.current = C + check_eye(user) use_power(50) return 1 @@ -151,28 +187,28 @@ circuit = null /obj/machinery/computer/security/wooden_tv - name = "Security Cameras" + name = "security camera monitor" desc = "An old TV hooked into the stations camera network." icon_state = "security_det" circuit = null /obj/machinery/computer/security/mining - name = "Outpost Cameras" + name = "outpost camera monitor" desc = "Used to access the various cameras on the outpost." icon_state = "miningcameras" network = list("MINE") circuit = /obj/item/weapon/circuitboard/security/mining /obj/machinery/computer/security/engineering - name = "Engineering Cameras" + name = "engineering camera monitor" desc = "Used to monitor fires and breaches." icon_state = "engineeringcameras" network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") circuit = /obj/item/weapon/circuitboard/security/engineering /obj/machinery/computer/security/nuclear - name = "Mission Monitor" + name = "head mounted camera monitor" desc = "Used to access the built-in cameras in helmets." icon_state = "syndicam" network = list("NUKE") diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 76d1e0fb93..fddc863575 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/card - name = "Identification Computer" + name = "\improper ID card modification console" desc = "Terminal for programming NanoTrasen employee ID cards to access parts of the station." icon_state = "id" req_access = list(access_change_ids) @@ -282,7 +282,7 @@ return 1 /obj/machinery/computer/card/centcom - name = "CentCom Identification Computer" + name = "\improper CentCom ID card modification console" circuit = "/obj/item/weapon/circuitboard/card/centcom" req_access = list(access_cent_captain) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index dadda5cfd7..484f39df25 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/cloning - name = "Cloning console" + name = "cloning control console" icon = 'icons/obj/computer.dmi' icon_state = "dna" circuit = "/obj/item/weapon/circuitboard/cloning" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 0af60a14c7..f187957f5b 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -2,8 +2,8 @@ // The communications computer /obj/machinery/computer/communications - name = "Communications Console" - desc = "This can be used for various important functions. Still under developement." + name = "command and communications console" + desc = "Used to command and control the station. Can relay long-range communications." icon_state = "comm" req_access = list(access_heads) circuit = "/obj/item/weapon/circuitboard/communications" diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 5e7ce344f3..fdbaae21cc 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/crew - name = "Crew monitoring computer" + name = "crew monitoring computer" desc = "Used to monitor active health sensors built into most of the crew's uniforms." icon_state = "crew" use_power = 1 diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm index e57aa56fe7..e0ceb33c17 100644 --- a/code/game/machinery/computer/hologram.dm +++ b/code/game/machinery/computer/hologram.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/hologram_comp - name = "Hologram Computer" + name = "hologram computer" desc = "Rumoured to control holograms." icon = 'icons/obj/stationobjs.dmi' icon_state = "holo_console0" diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index b77e483203..5c970f9d67 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/aiupload - name = "AI Upload" + name = "\improper AI upload console" desc = "Used to upload laws to the AI." icon_state = "command" circuit = "/obj/item/weapon/circuitboard/aiupload" @@ -54,7 +54,7 @@ /obj/machinery/computer/borgupload - name = "Cyborg Upload" + name = "cyborg upload console" desc = "Used to upload laws to Cyborgs." icon_state = "command" circuit = "/obj/item/weapon/circuitboard/borgupload" diff --git a/code/game/machinery/computer/lockdown.dm b/code/game/machinery/computer/lockdown.dm index 1e81af168a..bb1fff338d 100644 --- a/code/game/machinery/computer/lockdown.dm +++ b/code/game/machinery/computer/lockdown.dm @@ -3,7 +3,7 @@ /obj/machinery/computer/lockdown //for reference - /*name = "Lockdown Control" + /*name = "lockdown control" desc = "Used to control blast doors." icon_state = "lockdown" circuit = "/obj/item/weapon/circuitboard/lockdown" diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 1a7a8ea33a..b8fb87bc31 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/med_data//TODO:SANITY - name = "Medical Records" - desc = "This can be used to check medical records." + name = "medical records console" + desc = "Used to view, edit and maintain medical records." icon_state = "medcomp" req_one_access = list(access_medical, access_forensics_lockers) circuit = "/obj/item/weapon/circuitboard/med_data" @@ -551,4 +551,4 @@ /obj/machinery/computer/med_data/laptop name = "Medical Laptop" desc = "Cheap Nanotrasen Laptop." - icon_state = "medlaptop" \ No newline at end of file + icon_state = "medlaptop" diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 9a5ad3ed3b..8cdd7f10fe 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -1,12 +1,8 @@ - // Allows you to monitor messages that passes the server. - - - /obj/machinery/computer/message_monitor - name = "Message Monitor Console" - desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." + name = "messaging monitor console" + desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and request console messages." icon_state = "comm_logs" var/hack_icon = "comm_logsc" var/normal_icon = "comm_logs" diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 042555fe00..f707f8ffb7 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/pod - name = "Pod Launch Control" - desc = "A controll for launching pods. Some people prefer firing Mechas." + name = "pod launch control console" + desc = "A control console for launching pods. Some people prefer firing Mechas." icon_state = "computer_generic" circuit = /obj/item/weapon/circuitboard/pod var/id = 1.0 diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 56f093276a..cdbdfe048f 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/prisoner - name = "Prisoner Management" + name = "prisoner management console" icon = 'icons/obj/computer.dmi' icon_state = "explosive" req_access = list(access_armory) @@ -100,5 +100,3 @@ src.add_fingerprint(usr) src.updateUsrDialog() return - - diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index f1c57104cc..84ba06fa02 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -11,7 +11,7 @@ var/prison_shuttle_time = 0 var/prison_shuttle_timeleft = 0 /obj/machinery/computer/prison_shuttle - name = "Prison Shuttle Console" + name = "prison shuttle control console" icon = 'icons/obj/computer.dmi' icon_state = "shuttle" req_access = list(access_security) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 43e65b1273..b429c70306 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -1,9 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - /obj/machinery/computer/robotics - name = "Robotics Control" - desc = "Used to remotely lockdown or detonate linked Cyborgs." + name = "robotics control console" + desc = "Used to remotely lockdown or detonate linked cyborgs." icon = 'icons/obj/computer.dmi' icon_state = "robot" req_access = list(access_robotics) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 76c9790c5d..e14c277981 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/secure_data//TODO:SANITY - name = "Security Records" - desc = "Used to view and edit personnel's security records" + name = "security records console" + desc = "Used to view, edit and maintain security records" icon_state = "security" req_one_access = list(access_security, access_forensics_lockers) circuit = "/obj/item/weapon/circuitboard/secure_data" diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 98c75daf57..aa573e39aa 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/machinery/computer/skills//TODO:SANITY - name = "Employment Records" - desc = "Used to view personnel's employment records" + name = "employment records console" + desc = "Used to view, edit and maintain employment records." icon_state = "medlaptop" req_one_access = list(access_heads) circuit = "/obj/item/weapon/circuitboard/skills" diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index ba44553b16..bc1f3427ee 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -12,7 +12,7 @@ var/specops_shuttle_time = 0 var/specops_shuttle_timeleft = 0 /obj/machinery/computer/specops_shuttle - name = "Spec. Ops. Shuttle Console" + name = "special operations shuttle control console" icon = 'icons/obj/computer.dmi' icon_state = "shuttle" req_access = list(access_cent_specops) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 35e80f54e7..028be6e3a3 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/station_alert - name = "Station Alert Computer" + name = "Station Alert Console" desc = "Used to access the station's automated alert system." icon_state = "alert:0" circuit = "/obj/item/weapon/circuitboard/stationalert" diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm new file mode 100644 index 0000000000..fe109c4771 --- /dev/null +++ b/code/game/machinery/computer/supply.dm @@ -0,0 +1,416 @@ +/obj/machinery/computer/supplycomp + name = "supply control console" + icon = 'icons/obj/computer.dmi' + icon_state = "supply" + req_access = list(access_cargo) + circuit = "/obj/item/weapon/circuitboard/supplycomp" + var/temp = null + var/reqtime = 0 //Cooldown for requisitions - Quarxink + var/hacked = 0 + var/can_order_contraband = 0 + var/last_viewed_group = "categories" + +/obj/machinery/computer/ordercomp + name = "supply ordering console" + icon = 'icons/obj/computer.dmi' + icon_state = "request" + circuit = "/obj/item/weapon/circuitboard/ordercomp" + var/temp = null + var/reqtime = 0 //Cooldown for requisitions - Quarxink + var/last_viewed_group = "categories" + +/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob) + if(..()) + return + user.set_machine(src) + var/dat + if(temp) + dat = temp + else + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if (shuttle) + dat += {"
Supply shuttle
+ Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
+
Supply points: [supply_controller.points]
+
\nRequest items

+ View approved orders

+ View requests

+ Close"} + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + +/obj/machinery/computer/ordercomp/Topic(href, href_list) + if(..()) + return + + if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) ) + usr.set_machine(src) + + if(href_list["order"]) + if(href_list["order"] == "categories") + //all_supply_groups + //Request what? + last_viewed_group = "categories" + temp = "Supply points: [supply_controller.points]
" + temp += "Main Menu


" + temp += "Select a category

" + for(var/supply_group_name in all_supply_groups ) + temp += "[supply_group_name]
" + else + last_viewed_group = href_list["order"] + temp = "Supply points: [supply_controller.points]
" + temp += "Back to all categories


" + temp += "Request from: [last_viewed_group]

" + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to + temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage + + else if (href_list["doorder"]) + if(world.time < reqtime) + for(var/mob/V in hearers(src)) + V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") + return + + //Find the correct supply_pack datum + var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] + if(!istype(P)) return + + var/timeout = world.time + 600 + var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) + if(world.time > timeout) return + if(!reason) return + + var/idname = "*None Provided*" + var/idrank = "*None Provided*" + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + idname = H.get_authentification_name() + idrank = H.get_assignment() + else if(issilicon(usr)) + idname = usr.real_name + + supply_controller.ordernum++ + var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) + reqform.name = "Requisition Form - [P.name]" + reqform.info += "

[station_name] Supply Requisition Form


" + reqform.info += "INDEX: #[supply_controller.ordernum]
" + reqform.info += "REQUESTED BY: [idname]
" + reqform.info += "RANK: [idrank]
" + reqform.info += "REASON: [reason]
" + reqform.info += "SUPPLY CRATE TYPE: [P.name]
" + reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" + reqform.info += "CONTENTS:
" + reqform.info += P.manifest + reqform.info += "
" + reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" + + reqform.update_icon() //Fix for appearing blank when printed. + reqtime = (world.time + 5) % 1e5 + + //make our supply_order datum + var/datum/supply_order/O = new /datum/supply_order() + O.ordernum = supply_controller.ordernum + O.object = P + O.orderedby = idname + supply_controller.requestlist += O + + temp = "Thanks for your request. The cargo team will process it as soon as possible.
" + temp += "
Back Main Menu" + + else if (href_list["vieworders"]) + temp = "Current approved orders:

" + for(var/S in supply_controller.shoppinglist) + var/datum/supply_order/SO = S + temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
" + temp += "
OK" + + else if (href_list["viewrequests"]) + temp = "Current requests:

" + for(var/S in supply_controller.requestlist) + var/datum/supply_order/SO = S + temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" + temp += "
OK" + + else if (href_list["mainmenu"]) + temp = null + + add_fingerprint(usr) + updateUsrDialog() + return + +/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob) + if(!allowed(user)) + user << "\red Access Denied." + return + + if(..()) + return + user.set_machine(src) + post_signal("supply") + var/dat + if (temp) + dat = temp + else + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if (shuttle) + dat += "
Supply shuttle
" + dat += "\nLocation: " + if (shuttle.has_arrive_time()) + dat += "In transit ([shuttle.eta_minutes()] Mins.)
" + else + if (shuttle.at_station()) + if (shuttle.docking_controller) + switch(shuttle.docking_controller.get_docking_status()) + if ("docked") dat += "Docked at station
" + if ("undocked") dat += "Undocked from station
" + if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch" : ""]
" + if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" + else + dat += "Station
" + + if (shuttle.can_launch()) + dat += "Send away" + else if (shuttle.can_cancel()) + dat += "Cancel launch" + else + dat += "*Shuttle is busy*" + dat += "
\n
" + else + dat += "Away
" + if (shuttle.can_launch()) + dat += "Request supply shuttle" + else if (shuttle.can_cancel()) + dat += "Cancel request" + else + dat += "*Shuttle is busy*" + dat += "
\n
" + + + dat += {"
\nSupply points: [supply_controller.points]
\n
+ \nOrder items
\n
+ \nView requests
\n
+ \nView orders
\n
+ \nClose"} + + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + +/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob) + if(istype(I,/obj/item/weapon/card/emag) && !hacked) + user << "\blue Special supplies unlocked." + hacked = 1 + return + else + ..() + return + +/obj/machinery/computer/supplycomp/Topic(href, href_list) + if(!supply_controller) + world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + return + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if (!shuttle) + world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." + return + if(..()) + return + + if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) ) + usr.set_machine(src) + + //Calling the shuttle + if(href_list["send"]) + if(shuttle.at_station()) + if (shuttle.forbidden_atoms_check()) + temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.

OK" + else + shuttle.launch(src) + temp = "Initiating launch sequence. \[Force Launch\]

OK" + else + shuttle.launch(src) + temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" + post_signal("supply") + + if (href_list["force_send"]) + shuttle.force_launch(src) + + if (href_list["cancel_send"]) + shuttle.cancel_launch(src) + + else if (href_list["order"]) + //if(!shuttle.idle()) return //this shouldn't be necessary it seems + if(href_list["order"] == "categories") + //all_supply_groups + //Request what? + last_viewed_group = "categories" + temp = "Supply points: [supply_controller.points]
" + temp += "Main Menu


" + temp += "Select a category

" + for(var/supply_group_name in all_supply_groups ) + temp += "[supply_group_name]
" + else + last_viewed_group = href_list["order"] + temp = "Supply points: [supply_controller.points]
" + temp += "Back to all categories


" + temp += "Request from: [last_viewed_group]

" + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to + temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage + + /*temp = "Supply points: [supply_controller.points]


Request what?

" + + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + if(N.hidden && !hacked) continue + if(N.contraband && !can_order_contraband) continue + temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage + temp += "
OK"*/ + + else if (href_list["doorder"]) + if(world.time < reqtime) + for(var/mob/V in hearers(src)) + V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") + return + + //Find the correct supply_pack datum + var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] + if(!istype(P)) return + + var/timeout = world.time + 600 + var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) + if(world.time > timeout) return + if(!reason) return + + var/idname = "*None Provided*" + var/idrank = "*None Provided*" + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + idname = H.get_authentification_name() + idrank = H.get_assignment() + else if(issilicon(usr)) + idname = usr.real_name + + supply_controller.ordernum++ + var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) + reqform.name = "Requisition Form - [P.name]" + reqform.info += "

[station_name] Supply Requisition Form


" + reqform.info += "INDEX: #[supply_controller.ordernum]
" + reqform.info += "REQUESTED BY: [idname]
" + reqform.info += "RANK: [idrank]
" + reqform.info += "REASON: [reason]
" + reqform.info += "SUPPLY CRATE TYPE: [P.name]
" + reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" + reqform.info += "CONTENTS:
" + reqform.info += P.manifest + reqform.info += "
" + reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" + + reqform.update_icon() //Fix for appearing blank when printed. + reqtime = (world.time + 5) % 1e5 + + //make our supply_order datum + var/datum/supply_order/O = new /datum/supply_order() + O.ordernum = supply_controller.ordernum + O.object = P + O.orderedby = idname + supply_controller.requestlist += O + + temp = "Order request placed.
" + temp += "
Back | Main Menu | Authorize Order" + + else if(href_list["confirmorder"]) + //Find the correct supply_order datum + var/ordernum = text2num(href_list["confirmorder"]) + var/datum/supply_order/O + var/datum/supply_packs/P + temp = "Invalid Request" + for(var/i=1, i<=supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = supply_controller.requestlist[i] + if(SO.ordernum == ordernum) + O = SO + P = O.object + if(supply_controller.points >= P.cost) + supply_controller.requestlist.Cut(i,i+1) + supply_controller.points -= P.cost + supply_controller.shoppinglist += O + temp = "Thanks for your order.
" + temp += "
Back Main Menu" + else + temp = "Not enough supply points.
" + temp += "
Back Main Menu" + break + + else if (href_list["vieworders"]) + temp = "Current approved orders:

" + for(var/S in supply_controller.shoppinglist) + var/datum/supply_order/SO = S + temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" + temp += "
OK" +/* + else if (href_list["cancelorder"]) + var/datum/supply_order/remove_supply = href_list["cancelorder"] + supply_shuttle_shoppinglist -= remove_supply + supply_shuttle_points += remove_supply.object.cost + temp += "Canceled: [remove_supply.object.name]


" + + for(var/S in supply_shuttle_shoppinglist) + var/datum/supply_order/SO = S + temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] (Cancel)
" + temp += "
OK" +*/ + else if (href_list["viewrequests"]) + temp = "Current requests:

" + for(var/S in supply_controller.requestlist) + var/datum/supply_order/SO = S + temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove
" + + temp += "
Clear list" + temp += "
OK" + + else if (href_list["rreq"]) + var/ordernum = text2num(href_list["rreq"]) + temp = "Invalid Request.
" + for(var/i=1, i<=supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = supply_controller.requestlist[i] + if(SO.ordernum == ordernum) + supply_controller.requestlist.Cut(i,i+1) + temp = "Request removed.
" + break + temp += "
Back Main Menu" + + else if (href_list["clearreq"]) + supply_controller.requestlist.Cut() + temp = "List cleared.
" + temp += "
OK" + + else if (href_list["mainmenu"]) + temp = null + + add_fingerprint(usr) + updateUsrDialog() + return + +/obj/machinery/computer/supplycomp/proc/post_signal(var/command) + + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + frequency.post_signal(src, status_signal) diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index 970a68b64a..eb8acc83f5 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -11,7 +11,7 @@ var/syndicate_elite_shuttle_time = 0 var/syndicate_elite_shuttle_timeleft = 0 /obj/machinery/computer/syndicate_elite_shuttle - name = "Elite Syndicate Squad Shuttle Console" + name = "elite syndicate squad shuttle control console" icon = 'icons/obj/computer.dmi' icon_state = "syndishuttle" req_access = list(access_cent_specops) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 03fa91212f..0f906ad4b2 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,5 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/ + /obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. name = "machine frame" icon = 'icons/obj/stock_parts.dmi' @@ -113,7 +115,7 @@ break if(component_check) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) new_machine.component_parts.Cut() src.circuit.construct(new_machine) for(var/obj/O in src) @@ -154,260 +156,3 @@ user << desc if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil)) user << "\red You cannot add that component to the machine!" - - -//Machine Frame Circuit Boards -/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, -micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add materials to circuit boards since autolathe won't be able -to destroy them and players will be able to make replacements. -*/ -/obj/item/weapon/circuitboard/destructive_analyzer - name = "Circuit board (Destructive Analyzer)" - build_path = "/obj/machinery/r_n_d/destructive_analyzer" - board_type = "machine" - origin_tech = "magnets=2;engineering=2;programming=2" - frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser." - req_components = list( - "/obj/item/weapon/stock_parts/scanning_module" = 1, - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/stock_parts/micro_laser" = 1) - -/obj/item/weapon/circuitboard/autolathe - name = "Circuit board (Autolathe)" - build_path = "/obj/machinery/autolathe" - board_type = "machine" - origin_tech = "engineering=2;programming=2" - frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen." - req_components = list( - "/obj/item/weapon/stock_parts/matter_bin" = 3, - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/stock_parts/console_screen" = 1) - -/obj/item/weapon/circuitboard/protolathe - name = "Circuit board (Protolathe)" - build_path = "/obj/machinery/r_n_d/protolathe" - board_type = "machine" - origin_tech = "engineering=2;programming=2" - frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers." - req_components = list( - "/obj/item/weapon/stock_parts/matter_bin" = 2, - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/weapon/reagent_containers/glass/beaker" = 2) - - -/obj/item/weapon/circuitboard/circuit_imprinter - name = "Circuit board (Circuit Imprinter)" - build_path = "/obj/machinery/r_n_d/circuit_imprinter" - board_type = "machine" - origin_tech = "engineering=2;programming=2" - frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers." - req_components = list( - "/obj/item/weapon/stock_parts/matter_bin" = 1, - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/reagent_containers/glass/beaker" = 2) - -/obj/item/weapon/circuitboard/pacman - name = "Circuit Board (PACMAN-type Generator)" - build_path = "/obj/machinery/power/port_gen/pacman" - board_type = "machine" - origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3" - frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor." - req_components = list( - "/obj/item/weapon/stock_parts/matter_bin" = 1, - "/obj/item/weapon/stock_parts/micro_laser" = 1, - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/capacitor" = 1) - -/obj/item/weapon/circuitboard/pacman/super - name = "Circuit Board (SUPERPACMAN-type Generator)" - build_path = "/obj/machinery/power/port_gen/pacman/super" - origin_tech = "programming=3;powerstorage=4;engineering=4" - -/obj/item/weapon/circuitboard/pacman/mrs - name = "Circuit Board (MRSPACMAN-type Generator)" - build_path = "/obj/machinery/power/port_gen/pacman/mrs" - origin_tech = "programming=3;powerstorage=5;engineering=5" - -obj/item/weapon/circuitboard/rdserver - name = "Circuit Board (R&D Server)" - build_path = "/obj/machinery/r_n_d/server" - board_type = "machine" - origin_tech = "programming=3" - frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module." - req_components = list( - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/scanning_module" = 1) - -/obj/item/weapon/circuitboard/mechfab - name = "Circuit board (Exosuit Fabricator)" - build_path = "/obj/machinery/mecha_part_fabricator" - board_type = "machine" - origin_tech = "programming=3;engineering=3" - frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen." - req_components = list( - "/obj/item/weapon/stock_parts/matter_bin" = 2, - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/stock_parts/micro_laser" = 1, - "/obj/item/weapon/stock_parts/console_screen" = 1) - -/obj/item/weapon/circuitboard/clonepod - name = "Circuit board (Clone Pod)" - build_path = "/obj/machinery/clonepod" - board_type = "machine" - origin_tech = "programming=3;biotech=3" - frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen." - req_components = list( - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/scanning_module" = 2, - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/weapon/stock_parts/console_screen" = 1) - -/obj/item/weapon/circuitboard/clonescanner - name = "Circuit board (Cloning Scanner)" - build_path = "/obj/machinery/dna_scannernew" - board_type = "machine" - origin_tech = "programming=2;biotech=2" - frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen." - req_components = list( - "/obj/item/weapon/stock_parts/scanning_module" = 1, - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/stock_parts/micro_laser" = 1, - "/obj/item/weapon/stock_parts/console_screen" = 1, - "/obj/item/stack/cable_coil" = 2,) - -/obj/item/weapon/circuitboard/unary_atmos - board_type = "machine" - var/machine_dir = SOUTH - var/init_dirs = SOUTH - -/obj/item/weapon/circuitboard/unary_atmos/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/weapon/screwdriver)) - machine_dir = turn(machine_dir, 90) - init_dirs = machine_dir - user.visible_message("\blue \The [user] adjusts the jumper on the [src]'s port configuration pins.", "\blue You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].") - return - -/obj/item/weapon/circuitboard/unary_atmos/examine(mob/user) - ..(user) - user << "The jumper is connecting the [dir2text(machine_dir)] pins." - -/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) - //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. - U.set_dir(src.machine_dir) - U.initialize_directions = src.init_dirs - U.initialize() - U.build_network() - if (U.node) - U.node.initialize() - U.node.build_network() - -/obj/item/weapon/circuitboard/unary_atmos/heater - name = "Circuit Board (Gas Heating System)" - build_path = "/obj/machinery/atmospherics/unary/heater" - origin_tech = "powerstorage=2;engineering=1" - frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors." - req_components = list( - "/obj/item/stack/cable_coil" = 5, - "/obj/item/weapon/stock_parts/matter_bin" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2) - -/obj/item/weapon/circuitboard/unary_atmos/cooler - name = "Circuit Board (Gas Cooling System)" - build_path = "/obj/machinery/atmospherics/unary/freezer" - origin_tech = "magnets=2;engineering=2" - frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors." - req_components = list( - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/matter_bin" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2, - "/obj/item/weapon/stock_parts/manipulator" = 1) - -// Telecomms circuit boards: - -/obj/item/weapon/circuitboard/telecomms/receiver - name = "Circuit Board (Subspace Receiver)" - build_path = "/obj/machinery/telecomms/receiver" - board_type = "machine" - origin_tech = "programming=4;engineering=3;bluespace=2" - frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser." - req_components = list( - "/obj/item/weapon/stock_parts/subspace/ansible" = 1, - "/obj/item/weapon/stock_parts/subspace/filter" = 1, - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/weapon/stock_parts/micro_laser" = 1) - -/obj/item/weapon/circuitboard/telecomms/hub - name = "Circuit Board (Hub Mainframe)" - build_path = "/obj/machinery/telecomms/hub" - board_type = "machine" - origin_tech = "programming=4;engineering=4" - frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter." - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/subspace/filter" = 2) - -/obj/item/weapon/circuitboard/telecomms/relay - name = "Circuit Board (Relay Mainframe)" - build_path = "/obj/machinery/telecomms/relay" - board_type = "machine" - origin_tech = "programming=3;engineering=4;bluespace=3" - frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters." - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/subspace/filter" = 2) - -/obj/item/weapon/circuitboard/telecomms/bus - name = "Circuit Board (Bus Mainframe)" - build_path = "/obj/machinery/telecomms/bus" - board_type = "machine" - origin_tech = "programming=4;engineering=4" - frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter." - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/stack/cable_coil" = 1, - "/obj/item/weapon/stock_parts/subspace/filter" = 1) - -/obj/item/weapon/circuitboard/telecomms/processor - name = "Circuit Board (Processor Unit)" - build_path = "/obj/machinery/telecomms/processor" - board_type = "machine" - origin_tech = "programming=4;engineering=4" - frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier." - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 3, - "/obj/item/weapon/stock_parts/subspace/filter" = 1, - "/obj/item/weapon/stock_parts/subspace/treatment" = 2, - "/obj/item/weapon/stock_parts/subspace/analyzer" = 1, - "/obj/item/stack/cable_coil" = 2, - "/obj/item/weapon/stock_parts/subspace/amplifier" = 1) - -/obj/item/weapon/circuitboard/telecomms/server - name = "Circuit Board (Telecommunication Server)" - build_path = "/obj/machinery/telecomms/server" - board_type = "machine" - origin_tech = "programming=4;engineering=4" - frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter." - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/stack/cable_coil" = 1, - "/obj/item/weapon/stock_parts/subspace/filter" = 1) - -/obj/item/weapon/circuitboard/telecomms/broadcaster - name = "Circuit Board (Subspace Broadcaster)" - build_path = "/obj/machinery/telecomms/broadcaster" - board_type = "machine" - origin_tech = "programming=4;engineering=4;bluespace=2" - frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. " - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 2, - "/obj/item/stack/cable_coil" = 1, - "/obj/item/weapon/stock_parts/subspace/filter" = 1, - "/obj/item/weapon/stock_parts/subspace/crystal" = 1, - "/obj/item/weapon/stock_parts/micro_laser/high" = 2) - - - - diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index d1e3887e4b..4fc82ebf4a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -381,7 +381,7 @@ // Delete the mob. del(occupant) occupant = null - + name = initial(name) return @@ -442,7 +442,6 @@ src.add_fingerprint(M) /obj/machinery/cryopod/verb/eject() - set name = "Eject Pod" set category = "Object" set src in oview(1) @@ -464,6 +463,8 @@ src.go_out() add_fingerprint(usr) + + name = initial(name) return /obj/machinery/cryopod/verb/move_inside() @@ -511,6 +512,7 @@ time_entered = world.time src.add_fingerprint(usr) + name = "[name] ([usr.name])" return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index e595cea933..49252eaac6 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -913,9 +913,9 @@ About the new airlock wires panel: if(operating == -1) new /obj/item/weapon/circuitboard/broken(src.loc) operating = 0 - else + else if (!electronics) create_electronics() - + electronics.loc = src.loc electronics = null @@ -1059,13 +1059,17 @@ About the new airlock wires panel: /obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) ..() + //High-sec airlocks are much harder to completely break by emitters. + if(secured_wires) + emitter_resistance *= 3 + //if assembly is given, create the new door from the assembly if (assembly) assembly_type = assembly.type - + electronics = assembly.electronics electronics.loc = src - + //update the door's access to match the electronics' secured_wires = electronics.secure if(electronics.one_access) @@ -1073,7 +1077,7 @@ About the new airlock wires panel: req_one_access = src.electronics.conf_access else req_access = src.electronics.conf_access - + //get the name from the assembly if(assembly.created_name) name = assembly.created_name @@ -1093,8 +1097,8 @@ About the new airlock wires panel: src.closeOther = A break -// Most doors will never be deconstructed over the course of a round, -// so as an optimization defer the creation of electronics until +// Most doors will never be deconstructed over the course of a round, +// so as an optimization defer the creation of electronics until // the airlock is deconstructed /obj/machinery/door/airlock/proc/create_electronics() //create new electronics @@ -1102,7 +1106,7 @@ About the new airlock wires panel: src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc ) else src.electronics = new/obj/item/weapon/airlock_electronics( src.loc ) - + //update the electronics to match the door's access if(!src.req_access) src.check_access() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index bc8719060f..c3ab77d74a 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -25,6 +25,8 @@ var/air_properties_vary_with_direction = 0 var/maxhealth = 300 var/health + var/emitter_hits = 0 // For use when tracking amount of emitter hits taken. + var/emitter_resistance = 10 // Amount of emitter hits doors whistand var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon @@ -133,9 +135,22 @@ if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) return + // Emitter Blasts - these will eventually completely destroy the door, given enough time. + if (istype(Proj, /obj/item/projectile/beam/emitter)) + if(health > 0) + Proj.damage /= 4 + else + emitter_hits ++ + if(emitter_hits >= emitter_resistance) + visible_message("\red [src.name] breaks apart!", 1) + new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! + del(src) + if(Proj.damage) take_damage(Proj.damage) + + /obj/machinery/door/hitby(AM as mob|obj) ..() diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 474e3b66e2..ae4a147f70 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -2,6 +2,15 @@ /obj/machinery/door/airlock/multi_tile width = 2 +/obj/machinery/door/airlock/multi_tile/New() + ..() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + /obj/machinery/door/airlock/multi_tile/glass name = "Glass Airlock" icon = 'icons/obj/doors/Door2x1glass.dmi' diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 4f5e416d33..9ab7dabb2d 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -6,6 +6,7 @@ var/id = 1.0 dir = 1 explosion_resistance = 25 + emitter_resistance = 50 // Lots of emitter blasts, it's blast door after all. /obj/machinery/door/poddoor/New() . = ..() @@ -28,6 +29,7 @@ icon_state = "pdoor0" return + /obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob) src.add_fingerprint(user) if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index b2f3020879..b70eaffa4a 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -24,6 +24,13 @@ return return +/obj/machinery/door/poddoor/shutters/update_icon() + if(density) + icon_state = "shutter1" + else + icon_state = "shutter0" + return + /obj/machinery/door/poddoor/shutters/open() if(operating == 1) //doors can still open when emag-disabled return diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 66708db7f7..68009eec60 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -81,13 +81,28 @@ var/const/HOLOPAD_MODE = 0 /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb) +/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb, datum/language/speaking) if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something. - if(!master.say_understands(M))//The AI will be able to understand most mobs talking through the holopad. - text = stars(text) + if(!master.say_understands(M, speaking))//The AI will be able to understand most mobs talking through the holopad. + if(speaking) + text = speaking.scramble(text) + else + text = stars(text) var/name_used = M.GetVoice() //This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only. - var/rendered = "Holopad received, [name_used] [verb], \"[text]\"" + var/rendered + if(speaking) + rendered = "Holopad received, [name_used] [speaking.format_message(text, verb)]" + else + rendered = "Holopad received, [name_used] [verb], \"[text]\"" + master.show_message(rendered, 2) + return + +/obj/machinery/hologram/holopad/see_emote(mob/living/M, text) + if(M && hologram && master) + //var/name_used = M.GetVoice() + var/rendered = "Holopad received, [text]" + //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. master.show_message(rendered, 2) return diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index a005d0e9d4..52c1bdc380 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -1,15 +1,19 @@ /obj/machinery/gibber - name = "Gibber" + name = "gibber" desc = "The name isn't descriptive enough?" icon = 'icons/obj/kitchen.dmi' icon_state = "grinder" density = 1 anchored = 1 + req_access = list(access_kitchen,access_morgue) + var/operating = 0 //Is it on? var/dirty = 0 // Does it need cleaning? - var/gibtime = 40 // Time from starting until meat appears var/mob/living/occupant // Mob who has been put inside + var/gib_time = 40 // Time from starting until meat appears + var/gib_throw_dir = WEST // Direction to spit meat and gibs in. + use_power = 1 idle_power_usage = 2 active_power_usage = 500 @@ -18,31 +22,32 @@ /obj/machinery/gibber/autogibber var/turf/input_plate - New() - ..() - spawn(5) - for(var/i in cardinal) - var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - del(input_obj) - break +/obj/machinery/gibber/autogibber/New() + ..() + spawn(5) + for(var/i in cardinal) + var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) + if(input_obj) + if(isturf(input_obj.loc)) + input_plate = input_obj.loc + gib_throw_dir = i + del(input_obj) + break - if(!input_plate) - log_misc("a [src] didn't find an input plate.") - return + if(!input_plate) + log_misc("a [src] didn't find an input plate.") + return - Bumped(var/atom/A) - if(!input_plate) return +/obj/machinery/gibber/autogibber/Bumped(var/atom/A) + if(!input_plate) return - if(ismob(A)) - var/mob/M = A + if(ismob(A)) + var/mob/M = A - if(M.loc == input_plate - ) - M.loc = src - M.gib() + if(M.loc == input_plate + ) + M.loc = src + M.gib() /obj/machinery/gibber/New() @@ -70,43 +75,74 @@ if(stat & (NOPOWER|BROKEN)) return if(operating) - user << "\red It's locked and running" + user << "The gibber is locked and running, wait for it to finish." return else src.startgibbing(user) -/obj/machinery/gibber/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) - if(src.occupant) - user << "\red The gibber is full, empty it first!" +/obj/machinery/gibber/examine() + ..() + usr << "The safety guard is [emagged ? "disabled" : "enabled"]." + +/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user) + + if(istype(W,/obj/item/weapon/card)) + if(!allowed(user) && !istype(W,/obj/item/weapon/card/emag)) + user << "Access denied." + return + emagged = !emagged + user << "You [emagged ? "disable" : "enable"] the gibber safety guard." return - if( !(istype(G, /obj/item/weapon/grab)) ) - user << "\red This item is not suitable for the gibber!" - return + var/obj/item/weapon/grab/G = W - if( !(istype(G.affecting, /mob/living/carbon)) && !(istype(G.affecting, /mob/living/simple_animal)) ) - user << "\red This item is not suitable for the gibber!" - return + if(!istype(G)) + return ..() if(G.state < 2) - user << "\red You need a better grip to do that!" + user << "You need a better grip to do that!" return - if(G.affecting.abiotic(1)) - user << "\red Subject may not have abiotic items on." + move_into_gibber(user,G.affecting) + // Grab() process should clean up the grab item, no need to del it. + +/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.restrained()) + return + move_into_gibber(user,target) + +/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim) + + if(src.occupant) + user << "The gibber is full, empty it first!" return - user.visible_message("\red [user] starts to put [G.affecting] into the gibber!") + if(operating) + user << "The gibber is locked and running, wait for it to finish." + return + + if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) ) + user << "This is not suitable for the gibber!" + return + + if(istype(victim,/mob/living/carbon/human) && !emagged) + user << "The gibber safety guard is engaged!" + return + + + if(victim.abiotic(1)) + user << "Subject may not have abiotic items on." + return + + user.visible_message("\red [user] starts to put [victim] into the gibber!") src.add_fingerprint(user) - if(do_after(user, 30) && G && G.affecting && !occupant) - user.visible_message("\red [user] stuffs [G.affecting] into the gibber!") - var/mob/M = G.affecting - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.loc = src - src.occupant = M - del(G) + if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) + user.visible_message("\red [user] stuffs [victim] into the gibber!") + if(victim.client) + victim.client.perspective = EYE_PERSPECTIVE + victim.client.eye = src + victim.loc = src + src.occupant = victim update_icon() /obj/machinery/gibber/verb/eject() @@ -121,7 +157,7 @@ return /obj/machinery/gibber/proc/go_out() - if (!src.occupant) + if(operating || !src.occupant) return for(var/obj/O in src) O.loc = src.loc @@ -138,86 +174,67 @@ if(src.operating) return if(!src.occupant) - visible_message("\red You hear a loud metallic grinding sound.") + visible_message("You hear a loud metallic grinding sound.") return use_power(1000) - visible_message("\red You hear a loud squelchy grinding sound.") + visible_message("You hear a loud squelchy grinding sound.") src.operating = 1 update_icon() - var/totalslabs = 3 - var/obj/item/weapon/reagent_containers/food/snacks/meat/allmeat[totalslabs] + var/slab_name = occupant.name + var/slab_count = 3 + var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat + var/slab_nutrition = src.occupant.nutrition / 15 - if( istype(src.occupant, /mob/living/carbon/human/) ) - var/sourcename = src.occupant.real_name - var/sourcejob = src.occupant.job - var/sourcenutriment = src.occupant.nutrition / 15 - var/sourcetotalreagents = src.occupant.reagents.total_volume + // Some mobs have specific meat item types. + if(istype(src.occupant,/mob/living/simple_animal)) + var/mob/living/simple_animal/critter = src.occupant + if(critter.meat_amount) + slab_count = critter.meat_amount + if(critter.meat_type) + slab_type = critter.meat_type + else if(istype(src.occupant,/mob/living/carbon/human)) + slab_name = src.occupant.real_name + slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human + else if(istype(src.occupant, /mob/living/carbon/monkey)) + slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey - for(var/i=1 to totalslabs) - var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new - newmeat.name = sourcename + newmeat.name - newmeat.subjectname = sourcename - newmeat.subjectjob = sourcejob - newmeat.reagents.add_reagent("nutriment", sourcenutriment / totalslabs) // Thehehe. Fat guys go first - src.occupant.reagents.trans_to(newmeat, round (sourcetotalreagents / totalslabs, 1)) // Transfer all the reagents from the - allmeat[i] = newmeat + // Small mobs don't give as much nutrition. + if(src.occupant.small) + slab_nutrition *= 0.5 + slab_nutrition /= slab_count - src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" //One shall not simply gib a mob unnoticed! - user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" - msg_admin_attack("[user.name] ([user.ckey]) gibbed [src.occupant] ([src.occupant.ckey]) (JMP)") + for(var/i=1 to slab_count) + var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src) + new_meat.name = "[slab_name] [new_meat.name]" + new_meat.reagents.add_reagent("nutriment",slab_nutrition) - src.occupant.death(1) - src.occupant.ghostize() + if(src.occupant.reagents) + src.occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1)) - else if( istype(src.occupant, /mob/living/carbon/) || istype(src.occupant, /mob/living/simple_animal/ ) ) + src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" //One shall not simply gib a mob unnoticed! + user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" + msg_admin_attack("[user.name] ([user.ckey]) gibbed [src.occupant] ([src.occupant.ckey]) (JMP)") - var/sourcename = src.occupant.name - var/sourcenutriment = src.occupant.nutrition / 15 - var/sourcetotalreagents = 0 + src.occupant.ghostize() - if( istype(src.occupant, /mob/living/carbon/monkey/) || istype(src.occupant, /mob/living/carbon/alien/) ) // why are you gibbing aliens? oh well - totalslabs = 3 - sourcetotalreagents = src.occupant.reagents.total_volume - else if( istype(src.occupant, /mob/living/simple_animal/cow) || istype(src.occupant, /mob/living/simple_animal/hostile/bear) ) - totalslabs = 2 - else - totalslabs = 1 - sourcenutriment = src.occupant.nutrition / 30 // small animals don't have as much nutrition + spawn(gib_time) - for(var/i=1 to totalslabs) - var/obj/item/weapon/reagent_containers/food/snacks/meat/newmeat = new - newmeat.name = "[sourcename]-[newmeat.name]" + src.operating = 0 + src.occupant.gib() + del(src.occupant) - newmeat.reagents.add_reagent("nutriment", sourcenutriment / totalslabs) - - // Transfer reagents from the old mob to the meat - if( istype(src.occupant, /mob/living/carbon/) ) - src.occupant.reagents.trans_to(newmeat, round(sourcetotalreagents / totalslabs, 1)) - - allmeat[i] = newmeat - - if(src.occupant.client) // Gibbed a cow with a client in it? log that shit - src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" - user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" - msg_admin_attack("\[[time_stamp()]\] [key_name(user)] gibbed [key_name(src.occupant)]") - - src.occupant.death(1) - src.occupant.ghostize() - - del(src.occupant) - - spawn(src.gibtime) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) operating = 0 - for (var/i=1 to totalslabs) - var/obj/item/meatslab = allmeat[i] - var/turf/Tx = locate(src.x - i, src.y, src.z) - meatslab.loc = src.loc - meatslab.throw_at(Tx,i,3,src) - if (!Tx.density) - new /obj/effect/decal/cleanable/blood/gibs(Tx,i) - src.operating = 0 + for (var/obj/thing in contents) + // Todo: unify limbs and internal organs + // There's a chance that the gibber will fail to destroy some evidence. + if((istype(thing,/obj/item/weapon/organ) || istype(thing,/obj/item/organ)) && prob(80)) + del(thing) + continue + thing.loc = get_turf(thing) // Drop it onto the turf for throwing. + thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt. + update_icon() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 519219e96e..616ef4c6c9 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -129,8 +129,10 @@ Class Procs: return 0 return apc.drain_power() -/obj/machinery/New() - ..() +/obj/machinery/New(l, d=0) + ..(l) + if(d) + set_dir(d) if(!machinery_sort_required && ticker) dd_insertObjectList(machines, src) else @@ -335,6 +337,7 @@ Class Procs: /obj/machinery/proc/dismantle() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) + M.set_dir(src.dir) M.state = 2 M.icon_state = "box_1" for(var/obj/I in component_parts) @@ -375,7 +378,7 @@ Class Procs: if(istype(perp.belt, /obj/item/weapon/gun) || istype(perp.belt, /obj/item/weapon/melee)) threatcount += 2 - if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none") + if(perp.species.name != "Human") //beepsky so racist. threatcount += 2 if(check_records || check_arrest) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 210948bbd3..baa5b9f975 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -55,7 +55,7 @@ Buildable meters var/pipe_type = 0 //var/pipe_dir = 0 var/pipename - var/connect_types[] = list(1) //1=regular, 2=supply, 3=scrubber + var/connect_types = CONNECT_TYPE_REGULAR force = 7 icon = 'icons/obj/pipe-item.dmi' icon_state = "simple" @@ -83,26 +83,26 @@ Buildable meters src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/supply)) src.pipe_type = PIPE_SUPPLY_STRAIGHT + is_bent - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_STRAIGHT + is_bent - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/universal) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/universal)) src.pipe_type = PIPE_UNIVERSAL - connect_types = list(1,2,3) + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple)) src.pipe_type = PIPE_SIMPLE_STRAIGHT + is_bent else if(istype(make_from, /obj/machinery/atmospherics/portables_connector)) src.pipe_type = PIPE_CONNECTOR else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold/hidden/supply)) src.pipe_type = PIPE_SUPPLY_MANIFOLD - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_MANIFOLD - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold)) src.pipe_type = PIPE_MANIFOLD @@ -134,21 +134,21 @@ Buildable meters src.pipe_type = PIPE_MTVALVE else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply)) src.pipe_type = PIPE_SUPPLY_MANIFOLD4W - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_MANIFOLD4W - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w)) src.pipe_type = PIPE_MANIFOLD4W else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/cap/hidden/supply)) src.pipe_type = PIPE_SUPPLY_CAP - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/cap/hidden/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_CAP - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap)) src.pipe_type = PIPE_CAP @@ -159,21 +159,21 @@ Buildable meters ///// Z-Level stuff else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up/supply)) src.pipe_type = PIPE_SUPPLY_UP - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_UP - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up)) src.pipe_type = PIPE_UP else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down/supply)) src.pipe_type = PIPE_SUPPLY_DOWN - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers)) src.pipe_type = PIPE_SCRUBBERS_DOWN - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down)) src.pipe_type = PIPE_DOWN @@ -182,13 +182,13 @@ Buildable meters src.pipe_type = pipe_type src.set_dir(dir) if (pipe_type == 29 || pipe_type == 30 || pipe_type == 33 || pipe_type == 35 || pipe_type == 37 || pipe_type == 39 || pipe_type == 41) - connect_types = list(2) + connect_types = CONNECT_TYPE_SUPPLY src.color = PIPE_COLOR_BLUE else if (pipe_type == 31 || pipe_type == 32 || pipe_type == 34 || pipe_type == 36 || pipe_type == 38 || pipe_type == 40 || pipe_type == 42) - connect_types = list(3) + connect_types = CONNECT_TYPE_SCRUBBER src.color = PIPE_COLOR_RED else if (pipe_type == 28) - connect_types = list(1,2,3) + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER //src.pipe_dir = get_pipe_dir() update() src.pixel_x = rand(-5, 5) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index b014ece92a..04b8c5644a 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/teleporter - name = "Teleporter" + name = "Teleporter Control Console" desc = "Used to control a linked teleportation Hub and Station." icon_state = "teleport" circuit = "/obj/item/weapon/circuitboard/teleporter" diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 8a527e1b08..08d6f2cca4 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -1,6 +1,6 @@ /obj/item/mecha_parts/mecha_equipment/tool/sleeper - name = "Mounted Sleeper" - desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)" + name = "mounted sleeper" + desc = "A sleeper. Mountable to an exosuit. (Can be attached to: Medical Exosuits)" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "sleeper_0" origin_tech = "programming=2;biotech=3" @@ -373,7 +373,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - name = "Syringe Gun" + name = "syringe gun" desc = "Exosuit-mounted chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur. (Can be attached to: Medical Exosuits)" icon = 'icons/obj/gun.dmi' icon_state = "syringegun" diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 3d318a891a..999df5b8d5 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1,5 +1,5 @@ /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - name = "Hydraulic Clamp" + name = "hydraulic clamp" icon_state = "mecha_clamp" equip_cooldown = 15 energy_drain = 10 @@ -64,7 +64,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/tool/drill - name = "Drill" + name = "drill" desc = "This is the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)" icon_state = "mecha_drill" equip_cooldown = 30 @@ -115,7 +115,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - name = "Diamond Drill" + name = "diamond drill" desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)" icon_state = "mecha_diamond_drill" origin_tech = "materials=4;engineering=3" @@ -166,7 +166,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/tool/extinguisher - name = "Extinguisher" + name = "extinguisher" desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)" icon_state = "mecha_exting" equip_cooldown = 5 @@ -240,7 +240,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/rcd - name = "Mounted RCD" + name = "mounted RCD" desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)" icon_state = "mecha_rcd" origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" @@ -345,7 +345,7 @@ /obj/item/mecha_parts/mecha_equipment/teleporter - name = "Teleporter" + name = "teleporter" desc = "An exosuit module that allows exosuits to teleport to any position in view." icon_state = "mecha_teleport" origin_tech = "bluespace=10" @@ -365,7 +365,7 @@ /obj/item/mecha_parts/mecha_equipment/wormhole_generator - name = "Wormhole Generator" + name = "wormhole generator" desc = "An exosuit module that allows generating of small quasi-stable wormholes." icon_state = "mecha_wholegen" origin_tech = "bluespace=3" @@ -415,7 +415,7 @@ return /obj/item/mecha_parts/mecha_equipment/gravcatapult - name = "Gravitational Catapult" + name = "gravitational catapult" desc = "An exosuit mounted Gravitational Catapult." icon_state = "mecha_teleport" origin_tech = "bluespace=2;magnets=3" @@ -491,8 +491,8 @@ /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. - name = "Armor Booster Module (Close Combat Weaponry)" - desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." + name = "\improper CCW armor booster" + desc = "Close-combat armor booster. Boosts exosuit armor against armed melee attacks. Requires energy to operate." icon_state = "mecha_abooster_ccw" origin_tech = "materials=3" equip_cooldown = 10 @@ -541,8 +541,8 @@ /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - name = "Armor Booster Module (Ranged Weaponry)" - desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." + name = "\improper RW armor booster" + desc = "Ranged-weaponry armor booster. Boosts exosuit armor against ranged attacks. Completely blocks taser shots, but requires energy to operate." icon_state = "mecha_abooster_proj" origin_tech = "materials=4" equip_cooldown = 10 @@ -612,8 +612,8 @@ /obj/item/mecha_parts/mecha_equipment/repair_droid - name = "Repair Droid" - desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage." + name = "repair droid" + desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost any type of external or internal damage." icon_state = "repair_droid" origin_tech = "magnets=3;programming=3" equip_cooldown = 20 @@ -702,7 +702,7 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - name = "Energy Relay" + name = "energy relay" desc = "Wirelessly drains energy from any available power channel in area. The performance index is quite low." icon_state = "tesla" origin_tech = "magnets=4;syndicate=2" @@ -814,7 +814,7 @@ /obj/item/mecha_parts/mecha_equipment/generator - name = "Phoron Generator" + name = "phoron generator" desc = "Generates power using solid phoron as fuel. Pollutes the environment." icon_state = "tesla" origin_tech = "phorontech=2;powerstorage=2;engineering=1" @@ -952,7 +952,7 @@ /obj/item/mecha_parts/mecha_equipment/generator/nuclear - name = "ExoNuclear Reactor" + name = "\improper ExoNuclear reactor" desc = "Generates power using uranium. Pollutes the environment." icon_state = "tesla" origin_tech = "powerstorage=3;engineering=3" @@ -989,7 +989,7 @@ //This is pretty much just for the death-ripley so that it is harmless /obj/item/mecha_parts/mecha_equipment/tool/safety_clamp - name = "KILL CLAMP" + name = "\improper KILL CLAMP" icon_state = "mecha_clamp" equip_cooldown = 15 energy_drain = 0 @@ -1208,4 +1208,4 @@ if (OCCUPIED|LOCKED) usr << "\red All of the passenger compartments are already occupied or locked!" if (0) - usr << "\red \The [src] doesn't have a passenger compartment." \ No newline at end of file + usr << "\red \The [src] doesn't have a passenger compartment." diff --git a/code/game/mecha/equipment/tools/unused_tools.dm b/code/game/mecha/equipment/tools/unused_tools.dm index 470159e06f..012d7979e1 100644 --- a/code/game/mecha/equipment/tools/unused_tools.dm +++ b/code/game/mecha/equipment/tools/unused_tools.dm @@ -9,7 +9,7 @@ //NEEDS SPRITE! (When this gets ticked in search for 'TODO MECHA JETPACK SPRITE MISSING' through code to uncomment the place where it's missing.) /obj/item/mecha_parts/mecha_equipment/jetpack - name = "Jetpack" + name = "jetpack" desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight." icon_state = "mecha_equip" equip_cooldown = 5 @@ -108,7 +108,7 @@ /obj/item/mecha_parts/mecha_equipment/defence_shocker - name = "Exosuit Defence Shocker" + name = "exosuit defence shocker" desc = "" icon_state = "mecha_teleport" equip_cooldown = 10 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index da6188263a..bcb907a040 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -58,12 +58,12 @@ P.process() /obj/item/mecha_parts/mecha_equipment/weapon/energy - name = "General Energy Weapon" + name = "general energy weapon" auto_rearm = 1 /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 - name = "CH-PS \"Immolator\" Laser" + name = "\improper CH-PS \"Immolator\" laser" icon_state = "mecha_laser" energy_drain = 30 projectile = /obj/item/projectile/beam @@ -71,7 +71,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser equip_cooldown = 30 - name = "Jury-rigged Welder-Laser" + name = "jury-rigged welder-laser" desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times." icon_state = "mecha_laser" energy_drain = 80 @@ -81,7 +81,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy equip_cooldown = 15 - name = "CH-LC \"Solaris\" Laser Cannon" + name = "\improper CH-LC \"Solaris\" laser cannon" icon_state = "mecha_laser" energy_drain = 60 projectile = /obj/item/projectile/beam/heavylaser @@ -89,7 +89,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion equip_cooldown = 40 - name = "mkIV Ion Heavy Cannon" + name = "mkIV ion heavy cannon" icon_state = "mecha_ion" energy_drain = 120 projectile = /obj/item/projectile/ion @@ -97,7 +97,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse equip_cooldown = 30 - name = "eZ-13 mk2 Heavy pulse rifle" + name = "eZ-13 mk2 heavy pulse rifle" icon_state = "mecha_pulse" energy_drain = 120 origin_tech = "materials=3;combat=6;powerstorage=4" @@ -117,7 +117,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - name = "PBT \"Pacifier\" Mounted Taser" + name = "\improper PBT \"Pacifier\" mounted taser" icon_state = "mecha_taser" energy_drain = 20 equip_cooldown = 8 @@ -126,7 +126,7 @@ /* Commenting this out rather than removing it because it may be useful for reference. /obj/item/mecha_parts/mecha_equipment/weapon/honker - name = "HoNkER BlAsT 5000" + name = "\improper HoNkER BlAsT 5000" icon_state = "mecha_honker" energy_drain = 200 equip_cooldown = 150 @@ -164,17 +164,6 @@ M.Paralyse(4) else M.make_jittery(500) - /* //else the mousetraps are useless - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(isobj(H.shoes)) - var/thingy = H.shoes - H.drop_from_inventory(H.shoes) - walk_away(thingy,chassis,15,2) - spawn(20) - if(thingy) - walk(thingy,0) - */ chassis.use_power(energy_drain) log_message("Honked from [src.name]. HONK!") do_after_cooldown() @@ -182,7 +171,7 @@ */ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic - name = "General Ballisic Weapon" + name = "general ballisic weapon" var/projectile_energy_cost get_equip_info() @@ -207,7 +196,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - name = "LBX AC 10 \"Scattershot\"" + name = "\improper LBX AC 10 \"Scattershot\"" icon_state = "mecha_scatter" equip_cooldown = 20 projectile = /obj/item/projectile/bullet/midbullet @@ -219,7 +208,7 @@ projectile_energy_cost = 25 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - name = "Ultra AC 2" + name = "\improper Ultra AC 2" icon_state = "mecha_uac2" equip_cooldown = 10 projectile = /obj/item/projectile/bullet/weakbullet @@ -238,7 +227,7 @@ AM.throw_at(target,missile_range, missile_speed, chassis) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive - name = "SRM-8 Missile Rack" + name = "\improper SRM-8 missile rack" icon_state = "mecha_missilerack" projectile = /obj/item/missile fire_sound = 'sound/effects/bang.ogg' @@ -266,7 +255,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang - name = "SGL-6 Grenade Launcher" + name = "\improper SGL-6 grenade launcher" icon_state = "mecha_grenadelnchr" projectile = /obj/item/weapon/grenade/flashbang fire_sound = 'sound/effects/bang.ogg' @@ -283,7 +272,7 @@ F.prime() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve - name = "SOP-6 Grenade Launcher" + name = "\improper SOP-6 grenade launcher" projectile = /obj/item/weapon/grenade/flashbang/clusterbang construction_cost = list("metal"=20000,"gold"=6000,"uranium"=6000) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 20703363ff..d3c249b747 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -46,8 +46,8 @@ return // temporary fix for broken icon until somebody gets around to make these player-buildable -/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob) - ..() +/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob) + ..() if(floor_type) icon_state = "recharge_floor" else @@ -190,45 +190,28 @@ var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src) if(F) F.init_devices() - - var/output = "[src.name]" - if(!recharge_floor) - output += "Mech Bay Recharge Station not initialized.
" + ui_interact(user) + +/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/list/data = list() + data["has_floor"] = recharge_floor + data["has_port"] = recharge_port + if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell) + data["has_mech"] = 1 + data["mecha_name"] = recharge_floor.recharging_mecha || "None" + data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge + data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge + data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent()) else - output += {"Mech Bay Recharge Station Data:
- Mecha: [recharge_floor.recharging_mecha||"None"]
"} - if(recharge_floor.recharging_mecha) - var/cell_charge = recharge_floor.recharging_mecha.get_charge() - output += "Cell charge: [isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"]
" - output += "
" - if(!recharge_port) - output += "Mech Bay Power Port not initialized.
" - else - output += "Mech Bay Power Port Status: [recharge_port.active()?"Now charging":"On hold"]
" - - /* - output += {"
- Settings: -
- Start sequence on succesful init: [autostart?"On":"Off"]
- Recharge Port Voltage: Low - Medium - High
-
"} - */ - - output += "" - user << browse(output, "window=mech_bay_console") - onclose(user, "mech_bay_console") - return - -// unused at the moment, also lacks any kind of exploit prevention -/* -/obj/machinery/computer/mech_bay_power_console/Topic(href, href_list) - if(href_list["autostart"]) - autostart = !autostart - if(href_list["voltage"]) - voltage = text2num(href_list["voltage"]) - if(recharge_port) - recharge_port.set_voltage(voltage) - updateUsrDialog() - return -*/ + data["has_mech"] = 0 + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) \ No newline at end of file diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d964529c02..3285218baf 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -203,6 +203,12 @@ radio.talk_into(M, text) return +/obj/mecha/see_emote(mob/living/M, text) + if(occupant && occupant.client) + var/rendered = "[text]" + occupant.show_message(rendered, 2) + ..() + //////////////////////////// ///// Action processing //// //////////////////////////// diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 479c8f7d09..b9a6ab4e78 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -2,6 +2,8 @@ ////// Mecha Parts ////// ///////////////////////// +// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm + /obj/item/mecha_parts name = "mecha part" icon = 'icons/mecha/mech_construct.dmi' @@ -347,90 +349,3 @@ origin_tech = "materials=3;engineering=3" construction_time = 200 construction_cost = list("metal"=15000)*/ - - -///////// Circuitboards - -/obj/item/weapon/circuitboard/mecha - name = "Exosuit Circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - item_state = "electronic" - board_type = "other" - flags = FPRINT | TABLEPASS | CONDUCT - force = 5.0 - w_class = 2.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 15 - - ripley - origin_tech = "programming=3" - - ripley/peripherals - name = "Circuit board (Ripley Peripherals Control module)" - icon_state = "mcontroller" - - ripley/main - name = "Circuit board (Ripley Central Control module)" - icon_state = "mainboard" - - gygax - origin_tech = "programming=4" - - gygax/peripherals - name = "Circuit board (Gygax Peripherals Control module)" - icon_state = "mcontroller" - - gygax/targeting - name = "Circuit board (Gygax Weapon Control and Targeting module)" - icon_state = "mcontroller" - origin_tech = "programming=4;combat=4" - - gygax/main - name = "Circuit board (Gygax Central Control module)" - icon_state = "mainboard" - - durand - origin_tech = "programming=4" - - durand/peripherals - name = "Circuit board (Durand Peripherals Control module)" - icon_state = "mcontroller" - - durand/targeting - name = "Circuit board (Durand Weapon Control and Targeting module)" - icon_state = "mcontroller" - origin_tech = "programming=4;combat=4" - - durand/main - name = "Circuit board (Durand Central Control module)" - icon_state = "mainboard" - - honker - origin_tech = "programming=4" - - honker/peripherals - name = "Circuit board (H.O.N.K Peripherals Control module)" - icon_state = "mcontroller" - - honker/targeting - name = "Circuit board (H.O.N.K Weapon Control and Targeting module)" - icon_state = "mcontroller" - - honker/main - name = "Circuit board (H.O.N.K Central Control module)" - icon_state = "mainboard" - - odysseus - origin_tech = "programming=3" - - odysseus/peripherals - name = "Circuit board (Odysseus Peripherals Control module)" - icon_state = "mcontroller" - - odysseus/main - name = "Circuit board (Odysseus Central Control module)" - icon_state = "mainboard" - - diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 56e5327079..cdc7b26bbf 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -345,7 +345,7 @@ Alien plants should do something if theres a lot of poison var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive /obj/effect/alien/egg/New() - if(aliens_allowed) + if(config.aliens_allowed) ..() spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) Grow() diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index d50d595d3e..8d8328bc9f 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -1,23 +1,28 @@ -/obj/effect/decal/remains/human +/obj/effect/decal/remains name = "remains" - desc = "They look like human remains. They have a strange aura about them." gender = PLURAL icon = 'icons/effects/blood.dmi' icon_state = "remains" - anchored = 1 + anchored = 0 + +/obj/effect/decal/remains/human + desc = "They look like human remains. They have a strange aura about them." /obj/effect/decal/remains/xeno - name = "remains" desc = "They look like the remains of something... alien. They have a strange aura about them." - gender = PLURAL - icon = 'icons/effects/blood.dmi' icon_state = "remainsxeno" - anchored = 1 /obj/effect/decal/remains/robot - name = "remains" desc = "They look like the remains of something mechanical. They have a strange aura about them." - gender = PLURAL icon = 'icons/mob/robots.dmi' icon_state = "remainsrobot" - anchored = 1 \ No newline at end of file + +/obj/effect/decal/remains/attack_hand(mob/user as mob) + user << "[src] sinks together into a pile of ash." + var/turf/simulated/floor/F = get_turf(src) + if (istype(F)) + new /obj/effect/decal/cleanable/ash(F) + del(src) + +/obj/effect/decal/remains/robot/attack_hand(mob/user as mob) + return diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index db7abda850..82d27968db 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -557,18 +557,9 @@ steam.start() -- spawns the effect /obj/effect/effect/foam/Crossed(var/atom/movable/AM) if(metal) return - - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - - M.stop_pulling() - M << "\blue You slipped on the foam!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(5) - M.Weaken(2) - + if(istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the foam",6) /datum/effect/effect/system/foam_spread var/amount = 5 // the size of the foam spread. @@ -733,15 +724,15 @@ steam.start() -- spawns the effect var/light = -1 var/flash = -1 - // Clamp all values to MAX_EXPLOSION_RANGE + // Clamp all values to max_explosion_range if (round(amount/12) > 0) - devastation = min (MAX_EXPLOSION_RANGE, devastation + round(amount/12)) + devastation = min (max_explosion_range, devastation + round(amount/12)) if (round(amount/6) > 0) - heavy = min (MAX_EXPLOSION_RANGE, heavy + round(amount/6)) + heavy = min (max_explosion_range, heavy + round(amount/6)) if (round(amount/3) > 0) - light = min (MAX_EXPLOSION_RANGE, light + round(amount/3)) + light = min (max_explosion_range, light + round(amount/3)) if (flash && flashing_factor) flash += (round(amount/4) * flashing_factor) diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index 619935b8b2..808e46c2a3 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -1,14 +1,5 @@ -/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA) //CARN MARKER - new /obj/effect/gibspawner/generic(get_turf(location),viruses,MobDNA) - -/proc/hgibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor) - new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA,fleshcolor,bloodcolor) - -/proc/xgibs(atom/location, var/list/viruses) - new /obj/effect/gibspawner/xeno(get_turf(location),viruses) - -/proc/robogibs(atom/location, var/list/viruses) - new /obj/effect/gibspawner/robot(get_turf(location),viruses) +/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor) + new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor) /obj/effect/gibspawner var/sparks = 0 //whether sparks spread on Gib() @@ -24,9 +15,7 @@ if(fleshcolor) src.fleshcolor = fleshcolor if(bloodcolor) src.bloodcolor = bloodcolor - - if(istype(loc,/turf)) //basically if a badmin spawns it - Gib(loc,viruses,MobDNA) + Gib(loc,viruses,MobDNA) proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null) if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) @@ -40,7 +29,7 @@ if(sparks) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, location) + s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo s.start() for(var/i = 1, i<= gibtypes.len, i++) @@ -67,12 +56,11 @@ gib.blood_DNA = list() if(MobDNA) gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type - else if(istype(src, /obj/effect/gibspawner/xeno)) - gib.blood_DNA["UNKNOWN DNA"] = "X*" else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey gib.blood_DNA["Non-human DNA"] = "A+" - var/list/directions = gibdirections[i] - if(directions.len) - gib.streak(directions) + if(istype(location,/turf/)) + var/list/directions = gibdirections[i] + if(directions.len) + gib.streak(directions) del(src) \ No newline at end of file diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 5446ba348e..b145b77ed2 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -16,15 +16,6 @@ gibamounts[6] = pick(0,1,2) ..() - xeno - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core) - gibamounts = list(1,1,1,1,1,1,1) - - New() - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) - gibamounts[6] = pick(0,1,2) - ..() - robot sparks = 1 gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index f2e760a34a..418209d744 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -1,7 +1,7 @@ // APC HULL /obj/item/apc_frame - name = "APC frame" + name = "\improper APC frame" desc = "Used for repairing or building APCs" icon = 'icons/obj/apc_repair.dmi' icon_state = "apc_frame" @@ -24,7 +24,7 @@ if (!istype(loc, /turf/simulated/floor)) usr << "\red APC cannot be placed on this spot." return - if (A.requires_power == 0 || A.name == "Space") + if (A.requires_power == 0 || istype(A, /area/space)) usr << "\red APC cannot be placed in this area." return if (A.get_apc()) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 4c1242160a..f0d8a820c0 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -80,7 +80,7 @@ move an amendment to the drawing.

return A /obj/item/blueprints/proc/get_area_type(var/area/A = get_area()) - if (A.name == "Space") + if(istype(A, /area/space)) return AREA_SPACE var/list/SPECIALS = list( /area/shuttle, diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 68d7547bb0..5441f83cca 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -2,7 +2,7 @@ //Illicit drugs~ /obj/item/weapon/storage/pill_bottle/happy - name = "Happy pills" + name = "bottle of Happy pills" desc = "Highly illegal drug. When you want to see the rainbow." /obj/item/weapon/storage/pill_bottle/happy/New() @@ -16,7 +16,7 @@ new /obj/item/weapon/reagent_containers/pill/happy( src ) /obj/item/weapon/storage/pill_bottle/zoom - name = "Zoom pills" + name = "bottle of Zoom pills" desc = "Highly illegal drug. Trade brain for speed." /obj/item/weapon/storage/pill_bottle/zoom/New() @@ -27,4 +27,4 @@ new /obj/item/weapon/reagent_containers/pill/zoom( src ) new /obj/item/weapon/reagent_containers/pill/zoom( src ) new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) \ No newline at end of file + new /obj/item/weapon/reagent_containers/pill/zoom( src ) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 05071c5883..ff21f7f0ab 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -4,7 +4,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda - name = "PDA" + name = "\improper PDA" desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." icon = 'icons/obj/pda.dmi' icon_state = "pda" @@ -28,7 +28,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/fon = 0 //Is the flashlight function on? var/f_lum = 2 //Luminosity for the flashlight function var/message_silent = 0 //To beep or not to beep, that is the question - var/news_silent = 0 //To beep or not to beep, that is the question + var/news_silent = 1 //To beep or not to beep, that is the question. The answer is No. var/toff = 0 //If 1, messenger disabled var/tnote[0] //Current Texts var/last_text //No text spamming @@ -118,6 +118,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/heads default_cartridge = /obj/item/weapon/cartridge/head icon_state = "pda-h" + news_silent = 1 /obj/item/device/pda/heads/hop default_cartridge = /obj/item/weapon/cartridge/hop @@ -190,7 +191,7 @@ var/global/list/obj/item/device/pda/PDAs = list() desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader." note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" message_silent = 1 //Quiet in the library! - news_silent = 1 + news_silent = 0 // Librarian is above the law! (That and alt job title is reporter) /obj/item/device/pda/clear icon_state = "pda-transp" @@ -1023,7 +1024,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/new_info(var/beep_silent, var/message_tone, var/reception_message) if (!beep_silent) playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, loc)) + for (var/mob/O in hearers(2, loc)) O.show_message(text("\icon[src] *[message_tone]*")) //Search for holder of the PDA. var/mob/living/L = null @@ -1041,8 +1042,9 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/new_news(var/message) new_info(news_silent, newstone, news_silent ? "" : "\icon[src] [message]") - new_news = 1 - update_icon() + if(!news_silent) + new_news = 1 + update_icon() /obj/item/device/pda/ai/new_news(var/message) // Do nothing @@ -1343,21 +1345,13 @@ var/global/list/obj/item/device/pda/PDAs = list() ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if ((istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) || M.m_intent == "walk") - return + if (istype(AM, /mob/living)) + var/mob/living/M = AM - if ((istype(M, /mob/living/carbon/human) && (M.real_name != src.owner) && (istype(src.cartridge, /obj/item/weapon/cartridge/clown)))) - if (src.cartridge.charges < 5) + if(M.slip("the PDA",8) && M.real_name != src.owner && istype(src.cartridge, /obj/item/weapon/cartridge/clown)) + if(src.cartridge.charges < 5) src.cartridge.charges++ - M.stop_pulling() - M << "\blue You slipped on the PDA!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) - /obj/item/device/pda/proc/available_pdas() var/list/names = list() var/list/plist = list() @@ -1391,7 +1385,7 @@ var/global/list/obj/item/device/pda/PDAs = list() //Some spare PDAs in a box /obj/item/weapon/storage/box/PDAs - name = "spare PDAs" + name = "box of spare PDAs" desc = "A box of spare PDA microcomputers." icon = 'icons/obj/pda.dmi' icon_state = "pdabox" @@ -1414,4 +1408,4 @@ var/global/list/obj/item/device/pda/PDAs = list() // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) - A.emp_act(severity) \ No newline at end of file + A.emp_act(severity) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 982ac98ff3..416da91a86 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -35,27 +35,27 @@ var/list/stored_data = list() /obj/item/weapon/cartridge/engineering - name = "Power-ON Cartridge" + name = "\improper Power-ON cartridge" icon_state = "cart-e" access_engine = 1 /obj/item/weapon/cartridge/atmos - name = "BreatheDeep Cartridge" + name = "\improper BreatheDeep cartridge" icon_state = "cart-a" access_atmos = 1 /obj/item/weapon/cartridge/medical - name = "Med-U Cartridge" + name = "\improper Med-U cartridge" icon_state = "cart-m" access_medical = 1 /obj/item/weapon/cartridge/chemistry - name = "ChemWhiz Cartridge" + name = "\improper ChemWhiz cartridge" icon_state = "cart-chem" access_reagent_scanner = 1 /obj/item/weapon/cartridge/security - name = "R.O.B.U.S.T. Cartridge" + name = "\improper R.O.B.U.S.T. cartridge" icon_state = "cart-s" access_security = 1 @@ -65,31 +65,31 @@ radio = new /obj/item/radio/integrated/beepsky(src) /obj/item/weapon/cartridge/detective - name = "D.E.T.E.C.T. Cartridge" + name = "\improper D.E.T.E.C.T. cartridge" icon_state = "cart-s" access_security = 1 access_medical = 1 /obj/item/weapon/cartridge/janitor - name = "CustodiPRO Cartridge" + name = "\improper CustodiPRO cartridge" desc = "The ultimate in clean-room design." icon_state = "cart-j" access_janitor = 1 /obj/item/weapon/cartridge/lawyer - name = "P.R.O.V.E. Cartridge" + name = "\improper P.R.O.V.E. cartridge" icon_state = "cart-s" access_security = 1 /obj/item/weapon/cartridge/clown - name = "Honkworks 5.0" + name = "\improper Honkworks 5.0 cartridge" icon_state = "cart-clown" access_clown = 1 charges = 5 /obj/item/weapon/cartridge/mime - name = "Gestur-O 1000" + name = "\improper Gestur-O 1000 cartridge" icon_state = "cart-mi" access_mime = 1 charges = 5 @@ -105,7 +105,7 @@ desc = "A data cartridge with an integrated radio signaler module." /obj/item/weapon/cartridge/signal/science - name = "Signal Ace 2" + name = "\improper Signal Ace 2 cartridge" desc = "Complete with integrated radio signaler!" icon_state = "cart-tox" access_reagent_scanner = 1 @@ -119,7 +119,7 @@ /obj/item/weapon/cartridge/quartermaster - name = "Space Parts & Space Vendors Cartridge" + name = "\improper Space Parts & Space Vendors cartridge" desc = "Perfect for the Quartermaster on the go!" icon_state = "cart-q" access_quartermaster = 1 @@ -130,12 +130,12 @@ radio = new /obj/item/radio/integrated/mule(src) /obj/item/weapon/cartridge/head - name = "Easy-Record DELUXE" + name = "\improper Easy-Record DELUXE" icon_state = "cart-h" access_status_display = 1 /obj/item/weapon/cartridge/hop - name = "HumanResources9001" + name = "\improper HumanResources9001 cartridge" icon_state = "cart-h" access_status_display = 1 access_quartermaster = 1 @@ -148,7 +148,7 @@ radio = new /obj/item/radio/integrated/mule(src) /obj/item/weapon/cartridge/hos - name = "R.O.B.U.S.T. DELUXE" + name = "\improper R.O.B.U.S.T. DELUXE" icon_state = "cart-hos" access_status_display = 1 access_security = 1 @@ -159,21 +159,21 @@ radio = new /obj/item/radio/integrated/beepsky(src) /obj/item/weapon/cartridge/ce - name = "Power-On DELUXE" + name = "\improper Power-On DELUXE" icon_state = "cart-ce" access_status_display = 1 access_engine = 1 access_atmos = 1 /obj/item/weapon/cartridge/cmo - name = "Med-U DELUXE" + name = "\improper Med-U DELUXE" icon_state = "cart-cmo" access_status_display = 1 access_reagent_scanner = 1 access_medical = 1 /obj/item/weapon/cartridge/rd - name = "Signal Ace DELUXE" + name = "\improper Signal Ace DELUXE" icon_state = "cart-rd" access_status_display = 1 access_reagent_scanner = 1 @@ -185,7 +185,7 @@ radio = new /obj/item/radio/integrated/signal(src) /obj/item/weapon/cartridge/captain - name = "Value-PAK Cartridge" + name = "\improper Value-PAK cartridge" desc = "Now with 200% more value!" icon_state = "cart-c" access_quartermaster = 1 @@ -198,7 +198,7 @@ access_atmos = 1 /obj/item/weapon/cartridge/syndicate - name = "Detomatix Cartridge" + name = "\improper Detomatix cartridge" icon_state = "cart" access_remote_door = 1 access_detonate_pda = 1 diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 0835f6de25..0c7105118f 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -1,5 +1,5 @@ /obj/item/radio/integrated - name = "PDA radio module" + name = "\improper PDA radio module" desc = "An electronic radio system of nanotrasen origin." icon = 'icons/obj/module.dmi' icon_state = "power_mod" diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7767ecd307..fc4f555ed4 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -9,6 +9,8 @@ var/flush = null origin_tech = "programming=4;materials=4" + var/mob/living/silicon/ai/carded_ai + /obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob) if (!istype (M, /mob/living/silicon/decoy)) return ..() @@ -151,6 +153,8 @@ ai.control_disabled = 1 ai.aiRestorePowerRoutine = 0 ai.aiRadio.disabledAi = 1 + carded_ai = ai + ai.attack_log += text("\[[time_stamp()]\] Has been carded with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to card [ai.name] ([ai.ckey])") @@ -166,11 +170,18 @@ /obj/item/device/aicard/proc/clear() name = "inteliCard" + carded_ai = null update_icon() + +/obj/item/device/aicard/see_emote(mob/living/M, text) + if(carded_ai && carded_ai.client) + var/rendered = "[text]" + carded_ai.show_message(rendered, 2) + ..() /* /obj/item/device/aicard/relaymove(var/mob/user, var/direction) if(src.loc && istype(src.loc.loc, /obj/item/rig_module)) var/obj/item/rig_module/module = src.loc.loc if(!module.holder || !direction) return - module.holder.forced_move(direction)*/ \ No newline at end of file + module.holder.forced_move(direction)*/ diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm index e1c7b18a72..0cafa7679c 100644 --- a/code/game/objects/items/devices/binoculars.dm +++ b/code/game/objects/items/devices/binoculars.dm @@ -15,4 +15,4 @@ /obj/item/device/binoculars/attack_self(mob/user) - zoom() \ No newline at end of file + zoom() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index af350bd56b..978cfdb304 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -1,5 +1,5 @@ /obj/item/device/chameleon - name = "chameleon-projector" + name = "chameleon projector" icon_state = "shield0" flags = FPRINT | TABLEPASS| CONDUCT slot_flags = SLOT_BELT @@ -142,4 +142,4 @@ /obj/effect/dummy/chameleon/Del() master.disrupt(0) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 3e952671a0..3168e00feb 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -5,9 +5,9 @@ */ /obj/item/device/debugger - icon = 'icons/obj/hacktool.dmi' name = "debugger" desc = "Used to debug electronic equipment." + icon = 'icons/obj/hacktool.dmi' icon_state = "hacktool-g" flags = FPRINT | TABLEPASS| CONDUCT force = 5.0 @@ -43,4 +43,4 @@ user << "\red There is a software error with the device." else user << "\blue The device's software appears to be fine." - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 14f22059ad..35ff3b720a 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -223,4 +223,4 @@ icon_state = initial(icon_state) /obj/item/device/flashlight/slime/attack_self(mob/user) - return //Bio-luminescence does not toggle. \ No newline at end of file + return //Bio-luminescence does not toggle. diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index ff9ffbcda3..c6238f2648 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -191,4 +191,4 @@ #undef LIGHT_OK #undef LIGHT_EMPTY #undef LIGHT_BROKEN -#undef LIGHT_BURNED \ No newline at end of file +#undef LIGHT_BURNED diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 371fe3b8c4..db79c6390b 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -52,4 +52,4 @@ emagged = 1 insults = rand(1, 3)//to prevent dickflooding return - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index e038d13760..8788eaf0f2 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -69,4 +69,4 @@ /obj/item/device/modkit/tajaran name = "tajaran hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajara" \ No newline at end of file + target_species = "Tajara" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 2a5df89510..6378f8823f 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -19,4 +19,4 @@ matter = list("metal" = 50,"glass" = 20) origin_tech = "magnets=1;engineering=1" - var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage \ No newline at end of file + var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 2f3a9c682e..f2df13a2db 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -304,10 +304,15 @@ /obj/item/device/paicard/emp_act(severity) for(var/mob/M in src) M.emp_act(severity) - ..() /obj/item/device/paicard/ex_act(severity) if(pai) pai.ex_act(severity) else del(src) + +/obj/item/device/paicard/see_emote(mob/living/M, text) + if(pai && pai.client) + var/rendered = "[text]" + pai.show_message(rendered, 2) + ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index d328169d1e..e8ca9c3929 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -1,8 +1,8 @@ // Powersink - used to drain station power /obj/item/device/powersink - desc = "A nulling power sink which drains energy from electrical systems." name = "power sink" + desc = "A nulling power sink which drains energy from electrical systems." icon_state = "powersink0" item_state = "electronic" w_class = 4.0 diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 0de7faad36..ef332fa336 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -1,5 +1,5 @@ /obj/item/device/radio/beacon - name = "Tracking Beacon" + name = "tracking beacon" desc = "A beacon used by a teleporter." icon_state = "beacon" item_state = "signaler" @@ -46,4 +46,4 @@ new /obj/machinery/power/singularity_beacon/syndicate( user.loc ) playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) del(src) - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 8067fd3329..823940a53c 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,6 +1,6 @@ /obj/item/device/encryptionkey/ - name = "Standard Encrpytion Key" + name = "standard encrpytion key" desc = "An encryption key for a radio headset. Contains cypherkeys." icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" @@ -28,96 +28,96 @@ origin_tech = "syndicate=3" /obj/item/device/encryptionkey/headset_sec - name = "Security Radio Encryption Key" + name = "security radio encryption key" icon_state = "sec_cypherkey" channels = list("Security" = 1) /obj/item/device/encryptionkey/headset_eng - name = "Engineering Radio Encryption Key" + name = "engineering radio encryption key" icon_state = "eng_cypherkey" channels = list("Engineering" = 1) /obj/item/device/encryptionkey/headset_rob - name = "Robotics Radio Encryption Key" + name = "robotics radio encryption key" icon_state = "rob_cypherkey" channels = list("Engineering" = 1, "Science" = 1) /obj/item/device/encryptionkey/headset_med - name = "Medical Radio Encryption Key" + name = "medical radio encryption key" icon_state = "med_cypherkey" channels = list("Medical" = 1) /obj/item/device/encryptionkey/headset_sci - name = "Science Radio Encryption Key" + name = "science radio encryption key" icon_state = "sci_cypherkey" channels = list("Science" = 1) /obj/item/device/encryptionkey/headset_medsci - name = "Medical Research Radio Encryption Key" + name = "medical research radio encryption key" icon_state = "medsci_cypherkey" channels = list("Medical" = 1, "Science" = 1) /obj/item/device/encryptionkey/headset_com - name = "Command Radio Encryption Key" + name = "command radio encryption key" icon_state = "com_cypherkey" channels = list("Command" = 1) /obj/item/device/encryptionkey/heads/captain - name = "Captain's Encryption Key" + name = "captain's encryption key" icon_state = "cap_cypherkey" channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0) /obj/item/device/encryptionkey/heads/ai_integrated - name = "AI Integrated Encryption Key" + name = "ai integrated encryption key" desc = "Integrated encryption key" icon_state = "cap_cypherkey" channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1) /obj/item/device/encryptionkey/heads/rd - name = "Research Director's Encryption Key" + name = "research director's encryption key" icon_state = "rd_cypherkey" channels = list("Science" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/hos - name = "Head of Security's Encryption Key" + name = "head of security's encryption key" icon_state = "hos_cypherkey" channels = list("Security" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/ce - name = "Chief Engineer's Encryption Key" + name = "chief engineer's encryption key" icon_state = "ce_cypherkey" channels = list("Engineering" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/cmo - name = "Chief Medical Officer's Encryption Key" + name = "chief medical officer's encryption key" icon_state = "cmo_cypherkey" channels = list("Medical" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/hop - name = "Head of Personnel's Encryption Key" + name = "head of personnel's encryption key" icon_state = "hop_cypherkey" channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0) /* /obj/item/device/encryptionkey/headset_mine - name = "Mining Radio Encryption Key" + name = "mining radio encryption key" icon_state = "mine_cypherkey" channels = list("Mining" = 1) /obj/item/device/encryptionkey/heads/qm - name = "Quartermaster's Encryption Key" + name = "quartermaster's encryption key" icon_state = "qm_cypherkey" channels = list("Cargo" = 1, "Mining" = 1) */ /obj/item/device/encryptionkey/headset_cargo - name = "Supply Radio Encryption Key" + name = "supply radio encryption key" icon_state = "cargo_cypherkey" channels = list("Supply" = 1) /obj/item/device/encryptionkey/headset_service - name = "Service Radio Encryption Key" + name = "service radio encryption key" icon_state = "srv_cypherkey" channels = list("Service" = 1) /obj/item/device/encryptionkey/ert - name = "NanoTrasen ERT Radio Encryption Key" + name = "\improper NanoTrasen ERT radio encryption key" channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index feffa9096d..bfc9e8f69b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -31,7 +31,7 @@ return user << "The following channels are built-in:" - user << radio_desc + user << radio_desc /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") @@ -61,7 +61,7 @@ /obj/item/device/radio/headset/binary origin_tech = "syndicate=3" - ks1type = /obj/item/device/encryptionkey/binary + ks1type = /obj/item/device/encryptionkey/binary /obj/item/device/radio/headset/headset_sec name = "security radio headset" @@ -120,7 +120,7 @@ ks2type = /obj/item/device/encryptionkey/heads/captain /obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. - name = "AI Subspace Transceiver" + name = "\improper AI subspace transceiver" desc = "Integrated AI radio transceiver." icon = 'icons/obj/robot_component.dmi' icon_state = "radio" @@ -135,7 +135,7 @@ return ..(freq, level, 1) /obj/item/device/radio/headset/heads/rd - name = "Research Director's headset" + name = "research director's headset" desc = "Headset of the researching God." icon_state = "com_headset" item_state = "headset" @@ -198,7 +198,7 @@ ks2type = /obj/item/device/encryptionkey/headset_service /obj/item/device/radio/headset/ert - name = "CentCom Response Team headset" + name = "emergency response team radio headset" desc = "The headset of the boss's boss." icon_state = "com_headset" item_state = "headset" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index aa7e260371..5afc8ebc10 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -9,7 +9,7 @@ MASS SPECTROMETER REAGENT SCANNER */ /obj/item/device/t_scanner - name = "T-ray scanner" + name = "\improper T-ray scanner" desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." icon_state = "t-ray0" var/on = 0 @@ -65,10 +65,10 @@ REAGENT SCANNER /obj/item/device/healthanalyzer - name = "Health Analyzer" + name = "health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject." icon_state = "health" item_state = "analyzer" - desc = "A hand-held body scanner able to distinguish vital signs of the subject." flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BELT throwforce = 3 @@ -227,8 +227,8 @@ REAGENT SCANNER /obj/item/device/analyzer - desc = "A hand-held environmental scanner which reports current gas levels." name = "analyzer" + desc = "A hand-held environmental scanner which reports current gas levels." icon_state = "atmos" item_state = "analyzer" w_class = 2.0 @@ -274,8 +274,8 @@ REAGENT SCANNER return /obj/item/device/mass_spectrometer + name = "mass spectrometer" desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." - name = "mass-spectrometer" icon_state = "spectrometer" item_state = "analyzer" w_class = 2.0 @@ -342,7 +342,7 @@ REAGENT SCANNER return /obj/item/device/mass_spectrometer/adv - name = "advanced mass-spectrometer" + name = "advanced mass spectrometer" icon_state = "adv_spectrometer" details = 1 origin_tech = "magnets=4;biotech=2" diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 21ed5cf2aa..f32b5256b5 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -182,4 +182,4 @@ if (cell) user << "The charge meter reads [round(cell.percent())]%." else - user << "It doesn't have a power cell installed." \ No newline at end of file + user << "It doesn't have a power cell installed." diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 88f5ad1830..f5e43436b9 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -1,6 +1,6 @@ /obj/item/device/taperecorder - desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback." name = "universal recorder" + desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback." icon_state = "taperecorderidle" item_state = "analyzer" w_class = 2.0 diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 33149b06a4..52e5e220f2 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -29,7 +29,6 @@ effective or pretty fucking useless. var/times_used = 0 //Number of times it's been used. var/max_uses = 2 - /obj/item/device/batterer/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) if(!user) return if(times_used >= max_uses) @@ -55,7 +54,3 @@ effective or pretty fucking useless. times_used += 1 if(times_used >= max_uses) icon_state = "battererburnt" - - - - diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 8cace9a223..36c3b3d11f 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,8 +1,8 @@ /obj/item/device/transfer_valve - icon = 'icons/obj/assemblies.dmi' name = "tank transfer valve" - icon_state = "valve_1" desc = "Regulates the transfer of air between two tanks" + icon = 'icons/obj/assemblies.dmi' + icon_state = "valve_1" var/obj/item/weapon/tank/tank_one var/obj/item/weapon/tank/tank_two var/obj/item/device/attached_device @@ -210,4 +210,4 @@ // this doesn't do anything but the timer etc. expects it to be here // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs /obj/item/device/transfer_valve/proc/c_state() - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 9b58a812ce..cd2ff9b5fb 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -146,7 +146,7 @@ datum/nano_item_lists */ /obj/item/device/uplink/hidden - name = "Hidden Uplink." + name = "hidden uplink" desc = "There is something wrong if you're examining this." var/active = 0 diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm index 63f7828fc8..e116689c9a 100644 --- a/code/game/objects/items/devices/violin.dm +++ b/code/game/objects/items/devices/violin.dm @@ -390,4 +390,4 @@ for(var/mob/M in viewers(1, loc)) if((M.client && M.machine == src)) attack_self(M) - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 3100b91434..befba4b133 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -35,4 +35,4 @@ emagged = 1 insults = rand(1, 3)//to prevent dickflooding return - return \ No newline at end of file + return diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index a923de6183..e341a8747f 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -1,6 +1,6 @@ /obj/item/latexballon - name = "Latex glove" - desc = "" //todo + name = "latex glove" + desc = "A latex glove, usually used as a balloon." icon_state = "latexballon" item_state = "lgloves" force = 0 @@ -45,4 +45,4 @@ /obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) if (can_puncture(W)) - burst() \ No newline at end of file + burst() diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index a50743a83f..dfc53d3a87 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -40,7 +40,7 @@ /obj/item/borg/sight/xray - name = "\proper x-ray Vision" + name = "\proper x-ray vision" sight_mode = BORGXRAY diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 2f0b67d31d..1d92cb9a81 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -178,4 +178,4 @@ b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) - Target.bulletholes.Add(src) \ No newline at end of file + Target.bulletholes.Add(src) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index eeca2089ee..c87b57b043 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -259,4 +259,4 @@ return affecting.status |= ORGAN_SPLINTED use(1) - return \ No newline at end of file + return diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index db0ab6b088..798c6c0511 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -42,4 +42,4 @@ if (do_surgery(H,user,src)) return else - user << "Nothing to fix in here." \ No newline at end of file + user << "Nothing to fix in here." diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 72339452e7..a3e7ed53e2 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -133,4 +133,4 @@ var/obj/item/stack/sheet/leather/HS = new(src.loc) HS.amount = 1 wetness = initial(wetness) - src.use(1) \ No newline at end of file + src.use(1) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 530c9b5b88..f3b8face4e 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -200,4 +200,4 @@ obj/item/stack/sheet/mineral/iron/New() sheettype = "osmium" origin_tech = "materials=5" color = "#9999FF" - perunit = 2000 \ No newline at end of file + perunit = 2000 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index de2973fc79..3a3fe552fc 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -28,7 +28,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ ), 2), \ null, \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \ - new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \ + new/datum/stack_recipe("rack parts", /obj/item/weapon/table_parts/rack), \ new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/baseballbat/metal, 10, time = 20, one_per_turf = 0, on_floor = 1), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \ null, \ @@ -200,4 +200,4 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ /obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null) recipes = cardboard_recipes - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index fdcc6747b6..b140b4e6fd 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -23,4 +23,4 @@ else for (var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z)) S.add(stack,user) - ..()*/ \ No newline at end of file + ..()*/ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index c3fa049b17..e14c7f2b1e 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -265,4 +265,4 @@ New(title, recipes, req_amount = 1) src.title = title src.recipes = recipes - src.req_amount = req_amount \ No newline at end of file + src.req_amount = req_amount diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index e869c8d0ee..f346d216a7 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -33,4 +33,4 @@ new/obj/item/stack/light_w(user.loc) if(amount <= 0) user.drop_from_inventory(src) - del(src) \ No newline at end of file + del(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7ca0d4b223..837824bf39 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -113,7 +113,7 @@ * Fake singularity */ /obj/item/toy/spinningtoy - name = "Gravitational Singularity" + name = "gravitational singularity" desc = "\"Singulo\" brand spinning toy." icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" @@ -420,7 +420,7 @@ * Water flower */ /obj/item/toy/waterflower - name = "Water Flower" + name = "water flower" desc = "A seemingly innocent sunflower...with a twist." icon = 'icons/obj/harvest.dmi' icon_state = "sunflower" @@ -645,4 +645,4 @@ item_state = "inflatable" flags = FPRINT | TABLEPASS icon = 'icons/obj/clothing/belts.dmi' - slot_flags = SLOT_BELT \ No newline at end of file + slot_flags = SLOT_BELT diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 756812ccb1..e8bae92fee 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -6,52 +6,67 @@ icon = 'icons/obj/trash.dmi' w_class = 2.0 desc = "This is rubbish." - raisins - name = "4no raisins" - icon_state= "4no_raisins" - candy - name = "Candy" - icon_state= "candy" - cheesie - name = "Cheesie honkers" - icon_state = "cheesie_honkers" - chips - name = "Chips" - icon_state = "chips" - popcorn - name = "Popcorn" - icon_state = "popcorn" - sosjerky - name = "Scaredy's Private Reserve Beef Jerky" - icon_state = "sosjerky" - syndi_cakes - name = "Syndi cakes" - icon_state = "syndi_cakes" - waffles - name = "Waffles" - icon_state = "waffles" - plate - name = "Plate" - icon_state = "plate" - snack_bowl - name = "Snack bowl" - icon_state = "snack_bowl" - pistachios - name = "Pistachios pack" - icon_state = "pistachios_pack" - semki - name = "Semki pack" - icon_state = "semki_pack" - tray - name = "Tray" - icon_state = "tray" - candle - name = "candle" - icon = 'icons/obj/candle.dmi' - icon_state = "candle4" - liquidfood - name = "\improper \"LiquidFood\" ration" - icon_state = "liquidfood" + +/obj/item/trash/raisins + name = "\improper 4no raisins" + icon_state= "4no_raisins" + +/obj/item/trash/candy + name = "candy" + icon_state= "candy" + +/obj/item/trash/cheesie + name = "\improper Cheesie Honkers" + icon_state = "cheesie_honkers" + +/obj/item/trash/chips + name = "chips" + icon_state = "chips" + +/obj/item/trash/popcorn + name = "popcorn" + icon_state = "popcorn" + +/obj/item/trash/sosjerky + name = "Scaredy's Private Reserve Beef Jerky" + icon_state = "sosjerky" + +/obj/item/trash/syndi_cakes + name = "syndi cakes" + icon_state = "syndi_cakes" + +/obj/item/trash/waffles + name = "waffles" + icon_state = "waffles" + +/obj/item/trash/plate + name = "plate" + icon_state = "plate" + +/obj/item/trash/snack_bowl + name = "snack bowl" + icon_state = "snack_bowl" + +/obj/item/trash/pistachios + name = "pistachios pack" + icon_state = "pistachios_pack" + +/obj/item/trash/semki + name = "semki pack" + icon_state = "semki_pack" + +/obj/item/trash/tray + name = "tray" + icon_state = "tray" + +/obj/item/trash/candle + name = "candle" + icon = 'icons/obj/candle.dmi' + icon_state = "candle4" + +/obj/item/trash/liquidfood + name = "\improper \"LiquidFood\" ration" + icon_state = "liquidfood" /obj/item/trash/attack(mob/M as mob, mob/living/user as mob) return diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index d08377a704..fb79d5307f 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -1,6 +1,6 @@ //Contains the rapid construction device. /obj/item/weapon/rcd - name = "rapid-construction-device (RCD)" + name = "rapid construction device (RCD)" desc = "A device used to rapidly build walls and floors." icon = 'icons/obj/items.dmi' icon_state = "rcd" @@ -174,4 +174,4 @@ return 0 /obj/item/weapon/rcd/mounted/attackby() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 45e66d80be..f9f32bbeb1 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -112,4 +112,4 @@ RSF R.cell.use(used_energy) else stored_matter-- - user << "The RSF now holds [stored_matter]/30 fabrication-units." \ No newline at end of file + user << "The RSF now holds [stored_matter]/30 fabrication-units." diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index afd33fdf08..0203bf0846 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -102,6 +102,7 @@ /obj/machinery/door, /obj/machinery/telecomms, /obj/machinery/mecha_part_fabricator, + /obj/machinery/gibber, /obj/vehicle ) diff --git a/code/game/objects/items/weapons/circuitboards/broken.dm b/code/game/objects/items/weapons/circuitboards/broken.dm new file mode 100644 index 0000000000..ce2cbb7260 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/broken.dm @@ -0,0 +1,6 @@ +/obj/item/weapon/circuitboard/broken + name = "broken electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics_smoked" + origin_tech = null + board_type = "other" diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm new file mode 100644 index 0000000000..bc44b3d7df --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -0,0 +1,38 @@ +//Define a macro that we can use to assemble all the circuit board names +#ifdef T_BOARD +#error T_BOARD already defined elsewhere, we can't use it. +#endif +#define T_BOARD(name) "circuit board (" + (name) + ")" + +/obj/item/weapon/circuitboard + name = "circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "id_mod" + item_state = "electronic" + origin_tech = "programming=2" + density = 0 + anchored = 0 + w_class = 2.0 + flags = FPRINT | TABLEPASS | CONDUCT + force = 5.0 + throwforce = 5.0 + throw_speed = 3 + throw_range = 15 + var/build_path = null + var/board_type = "computer" + var/list/req_components = null + var/frame_desc = null + var/contain_parts = 1 + +//Called when the circuitboard is used to contruct a new machine. +/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M) + if (istype(M, build_path)) + return 1 + return 0 + +//Called when a computer is deconstructed to produce a circuitboard. +//Only used by computers, as other machines store their circuitboard instance. +/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M) + if (istype(M, build_path)) + return 1 + return 0 diff --git a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm new file mode 100644 index 0000000000..d244fd6b5c --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm @@ -0,0 +1,27 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/air_management + name = T_BOARD("atmosphere monitoring console") + build_path = /obj/machinery/computer/general_air_control + var/frequency = 1439 +/obj/item/weapon/circuitboard/air_management/tank_control + name = T_BOARD("tank control") + build_path = /obj/machinery/computer/general_air_control/large_tank_control + frequency = 1441 +/obj/item/weapon/circuitboard/air_management/supermatter_core + name = T_BOARD("core control") + build_path = /obj/machinery/computer/general_air_control/supermatter_core + frequency = 1438 +/obj/item/weapon/circuitboard/air_management/injector_control + name = T_BOARD("injector control") + build_path = /obj/machinery/computer/general_air_control/fuel_injection + +/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C) + if (..(C)) + C.frequency = frequency + +/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C) + if (..(C)) + frequency = C.frequency diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm new file mode 100644 index 0000000000..ff33485f72 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -0,0 +1,65 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/security + name = T_BOARD("security camera monitor") + build_path = /obj/machinery/computer/security + var/network = list("SS13") + req_access = list(access_security) + var/locked = 1 + var/emagged = 0 + +/obj/item/weapon/circuitboard/security/engineering + name = T_BOARD("engineering camera monitor") + build_path = /obj/machinery/computer/security/engineering + network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") + req_access = list() + +/obj/item/weapon/circuitboard/security/mining + name = T_BOARD("mining camera monitor") + build_path = /obj/machinery/computer/security/mining + network = list("MINE") + req_access = list() + +/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) + if (..(C)) + C.network = network + +/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C) + if (..(C)) + network = C.network + +/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/weapon/card/emag)) + if(emagged) + user << "Circuit lock is already removed." + return + user << "\blue You override the circuit lock and open controls." + emagged = 1 + locked = 0 + else if(istype(I,/obj/item/weapon/card/id)) + if(emagged) + user << "\red Circuit lock does not respond." + return + if(check_access(I)) + locked = !locked + user << "\blue You [locked ? "" : "un"]lock the circuit controls." + else + user << "\red Access denied." + else if(istype(I,/obj/item/device/multitool)) + if(locked) + user << "\red Circuit controls are locked." + return + var/existing_networks = list2text(network,",") + var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks)) + if(!input) + usr << "No input found please hang up and try your call again." + return + var/list/tempnetwork = text2list(input, ",") + tempnetwork = difflist(tempnetwork,restricted_camera_networks,1) + if(tempnetwork.len < 1) + usr << "No network found please hang up and try your call again." + return + network = tempnetwork + return diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm new file mode 100644 index 0000000000..281f31869c --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -0,0 +1,190 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/message_monitor + name = T_BOARD("message monitor console") + build_path = /obj/machinery/computer/message_monitor + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/aiupload + name = T_BOARD("AI upload console") + build_path = /obj/machinery/computer/aiupload + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/borgupload + name = T_BOARD("cyborg upload console") + build_path = /obj/machinery/computer/borgupload + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/med_data + name = T_BOARD("medical records console") + build_path = /obj/machinery/computer/med_data + +/obj/item/weapon/circuitboard/pandemic + name = T_BOARD("PanD.E.M.I.C. 2200") + build_path = /obj/machinery/computer/pandemic + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/scan_consolenew + name = T_BOARD("DNA machine") + build_path = /obj/machinery/computer/scan_consolenew + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/communications + name = T_BOARD("command and communications console") + build_path = /obj/machinery/computer/communications + origin_tech = "programming=2;magnets=2" + +/obj/item/weapon/circuitboard/card + name = T_BOARD("ID card modification console") + build_path = /obj/machinery/computer/card + +/obj/item/weapon/circuitboard/card/centcom + name = T_BOARD("CentCom ID card modification console") + build_path = /obj/machinery/computer/card/centcom + +/obj/item/weapon/circuitboard/teleporter + name = T_BOARD("teleporter control console") + build_path = /obj/machinery/computer/teleporter + origin_tech = "programming=2;bluespace=2" + +/obj/item/weapon/circuitboard/secure_data + name = T_BOARD("security records console") + build_path = /obj/machinery/computer/secure_data + +/obj/item/weapon/circuitboard/skills + name = T_BOARD("employment records console") + build_path = /obj/machinery/computer/skills + +/obj/item/weapon/circuitboard/stationalert + name = T_BOARD("station alert console") + build_path = /obj/machinery/computer/station_alert + +/obj/item/weapon/circuitboard/atmos_alert + name = T_BOARD("atmospheric alert console") + build_path = /obj/machinery/computer/atmos_alert + +/obj/item/weapon/circuitboard/pod + name = T_BOARD("massdriver control") + build_path = /obj/machinery/computer/pod + +/obj/item/weapon/circuitboard/robotics + name = T_BOARD("robotics control console") + build_path = /obj/machinery/computer/robotics + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/drone_control + name = T_BOARD("drone control console") + build_path = /obj/machinery/computer/drone_control + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/cloning + name = T_BOARD("cloning control console") + build_path = /obj/machinery/computer/cloning + origin_tech = "programming=3;biotech=3" + +/obj/item/weapon/circuitboard/arcade + name = T_BOARD("arcade machine") + build_path = /obj/machinery/computer/arcade + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/turbine_control + name = T_BOARD("turbine control console") + build_path = /obj/machinery/computer/turbine_computer + +/obj/item/weapon/circuitboard/solar_control + name = T_BOARD("solar control console") + build_path = /obj/machinery/power/solar_control + origin_tech = "programming=2;powerstorage=2" + +/obj/item/weapon/circuitboard/powermonitor + name = T_BOARD("power monitoring console") + build_path = /obj/machinery/computer/power_monitor + +/obj/item/weapon/circuitboard/olddoor + name = T_BOARD("DoorMex") + build_path = /obj/machinery/computer/pod/old + +/obj/item/weapon/circuitboard/syndicatedoor + name = T_BOARD("ProComp Executive") + build_path = /obj/machinery/computer/pod/old/syndicate + +/obj/item/weapon/circuitboard/swfdoor + name = T_BOARD("Magix") + build_path = /obj/machinery/computer/pod/old/swf + +/obj/item/weapon/circuitboard/prisoner + name = T_BOARD("prisoner management console") + build_path = /obj/machinery/computer/prisoner + +/obj/item/weapon/circuitboard/mecha_control + name = T_BOARD("exosuit control console") + build_path = /obj/machinery/computer/mecha + +/obj/item/weapon/circuitboard/rdservercontrol + name = T_BOARD("R&D server control console") + build_path = /obj/machinery/computer/rdservercontrol + +/obj/item/weapon/circuitboard/crew + name = T_BOARD("crew monitoring console") + build_path = /obj/machinery/computer/crew + origin_tech = "programming=3;biotech=2;magnets=2" + +/obj/item/weapon/circuitboard/mech_bay_power_console + name = T_BOARD("mech bay power control console") + build_path = /obj/machinery/computer/mech_bay_power_console + origin_tech = "programming=2;powerstorage=3" + +/obj/item/weapon/circuitboard/operating + name = T_BOARD("patient monitoring console") + build_path = /obj/machinery/computer/operating + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/curefab + name = T_BOARD("cure fabricator") + build_path = /obj/machinery/computer/curer + +/obj/item/weapon/circuitboard/splicer + name = T_BOARD("disease splicer") + build_path = /obj/machinery/computer/diseasesplicer + +/obj/item/weapon/circuitboard/ordercomp + name = T_BOARD("supply ordering console") + build_path = /obj/machinery/computer/ordercomp + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/mining_shuttle + name = T_BOARD("mining shuttle console") + build_path = /obj/machinery/computer/shuttle_control/mining + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/engineering_shuttle + name = T_BOARD("engineering shuttle console") + build_path = /obj/machinery/computer/shuttle_control/engineering + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/research_shuttle + name = T_BOARD("research shuttle console") + build_path = /obj/machinery/computer/shuttle_control/research + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/aifixer + name = T_BOARD("AI integrity restorer") + build_path = /obj/machinery/computer/aifixer + origin_tech = "programming=3;biotech=2" + +/obj/item/weapon/circuitboard/area_atmos + name = T_BOARD("area air control console") + build_path = /obj/machinery/computer/area_atmos + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/prison_shuttle + name = T_BOARD("prison shuttle control console") + build_path = /obj/machinery/computer/prison_shuttle + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/rcon_console + name = T_BOARD("RCON remote control console") + build_path = /obj/machinery/computer/rcon + origin_tech = "programming=4;engineering=3;powerstorage=5" diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm new file mode 100644 index 0000000000..48ab7333ce --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -0,0 +1,20 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/rdconsole + name = T_BOARD("R&D control console") + build_path = /obj/machinery/computer/rdconsole/core + +/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/weapon/screwdriver)) + user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.") + if(src.build_path == /obj/machinery/computer/rdconsole/core) + src.name = T_BOARD("RD Console - Robotics") + src.build_path = /obj/machinery/computer/rdconsole/robotics + user << "\blue Access protocols set to robotics." + else + src.name = T_BOARD("RD Console") + src.build_path = /obj/machinery/computer/rdconsole/core + user << "\blue Access protocols set to default." + return diff --git a/code/game/objects/items/weapons/circuitboards/computer/supply.dm b/code/game/objects/items/weapons/circuitboards/computer/supply.dm new file mode 100644 index 0000000000..84c9aa3476 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/supply.dm @@ -0,0 +1,39 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/supplycomp + name = T_BOARD("supply control console") + build_path = /obj/machinery/computer/supplycomp + origin_tech = "programming=3" + var/contraband_enabled = 0 + +/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC) + if (..(SC)) + SC.can_order_contraband = contraband_enabled + +/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC) + if (..(SC)) + contraband_enabled = SC.can_order_contraband + +/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/device/multitool)) + var/catastasis = src.contraband_enabled + var/opposite_catastasis + if(catastasis) + opposite_catastasis = "STANDARD" + catastasis = "BROAD" + else + opposite_catastasis = "BROAD" + catastasis = "STANDARD" + + switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") ) + //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") ) + if("Switch to STANDARD","Switch to BROAD") + src.contraband_enabled = !src.contraband_enabled + + if("Cancel") + return + else + user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri" + return diff --git a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm new file mode 100644 index 0000000000..9a18f0df99 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm @@ -0,0 +1,18 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/comm_monitor + name = T_BOARD("telecommunications monitor console") + build_path = /obj/machinery/computer/telecomms/monitor + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/comm_server + name = T_BOARD("telecommunications server monitor console") + build_path = /obj/machinery/computer/telecomms/server + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/comm_traffic + name = T_BOARD("telecommunications traffic control console") + build_path = /obj/machinery/computer/telecomms/traffic + origin_tech = "programming=3" diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm new file mode 100644 index 0000000000..fdc0865f9c --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm @@ -0,0 +1,28 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/clonepod + name = T_BOARD("clone pod") + build_path = "/obj/machinery/clonepod" + board_type = "machine" + origin_tech = "programming=3;biotech=3" + frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen." + req_components = list( + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/scanning_module" = 2, + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/stock_parts/console_screen" = 1) + +/obj/item/weapon/circuitboard/clonescanner + name = T_BOARD("cloning scanner") + build_path = "/obj/machinery/dna_scannernew" + board_type = "machine" + origin_tech = "programming=2;biotech=2" + frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen." + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/stack/cable_coil" = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm new file mode 100644 index 0000000000..77d313e414 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm @@ -0,0 +1,25 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/pacman + name = T_BOARD("PACMAN-type generator") + build_path = "/obj/machinery/power/port_gen/pacman" + board_type = "machine" + origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3" + frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor." + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/capacitor" = 1) + +/obj/item/weapon/circuitboard/pacman/super + name = T_BOARD("SUPERPACMAN-type generator") + build_path = "/obj/machinery/power/port_gen/pacman/super" + origin_tech = "programming=3;powerstorage=4;engineering=4" + +/obj/item/weapon/circuitboard/pacman/mrs + name = T_BOARD("MRSPACMAN-type generator") + build_path = "/obj/machinery/power/port_gen/pacman/mrs" + origin_tech = "programming=3;powerstorage=5;engineering=5" diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm new file mode 100644 index 0000000000..80955b1b8e --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm @@ -0,0 +1,27 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/smes + name = T_BOARD("superconductive magnetic energy storage") + build_path = "/obj/machinery/power/smes/buildable" + board_type = "machine" + origin_tech = "powerstorage=6;engineering=4" + frame_desc = "Requires 1 superconducting magnetic coil and 30 wires." + req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30) + +/obj/item/weapon/circuitboard/batteryrack + name = T_BOARD("battery rack PSU") + build_path = "/obj/machinery/power/smes/batteryrack" + board_type = "machine" + origin_tech = "powerstorage=3;engineering=2" + frame_desc = "Requires 3 power cells." + req_components = list("/obj/item/weapon/cell" = 3) + +/obj/item/weapon/circuitboard/ghettosmes + name = T_BOARD("makeshift PSU") + desc = "An APC circuit repurposed into some power storage device controller" + build_path = "/obj/machinery/power/smes/batteryrack/makeshift" + board_type = "machine" + frame_desc = "Requires 3 power cells." + req_components = list("/obj/item/weapon/cell" = 3) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm new file mode 100644 index 0000000000..9853150b17 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -0,0 +1,70 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +obj/item/weapon/circuitboard/rdserver + name = T_BOARD("R&D server") + build_path = "/obj/machinery/r_n_d/server" + board_type = "machine" + origin_tech = "programming=3" + frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module." + req_components = list( + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/scanning_module" = 1) + +/obj/item/weapon/circuitboard/destructive_analyzer + name = T_BOARD("destructive analyzer") + build_path = "/obj/machinery/r_n_d/destructive_analyzer" + board_type = "machine" + origin_tech = "magnets=2;engineering=2;programming=2" + frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser." + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1) + +/obj/item/weapon/circuitboard/autolathe + name = T_BOARD("autolathe") + build_path = "/obj/machinery/autolathe" + board_type = "machine" + origin_tech = "engineering=2;programming=2" + frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen." + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 3, + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1) + +/obj/item/weapon/circuitboard/protolathe + name = T_BOARD("protolathe") + build_path = "/obj/machinery/r_n_d/protolathe" + board_type = "machine" + origin_tech = "engineering=2;programming=2" + frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers." + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 2, + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/reagent_containers/glass/beaker" = 2) + + +/obj/item/weapon/circuitboard/circuit_imprinter + name = T_BOARD("circuit imprinter") + build_path = "/obj/machinery/r_n_d/circuit_imprinter" + board_type = "machine" + origin_tech = "engineering=2;programming=2" + frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers." + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 1, + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/reagent_containers/glass/beaker" = 2) + +/obj/item/weapon/circuitboard/mechfab + name = "Circuit board (Exosuit Fabricator)" + build_path = "/obj/machinery/mecha_part_fabricator" + board_type = "machine" + origin_tech = "programming=3;engineering=3" + frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen." + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 2, + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1) diff --git a/code/modules/shieldgen/circuits_and_designs.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm similarity index 53% rename from code/modules/shieldgen/circuits_and_designs.dm rename to code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index a831d40798..6e892a6603 100644 --- a/code/modules/shieldgen/circuits_and_designs.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -1,9 +1,9 @@ - -//////////////////////////////////////// -// External Shield Generator +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif /obj/item/weapon/circuitboard/shield_gen_ex - name = "Circuit board (Hull shield generator)" + name = T_BOARD("hull shield generator") board_type = "machine" build_path = "/obj/machinery/shield_gen/external" origin_tech = "bluespace=4;phorontech=3" @@ -16,22 +16,10 @@ "/obj/item/weapon/stock_parts/console_screen" = 1, "/obj/item/stack/cable_coil" = 5) -datum/design/shield_gen_ex - name = "Circuit Design (Experimental hull shield generator)" - desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator." - id = "shield_gen" - req_tech = list("bluespace" = 4, "phorontech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000) - build_path = "/obj/machinery/shield_gen/external" - -//////////////////////////////////////// -// Shield Generator - /obj/item/weapon/circuitboard/shield_gen - name = "Circuit board (Bubble shield generator)" + name = T_BOARD("bubble shield generator") board_type = "machine" - build_path = "/obj/machinery/shield_gen/external" + build_path = "/obj/machinery/shield_gen" origin_tech = "bluespace=4;phorontech=3" frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen." req_components = list( @@ -42,20 +30,8 @@ datum/design/shield_gen_ex "/obj/item/weapon/stock_parts/console_screen" = 1, "/obj/item/stack/cable_coil" = 5) -datum/design/shield_gen - name = "Circuit Design (Bubble shield generator)" - desc = "Allows for the construction of circuit boards used to build an experimental shield generator." - id = "shield_gen" - req_tech = list("bluespace" = 4, "phorontech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000) - build_path = "/obj/machinery/shield_gen/external" - -//////////////////////////////////////// -// Shield Capacitor - /obj/item/weapon/circuitboard/shield_cap - name = "Circuit board (Shield capacitor)" + name = T_BOARD("shield capacitor") board_type = "machine" build_path = "/obj/machinery/shield_capacitor" origin_tech = "magnets=3;powerstorage=4" @@ -67,12 +43,3 @@ datum/design/shield_gen "/obj/item/weapon/stock_parts/subspace/analyzer" = 1, "/obj/item/weapon/stock_parts/console_screen" = 1, "/obj/item/stack/cable_coil" = 5) - -datum/design/shield_cap - name = "Circuit Design (Shield capacitor)" - desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor." - id = "shield_cap" - req_tech = list("magnets" = 3, "powerstorage" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$silver" = 10000) - build_path = "/obj/machinery/shield_gen/external" diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm new file mode 100644 index 0000000000..a312d2995a --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -0,0 +1,82 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/telecomms + board_type = "machine" + +/obj/item/weapon/circuitboard/telecomms/receiver + name = T_BOARD("subspace receiver") + build_path = "/obj/machinery/telecomms/receiver" + origin_tech = "programming=4;engineering=3;bluespace=2" + frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser." + req_components = list( + "/obj/item/weapon/stock_parts/subspace/ansible" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/stock_parts/micro_laser" = 1) + +/obj/item/weapon/circuitboard/telecomms/hub + name = T_BOARD("hub mainframe") + build_path = "/obj/machinery/telecomms/hub" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/subspace/filter" = 2) + +/obj/item/weapon/circuitboard/telecomms/relay + name = T_BOARD("relay mainframe") + build_path = "/obj/machinery/telecomms/relay" + origin_tech = "programming=3;engineering=4;bluespace=3" + frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/subspace/filter" = 2) + +/obj/item/weapon/circuitboard/telecomms/bus + name = T_BOARD("bus mainframe") + build_path = "/obj/machinery/telecomms/bus" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/stack/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1) + +/obj/item/weapon/circuitboard/telecomms/processor + name = T_BOARD("processor unit") + build_path = "/obj/machinery/telecomms/processor" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 3, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/subspace/treatment" = 2, + "/obj/item/weapon/stock_parts/subspace/analyzer" = 1, + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/subspace/amplifier" = 1) + +/obj/item/weapon/circuitboard/telecomms/server + name = T_BOARD("telecommunication server") + build_path = "/obj/machinery/telecomms/server" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/stack/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1) + +/obj/item/weapon/circuitboard/telecomms/broadcaster + name = T_BOARD("subspace broadcaster") + build_path = "/obj/machinery/telecomms/broadcaster" + origin_tech = "programming=4;engineering=4;bluespace=2" + frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. " + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/stack/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/subspace/crystal" = 1, + "/obj/item/weapon/stock_parts/micro_laser/high" = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm new file mode 100644 index 0000000000..db76bbcc8e --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -0,0 +1,35 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/unary_atmos + board_type = "machine" + +/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) + //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. + U.initialize() + U.build_network() + if (U.node) + U.node.initialize() + U.node.build_network() + +/obj/item/weapon/circuitboard/unary_atmos/heater + name = T_BOARD("gas heating system") + build_path = "/obj/machinery/atmospherics/unary/heater" + origin_tech = "powerstorage=2;engineering=1" + frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors." + req_components = list( + "/obj/item/stack/cable_coil" = 5, + "/obj/item/weapon/stock_parts/matter_bin" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 2) + +/obj/item/weapon/circuitboard/unary_atmos/cooler + name = T_BOARD("gas cooling system") + build_path = "/obj/machinery/atmospherics/unary/freezer" + origin_tech = "magnets=2;engineering=2" + frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors." + req_components = list( + "/obj/item/stack/cable_coil" = 2, + "/obj/item/weapon/stock_parts/matter_bin" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 2, + "/obj/item/weapon/stock_parts/manipulator" = 1) diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm new file mode 100644 index 0000000000..ad859479c5 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/mecha.dm @@ -0,0 +1,88 @@ +#ifdef T_BOARD_MECHA +#error T_BOARD_MECHA already defined elsewhere, we can't use it. +#endif +#define T_BOARD_MECHA(name) "exosuit module circuit board (" + (name) + ")" + +/obj/item/weapon/circuitboard/mecha + name = "exosuit circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "std_mod" + item_state = "electronic" + board_type = "other" + + +/obj/item/weapon/circuitboard/mecha/ripley + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/mecha/ripley/peripherals + name = T_BOARD_MECHA("Ripley peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/ripley/main + name = T_BOARD_MECHA("Ripley central control") + icon_state = "mainboard" + + +/obj/item/weapon/circuitboard/mecha/gygax + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/mecha/gygax/peripherals + name = T_BOARD_MECHA("Gygax peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/gygax/targeting + name = T_BOARD_MECHA("Gygax weapon control and targeting") + icon_state = "mcontroller" + origin_tech = "programming=4;combat=4" + +/obj/item/weapon/circuitboard/mecha/gygax/main + name = T_BOARD_MECHA("Gygax central control") + icon_state = "mainboard" + + +/obj/item/weapon/circuitboard/mecha/durand + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/mecha/durand/peripherals + name = T_BOARD_MECHA("Durand peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/durand/targeting + name = T_BOARD_MECHA("Durand weapon control and targeting") + icon_state = "mcontroller" + origin_tech = "programming=4;combat=4" + +/obj/item/weapon/circuitboard/mecha/durand/main + name = T_BOARD_MECHA("Durand central control") + icon_state = "mainboard" + + +/obj/item/weapon/circuitboard/mecha/honker + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/mecha/honker/peripherals + name = T_BOARD_MECHA("H.O.N.K peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/honker/targeting + name = T_BOARD_MECHA("H.O.N.K weapon control and targeting") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/honker/main + name = T_BOARD_MECHA("H.O.N.K central control") + icon_state = "mainboard" + + +/obj/item/weapon/circuitboard/mecha/odysseus + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/mecha/odysseus/peripherals + name = T_BOARD_MECHA("Odysseus peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/odysseus/main + name = T_BOARD_MECHA("Odysseus central control") + icon_state = "mainboard" + +//Undef the macro, shouldn't be needed anywhere else +#undef T_BOARD_MECHA diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm new file mode 100644 index 0000000000..ec38643bed --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -0,0 +1,10 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +//Stuff that doesn't fit into any category goes here + +/obj/item/weapon/circuitboard/aicore + name = T_BOARD("AI core") + origin_tech = "programming=4;biotech=2" + board_type = "other" diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 3ae5094dd0..656197fee0 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -9,31 +9,16 @@ * Banana Peals */ /obj/item/weapon/bananapeel/Crossed(AM as mob|obj) - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - - M.stop_pulling() - M << "\blue You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(4) - M.Weaken(2) - + if (istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the [src.name]",4) /* * Soap */ /obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - - M.stop_pulling() - M << "\blue You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(3) - M.Weaken(2) + if (istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the [src.name]",3) /obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) if(!proximity) return @@ -65,4 +50,4 @@ src.add_fingerprint(user) spawn(20) spam_flag = 0 - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 72c4589343..c0db7773a8 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -26,4 +26,4 @@ icon_state = "[name][result]" user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]", \ "You throw [src]. It lands on a [result]. [comment]", \ - "You hear [src] landing on a [result]. [comment]") \ No newline at end of file + "You hear [src] landing on a [result]. [comment]") diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index e41b29364e..651cc2e27f 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -1,5 +1,5 @@ /obj/item/weapon/dnainjector - name = "DNA-Injector" + name = "\improper DNA injector" desc = "This injects the person with DNA." icon = 'icons/obj/items.dmi' icon_state = "dnainjector" @@ -194,7 +194,7 @@ /obj/item/weapon/dnainjector/hulkmut - name = "DNA-Injector (Hulk)" + name = "\improper DNA injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." datatype = DNA2_BUF_SE value = 0xFFF @@ -204,7 +204,7 @@ ..() /obj/item/weapon/dnainjector/antihulk - name = "DNA-Injector (Anti-Hulk)" + name = "\improper DNA injector (Anti-Hulk)" desc = "Cures green skin." datatype = DNA2_BUF_SE value = 0x001 @@ -214,7 +214,7 @@ ..() /obj/item/weapon/dnainjector/xraymut - name = "DNA-Injector (Xray)" + name = "\improper DNA injector (Xray)" desc = "Finally you can see what the Captain does." datatype = DNA2_BUF_SE value = 0xFFF @@ -224,7 +224,7 @@ ..() /obj/item/weapon/dnainjector/antixray - name = "DNA-Injector (Anti-Xray)" + name = "\improper DNA injector (Anti-Xray)" desc = "It will make you see harder." datatype = DNA2_BUF_SE value = 0x001 @@ -234,7 +234,7 @@ ..() /obj/item/weapon/dnainjector/firemut - name = "DNA-Injector (Fire)" + name = "\improper DNA injector (Fire)" desc = "Gives you fire." datatype = DNA2_BUF_SE value = 0xFFF @@ -244,7 +244,7 @@ ..() /obj/item/weapon/dnainjector/antifire - name = "DNA-Injector (Anti-Fire)" + name = "\improper DNA injector (Anti-Fire)" desc = "Cures fire." datatype = DNA2_BUF_SE value = 0x001 @@ -254,7 +254,7 @@ ..() /obj/item/weapon/dnainjector/telemut - name = "DNA-Injector (Tele.)" + name = "\improper DNA injector (Tele.)" desc = "Super brain man!" datatype = DNA2_BUF_SE value = 0xFFF @@ -264,7 +264,7 @@ ..() /obj/item/weapon/dnainjector/antitele - name = "DNA-Injector (Anti-Tele.)" + name = "\improper DNA injector (Anti-Tele.)" desc = "Will make you not able to control your mind." datatype = DNA2_BUF_SE value = 0x001 @@ -274,7 +274,7 @@ ..() /obj/item/weapon/dnainjector/nobreath - name = "DNA-Injector (No Breath)" + name = "\improper DNA injector (No Breath)" desc = "Hold your breath and count to infinity." datatype = DNA2_BUF_SE value = 0xFFF @@ -284,7 +284,7 @@ ..() /obj/item/weapon/dnainjector/antinobreath - name = "DNA-Injector (Anti-No Breath)" + name = "\improper DNA injector (Anti-No Breath)" desc = "Hold your breath and count to 100." datatype = DNA2_BUF_SE value = 0x001 @@ -294,7 +294,7 @@ ..() /obj/item/weapon/dnainjector/remoteview - name = "DNA-Injector (Remote View)" + name = "\improper DNA injector (Remote View)" desc = "Stare into the distance for a reason." datatype = DNA2_BUF_SE value = 0xFFF @@ -304,7 +304,7 @@ ..() /obj/item/weapon/dnainjector/antiremoteview - name = "DNA-Injector (Anti-Remote View)" + name = "\improper DNA injector (Anti-Remote View)" desc = "Cures green skin." datatype = DNA2_BUF_SE value = 0x001 @@ -314,7 +314,7 @@ ..() /obj/item/weapon/dnainjector/regenerate - name = "DNA-Injector (Regeneration)" + name = "\improper DNA injector (Regeneration)" desc = "Healthy but hungry." datatype = DNA2_BUF_SE value = 0xFFF @@ -324,7 +324,7 @@ ..() /obj/item/weapon/dnainjector/antiregenerate - name = "DNA-Injector (Anti-Regeneration)" + name = "\improper DNA injector (Anti-Regeneration)" desc = "Sickly but sated." datatype = DNA2_BUF_SE value = 0x001 @@ -334,7 +334,7 @@ ..() /obj/item/weapon/dnainjector/runfast - name = "DNA-Injector (Increase Run)" + name = "\improper DNA injector (Increase Run)" desc = "Running Man." datatype = DNA2_BUF_SE value = 0xFFF @@ -344,7 +344,7 @@ ..() /obj/item/weapon/dnainjector/antirunfast - name = "DNA-Injector (Anti-Increase Run)" + name = "\improper DNA injector (Anti-Increase Run)" desc = "Walking Man." datatype = DNA2_BUF_SE value = 0x001 @@ -354,7 +354,7 @@ ..() /obj/item/weapon/dnainjector/morph - name = "DNA-Injector (Morph)" + name = "\improper DNA injector (Morph)" desc = "A total makeover." datatype = DNA2_BUF_SE value = 0xFFF @@ -364,7 +364,7 @@ ..() /obj/item/weapon/dnainjector/antimorph - name = "DNA-Injector (Anti-Morph)" + name = "\improper DNA injector (Anti-Morph)" desc = "Cures identity crisis." datatype = DNA2_BUF_SE value = 0x001 @@ -375,7 +375,7 @@ /* No COLDBLOCK on bay /obj/item/weapon/dnainjector/cold - name = "DNA-Injector (Cold)" + name = "\improper DNA injector (Cold)" desc = "Feels a bit chilly." datatype = DNA2_BUF_SE value = 0xFFF @@ -385,7 +385,7 @@ ..() /obj/item/weapon/dnainjector/anticold - name = "DNA-Injector (Anti-Cold)" + name = "\improper DNA injector (Anti-Cold)" desc = "Feels room-temperature." datatype = DNA2_BUF_SE value = 0x001 @@ -396,7 +396,7 @@ */ /obj/item/weapon/dnainjector/noprints - name = "DNA-Injector (No Prints)" + name = "\improper DNA injector (No Prints)" desc = "Better than a pair of budget insulated gloves." datatype = DNA2_BUF_SE value = 0xFFF @@ -406,7 +406,7 @@ ..() /obj/item/weapon/dnainjector/antinoprints - name = "DNA-Injector (Anti-No Prints)" + name = "\improper DNA injector (Anti-No Prints)" desc = "Not quite as good as a pair of budget insulated gloves." datatype = DNA2_BUF_SE value = 0x001 @@ -416,7 +416,7 @@ ..() /obj/item/weapon/dnainjector/insulation - name = "DNA-Injector (Shock Immunity)" + name = "\improper DNA injector (Shock Immunity)" desc = "Better than a pair of real insulated gloves." datatype = DNA2_BUF_SE value = 0xFFF @@ -426,7 +426,7 @@ ..() /obj/item/weapon/dnainjector/antiinsulation - name = "DNA-Injector (Anti-Shock Immunity)" + name = "\improper DNA injector (Anti-Shock Immunity)" desc = "Not quite as good as a pair of real insulated gloves." datatype = DNA2_BUF_SE value = 0x001 @@ -436,7 +436,7 @@ ..() /obj/item/weapon/dnainjector/midgit - name = "DNA-Injector (Small Size)" + name = "\improper DNA injector (Small Size)" desc = "Makes you shrink." datatype = DNA2_BUF_SE value = 0xFFF @@ -446,7 +446,7 @@ ..() /obj/item/weapon/dnainjector/antimidgit - name = "DNA-Injector (Anti-Small Size)" + name = "\improper DNA injector (Anti-Small Size)" desc = "Makes you grow. But not too much." datatype = DNA2_BUF_SE value = 0x001 @@ -457,7 +457,7 @@ ///////////////////////////////////// /obj/item/weapon/dnainjector/antiglasses - name = "DNA-Injector (Anti-Glasses)" + name = "\improper DNA injector (Anti-Glasses)" desc = "Toss away those glasses!" datatype = DNA2_BUF_SE value = 0x001 @@ -467,7 +467,7 @@ ..() /obj/item/weapon/dnainjector/glassesmut - name = "DNA-Injector (Glasses)" + name = "\improper DNA injector (Glasses)" desc = "Will make you need dorkish glasses." datatype = DNA2_BUF_SE value = 0xFFF @@ -477,7 +477,7 @@ ..() /obj/item/weapon/dnainjector/epimut - name = "DNA-Injector (Epi.)" + name = "\improper DNA injector (Epi.)" desc = "Shake shake shake the room!" datatype = DNA2_BUF_SE value = 0xFFF @@ -487,7 +487,7 @@ ..() /obj/item/weapon/dnainjector/antiepi - name = "DNA-Injector (Anti-Epi.)" + name = "\improper DNA injector (Anti-Epi.)" desc = "Will fix you up from shaking the room." datatype = DNA2_BUF_SE value = 0x001 @@ -497,7 +497,7 @@ ..() /obj/item/weapon/dnainjector/anticough - name = "DNA-Injector (Anti-Cough)" + name = "\improper DNA injector (Anti-Cough)" desc = "Will stop that awful noise." datatype = DNA2_BUF_SE value = 0x001 @@ -507,7 +507,7 @@ ..() /obj/item/weapon/dnainjector/coughmut - name = "DNA-Injector (Cough)" + name = "\improper DNA injector (Cough)" desc = "Will bring forth a sound of horror from your throat." datatype = DNA2_BUF_SE value = 0xFFF @@ -517,7 +517,7 @@ ..() /obj/item/weapon/dnainjector/clumsymut - name = "DNA-Injector (Clumsy)" + name = "\improper DNA injector (Clumsy)" desc = "Makes clumsy minions." datatype = DNA2_BUF_SE value = 0xFFF @@ -527,7 +527,7 @@ ..() /obj/item/weapon/dnainjector/anticlumsy - name = "DNA-Injector (Anti-Clumy)" + name = "\improper DNA injector (Anti-Clumy)" desc = "Cleans up confusion." datatype = DNA2_BUF_SE value = 0x001 @@ -537,7 +537,7 @@ ..() /obj/item/weapon/dnainjector/antitour - name = "DNA-Injector (Anti-Tour.)" + name = "\improper DNA injector (Anti-Tour.)" desc = "Will cure tourrets." datatype = DNA2_BUF_SE value = 0x001 @@ -547,7 +547,7 @@ ..() /obj/item/weapon/dnainjector/tourmut - name = "DNA-Injector (Tour.)" + name = "\improper DNA injector (Tour.)" desc = "Gives you a nasty case off tourrets." datatype = DNA2_BUF_SE value = 0xFFF @@ -557,7 +557,7 @@ ..() /obj/item/weapon/dnainjector/stuttmut - name = "DNA-Injector (Stutt.)" + name = "\improper DNA injector (Stutt.)" desc = "Makes you s-s-stuttterrr" datatype = DNA2_BUF_SE value = 0xFFF @@ -567,7 +567,7 @@ ..() /obj/item/weapon/dnainjector/antistutt - name = "DNA-Injector (Anti-Stutt.)" + name = "\improper DNA injector (Anti-Stutt.)" desc = "Fixes that speaking impairment." datatype = DNA2_BUF_SE value = 0x001 @@ -577,7 +577,7 @@ ..() /obj/item/weapon/dnainjector/blindmut - name = "DNA-Injector (Blind)" + name = "\improper DNA injector (Blind)" desc = "Makes you not see anything." datatype = DNA2_BUF_SE value = 0xFFF @@ -587,7 +587,7 @@ ..() /obj/item/weapon/dnainjector/antiblind - name = "DNA-Injector (Anti-Blind)" + name = "\improper DNA injector (Anti-Blind)" desc = "ITS A MIRACLE!!!" datatype = DNA2_BUF_SE value = 0x001 @@ -597,7 +597,7 @@ ..() /obj/item/weapon/dnainjector/deafmut - name = "DNA-Injector (Deaf)" + name = "\improper DNA injector (Deaf)" desc = "Sorry, what did you say?" datatype = DNA2_BUF_SE value = 0xFFF @@ -607,7 +607,7 @@ ..() /obj/item/weapon/dnainjector/antideaf - name = "DNA-Injector (Anti-Deaf)" + name = "\improper DNA injector (Anti-Deaf)" desc = "Will make you hear once more." datatype = DNA2_BUF_SE value = 0x001 @@ -617,7 +617,7 @@ ..() /obj/item/weapon/dnainjector/hallucination - name = "DNA-Injector (Halluctination)" + name = "\improper DNA injector (Halluctination)" desc = "What you see isn't always what you get." datatype = DNA2_BUF_SE value = 0xFFF @@ -627,7 +627,7 @@ ..() /obj/item/weapon/dnainjector/antihallucination - name = "DNA-Injector (Anti-Hallucination)" + name = "\improper DNA injector (Anti-Hallucination)" desc = "What you see is what you get." datatype = DNA2_BUF_SE value = 0x001 @@ -637,7 +637,7 @@ ..() /obj/item/weapon/dnainjector/h2m - name = "DNA-Injector (Human > Monkey)" + name = "\improper DNA injector (Human > Monkey)" desc = "Will make you a flea bag." datatype = DNA2_BUF_SE value = 0xFFF @@ -647,11 +647,11 @@ ..() /obj/item/weapon/dnainjector/m2h - name = "DNA-Injector (Monkey > Human)" + name = "\improper DNA injector (Monkey > Human)" desc = "Will make you...less hairy." datatype = DNA2_BUF_SE value = 0x001 //block = 14 New() block = MONKEYBLOCK - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 97e5630d94..f5f4208073 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -38,7 +38,7 @@ /obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag) if (!flag) return - if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/)) + if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/tie/storage/) || istype(target, /obj/item/clothing/under)) return user << "Planting explosives..." diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 0a0545b513..f6758e53e6 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -127,7 +127,7 @@ for(var/b=0, b<5, b++) step_towards(W,my_target) - if(!W) return + if(!W || !W.reagents) return W.reagents.reaction(get_turf(W)) for(var/atom/atm in get_turf(W)) if(!W) @@ -144,4 +144,4 @@ step(user, user.inertia_dir) else return ..() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index e16b9dd38c..3830f105fd 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -218,4 +218,4 @@ igniter.secured = 0 status = 1 update_icon() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 9b5007166d..e96d036721 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -187,4 +187,4 @@ else user << "\blue You need more paper." else - user << "They are moving around too much. A straightjacket would help." \ No newline at end of file + user << "They are moving around too much. A straightjacket would help." diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index d827567646..bb440d1215 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -1,5 +1,5 @@ /obj/item/weapon/grenade/chem_grenade - name = "Grenade Casing" + name = "grenade casing" icon_state = "chemg" item_state = "flashbang" desc = "A hand made chemical grenade." @@ -171,7 +171,7 @@ /obj/item/weapon/grenade/chem_grenade/large - name = "Large Chem Grenade" + name = "large chem grenade" desc = "An oversized grenade that affects a larger area." icon_state = "large_grenade" allowed_containers = list(/obj/item/weapon/reagent_containers/glass) @@ -179,7 +179,7 @@ affected_area = 4 /obj/item/weapon/grenade/chem_grenade/metalfoam - name = "Metal-Foam Grenade" + name = "metal-foam grenade" desc = "Used for emergency sealing of air breaches." path = 1 stage = 2 @@ -200,7 +200,7 @@ icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/incendiary - name = "Incendiary Grenade" + name = "incendiary grenade" desc = "Used for clearing rooms of living things." path = 1 stage = 2 diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index 9edf68a60a..3446fa46c3 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -9,4 +9,3 @@ if(empulse(src, 4, 10)) del(src) return - diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index f5ad4fa9fd..f9120d5491 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -180,4 +180,4 @@ var/dettime = rand(15,60) spawn(dettime) prime() - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 46854c6a2a..d1fb667e99 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -108,4 +108,4 @@ /obj/item/weapon/grenade/attack_hand() walk(src, null, null) ..() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 31b06ef5b7..8b6b6e938d 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -41,4 +41,4 @@ name = "carp delivery grenade" spawner_type = /mob/living/simple_animal/hostile/carp deliveryamt = 5 - origin_tech = "materials=3;magnets=4;syndicate=4" \ No newline at end of file + origin_tech = "materials=3;magnets=4;syndicate=4" diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 531c8fa7ee..a1ea44daa9 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -166,4 +166,4 @@ var/last_chew = 0 if(!C) return if(p_loc == user.loc && p_loc_m == C.loc) C.handcuffed = new /obj/item/weapon/handcuffs(C) - C.update_inv_handcuffed() \ No newline at end of file + C.update_inv_handcuffed() diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 89e265aed8..c45ed4eac8 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -498,4 +498,4 @@ the implant may become unstable and either pre-maturely inject the subject or si return 1 islegal() - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 03776c78de..ae77d373da 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 /obj/item/weapon/implantcase - name = "Glass Case" + name = "glass case" desc = "A case containing an implant." icon = 'icons/obj/items.dmi' icon_state = "implantcase-0" @@ -63,7 +63,7 @@ /obj/item/weapon/implantcase/tracking - name = "Glass Case - 'Tracking'" + name = "glass case - 'tracking'" desc = "A case containing a tracking implant." icon_state = "implantcase-b" @@ -74,7 +74,7 @@ /obj/item/weapon/implantcase/explosive - name = "Glass Case - 'Explosive'" + name = "glass case - 'explosive'" desc = "A case containing an explosive implant." icon_state = "implantcase-r" @@ -85,7 +85,7 @@ /obj/item/weapon/implantcase/chem - name = "Glass Case - 'Chem'" + name = "glass case - 'chem'" desc = "A case containing a chemical implant." icon_state = "implantcase-b" @@ -96,7 +96,7 @@ /obj/item/weapon/implantcase/loyalty - name = "Glass Case - 'Loyalty'" + name = "glass case - 'loyalty'" desc = "A case containing a loyalty implant." icon_state = "implantcase-r" @@ -107,7 +107,7 @@ /obj/item/weapon/implantcase/death_alarm - name = "Glass Case - 'Death Alarm'" + name = "glass case - 'death alarm'" desc = "A case containing a death alarm implant." icon_state = "implantcase-b" @@ -118,7 +118,7 @@ /obj/item/weapon/implantcase/freedom - name = "Glass Case - 'Freedom'" + name = "glass case - 'freedom'" desc = "A case containing a freedom implant." icon_state = "implantcase-r" @@ -129,7 +129,7 @@ /obj/item/weapon/implantcase/adrenalin - name = "Glass Case - 'Adrenalin'" + name = "glass case - 'adrenalin'" desc = "A case containing an adrenalin implant." icon_state = "implantcase-b" @@ -140,7 +140,7 @@ /obj/item/weapon/implantcase/dexplosive - name = "Glass Case - 'Explosive'" + name = "glass case - 'explosive'" desc = "A case containing an explosive." icon_state = "implantcase-r" @@ -151,11 +151,11 @@ /obj/item/weapon/implantcase/health - name = "Glass Case - 'Health'" + name = "glass case - 'health'" desc = "A case containing a health tracking implant." icon_state = "implantcase-b" /obj/item/weapon/implantcase/health/New() src.imp = new /obj/item/weapon/implant/health( src ) ..() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index 58d73d835a..d7be368665 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -67,5 +67,3 @@ mechanisms
life can drive down to only 1 use.
No Implant Specifics"} return dat - - diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 2cba026e32..0469cd56d5 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -20,4 +20,4 @@ /obj/item/weapon/implant/uplink/trigger(emote, mob/source as mob) if(hidden_uplink && usr == source) // Let's not have another people activate our uplink hidden_uplink.check_trigger(source, emote, activation_emote) - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 3b3e611575..36dbc26537 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -13,4 +13,4 @@ suicide_act(mob/user) viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." - return (OXYLOSS) \ No newline at end of file + return (OXYLOSS) diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm index 83bc76517a..990453f423 100644 --- a/code/game/objects/items/weapons/paiwire.dm +++ b/code/game/objects/items/weapons/paiwire.dm @@ -8,4 +8,4 @@ user.visible_message("[user] dumbly fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src].") /obj/item/weapon/pai_cable/attack(obj/machinery/M as obj, mob/user as mob) - src.plugin(M, user) \ No newline at end of file + src.plugin(M, user) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index ba75d32990..b0b8fbdc04 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -112,5 +112,4 @@ icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi' icon_state = "yellow slime extract" //"potato_battery" maxcharge = 10000 - maxcharge = 10000 - matter = null \ No newline at end of file + matter = null diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index fbaab9a301..e9aa6f3ca6 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -87,4 +87,4 @@ user.loc = pick(L) smoke.start() - src.uses -= 1 \ No newline at end of file + src.uses -= 1 diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 0ecbe900d2..8bd126584c 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -111,4 +111,4 @@ src.pixel_x = rand(-5, 5) src.pixel_y = rand(-5, 5) else - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index c71a5d7298..0304aac95e 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -82,7 +82,7 @@ /obj/item/weapon/storage/backpack/santabag - name = "Santa's Gift Bag" + name = "\improper Santa's gift bag" desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!" icon_state = "giftbag0" item_state = "giftbag" @@ -252,4 +252,4 @@ /obj/item/weapon/storage/backpack/ert/medical name = "emergency response team medical backpack" desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team." - icon_state = "ert_medical" \ No newline at end of file + icon_state = "ert_medical" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index f7da60688e..b2d54be947 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -71,7 +71,7 @@ // ----------------------------- /obj/item/weapon/storage/bag/ore - name = "Mining Satchel" + name = "mining satchel" desc = "This little bugger can be used to store and transport ores." icon = 'icons/obj/mining.dmi' icon_state = "satchel" @@ -88,9 +88,9 @@ // ----------------------------- /obj/item/weapon/storage/bag/plants + name = "plant bag" icon = 'icons/obj/hydroponics.dmi' icon_state = "plantbag" - name = "Plant Bag" storage_slots = 50; //the number of plant pieces it can carry. max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = 3 @@ -105,9 +105,9 @@ // However, making it a storage/bag allows us to reuse existing code in some places. -Sayu /obj/item/weapon/storage/bag/sheetsnatcher + name = "sheet snatcher" icon = 'icons/obj/mining.dmi' icon_state = "sheetsnatcher" - name = "Sheet Snatcher" desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet." var/capacity = 300; //the number of sheets it can carry. @@ -236,7 +236,7 @@ // ----------------------------- /obj/item/weapon/storage/bag/sheetsnatcher/borg - name = "Sheet Snatcher 9000" + name = "sheet snatcher 9000" desc = "" capacity = 500//Borgs get more because >specialization @@ -245,9 +245,9 @@ // ----------------------------- /obj/item/weapon/storage/bag/cash + name = "cash bag" icon = 'icons/obj/storage.dmi' icon_state = "cashbag" - name = "Cash bag" desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." storage_slots = 50; //the number of cash pieces it can carry. max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 1613fa2459..941fdaae3b 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -14,7 +14,7 @@ icon_state = "utilitybelt" item_state = "utility" can_hold = list( - "/obj/item/weapon/combitool", + //"/obj/item/weapon/combitool", "/obj/item/weapon/crowbar", "/obj/item/weapon/screwdriver", "/obj/item/weapon/weldingtool", diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index f480e92185..4b9a7dbe64 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -252,7 +252,7 @@ new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) /obj/item/weapon/storage/box/cdeathalarm_kit - name = "Death Alarm Kit" + name = "death alarm kit" desc = "Box of stuff used to implant death alarms." icon_state = "implant" item_state = "syringe_kit" diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 82d3f78b0e..64d8e89bb7 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -281,4 +281,4 @@ /obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 48a6462651..6e2eca01c5 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -140,7 +140,7 @@ new /obj/item/weapon/reagent_containers/pill/kelotane( src ) /obj/item/weapon/storage/pill_bottle/antitox - name = "Dylovene pills" + name = "bottle of Dylovene pills" desc = "Contains pills used to counter toxins." New() @@ -154,7 +154,7 @@ new /obj/item/weapon/reagent_containers/pill/antitox( src ) /obj/item/weapon/storage/pill_bottle/inaprovaline - name = "Inaprovaline pills" + name = "bottle of Inaprovaline pills" desc = "Contains pills used to stabilize patients." New() @@ -168,7 +168,7 @@ new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) /obj/item/weapon/storage/pill_bottle/tramadol - name = "Tramadol Pills" + name = "bottle of Tramadol Pills" desc = "Contains pills used to relieve pain." New() @@ -180,4 +180,3 @@ new /obj/item/weapon/reagent_containers/pill/tramadol( src ) new /obj/item/weapon/reagent_containers/pill/tramadol( src ) new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 67205c7619..082002a5b9 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -82,4 +82,4 @@ return 1 /obj/item/weapon/storage/internal/Adjacent(var/atom/neighbor) - return master_item.Adjacent(neighbor) \ No newline at end of file + return master_item.Adjacent(neighbor) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 291418f510..2e1d4d2a4c 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -452,11 +452,11 @@ del(src) //BubbleWrap END -/obj/item/weapon/storage/hear_talk(mob/M as mob, text) +/obj/item/weapon/storage/hear_talk(mob/M as mob, text, verb, datum/language/speaking) for (var/atom/A in src) if(istype(A,/obj/)) var/obj/O = A - O.hear_talk(M, text) + O.hear_talk(M, text, verb, speaking) //Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). //Returns -1 if the atom was not found on container. @@ -492,4 +492,4 @@ if (!cur_atom) return -1 //inside something with a null loc. - return depth \ No newline at end of file + return depth diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 2c25e8adac..b6b11af106 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -83,4 +83,4 @@ new /obj/item/weapon/crowbar(src) new /obj/item/stack/cable_coil(src,30,color) new /obj/item/weapon/wirecutters(src) - new /obj/item/device/multitool(src) \ No newline at end of file + new /obj/item/device/multitool(src) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index d28586b0a2..fc1d2e2b8a 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -124,7 +124,7 @@ return /obj/item/weapon/storage/box/syndie_kit/chameleon - name = "Chameleon Kit" + name = "chameleon kit" desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." storage_slots = 10 @@ -139,4 +139,13 @@ new /obj/item/clothing/mask/chameleon(src) new /obj/item/clothing/glasses/chameleon(src) new /obj/item/weapon/gun/projectile/chameleon(src) - new /obj/item/ammo_magazine/chameleon(src) \ No newline at end of file + new /obj/item/ammo_magazine/chameleon(src) + +/obj/item/weapon/storage/box/syndie_kit/clerical + name = "clerical kit" + desc = "Comes with all you need to fake paperwork. Assumes you have passed basic writing lessons." + +/obj/item/weapon/storage/box/syndie_kit/clerical/New() + ..() + new /obj/item/weapon/stamp/chameleon(src) + new /obj/item/weapon/pen/chameleon(src) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 8f6579c830..505263cf46 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -88,4 +88,4 @@ if(item2_type) new item2_type(src) if(item3_type) - new item3_type(src) \ No newline at end of file + new item3_type(src) diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm index 04f0ac5db7..e5a65ba9c7 100644 --- a/code/game/objects/items/weapons/surgery_limbattachment.dm +++ b/code/game/objects/items/weapons/surgery_limbattachment.dm @@ -68,4 +68,4 @@ del(src) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 3a0f29a3da..34516e875f 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -134,4 +134,3 @@ return else return ..() - diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index 4593bf932f..e205f20bb0 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -81,4 +81,4 @@ if("Close the lighter.") src.icon_state = "c-4detonator_0" user << "You close the lighter." - pr_open = 0 \ No newline at end of file + pr_open = 0 diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 50a2c8a2e4..fff0deed5f 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -1,124 +1,101 @@ -/* Table parts and rack parts - * Contains: - * Table Parts - * Reinforced Table Parts - * Wooden Table Parts - * Rack Parts - */ +// Table parts and rack parts +/obj/item/weapon/table_parts + name = "table parts" + desc = "Parts of a table. Poor table." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "table_parts" + matter = list("metal" = 3750) + flags = FPRINT | TABLEPASS| CONDUCT + attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") + var/build_type = /obj/structure/table + var/alter_type = /obj/item/weapon/table_parts/reinforced + var/alter_with = /obj/item/stack/rods + var/alter_cost = 4 + var/list/stack_types = list(/obj/item/stack/sheet/metal) -/* - * Table Parts - */ /obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( user.loc ) - //SN src = null + for(var/material_type in stack_types) + new material_type(get_turf(user)) del(src) - if (istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = W - if (R.use(4)) - new /obj/item/weapon/table_parts/reinforced(get_turf(loc)) - user << "You reinforce the [name]." - del(src) - else - user << "You need at least four rods to reinforce the [name]." + return + else + if(alter_type && alter_with && istype(W,alter_with)) + var/obj/item/stack/R = W + if (R.use(alter_cost)) + var/obj/item/new_parts = new alter_type (get_turf(loc)) + user << "You modify \the [name] into \a [new_parts]." + del(src) + else + user << "You need at least [alter_cost] sheets to reinforce the [name]." + return + ..() /obj/item/weapon/table_parts/attack_self(mob/user as mob) if(locate(/obj/structure/table) in user.loc) user << "There is already a table here." return - new /obj/structure/table( user.loc ) + new build_type( user.loc ) user.drop_item() del(src) return +/obj/item/weapon/table_parts/reinforced + name = "reinforced table parts" + desc = "Hard table parts. Well... harder." + icon = 'icons/obj/items.dmi' + icon_state = "reinf_tableparts" + matter = list("metal" = 7500) + flags = FPRINT | TABLEPASS| CONDUCT -/* - * Reinforced Table Parts - */ -/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( get_turf(loc) ) - new /obj/item/stack/rods( get_turf(loc) ) - del(src) + stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) + build_type = /obj/structure/table/reinforced + alter_type = null + alter_with = null + alter_cost = null -/obj/item/weapon/table_parts/reinforced/attack_self(mob/user as mob) - if(locate(/obj/structure/table/reinforced) in user.loc) - user << "There is already a table here." - return +/obj/item/weapon/table_parts/wood + name = "wooden table parts" + desc = "Keep away from fire." + icon_state = "wood_tableparts" + flags = null - new /obj/structure/table/reinforced( user.loc ) - user.drop_item() - del(src) - return + stack_types = list(/obj/item/stack/sheet/wood) + build_type = /obj/structure/table/woodentable + alter_type = /obj/item/weapon/table_parts/gambling + alter_with = /obj/item/stack/tile/carpet + alter_cost = 1 -/* - * Wooden Table Parts - */ -/obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/wood( get_turf(loc) ) - //SN src = null - del(src) - if (istype(W, /obj/item/stack/tile/carpet)) - var/obj/item/stack/tile/carpet/C = W - if (C.use(1)) - new /obj/item/weapon/table_parts/gambling(get_turf(loc)) - user << "You put a layer of carpet on the table." - del(src) +/obj/item/weapon/table_parts/gambling + name = "gambling table parts" + desc = "Keep away from security." + icon_state = "gamble_tableparts" + flags = null -/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) - if(locate(/obj/structure/table/woodentable) in user.loc) - user << "There is already a table here." - return + stack_types = list(/obj/item/stack/tile/carpet,/obj/item/stack/sheet/wood) + build_type = /obj/structure/table/gamblingtable + alter_type = null + alter_with = null + alter_cost = null - new /obj/structure/table/woodentable( user.loc ) - user.drop_item() - del(src) - return - -/* - * Gambling Table Parts - */ /obj/item/weapon/table_parts/gambling/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/wood( get_turf(loc) ) - new /obj/item/stack/tile/carpet( get_turf(loc) ) - del(src) if (istype(W, /obj/item/weapon/crowbar)) new /obj/item/stack/tile/carpet( get_turf(loc) ) new /obj/item/weapon/table_parts/wood( get_turf(loc) ) user << "You pry the carpet out of the table." del(src) - -/obj/item/weapon/table_parts/gambling/attack_self(mob/user as mob) - new /obj/structure/table/gamblingtable( user.loc ) - user.drop_item() - del(src) - return -/* - * Rack Parts - */ -/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( get_turf(loc) ) - del(src) - return - return -/obj/item/weapon/rack_parts/attack_self(mob/user as mob) - if(locate(/obj/structure/rack) in user.loc) - user << "There is already a rack here." - return - - var/obj/structure/rack/R = new /obj/structure/rack( user.loc ) - R.add_fingerprint(user) - user.drop_item() - del(src) - return \ No newline at end of file +/obj/item/weapon/table_parts/rack + name = "rack parts" + desc = "Parts of a rack." + icon_state = "rack_parts" + stack_types = list(/obj/item/stack/sheet/metal) + build_type = /obj/structure/table/rack + alter_type = null + alter_with = null + alter_cost = null \ No newline at end of file diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 7b41c1b18b..422af1d652 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 /obj/item/weapon/tank/jetpack - name = "Jetpack (Empty)" + name = "jetpack (empty)" desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." icon_state = "jetpack" w_class = 4.0 @@ -71,7 +71,7 @@ /obj/item/weapon/tank/jetpack/void - name = "Void Jetpack (Oxygen)" + name = "void jetpack (oxygen)" desc = "It works well in a void." icon_state = "jetpack-void" item_state = "jetpack-void" @@ -82,7 +82,7 @@ return /obj/item/weapon/tank/jetpack/oxygen - name = "Jetpack (Oxygen)" + name = "jetpack (oxygen)" desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." icon_state = "jetpack" item_state = "jetpack" @@ -93,7 +93,7 @@ return /obj/item/weapon/tank/jetpack/carbondioxide - name = "Jetpack (Carbon Dioxide)" + name = "jetpack (carbon dioxide)" desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." distribute_pressure = 0 icon_state = "jetpack-black" @@ -144,4 +144,4 @@ if(allgases >= 0.005) return 1 del(G) - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 9d374ad15f..f6485f0a16 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -251,7 +251,7 @@ air_contents.react() pressure = air_contents.return_pressure() var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE - range = min(range, MAX_EXPLOSION_RANGE) // was 8 - - - Changed to a configurable define -- TLE + range = min(range, max_explosion_range) // was 8 - - - Changed to a configurable define -- TLE var/turf/epicenter = get_turf(loc) //world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]" diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 0514e7d1d2..2d82cacaad 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -87,4 +87,4 @@ if(dir_offset & NORTH) pixel_y += 32 else if(dir_offset & SOUTH) - pixel_y -= 32 \ No newline at end of file + pixel_y -= 32 diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 8472723f48..e04a5f0888 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -172,5 +172,3 @@ Frequency: P.creator = src src.add_fingerprint(user) return - - diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 2165a6bfa4..62793f0b2c 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -333,6 +333,7 @@ src.force = 15 src.damtype = "fire" src.icon_state = "welder1" + src.w_class = 4 processing_objects.Add(src) else usr << "\blue Need more fuel!" @@ -347,6 +348,7 @@ src.damtype = "brute" src.icon_state = "welder" src.welding = 0 + src.w_class = initial(src.w_class) //Decides whether or not to damage a player's eyes based on what they're wearing as protection //Note: This should probably be moved to mob @@ -394,20 +396,20 @@ /obj/item/weapon/weldingtool/largetank - name = "Industrial Welding Tool" + name = "industrial welding tool" max_fuel = 40 matter = list("metal" = 70, "glass" = 60) origin_tech = "engineering=2" /obj/item/weapon/weldingtool/hugetank - name = "Upgraded Welding Tool" + name = "upgraded welding tool" max_fuel = 80 w_class = 3.0 matter = list("metal" = 70, "glass" = 120) origin_tech = "engineering=3" /obj/item/weapon/weldingtool/experimental - name = "Experimental Welding Tool" + name = "experimental welding tool" max_fuel = 40 w_class = 3.0 matter = list("metal" = 70, "glass" = 120) @@ -473,7 +475,7 @@ else return ..() -/obj/item/weapon/combitool +/*/obj/item/weapon/combitool name = "combi-tool" desc = "It even has one of those nubbins for doing the thingy." icon = 'icons/obj/items.dmi' @@ -513,11 +515,15 @@ return 1 /obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!M.Adjacent(user)) + return 0 var/obj/item/tool = tools[current_tool] if(!tool) return 0 return (tool ? tool.attack(M,user) : 0) /obj/item/weapon/combitool/afterattack(var/atom/target, var/mob/living/user, proximity, params) + if(!proximity) + return 0 var/obj/item/tool = tools[current_tool] if(!tool) return 0 tool.loc = user @@ -525,4 +531,4 @@ if(!resolved && tool && target) tool.afterattack(target,user,1) if(tool) - tool.loc = src \ No newline at end of file + tool.loc = src*/ diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 70485e67a2..c8e67078b2 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -62,6 +62,7 @@ return ..() + if(wielded) //Trying to unwield it unwield() user << "You are now carrying the [name] with one hand." @@ -71,7 +72,6 @@ var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand() if(O && istype(O)) O.unwield() - return else //Trying to wield it if(user.get_inactive_hand()) @@ -86,7 +86,13 @@ O.name = "[initial(name)] - offhand" O.desc = "Your second grip on the [initial(name)]" user.put_in_inactive_hand(O) - return + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + return ///////////OFFHAND/////////////// /obj/item/weapon/twohanded/offhand @@ -198,4 +204,3 @@ /obj/item/weapon/twohanded/spear/update_icon() icon_state = "spearglass[wielded]" return - diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index dac6e5a260..a584f3db4b 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -1,5 +1,5 @@ /obj/item/weapon/banhammer - desc = "A banhammer" + desc = "banhammer" name = "banhammer" icon = 'icons/obj/items.dmi' icon_state = "toyhammer" @@ -482,4 +482,4 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob) /obj/effect/energy_net/attackby(obj/item/weapon/W as obj, mob/user as mob) health -= W.force healthcheck() - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm index 284be5284c..df2033f887 100644 --- a/code/game/objects/items/weapons/wires.dm +++ b/code/game/objects/items/weapons/wires.dm @@ -16,5 +16,3 @@ else user << "\blue You are not using this to lay wire..." return - - diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 44fc441926..167794721b 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -126,7 +126,7 @@ return -/obj/proc/hear_talk(mob/M as mob, text) +/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking) if(talking_atom) talking_atom.catchMessage(text, M) /* @@ -135,4 +135,7 @@ var/rendered = "[M.name]: [text]" mo.show_message(rendered, 2) */ - return \ No newline at end of file + return + +/obj/proc/see_emote(mob/M as mob, text, var/emote_type) + return diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 8392383150..53f4cc0903 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -1,5 +1,5 @@ /obj/random - name = "Random Object" + name = "random object" desc = "This item type is used to spawn random objects at round-start" icon = 'icons/misc/mark.dmi' icon_state = "rup" @@ -26,7 +26,7 @@ /obj/random/tool - name = "Random Tool" + name = "random tool" desc = "This is a random tool" icon = 'icons/obj/items.dmi' icon_state = "welder" @@ -40,7 +40,7 @@ /obj/random/technology_scanner - name = "Random Scanner" + name = "random scanner" desc = "This is a random technology scanner." icon = 'icons/obj/device.dmi' icon_state = "atmos" @@ -51,7 +51,7 @@ /obj/random/powercell - name = "Random Powercell" + name = "random powercell" desc = "This is a random powercell." icon = 'icons/obj/power.dmi' icon_state = "cell" @@ -64,7 +64,7 @@ /obj/random/bomb_supply - name = "Bomb Supply" + name = "bomb supply" desc = "This is a random bomb supply." icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "signaller" @@ -76,7 +76,7 @@ /obj/random/toolbox - name = "Random Toolbox" + name = "random toolbox" desc = "This is a random toolbox." icon = 'icons/obj/storage.dmi' icon_state = "red" @@ -87,7 +87,7 @@ /obj/random/tech_supply - name = "Random Tech Supply" + name = "random tech supply" desc = "This is a random piece of technology supplies." icon = 'icons/obj/power.dmi' icon_state = "cell" @@ -103,4 +103,4 @@ prob(2);/obj/random/toolbox,\ prob(2);/obj/item/weapon/storage/belt/utility,\ prob(5);/obj/random/tool,\ - prob(2);/obj/item/weapon/tape_roll) \ No newline at end of file + prob(2);/obj/item/weapon/tape_roll) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index f24c3c7839..d105caae00 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -76,23 +76,27 @@ if (!can_touch(user) || !climbable) return 0 - var/turf/T = src.loc - if(!T || !istype(T)) return 0 - if (!user.Adjacent(src)) - user << "\red You can't climb there, the way is blocked." + user << "You can't climb there, the way is blocked." return 0 + var/obj/occupied = turf_is_crowded() + if(occupied) + user << "There's \a [occupied] in the way." + return 0 + return 1 + +/obj/structure/proc/turf_is_crowded() + var/turf/T = get_turf(src) + if(!T || !istype(T)) + return 0 for(var/obj/O in T.contents) if(istype(O,/obj/structure)) var/obj/structure/S = O - if(S.climbable) - continue - + if(S.climbable) continue if(O && O.density && !(O.flags & ON_BORDER)) //ON_BORDER structures are handled by the Adjacent() check. - user << "\red There's \a [O] in the way." - return 0 - return 1 + return O + return 0 /obj/structure/proc/do_climb(var/mob/living/user) if (!can_climb(user)) @@ -118,14 +122,14 @@ if(M.lying) return //No spamming this on people. M.Weaken(5) - M << "\red You topple as \the [src] moves under you!" + M << "You topple as \the [src] moves under you!" if(prob(25)) var/damage = rand(15,30) var/mob/living/carbon/human/H = M if(!istype(H)) - H << "\red You land heavily!" + H << "You land heavily!" M.adjustBruteLoss(damage) return @@ -144,12 +148,12 @@ affecting = H.get_organ("head") if(affecting) - M << "\red You land heavily on your [affecting.display_name]!" + M << "You land heavily on your [affecting.display_name]!" affecting.take_damage(damage, 0) if(affecting.parent) affecting.parent.add_autopsy_data("Misadventure", damage) else - H << "\red You land heavily!" + H << "You land heavily!" H.adjustBruteLoss(damage) H.UpdateDamageIcon() diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 8ef3fd463d..68681f081a 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -21,4 +21,4 @@ else sign_type = replacetext(lowertext(sign_type), " ", "") // lowercase, strip spaces - along with choices for user options, avoids huge if-else-else src.ChangeSign(sign_type) - user << "You change the barsign." \ No newline at end of file + user << "You change the barsign." diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 8a3cccae46..d838d41e5b 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -93,8 +93,6 @@ LINEN BINS item_color = "brown" - - /obj/structure/bedsheetbin name = "linen bin" desc = "A linen bin. It looks rather cosy." @@ -183,4 +181,4 @@ LINEN BINS hidden = null - add_fingerprint(user) \ No newline at end of file + add_fingerprint(user) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index deca42e867..ac3e89000c 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -50,4 +50,4 @@ if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo)) overlays += image(icon, icon_state = "coat_cmo") if (istype(coat, /obj/item/clothing/suit/storage/det_suit)) - overlays += image(icon, icon_state = "coat_det") \ No newline at end of file + overlays += image(icon, icon_state = "coat_det") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 44c2c3b900..a929ff7201 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -293,11 +293,11 @@ else icon_state = icon_opened -/obj/structure/closet/hear_talk(mob/M as mob, text) +/obj/structure/closet/hear_talk(mob/M as mob, text, verb, datum/language/speaking) for (var/atom/A in src) if(istype(A,/obj/)) var/obj/O = A - O.hear_talk(M, text) + O.hear_talk(M, text, verb, speaking) /obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys", var/wallbreaker) if(!damage || !wallbreaker) @@ -305,4 +305,4 @@ visible_message("[user] [attack_message] the [src]!") dump_contents() spawn(1) del(src) - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 256f72522e..67de5d38b9 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -9,4 +9,4 @@ if(!opened) icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm index d3ab79e768..3546cd52e7 100644 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm @@ -3,4 +3,4 @@ desc = "A crate which can sustain life for a while." icon_state = "critter" icon_opened = "critteropen" - icon_closed = "critter" \ No newline at end of file + icon_closed = "critter" diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 73295477f0..0728a9befa 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -1,6 +1,6 @@ //I still dont think this should be a closet but whatever /obj/structure/closet/fireaxecabinet - name = "Fire Axe Cabinet" + name = "fire axe cabinet" desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." var/obj/item/weapon/twohanded/fireaxe/fireaxe icon_state = "fireaxe1000" @@ -207,4 +207,4 @@ return close() - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index 6536e065e5..05e7968a93 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -71,4 +71,4 @@ new /obj/item/weapon/gun/energy/laser/bluetag(src) new /obj/item/weapon/gun/energy/laser/bluetag(src) new /obj/item/clothing/suit/bluetag(src) - new /obj/item/clothing/suit/bluetag(src) \ No newline at end of file + new /obj/item/clothing/suit/bluetag(src) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 62412f1093..1a62db2dfb 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -134,4 +134,3 @@ new /obj/item/clothing/head/helmet/thunderdome(src) new /obj/item/clothing/head/helmet/thunderdome(src) new /obj/item/clothing/head/helmet/thunderdome(src) - diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 061f34266e..7113c1b45a 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -35,7 +35,7 @@ * Chef */ /obj/structure/closet/chefcloset - name = "\proper chef's closet" + name = "chef's closet" desc = "It's a storage unit for foodservice garments." icon_state = "black" icon_closed = "black" @@ -97,4 +97,4 @@ new /obj/item/clothing/under/lawyer/purpsuit(src) new /obj/item/clothing/suit/storage/lawyer/purpjacket(src) new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/black(src) \ No newline at end of file + new /obj/item/clothing/shoes/black(src) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index a6890430ef..bb5fe26e4f 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -70,4 +70,4 @@ ..() contents = list() new /obj/item/clothing/suit/bio_suit/scientist( src ) - new /obj/item/clothing/head/bio_hood/scientist( src ) \ No newline at end of file + new /obj/item/clothing/head/bio_hood/scientist( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index 02b81a13e0..bd17ba9841 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -1,4 +1,3 @@ - /obj/structure/closet/malf/suits desc = "It's a storage unit for operational gear." icon_state = "syndicate" @@ -13,4 +12,4 @@ new /obj/item/clothing/suit/space/void(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/cell(src) - new /obj/item/device/multitool(src) \ No newline at end of file + new /obj/item/device/multitool(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 42759e3380..96a7e8131a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/bar - name = "Booze" + name = "booze closet" req_access = list(access_bar) icon_state = "cabinetdetective_locked" icon_closed = "cabinetdetective" @@ -33,4 +33,4 @@ else icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index f7e3a25bb3..a28e629a98 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/cargotech - name = "Cargo Technician's Locker" + name = "cargo technician's locker" req_access = list(access_cargo) icon_state = "securecargo1" icon_closed = "securecargo" @@ -19,7 +19,7 @@ return /obj/structure/closet/secure_closet/quartermaster - name = "Quartermaster's Locker" + name = "quartermaster's locker" req_access = list(access_qm) icon_state = "secureqm1" icon_closed = "secureqm" @@ -40,4 +40,4 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/clothing/head/soft(src) - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 76528200fe..803f07616e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/engineering_chief - name = "Chief Engineer's Locker" + name = "chief engineer's locker" req_access = list(access_ce) icon_state = "securece1" icon_closed = "securece" @@ -38,7 +38,7 @@ /obj/structure/closet/secure_closet/engineering_electrical - name = "Electrical Supplies" + name = "electrical supplies" req_access = list(access_engine_equip) icon_state = "secureengelec1" icon_closed = "secureengelec" @@ -66,7 +66,7 @@ /obj/structure/closet/secure_closet/engineering_welding - name = "Welding Supplies" + name = "welding supplies" req_access = list(access_construction) icon_state = "secureengweld1" icon_closed = "secureengweld" @@ -92,7 +92,7 @@ /obj/structure/closet/secure_closet/engineering_personal - name = "Engineer's Locker" + name = "engineer's locker" req_access = list(access_engine_equip) icon_state = "secureeng1" icon_closed = "secureeng" @@ -121,7 +121,7 @@ new /obj/item/taperoll/engineering(src) return /obj/structure/closet/secure_closet/atmos_personal - name = "Technician's Locker" + name = "technician's locker" req_access = list(access_atmospherics) icon_state = "secureatm1" icon_closed = "secureatm" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 4f326f0fb8..0513efd943 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -13,7 +13,7 @@ icon_state = icon_opened /obj/structure/closet/secure_closet/freezer/kitchen - name = "Kitchen Cabinet" + name = "kitchen cabinet" req_access = list(access_kitchen) New() @@ -32,7 +32,7 @@ /obj/structure/closet/secure_closet/freezer/meat - name = "Meat Fridge" + name = "meat fridge" icon_state = "fridge1" icon_closed = "fridge" icon_locked = "fridge1" @@ -50,7 +50,7 @@ /obj/structure/closet/secure_closet/freezer/fridge - name = "Refrigerator" + name = "refrigerator" icon_state = "fridge1" icon_closed = "fridge" icon_locked = "fridge1" @@ -72,7 +72,7 @@ /obj/structure/closet/secure_closet/freezer/money - name = "Freezer" + name = "freezer" icon_state = "fridge1" icon_closed = "fridge" icon_locked = "fridge1" @@ -91,11 +91,3 @@ for(var/i = 0, i < 6, i++) new /obj/item/weapon/spacecash/c200(src) return - - - - - - - - diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index 8fb8b0c92c..969185741d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -50,4 +50,4 @@ else if (locked) overlays += icon(src.icon,"locked") else - overlays += icon(src.icon,"open") \ No newline at end of file + overlays += icon(src.icon,"open") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 3f7d24542e..2a1547e4ba 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/hydroponics - name = "Botanist's locker" + name = "botanist's locker" req_access = list(access_hydroponics) icon_state = "hydrosecure1" icon_closed = "hydrosecure" @@ -24,4 +24,4 @@ new /obj/item/weapon/minihoe(src) new /obj/item/weapon/hatchet(src) // new /obj/item/weapon/bee_net(src) //No more bees, March 2014 - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 0ee184429a..c242e5f8c0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/medical1 - name = "Medicine Closet" + name = "medicine closet" desc = "Filled with medical junk." icon_state = "medical1" icon_closed = "medical" @@ -27,7 +27,7 @@ /obj/structure/closet/secure_closet/medical2 - name = "Anesthetic" + name = "anesthetics closet" desc = "Used to knock people out." icon_state = "medical1" icon_closed = "medical" @@ -51,7 +51,7 @@ /obj/structure/closet/secure_closet/medical3 - name = "Medical Doctor's Locker" + name = "medical doctor's locker" req_access = list(access_surgery) icon_state = "securemed1" icon_closed = "securemed" @@ -101,7 +101,7 @@ /obj/structure/closet/secure_closet/CMO - name = "Chief Medical Officer's Locker" + name = "chief medical officer's locker" req_access = list(access_cmo) icon_state = "cmosecure1" icon_closed = "cmosecure" @@ -143,7 +143,7 @@ /obj/structure/closet/secure_closet/animal - name = "Animal Control" + name = "animal control closet" req_access = list(access_surgery) @@ -158,7 +158,7 @@ /obj/structure/closet/secure_closet/chemical - name = "Chemical Closet" + name = "chemical closet" desc = "Store dangerous chemicals in here." icon_state = "medical1" icon_closed = "medical" @@ -176,7 +176,7 @@ return /obj/structure/closet/secure_closet/medical_wall - name = "First Aid Closet" + name = "first aid closet" desc = "It's a secure wall-mounted storage unit for first aid supplies." icon_state = "medical_wall_locked" icon_closed = "medical_wall_unlocked" @@ -199,4 +199,4 @@ else icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 867dc9cd91..8fc77c5b92 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -1,6 +1,6 @@ /obj/structure/closet/secure_closet/personal - desc = "It's a secure locker for personnel. The first card swiped gains control." name = "personal closet" + desc = "It's a secure locker for personnel. The first card swiped gains control." req_access = list(access_all_personal_lockers) var/registered_name = null @@ -120,4 +120,4 @@ src.icon_state = src.icon_locked src.registered_name = null src.desc = "It's a secure locker for personnel. The first card swiped gains control." - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 5d6e7c3a0e..0578b79356 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/scientist - name = "Scientist's Locker" + name = "scientist's locker" req_access = list(access_tox_storage) icon_state = "secureres1" icon_closed = "secureres" @@ -23,7 +23,7 @@ /obj/structure/closet/secure_closet/RD - name = "Research Director's Locker" + name = "research director's locker" req_access = list(access_rd) icon_state = "rdsecure1" icon_closed = "rdsecure" @@ -48,4 +48,4 @@ new /obj/item/weapon/tank/air(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/flash(src) - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 479fdcb262..09810842d4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -128,4 +128,4 @@ if(welded) overlays += "welded" else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index b772f95e9a..b5b8796b3c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/captains - name = "Captain's Locker" + name = "captain's locker" req_access = list(access_captain) icon_state = "capsecure1" icon_closed = "capsecure" @@ -35,7 +35,7 @@ /obj/structure/closet/secure_closet/hop - name = "Head of Personnel's Locker" + name = "head of personnel's locker" req_access = list(access_hop) icon_state = "hopsecure1" icon_closed = "hopsecure" @@ -58,7 +58,7 @@ return /obj/structure/closet/secure_closet/hop2 - name = "Head of Personnel's Attire" + name = "head of personnel's attire" req_access = list(access_hop) icon_state = "hopsecure1" icon_closed = "hopsecure" @@ -87,7 +87,7 @@ /obj/structure/closet/secure_closet/hos - name = "Head of Security's Locker" + name = "head of security's locker" req_access = list(access_hos) icon_state = "hossecure1" icon_closed = "hossecure" @@ -127,7 +127,7 @@ /obj/structure/closet/secure_closet/warden - name = "Warden's Locker" + name = "warden's locker" req_access = list(access_armory) icon_state = "wardensecure1" icon_closed = "wardensecure" @@ -164,7 +164,7 @@ /obj/structure/closet/secure_closet/security - name = "Security Officer's Locker" + name = "security officer's locker" req_access = list(access_security) icon_state = "sec1" icon_closed = "sec" @@ -232,7 +232,7 @@ /obj/structure/closet/secure_closet/detective - name = "Detective's Cabinet" + name = "detective's cabinet" req_access = list(access_forensics_lockers) icon_state = "cabinetdetective_locked" icon_closed = "cabinetdetective" @@ -278,7 +278,7 @@ icon_state = icon_opened /obj/structure/closet/secure_closet/injection - name = "Lethal Injections" + name = "lethal injections locker" req_access = list(access_captain) @@ -291,7 +291,7 @@ /obj/structure/closet/secure_closet/brig - name = "Brig Locker" + name = "brig locker" req_access = list(access_brig) anchored = 1 var/id = null @@ -305,7 +305,7 @@ /obj/structure/closet/secure_closet/courtroom - name = "Courtroom Locker" + name = "courtroom locker" req_access = list(access_court) New() diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index cd06efb60f..2f6b66e5ce 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -1,5 +1,5 @@ /obj/structure/closet/syndicate - name = "armoury closet" + name = "armory closet" desc = "Why is this here?" icon_state = "syndicate" icon_closed = "syndicate" @@ -144,4 +144,4 @@ var/obj/item/stack/R = new res(src) R.amount = R.max_amount - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 090b2c8145..fd548974af 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -230,4 +230,4 @@ if(!opened) icon_state = icon_closed else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index a4c0ca78e8..d2d26ec0b5 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -213,7 +213,7 @@ /obj/structure/closet/wardrobe/pjs - name = "Pajama wardrobe" + name = "pajama wardrobe" icon_state = "white" icon_closed = "white" @@ -420,4 +420,4 @@ new /obj/item/clothing/under/suit_jacket/female(src) new /obj/item/clothing/under/suit_jacket/really_black(src) new /obj/item/clothing/under/suit_jacket/red(src) - new /obj/item/clothing/under/scratch(src) \ No newline at end of file + new /obj/item/clothing/under/scratch(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index df7b63a199..3f6f321129 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -230,15 +230,15 @@ icon_closed = "plasticcrate" /obj/structure/closet/crate/internals + name = "internals crate" desc = "A internals crate." - name = "Internals crate" icon_state = "o2crate" icon_opened = "o2crateopen" icon_closed = "o2crate" /obj/structure/closet/crate/trashcart + name = "trash cart" desc = "A heavy, metal trashcart with wheels." - name = "Trash Cart" icon_state = "trashcart" icon_opened = "trashcartopen" icon_closed = "trashcart" @@ -260,15 +260,15 @@ */ /obj/structure/closet/crate/medical + name = "medical crate" desc = "A medical crate." - name = "Medical crate" icon_state = "medicalcrate" icon_opened = "medicalcrateopen" icon_closed = "medicalcrate" /obj/structure/closet/crate/rcd - desc = "A crate for the storage of the RCD." - name = "RCD crate" + name = "\improper RCD crate" + desc = "A crate with rapid construction device." icon_state = "crate" icon_opened = "crateopen" icon_closed = "crate" @@ -281,7 +281,7 @@ new /obj/item/weapon/rcd(src) /obj/structure/closet/crate/solar - name = "Solar Pack crate" + name = "solar pack crate" /obj/structure/closet/crate/solar/New() ..() @@ -311,8 +311,8 @@ new /obj/item/weapon/paper/solar(src) /obj/structure/closet/crate/freezer + name = "freezer" desc = "A freezer." - name = "Freezer" icon_state = "freezer" icon_opened = "freezeropen" icon_closed = "freezer" @@ -333,8 +333,8 @@ return newgas /obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle + name = "emergency rations" desc = "A crate of emergency rations." - name = "Emergency Rations" /obj/structure/closet/crate/freezer/rations/New() @@ -343,15 +343,15 @@ new /obj/item/weapon/storage/box/donkpockets(src) /obj/structure/closet/crate/bin + name = "large bin" desc = "A large bin." - name = "Large bin" icon_state = "largebin" icon_opened = "largebinopen" icon_closed = "largebin" /obj/structure/closet/crate/radiation + name = "radioactive gear crate" desc = "A crate with a radiation sign on it." - name = "Radioactive gear crate" icon_state = "radiation" icon_opened = "radiationopen" icon_closed = "radiation" @@ -368,36 +368,36 @@ new /obj/item/clothing/head/radiation(src) /obj/structure/closet/crate/secure/weapon + name = "weapons crate" desc = "A secure weapons crate." - name = "Weapons crate" icon_state = "weaponcrate" icon_opened = "weaponcrateopen" icon_closed = "weaponcrate" /obj/structure/closet/crate/secure/phoron + name = "phoron crate" desc = "A secure phoron crate." - name = "Phoron crate" icon_state = "phoroncrate" icon_opened = "phoroncrateopen" icon_closed = "phoroncrate" /obj/structure/closet/crate/secure/gear + name = "gear crate" desc = "A secure gear crate." - name = "Gear crate" icon_state = "secgearcrate" icon_opened = "secgearcrateopen" icon_closed = "secgearcrate" /obj/structure/closet/crate/secure/hydrosec - desc = "A crate with a lock on it, painted in the scheme of the station's botanists." name = "secure hydroponics crate" + desc = "A crate with a lock on it, painted in the scheme of the station's botanists." icon_state = "hydrosecurecrate" icon_opened = "hydrosecurecrateopen" icon_closed = "hydrosecurecrate" /obj/structure/closet/crate/secure/bin + name = "secure bin" desc = "A secure bin." - name = "Secure bin" icon_state = "largebins" icon_opened = "largebinsopen" icon_closed = "largebins" @@ -468,7 +468,7 @@ icon_closed = "largermetal" /obj/structure/closet/crate/hydroponics - name = "Hydroponics crate" + name = "hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." icon_state = "hydrocrate" icon_opened = "hydrocrateopen" @@ -486,4 +486,4 @@ // new /obj/item/weapon/weedspray(src) // new /obj/item/weapon/pestspray(src) // new /obj/item/weapon/pestspray(src) -// new /obj/item/weapon/pestspray(src) \ No newline at end of file +// new /obj/item/weapon/pestspray(src) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 1958bac750..e9fdd40966 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -64,7 +64,7 @@ ..() /obj/structure/largecrate/hoverpod - name = "Hoverpod assembly crate" + name = "\improper Hoverpod assembly crate" desc = "It comes in a box for the fabricator's sake. Where does the wood come from? ... And why is it lighter?" icon_state = "mulecrate" @@ -77,4 +77,4 @@ ME.attach(H) ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger ME.attach(H) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index e48e8419d2..741dc371db 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -1,6 +1,6 @@ /obj/structure/curtain - icon = 'icons/obj/curtain.dmi' name = "curtain" + icon = 'icons/obj/curtain.dmi' icon_state = "closed" layer = MOB_LAYER + 0.1 opacity = 1 diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index f30e0e2545..0ab10debe9 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -92,5 +92,3 @@ src.health -= 2 healthcheck() return - - diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 9fbf63ba18..b4281a6033 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -1,7 +1,6 @@ -obj/structure/door_assembly - icon = 'icons/obj/doors/door_assembly.dmi' - +/obj/structure/door_assembly name = "airlock assembly" + icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_as_0" anchored = 0 density = 1 @@ -17,120 +16,120 @@ obj/structure/door_assembly New() update_state() - door_assembly_com - base_icon_state = "com" - base_name = "Command Airlock" - glass_type = "/glass_command" - airlock_type = "/command" +/obj/structure/door_assembly/door_assembly_com + base_icon_state = "com" + base_name = "Command Airlock" + glass_type = "/glass_command" + airlock_type = "/command" - door_assembly_sec - base_icon_state = "sec" - base_name = "Security Airlock" - glass_type = "/glass_security" - airlock_type = "/security" +/obj/structure/door_assembly/door_assembly_sec + base_icon_state = "sec" + base_name = "Security Airlock" + glass_type = "/glass_security" + airlock_type = "/security" - door_assembly_eng - base_icon_state = "eng" - base_name = "Engineering Airlock" - glass_type = "/glass_engineering" - airlock_type = "/engineering" +/obj/structure/door_assembly/door_assembly_eng + base_icon_state = "eng" + base_name = "Engineering Airlock" + glass_type = "/glass_engineering" + airlock_type = "/engineering" - door_assembly_min - base_icon_state = "min" - base_name = "Mining Airlock" - glass_type = "/glass_mining" - airlock_type = "/mining" +/obj/structure/door_assembly/door_assembly_min + base_icon_state = "min" + base_name = "Mining Airlock" + glass_type = "/glass_mining" + airlock_type = "/mining" - door_assembly_atmo - base_icon_state = "atmo" - base_name = "Atmospherics Airlock" - glass_type = "/glass_atmos" - airlock_type = "/atmos" +/obj/structure/door_assembly/door_assembly_atmo + base_icon_state = "atmo" + base_name = "Atmospherics Airlock" + glass_type = "/glass_atmos" + airlock_type = "/atmos" - door_assembly_research - base_icon_state = "res" - base_name = "Research Airlock" - glass_type = "/glass_research" - airlock_type = "/research" +/obj/structure/door_assembly/door_assembly_research + base_icon_state = "res" + base_name = "Research Airlock" + glass_type = "/glass_research" + airlock_type = "/research" - door_assembly_science - base_icon_state = "sci" - base_name = "Science Airlock" - glass_type = "/glass_science" - airlock_type = "/science" +/obj/structure/door_assembly/door_assembly_science + base_icon_state = "sci" + base_name = "Science Airlock" + glass_type = "/glass_science" + airlock_type = "/science" - door_assembly_med - base_icon_state = "med" - base_name = "Medical Airlock" - glass_type = "/glass_medical" - airlock_type = "/medical" +/obj/structure/door_assembly/door_assembly_med + base_icon_state = "med" + base_name = "Medical Airlock" + glass_type = "/glass_medical" + airlock_type = "/medical" - door_assembly_mai - base_icon_state = "mai" - base_name = "Maintenance Airlock" - airlock_type = "/maintenance" - glass = -1 +/obj/structure/door_assembly/door_assembly_mai + base_icon_state = "mai" + base_name = "Maintenance Airlock" + airlock_type = "/maintenance" + glass = -1 - door_assembly_ext - base_icon_state = "ext" - base_name = "External Airlock" - airlock_type = "/external" - glass = -1 +/obj/structure/door_assembly/door_assembly_ext + base_icon_state = "ext" + base_name = "External Airlock" + airlock_type = "/external" + glass = -1 - door_assembly_fre - base_icon_state = "fre" - base_name = "Freezer Airlock" - airlock_type = "/freezer" - glass = -1 +/obj/structure/door_assembly/door_assembly_fre + base_icon_state = "fre" + base_name = "Freezer Airlock" + airlock_type = "/freezer" + glass = -1 - door_assembly_hatch - base_icon_state = "hatch" - base_name = "Airtight Hatch" - airlock_type = "/hatch" - glass = -1 +/obj/structure/door_assembly/door_assembly_hatch + base_icon_state = "hatch" + base_name = "Airtight Hatch" + airlock_type = "/hatch" + glass = -1 - door_assembly_mhatch - base_icon_state = "mhatch" - base_name = "Maintenance Hatch" - airlock_type = "/maintenance_hatch" - glass = -1 +/obj/structure/door_assembly/door_assembly_mhatch + base_icon_state = "mhatch" + base_name = "Maintenance Hatch" + airlock_type = "/maintenance_hatch" + glass = -1 - door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly - base_icon_state = "highsec" - base_name = "High Security Airlock" - airlock_type = "/highsecurity" - glass = -1 +/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly + base_icon_state = "highsec" + base_name = "High Security Airlock" + airlock_type = "/highsecurity" + glass = -1 - multi_tile - icon = 'icons/obj/doors/door_assembly2x1.dmi' - dir = EAST - var/width = 1 +/obj/structure/door_assembly/multi_tile + icon = 'icons/obj/doors/door_assembly2x1.dmi' + dir = EAST + var/width = 1 /*Temporary until we get sprites. - glass_type = "/multi_tile/glass" - airlock_type = "/multi_tile/maint" - glass = 1*/ - base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1. - airlock_type = "/multi_tile/glass" - glass = -1 //To prevent bugs in deconstruction process. + glass_type = "/multi_tile/glass" + airlock_type = "/multi_tile/maint" + glass = 1*/ + base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1. + airlock_type = "/multi_tile/glass" + glass = -1 //To prevent bugs in deconstruction process. - New() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - update_state() + New() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + update_state() - Move() - . = ..() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size + Move() + . = ..() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size @@ -224,7 +223,7 @@ obj/structure/door_assembly user << "There was nothing to remove." src.state = 1 return - + playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove the electronics from the airlock assembly.") @@ -272,7 +271,8 @@ obj/structure/door_assembly else path = text2path("/obj/machinery/door/airlock[airlock_type]") - new path(src.loc, src) + var/obj/machinery/door/new_airlock = new path(src.loc, src) + new_airlock.dir = src.dir del(src) else ..() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 28d9ebc623..da68071090 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -74,4 +74,4 @@ A.power_light = light A.updateicon() - return \ No newline at end of file + return diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 014ecae9ac..f68c7ae7cb 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -331,4 +331,3 @@ desc = "A wall with sandstone plating." icon_state = "" mineral = "sandstone" -//------------wtf?------------end \ No newline at end of file diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 85de4b62f5..71a87b18b4 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -193,4 +193,4 @@ /obj/structure/flora/ausbushes/fullgrass/New() ..() - icon_state = "fullgrass_[rand(1, 3)]" \ No newline at end of file + icon_state = "fullgrass_[rand(1, 3)]" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index e3ae4353dd..5e0edbef0a 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -268,4 +268,4 @@ del(src) return else - return \ No newline at end of file + return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 304710b578..9bb1cec396 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -1,6 +1,6 @@ /obj/structure/grille - desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." name = "grille" + desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." icon = 'icons/obj/structures.dmi' icon_state = "grille" density = 1 @@ -189,4 +189,4 @@ visible_message("[user] [attack_verb] the [src]!") health -= damage spawn(1) healthcheck() - return 1 + return 1 diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 535b73d3b5..0b542dd2bb 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -299,4 +299,4 @@ desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." icon = 'icons/obj/vehicles.dmi' icon_state = "keys" - w_class = 1 \ No newline at end of file + w_class = 1 diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 40becb871f..f480cdd977 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -75,4 +75,4 @@ new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc) usr << "You remove the last piece of meat from the alien!" src.icon_state = "spike" - src.occupied = 0 \ No newline at end of file + src.occupied = 0 diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index cce8a064c0..fc57ac4f8e 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -67,4 +67,4 @@ add_fingerprint(user) /obj/structure/ladder/attackby(obj/item/weapon/W, mob/user as mob) - return attack_hand(user) \ No newline at end of file + return attack_hand(user) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 14377992bb..6bbb8cfa24 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -1,5 +1,5 @@ /obj/structure/lamarr - name = "Lab Cage" + name = "lab cage" icon = 'icons/obj/stationobjs.dmi' icon_state = "labcage1" desc = "A glass lab container for storing interesting creatures." @@ -98,4 +98,4 @@ gender = FEMALE /obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled - return \ No newline at end of file + return diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 672011cef9..a32af450d5 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -1,6 +1,6 @@ /obj/structure/lattice - desc = "A lightweight support lattice." name = "lattice" + desc = "A lightweight support lattice." icon = 'icons/obj/structures.dmi' icon_state = "latticefull" density = 0 diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index ff37b0bfb2..47d9f7289b 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -284,4 +284,3 @@ CheckHardness() playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) ..() - diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index b82a3495df..58e1a81b97 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -1,6 +1,6 @@ //wip wip wup /obj/structure/mirror - name = "SalonPro Nano-Mirror(TM)" + name = "\improper SalonPro Nano-Mirror(TM)" desc = "The leading technology in hair salon products, utilizing nano-machinery to style your hair just right." icon = 'icons/obj/watercloset.dmi' icon_state = "mirror" @@ -100,4 +100,4 @@ shatter() else user.visible_message("[user] hits [src] and bounces off!") - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index d64e2d6ade..06aae9557b 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -24,4 +24,4 @@ else reagents.trans_to(I, 5) user << "You wet [I] in [src]." - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) \ No newline at end of file + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index e1c8427ecf..0b0c063af2 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -388,4 +388,3 @@ else usr << "\red Access denied." return - diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 00946b8678..a219268d04 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -188,4 +188,4 @@ obj/structure/safe/meteorhit(obj/O as obj) /obj/structure/safe/floor/hide(var/intact) - invisibility = intact ? 101 : 0 \ No newline at end of file + invisibility = intact ? 101 : 0 diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 388dcf41b3..0b11d09fcc 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -141,12 +141,12 @@ icon_state = "goldenplaque" /obj/structure/sign/kiddieplaque - name = "AI developers plaque" + name = "\improper AI developers plaque" desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"" icon_state = "kiddieplaque" /obj/structure/sign/atmosplaque - name = "\improper FEA Atmospherics Division plaque" + name = "\improper FEA atmospherics division plaque" desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." icon_state = "atmosplaque" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 0e8e7d5850..16d84f6aad 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -175,4 +175,4 @@ icon_state = "officechair_white" /obj/structure/stool/bed/chair/office/dark - icon_state = "officechair_dark" \ No newline at end of file + icon_state = "officechair_dark" diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 0ed780ebdd..59a819b8b9 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -189,4 +189,4 @@ if(M == pulling) pulling = null usr.pulledby = null - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 924be30909..64ef0c8fad 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -1,24 +1,14 @@ -/* Tables and Racks - * Contains: - * Tables - * Wooden tables - * Reinforced tables - * Racks - */ +// Tables and racks. - -/* - * Tables - */ /obj/structure/table name = "table" desc = "A square piece of metal standing on four metal legs. It can not move." icon = 'icons/obj/structures.dmi' icon_state = "table" density = 1 - anchored = 1.0 + anchored = 1 layer = 2.8 - throwpass = 1 //You can throw objects over this, despite it's density.") + throwpass = 1 climbable = 1 breakable = 1 parts = /obj/item/weapon/table_parts @@ -26,6 +16,39 @@ var/flipped = 0 var/health = 100 +/obj/structure/table/woodentable + name = "wooden table" + desc = "Do not apply fire to this. Rumour says it burns easily." + icon_state = "wood_table" + parts = /obj/item/weapon/table_parts/wood + health = 50 + +/obj/structure/table/gamblingtable + name = "gambling table" + desc = "A curved wooden table with a thin carpet of green fabric." + icon_state = "gamble_table" + parts = /obj/item/weapon/table_parts/gambling + health = 50 + +/obj/structure/table/reinforced + icon_state = "reinf_table" + health = 200 + parts = /obj/item/weapon/table_parts/reinforced + +/obj/structure/table/rack + name = "rack" + desc = "Different from the Middle Ages version." + icon = 'icons/obj/objects.dmi' + icon_state = "rack" + health = 100 + parts = /obj/item/weapon/table_parts/rack + flipped = -1 //Cannot flip. + +/obj/structure/table/examine() + ..() + if(health > 100) + usr << "This one looks like it has been reinforced." + /obj/structure/table/proc/update_adjacent() for(var/direction in list(1,2,4,8,5,6,9,10)) if(locate(/obj/structure/table,get_step(src,direction))) @@ -45,14 +68,18 @@ ..() /obj/structure/table/update_icon() + + if(health > 100) + name = "reinforced [initial(name)]" + spawn(2) //So it properly updates when deleting - if(flipped) + if(flipped == 1) var/type = 0 var/tabledirs = 0 for(var/direction in list(turn(dir,90), turn(dir,-90)) ) var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction)) - if (T && T.flipped && T.dir == src.dir) + if (T && T.flipped == 1 && T.dir == src.dir) type++ tabledirs |= direction var/base = "table" @@ -100,7 +127,7 @@ continue if(!skip_sum) //means there is a window between the two tiles in this direction var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction)) - if(T && !T.flipped) + if(T && T.flipped == 0) // This should let us ignore racks for table icons/flipping. Should. if(direction <5) dir_sum += direction else @@ -265,7 +292,7 @@ return 1 if(locate(/obj/structure/table) in get_turf(mover)) return 1 - if (flipped) + if (flipped == 1) if (get_dir(loc, target) == dir) return !density else @@ -274,7 +301,13 @@ //checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. /obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) - var/turf/cover = flipped ? get_turf(src) : get_step(loc, get_dir(from, loc)) + var/turf/cover + if(flipped==1) + cover = get_turf(src) + else if(flipped==0) + cover = get_step(loc, get_dir(from, loc)) + if(!cover) + return 1 if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close return 1 if (get_turf(P.original) == cover) @@ -283,7 +316,7 @@ var/mob/M = P.original if (M.lying) chance += 20 //Lying down lets you catch less bullets - if(flipped) + if(flipped==1) if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets chance += 20 else @@ -302,7 +335,7 @@ /obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf) if(istype(O) && O.checkpass(PASSTABLE)) return 1 - if (flipped) + if (flipped==1) if (get_dir(loc, target) == dir) return !density else @@ -323,6 +356,8 @@ /obj/structure/table/attackby(obj/item/W as obj, mob/user as mob) if (!W) return + + // Handle harm intent grabbing/tabling. if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if (istype(G.affecting, /mob/living)) @@ -331,25 +366,56 @@ if(user.a_intent == "hurt") if (prob(15)) M.Weaken(5) M.apply_damage(8,def_zone = "head") - visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!") + visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!") playsound(src.loc, 'sound/weapons/tablehit1.ogg', 50, 1) else - user << "\red You need a better grip to do that!" + user << "You need a better grip to do that!" return else G.affecting.loc = src.loc G.affecting.Weaken(5) - visible_message("\red [G.assailant] puts [G.affecting] on \the [src].") + visible_message("[G.assailant] puts [G.affecting] on \the [src].") del(W) return + // Handle dissembly. if (istype(W, /obj/item/weapon/wrench)) - user << "\blue Now disassembling table" + if(health > 100) + user << "\The [src] is too well constructed to be collapsed. Weaken it first." + return + user << "You locate the bolts and begin disassembling \the [src]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user,50)) destroy() return + // Handle weakening. + if (istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.isOn()) + if(initial(health)>100) + if(WT.remove_fuel(0, user)) + if(src.health>100) + user << "You start weakening \the [src]..." + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(!do_after(user, 50) || !src || health<100 || !WT.isOn()) + return + user << "You have weakened \the [src]." + health -= 100 + else if(src.health <= 100) + user << "You start strengthening \the [src]..." + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(!do_after(user, 50) || !src || health > 100 || !WT.isOn()) + return + user << "You have strengthened \the [src]." + health += 100 + update_icon() + else + user << "\The [src] is too flimsy to be reinforced or weakened." + return + + + // Handle dismantling or placing things on the table from here on. if(isrobot(user)) return @@ -362,8 +428,7 @@ spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) playsound(src.loc, "sparks", 50, 1) - for(var/mob/O in viewers(user, 4)) - O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2) + user.visible_message("The [src] was sliced apart by [user]!") destroy() user.drop_item(src) @@ -373,14 +438,14 @@ var/obj/structure/table/T for(var/angle in list(-90,90)) T = locate() in get_step(src.loc,turn(direction,angle)) - if(T && !T.flipped) + if(T && T.flipped == 0) return 0 T = locate() in get_step(src.loc,direction) - if (!T || T.flipped) + if (!T || T.flipped == 1) return 1 if (istype(T,/obj/structure/table/reinforced/)) var/obj/structure/table/reinforced/R = T - if (R.status == 2) + if (R.health > 100) return 0 return T.straight_table_check(direction) @@ -393,7 +458,7 @@ if (!can_touch(usr) || ismouse(usr)) return - if(!flip(get_cardinal_dir(usr,src))) + if(flipped < 0 || !flip(get_cardinal_dir(usr,src))) usr << "It won't budge." return @@ -405,9 +470,15 @@ return /obj/structure/table/proc/unflipping_check(var/direction) + for(var/mob/M in oview(src,0)) return 0 + var/obj/occupied = turf_is_crowded() + if(occupied) + usr << "There's \a [occupied] in the way." + return 0 + var/list/L = list() if(direction) L.Add(direction) @@ -417,7 +488,7 @@ for(var/new_dir in L) var/obj/structure/table/T = locate() in get_step(src.loc,new_dir) if(T) - if(T.flipped && T.dir == src.dir && !T.unflipping_check(new_dir)) + if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir)) return 0 return 1 @@ -456,7 +527,7 @@ flags |= ON_BORDER for(var/D in list(turn(direction, 90), turn(direction, -90))) var/obj/structure/table/T = locate() in get_step(src,D) - if(T && !T.flipped) + if(T && T.flipped == 0) T.flip(direction) update_icon() update_adjacent() @@ -473,120 +544,15 @@ flags &= ~ON_BORDER for(var/D in list(turn(dir, 90), turn(dir, -90))) var/obj/structure/table/T = locate() in get_step(src.loc,D) - if(T && T.flipped && T.dir == src.dir) + if(T && T.flipped == 1 && T.dir == src.dir) T.unflip() update_icon() update_adjacent() return 1 -/* - * Wooden tables - */ -/obj/structure/table/woodentable - name = "wooden table" - desc = "Do not apply fire to this. Rumour says it burns easily." - icon_state = "wood_table" - parts = /obj/item/weapon/table_parts/wood - health = 50 -/* - * Gambling tables - */ -/obj/structure/table/gamblingtable - name = "gambling table" - desc = "A curved wooden table with a thin carpet of green fabric." - icon_state = "gamble_table" - parts = /obj/item/weapon/table_parts/gambling - health = 50 -/* - * Reinforced tables - */ -/obj/structure/table/reinforced - name = "reinforced table" - desc = "A version of the four legged table. It is stronger." - icon_state = "reinf_table" - health = 200 - var/status = 2 - parts = /obj/item/weapon/table_parts/reinforced - -/obj/structure/table/reinforced/flip(var/direction) - if (status == 2) - return 0 - else - return ..() - -/obj/structure/table/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - if(src.status == 2) - user << "\blue Now weakening the reinforced table" - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if (do_after(user, 50)) - if(!src || !WT.isOn()) return - user << "\blue Table weakened" - src.status = 1 - else - user << "\blue Now strengthening the reinforced table" - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if (do_after(user, 50)) - if(!src || !WT.isOn()) return - user << "\blue Table strengthened" - src.status = 2 - return - return - - if (istype(W, /obj/item/weapon/wrench)) - if(src.status == 2) - return - - ..() - -/* - * Racks - */ -/obj/structure/rack - name = "rack" - desc = "Different from the Middle Ages version." - icon = 'icons/obj/objects.dmi' - icon_state = "rack" - density = 1 - flags = FPRINT - anchored = 1.0 - throwpass = 1 //You can throw objects over this, despite it's density. - breakable = 1 - climbable = 1 - parts = /obj/item/weapon/rack_parts - -/obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!| - return 1 - if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 - else - return 0 - -/obj/structure/rack/MouseDrop_T(obj/O as obj, mob/user as mob) - if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) - return - if(isrobot(user)) - return - user.drop_item() - if (O.loc != src.loc) - step(O, get_dir(O, src)) +// No need to handle any of this, racks are not contiguous.. +/obj/structure/table/rack/update_icon() return - -/obj/structure/rack/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/weapon/rack_parts( src.loc ) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - del(src) - return - if(isrobot(user)) - return - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - user.drop_item() - if(W && W.loc) W.loc = src.loc +/obj/structure/table/rack/update_adjacent() return \ No newline at end of file diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 68ecbe0d87..4cea8bffc1 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -116,4 +116,4 @@ else usr << browse(null, "window=dispenser") return - return \ No newline at end of file + return diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 2a8d7719b2..bf80024a5e 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -49,4 +49,4 @@ pinned_target.loc = get_turf(user) user << "You take the target out of the stake." - pinned_target = null \ No newline at end of file + pinned_target = null diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index c115f230e2..a0855a35b0 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -10,9 +10,8 @@ obj/structure/windoor_assembly + name = "windoor assembly" icon = 'icons/obj/doors/windoor.dmi' - - name = "Windoor Assembly" icon_state = "l_windoor_assembly01" anchored = 0 density = 0 diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 349be88f5d..81ad18ee5d 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -4,6 +4,9 @@ #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock +//Supply packs are in /code/defines/obj/supplypacks.dm +//Computers are in /code/game/machinery/computer/supply.dm + var/datum/controller/supply/supply_controller = new() var/list/mechtoys = list( @@ -20,6 +23,9 @@ var/list/mechtoys = list( /obj/item/toy/prize/phazon ) +/obj/item/weapon/paper/manifest + name = "supply manifest" + /area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. name = "Supply Shuttle" icon_state = "shuttle3" @@ -34,8 +40,6 @@ var/list/mechtoys = list( lighting_use_dynamic = 0 requires_power = 0 -//SUPPLY PACKS MOVED TO /code/defines/obj/supplypacks.dm - /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY name = "\improper plastic flaps" desc = "Completely impassable - or are they?" @@ -75,7 +79,7 @@ var/list/mechtoys = list( del(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates - name = "\improper Airtight plastic flaps" + name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." New() //set the turf below the flaps to block air @@ -91,27 +95,6 @@ var/list/mechtoys = list( T.blocks_air = 0 ..() -/obj/machinery/computer/supplycomp - name = "Supply shuttle console" - icon = 'icons/obj/computer.dmi' - icon_state = "supply" - req_access = list(access_cargo) - circuit = "/obj/item/weapon/circuitboard/supplycomp" - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/hacked = 0 - var/can_order_contraband = 0 - var/last_viewed_group = "categories" - -/obj/machinery/computer/ordercomp - name = "Supply ordering console" - icon = 'icons/obj/computer.dmi' - icon_state = "request" - circuit = "/obj/item/weapon/circuitboard/ordercomp" - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/last_viewed_group = "categories" - /* /obj/effect/marker/supplymarker icon_state = "X" @@ -290,406 +273,3 @@ var/list/mechtoys = list( shoppinglist.Cut() return - -/obj/item/weapon/paper/manifest - name = "Supply Manifest" - -/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat - if(temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += {"
Supply shuttle
- Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_controller.points]
-
\nRequest items

- View approved orders

- View requests

- Close"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - -/obj/machinery/computer/ordercomp/Topic(href, href_list) - if(..()) - return - - if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) ) - usr.set_machine(src) - - if(href_list["order"]) - if(href_list["order"] == "categories") - //all_supply_groups - //Request what? - last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" - temp += "Main Menu


" - temp += "Select a category

" - for(var/supply_group_name in all_supply_groups ) - temp += "[supply_group_name]
" - else - last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" - temp += "Back to all categories


" - temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] - if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to - temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - - else if (href_list["doorder"]) - if(world.time < reqtime) - for(var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") - return - - //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] - if(!istype(P)) return - - var/timeout = world.time + 600 - var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) - if(world.time > timeout) return - if(!reason) return - - var/idname = "*None Provided*" - var/idrank = "*None Provided*" - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - idname = H.get_authentification_name() - idrank = H.get_assignment() - else if(issilicon(usr)) - idname = usr.real_name - - supply_controller.ordernum++ - var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) - reqform.name = "Requisition Form - [P.name]" - reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" - reqform.info += "CONTENTS:
" - reqform.info += P.manifest - reqform.info += "
" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" - - reqform.update_icon() //Fix for appearing blank when printed. - reqtime = (world.time + 5) % 1e5 - - //make our supply_order datum - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = P - O.orderedby = idname - supply_controller.requestlist += O - - temp = "Thanks for your request. The cargo team will process it as soon as possible.
" - temp += "
Back Main Menu" - - else if (href_list["vieworders"]) - temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) - var/datum/supply_order/SO = S - temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
" - temp += "
OK" - - else if (href_list["viewrequests"]) - temp = "Current requests:

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" - temp += "
OK" - - else if (href_list["mainmenu"]) - temp = null - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob) - if(!allowed(user)) - user << "\red Access Denied." - return - - if(..()) - return - user.set_machine(src) - post_signal("supply") - var/dat - if (temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += "
Supply shuttle
" - dat += "\nLocation: " - if (shuttle.has_arrive_time()) - dat += "In transit ([shuttle.eta_minutes()] Mins.)
" - else - if (shuttle.at_station()) - if (shuttle.docking_controller) - switch(shuttle.docking_controller.get_docking_status()) - if ("docked") dat += "Docked at station
" - if ("undocked") dat += "Undocked from station
" - if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch" : ""]
" - if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" - else - dat += "Station
" - - if (shuttle.can_launch()) - dat += "Send away" - else if (shuttle.can_cancel()) - dat += "Cancel launch" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - else - dat += "Away
" - if (shuttle.can_launch()) - dat += "Request supply shuttle" - else if (shuttle.can_cancel()) - dat += "Cancel request" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - - - dat += {"
\nSupply points: [supply_controller.points]
\n
- \nOrder items
\n
- \nView requests
\n
- \nView orders
\n
- \nClose"} - - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - -/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob) - if(istype(I,/obj/item/weapon/card/emag) && !hacked) - user << "\blue Special supplies unlocked." - hacked = 1 - return - else - ..() - return - -/obj/machinery/computer/supplycomp/Topic(href, href_list) - if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." - return - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (!shuttle) - world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." - return - if(..()) - return - - if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) ) - usr.set_machine(src) - - //Calling the shuttle - if(href_list["send"]) - if(shuttle.at_station()) - if (shuttle.forbidden_atoms_check()) - temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.

OK" - else - shuttle.launch(src) - temp = "Initiating launch sequence. \[Force Launch\]

OK" - else - shuttle.launch(src) - temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" - post_signal("supply") - - if (href_list["force_send"]) - shuttle.force_launch(src) - - if (href_list["cancel_send"]) - shuttle.cancel_launch(src) - - else if (href_list["order"]) - //if(!shuttle.idle()) return //this shouldn't be necessary it seems - if(href_list["order"] == "categories") - //all_supply_groups - //Request what? - last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" - temp += "Main Menu


" - temp += "Select a category

" - for(var/supply_group_name in all_supply_groups ) - temp += "[supply_group_name]
" - else - last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" - temp += "Back to all categories


" - temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] - if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to - temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - - /*temp = "Supply points: [supply_controller.points]


Request what?

" - - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] - if(N.hidden && !hacked) continue - if(N.contraband && !can_order_contraband) continue - temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - temp += "
OK"*/ - - else if (href_list["doorder"]) - if(world.time < reqtime) - for(var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") - return - - //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] - if(!istype(P)) return - - var/timeout = world.time + 600 - var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) - if(world.time > timeout) return - if(!reason) return - - var/idname = "*None Provided*" - var/idrank = "*None Provided*" - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - idname = H.get_authentification_name() - idrank = H.get_assignment() - else if(issilicon(usr)) - idname = usr.real_name - - supply_controller.ordernum++ - var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) - reqform.name = "Requisition Form - [P.name]" - reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" - reqform.info += "CONTENTS:
" - reqform.info += P.manifest - reqform.info += "
" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" - - reqform.update_icon() //Fix for appearing blank when printed. - reqtime = (world.time + 5) % 1e5 - - //make our supply_order datum - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = P - O.orderedby = idname - supply_controller.requestlist += O - - temp = "Order request placed.
" - temp += "
Back | Main Menu | Authorize Order" - - else if(href_list["confirmorder"]) - //Find the correct supply_order datum - var/ordernum = text2num(href_list["confirmorder"]) - var/datum/supply_order/O - var/datum/supply_packs/P - temp = "Invalid Request" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] - if(SO.ordernum == ordernum) - O = SO - P = O.object - if(supply_controller.points >= P.cost) - supply_controller.requestlist.Cut(i,i+1) - supply_controller.points -= P.cost - supply_controller.shoppinglist += O - temp = "Thanks for your order.
" - temp += "
Back Main Menu" - else - temp = "Not enough supply points.
" - temp += "
Back Main Menu" - break - - else if (href_list["vieworders"]) - temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" - temp += "
OK" -/* - else if (href_list["cancelorder"]) - var/datum/supply_order/remove_supply = href_list["cancelorder"] - supply_shuttle_shoppinglist -= remove_supply - supply_shuttle_points += remove_supply.object.cost - temp += "Canceled: [remove_supply.object.name]


" - - for(var/S in supply_shuttle_shoppinglist) - var/datum/supply_order/SO = S - temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] (Cancel)
" - temp += "
OK" -*/ - else if (href_list["viewrequests"]) - temp = "Current requests:

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove
" - - temp += "
Clear list" - temp += "
OK" - - else if (href_list["rreq"]) - var/ordernum = text2num(href_list["rreq"]) - temp = "Invalid Request.
" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] - if(SO.ordernum == ordernum) - supply_controller.requestlist.Cut(i,i+1) - temp = "Request removed.
" - break - temp += "
Back Main Menu" - - else if (href_list["clearreq"]) - supply_controller.requestlist.Cut() - temp = "List cleared.
" - temp += "
OK" - - else if (href_list["mainmenu"]) - temp = null - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/supplycomp/proc/post_signal(var/command) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - frequency.post_signal(src, status_signal) - - - - diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 42a63f26e5..8f66524076 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -79,66 +79,29 @@ noslip = 1 if (noslip) return // no slipping while sitting in a chair, plz - switch (src.wet) - if(1) - if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes - if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) - M.stop_pulling() - step(M, M.dir) - M << "\blue You slipped on the wet floor!" - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(5) - M.Weaken(3) - else - M.inertia_dir = 0 - return - else if(!istype(M, /mob/living/carbon/slime)) - if (M.m_intent == "run") - M.stop_pulling() - step(M, M.dir) - M << "\blue You slipped on the wet floor!" - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(5) - M.Weaken(3) - else - M.inertia_dir = 0 - return - if(2) //lube //can cause infinite loops - needs work - if(!istype(M, /mob/living/carbon/slime) && !M.buckled) - M.stop_pulling() + if(src.wet) + var/slip_dist = 1 + var/slip_stun = 6 + var/floor_type = "wet" + + switch(src.wet) + if(2) // Lube + floor_type = "slippery" + slip_dist = 4 + slip_stun = 10 + if(3) // Ice + floor_type = "icy" + slip_stun = 4 + + if(M.slip("the [floor_type] floor",slip_stun)) + for(var/i = 0;i 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling -// if(M==user) //temporary hack to stop runtimes. ~Carn -// user.stop_pulling() //but...fixed the root of the problem -// return //shoudn't be needed now, unless somebody fucks with pulling again. - - var/mob/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return + if(is_light_floor()) + if(user.canmove && !user.restrained()) + toggle_lightfloor_on() + update_icon() + return 1 + return 0 /turf/simulated/floor/proc/gets_drilled() return diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 610186a7b7..367c143c19 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -1,8 +1,8 @@ /turf/simulated/floor/airless icon_state = "floor" name = "airless floor" - oxygen = 0.01 - nitrogen = 0.01 + oxygen = 0 + nitrogen = 0 temperature = TCMB New() @@ -84,7 +84,7 @@ name = "vacuum floor" icon_state = "engine" oxygen = 0 - nitrogen = 0.001 + nitrogen = 0 temperature = TCMB /turf/simulated/floor/plating @@ -96,8 +96,8 @@ /turf/simulated/floor/plating/airless icon_state = "plating" name = "airless plating" - oxygen = 0.01 - nitrogen = 0.01 + oxygen = 0 + nitrogen = 0 temperature = TCMB New() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d8f91582b6..c206c42c82 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -7,6 +7,7 @@ var/damage = 0 var/damage_cap = 100 //Wall will break down to girders if damage reaches this point + var/armor = 0.5 // Damage is multiplied by this var/damage_overlay var/global/damage_overlays[8] @@ -22,6 +23,21 @@ var/walltype = "metal" +/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) + + // Tasers and stuff? No thanks. + if(Proj.damage_type == HALLOSS) + return + + // Emitter blasts are somewhat weaker as emitters have large rate of fire and don't require limited power cell to run + if(istype(Proj, /obj/item/projectile/beam/emitter)) + Proj.damage /= 4 + + take_damage(Proj.damage * armor) + return + + + /turf/simulated/wall/Del() for(var/obj/effect/E in src) if(E.name == "Wallrot") del E ..() @@ -101,7 +117,7 @@ /turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) if(adj_temp > max_temperature) - take_damage(rand(10, 20) * (adj_temp / max_temperature)) + take_damage(log(rand(0.9, 1.1) * (adj_temp - max_temperature))) return ..() @@ -225,28 +241,38 @@ ReplaceWithLattice() return 0 +/turf/simulated/wall + var/hulk_destroy_prob = 40 + var/hulk_take_damage = 1 + var/rotting_destroy_touch = 1 + var/rotting_touch_message = "\blue The wall crumbles under your touch." + //Interactions /turf/simulated/wall/attack_hand(mob/user as mob) if (HULK in user.mutations) - if (prob(40) || rotting) + if (prob(hulk_destroy_prob) || rotting) usr << text("\blue You smash through the wall.") usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) dismantle_wall(1) - return + return 1 else usr << text("\blue You punch the wall.") - take_damage(rand(25, 75)) - return + if(hulk_take_damage) + take_damage(rand(25, 75)) + return 1 if(rotting) - user << "\blue The wall crumbles under your touch." - dismantle_wall() - return + user << rotting_touch_message + if(rotting_destroy_touch) + dismantle_wall() + return 1 + + if(..()) return 1 user << "\blue You push the wall but nothing happens!" playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) src.add_fingerprint(user) - return + return 0 /turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 10c7a2cbce..610467915d 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -5,33 +5,19 @@ opacity = 1 density = 1 - damage_cap = 200 + damage_cap = 1000 max_temperature = 6000 + armor = 0.1 // Only 10% damage from gunfire, it's made from strong alloys and stuff. walltype = "rwall" var/d_state = 0 -/turf/simulated/wall/r_wall/attack_hand(mob/user as mob) - if (HULK in user.mutations) - if (prob(10) || rotting) - usr << text("\blue You smash through the wall.") - usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - dismantle_wall(1) - return - else - usr << text("\blue You punch the wall.") - return - - if(rotting) - user << "\blue This wall feels rather unstable." - return - - user << "\blue You push the wall but nothing happens!" - playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) - src.add_fingerprint(user) - return - +/turf/simulated/wall/r_wall + hulk_destroy_prob = 10 + hulk_take_damage = 0 + rotting_destroy_touch = 0 + rotting_touch_message = "\blue This wall feels rather unstable." /turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 0dcd0dd8a7..e1c6f3958c 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -1,9 +1,13 @@ +//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. +//(Exceptions: extended, sandbox and nuke) -Errorage +var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = 60) + /turf/space icon = 'icons/turf/space.dmi' name = "\proper space" icon_state = "0" - temperature = T0C + temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT // heat_capacity = 700000 No. @@ -11,23 +15,6 @@ if(!istype(src, /turf/space/transit)) icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" -/turf/space/attack_hand(mob/user as mob) - if ((user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored || !isturf(user.pulling.loc)) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - var/atom/movable/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return - /turf/space/attackby(obj/item/C as obj, mob/user as mob) if (istype(C, /obj/item/stack/rods)) @@ -111,7 +98,7 @@ var/safety = 1 while(move_to_z == src.z) - var/move_to_z_str = pickweight(accessable_z_levels) + var/move_to_z_str = pickweight(accessible_z_levels) move_to_z = text2num(move_to_z_str) safety++ if(safety > 10) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index d2cd7a18d5..6c9ee85751 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -37,6 +37,22 @@ /turf/ex_act(severity) return 0 +/turf/attack_hand(mob/user) + if(!(user.canmove) || user.restrained() || !(user.pulling)) + return 0 + if(user.pulling.anchored || !isturf(user.pulling.loc)) + return 0 + if(user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1) + return 0 + if(ismob(user.pulling)) + var/mob/M = user.pulling + var/atom/movable/t = M.pulling + M.stop_pulling() + step(user.pulling, get_dir(user.pulling.loc, src)) + M.start_pulling(t) + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return 1 /turf/bullet_act(var/obj/item/projectile/Proj) if(istype(Proj ,/obj/item/projectile/beam/pulse)) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 68ac083f15..bd6884c5d8 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -2,20 +2,3 @@ name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "Floor3" - -/turf/unsimulated/floor/attack_hand(var/mob/user as mob) - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored || !isturf(user.pulling.loc)) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - var/mob/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return \ No newline at end of file diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 83ec023b89..e1b6428712 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -20,14 +20,14 @@ return if(!holder) - if(!ooc_allowed) - src << "\red OOC is globally muted" + if(!config.ooc_allowed) + src << "OOC is globally muted." return - if(!dooc_allowed && (mob.stat == DEAD)) - usr << "\red OOC for dead mobs has been turned off." + if(!config.dooc_allowed && (mob.stat == DEAD)) + usr << "OOC for dead mobs has been turned off." return if(prefs.muted & MUTE_OOC) - src << "\red You cannot use OOC (muted)." + src << "You cannot use OOC (muted)." return if(handle_spam_prevention(msg,MUTE_OOC)) return @@ -85,14 +85,14 @@ return if(!holder) - if(!ooc_allowed) - src << "\red OOC is globally muted" + if(!config.ooc_allowed) + src << "OOC is globally muted." return - if(!dooc_allowed && (mob.stat == DEAD)) - usr << "\red OOC for dead mobs has been turned off." + if(!config.dooc_allowed && (mob.stat == DEAD)) + usr << "OOC for dead mobs has been turned off." return if(prefs.muted & MUTE_OOC) - src << "\red You cannot use OOC (muted)." + src << "You cannot use OOC (muted)." return if(handle_spam_prevention(msg,MUTE_OOC)) return @@ -106,7 +106,7 @@ var/mob/source = src.mob var/list/heard = get_mobs_in_view(7, source) - + var/display_name = source.key if(holder && holder.fakekey) display_name = holder.fakekey diff --git a/code/global.dm b/code/global.dm index 2319912b4d..19ddbbe289 100644 --- a/code/global.dm +++ b/code/global.dm @@ -1,16 +1,19 @@ //#define TESTING //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +//items that ask to be called every cycle var/global/obj/effect/datacore/data_core = null - - var/global/list/all_areas = list() var/global/list/machines = list() var/global/list/processing_objects = list() var/global/list/active_diseases = list() var/global/list/med_hud_users = list() //list of all entities using a medical HUD. var/global/list/sec_hud_users = list() //list of all entities using a security HUD. - //items that ask to be called every cycle + +//Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them. +var/list/restricted_camera_networks = list("thunder","ERT","NUKE") + +var/global/list/global_mutations = list() // list of hidden mutation things var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event @@ -24,9 +27,11 @@ var/global/list/global_map = null //4 - Derelict //3 - AI satellite //5 - empty space - - ////////////// + +//Noises made when hit while typing. +var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") + var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4","h5","h6","hr","pre", \ "big","small","font","i","u","b","s","sub","sup","tt","br","hr","ol","ul","li","caption","col", \ "table","td","th","tr") @@ -34,6 +39,8 @@ var/list/paper_blacklist = list("java","onblur","onchange","onclick","ondblclick "onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover", \ "onmouseup","onreset","onselect","onsubmit","onunload") +// The way blocks are handled badly needs a rewrite, this is horrible. +// Too much of a project to handle at the moment, TODO for later. var/BLINDBLOCK = 0 var/DEAFBLOCK = 0 var/HULKBLOCK = 0 @@ -74,33 +81,19 @@ var/blobevent = 0 /////////////// var/diary = null -var/diaryofmeanpeople = null var/href_logfile = null var/station_name = "NSS Exodus" var/game_version = "Baystation12" var/changelog_hash = "" var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) -var/datum/air_tunnel/air_tunnel1/SS13_airtunnel = null var/going = 1.0 var/master_mode = "extended"//"extended" var/secret_force_mode = "secret" // if this is anything but "secret", the secret rotation will forceably choose this mode -var/datum/engine_eject/engine_eject_control = null var/host = null -var/aliens_allowed = 0 -var/ooc_allowed = 1 -var/dsay_allowed = 1 -var/dooc_allowed = 1 -var/traitor_scaling = 1 -//var/goonsay_allowed = 0 -var/dna_ident = 1 -var/abandon_allowed = 1 -var/enter_allowed = 1 -var/guests_allowed = 1 var/shuttle_frozen = 0 var/shuttle_left = 0 -var/tinted_weldhelh = 1 var/list/jobMax = list() var/list/bombers = list( ) @@ -132,7 +125,7 @@ var/list/latejoin_cyborg = list() var/list/prisonwarp = list() //prisoners go to these var/list/holdingfacility = list() //captured people go here -var/list/xeno_spawn = list()//Aliens spawn at these. +var/list/xeno_spawn = list()//Aliens spawn at ahahthese. // list/mazewarp = list() var/list/tdome1 = list() var/list/tdome2 = list() @@ -180,59 +173,26 @@ var/datum/nanomanager/nanomanager = new() // event manager, the manager for events var/datum/event_manager/event_manager = new() -#define SPEED_OF_LIGHT 3e8 //not exact but hey! -#define SPEED_OF_LIGHT_SQ 9e+16 -#define FIRE_DAMAGE_MODIFIER 0.0215 //Higher values result in more external fire damage to the skin (default 0.0215) -#define AIR_DAMAGE_MODIFIER 2.025 //More means less damage from hot air scalding lungs, less = more damage. (default 2.025) -#define INFINITY 1.#INF -#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary. - // 1 will enable set background. 0 will disable set background. - - //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam -#define MAX_MESSAGE_LEN 1024 -#define MAX_PAPER_MESSAGE_LEN 3072 -#define MAX_BOOK_MESSAGE_LEN 9216 -#define MAX_NAME_LEN 26 - -#define shuttle_time_in_station 1800 // 3 minutes in the station -#define shuttle_time_to_arrive 6000 // 10 minutes to arrive - -#define EVENT_LEVEL_MUNDANE 1 -#define EVENT_LEVEL_MODERATE 2 -#define EVENT_LEVEL_MAJOR 3 - -// Suit sensor levels -#define SUIT_SENSOR_OFF 0 -#define SUIT_SENSOR_BINARY 1 -#define SUIT_SENSOR_VITAL 2 -#define SUIT_SENSOR_TRACKING 3 - - //away missions +//away missions var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to - // MySQL configuration - +// MySQL configuration var/sqladdress = "localhost" var/sqlport = "3306" var/sqldb = "tgstation" var/sqllogin = "root" var/sqlpass = "" - // Feedback gathering sql connection - +// Feedback gathering sql connection var/sqlfdbkdb = "test" var/sqlfdbklogin = "root" var/sqlfdbkpass = "" - var/sqllogging = 0 // Should we log deaths, population stats, etc? - - - // Forum MySQL configuration (for use with forum account/key authentication) - // These are all default values that will load should the forumdbconfig.txt - // file fail to read for whatever reason. - +// Forum MySQL configuration (for use with forum account/key authentication) +// These are all default values that will load should the forumdbconfig.txt +// file fail to read for whatever reason. var/forumsqladdress = "localhost" var/forumsqlport = "3306" var/forumsqldb = "tgstation" @@ -241,8 +201,8 @@ var/forumsqlpass = "" var/forum_activated_group = "2" var/forum_authenticated_group = "10" - // For FTP requests. (i.e. downloading runtime logs.) - // However it'd be ok to use for accessing attack logs and such too, which are even laggier. +// For FTP requests. (i.e. downloading runtime logs.) +// However it'd be ok to use for accessing attack logs and such too, which are even laggier. var/fileaccess_timer = 0 var/custom_event_msg = null @@ -256,3 +216,18 @@ var/DBConnection/dbcon_old = new() //Tgstation database (Old database) - See the //added for Xenoarchaeology, might be useful for other stuff var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") + +// Chemistry lists. +var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") //increase heart rate +var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") //decrease heart rate +var/list/heartstopper = list("potassium_phorochloride", "zombie_powder") //this stops the heart +var/list/cheartstopper = list("potassium_chloride") //this stops the heart when overdose is met -- c = conditional + +//Used by robots and robot preferences. +var/list/robot_module_types = list("Standard", "Engineering", "Construction", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security") + +// Some scary sounds. +var/static/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/items/Welder.ogg','sound/items/Welder2.ogg','sound/machines/airlock.ogg','sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') + +// Bomb cap! +var/max_explosion_range = 14 diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 59e4182ac5..f1005b59a5 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -5,7 +5,7 @@ world/IsBanned(key,address,computer_id) return ..() //Guest Checking - if(!guests_allowed && IsGuestKey(key)) + if(!config.guests_allowed && IsGuestKey(key)) log_access("Failed Login: [key] - Guests not allowed") message_admins("\blue Failed Login: [key] - Guests not allowed") return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 93b2824ebe..9c3acb9c78 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -169,17 +169,29 @@ var/global/floorIsLava = 0 Shade
"} - - if (M.client) - body += {"

+ body += {"

Other actions:
- Forcesay | + Forcesay + "} + if (M.client) + body += {" | Thunderdome 1 | Thunderdome 2 | Thunderdome Admin | Thunderdome Observer | "} + // language toggles + body += "

Languages:
" + var/f = 1 + for(var/k in all_languages) + var/datum/language/L = all_languages[k] + if(!f) body += " | " + else f = 0 + if(L in M.languages) + body += "[k]" + else + body += "[k]" body += {"
@@ -723,8 +735,8 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Globally Toggles OOC" set name="Toggle OOC" - ooc_allowed = !( ooc_allowed ) - if (ooc_allowed) + config.ooc_allowed = !(config.ooc_allowed) + if (config.ooc_allowed) world << "The OOC channel has been globally enabled!" else world << "The OOC channel has been globally disabled!" @@ -737,8 +749,8 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Globally Toggles DSAY" set name="Toggle DSAY" - dsay_allowed = !( dsay_allowed ) - if (dsay_allowed) + config.dsay_allowed = !(config.dsay_allowed) + if (config.dsay_allowed) world << "Deadchat has been globally enabled!" else world << "Deadchat has been globally disabled!" @@ -748,11 +760,10 @@ var/global/floorIsLava = 0 /datum/admins/proc/toggleoocdead() set category = "Server" - set desc="Toggle dis bitch" + set desc="Toggle Dead OOC." set name="Toggle Dead OOC" - dooc_allowed = !( dooc_allowed ) - - log_admin("[key_name(usr)] toggled OOC.") + config.dooc_allowed = !( config.dooc_allowed ) + log_admin("[key_name(usr)] toggled Dead OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1) feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -760,9 +771,9 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Toggle traitor scaling" set name="Toggle Traitor Scaling" - traitor_scaling = !traitor_scaling - log_admin("[key_name(usr)] toggled Traitor Scaling to [traitor_scaling].") - message_admins("[key_name_admin(usr)] toggled Traitor Scaling [traitor_scaling ? "on" : "off"].", 1) + config.traitor_scaling = !config.traitor_scaling + log_admin("[key_name(usr)] toggled Traitor Scaling to [config.traitor_scaling].") + message_admins("[key_name_admin(usr)] toggled Traitor Scaling [config.traitor_scaling ? "on" : "off"].", 1) feedback_add_details("admin_verb","TTS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/startnow() @@ -786,8 +797,8 @@ var/global/floorIsLava = 0 set category = "Server" set desc="People can't enter" set name="Toggle Entering" - enter_allowed = !( enter_allowed ) - if (!( enter_allowed )) + config.enter_allowed = !(config.enter_allowed) + if (!(config.enter_allowed)) world << "New players may no longer enter the game." else world << "New players may now enter the game." @@ -813,13 +824,13 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Respawn basically" set name="Toggle Respawn" - abandon_allowed = !( abandon_allowed ) - if (abandon_allowed) + config.abandon_allowed = !(config.abandon_allowed) + if(config.abandon_allowed) world << "You may now respawn." else world << "You may no longer respawn :(" - message_admins("\blue [key_name_admin(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].", 1) - log_admin("[key_name(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].") + message_admins("\blue [key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].", 1) + log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].") world.update_status() feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -827,18 +838,18 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Toggle alien mobs" set name="Toggle Aliens" - aliens_allowed = !aliens_allowed - log_admin("[key_name(usr)] toggled Aliens to [aliens_allowed].") - message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1) + config.aliens_allowed = !config.aliens_allowed + log_admin("[key_name(usr)] toggled Aliens to [config.aliens_allowed].") + message_admins("[key_name_admin(usr)] toggled Aliens [config.aliens_allowed ? "on" : "off"].", 1) feedback_add_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggle_space_ninja() set category = "Server" set desc="Toggle space ninjas spawning." set name="Toggle Space Ninjas" - toggle_space_ninja = !toggle_space_ninja - log_admin("[key_name(usr)] toggled Space Ninjas to [toggle_space_ninja].") - message_admins("[key_name_admin(usr)] toggled Space Ninjas [toggle_space_ninja ? "on" : "off"].", 1) + config.ninjas_allowed = !config.ninjas_allowed + log_admin("[key_name(usr)] toggled Space Ninjas to [config.ninjas_allowed].") + message_admins("[key_name_admin(usr)] toggled Space Ninjas [config.ninjas_allowed ? "on" : "off"].", 1) feedback_add_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/delay() @@ -1036,26 +1047,26 @@ var/global/floorIsLava = 0 set category = "Debug" set desc="Reduces view range when wearing welding helmets" set name="Toggle tinted welding helmes" - tinted_weldhelh = !( tinted_weldhelh ) - if (tinted_weldhelh) - world << "The tinted_weldhelh has been enabled!" + config.welder_vision = !( config.welder_vision ) + if (config.welder_vision) + world << "Reduced welder vision has been enabled!" else - world << "The tinted_weldhelh has been disabled!" - log_admin("[key_name(usr)] toggled tinted_weldhelh.") - message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.", 1) + world << "Reduced welder vision has been disabled!" + log_admin("[key_name(usr)] toggled welder vision.") + message_admins("[key_name_admin(usr)] toggled welder vision.", 1) feedback_add_details("admin_verb","TTWH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleguests() set category = "Server" set desc="Guests can't enter" set name="Toggle guests" - guests_allowed = !( guests_allowed ) - if (!( guests_allowed )) + config.guests_allowed = !(config.guests_allowed) + if (!(config.guests_allowed)) world << "Guests may no longer enter the game." else world << "Guests may now enter the game." - log_admin("[key_name(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.") - message_admins("\blue [key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.", 1) + log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") + message_admins("\blue [key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.", 1) feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/output_ai_laws() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 6c417a35e1..8a8ee1b50a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1496,14 +1496,11 @@ //open a browse window listing the contents instead var/data = "" var/obj/item/weapon/paper_bundle/B = fax - + for (var/page = 1, page <= B.amount, page++) var/obj/pageobj = B.contents[page] data += "Page [page] - [pageobj.name]
" - - world << data - world << "usr = [usr]" - + usr << browse(data, "window=[B.name]") else usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]" @@ -1511,9 +1508,9 @@ else if (href_list["AdminFaxViewPage"]) var/page = text2num(href_list["AdminFaxViewPage"]) var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"]) - + if (!bundle) return - + if (istype(bundle.contents[page], /obj/item/weapon/paper)) var/obj/item/weapon/paper/P = bundle.contents[page] P.show_content(src.owner, 1) @@ -1530,13 +1527,13 @@ if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null - + // Create the reply message var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( null ) //hopefully the null loc won't cause trouble for us P.name = "[command_name()]- [customname]" P.info = input P.update_icon() - + // Stamps var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') stampoverlay.icon_state = "paper_stamp-cent" @@ -1552,7 +1549,7 @@ message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(sender)]", 1) else src.owner << "\red Message reply failed." - + spawn(100) del(P) return @@ -2116,18 +2113,18 @@ if("togglebombcap") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BC") - switch(MAX_EXPLOSION_RANGE) - if(14) MAX_EXPLOSION_RANGE = 16 - if(16) MAX_EXPLOSION_RANGE = 20 - if(20) MAX_EXPLOSION_RANGE = 28 - if(28) MAX_EXPLOSION_RANGE = 56 - if(56) MAX_EXPLOSION_RANGE = 128 - if(128) MAX_EXPLOSION_RANGE = 14 - var/range_dev = MAX_EXPLOSION_RANGE *0.25 - var/range_high = MAX_EXPLOSION_RANGE *0.5 - var/range_low = MAX_EXPLOSION_RANGE + switch(max_explosion_range) + if(14) max_explosion_range = 16 + if(16) max_explosion_range = 20 + if(20) max_explosion_range = 28 + if(28) max_explosion_range = 56 + if(56) max_explosion_range = 128 + if(128) max_explosion_range = 14 + var/range_dev = max_explosion_range *0.25 + var/range_high = max_explosion_range *0.5 + var/range_low = max_explosion_range message_admins("\red [key_name_admin(usr)] changed the bomb cap to [range_dev], [range_high], [range_low]", 1) - log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EXPLOSION_RANGE]") + log_admin("[key_name_admin(usr)] changed the bomb cap to [max_explosion_range]") if("flicklights") feedback_inc("admin_secrets_fun_used",1) @@ -2231,7 +2228,7 @@ if("aliens") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","AL") - if(aliens_allowed) + if(config.aliens_allowed) new /datum/event/alien_infestation message_admins("[key_name_admin(usr)] has spawned aliens", 1) if("spiders") @@ -2251,7 +2248,7 @@ if("spaceninja") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","SN") - if(toggle_space_ninja) + if(config.ninjas_allowed) if(space_ninja_arrival())//If the ninja is actually spawned. They may not be depending on a few factors. message_admins("[key_name_admin(usr)] has sent in a space ninja", 1) if("carp") @@ -2757,6 +2754,24 @@ if(href_list["vsc"] == "default") vsc.SetDefault(usr) + else if(href_list["toglang"]) + if(check_rights(R_SPAWN)) + var/mob/M = locate(href_list["toglang"]) + if(!istype(M)) + usr << "[M] is illegal type, must be /mob!" + return + var/lang2toggle = href_list["lang"] + var/datum/language/L = all_languages[lang2toggle] + + if(L in M.languages) + if(!M.remove_language(lang2toggle)) + usr << "Failed to remove language '[lang2toggle]' from \the [M]!" + else + if(!M.add_language(lang2toggle)) + usr << "Failed to add language '[lang2toggle]' from \the [M]!" + + show_player_panel(M) + // player info stuff if(href_list["add_player_info"]) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 8695dc2f47..39a5fa778c 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -1,9 +1,18 @@ - +#define AHELP_ADMIN 1 +#define AHELP_MENTOR 2 +#define AHELP_DEV 3 //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE! var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as") -/client/verb/adminhelp(msg as null|text) +var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHELP_MENTOR,\ + "Admin - Rule/Gameplay issue" = AHELP_ADMIN,\ + "Dev - Bug report" = AHELP_DEV) + +/client/proc/adminhelp_admin(message) + adminhelp("Admin - Rule/Gameplay issue", message) + +/client/verb/adminhelp(selected_type in adminhelp_categories, msg as text) set category = "Admin" set name = "Adminhelp" @@ -24,12 +33,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell **/ - var/list/type = list ("Gameplay/Roleplay question", "Rule/Gameplay issue", "Bug report") - var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type - if(!selected_type) - return - if(!msg) - msg = input("Please enter your message:", "Admin Help", null, null) as text if(!msg || alert("The following message will be sent to staff that administers\n the '[selected_type]' category:\n\n[msg]\n", "Admin Help", "Ok", "Cancel") == "Cancel") return @@ -130,8 +133,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(X.is_afk()) admin_number_afk++ - switch(selected_type) - if("Gameplay/Roleplay question") + switch(adminhelp_categories[selected_type]) + if(AHELP_MENTOR) if(mentorholders.len) for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name if(X.prefs.toggles & SOUND_ADMINHELP) @@ -142,13 +145,13 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(X.prefs.toggles & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg - if("Rule/Gameplay issue") + if(AHELP_ADMIN) if(adminholders.len) for(var/client/X in adminholders) // Admins of course get everything in their helps if(X.prefs.toggles & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg - if("Bug report") + if(AHELP_DEV) if(debugholders.len) for(var/client/X in debugholders) if(R_ADMIN | R_MOD & X.holder.rights) // Admins get every button & special highlights in theirs @@ -183,3 +186,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]") feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return + +#undef AHELP_ADMIN +#undef AHELP_MENTOR +#undef AHELP_DEV \ No newline at end of file diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1c358c8cf4..0b3f82aaa1 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -96,7 +96,7 @@ if(sender) C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them else - adminhelp(reply) //sender has left, adminhelp instead + adminhelp_admin(reply) //sender has left, adminhelp instead return src << "" + create_text_tag("pm_out_alt", "PM", src) + " to [get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]: [msg]" C << "" + create_text_tag("pm_in", "", C) + " \[[recieve_pm_type] PM\] [get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]: [msg]" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 4a63323115..6d44bae161 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -367,9 +367,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that set category = "Server" set name = "Toggle Aliens" - aliens_allowed = !aliens_allowed - log_admin("[key_name(src)] has turned aliens [aliens_allowed ? "on" : "off"].") - message_admins("[key_name_admin(src)] has turned aliens [aliens_allowed ? "on" : "off"].", 0) + config.aliens_allowed = !config.aliens_allowed + log_admin("[key_name(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].") + message_admins("[key_name_admin(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].", 0) feedback_add_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_grantfullaccess(var/mob/M in mob_list) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index b89b4a67eb..8c48af6a45 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -275,7 +275,7 @@ var/list/forbidden_varedit_object_types = list( /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) if(!check_rights(R_VAREDIT)) return - var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state", "mutantrace") + var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state") for(var/p in forbidden_varedit_object_types) if( istype(O,p) ) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index e2c308bcb4..2513857f5f 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -511,7 +511,6 @@ client/proc/one_click_antag() new_vox.age = rand(12,20) new_vox.dna.ready_dna(new_vox) // Creates DNA. - new_vox.dna.mutantrace = "vox" new_vox.mind_initialize() new_vox.mind.assigned_role = "MODE" new_vox.mind.special_role = "Vox Raider" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 721becf039..8e0b6b6a65 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -525,6 +525,7 @@ Traitors and the like can also be revived with the previous role mostly intact. M.add_ion_law(input) for(var/mob/living/silicon/ai/O in mob_list) O << "\red " + input + "\red...LAWS UPDATED" + O.show_laws() log_admin("Admin [key_name(usr)] has added a new AI law - [input]") message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]", 1) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index a9a4f2cc25..82f7450981 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -211,11 +211,11 @@ return 1 -/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg) +/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking) if(a_right) - a_right.hear_talk(M,msg) + a_right.hear_talk(M,msg,verb,speaking) if(a_left) - a_left.hear_talk(M,msg) + a_left.hear_talk(M,msg,verb,speaking) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index ff4cb515cc..0be6799a43 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -23,14 +23,14 @@ var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID - var/mutantrace = "human" + var/species = "Human" /obj/effect/landmark/corpse/initialize() createCorpse() /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) - M.dna.mutantrace = mutantrace + M.set_species(species) M.real_name = src.name M.death(1) //Kills the new mob if(src.corpseuniform) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 4fa4db8b18..a8efe68418 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -110,7 +110,7 @@ if(byond_version < MIN_CLIENT_VERSION) //Out of date client. return null - if(!guests_allowed && IsGuestKey(key)) + if(!config.guests_allowed && IsGuestKey(key)) alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK") del(src) return diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 833d99f9fd..0531ecab98 100755 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -73,6 +73,7 @@ datum/preferences var/g_eyes = 0 //Eye color var/b_eyes = 0 //Eye color var/species = "Human" //Species datum to use. + var/species_preview //Used for the species selection window. var/language = "None" //Secondary language var/list/gear //Custom/fluff item loadout. @@ -138,7 +139,7 @@ datum/preferences if(load_character()) return gender = pick(MALE, FEMALE) - real_name = random_name(gender) + real_name = random_name(gender,species) gear = list() @@ -302,7 +303,7 @@ datum/preferences dat += "
" HTML += "" continue @@ -586,6 +589,70 @@ datum/preferences user << browse(HTML, "window=records;size=350x300") return +/datum/preferences/proc/SetSpecies(mob/user) + if(!species_preview || !(species_preview in all_species)) + species_preview = "Human" + var/datum/species/current_species = all_species[species_preview] + var/dat = "" + dat += "

[current_species.name] \[change\]


" + dat += "
Body " dat += "(®)" dat += "
" - dat += "Species: [species]
" + dat += "Species: [species]
" dat += "Secondary Language:
[language]
" dat += "Blood Type: [b_type]
" dat += "Skin Tone: [-s_tone + 35]/220
" @@ -507,6 +508,8 @@ datum/preferences HTML += " \[Yes]" else HTML += " \[No]" + if(job.alt_titles) //Blatantly cloned from a few lines down. + HTML += "
 \[[GetPlayerAltTitle(job)]\]
" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "
[current_species.blurb]" + if("preview" in icon_states(current_species.icobase)) + usr << browse_rsc(icon(current_species.icobase,"preview"), "species_preview_[current_species.name].png") + dat += "

" + dat += "Language: [current_species.language]
" + dat += "" + if(current_species.flags & CAN_JOIN) + dat += "
Often present on human stations." + if(current_species.flags & IS_WHITELISTED) + dat += "
Whitelist restricted." + if(current_species.flags & NO_BLOOD) + dat += "
Does not have blood." + if(current_species.flags & NO_BREATHE) + dat += "
Does not breathe." + if(current_species.flags & NO_SCAN) + dat += "
Does not have DNA." + if(current_species.flags & NO_PAIN) + dat += "
Does not feel pain." + if(current_species.flags & NO_SLIP) + dat += "
Has excellent traction." + if(current_species.flags & NO_POISON) + dat += "
Immune to most poisons." + if(current_species.flags & HAS_SKIN_TONE) + dat += "
Has a variety of skin tones." + if(current_species.flags & HAS_SKIN_COLOR) + dat += "
Has a variety of skin colours." + if(current_species.flags & HAS_EYE_COLOR) + dat += "
Has a variety of eye colours." + if(current_species.flags & IS_PLANT) + dat += "
Has a plantlike physiology." + if(current_species.flags & IS_SYNTHETIC) + dat += "
Is machine-based." + dat += "

" + + var/restricted = 0 + if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! + if(!(current_species.flags & CAN_JOIN)) + restricted = 2 + else if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species)) + restricted = 1 + + if(restricted) + if(restricted == 1) + dat += "You cannot play as this species.
If you wish to be whitelisted, you can make an application post on the forums.

" + else if(restricted == 2) + dat += "You cannot play as this species.
This species is not available for play as a station race..

" + if(!restricted || check_rights(R_ADMIN, 0)) + dat += "\[select\]" + dat += "
" + + user << browse(null, "window=preferences") + user << browse(dat, "window=species;size=700x400") + /datum/preferences/proc/SetAntagoptions(mob/user) if(uplinklocation == "" || !uplinklocation) uplinklocation = "PDA" @@ -1076,10 +1143,18 @@ datum/preferences break switch(href_list["task"]) + if("change") + if(href_list["preference"] == "species") + // Actual whitelist checks are handled elsewhere, this is just for accessing the preview window. + var/choice = input("Which species would you like to look at?") as null|anything in playable_species + if(!choice) return + species_preview = choice + SetSpecies(user) + if("random") switch(href_list["preference"]) if("name") - real_name = random_name(gender) + real_name = random_name(gender,species) if("age") age = rand(AGE_MIN, AGE_MAX) if("hair") @@ -1131,24 +1206,11 @@ datum/preferences var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null if(new_age) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) + if("species") - - var/list/new_species = list("Human") + user << browse(null, "window=species") var/prev_species = species - var/whitelisted = 0 - - if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! - for(var/S in whitelisted_species) - if(is_alien_whitelisted(user,S)) - new_species += S - whitelisted = 1 - if(!whitelisted) - alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") - else //Not using the whitelist? Aliens for everyone! - new_species = whitelisted_species - - species = input("Please select a species", "Character Generation", null) in new_species - + species = href_list["newspecies"] if(prev_species != species) //grab one of the valid hair styles for the newly chosen species var/list/valid_hairstyles = list() @@ -1551,7 +1613,7 @@ datum/preferences /datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0) if(be_random_name) - real_name = random_name(gender) + real_name = random_name(gender,species) if(config.humans_need_surnames) var/firstspace = findtext(real_name, " ") diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 663e3f785c..3e8c8e3a3c 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -815,10 +815,10 @@ var/global/list/gear_datums = list() sort_category = "misc" cost = 2 -/datum/gear/combitool +/*/datum/gear/combitool display_name = "combi-tool" path = /obj/item/weapon/combitool - cost = 3 + cost = 3*/ // Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use // the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset. diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index e86e616b5a..77a47b59e8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -189,7 +189,7 @@ metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) - if(isnull(species) || !(species in whitelisted_species)) + if(isnull(species) || !(species in playable_species)) species = "Human" if(isnull(language)) language = "None" diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm index 78adae0af9..c30e1ea48b 100644 --- a/code/modules/clothing/masks/voice.dm +++ b/code/modules/clothing/masks/voice.dm @@ -10,13 +10,22 @@ var/obj/item/voice_changer/changer origin_tech = "syndicate=4" +/obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer() + set category = "Object" + set src in usr + + changer.active = !changer.active + usr << "You [changer.active ? "enable" : "disable"] the voice-changing module in \the [src]." + +/obj/item/clothing/mask/gas/voice/verb/Set_Voice(name as text) + set category = "Object" + set src in usr + + var/voice = sanitize(copytext(name,1,MAX_MESSAGE_LEN)) + if(!voice || !length(voice)) return + changer.voice = voice + usr << "You are now mimicking [changer.voice]." + /obj/item/clothing/mask/gas/voice/New() ..() changer = new(src) - -/obj/item/clothing/mask/gas/voice/space_ninja - name = "ninja mask" - desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement." - icon_state = "s-ninja" - item_state = "s-ninja_mask" - siemens_coefficient = 0.2 \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 5a8063fd82..619faa0a7e 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -269,7 +269,7 @@ if(!raw_choice) return 0 voice_holder.voice = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN)) - usr << "You are now mimicking [voice_holder.voice]." + usr << "You are now mimicking [voice_holder.voice]." return 1 /obj/item/rig_module/maneuvering_jets diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 5f32580ad6..196d3d5d76 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -555,7 +555,6 @@ return if(!istype(wearer) || !wearer.back == src) - H << "The hardsuit is not being worn." return var/obj/item/check_slot diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 5e37fd240f..f34c9f00c3 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -24,8 +24,8 @@ pockets.emp_act(severity) ..() -/obj/item/clothing/suit/storage/hear_talk(mob/M, var/msg) - pockets.hear_talk(M, msg) +/obj/item/clothing/suit/storage/hear_talk(mob/M, var/msg, verb, datum/language/speaking) + pockets.hear_talk(M, msg, verb, speaking) ..() //Jackets with buttons, used for labcoats, IA jackets, First Responder jackets, and brown jackets. diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 87e784c338..0fc9b5447a 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -14,8 +14,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, - /obj/item/clothing/under/golem, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. + var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. for(var/U in typesof(/obj/item/clothing/under)-blocked) var/obj/item/clothing/under/V = new U src.clothing_choices[V.name] = U @@ -67,8 +66,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/head/chameleon, - /obj/item/clothing/head/space/golem, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. + var/blocked = list(/obj/item/clothing/head/chameleon,/obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. for(var/U in typesof(/obj/item/clothing/head)-blocked) var/obj/item/clothing/head/V = new U src.clothing_choices[V.name] = U @@ -119,8 +117,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/suit/chameleon, - /obj/item/clothing/suit/golem, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, + var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, /obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits. for(var/U in typesof(/obj/item/clothing/suit)-blocked) var/obj/item/clothing/suit/V = new U @@ -172,8 +169,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/shoes/chameleon, - /obj/item/clothing/shoes/golem, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. + var/blocked = list(/obj/item/clothing/shoes/chameleon, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. for(var/U in typesof(/obj/item/clothing/shoes)-blocked) var/obj/item/clothing/shoes/V = new U src.clothing_choices[V.name] = U diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 51290cf777..b70df2c84b 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -347,8 +347,8 @@ hold.emp_act(severity) ..() -/obj/item/clothing/tie/storage/hear_talk(mob/M, var/msg) - hold.hear_talk(M, msg) +/obj/item/clothing/tie/storage/hear_talk(mob/M, var/msg, verb, datum/language/speaking) + hold.hear_talk(M, msg, verb, speaking) ..() /obj/item/clothing/tie/storage/attack_self(mob/user as mob) diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index e9134ea709..408c85900e 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -38,12 +38,12 @@ return total_weight /datum/event_meta/alien/get_weight(var/list/active_with_role) - if(aliens_allowed) + if(config.aliens_allowed) return ..(active_with_role) return 0 /datum/event_meta/ninja/get_weight(var/list/active_with_role) - if(toggle_space_ninja) + if(config.ninjas_allowed) return ..(active_with_role) return 0 diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm index e24fd00e8a..07cebea073 100644 --- a/code/modules/events/event_dynamic.dm +++ b/code/modules/events/event_dynamic.dm @@ -89,9 +89,9 @@ var/list/event_last_fired = list() if(active_with_role["Security"] > 0) if(!sent_spiders_to_station) possibleEvents[/datum/event/spider_infestation] = max(active_with_role["Security"], 5) + 5 - if(aliens_allowed && !sent_aliens_to_station) + if(config.aliens_allowed && !sent_aliens_to_station) possibleEvents[/datum/event/alien_infestation] = max(active_with_role["Security"], 5) + 2.5 - if(!sent_ninja_to_station && toggle_space_ninja) + if(!sent_ninja_to_station && config.ninjas_allowed) possibleEvents[/datum/event/space_ninja] = max(active_with_role["Security"], 5) for(var/event_type in event_last_fired) if(possibleEvents[event_type]) diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index c880955817..30476c69db 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -76,6 +76,7 @@ target << "\red You have detected a change in your laws information:" target << law target.add_ion_law(law) + target.show_laws() if(message_servers) for (var/obj/machinery/message_server/MS in message_servers) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index b70697504c..87617d95ce 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -80,28 +80,6 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal -/* what is this -/datum/recipe/human - //invalid recipe - make_food(var/obj/container as obj) - var/human_name - var/human_job - for (var/obj/item/weapon/reagent_containers/food/snacks/meat/human/HM in container) - if (!HM.subjectname) - continue - human_name = HM.subjectname - human_job = HM.subjectjob - break - var/lastname_index = findtext(human_name, " ") - if (lastname_index) - human_name = copytext(human_name,lastname_index+1) - - var/obj/item/weapon/reagent_containers/food/snacks/human/HB = ..(container) - HB.name = human_name+HB.name - HB.job = human_job - return HB -*/ - /datum/recipe/human/burger items = list( /obj/item/weapon/reagent_containers/food/snacks/meat/human, @@ -109,15 +87,6 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/human/burger -/* Duplicated by plainburger -/datum/recipe/monkeyburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger -*/ - /datum/recipe/plainburger items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 87cd6079fc..328e1a020e 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -18,7 +18,7 @@ var/datum/seed/grown_seed var/datum/reagents/grown_reagents - if(istype(target,/obj/structure/rack) || istype(target,/obj/structure/table)) + if(istype(target,/obj/structure/table)) return ..() else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown)) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 19d3a2e32d..ff159ff122 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -68,80 +68,80 @@ var/excavation_amount = 100 - hammer - name = "sledgehammer" - //icon_state = "sledgehammer" Waiting on sprite - desc = "A mining hammer made of reinforced metal. You feel like smashing your boss in the face with this." +/obj/item/weapon/pickaxe/hammer + name = "sledgehammer" + //icon_state = "sledgehammer" Waiting on sprite + desc = "A mining hammer made of reinforced metal. You feel like smashing your boss in the face with this." - silver - name = "silver pickaxe" - icon_state = "spickaxe" - item_state = "spickaxe" - digspeed = 30 - origin_tech = "materials=3" - desc = "This makes no metallurgic sense." +/obj/item/weapon/pickaxe/silver + name = "silver pickaxe" + icon_state = "spickaxe" + item_state = "spickaxe" + digspeed = 30 + origin_tech = "materials=3" + desc = "This makes no metallurgic sense." - drill - name = "mining drill" // Can dig sand as well! - icon_state = "handdrill" - item_state = "jackhammer" - digspeed = 30 - origin_tech = "materials=2;powerstorage=3;engineering=2" - desc = "Yours is the drill that will pierce through the rock walls." - drill_verb = "drilling" +/obj/item/weapon/pickaxe/drill + name = "mining drill" // Can dig sand as well! + icon_state = "handdrill" + item_state = "jackhammer" + digspeed = 30 + origin_tech = "materials=2;powerstorage=3;engineering=2" + desc = "Yours is the drill that will pierce through the rock walls." + drill_verb = "drilling" - jackhammer - name = "sonic jackhammer" - icon_state = "jackhammer" - item_state = "jackhammer" - digspeed = 20 //faster than drill, but cannot dig - origin_tech = "materials=3;powerstorage=2;engineering=2" - desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." - drill_verb = "hammering" +/obj/item/weapon/pickaxe/jackhammer + name = "sonic jackhammer" + icon_state = "jackhammer" + item_state = "jackhammer" + digspeed = 20 //faster than drill, but cannot dig + origin_tech = "materials=3;powerstorage=2;engineering=2" + desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." + drill_verb = "hammering" - gold - name = "golden pickaxe" - icon_state = "gpickaxe" - item_state = "gpickaxe" - digspeed = 20 - origin_tech = "materials=4" - desc = "This makes no metallurgic sense." +/obj/item/weapon/pickaxe/gold + name = "golden pickaxe" + icon_state = "gpickaxe" + item_state = "gpickaxe" + digspeed = 20 + origin_tech = "materials=4" + desc = "This makes no metallurgic sense." - plasmacutter - name = "plasma cutter" - icon_state = "plasmacutter" - item_state = "gun" - w_class = 3.0 //it is smaller than the pickaxe - damtype = "fire" - digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire - origin_tech = "materials=4;phorontech=3;engineering=3" - desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff." - drill_verb = "cutting" +/obj/item/weapon/pickaxe/plasmacutter + name = "plasma cutter" + icon_state = "plasmacutter" + item_state = "gun" + w_class = 3.0 //it is smaller than the pickaxe + damtype = "fire" + digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire + origin_tech = "materials=4;phorontech=3;engineering=3" + desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff." + drill_verb = "cutting" - diamond - name = "diamond pickaxe" - icon_state = "dpickaxe" - item_state = "dpickaxe" - digspeed = 10 - origin_tech = "materials=6;engineering=4" - desc = "A pickaxe with a diamond pick head, this is just like minecraft." +/obj/item/weapon/pickaxe/diamond + name = "diamond pickaxe" + icon_state = "dpickaxe" + item_state = "dpickaxe" + digspeed = 10 + origin_tech = "materials=6;engineering=4" + desc = "A pickaxe with a diamond pick head, this is just like minecraft." - diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! - name = "diamond mining drill" - icon_state = "diamonddrill" - item_state = "jackhammer" - digspeed = 5 //Digs through walls, girders, and can dig up sand - origin_tech = "materials=6;powerstorage=4;engineering=5" - desc = "Yours is the drill that will pierce the heavens!" - drill_verb = "drilling" +/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! + name = "diamond mining drill" + icon_state = "diamonddrill" + item_state = "jackhammer" + digspeed = 5 //Digs through walls, girders, and can dig up sand + origin_tech = "materials=6;powerstorage=4;engineering=5" + desc = "Yours is the drill that will pierce the heavens!" + drill_verb = "drilling" - borgdrill - name = "cyborg mining drill" - icon_state = "diamonddrill" - item_state = "jackhammer" - digspeed = 15 - desc = "" - drill_verb = "drilling" +/obj/item/weapon/pickaxe/borgdrill + name = "cyborg mining drill" + icon_state = "diamonddrill" + item_state = "jackhammer" + digspeed = 15 + desc = "" + drill_verb = "drilling" /*****************************Shovel********************************/ diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index c556990e81..095fe8045f 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -14,6 +14,7 @@ var/mineral/mineral var/mined_ore = 0 var/last_act = 0 + var/emitter_blasts_taken = 0 // EMITTER MINING! Muhehe. var/datum/geosample/geologic_data var/excavation_level = 0 @@ -52,6 +53,16 @@ mined_ore = 2 //some of the stuff gets blown up GetDrilled() +/turf/simulated/mineral/bullet_act(var/obj/item/projectile/Proj) + + // Emitter blasts + if(istype(Proj, /obj/item/projectile/beam/emitter)) + emitter_blasts_taken++ + + if(emitter_blasts_taken > 2) // 3 blasts per tile + mined_ore = 1 + GetDrilled() + /turf/simulated/mineral/Bumped(AM) . = ..() if(istype(AM,/mob/living/carbon/human)) @@ -379,9 +390,9 @@ name = "asteroid" icon = 'icons/turf/floors.dmi' icon_state = "asteroid" - oxygen = 0.01 - nitrogen = 0.01 - temperature = T0C + oxygen = 0 + nitrogen = 0 + temperature = TCMB icon_plating = "asteroid" var/dug = 0 //0 = has not yet been dug, 1 = has already been dug var/overlay_detail diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 54f5583df2..362d3827ba 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -228,11 +228,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << "You have no body." return if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients - usr << "Another consciousness is in your body...It is resisting you." + usr << "Another consciousness is in your body... it is resisting you." return - if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). - var/obj/effect/rune/R = locate() in mind.current.loc //whilst corpse is alive, we can only reenter the body if it's on the rune - if(!(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"])) //astral journeying rune + if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). + var/found_rune + for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune + if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune. + found_rune = 1 + break + if(!found_rune) usr << "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you." return mind.current.ajourn=0 diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index ab9c64eebf..3d96e3d9c0 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -52,7 +52,7 @@ if(stat == DEAD) return 0 - if(!gibbed) + if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it. src.visible_message("\The [src.name] [deathmessage]") stat = DEAD diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index c6171b225b..8c16691dc6 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -24,6 +24,8 @@ if (message) log_emote("[name]/[key] : [message]") + var/list/seeing_obj = list() //For objs that need to see emotes. You can use see_emote(), which is based off of hear_talk() + //Hearing gasp and such every five seconds is not good emotes were not global for a reason. // Maybe some people are okay with that. @@ -37,10 +39,21 @@ if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) M.show_message(message) + for(var/I in view(world.view, get_turf(usr))) //get_turf is needed to stop weirdness with x-ray. + if(istype(I, /mob/)) + var/mob/M = I + for(var/obj/O in M.contents) + seeing_obj |= O + else if(istype(I, /obj/)) + var/obj/O = I + seeing_obj |= O // Type 1 (Visual) emotes are sent to anyone in view of the item if (m_type & 1) - for (var/mob/O in viewers(src, null)) + //for (var/mob/O in viewers(src, null)) + for (var/mob/O in viewers(get_turf(src), null)) //This may break people with x-ray being able to see emotes across walls, + //but this saves many headaches down the road, involving mechs and pAIs. + //x-ray is so rare these days anyways. if(O.status_flags & PASSEMOTES) @@ -52,8 +65,13 @@ O.show_message(message, m_type) + for(var/obj/O in seeing_obj) + spawn(0) + if(O) //It's possible that it could be deleted in the meantime. + O.see_emote(src, message, 1) + // Type 2 (Audible) emotes are sent to anyone in hear range - // of the *LOCATION* -- this is important for pAIs to be heard + // of the *LOCATION* -- this is important for AIs/pAIs to be heard else if (m_type & 2) for (var/mob/O in hearers(get_turf(src), null)) @@ -67,19 +85,24 @@ O.show_message(message, m_type) + for(var/obj/O in seeing_obj) + spawn(0) + if(O) //It's possible that it could be deleted in the meantime. + O.see_emote(src, message, 2) + /mob/proc/emote_dead(var/message) if(client.prefs.muted & MUTE_DEADCHAT) - src << "\red You cannot send deadchat emotes (muted)." + src << "You cannot send deadchat emotes (muted)." return if(!(client.prefs.toggles & CHAT_DEAD)) - src << "\red You have deadchat muted." + src << "You have deadchat muted." return if(!src.client.holder) - if(!dsay_allowed) - src << "\red Deadchat is globally muted" + if(!config.dsay_allowed) + src << "Deadchat is globally muted." return diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index c27823adbb..c238aef026 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -25,22 +25,21 @@ hear_sleep(message) return - var/style = "body" - //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if (language && (language.flags & NONVERBAL)) if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) message = stars(message) - if(!say_understands(speaker,language)) - if(istype(speaker,/mob/living/simple_animal)) - var/mob/living/simple_animal/S = speaker - message = pick(S.speak) - else - message = stars(message) - - if(language) - style = language.colour + if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages + if(!say_understands(speaker,language)) + if(istype(speaker,/mob/living/simple_animal)) + var/mob/living/simple_animal/S = speaker + message = pick(S.speak) + else + if(language) + message = language.scramble(message) + else + message = stars(message) var/speaker_name = speaker.name if(istype(speaker, /mob/living/carbon/human)) @@ -61,12 +60,16 @@ message = "[message]" if(sdisabilities & DEAF || ear_deaf) - if(speaker == src) - src << "You cannot hear yourself speak!" - else - src << "[speaker_name][alt_name] talks but you cannot hear \him." + if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set + if(speaker == src) + src << "You cannot hear yourself speak!" + else + src << "[speaker_name][alt_name] talks but you cannot hear \him." else - src << "[speaker_name][alt_name] [track][verb], \"[message]\"" + if(language) + src << "[speaker_name][alt_name] [track][language.format_message(message, verb)]" + else + src << "[speaker_name][alt_name] [track][verb], \"[message]\"" if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) var/turf/source = speaker? get_turf(speaker) : get_turf(src) src.playsound_local(source, speech_sound, sound_vol, 1) @@ -83,29 +86,28 @@ var/track = null - var/style = "body" - //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if (language && (language.flags & NONVERBAL)) if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) message = stars(message) - if(!say_understands(speaker,language)) - if(istype(speaker,/mob/living/simple_animal)) - var/mob/living/simple_animal/S = speaker - if(S.speak && S.speak.len) - message = pick(S.speak) + if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages + if(!say_understands(speaker,language)) + if(istype(speaker,/mob/living/simple_animal)) + var/mob/living/simple_animal/S = speaker + if(S.speak && S.speak.len) + message = pick(S.speak) + else + return else - return - else + if(language) + message = language.scramble(language) + else + message = stars(message) + + if(hard_to_hear) message = stars(message) - if(language) - style = language.colour - - if(hard_to_hear) - message = stars(message) - var/speaker_name = speaker.name if(vname) @@ -165,13 +167,18 @@ speaker_name = "[speaker.real_name] ([speaker_name])" track = "[speaker_name] (follow)" + var/formatted + if(language) + formatted = language.format_message_radio(message, verb) + else + formatted = "[verb], \"[message]\"" if(sdisabilities & DEAF || ear_deaf) if(prob(20)) src << "You feel your headset vibrate but can hear nothing from it!" else if(track) - src << "[part_a][track][part_b][verb], \"[message]\"" + src << "[part_a][track][part_b][formatted]" else - src << "[part_a][speaker_name][part_b][verb], \"[message]\"" + src << "[part_a][speaker_name][part_b][formatted]" /mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/language/language, var/mob/speaker = null) if(!client) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index b3ac986487..10809d9db5 100755 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -10,28 +10,79 @@ var/exclaim_verb = "exclaims" // Used when sentence ends in a ! var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead. var/signlang_verb = list() // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags - var/colour = "body" // CSS style to use for strings in this language. + var/colour = "body" // CSS style to use for strings in this language. var/key = "x" // Character used to speak in language eg. :o for Unathi. var/flags = 0 // Various language flags. var/native // If set, non-native speakers will have trouble speaking. + var/list/syllables // Used when scrambling text for a non-speaker. + var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string. + +/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4) + if(!syllables || !syllables.len) + if(gender==FEMALE) + return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + else + return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + + var/full_name = "" + var/new_name = "" + + for(var/i = 0;i0;x--) + new_name += pick(syllables) + full_name += " [capitalize(lowertext(new_name))]" + + return "[trim(full_name)]" + +/datum/language/proc/scramble(var/input) + + if(!syllables || !syllables.len) + return stars(input) + + var/input_size = length(input) + var/scrambled_text = "" + var/capitalize = 1 + + while(length(scrambled_text) < input_size) + var/next = pick(syllables) + if(capitalize) + next = capitalize(next) + capitalize = 0 + scrambled_text += next + var/chance = rand(100) + if(chance <= 5) + scrambled_text += ". " + capitalize = 1 + else if(chance > 5 && chance <= space_chance) + scrambled_text += " " + + scrambled_text = trim(scrambled_text) + var/ending = copytext(scrambled_text, length(scrambled_text)) + if(ending == ".") + scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) + scrambled_text += copytext(input, length(input)) + return scrambled_text + +/datum/language/proc/format_message(message, verb) + return "[verb], \"[capitalize(message)]\"" + +/datum/language/proc/format_message_radio(message, verb) + return "[verb], \"[capitalize(message)]\"" + +/datum/language/proc/get_talkinto_msg_range(message) + // if you yell, you'll be heard from two tiles over instead of one + return (copytext(message, length(message)) == "!") ? 2 : 1 /datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - log_say("[key_name(speaker)] : ([name]) [message]") + if(!speaker_mask) speaker_mask = speaker.name + var/msg = "[name], [speaker_mask] [format_message(message, get_spoken_verb(message))]" + for(var/mob/player in player_list) - - var/understood = 0 - - if(istype(player,/mob/dead)) - understood = 1 - else if((src in player.languages) && check_special_condition(player)) - understood = 1 - - if(understood) - if(!speaker_mask) speaker_mask = speaker.name - var/msg = "[name], [speaker_mask] [speech_verb], \"[message]\"" - player << "[msg]" + if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player))) + player << msg /datum/language/proc/check_special_condition(var/mob/other) return 1 @@ -44,6 +95,23 @@ return ask_verb return speech_verb +// Noise "language", for audible emotes. +/datum/language/noise + name = "Noise" + desc = "Noises" + key = "" + flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG + +/datum/language/noise/format_message(message, verb) + return "[message]" + +/datum/language/noise/format_message_radio(message, verb) + return "[message]" + +/datum/language/noise/get_talkinto_msg_range(message) + // if you make a loud noise (screams etc), you'll be heard from 4 tiles over instead of two + return (copytext(message, length(message)) == "!") ? 4 : 2 + /datum/language/unathi name = "Sinta'unathi" desc = "The common language of Moghes, composed of sibilant hisses and rattles. Spoken natively by Unathi." @@ -53,6 +121,14 @@ colour = "soghun" key = "o" flags = WHITELISTED + syllables = list("ss","ss","ss","ss","skak","seeki","resh","las","esi","kor","sh") + +/datum/language/unathi/get_random_name() + + var/new_name = ..() + while(findtextEx(new_name,"sss",1,null)) + new_name = replacetext(new_name, "sss", "ss") + return capitalize(new_name) /datum/language/tajaran name = "Siik'tajr" @@ -63,6 +139,19 @@ colour = "tajaran" key = "j" flags = WHITELISTED + syllables = list("rr","rr","tajr","kir","raj","kii","mir","kra","ahk","nal","vah","khaz","jri","ran","darr", \ + "mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r", \ + "ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", \ + "hal","ket","jurl","mah","tul","cresh","azu","ragh") + +/datum/language/tajaran/get_random_name(var/gender) + + var/new_name = ..(gender,1) + if(prob(80)) + new_name += " [pick(list("Hadii","Kaytam","Zhan-Khazan","Hharar","Njarir'Akhan"))]" + else + new_name += ..(gender,1) + return new_name /datum/language/skrell name = "Skrellian" @@ -73,6 +162,7 @@ colour = "skrell" key = "k" flags = WHITELISTED + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") /datum/language/vox name = "Vox-pidgin" @@ -82,7 +172,12 @@ exclaim_verb = "SHRIEKS" colour = "vox" key = "5" - flags = RESTRICTED + flags = WHITELISTED + syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \ + "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") + +/datum/language/vox/get_random_name() + return ..(FEMALE,1,6) /datum/language/diona name = "Rootspeak" @@ -93,6 +188,12 @@ colour = "soghun" key = "q" flags = RESTRICTED + syllables = list("hs","zt","kr","st","sh") + +/datum/language/diona/get_random_name() + var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]" + new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]" + return new_name /datum/language/common name = "Galactic Common" @@ -101,6 +202,7 @@ whisper_verb = "whispers" key = "0" flags = RESTRICTED + syllables = list("blah","blah","blah","bleh","meh","neh","nah","wah") //TODO flag certain languages to use the mob-type specific say_quote and then get rid of these. /datum/language/common/get_spoken_verb(var/msg_end) @@ -116,9 +218,10 @@ desc = "A bastardized hybrid of informal English and elements of Mandarin Chinese; the common language of the Sol system." speech_verb = "says" whisper_verb = "whispers" - colour = "rough" + colour = "solcom" key = "1" flags = RESTRICTED + syllables = list("tao","shi","tzu","yi","com","be","is","i","op","vi","ed","lec","mo","cle","te","dis","e") /datum/language/human/get_spoken_verb(var/msg_end) switch(msg_end) @@ -135,6 +238,15 @@ speech_verb = "enunciates" colour = "say_quote" key = "2" + space_chance = 100 + syllables = list("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", + "sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore", + "magna", "aliqua", "ut", "enim", "ad", "minim", "veniam", "quis", "nostrud", + "exercitation", "ullamco", "laboris", "nisi", "ut", "aliquip", "ex", "ea", "commodo", + "consequat", "duis", "aute", "irure", "dolor", "in", "reprehenderit", "in", + "voluptate", "velit", "esse", "cillum", "dolore", "eu", "fugiat", "nulla", + "pariatur", "excepteur", "sint", "occaecat", "cupidatat", "non", "proident", "sunt", + "in", "culpa", "qui", "officia", "deserunt", "mollit", "anim", "id", "est", "laborum") /datum/language/gutter name = "Gutter" @@ -142,6 +254,7 @@ speech_verb = "growls" colour = "rough" key = "3" + syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra") /datum/language/xenocommon name = "Xenomorph" @@ -152,6 +265,7 @@ exclaim_verb = "hisses" key = "4" flags = RESTRICTED + syllables = list("sss","sSs","SSS") /datum/language/xenos name = "Hivemind" @@ -286,15 +400,14 @@ return 1 /mob/proc/remove_language(var/rem_language) - - languages.Remove(all_languages[rem_language]) - - return 0 + var/datum/language/L = all_languages[rem_language] + . = (L in languages) + languages.Remove(L) // Can we speak this language, as opposed to just understanding it? /mob/proc/can_speak(datum/language/speaking) - return (universal_speak || speaking in src.languages) + return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages) //TBD /mob/verb/check_languages() @@ -305,7 +418,8 @@ var/dat = "Known Languages

" for(var/datum/language/L in languages) - dat += "[L.name] (:[L.key])
[L.desc]

" + if(!(L.flags & NONGLOBAL)) + dat += "[L.name] (:[L.key])
[L.desc]

" src << browse(dat, "window=checklanguage") return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 8b13a07fdc..038c77fcde 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -15,21 +15,12 @@ if(copytext(message,1,2) == "*") return emote(copytext(message,2)) - var/datum/language/speaking = null - - if(length(message) >= 2) - var/channel_prefix = copytext(message, 1 ,3) - if(languages.len) - for(var/datum/language/L in languages) - if(lowertext(channel_prefix) == ":[L.key]") - verb = L.speech_verb - speaking = L - break + var/datum/language/speaking = parse_language(message) if(speaking) - message = trim(copytext(message,3)) + message = copytext(message, 2+length(speaking.key)) - message = capitalize(trim_left(message)) + message = trim(message) if(!message || stat) return diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 546e0ec81a..c4107f8119 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -2,7 +2,7 @@ /obj/item/device/mmi/digital/New() src.brainmob = new(src) - src.brainmob.add_language("Binary") + src.brainmob.add_language("Robot Talk") src.brainmob.loc = src src.brainmob.container = src src.brainmob.stat = 0 @@ -18,7 +18,7 @@ return /obj/item/device/mmi - name = "Man-Machine Interface" + name = "man-machine interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" @@ -116,7 +116,7 @@ return /obj/item/device/mmi/radio_enabled - name = "Radio-enabled Man-Machine Interface" + name = "radio-enabled man-machine interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." origin_tech = "biotech=4" @@ -165,4 +165,4 @@ brainmob.emp_damage += rand(10,20) if(3) brainmob.emp_damage += rand(0,10) - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index e700c6fad4..230b7736f2 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -55,4 +55,7 @@ canmove = 1 use_me = 1 //If it can move, let it emote else canmove = 0 - return canmove \ No newline at end of file + return canmove + +/mob/living/carbon/brain/binarycheck() + return istype(loc, /obj/item/device/mmi/digital) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 1d5760cb60..c921c88afd 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -30,7 +30,7 @@ brainmob.client.screen.len = null //clear the hud /obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) - name = "[H]'s brain" + name = "\the [H]'s [initial(src.name)]" brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name @@ -39,7 +39,7 @@ if(H.mind) H.mind.transfer_to(brainmob) - brainmob << "\blue You feel slightly disoriented. That's normal when you're just a brain." + brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) /obj/item/organ/brain/examine(mob/user) // -- TLE @@ -72,4 +72,23 @@ if(brainmob.mind) brainmob.mind.transfer_to(target) else - target.key = brainmob.key \ No newline at end of file + target.key = brainmob.key + ..() + +/obj/item/organ/brain/slime + name = "slime core" + desc = "A complex, organic knot of jelly and crystalline particles." + prosthetic_name = null + prosthetic_icon = null + robotic = 2 + icon = 'icons/mob/slimes.dmi' + icon_state = "green slime extract" + +/obj/item/organ/brain/golem + name = "chem" + desc = "A tightly furled roll of paper, covered with indecipherable runes." + prosthetic_name = null + prosthetic_icon = null + robotic = 2 + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index ecb729ece9..517e32362a 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -1,7 +1,9 @@ /mob/living/carbon/brain/death(gibbed) if(!gibbed && istype(container, /obj/item/device/mmi)) //If not gibbed but in a container. container.icon_state = "mmi_dead" - return ..(gibbed,"beeps shrilly as the MMI flatlines!") + return ..(gibbed,"beeps shrilly as the MMI flatlines!") + else + return ..(gibbed,"no message") /mob/living/carbon/brain/gib() if(istype(container, /obj/item/device/mmi)) diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 6c2394eb61..e602916d8c 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -6,13 +6,31 @@ if(!(container && istype(container, /obj/item/device/mmi))) return //No MMI, can't speak, bucko./N else + var/datum/language/speaking = parse_language(message) + if(speaking) + message = copytext(message, 2+length(speaking.key)) + var/verb = "says" + var/ending = copytext(message, length(message)) + if (speaking) + verb = speaking.get_spoken_verb(ending) + else + if(ending=="!") + verb=pick("exclaims","shouts","yells") + if(ending=="?") + verb="asks" + if(prob(emp_damage*4)) if(prob(10))//10% chane to drop the message entirely return else message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher + + if(speaking && speaking.flags & HIVEMIND) + speaking.broadcast(src,trim(message)) + return + if(istype(container, /obj/item/device/mmi/radio_enabled)) var/obj/item/device/mmi/radio_enabled/R = container if(R.radio) - spawn(0) R.radio.hear_talk(src, sanitize(message)) - ..() \ No newline at end of file + spawn(0) R.radio.hear_talk(src, trim(sanitize(message)), verb, speaking) + ..(trim(message), speaking, verb) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index e1e43926c3..ef5856026c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -57,7 +57,7 @@ for(var/mob/N in viewers(src, null)) if(N.client) N.show_message(text("\red [M] bursts out of [src]!"), 2) - . = ..(null,1) + ..() /mob/living/carbon/attack_hand(mob/M as mob) if(!istype(M, /mob/living/carbon)) return @@ -510,4 +510,14 @@ return /mob/living/carbon/can_use_vents() - return \ No newline at end of file + return + +/mob/living/carbon/slip(var/slipped_on,stun_duration=8) + if(buckled) + return 0 + stop_pulling() + src << "You slipped on [slipped_on]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + Stun(stun_duration) + Weaken(Floor(stun_duration/2)) + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index d71404e624..ef0a507c20 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -1,5 +1,12 @@ /mob/living/carbon/human/gib() + for(var/datum/organ/internal/I in internal_organs) + var/obj/item/organ/current_organ = I.remove() + if(current_organ) + if(istype(loc,/turf)) + current_organ.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + current_organ.removed(src) + for(var/datum/organ/external/E in src.organs) if(istype(E, /datum/organ/external/chest)) continue @@ -8,12 +15,8 @@ // Override the current limb status and don't cause an explosion E.droplimb(1,1) - ..(species ? species.gibbed_anim : "gibbed-h") - - if(species) - hgibs(loc, viruses, dna, species.flesh_color, species.blood_color) - else - hgibs(loc, viruses, dna) + ..(species.gibbed_anim) + gibs(loc, viruses, dna, null, species.flesh_color, species.blood_color) /mob/living/carbon/human/dust() if(species) @@ -65,21 +68,6 @@ return ..(gibbed,species.death_message) -/mob/living/carbon/human/proc/makeSkeleton() - if(SKELETON in src.mutations) return - - if(f_style) - f_style = "Shaved" - if(h_style) - h_style = "Bald" - update_hair(0) - - mutations.Add(SKELETON) - status_flags |= DISFIGURED - update_body(0) - update_mutantrace() - return - /mob/living/carbon/human/proc/ChangeToHusk() if(HUSK in mutations) return @@ -92,10 +80,23 @@ mutations.Add(HUSK) status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools update_body(0) - update_mutantrace() return /mob/living/carbon/human/proc/Drain() ChangeToHusk() //mutations |= NOCLONE return + +/mob/living/carbon/human/proc/ChangeToSkeleton() + if(SKELETON in src.mutations) return + + if(f_style) + f_style = "Shaved" + if(h_style) + h_style = "Bald" + update_hair(0) + + mutations.Add(SKELETON) + status_flags |= DISFIGURED + update_body(0) + return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 834d988608..cac59fc767 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -52,7 +52,10 @@ t_his = "her" t_him = "her" - msg += "[src.name]!\n" + msg += "[src.name]" + if(species.name != "Human") + msg += ", a [species.name]" + msg += "!\n" //uniform if(w_uniform && !skipjumpsuit) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a3143e6b88..c61d33cd57 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -38,8 +38,6 @@ if(dna) dna.real_name = real_name - - prev_gender = gender // Debug for plural genders make_blood() /mob/living/carbon/human/Stat() @@ -730,13 +728,8 @@ return /mob/living/carbon/human/get_species() - if(!species) set_species() - - if(dna && dna.mutantrace == "golem") - return "Animated Construct" - return species.name /mob/living/carbon/human/proc/play_xylophone() @@ -756,13 +749,13 @@ if(!lastpuke) lastpuke = 1 - src << "You feel nauseous..." + src << "You feel nauseous..." spawn(150) //15 seconds until second warning - src << "You feel like you are about to throw up!" + src << "You feel like you are about to throw up!" spawn(100) //and you have 10 more for mad dash to the bucket Stun(5) - src.visible_message("[src] throws up!","You throw up!") + src.visible_message("[src] throws up!","You throw up!") playsound(loc, 'sound/effects/splat.ogg', 50, 1) var/turf/location = loc @@ -949,7 +942,11 @@ vessel.add_reagent("blood",560-vessel.total_volume) fixblood() - for (var/obj/item/weapon/organ/head/H in world) + // Fix up any missing organs. + // This will ignore any prosthetics in the prefs currently. + species.create_organs(src) + + for (var/obj/item/organ/brain/H in world) if(H.brainmob) if(H.brainmob.real_name == src.real_name) if(H.brainmob.mind) @@ -965,6 +962,9 @@ var/datum/disease2/disease/V = virus2[ID] V.cure(src) + losebreath = 0 + failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. + ..() /mob/living/carbon/human/proc/is_lung_ruptured() @@ -1146,6 +1146,13 @@ vessel.add_reagent("blood",560-vessel.total_volume) fixblood() + // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. + if(client && client.screen) + client.screen.len = null + if(hud_used) + del(hud_used) + hud_used = new /datum/hud(src) + if(species) return 1 else @@ -1286,3 +1293,8 @@ if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY) return 1 return 0 + +/mob/living/carbon/human/slip(var/slipped_on, stun_duration=8) + if((species.flags & NO_SLIP) || (shoes && (shoes.flags & NOSLIP))) + return 0 + ..(slipped_on,stun_duration) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 8fffcd3620..bb02aee5e0 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -230,7 +230,7 @@ return W.afterattack(target,src) var/randn = rand(1, 100) - if (randn <= 25) + if(!(species.flags & NO_SLIP) && randn <= 25) apply_effect(3, WEAKEN, run_armor_check(affecting, "melee")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("\red [M] has pushed [src]!") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 997dac1212..03dae189d9 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -29,7 +29,6 @@ var/co2_alert = 0 var/fire_alert = 0 var/pressure_alert = 0 - var/prev_gender = null // Debug for plural genders var/temperature_alert = 0 var/in_stasis = 0 @@ -44,14 +43,6 @@ ..() - /* - //This code is here to try to determine what causes the gender switch to plural error. Once the error is tracked down and fixed, this code should be deleted - //Also delete var/prev_gender once this is removed. - if(prev_gender != gender) - prev_gender = gender - if(gender in list(PLURAL, NEUTER)) - message_admins("[src] ([ckey]) gender has been changed to plural or neuter. Please record what has happened recently to the person and then notify coders. (?) (VV) (PM) (JMP)") - */ //Apparently, the person who wrote this code designed it so that //blinded get reset each cycle and then get activated later in the //code. Very ugly. I dont care. Moving this stuff here so its easy @@ -94,8 +85,10 @@ //Disabilities handle_disabilities() - //Organ failure. + //Organs and blood handle_organs() + handle_blood() + stabilize_body_temperature() //Body temperature adjusts itself (self-regulation) //Random events (vomiting etc) handle_random_events() @@ -927,64 +920,6 @@ return min(1,thermal_protection) - /* - proc/add_fire_protection(var/temp) - var/fire_prot = 0 - if(head) - if(head.protective_temperature > temp) - fire_prot += (head.protective_temperature/10) - if(wear_mask) - if(wear_mask.protective_temperature > temp) - fire_prot += (wear_mask.protective_temperature/10) - if(glasses) - if(glasses.protective_temperature > temp) - fire_prot += (glasses.protective_temperature/10) - if(ears) - if(ears.protective_temperature > temp) - fire_prot += (ears.protective_temperature/10) - if(wear_suit) - if(wear_suit.protective_temperature > temp) - fire_prot += (wear_suit.protective_temperature/10) - if(w_uniform) - if(w_uniform.protective_temperature > temp) - fire_prot += (w_uniform.protective_temperature/10) - if(gloves) - if(gloves.protective_temperature > temp) - fire_prot += (gloves.protective_temperature/10) - if(shoes) - if(shoes.protective_temperature > temp) - fire_prot += (shoes.protective_temperature/10) - - return fire_prot - - proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(nodamage) - return - //world <<"body_part = [body_part], exposed_temperature = [exposed_temperature], exposed_intensity = [exposed_intensity]" - var/discomfort = min(abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - - if(exposed_temperature > bodytemperature) - discomfort *= 4 - - if(mutantrace == "plant") - discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT * 2 //I don't like magic numbers. I'll make mutantraces a datum with vars sometime later. -- Urist - else - discomfort *= TEMPERATURE_DAMAGE_COEFFICIENT //Dangercon 2011 - now with less magic numbers! - //world <<"[discomfort]" - - switch(body_part) - if(HEAD) - apply_damage(2.5*discomfort, BURN, "head") - if(UPPER_TORSO) - apply_damage(2.5*discomfort, BURN, "chest") - if(LEGS) - apply_damage(0.6*discomfort, BURN, "l_leg") - apply_damage(0.6*discomfort, BURN, "r_leg") - if(ARMS) - apply_damage(0.4*discomfort, BURN, "l_arm") - apply_damage(0.4*discomfort, BURN, "r_arm") - */ - proc/handle_chemicals_in_body() if(reagents && !(species.flags & IS_SYNTHETIC)) //Synths don't process reagents. @@ -1022,7 +957,7 @@ adjustOxyLoss(-(light_amount)) //TODO: heal wounds, heal broken limbs. - if(dna && dna.mutantrace == "shadow") + if(species.light_dam) var/light_amount = 0 if(isturf(loc)) var/turf/T = loc @@ -1030,30 +965,11 @@ if(A) if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount else light_amount = 10 - if(light_amount > 2) //if there's enough light, start dying + if(light_amount > species.light_dam) //if there's enough light, start dying take_overall_damage(1,1) - else if (light_amount < 2) //heal in the dark + else //heal in the dark heal_overall_damage(1,1) -/* //The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with - if(FAT in mutations) - if(overeatduration < 100) - src << "\blue You feel fit again!" - mutations.Remove(FAT) - update_mutantrace(0) - update_mutations(0) - update_inv_w_uniform(0) - update_inv_wear_suit() - else - if(overeatduration > 500) - src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) - update_mutantrace(0) - update_mutations(0) - update_inv_w_uniform(0) - update_inv_wear_suit() -*/ - // nutrition decrease if (nutrition > 0 && stat != 2) nutrition = max (0, nutrition - HUNGER_FACTOR) @@ -1070,22 +986,6 @@ take_overall_damage(2,0) traumatic_shock++ - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 15) - jitteriness = max(0, jitteriness - 15) - else - dizziness = max(0, dizziness - 3) - jitteriness = max(0, jitteriness - 3) - if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems() updatehealth() @@ -1101,10 +1001,6 @@ silent = 0 else //ALIVE. LIGHTS ARE ON updatehealth() //TODO - if(!in_stasis) - stabilize_body_temperature() //Body temperature adjusts itself - handle_organs() //Optimized. - handle_blood() if(health <= config.health_threshold_dead || (species.has_organ["brain"] && !has_brain())) death() @@ -1119,13 +1015,6 @@ if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) ) Paralyse(3) - /* Done by handle_breath() - if( health <= 20 && prob(1) ) - spawn(0) - emote("gasp") - if(!reagents.has_reagent("inaprovaline")) - adjustOxyLoss(1)*/ - if(hallucination) if(hallucination >= 20) if(prob(3)) @@ -1168,22 +1057,17 @@ if( prob(2) && health && !hal_crit ) spawn(0) emote("snore") - else if(resting) - if(halloss > 0) - adjustHalLoss(-3) //CONSCIOUS else stat = CONSCIOUS - if(halloss > 0) - adjustHalLoss(-1) + //Periodically double-check embedded_flag if(embedded_flag && !(life_tick % 10)) var/list/E E = get_visible_implants(0) if(!E.len) embedded_flag = 0 - //Eyes //Check rig first because it's two-check and other checks will override it. if(istype(back,/obj/item/weapon/rig)) @@ -1223,9 +1107,28 @@ else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs ear_damage = max(ear_damage-0.05, 0) + //Resting + if(resting) + dizziness = max(0, dizziness - 15) + jitteriness = max(0, jitteriness - 15) + adjustHalLoss(-3) + else + dizziness = max(0, dizziness - 3) + jitteriness = max(0, jitteriness - 3) + adjustHalLoss(-1) + //Other handle_statuses() + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) + + confused = max(0, confused - 1) + // If you're dirty, your gloves will become dirty, too. if(gloves && germ_level > gloves.germ_level && prob(10)) gloves.germ_level += 1 @@ -1346,14 +1249,6 @@ sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) see_in_dark = species.darksight see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : SEE_INVISIBLE_LIVING - if(dna) - switch(dna.mutantrace) - if("slime") - see_in_dark = 3 - see_invisible = SEE_INVISIBLE_LEVEL_ONE - if("shadow") - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_ONE if(XRAY in mutations) sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS @@ -1484,7 +1379,7 @@ if(eye_blurry) client.screen += global_hud.blurry if(druggy) client.screen += global_hud.druggy - if(tinted_weldhelh) + if(config.welder_vision) var/found_welder if(istype(glasses, /obj/item/clothing/glasses/welding)) var/obj/item/clothing/glasses/welding/O = glasses diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 6b13e0b3a1..7201cfc8e4 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -33,7 +33,7 @@ //parse the language code and consume it var/datum/language/speaking = parse_language(message) if(speaking) - message = copytext(message,3) + message = copytext(message,2+length(speaking.key)) else if(species.default_language) speaking = all_languages[species.default_language] @@ -55,7 +55,7 @@ if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) return - message = capitalize(trim(message)) + message = trim(message) if(speech_problem_flag) var/list/handle_r = handle_speech_problems(message) @@ -132,10 +132,14 @@ if(used_radios.len) italics = 1 message_range = 1 - + if(speaking) + message_range = speaking.get_talkinto_msg_range(message) + var/msg + if(!speaking || !(speaking.flags & NO_TALK_MSG)) + msg = "\The [src] talks into \the [used_radios[1]]" for(var/mob/living/M in hearers(5, src)) - if(M != src) - M.show_message("[src] talks into [used_radios.len ? used_radios[1] : "the radio."]") + if((M != src) && msg) + M.show_message(msg) if (speech_sound) sound_vol *= 0.5 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm deleted file mode 100644 index 0409cdfc1b..0000000000 --- a/code/modules/mob/living/carbon/human/species.dm +++ /dev/null @@ -1,542 +0,0 @@ -/* - Datum-based species. Should make for much cleaner and easier to maintain mutantrace code. -*/ - -/datum/species - - var/name // Species name. - var/name_plural - - var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. - var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. - var/prone_icon // If set, draws this from icobase when mob is prone. - var/eyes = "eyes_s" // Icon for eyes. - - var/primitive // Lesser form, if any (ie. monkey for humans) - var/tail // Name of tail image in species effects icon file. - var/list/unarmed_attacks = null // For empty hand harm-intent attack - var/datum/hud_data/hud - var/hud_type - var/slowdown = 0 - var/gluttonous // Can eat some mobs. 1 for monkeys, 2 for people. - var/rarity_value = 1 // Relative rarity/collector value for this species. Only used by ninja and cultists atm. - var/list/unarmed_types = list(/datum/unarmed_attack, /datum/unarmed_attack/bite) - - var/language // Default racial language, if any. - // Default language is used when 'say' is used without modifiers. - var/default_language = "Galactic Common" - var/secondary_langs = list() // The names of secondary languages that are available to this species. - var/mutantrace // Safeguard due to old code. - var/list/speech_sounds // A list of sounds to potentially play when speaking. - var/list/speech_chance - var/has_fine_manipulation = 1 // Can use small items. - var/insulated // Immune to electrocution and glass shards to the feet. - - // Some species-specific gibbing data. - var/gibbed_anim = "gibbed-h" - var/dusted_anim = "dust-h" - var/remains_type = /obj/effect/decal/remains/xeno - var/death_sound - var/death_message = "seizes up and falls limp, their eyes dead and lifeless..." - - var/breath_type = "oxygen" // Non-oxygen gas breathed, if any. - var/poison_type = "phoron" // Poisonous air. - var/exhale_type = "carbon_dioxide" // Exhaled gas type. - - var/total_health = 100 //Point at which the mob will enter crit. - - var/cold_level_1 = 260 // Cold damage level 1 below this point. - var/cold_level_2 = 200 // Cold damage level 2 below this point. - var/cold_level_3 = 120 // Cold damage level 3 below this point. - - var/heat_level_1 = 360 // Heat damage level 1 above this point. - var/heat_level_2 = 400 // Heat damage level 2 above this point. - var/heat_level_3 = 1000 // Heat damage level 2 above this point. - - var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing) - var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second - var/reagent_tag //Used for metabolizing reagents. - - var/darksight = 2 - var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. - var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. - var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. - var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure. - - var/brute_mod = null // Physical damage reduction/malus. - var/burn_mod = null // Burn damage reduction/malus. - - var/flags = 0 // Various specific features. - - var/list/abilities = list() // For species-derived or admin-given powers - - var/blood_color = "#A10808" //Red. - var/flesh_color = "#FFC896" //Pink. - var/base_color //Used when setting species. - - //Used in icon caching. - var/race_key = 0 - var/icon/icon_template - - // Species-specific abilities. - var/list/inherent_verbs - var/list/has_organ = list( - "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, - "liver" = /datum/organ/internal/liver, - "kidneys" = /datum/organ/internal/kidney, - "brain" = /datum/organ/internal/brain, - "appendix" = /datum/organ/internal/appendix, - "eyes" = /datum/organ/internal/eyes - ) - -/datum/species/New() - if(hud_type) - hud = new hud_type() - else - hud = new() - - unarmed_attacks = list() - for(var/u_type in unarmed_types) - unarmed_attacks += new u_type() - -/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. - - //Trying to work out why species changes aren't fixing organs properly. - if(H.organs) H.organs.Cut() - if(H.internal_organs) H.internal_organs.Cut() - if(H.organs_by_name) H.organs_by_name.Cut() - if(H.internal_organs_by_name) H.internal_organs_by_name.Cut() - - H.organs = list() - H.internal_organs = list() - H.organs_by_name = list() - H.internal_organs_by_name = list() - - //This is a basic humanoid limb setup. - H.organs_by_name["chest"] = new/datum/organ/external/chest() - H.organs_by_name["groin"] = new/datum/organ/external/groin(H.organs_by_name["chest"]) - H.organs_by_name["head"] = new/datum/organ/external/head(H.organs_by_name["chest"]) - H.organs_by_name["l_arm"] = new/datum/organ/external/l_arm(H.organs_by_name["chest"]) - H.organs_by_name["r_arm"] = new/datum/organ/external/r_arm(H.organs_by_name["chest"]) - H.organs_by_name["r_leg"] = new/datum/organ/external/r_leg(H.organs_by_name["groin"]) - H.organs_by_name["l_leg"] = new/datum/organ/external/l_leg(H.organs_by_name["groin"]) - H.organs_by_name["l_hand"] = new/datum/organ/external/l_hand(H.organs_by_name["l_arm"]) - H.organs_by_name["r_hand"] = new/datum/organ/external/r_hand(H.organs_by_name["r_arm"]) - H.organs_by_name["l_foot"] = new/datum/organ/external/l_foot(H.organs_by_name["l_leg"]) - H.organs_by_name["r_foot"] = new/datum/organ/external/r_foot(H.organs_by_name["r_leg"]) - - for(var/organ in has_organ) - var/organ_type = has_organ[organ] - H.internal_organs_by_name[organ] = new organ_type(H) - - for(var/name in H.organs_by_name) - H.organs += H.organs_by_name[name] - - for(var/datum/organ/external/O in H.organs) - O.owner = H - - if(flags & IS_SYNTHETIC) - for(var/datum/organ/external/E in H.organs) - if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue - E.status |= ORGAN_ROBOT - for(var/datum/organ/internal/I in H.internal_organs) - I.mechanize() - -/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target) - - var/t_him = "them" - switch(target.gender) - if(MALE) - t_him = "him" - if(FEMALE) - t_him = "her" - - H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ - "You hug [target] to make [t_him] feel better!") - -/datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) - if(inherent_verbs) - for(var/verb_path in inherent_verbs) - H.verbs -= verb_path - return - -/datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) - if(inherent_verbs) - for(var/verb_path in inherent_verbs) - H.verbs |= verb_path - return - -/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. - add_inherent_verbs(H) - -/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). - if(flags & IS_SYNTHETIC) - H.h_style = "" - spawn(100) - H.update_hair() - return - -// Only used for alien plasma weeds atm, but could be used for Dionaea later. -/datum/species/proc/handle_environment_special(var/mob/living/carbon/human/H) - return - -// Used to update alien icons for aliens. -/datum/species/proc/handle_login_special(var/mob/living/carbon/human/H) - return - -// As above. -/datum/species/proc/handle_logout_special(var/mob/living/carbon/human/H) - return - -// Builds the HUD using species-specific icons and usable slots. -/datum/species/proc/build_hud(var/mob/living/carbon/human/H) - return - -// Grabs the window recieved when you click-drag someone onto you. -/datum/species/proc/get_inventory_dialogue(var/mob/living/carbon/human/H) - return - -//Used by xenos understanding larvae and dionaea understanding nymphs. -/datum/species/proc/can_understand(var/mob/other) - return - -/datum/species/human - name = "Human" - name_plural = "Humans" - language = "Sol Common" - primitive = /mob/living/carbon/monkey - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) - - flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - - //If you wanted to add a species-level ability: - /*abilities = list(/client/proc/test_ability)*/ - -/datum/species/unathi - name = "Unathi" - name_plural = "Unathi" - icobase = 'icons/mob/human_races/r_lizard.dmi' - deform = 'icons/mob/human_races/r_def_lizard.dmi' - language = "Sinta'unathi" - tail = "sogtail" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) - primitive = /mob/living/carbon/monkey/unathi - darksight = 3 - gluttonous = 1 - - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 - - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 - - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - - flesh_color = "#34AF10" - - reagent_tag = IS_UNATHI - base_color = "#066000" - -/datum/species/tajaran - name = "Tajara" - name_plural = "Tajaran" - icobase = 'icons/mob/human_races/r_tajaran.dmi' - deform = 'icons/mob/human_races/r_def_tajaran.dmi' - language = "Siik'tajr" - tail = "tajtail" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) - darksight = 8 - - cold_level_1 = 200 //Default 260 - cold_level_2 = 140 //Default 200 - cold_level_3 = 80 //Default 120 - - heat_level_1 = 330 //Default 360 - heat_level_2 = 380 //Default 400 - heat_level_3 = 800 //Default 1000 - - primitive = /mob/living/carbon/monkey/tajara - - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - - flesh_color = "#AFA59E" - base_color = "#333333" - -/datum/species/skrell - name = "Skrell" - name_plural = "Skrell" - icobase = 'icons/mob/human_races/r_skrell.dmi' - deform = 'icons/mob/human_races/r_def_skrell.dmi' - eyes = "skrell_eyes_s" - language = "Skrellian" - primitive = /mob/living/carbon/monkey/skrell - unarmed_types = list(/datum/unarmed_attack/punch) - - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR - - flesh_color = "#8CD7A3" - blood_color = "#1D2CBF" - - reagent_tag = IS_SKRELL - -/datum/species/vox - name = "Vox" - name_plural = "Vox" - icobase = 'icons/mob/human_races/r_vox.dmi' - deform = 'icons/mob/human_races/r_def_vox.dmi' - default_language = "Vox-pidgin" - language = "Galactic Common" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) - rarity_value = 2 - - speech_sounds = list('sound/voice/shriek1.ogg') - speech_chance = 20 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = 0 - - eyes = "vox_eyes_s" - - breath_type = "nitrogen" - poison_type = "oxygen" - insulated = 1 - - flags = NO_SCAN | HAS_EYE_COLOR - - blood_color = "#2299FC" - flesh_color = "#808D11" - - reagent_tag = IS_VOX - - inherent_verbs = list( - /mob/living/carbon/human/proc/leap - ) - - has_organ = list( - "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, - "liver" = /datum/organ/internal/liver, - "kidneys" = /datum/organ/internal/kidney, - "brain" = /datum/organ/internal/brain, - "eyes" = /datum/organ/internal/eyes, - "stack" = /datum/organ/internal/stack/vox - ) - -/datum/species/vox/armalis - name = "Vox Armalis" - name_plural = "Vox" - icobase = 'icons/mob/human_races/r_armalis.dmi' - deform = 'icons/mob/human_races/r_armalis.dmi' - rarity_value = 10 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = 0 - - heat_level_1 = 2000 - heat_level_2 = 3000 - heat_level_3 = 4000 - - brute_mod = 0.2 - burn_mod = 0.2 - - eyes = "blank_eyes" - breath_type = "nitrogen" - poison_type = "oxygen" - - flags = NO_SCAN | NO_BLOOD | NO_PAIN | HAS_EYE_COLOR - - blood_color = "#2299FC" - flesh_color = "#808D11" - - tail = "armalis_tail" - icon_template = 'icons/mob/human_races/r_armalis.dmi' - - reagent_tag = IS_VOX - - inherent_verbs = list( - /mob/living/carbon/human/proc/leap, - /mob/living/carbon/human/proc/gut, - /mob/living/carbon/human/proc/commune - ) - -/datum/species/diona - name = "Diona" - name_plural = "Dionaea" - icobase = 'icons/mob/human_races/r_diona.dmi' - deform = 'icons/mob/human_races/r_def_plant.dmi' - language = "Rootspeak" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona) - primitive = /mob/living/carbon/alien/diona - slowdown = 7 - rarity_value = 3 - - has_organ = list( - "nutrient channel" = /datum/organ/internal/diona/nutrients, - "neural strata" = /datum/organ/internal/diona/strata, - "response node" = /datum/organ/internal/diona/node, - "gas bladder" = /datum/organ/internal/diona/bladder, - "polyp segment" = /datum/organ/internal/diona/polyp, - "anchoring ligament" = /datum/organ/internal/diona/ligament - ) - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 2000 - heat_level_2 = 3000 - heat_level_3 = 4000 - - body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not - - flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | HAS_EYE_COLOR - - blood_color = "#004400" - flesh_color = "#907E4A" - - reagent_tag = IS_DIONA - -/datum/species/diona/can_understand(var/mob/other) - var/mob/living/carbon/alien/diona/D = other - if(istype(D)) - return 1 - return 0 - -/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) - H.gender = NEUTER - return ..() - -/datum/species/diona/handle_death(var/mob/living/carbon/human/H) - - var/mob/living/carbon/alien/diona/S = new(get_turf(H)) - - if(H.mind) - H.mind.transfer_to(S) - - for(var/mob/living/carbon/alien/diona/D in H.contents) - if(D.client) - D.loc = H.loc - else - del(D) - - H.visible_message("\red[H] splits apart with a wet slithering noise!") - -/datum/species/machine - name = "Machine" - name_plural = "machines" - - icobase = 'icons/mob/human_races/r_machine.dmi' - deform = 'icons/mob/human_races/r_machine.dmi' - language = "Tradeband" - unarmed_types = list(/datum/unarmed_attack/punch) - rarity_value = 2 - - eyes = "blank_eyes" - brute_mod = 0.5 - burn_mod = 1 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 500 //gives them about 25 seconds in space before taking damage - heat_level_2 = 1000 - heat_level_3 = 2000 - - synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. - - flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC - - blood_color = "#1F181F" - flesh_color = "#575757" - - has_organ = list( - "heart" = /datum/organ/internal/heart, - "brain" = /datum/organ/internal/brain, - ) - -// Called when using the shredding behavior. -/datum/species/proc/can_shred(var/mob/living/carbon/human/H) - - if(H.a_intent != "hurt") - return 0 - - for(var/datum/unarmed_attack/attack in unarmed_attacks) - if(!attack.is_usable(H)) - continue - if(attack.shredding) - return 1 - - return 0 - - -/datum/hud_data - var/icon // If set, overrides ui_style. - var/has_a_intent = 1 // Set to draw intent box. - var/has_m_intent = 1 // Set to draw move intent box. - var/has_warnings = 1 // Set to draw environment warnings. - var/has_pressure = 1 // Draw the pressure indicator. - var/has_nutrition = 1 // Draw the nutrition indicator. - var/has_bodytemp = 1 // Draw the bodytemp indicator. - var/has_hands = 1 // Set to draw shand. - var/has_drop = 1 // Set to draw drop button. - var/has_throw = 1 // Set to draw throw button. - var/has_resist = 1 // Set to draw resist button. - var/has_internals = 1 // Set to draw the internals toggle button. - var/list/equip_slots = list() // Checked by mob_can_equip(). - - // Contains information on the position and tag for all inventory slots - // to be drawn for the mob. This is fairly delicate, try to avoid messing with it - // unless you know exactly what it does. - var/list/gear = list( - "i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH), - "o_clothing" = list("loc" = ui_oclothing, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH), - "mask" = list("loc" = ui_mask, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH), - "gloves" = list("loc" = ui_gloves, "slot" = slot_gloves, "state" = "gloves", "toggle" = 1), - "eyes" = list("loc" = ui_glasses, "slot" = slot_glasses, "state" = "glasses","toggle" = 1), - "l_ear" = list("loc" = ui_l_ear, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "r_ear" = list("loc" = ui_r_ear, "slot" = slot_r_ear, "state" = "ears", "toggle" = 1), - "head" = list("loc" = ui_head, "slot" = slot_head, "state" = "hair", "toggle" = 1), - "shoes" = list("loc" = ui_shoes, "slot" = slot_shoes, "state" = "shoes", "toggle" = 1), - "suit storage" = list("loc" = ui_sstore1, "slot" = slot_s_store, "state" = "belt", "dir" = 8), - "back" = list("loc" = ui_back, "slot" = slot_back, "state" = "back", "dir" = NORTH), - "id" = list("loc" = ui_id, "slot" = slot_wear_id, "state" = "id", "dir" = NORTH), - "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"), - "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt") - ) - -/datum/hud_data/New() - ..() - for(var/slot in gear) - equip_slots |= gear[slot]["slot"] - - if(has_hands) - equip_slots |= slot_l_hand - equip_slots |= slot_r_hand - equip_slots |= slot_handcuffed - - if(slot_back in equip_slots) - equip_slots |= slot_in_backpack - - if(slot_w_uniform in equip_slots) - equip_slots |= slot_tie - - equip_slots |= slot_legcuffed diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm new file mode 100644 index 0000000000..e9584143ee --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm @@ -0,0 +1,25 @@ +/datum/species/shadow + name = "Shadow" + name_plural = "shadows" + + icobase = 'icons/mob/human_races/r_shadow.dmi' + deform = 'icons/mob/human_races/r_shadow.dmi' + + language = "Sol Common" //todo? + unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp) + light_dam = 2 + darksight = 8 + has_organ = list() + + blood_color = "#CCCCCC" + flesh_color = "#AAAAAA" + + remains_type = /obj/effect/decal/cleanable/ash + death_message = "dissolves into ash..." + + flags = IS_RESTRICTED | NO_BLOOD | NO_POISON | NO_SCAN | NO_SLIP | NO_POISON + +/datum/species/shadow/handle_death(var/mob/living/carbon/human/H) + spawn(1) + new /obj/effect/decal/cleanable/ash(H.loc) + del(H) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm new file mode 100644 index 0000000000..3c44fbd5c6 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -0,0 +1,97 @@ +/datum/species/vox + name = "Vox" + name_plural = "Vox" + icobase = 'icons/mob/human_races/r_vox.dmi' + deform = 'icons/mob/human_races/r_def_vox.dmi' + default_language = "Vox-pidgin" + language = "Galactic Common" + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) + rarity_value = 2 + blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \ + scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \ + alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \ + refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \ + smell.

Most humans will never meet a Vox raider, instead learning of this insular species through \ + dealing with their traders and merchants; those that do rarely enjoy the experience." + + speech_sounds = list('sound/voice/shriek1.ogg') + speech_chance = 20 + + warning_low_pressure = 50 + hazard_low_pressure = 0 + + cold_level_1 = 80 + cold_level_2 = 50 + cold_level_3 = 0 + + eyes = "vox_eyes_s" + + breath_type = "nitrogen" + poison_type = "oxygen" + insulated = 1 + + flags = IS_WHITELISTED | NO_SCAN | HAS_EYE_COLOR + + blood_color = "#2299FC" + flesh_color = "#808D11" + + reagent_tag = IS_VOX + + inherent_verbs = list( + /mob/living/carbon/human/proc/leap + ) + + has_organ = list( + "heart" = /datum/organ/internal/heart, + "lungs" = /datum/organ/internal/lungs, + "liver" = /datum/organ/internal/liver, + "kidneys" = /datum/organ/internal/kidney, + "brain" = /datum/organ/internal/brain, + "eyes" = /datum/organ/internal/eyes, + "stack" = /datum/organ/internal/stack/vox + ) + +/datum/species/vox/get_random_name(var/gender) + var/datum/language/species_language = all_languages[default_language] + return species_language.get_random_name(gender) + +/datum/species/vox/armalis + name = "Vox Armalis" + name_plural = "Vox" + icobase = 'icons/mob/human_races/r_armalis.dmi' + deform = 'icons/mob/human_races/r_armalis.dmi' + rarity_value = 10 + + warning_low_pressure = 50 + hazard_low_pressure = 0 + + cold_level_1 = 80 + cold_level_2 = 50 + cold_level_3 = 0 + + heat_level_1 = 2000 + heat_level_2 = 3000 + heat_level_3 = 4000 + + brute_mod = 0.2 + burn_mod = 0.2 + + eyes = "blank_eyes" + breath_type = "nitrogen" + poison_type = "oxygen" + + flags = IS_RESTRICTED | NO_SCAN | NO_BLOOD | NO_PAIN | HAS_EYE_COLOR + + blood_color = "#2299FC" + flesh_color = "#808D11" + + tail = "armalis_tail" + icon_template = 'icons/mob/human_races/r_armalis.dmi' + + reagent_tag = IS_VOX + + inherent_verbs = list( + /mob/living/carbon/human/proc/leap, + /mob/living/carbon/human/proc/gut, + /mob/living/carbon/human/proc/commune + ) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm new file mode 100644 index 0000000000..defd0de8c7 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -0,0 +1,217 @@ +/* + Datum-based species. Should make for much cleaner and easier to maintain race code. +*/ + +/datum/species + + // Descriptors and strings. + var/name // Species name. + var/name_plural // Pluralized name (since "[name]s" is not always valid) + var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen. + + // Icon/appearance vars. + var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. + var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. + var/prone_icon // If set, draws this from icobase when mob is prone. + var/eyes = "eyes_s" // Icon for eyes. + var/blood_color = "#A10808" // Red. + var/flesh_color = "#FFC896" // Pink. + var/base_color // Used by changelings. Should also be used for icon previes.. + var/tail // Name of tail image in species effects icon file. + var/race_key = 0 // Used for mob icon cache string. + var/icon/icon_template // Used for mob icon generation for non-32x32 species. + + // Language/culture vars. + var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers. + var/language = "Galactic Common" // Default racial language, if any. + var/secondary_langs = list() // The names of secondary languages that are available to this species. + var/list/speech_sounds // A list of sounds to potentially play when speaking. + var/list/speech_chance // The likelihood of a speech sound playing. + + // Combat vars. + var/total_health = 100 // Point at which the mob will enter crit. + var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat. + /datum/unarmed_attack, + /datum/unarmed_attack/bite + ) + var/list/unarmed_attacks = null // For empty hand harm-intent attack + var/brute_mod = null // Physical damage reduction/malus. + var/burn_mod = null // Burn damage reduction/malus. + + // Death vars. + var/gibber_type = /obj/effect/gibspawner/human + var/remains_type = /obj/effect/decal/remains/xeno + var/gibbed_anim = "gibbed-h" + var/dusted_anim = "dust-h" + var/death_sound + var/death_message = "seizes up and falls limp, their eyes dead and lifeless..." + + // Environment tolerance/life processes vars. + var/reagent_tag //Used for metabolizing reagents. + var/breath_type = "oxygen" // Non-oxygen gas breathed, if any. + var/poison_type = "phoron" // Poisonous air. + var/exhale_type = "carbon_dioxide" // Exhaled gas type. + var/cold_level_1 = 260 // Cold damage level 1 below this point. + var/cold_level_2 = 200 // Cold damage level 2 below this point. + var/cold_level_3 = 120 // Cold damage level 3 below this point. + var/heat_level_1 = 360 // Heat damage level 1 above this point. + var/heat_level_2 = 400 // Heat damage level 2 above this point. + var/heat_level_3 = 1000 // Heat damage level 2 above this point. + var/synth_temp_gain = 0 // IS_SYNTHETIC species will gain this much temperature every second + var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. + var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. + var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. + var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure. + var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative. + var/body_temperature = 310.15 // Non-IS_SYNTHETIC species will try to stabilize at this temperature. + // (also affects temperature processing) + // HUD data vars. + var/datum/hud_data/hud + var/hud_type + + // Body/form vars. + var/list/inherent_verbs // Species-specific verbs. + var/has_fine_manipulation = 1 // Can use small items. + var/insulated // Immune to electrocution and glass shards to the feet. + var/darksight = 2 // Native darksight distance. + var/flags = 0 // Various specific features. + var/slowdown = 0 // Passive movement speed malus (or boost, if negative) + var/primitive // Lesser form, if any (ie. monkey for humans) + var/gluttonous // Can eat some mobs. 1 for monkeys, 2 for people. + var/rarity_value = 1 // Relative rarity/collector value for this species. + // Determines the organs that the species spawns with and + var/list/has_organ = list( // which required-organ checks are conducted. + "heart" = /datum/organ/internal/heart, + "lungs" = /datum/organ/internal/lungs, + "liver" = /datum/organ/internal/liver, + "kidneys" = /datum/organ/internal/kidney, + "brain" = /datum/organ/internal/brain, + "appendix" = /datum/organ/internal/appendix, + "eyes" = /datum/organ/internal/eyes + ) + +/datum/species/New() + if(hud_type) + hud = new hud_type() + else + hud = new() + + unarmed_attacks = list() + for(var/u_type in unarmed_types) + unarmed_attacks += new u_type() + +/datum/species/proc/get_random_name(var/gender) + var/datum/language/species_language = all_languages[language] + return species_language.get_random_name(gender) + +/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. + + //Trying to work out why species changes aren't fixing organs properly. + if(H.organs) H.organs.Cut() + if(H.internal_organs) H.internal_organs.Cut() + if(H.organs_by_name) H.organs_by_name.Cut() + if(H.internal_organs_by_name) H.internal_organs_by_name.Cut() + + H.organs = list() + H.internal_organs = list() + H.organs_by_name = list() + H.internal_organs_by_name = list() + + //This is a basic humanoid limb setup. + H.organs_by_name["chest"] = new/datum/organ/external/chest() + H.organs_by_name["groin"] = new/datum/organ/external/groin(H.organs_by_name["chest"]) + H.organs_by_name["head"] = new/datum/organ/external/head(H.organs_by_name["chest"]) + H.organs_by_name["l_arm"] = new/datum/organ/external/l_arm(H.organs_by_name["chest"]) + H.organs_by_name["r_arm"] = new/datum/organ/external/r_arm(H.organs_by_name["chest"]) + H.organs_by_name["r_leg"] = new/datum/organ/external/r_leg(H.organs_by_name["groin"]) + H.organs_by_name["l_leg"] = new/datum/organ/external/l_leg(H.organs_by_name["groin"]) + H.organs_by_name["l_hand"] = new/datum/organ/external/l_hand(H.organs_by_name["l_arm"]) + H.organs_by_name["r_hand"] = new/datum/organ/external/r_hand(H.organs_by_name["r_arm"]) + H.organs_by_name["l_foot"] = new/datum/organ/external/l_foot(H.organs_by_name["l_leg"]) + H.organs_by_name["r_foot"] = new/datum/organ/external/r_foot(H.organs_by_name["r_leg"]) + + for(var/organ in has_organ) + var/organ_type = has_organ[organ] + H.internal_organs_by_name[organ] = new organ_type(H) + + for(var/name in H.organs_by_name) + H.organs += H.organs_by_name[name] + + for(var/datum/organ/external/O in H.organs) + O.owner = H + + if(flags & IS_SYNTHETIC) + for(var/datum/organ/external/E in H.organs) + if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue + E.status |= ORGAN_ROBOT + for(var/datum/organ/internal/I in H.internal_organs) + I.mechanize() + +/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target) + + var/t_him = "them" + switch(target.gender) + if(MALE) + t_him = "him" + if(FEMALE) + t_him = "her" + + H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ + "You hug [target] to make [t_him] feel better!") + +/datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) + if(inherent_verbs) + for(var/verb_path in inherent_verbs) + H.verbs -= verb_path + return + +/datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) + if(inherent_verbs) + for(var/verb_path in inherent_verbs) + H.verbs |= verb_path + return + +/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. + add_inherent_verbs(H) + +/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). + return + +// Only used for alien plasma weeds atm, but could be used for Dionaea later. +/datum/species/proc/handle_environment_special(var/mob/living/carbon/human/H) + return + +// Used to update alien icons for aliens. +/datum/species/proc/handle_login_special(var/mob/living/carbon/human/H) + return + +// As above. +/datum/species/proc/handle_logout_special(var/mob/living/carbon/human/H) + return + +// Builds the HUD using species-specific icons and usable slots. +/datum/species/proc/build_hud(var/mob/living/carbon/human/H) + return + +// Grabs the window recieved when you click-drag someone onto you. +/datum/species/proc/get_inventory_dialogue(var/mob/living/carbon/human/H) + return + +//Used by xenos understanding larvae and dionaea understanding nymphs. +/datum/species/proc/can_understand(var/mob/other) + return + +// Called when using the shredding behavior. +/datum/species/proc/can_shred(var/mob/living/carbon/human/H) + + if(H.a_intent != "hurt") + return 0 + + for(var/datum/unarmed_attack/attack in unarmed_attacks) + if(!attack.is_usable(H)) + continue + if(attack.shredding) + return 1 + + return 0 + diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm new file mode 100644 index 0000000000..4ebfb91092 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species_attack.dm @@ -0,0 +1,263 @@ +//Species unarmed attacks +/datum/unarmed_attack + var/attack_verb = list("attack") // Empty hand hurt intent verb. + var/attack_noun = list("fist") + var/damage = 0 // Extra empty hand attack damage. + var/attack_sound = "punch" + var/miss_sound = 'sound/weapons/punchmiss.ogg' + var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. + var/sharp = 0 + var/edge = 0 + +/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user) + if(user.restrained()) + return 0 + + // Check if they have a functioning hand. + var/datum/organ/external/E = user.organs_by_name["l_hand"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + E = user.organs_by_name["r_hand"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + return 0 + +/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) + + var/stun_chance = rand(0, 100) + + if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance + switch(zone) // strong punches can have effects depending on where they hit + if("head", "mouth", "eyes") + // Induce blurriness + target.visible_message("[target] looks dazed.", "You see stars.") + target.apply_effect(attack_damage*2, EYE_BLUR, armour) + if("l_arm", "l_hand") + if (target.l_hand) + // Disarm left hand + target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!") + target.drop_l_hand() + if("r_arm", "r_hand") + if (target.r_hand) + // Disarm right hand + target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!") + target.drop_r_hand() + if("chest") + if(!target.lying) + var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target))) + if(!T.density) + step(target, get_dir(get_turf(user), get_turf(target))) + target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") + else + target.visible_message("[target] slams into [T]!") + if(prob(50)) + target.set_dir(reverse_dir[target.dir]) + target.apply_effect(attack_damage * 0.4, WEAKEN, armour) + if("groin") + target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") + target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) + if("l_leg", "l_foot", "r_leg", "r_foot") + if(!target.lying) + target.visible_message("[src] gives way slightly.") + target.apply_effect(attack_damage*3, AGONY, armour) + else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance) + if(!target.lying) + target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!") + else + target.visible_message("[target] has been weakened!") + target.apply_effect(3, WEAKEN, armour) + +/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/datum/organ/external/affecting = target.get_organ(zone) + user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.display_name]!") + playsound(user.loc, attack_sound, 25, 1, -1) + +/datum/unarmed_attack/bite + attack_verb = list("bit") + attack_sound = 'sound/weapons/bite.ogg' + shredding = 0 + damage = 0 + sharp = 0 + edge = 0 + +/datum/unarmed_attack/bite/sharp //eye teeth + attack_verb = list("bit", "chomped on") + attack_sound = 'sound/weapons/bite.ogg' + shredding = 0 + damage = 5 + sharp = 1 + edge = 1 + +/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) + if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) + return 0 + if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth")) + return 0 + return 1 + +/datum/unarmed_attack/punch + attack_verb = list("punched") + attack_noun = list("fist") + damage = 0 + +/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/datum/organ/external/affecting = target.get_organ(zone) + var/organ = affecting.display_name + + attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case. + + if(target == user) + user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!") + return 0 + + if(!target.lying) + switch(zone) + if("head", "mouth", "eyes") + // ----- HEAD ----- // + switch(attack_damage) + if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!") + if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!") + if(5) user.visible_message("[user] gave [target] a resounding slap to the face!") + if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot") + // ----- BODY ----- // + switch(attack_damage) + if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!") + if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") + if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!") + else + user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!") + +/datum/unarmed_attack/kick + attack_verb = list("kicked", "kneed") + attack_noun = list("kick") + attack_sound = "swing_hit" + damage = 1 + +/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) + if (target.legcuffed) + return 0 + + if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin"))) + return 0 + + var/datum/organ/external/E = user.organs_by_name["l_foot"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + E = user.organs_by_name["r_foot"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + return 0 + +/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/datum/organ/external/affecting = target.get_organ(zone) + var/organ = affecting.display_name + + attack_damage = Clamp(attack_damage, 1, 5) + + switch(zone) + if("groin", "l_leg", "r_leg") + // -- LOWER BODY -- // + switch(attack_damage) + if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!") + if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") + if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!") + if("l_foot", "r_foot") + // ----- FEET ----- // + switch(attack_damage) + if(1 to 4) user.visible_message("[user] kicked [target] in \his [organ]!") + if(5) user.visible_message("[user] stomped down hard on [target]'s [organ]!") + +/datum/unarmed_attack/stomp + attack_verb = null + attack_noun = list("kick") + attack_sound = "swing_hit" + damage = 3 + +/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) + if (target.legcuffed) + return 0 + + if (target.lying && !user.lying) + var/datum/organ/external/E = user.organs_by_name["l_foot"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + E = user.organs_by_name["r_foot"] + if(E && !(E.status & ORGAN_DESTROYED)) + return 1 + + return 0 + +/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/datum/organ/external/affecting = target.get_organ(zone) + var/organ = affecting.display_name + + attack_damage = Clamp(attack_damage, 1, 5) + + switch(attack_damage) + if(1 to 3) + user.visible_message("[user] [pick("gave a kick against", "kicked against", "stomped down on", "slammed their foot into")] [target]'s [organ]!") + if(4 to 5) + user.visible_message("[user] [pick("landed a strong kick against", "kicked against", "stomped down hard on", "rammed their foot into")] [target]'s [organ]!") + +/datum/unarmed_attack/diona + attack_verb = list("lashed", "bludgeoned") + attack_noun = list("tendril") + damage = 5 + +/datum/unarmed_attack/claws + attack_verb = list("scratched", "clawed", "slashed") + attack_noun = list("claws") + attack_sound = 'sound/weapons/slice.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + damage = 5 + sharp = 1 + edge = 1 + +/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/skill = user.skills["combat"] + var/datum/organ/external/affecting = target.get_organ(zone) + + if(!skill) skill = 1 + attack_damage = Clamp(attack_damage, 1, 5) + + if(target == user) + user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.display_name]!") + return 0 + + switch(zone) + if("head", "mouth", "eyes") + // ----- HEAD ----- // + switch(attack_damage) + if(1 to 2) user.visible_message("[user] scratched [target] across \his cheek!") + if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!") + if(5) user.visible_message("[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]") + if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot") + // ----- BODY ----- // + switch(attack_damage) + if(1 to 2) user.visible_message("[user] scratched [target]'s [affecting.display_name]!") + if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!") + if(5) user.visible_message("[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!") + +/datum/unarmed_attack/claws/strong + attack_verb = list("slash") + damage = 10 + shredding = 1 + +/datum/unarmed_attack/bite/strong + attack_verb = list("maul") + damage = 15 + shredding = 1 + +/datum/unarmed_attack/slime_glomp + attack_verb = list("glomped") + attack_noun = list("body") + damage = 0 + +/datum/unarmed_attack/slime_glomp/apply_effects() + //Todo, maybe have a chance of causing an electrical shock? + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species_hud.dm b/code/modules/mob/living/carbon/human/species/species_hud.dm new file mode 100644 index 0000000000..7a041691b1 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species_hud.dm @@ -0,0 +1,53 @@ +/datum/hud_data + var/icon // If set, overrides ui_style. + var/has_a_intent = 1 // Set to draw intent box. + var/has_m_intent = 1 // Set to draw move intent box. + var/has_warnings = 1 // Set to draw environment warnings. + var/has_pressure = 1 // Draw the pressure indicator. + var/has_nutrition = 1 // Draw the nutrition indicator. + var/has_bodytemp = 1 // Draw the bodytemp indicator. + var/has_hands = 1 // Set to draw shand. + var/has_drop = 1 // Set to draw drop button. + var/has_throw = 1 // Set to draw throw button. + var/has_resist = 1 // Set to draw resist button. + var/has_internals = 1 // Set to draw the internals toggle button. + var/list/equip_slots = list() // Checked by mob_can_equip(). + + // Contains information on the position and tag for all inventory slots + // to be drawn for the mob. This is fairly delicate, try to avoid messing with it + // unless you know exactly what it does. + var/list/gear = list( + "i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH), + "o_clothing" = list("loc" = ui_oclothing, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH), + "mask" = list("loc" = ui_mask, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH), + "gloves" = list("loc" = ui_gloves, "slot" = slot_gloves, "state" = "gloves", "toggle" = 1), + "eyes" = list("loc" = ui_glasses, "slot" = slot_glasses, "state" = "glasses","toggle" = 1), + "l_ear" = list("loc" = ui_l_ear, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), + "r_ear" = list("loc" = ui_r_ear, "slot" = slot_r_ear, "state" = "ears", "toggle" = 1), + "head" = list("loc" = ui_head, "slot" = slot_head, "state" = "hair", "toggle" = 1), + "shoes" = list("loc" = ui_shoes, "slot" = slot_shoes, "state" = "shoes", "toggle" = 1), + "suit storage" = list("loc" = ui_sstore1, "slot" = slot_s_store, "state" = "belt", "dir" = 8), + "back" = list("loc" = ui_back, "slot" = slot_back, "state" = "back", "dir" = NORTH), + "id" = list("loc" = ui_id, "slot" = slot_wear_id, "state" = "id", "dir" = NORTH), + "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"), + "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"), + "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt") + ) + +/datum/hud_data/New() + ..() + for(var/slot in gear) + equip_slots |= gear[slot]["slot"] + + if(has_hands) + equip_slots |= slot_l_hand + equip_slots |= slot_r_hand + equip_slots |= slot_handcuffed + + if(slot_back in equip_slots) + equip_slots |= slot_in_backpack + + if(slot_w_uniform in equip_slots) + equip_slots |= slot_tie + + equip_slots |= slot_legcuffed diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm new file mode 100644 index 0000000000..137472a23a --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/golem.dm @@ -0,0 +1,30 @@ +/datum/species/golem + name = "Golem" + name_plural = "golems" + + icobase = 'icons/mob/human_races/r_golem.dmi' + deform = 'icons/mob/human_races/r_golem.dmi' + + language = "Sol Common" //todo? + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch) + flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | IS_SYNTHETIC | NO_SCAN | NO_POISON + + breath_type = null + poison_type = null + + blood_color = "#515573" + flesh_color = "#137E8F" + + has_organ = list( + "brain" = /datum/organ/internal/brain/golem + ) + + death_message = "becomes completely motionless..." + +/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) + if(H.mind) + H.mind.assigned_role = "Golem" + H.mind.special_role = "Golem" + H.real_name = "adamantine golem ([rand(1, 1000)])" + H.name = H.real_name + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm new file mode 100644 index 0000000000..9fc44f7e30 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/slime.dm @@ -0,0 +1,24 @@ +/datum/species/slime + name = "Slime" + name_plural = "slimes" + + icobase = 'icons/mob/human_races/r_slime.dmi' + deform = 'icons/mob/human_races/r_slime.dmi' + + language = "Sol Common" //todo? + unarmed_types = list(/datum/unarmed_attack/slime_glomp) + flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_BREATHE + darksight = 3 + + blood_color = "#05FF9B" + flesh_color = "#05FFFB" + + has_organ = list( + "brain" = /datum/organ/internal/brain/slime + ) + + inherent_verbs = list( + ) + + breath_type = null + poison_type = null \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm new file mode 100644 index 0000000000..83fa48e48f --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -0,0 +1,211 @@ +/datum/species/human + name = "Human" + name_plural = "Humans" + language = "Sol Common" + primitive = /mob/living/carbon/monkey + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) + blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ + colonies across a wide swathe of space. They hold a wide range of forms and creeds.

\ + While the central Sol government maintains control of its far-flung people, powerful corporate \ + interests, rampant cyber and bio-augmentation and secretive factions make life on most human \ + worlds tumultous at best." + + flags = CAN_JOIN | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + +/datum/species/unathi + name = "Unathi" + name_plural = "Unathi" + icobase = 'icons/mob/human_races/r_lizard.dmi' + deform = 'icons/mob/human_races/r_def_lizard.dmi' + language = "Sinta'unathi" + tail = "sogtail" + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + primitive = /mob/living/carbon/monkey/unathi + darksight = 3 + gluttonous = 1 + + blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ + Uuosa-Eso system, which roughly translates to 'burning mother'.

Coming from a harsh, radioactive \ + desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \ + else, frequently even their own lives. They prefer warmer temperatures than most species and \ + their native tongue is a heavy hissing laungage called Sinta'Unathi." + + cold_level_1 = 280 //Default 260 - Lower is better + cold_level_2 = 220 //Default 200 + cold_level_3 = 130 //Default 120 + + heat_level_1 = 420 //Default 360 - Higher is better + heat_level_2 = 480 //Default 400 + heat_level_3 = 1100 //Default 1000 + + flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "#34AF10" + + reagent_tag = IS_UNATHI + base_color = "#066000" + +/datum/species/tajaran + name = "Tajara" + name_plural = "Tajaran" + icobase = 'icons/mob/human_races/r_tajaran.dmi' + deform = 'icons/mob/human_races/r_def_tajaran.dmi' + language = "Siik'tajr" + tail = "tajtail" + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + darksight = 8 + blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ + S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \ + influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \ + of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \ + using unique inflections their mouths form." + + cold_level_1 = 200 //Default 260 + cold_level_2 = 140 //Default 200 + cold_level_3 = 80 //Default 120 + + heat_level_1 = 330 //Default 360 + heat_level_2 = 380 //Default 400 + heat_level_3 = 800 //Default 1000 + + primitive = /mob/living/carbon/monkey/tajara + + flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "#AFA59E" + base_color = "#333333" + +/datum/species/skrell + name = "Skrell" + name_plural = "Skrell" + icobase = 'icons/mob/human_races/r_skrell.dmi' + deform = 'icons/mob/human_races/r_def_skrell.dmi' + eyes = "skrell_eyes_s" + language = "Skrellian" + primitive = /mob/living/carbon/monkey/skrell + unarmed_types = list(/datum/unarmed_attack/punch) + blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ + the royals' or 'Light of the Crown'.

Skrell are a highly advanced and logical race who live under the rule \ + of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \ + herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \ + the secrets of their empire to their allies." + + flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR + + flesh_color = "#8CD7A3" + blood_color = "#1D2CBF" + + reagent_tag = IS_SKRELL + +/datum/species/diona + name = "Diona" + name_plural = "Dionaea" + icobase = 'icons/mob/human_races/r_diona.dmi' + deform = 'icons/mob/human_races/r_def_plant.dmi' + language = "Rootspeak" + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona) + primitive = /mob/living/carbon/alien/diona + slowdown = 7 + rarity_value = 3 + blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \ + species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \ + there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \ + Minoris primary being ringed with a cloud of singing space-station-sized entities.

The Dionaea coexist peacefully with \ + all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \ + even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ + water and other radiation." + + has_organ = list( + "nutrient channel" = /datum/organ/internal/diona/nutrients, + "neural strata" = /datum/organ/internal/diona/strata, + "response node" = /datum/organ/internal/diona/node, + "gas bladder" = /datum/organ/internal/diona/bladder, + "polyp segment" = /datum/organ/internal/diona/polyp, + "anchoring ligament" = /datum/organ/internal/diona/ligament + ) + + warning_low_pressure = 50 + hazard_low_pressure = -1 + + cold_level_1 = 50 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 2000 + heat_level_2 = 3000 + heat_level_3 = 4000 + + body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not + + flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | HAS_EYE_COLOR + + blood_color = "#004400" + flesh_color = "#907E4A" + + reagent_tag = IS_DIONA + +/datum/species/diona/can_understand(var/mob/other) + var/mob/living/carbon/alien/diona/D = other + if(istype(D)) + return 1 + return 0 + +/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) + H.gender = NEUTER + return ..() + +/datum/species/diona/handle_death(var/mob/living/carbon/human/H) + + var/mob/living/carbon/alien/diona/S = new(get_turf(H)) + + if(H.mind) + H.mind.transfer_to(S) + + for(var/mob/living/carbon/alien/diona/D in H.contents) + if(D.client) + D.loc = H.loc + else + del(D) + + H.visible_message("\red[H] splits apart with a wet slithering noise!") + +/datum/species/machine + name = "Machine" + name_plural = "machines" + + icobase = 'icons/mob/human_races/r_machine.dmi' + deform = 'icons/mob/human_races/r_machine.dmi' + language = "Tradeband" + unarmed_types = list(/datum/unarmed_attack/punch) + rarity_value = 2 + + eyes = "blank_eyes" + brute_mod = 0.5 + burn_mod = 1 + + warning_low_pressure = 50 + hazard_low_pressure = 0 + + cold_level_1 = 50 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 500 //gives them about 25 seconds in space before taking damage + heat_level_2 = 1000 + heat_level_3 = 2000 + + synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. + + flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC + + blood_color = "#1F181F" + flesh_color = "#575757" + + has_organ = list() //TODO: Positronic brain. + +/datum/species/machine/handle_death(var/mob/living/carbon/human/H) + ..() + if(flags & IS_SYNTHETIC) + H.h_style = "" + spawn(100) + if(H) H.update_hair() diff --git a/code/modules/mob/living/carbon/human/alien/alien_embryo.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_embryo.dm similarity index 100% rename from code/modules/mob/living/carbon/human/alien/alien_embryo.dm rename to code/modules/mob/living/carbon/human/species/xenomorphs/alien_embryo.dm diff --git a/code/modules/mob/living/carbon/human/alien/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm similarity index 99% rename from code/modules/mob/living/carbon/human/alien/alien_facehugger.dm rename to code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm index d7eaf07a0b..da591f0570 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_facehugger.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm @@ -38,7 +38,7 @@ var/const/MAX_ACTIVE_TIME = 400 Attach(M) /obj/item/clothing/mask/facehugger/New() - if(aliens_allowed) + if(config.aliens_allowed) ..() else del(src) diff --git a/code/modules/mob/living/carbon/human/alien/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm similarity index 99% rename from code/modules/mob/living/carbon/human/alien/alien_powers.dm rename to code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index e23bdfbd8f..d53343b4c2 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -83,7 +83,7 @@ set desc = "Lay an egg to produce huggers to impregnate prey with." set category = "Abilities" - if(!aliens_allowed) + if(!config.aliens_allowed) src << "You begin to lay an egg, but hesitate. You suspect it isn't allowed." verbs -= /mob/living/carbon/human/proc/lay_egg return diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm similarity index 99% rename from code/modules/mob/living/carbon/human/alien/alien_species.dm rename to code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 3e6fada92c..64d5974f25 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -25,7 +25,7 @@ cold_level_2 = -1 cold_level_3 = -1 - flags = NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON + flags = IS_RESTRICTED | NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON reagent_tag = IS_XENOS diff --git a/code/modules/mob/living/carbon/human/alien/alien.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm similarity index 100% rename from code/modules/mob/living/carbon/human/alien/alien.dm rename to code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 27554bfdc5..e69de29bb2 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -1,261 +0,0 @@ -//Species unarmed attacks -/datum/unarmed_attack - var/attack_verb = list("attack") // Empty hand hurt intent verb. - var/attack_noun = list("fist") - var/damage = 0 // Extra empty hand attack damage. - var/attack_sound = "punch" - var/miss_sound = 'sound/weapons/punchmiss.ogg' - var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. - var/sharp = 0 - var/edge = 0 - -/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user) - if(user.restrained()) - return 0 - - // Check if they have a functioning hand. - var/datum/organ/external/E = user.organs_by_name["l_hand"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - E = user.organs_by_name["r_hand"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - return 0 - -/datum/unarmed_attack/proc/get_unarmed_damage() - return damage - -/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) - - var/stun_chance = rand(0, 100) - - if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance - switch(zone) // strong punches can have effects depending on where they hit - if("head", "mouth", "eyes") - // Induce blurriness - target.visible_message("[target] looks dazed.", "You see stars.") - target.apply_effect(attack_damage*2, EYE_BLUR, armour) - if("l_arm", "l_hand") - if (target.l_hand) - // Disarm left hand - target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!") - target.drop_l_hand() - if("r_arm", "r_hand") - if (target.r_hand) - // Disarm right hand - target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!") - target.drop_r_hand() - if("chest") - if(!target.lying) - var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target))) - if(!T.density) - step(target, get_dir(get_turf(user), get_turf(target))) - target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") - else - target.visible_message("[target] slams into [T]!") - if(prob(50)) - target.set_dir(reverse_dir[target.dir]) - target.apply_effect(attack_damage * 0.4, WEAKEN, armour) - if("groin") - target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") - target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) - if("l_leg", "l_foot", "r_leg", "r_foot") - if(!target.lying) - target.visible_message("[src] gives way slightly.") - target.apply_effect(attack_damage*3, AGONY, armour) - else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance) - if(!target.lying) - target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!") - else - target.visible_message("[target] has been weakened!") - target.apply_effect(3, WEAKEN, armour) - -/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/datum/organ/external/affecting = target.get_organ(zone) - user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.display_name]!") - playsound(user.loc, attack_sound, 25, 1, -1) - -/datum/unarmed_attack/bite - attack_verb = list("bit") - attack_sound = 'sound/weapons/bite.ogg' - shredding = 0 - damage = 0 - sharp = 0 - edge = 0 - -/datum/unarmed_attack/bite/sharp //eye teeth - attack_verb = list("bit", "chomped on") - attack_sound = 'sound/weapons/bite.ogg' - shredding = 0 - damage = 5 - sharp = 1 - edge = 1 - -/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) - return 0 - if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth")) - return 0 - return 1 - -/datum/unarmed_attack/punch - attack_verb = list("punched") - attack_noun = list("fist") - damage = 0 - -/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/datum/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.display_name - - attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case. - - if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!") - return 0 - - if(!target.lying) - switch(zone) - if("head", "mouth", "eyes") - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!") - if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!") - if(5) user.visible_message("[user] gave [target] a resounding slap to the face!") - if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot") - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!") - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") - if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!") - else - user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!") - -/datum/unarmed_attack/kick - attack_verb = list("kicked", "kneed") - attack_noun = list("kick", "knee strike") - attack_sound = "swing_hit" - damage = 0 - -/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if (user.legcuffed) - return 0 - - if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin"))) - return 0 - - var/datum/organ/external/E = user.organs_by_name["l_foot"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - E = user.organs_by_name["r_foot"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - return 0 - -/datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user) - var/obj/item/clothing/shoes = user.shoes - if(!istype(shoes)) - return damage - return damage + (shoes ? shoes.unarmed_damage : 0) - -/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/datum/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.display_name - - attack_damage = Clamp(attack_damage, 1, 5) - - switch(attack_damage) - if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!") - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") - if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!") - -/datum/unarmed_attack/stomp - attack_verb = null - attack_noun = list("kick") - attack_sound = "swing_hit" - damage = 0 - -/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if (user.legcuffed) - return 0 - - if (!user.lying && (target.lying || zone in list("l_foot", "r_foot"))) - if(target.grabbed_by == user && target.lying) - return 0 - var/datum/organ/external/E = user.organs_by_name["l_foot"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - E = user.organs_by_name["r_foot"] - if(E && !(E.status & ORGAN_DESTROYED)) - return 1 - - return 0 - -/datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user) - var/obj/item/clothing/shoes = user.shoes - return damage + (shoes ? shoes.unarmed_damage : 0) - -/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/datum/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.display_name - var/obj/item/clothing/shoes = user.shoes - - attack_damage = Clamp(attack_damage, 1, 5) - - switch(attack_damage) - if(1 to 2) user.visible_message("[user] [pick("clomped on", "treaded on")] [target]'s [organ]!") - if(3 to 4) user.visible_message("[user] [pick("stomped down on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!") - if(5) user.visible_message("[user] [pick("landed a devastating stomp on", "stomped down hard on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") - -/datum/unarmed_attack/diona - attack_verb = list("lashed", "bludgeoned") - attack_noun = list("tendril") - damage = 5 - -/datum/unarmed_attack/claws - attack_verb = list("scratched", "clawed", "slashed") - attack_noun = list("claws") - attack_sound = 'sound/weapons/slice.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' - damage = 5 - sharp = 1 - edge = 1 - -/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/skill = user.skills["combat"] - var/datum/organ/external/affecting = target.get_organ(zone) - - if(!skill) skill = 1 - attack_damage = Clamp(attack_damage, 1, 5) - - if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.display_name]!") - return 0 - - switch(zone) - if("head", "mouth", "eyes") - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] scratched [target] across \his cheek!") - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!") - if(5) user.visible_message("[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]") - if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot") - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] scratched [target]'s [affecting.display_name]!") - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!") - if(5) user.visible_message("[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!") - -/datum/unarmed_attack/claws/strong - attack_verb = list("slash") - damage = 10 - shredding = 1 - -/datum/unarmed_attack/bite/strong - attack_verb = list("maul") - damage = 15 - shredding = 1 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 860f5a9a25..88000af9eb 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -68,7 +68,6 @@ There are several things that need to be remembered: > There are also these special cases: update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - update_mutantrace() //handles updating your appearance after setting the mutantrace var UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and @@ -106,30 +105,29 @@ Please contact me on #coderbus IRC. ~Carn x */ //Human Overlays Indexes///////// -#define MUTANTRACE_LAYER 1 -#define MUTATIONS_LAYER 2 -#define DAMAGE_LAYER 3 -#define UNIFORM_LAYER 4 -#define TAIL_LAYER 5 //bs12 specific. this hack is probably gonna come back to haunt me -#define ID_LAYER 6 -#define SHOES_LAYER 7 -#define GLOVES_LAYER 8 -#define SUIT_LAYER 9 -#define GLASSES_LAYER 10 -#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt? -#define SUIT_STORE_LAYER 12 -#define BACK_LAYER 13 -#define HAIR_LAYER 14 //TODO: make part of head layer? -#define EARS_LAYER 15 -#define FACEMASK_LAYER 16 -#define HEAD_LAYER 17 -#define COLLAR_LAYER 18 -#define HANDCUFF_LAYER 19 -#define LEGCUFF_LAYER 20 -#define L_HAND_LAYER 21 -#define R_HAND_LAYER 22 -#define TARGETED_LAYER 23 //BS12: Layer for the target overlay from weapon targeting system -#define TOTAL_LAYERS 23 +#define MUTATIONS_LAYER 1 +#define DAMAGE_LAYER 2 +#define UNIFORM_LAYER 3 +#define TAIL_LAYER 4 //bs12 specific. this hack is probably gonna come back to haunt me +#define ID_LAYER 5 +#define SHOES_LAYER 6 +#define GLOVES_LAYER 7 +#define SUIT_LAYER 8 +#define GLASSES_LAYER 9 +#define BELT_LAYER 10 //Possible make this an overlay of somethign required to wear a belt? +#define SUIT_STORE_LAYER 11 +#define BACK_LAYER 12 +#define HAIR_LAYER 13 //TODO: make part of head layer? +#define EARS_LAYER 14 +#define FACEMASK_LAYER 15 +#define HEAD_LAYER 16 +#define COLLAR_LAYER 17 +#define HANDCUFF_LAYER 18 +#define LEGCUFF_LAYER 19 +#define L_HAND_LAYER 20 +#define R_HAND_LAYER 21 +#define TARGETED_LAYER 22 //BS12: Layer for the target overlay from weapon targeting system +#define TOTAL_LAYERS 22 ////////////////////////////////// /mob/living/carbon/human @@ -271,8 +269,6 @@ proc/get_damage_icon_part(damage_state, body_part) else //BEGIN CACHED ICON GENERATION. - - // Why don't we just make skeletons/shadows/golems a species? ~Z var/race_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) var/deform_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) @@ -478,26 +474,6 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[MUTATIONS_LAYER] = null if(update_icons) update_icons() - -/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) - var/fat - - if( FAT in mutations ) - fat = "fat" - - if(dna) - switch(dna.mutantrace) - if("golem","slime","shadow","adamantine") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") - else - overlays_standing[MUTANTRACE_LAYER] = null - - if(!dna || !(dna.mutantrace in list("golem","metroid"))) - update_body(0) - - update_hair(0) - if(update_icons) update_icons() - //Call when target overlay should be added/removed /mob/living/carbon/human/update_targeted(var/update_icons=1) if (targeted_by && target_locked) @@ -514,8 +490,10 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/regenerate_icons() ..() if(monkeyizing) return + update_mutations(0) - update_mutantrace(0) + update_body(0) + update_hair(0) update_inv_w_uniform(0) update_inv_wear_id(0) update_inv_gloves(0) @@ -972,7 +950,6 @@ proc/get_damage_icon_part(damage_state, body_part) return face_lying_image //Human Overlays Indexes///////// -#undef MUTANTRACE_LAYER #undef MUTATIONS_LAYER #undef DAMAGE_LAYER #undef UNIFORM_LAYER diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index dc81d3d1b5..0c6b9e147f 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -29,7 +29,7 @@ //parse the language code and consume it var/datum/language/speaking = parse_language(message) if (speaking) - message = copytext(message,3) + message = copytext(message,2+length(speaking.key)) whisper_say(message, speaking, alt_name) @@ -49,7 +49,7 @@ else var/adverb = pick("quietly", "softly") verb = "[speaking.speech_verb] [adverb]" - not_heard = "[verb] something [adverb]" + not_heard = "[speaking.speech_verb] something [adverb]" else not_heard = "[verb] something" //TODO get rid of the null language and just prevent speech if language is null @@ -126,7 +126,7 @@ for (var/obj/O in view(message_range, src)) spawn (0) if (O) - O.hear_talk(src, message) //O.hear_talk(src, message, verb, speaking) + O.hear_talk(src, message, verb, speaking) var/list/eavesdropping = hearers(eavesdropping_range, src) eavesdropping -= src diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 0552892025..de34d74afa 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -342,9 +342,8 @@ if(istype(L, /mob/living/carbon/human) && dna) //Ignore slime(wo)men var/mob/living/carbon/human/H = L - if(H.dna) - if(H.dna.mutantrace == "slime") - continue + if(H.species.name == "Slime") + continue if(!L.canmove) // Only one slime can latch on at a time. var/notarget = 0 @@ -575,3 +574,6 @@ if (Leader) return 0 if (holding_still) return 0 return 1 + +/mob/living/carbon/slime/slip() //Can't slip something without legs. + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 47c35b488f..e6a1938a05 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -678,90 +678,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 target.enahnced = 1 del(src)*/ -////////Adamantine Golem stuff I dunno where else to put it - -// This will eventually be removed. - -/obj/item/clothing/under/golem - name = "adamantine skin" - desc = "a golem's skin" - icon_state = "golem" - item_state = "golem" - item_color = "golem" - has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - canremove = 0 - -/obj/item/clothing/suit/golem - name = "adamantine shell" - desc = "a golem's thick outter shell" - icon_state = "golem" - item_state = "golem" - w_class = 4//bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD - slowdown = 1.0 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - canremove = 0 - armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/shoes/golem - name = "golem's feet" - desc = "sturdy adamantine feet" - icon_state = "golem" - item_state = null - canremove = 0 - flags = NOSLIP - slowdown = SHOES_SLOWDOWN+1 - - -/obj/item/clothing/mask/gas/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - canremove = 0 - siemens_coefficient = 0 - unacidable = 1 - -/obj/item/clothing/mask/gas/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - canremove = 0 - siemens_coefficient = 0 - unacidable = 1 - - -/obj/item/clothing/gloves/golem - name = "golem's hands" - desc = "strong adamantine hands" - icon_state = "golem" - item_state = null - siemens_coefficient = 0 - canremove = 0 - - -/obj/item/clothing/head/space/golem - icon_state = "golem" - item_state = "dermal" - item_color = "dermal" - name = "golem's head" - desc = "a golem's head" - canremove = 0 - unacidable = 1 - flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0) - /obj/effect/golemrune anchored = 1 desc = "a strange rune used to create golems. It glows when spirits are nearby." @@ -797,16 +713,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 if(!ghost) user << "The rune fizzles uselessly. There is no spirit nearby." return - var/mob/living/carbon/human/G = new /mob/living/carbon/human - G.dna.mutantrace = "adamantine" - G.real_name = text("Adamantine Golem ([rand(1, 1000)])") - G.equip_to_slot_or_del(new /obj/item/clothing/under/golem(G), slot_w_uniform) - G.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(G), slot_wear_suit) - G.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(G), slot_shoes) - G.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(G), slot_wear_mask) - G.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(G), slot_gloves) - //G.equip_to_slot_or_del(new /obj/item/clothing/head/space/golem(G), slot_head) - G.loc = src.loc + var/mob/living/carbon/human/G = new(src.loc) + G.set_species("Golem") G.key = ghost.key G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost." del (src) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index a45106b7e0..f9b12bc02e 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -82,18 +82,6 @@ update_icons() return -/mob/living/carbon/monkey/unathi/New() - ..() - dna.mutantrace = "lizard" - -/mob/living/carbon/monkey/skrell/New() - ..() - dna.mutantrace = "skrell" - -/mob/living/carbon/monkey/tajara/New() - ..() - dna.mutantrace = "tajaran" - /mob/living/carbon/monkey/movement_delay() var/tally = 0 if(reagents) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5ca7d569dd..b243dcb159 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -838,4 +838,7 @@ return 1 /mob/living/proc/has_eyes() - return 1 \ No newline at end of file + return 1 + +/mob/living/proc/slip(var/slipped_on,stun_duration=8) + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 12b6301c4b..ff948d2387 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -570,7 +570,7 @@ var/list/ai_verbs_default = list( if(!C.can_use()) continue - var/list/tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS,1) + var/list/tempnetwork = difflist(C.network,restricted_camera_networks,1) if(tempnetwork.len) for(var/i in tempnetwork) cameralist[i] = i diff --git a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm index c1f6331372..813d4f2471 100644 --- a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm +++ b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm @@ -7,6 +7,9 @@ /turf var/image/obscured +/turf/drain_power() + return -1 + /turf/proc/visibilityChanged() if(ticker) cameranet.updateVisibility(src) @@ -90,13 +93,13 @@ /obj/machinery/camera/New() ..() cameranet.cameras += src //Camera must be added to global list of all cameras no matter what... - var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) //...but if all of camera's networks are restricted, it only works for specific camera consoles. + var/list/open_networks = difflist(network,restricted_camera_networks) //...but if all of camera's networks are restricted, it only works for specific camera consoles. if(open_networks.len) //If there is at least one open network, chunk is available for AI usage. cameranet.addCamera(src) /obj/machinery/camera/Del() cameranet.cameras -= src - var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) + var/list/open_networks = difflist(network,restricted_camera_networks) if(open_networks.len) cameranet.removeCamera(src) ..() diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 23bfd22e8f..f219d596dc 100755 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -20,7 +20,7 @@ src.laws.add_ion_law(law) for(var/mob/living/silicon/robot/R in mob_list) if(R.lawupdate && (R.connected_ai == src)) - R << "\red " + law + "\red...LAWS UPDATED" + R.show_laws() /mob/living/silicon/ai/proc/ai_checklaws() set category = "AI Commands" diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 2b56af7537..8b0bfdf56b 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,6 +1,6 @@ /mob/living/silicon/gib() ..("gibbed-r") - robogibs(loc, viruses) + gibs(loc, viruses, null, /obj/effect/gibspawner/robot) /mob/living/silicon/dust() ..("dust-r", /obj/effect/decal/remains/robot) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index edab568ea3..c98a8b06b3 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -19,7 +19,7 @@ /obj/item/alarm_frame, /obj/item/firealarm_frame, /obj/item/weapon/table_parts, - /obj/item/weapon/rack_parts, + /obj/item/weapon/table_parts/rack, /obj/item/weapon/camera_assembly, /obj/item/weapon/tank, /obj/item/weapon/circuitboard, diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 0eedb1d9b4..8295687de9 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -166,8 +166,9 @@ src.sight &= ~SEE_MOBS src.sight &= ~SEE_TURFS src.sight &= ~SEE_OBJS - src.see_in_dark = 8 - src.see_invisible = SEE_INVISIBLE_MINIMUM + src.see_in_dark = 8 // see_in_dark means you can FAINTLY see in the dark, humans have a range of 3 or so, tajaran have it at 8 + src.see_invisible = SEE_INVISIBLE_LIVING // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness + // has a "invisible" value of 15 regular_hud_updates() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 2fd766d65a..e8fa3727ce 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -11,25 +11,23 @@ var/obj/item/borg/upgrade/jetpack = null var/list/stacktypes - emp_act(severity) - if(modules) - for(var/obj/O in modules) - O.emp_act(severity) - if(emag) - emag.emp_act(severity) - ..() - return - - - New() -// src.modules += new /obj/item/device/flashlight(src) // Replaced by verb and integrated light which uses power. - src.modules += new /obj/item/device/flash(src) - src.emag = new /obj/item/toy/sword(src) - src.emag.name = "Placeholder Emag Item" -// src.jetpack = new /obj/item/toy/sword(src) -// src.jetpack.name = "Placeholder Upgrade Item" - return +/obj/item/weapon/robot_module/emp_act(severity) + if(modules) + for(var/obj/O in modules) + O.emp_act(severity) + if(emag) + emag.emp_act(severity) + ..() + return +/obj/item/weapon/robot_module/New() + ..() + // Build initial inventory. + if(stacktypes && stacktypes.len) + for(var/stack_type in stacktypes) + var/obj/item/stack/new_stack = new stack_type (src) + new_stack.amount = stacktypes[stack_type] + modules |= new_stack /obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R) @@ -42,7 +40,7 @@ if(!S) src.modules -= null S = new T(src) - src.modules += S + src.modules |= S S.amount = 1 if(S && S.amount < stacktypes[T]) @@ -64,20 +62,19 @@ R.add_language("Skrellian", 0) R.add_language("Gutter", 0) - /obj/item/weapon/robot_module/standard name = "standard robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/melee/baton/loaded(src) - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.emag = new /obj/item/weapon/melee/energy/sword(src) - return +/obj/item/weapon/robot_module/standard/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/melee/baton/loaded(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.emag = new /obj/item/weapon/melee/energy/sword(src) + return /obj/item/weapon/robot_module/surgeon name = "surgeon robot module" @@ -86,29 +83,27 @@ /obj/item/stack/nanopaste = 5 ) - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) - src.modules += new /obj/item/weapon/scalpel(src) - src.modules += new /obj/item/weapon/hemostat(src) - src.modules += new /obj/item/weapon/retractor(src) - src.modules += new /obj/item/weapon/cautery(src) - src.modules += new /obj/item/weapon/bonegel(src) - src.modules += new /obj/item/weapon/FixOVein(src) - src.modules += new /obj/item/weapon/bonesetter(src) - src.modules += new /obj/item/weapon/circular_saw(src) - src.modules += new /obj/item/weapon/surgicaldrill(src) - src.modules += new /obj/item/weapon/extinguisher/mini(src) - src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src) - src.modules += new /obj/item/stack/nanopaste(src) - - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - - src.emag.reagents.add_reagent("pacid", 250) - src.emag.name = "Polyacid spray" - return +/obj/item/weapon/robot_module/surgeon/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) + src.modules += new /obj/item/weapon/scalpel(src) + src.modules += new /obj/item/weapon/hemostat(src) + src.modules += new /obj/item/weapon/retractor(src) + src.modules += new /obj/item/weapon/cautery(src) + src.modules += new /obj/item/weapon/bonegel(src) + src.modules += new /obj/item/weapon/FixOVein(src) + src.modules += new /obj/item/weapon/bonesetter(src) + src.modules += new /obj/item/weapon/circular_saw(src) + src.modules += new /obj/item/weapon/surgicaldrill(src) + src.modules += new /obj/item/weapon/extinguisher/mini(src) + src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src) + src.modules += new /obj/item/stack/nanopaste(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + return /obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R) if(src.emag) @@ -124,27 +119,25 @@ /obj/item/stack/medical/splint = 5 ) - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/hud/med(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/device/reagent_scanner/adv(src) - src.modules += new /obj/item/roller_holder(src) - src.modules += new /obj/item/stack/medical/ointment(src) - src.modules += new /obj/item/stack/medical/bruise_pack(src) - src.modules += new /obj/item/stack/medical/splint(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/extinguisher/mini(src) - - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - - src.emag.reagents.add_reagent("pacid", 250) - src.emag.name = "Polyacid spray" - return +/obj/item/weapon/robot_module/crisis/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/hud/med(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/device/reagent_scanner/adv(src) + src.modules += new /obj/item/roller_holder(src) + src.modules += new /obj/item/stack/medical/ointment(src) + src.modules += new /obj/item/stack/medical/bruise_pack(src) + src.modules += new /obj/item/stack/medical/splint(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/extinguisher/mini(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + return /obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R) @@ -171,17 +164,17 @@ /obj/item/stack/rods = 50 ) - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/weapon/rcd/borg(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) - src.modules += new /obj/item/device/pipe_painter(src) +/obj/item/weapon/robot_module/construction/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/rcd/borg(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/device/pipe_painter(src) /obj/item/weapon/robot_module/engineering name = "engineering robot module" @@ -195,57 +188,39 @@ /obj/item/stack/tile/plasteel = 15 ) - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/weapon/weldingtool/largetank(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/weapon/wirecutters(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/t_scanner(src) - src.modules += new /obj/item/device/analyzer(src) - src.modules += new /obj/item/taperoll/engineering(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/weapon/matter_decompiler(src) - src.modules += new /obj/item/device/pipe_painter(src) - - src.emag = new /obj/item/borg/stun(src) - - var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src) - M.amount = 50 - src.modules += M - - var/obj/item/stack/sheet/glass/reinforced/cyborg/R = new (src) - R.amount = 50 - src.modules += R - - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src) - G.amount = 50 - src.modules += G - - var/obj/item/stack/cable_coil/robot/W = new /obj/item/stack/cable_coil/robot(src) - W.amount = 50 - src.modules += W - - return +/obj/item/weapon/robot_module/engineering/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/weldingtool/largetank(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/wirecutters(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/device/t_scanner(src) + src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/taperoll/engineering(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/weapon/matter_decompiler(src) + src.modules += new /obj/item/device/pipe_painter(src) + src.emag = new /obj/item/borg/stun(src) + return /obj/item/weapon/robot_module/security name = "security robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/hud/sec(src) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/melee/baton/robot(src) - src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) - src.modules += new /obj/item/taperoll/police(src) - src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) - return +/obj/item/weapon/robot_module/security/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/hud/sec(src) + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/weapon/melee/baton/robot(src) + src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) + src.modules += new /obj/item/taperoll/police(src) + src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) + return /obj/item/weapon/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R) var/obj/item/device/flash/F = locate() in src.modules @@ -265,18 +240,17 @@ /obj/item/weapon/robot_module/janitor name = "janitorial robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/soap/nanotrasen(src) - src.modules += new /obj/item/weapon/storage/bag/trash(src) - src.modules += new /obj/item/weapon/mop(src) - src.modules += new /obj/item/device/lightreplacer(src) - src.emag = new /obj/item/weapon/reagent_containers/spray(src) - - src.emag.reagents.add_reagent("lube", 250) - src.emag.name = "Lube spray" - return +/obj/item/weapon/robot_module/janitor/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/soap/nanotrasen(src) + src.modules += new /obj/item/weapon/storage/bag/trash(src) + src.modules += new /obj/item/weapon/mop(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("lube", 250) + src.emag.name = "Lube spray" + return /obj/item/weapon/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R) var/obj/item/device/lightreplacer/LR = locate() in src.modules @@ -288,65 +262,64 @@ /obj/item/weapon/robot_module/butler name = "service robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) - src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) +/obj/item/weapon/robot_module/butler/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) + src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M + var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) + M.stored_matter = 30 + src.modules += M - src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) + src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L + var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) + L.lit = 1 + src.modules += L - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) - src.emag = new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) + src.modules += new /obj/item/weapon/tray/robotray(src) + src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) + src.emag = new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) - var/datum/reagents/R = new/datum/reagents(50) - src.emag.reagents = R - R.my_atom = src.emag - R.add_reagent("beer2", 50) - src.emag.name = "Mickey Finn's Special Brew" - return + var/datum/reagents/R = new/datum/reagents(50) + src.emag.reagents = R + R.my_atom = src.emag + R.add_reagent("beer2", 50) + src.emag.name = "Mickey Finn's Special Brew" + return - add_languages(var/mob/living/silicon/robot/R) - //full set of languages - R.add_language("Sol Common", 1) - R.add_language("Sinta'unathi", 1) - R.add_language("Siik'maas", 1) - R.add_language("Siik'tajr", 0) - R.add_language("Skrellian", 1) - R.add_language("Rootspeak", 1) - R.add_language("Tradeband", 1) - R.add_language("Gutter", 1) +/obj/item/weapon/robot_module/butler/add_languages(var/mob/living/silicon/robot/R) + //full set of languages + R.add_language("Sol Common", 1) + R.add_language("Sinta'unathi", 1) + R.add_language("Siik'maas", 1) + R.add_language("Siik'tajr", 0) + R.add_language("Skrellian", 1) + R.add_language("Rootspeak", 1) + R.add_language("Tradeband", 1) + R.add_language("Gutter", 1) /obj/item/weapon/robot_module/clerical name = "clerical robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/pen/robopen(src) - src.modules += new /obj/item/weapon/form_printer(src) - src.modules += new /obj/item/weapon/gripper/paperwork(src) +/obj/item/weapon/robot_module/clerical/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/pen/robopen(src) + src.modules += new /obj/item/weapon/form_printer(src) + src.modules += new /obj/item/weapon/gripper/paperwork(src) + src.emag = new /obj/item/weapon/stamp/denied(src) - src.emag = new /obj/item/weapon/stamp/denied(src) - - add_languages(var/mob/living/silicon/robot/R) - R.add_language("Sol Common", 1) - R.add_language("Sinta'unathi", 1) - R.add_language("Siik'maas", 1) - R.add_language("Siik'tajr", 0) - R.add_language("Skrellian", 1) - R.add_language("Rootspeak", 1) - R.add_language("Tradeband", 1) - R.add_language("Gutter", 1) +/obj/item/weapon/robot_module/clerical/add_languages(var/mob/living/silicon/robot/R) + R.add_language("Sol Common", 1) + R.add_language("Sinta'unathi", 1) + R.add_language("Siik'maas", 1) + R.add_language("Siik'tajr", 0) + R.add_language("Skrellian", 1) + R.add_language("Rootspeak", 1) + R.add_language("Tradeband", 1) + R.add_language("Gutter", 1) /obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R) var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules @@ -358,38 +331,35 @@ /obj/item/weapon/robot_module/miner name = "miner robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/weapon/storage/bag/ore(src) - src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) - src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/weapon/gripper/miner(src) - src.modules += new /obj/item/weapon/mining_scanner(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - return +/obj/item/weapon/robot_module/miner/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + return /obj/item/weapon/robot_module/syndicate name = "illegal robot module" - New(var/mob/living/silicon/robot/R) - loc = R - - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/melee/energy/sword(src) - src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) - src.modules += new /obj/item/weapon/card/emag(src) - - var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) - src.modules += jetpack - R.internals = jetpack - - return +/obj/item/weapon/robot_module/syndicate/New(var/mob/living/silicon/robot/R) + ..() + loc = R + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/melee/energy/sword(src) + src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) + src.modules += new /obj/item/weapon/card/emag(src) + var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) + src.modules += jetpack + R.internals = jetpack + return /obj/item/weapon/robot_module/syndicate/add_languages(var/mob/living/silicon/robot/R) //full set of languages @@ -403,18 +373,16 @@ /obj/item/weapon/robot_module/combat name = "combat robot module" - New() - src.modules += new /obj/item/device/flashlight(src) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/thermal(src) - src.modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) - src.modules += new /obj/item/borg/combat/shield(src) - src.modules += new /obj/item/borg/combat/mobility(src) - src.modules += new /obj/item/weapon/wrench(src) //Is a combat android really going to be stopped by a chair? - src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) - return - +/obj/item/weapon/robot_module/combat/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/thermal(src) + src.modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/borg/combat/shield(src) + src.modules += new /obj/item/borg/combat/mobility(src) + src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) + return /obj/item/weapon/robot_module/drone name = "drone module" @@ -430,30 +398,23 @@ /obj/item/stack/cable_coil/robot = 30 ) - New() - src.modules += new /obj/item/weapon/weldingtool(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/weapon/wirecutters(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/lightreplacer(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/weapon/matter_decompiler(src) - src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src) +/obj/item/weapon/robot_module/drone/New() + ..() + src.modules += new /obj/item/weapon/weldingtool(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/wirecutters(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/weapon/matter_decompiler(src) + src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src) + src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + src.emag.name = "Plasma Cutter" - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - src.emag.name = "Plasma Cutter" - - for(var/T in stacktypes) - var/obj/item/stack/sheet/W = new T(src) - W.amount = stacktypes[T] - src.modules += W - - return - - add_languages(var/mob/living/silicon/robot/R) - return //not much ROM to spare in that tiny microprocessor! +/obj/item/weapon/robot_module/drone/add_languages(var/mob/living/silicon/robot/R) + return //not much ROM to spare in that tiny microprocessor! /obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R) var/obj/item/weapon/reagent_containers/spray/cleaner/C = locate() in src.modules diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 22db25d678..ba5b0ad4f8 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -72,7 +72,7 @@ var/datum/language/speaking = parse_language(message) if (speaking) verb = speaking.speech_verb - message = copytext(message,3) + message = trim(copytext(message,2+length(speaking.key))) if(speaking.flags & HIVEMIND) speaking.broadcast(src,trim(message)) @@ -102,7 +102,7 @@ if("department") switch(bot_type) if(IS_AI) - return AI.holopad_talk(message) + return AI.holopad_talk(message, verb, speaking) if(IS_ROBOT) log_say("[key_name(src)] : [message]") return R.radio.talk_into(src,message,message_mode,verb,speaking) @@ -110,7 +110,7 @@ log_say("[key_name(src)] : [message]") return P.radio.talk_into(src,message,message_mode,verb,speaking) return 0 - + if("general") switch(bot_type) if(IS_AI) @@ -149,7 +149,7 @@ return ..(message,speaking,verb) //For holopads only. Usable by AI. -/mob/living/silicon/ai/proc/holopad_talk(var/message) +/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/language/speaking) log_say("[key_name(src)] : [message]") @@ -160,16 +160,22 @@ var/obj/machinery/hologram/holopad/T = src.holo if(T && T.hologram && T.master == src)//If there is a hologram and its master is the user. - var/verb = say_quote(message) //Human-like, sorta, heard by those who understand humans. - var/rendered_a = "[name] [verb], \"[message]\"" - + var/rendered_a //Speach distorted, heard by those who do not understand AIs. var/message_stars = stars(message) - var/rendered_b = "[voice_name] [verb], \"[message_stars]\"" + var/rendered_b + + if(speaking) + rendered_a = "[name] [speaking.format_message(message, verb)]" + rendered_b = "[voice_name] [speaking.format_message(message_stars, verb)]" + src << "Holopad transmitted, [real_name] [speaking.format_message(message, verb)]"//The AI can "hear" its own message. + else + rendered_a = "[name] [verb], \"[message]\"" + rendered_b = "[voice_name] [verb], \"[message_stars]\"" + src << "Holopad transmitted, [real_name] [verb], \"[message]\""//The AI can "hear" its own message. - src << "Holopad transmitted, [real_name] [verb], [message]"//The AI can "hear" its own message. for(var/mob/M in hearers(T.loc))//The location is the object, default distance. if(M.say_understands(src))//If they understand AI speak. Humans and the like will be able to. M.show_message(rendered_a, 2) @@ -182,6 +188,34 @@ return return 1 +/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad. + + log_emote("[key_name(src)] : [message]") + + message = trim(message) + + if (!message) + return + + var/obj/machinery/hologram/holopad/T = src.holo + if(T && T.hologram && T.master == src) + var/rendered = "[name] [message]" + src << "Holopad action relayed, [real_name] [message]" + + for(var/mob/M in viewers(T.loc)) + M.show_message(rendered, 2) + else //This shouldn't occur, but better safe then sorry. + src << "No holopad connected." + return + return 1 + +/mob/living/silicon/ai/emote(var/act, var/type, var/message) + var/obj/machinery/hologram/holopad/T = src.holo + if(T && T.hologram && T.master == src) //Is the AI using a holopad? + src.holopad_emote(message) + else //Emote normally, then. + ..() + #undef IS_AI #undef IS_ROBOT #undef IS_PAI diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 65f2d93acc..a22bcfd02d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -203,7 +203,8 @@ var/dat = "Known Languages

" for(var/datum/language/L in languages) - dat += "[L.name] (:[L.key])
Speech Synthesizer: [(L in speech_synthesizer_langs)? "YES":"NOT SUPPORTED"]
[L.desc]

" + if(!(L.flags & NONGLOBAL)) + dat += "[L.name] (:[L.key])
Speech Synthesizer: [(L in speech_synthesizer_langs)? "YES":"NOT SUPPORTED"]
[L.desc]

" src << browse(dat, "window=checklanguage") return @@ -277,4 +278,4 @@ if (stat != 2) adjustBruteLoss(30) - updatehealth() \ No newline at end of file + updatehealth() diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 4122e3a210..1aff173aa7 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -208,7 +208,7 @@ held_item.loc = src.loc held_item = null - robogibs(src.loc, viruses) + gibs(loc, viruses, null, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics. src.Del() return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 831f3aa83a..491d5cdf74 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -95,7 +95,10 @@ turns_since_move++ if(turns_since_move >= turns_per_move) if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled - Move(get_step(src,pick(cardinal))) + /var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND + moving_to = pick(cardinal) + dir = moving_to //How about we turn them the direction they are moving, yay. + Move(get_step(src,moving_to)) turns_since_move = 0 //Speaking @@ -198,9 +201,6 @@ ..() /mob/living/simple_animal/gib() - if(meat_amount && meat_type) - for(var/i = 0; i < meat_amount; i++) - new meat_type(src.loc) ..(icon_gib,1) /mob/living/simple_animal/emote(var/act, var/type, var/desc) @@ -228,7 +228,7 @@ if("help") if (health > 0) M.visible_message("\blue [M] [response_help] \the [src]") - + if("disarm") M.visible_message("\blue [M] [response_disarm] \the [src]") //TODO: Push the mob away or something @@ -255,43 +255,43 @@ return -/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri +/mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user) //Marker -Agouri + if(istype(O, /obj/item/stack/medical)) - if(stat != DEAD) - var/obj/item/stack/medical/MED = O - if(health < maxHealth) - if(MED.get_amount() >= 1) - adjustBruteLoss(-MED.heal_brute) - MED.use(1) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\blue [user] applies the [MED] on [src]") + if(stat != DEAD && health < maxHealth) + var/obj/item/stack/medical/medical_pack = O + if(medical_pack.use(1)) + adjustBruteLoss(-medical_pack.heal_brute) + visible_message("\The [user] applies the [medical_pack] to \the [src].") else - user << "\blue this [src] is dead, medical items won't bring it back to life." - if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. - if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) - new meat_type (get_turf(src)) - if(prob(95)) + user << "\The [src] cannot benefit from medical items in its current state." + return + + else if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) + var/actual_meat_amount = max(1,(meat_amount/2)) + if(meat_type && actual_meat_amount>0 && (stat == DEAD)) + for(var/i=0;i[user] chops up \the [src]!") + new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) del(src) - return - gib() + else + user.visible_message("[user] butchers \the [src] messily!") + gib() + return + + if(O.force) + var/damage = O.force + if (O.damtype == HALLOSS) + damage = 0 + adjustBruteLoss(damage) + visible_message("\The [src] has been attacked with \the [O] by [user].") else - if(O.force) - var/damage = O.force - if (O.damtype == HALLOSS) - damage = 0 - adjustBruteLoss(damage) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - - + user << "This weapon is ineffective; it does no damage." + visible_message("\The [user] gently taps [src] with the [O].") /mob/living/simple_animal/movement_delay() var/tally = 0 //Incase I need to add stuff other than "speed" later @@ -371,4 +371,4 @@ message = capitalize(trim_left(message)) - ..(message, null, verb) \ No newline at end of file + ..(message, null, verb) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index aee673df09..f414fbf915 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -392,14 +392,14 @@ var/list/slot_equipment_priority = list( \ set name = "Respawn" set category = "OOC" - if (!( abandon_allowed )) - usr << "\blue Respawn is disabled." + if (!( config.abandon_allowed )) + usr << "Respawn is disabled." return if ((stat != 2 || !( ticker ))) - usr << "\blue You must be dead to use this!" + usr << "You must be dead to use this!" return if (ticker.mode.name == "meteor" || ticker.mode.name == "epidemic") //BS12 EDIT - usr << "\blue Respawn is disabled for this roundtype." + usr << "Respawn is disabled for this roundtype." return else var/deathtime = world.time - src.timeofdeath @@ -1159,4 +1159,4 @@ mob/proc/yank_out_object() return 0 /mob/proc/updateicon() - return + return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a4382c16e5..a07e538e1e 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -145,7 +145,7 @@ usr << "\red The round is either not ready, or has already finished..." return - if(client.prefs.species != "Human") + if(client.prefs.species != "Human" && !check_rights(R_ADMIN, 0)) if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist) src << alert("You are currently not whitelisted to play [client.prefs.species].") return 0 @@ -162,8 +162,11 @@ if(href_list["SelectedJob"]) - if(!enter_allowed) - usr << "\blue There is an administrative lock on entering the game!" + if(!config.enter_allowed) + usr << "There is an administrative lock on entering the game!" + return + else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) + usr << "The station is currently exploding. Joining would go poorly." return if(client.prefs.species != "Human") @@ -172,8 +175,8 @@ return 0 var/datum/species/S = all_species[client.prefs.species] - if(!(S.flags & IS_WHITELISTED)) - src << alert("Your current species,[client.prefs.species], is not available for play on the station.") + if(!(S.flags & CAN_JOIN)) + src << alert("Your current species, [client.prefs.species], is not available for play on the station.") return 0 AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) @@ -293,8 +296,8 @@ if(!ticker || ticker.current_state != GAME_STATE_PLAYING) usr << "\red The round is either not ready, or has already finished..." return 0 - if(!enter_allowed) - usr << "\blue There is an administrative lock on entering the game!" + if(!config.enter_allowed) + usr << "There is an administrative lock on entering the game!" return 0 if(!IsJobAvailable(rank)) src << alert("[rank] is not available. Please try another.") diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 10e6c4266c..532ffd4f2d 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -44,16 +44,16 @@ /mob/proc/say_dead(var/message) if(say_disabled) //This is here to try to identify lag problems - usr << "\red Speech is currently admin-disabled." + usr << "Speech is currently admin-disabled." return if(!src.client.holder) - if(!dsay_allowed) - src << "\red Deadchat is globally muted" + if(!config.dsay_allowed) + src << "Deadchat is globally muted." return if(client && !(client.prefs.toggles & CHAT_DEAD)) - usr << "\red You have deadchat muted." + usr << "You have deadchat muted." return say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], \"[message]\"", src) @@ -79,6 +79,9 @@ return 1 return 0 + if(speaking.flags & INNATE) + return 1 + //Language check. for(var/datum/language/L in src.languages) if(speaking.name == L.name) @@ -142,6 +145,9 @@ //parses the language code (e.g. :j) from text, such as that supplied to say. //returns the language object only if the code corresponds to a language that src can speak, otherwise null. /mob/proc/parse_language(var/message) + if(length(message) >= 1 && copytext(message,1,2) == "!") + return all_languages["Noise"] + if(length(message) >= 2) var/language_prefix = lowertext(copytext(message, 1 ,3)) var/datum/language/L = language_keys[language_prefix] diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index ae70f485d9..0024865acf 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -39,6 +39,7 @@ /obj/item/organ/diona/removed(var/mob/living/target,var/mob/living/user) + ..() var/mob/living/carbon/human/H = target if(!istype(target)) del(src) @@ -51,10 +52,10 @@ if(!diona) del(src) - var/mob/living/carbon/alien/diona/D = new(get_turf(src)) - diona.request_player(D) - - del(src) + spawn(1) // So it has time to be thrown about by the gib() proc. + var/mob/living/carbon/alien/diona/D = new(get_turf(src)) + diona.request_player(D) + del(src) // These are different to the standard diona organs as they have a purpose in other // species (absorbing radiation and light respectively) @@ -221,6 +222,8 @@ icon_state = "brain-prosthetic" organ_tag = "stack" robotic = 2 + prosthetic_name = null + prosthetic_icon = null /obj/item/organ/stack/vox name = "vox cortical stack" \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 7816b914cf..24b84050d0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -598,10 +598,7 @@ Note that amputating the affected organ does in fact remove the infection from t var/obj/organ //Dropped limb object switch(body_part) if(HEAD) - if(owner.species.flags & IS_SYNTHETIC) - organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner) - else - organ= new /obj/item/weapon/organ/head(owner.loc, owner) + organ= new /obj/item/weapon/organ/head(owner.loc, owner) owner.u_equip(owner.glasses) owner.u_equip(owner.head) owner.u_equip(owner.l_ear) @@ -662,10 +659,9 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [display_name] goes flying off!",\ "You hear a terrible sound of ripping tendons and flesh.") - if(organ) - //Throw organs around - var/lol = pick(cardinal) - step(organ,lol) + //Throw organs around + if(istype(owner.loc,/turf) && organ) + step(organ,pick(cardinal)) owner.update_body(1) @@ -1004,6 +1000,8 @@ Note that amputating the affected organ does in fact remove the infection from t obj/item/weapon/organ icon = 'icons/mob/human_races/r_human.dmi' + var/op_stage = 0 + var/list/organs_internal = list() obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) ..(loc) @@ -1014,9 +1012,18 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) blood_DNA = list() blood_DNA[H.dna.unique_enzymes] = H.dna.b_type - //Forming icon for the limb + // Transferring over organs from the host. + for(var/datum/organ/internal/I in H.internal_organs) + if(I.parent_organ != name) + continue + var/obj/item/organ/current_organ = I.remove() + current_organ.removed(H) + current_organ.loc = src + if(current_organ.organ_data) + organs_internal |= current_organ.organ_data - //Setting base icon for this mob's race + // Forming icon for the limb + // Setting base icon for this mob's race var/icon/base if(H.species && H.species.icobase) base = icon(H.species.icobase) @@ -1069,15 +1076,9 @@ obj/item/weapon/organ/r_hand obj/item/weapon/organ/r_leg name = "right leg" icon_state = "r_leg" - obj/item/weapon/organ/head name = "head" icon_state = "head_m" - var/mob/living/carbon/brain/brainmob - var/brain_op_stage = 0 - -/obj/item/weapon/organ/head/posi - name = "robotic head" obj/item/weapon/organ/head/New(loc, mob/living/carbon/human/H) if(istype(H)) @@ -1101,81 +1102,32 @@ obj/item/weapon/organ/head/New(loc, mob/living/carbon/human/H) hair.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD) overlays.Add(hair) //icon.Blend(hair, ICON_OVERLAY) - spawn(5) - if(brainmob && brainmob.client) - brainmob.client.screen.len = null //clear the hud - - //if(ishuman(H)) - // if(H.gender == FEMALE) - // H.icon_state = "head_f" - // H.overlays += H.generate_head_icon() - transfer_identity(H) name = "[H.real_name]'s head" - H.regenerate_icons() - brainmob.stat = 2 - brainmob.death() - -obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head - brainmob = new(src) - brainmob.name = H.real_name - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - if(H.mind) - H.mind.transfer_to(brainmob) - brainmob.container = src - -obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/scalpel)) - switch(brain_op_stage) - if(0) - for(var/mob/O in (oviewers(brainmob) - user)) - O.show_message("\red [brainmob] is beginning to have \his head cut open with [W] by [user].", 1) - brainmob << "\red [user] begins to cut open your head with [W]!" - user << "\red You cut [brainmob]'s head open with [W]!" - - brain_op_stage = 1 - - if(2) - for(var/mob/O in (oviewers(brainmob) - user)) - O.show_message("\red [brainmob] is having \his connections to the brain delicately severed with [W] by [user].", 1) - brainmob << "\red [user] begins to cut open your head with [W]!" - user << "\red You cut [brainmob]'s head open with [W]!" - - brain_op_stage = 3.0 - else - ..() - else if(istype(W,/obj/item/weapon/circular_saw)) - switch(brain_op_stage) - if(1) - for(var/mob/O in (oviewers(brainmob) - user)) - O.show_message("\red [brainmob] has \his head sawed open with [W] by [user].", 1) - brainmob << "\red [user] begins to saw open your head with [W]!" - user << "\red You saw [brainmob]'s head open with [W]!" - - brain_op_stage = 2 - if(3) - for(var/mob/O in (oviewers(brainmob) - user)) - O.show_message("\red [brainmob] has \his spine's connection to the brain severed with [W] by [user].", 1) - brainmob << "\red [user] severs your brain's connection to the spine with [W]!" - user << "\red You sever [brainmob]'s brain's connection to the spine with [W]!" - - user.attack_log += "\[[time_stamp()]\] Debrained [brainmob.name] ([brainmob.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)])" - brainmob.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)])" - msg_admin_attack("[user] ([user.ckey]) debrained [brainmob] ([brainmob.ckey]) (INTENT: [uppertext(user.a_intent)]) (JMP)") - - //TODO: ORGAN REMOVAL UPDATE. - if(istype(src,/obj/item/weapon/organ/head/posi)) - var/obj/item/device/mmi/digital/posibrain/B = new(loc) - B.transfer_identity(brainmob) +obj/item/weapon/organ/attackby(obj/item/weapon/W as obj, mob/user as mob) + switch(op_stage) + if(0) + if(istype(W,/obj/item/weapon/scalpel)) + user.visible_message("[user] cuts [src] open with [W]!") + op_stage++ + return + if(1) + if(istype(W,/obj/item/weapon/retractor)) + user.visible_message("[user] cracks [src] open like an egg with [W]!") + op_stage++ + return + if(2) + if(istype(W,/obj/item/weapon/hemostat)) + if(contents.len) + var/obj/item/removing = pick(contents) + removing.loc = src.loc + if(istype(removing,/obj/item/organ)) + var/obj/item/organ/removed_organ = removing + organs_internal -= removed_organ.organ_data + user.visible_message("[user] extracts [removing] from [src] with [W]!") else - var/obj/item/organ/brain/B = new(loc) - B.transfer_identity(brainmob) - - brain_op_stage = 4.0 - else - ..() - else - ..() + user.visible_message("[user] fishes around fruitlessly in [src] with [W].") + return + ..() \ No newline at end of file diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 183197dfbb..b6154242b9 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -16,6 +16,7 @@ var/rejecting // Is this organ already being rejected? var/obj/item/organ/organ_holder // If not in a body, held in this item. var/list/transplant_data + /datum/organ/internal/proc/rejuvenate() damage=0 @@ -250,6 +251,14 @@ /datum/organ/internal/brain/xeno removed_type = /obj/item/organ/brain/xeno +/datum/organ/internal/brain/golem + name = "golem chem" + removed_type = /obj/item/organ/brain/golem + +/datum/organ/internal/brain/slime + name = "slime core" + removed_type = /obj/item/organ/brain/slime + /datum/organ/internal/eyes name = "eyes" parent_organ = "head" @@ -271,7 +280,13 @@ if(!removed_type) return 0 - var/obj/item/organ/removed_organ = new removed_type(get_turf(user)) + var/turf/target_loc + if(user) + target_loc = get_turf(user) + else + target_loc = get_turf(owner) + + var/obj/item/organ/removed_organ = new removed_type(target_loc) if(istype(removed_organ)) removed_organ.organ_data = src diff --git a/code/modules/organs/organ_objects.dm b/code/modules/organs/organ_objects.dm index 178958d936..610e702ad1 100644 --- a/code/modules/organs/organ_objects.dm +++ b/code/modules/organs/organ_objects.dm @@ -151,12 +151,25 @@ /obj/item/organ/appendix name = "appendix" -/obj/item/organ/proc/removed(var/mob/living/target,var/mob/living/user) +/obj/item/organ/proc/removed(var/mob/living/carbon/human/target,var/mob/living/user) - if(!target || !user) + if(!istype(target) || !organ_data) return - if(organ_data.vital) + target.internal_organs_by_name[organ_tag] = null + target.internal_organs_by_name -= organ_tag + target.internal_organs -= organ_data + + var/datum/organ/external/affected = target.get_organ(organ_data.parent_organ) + affected.internal_organs -= organ_data + + loc = target.loc + organ_data.rejecting = null + var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list + if(!organ_blood || !organ_blood.data["blood_DNA"]) + target.vessel.trans_to(src, 5, 1, 1) + + if(target && user && organ_data.vital) user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)])" target.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])" msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)]) (JMP)") @@ -196,18 +209,40 @@ H.b_eyes = 0 H.update_body() -/obj/item/organ/proc/replaced(var/mob/living/target) - return +/obj/item/organ/proc/replaced(var/mob/living/carbon/human/target,var/datum/organ/external/affected) -/obj/item/organ/eyes/replaced(var/mob/living/target) + if(!istype(target)) return + + var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in reagents.reagent_list + if(!transplant_blood) + organ_data.transplant_data = list() + organ_data.transplant_data["species"] = target.species.name + organ_data.transplant_data["blood_type"] = target.dna.b_type + organ_data.transplant_data["blood_DNA"] = target.dna.unique_enzymes + else + organ_data.transplant_data = list() + organ_data.transplant_data["species"] = transplant_blood.data["species"] + organ_data.transplant_data["blood_type"] = transplant_blood.data["blood_type"] + organ_data.transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"] + + organ_data.organ_holder = null + organ_data.owner = target + target.internal_organs |= organ_data + affected.internal_organs |= organ_data + target.internal_organs_by_name[organ_tag] = organ_data + organ_data.status |= ORGAN_CUT_AWAY + + del(src) + +/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) // Apply our eye colour to the target. - var/mob/living/carbon/human/H = target - if(istype(H) && eye_colour) - H.r_eyes = eye_colour[1] - H.g_eyes = eye_colour[2] - H.b_eyes = eye_colour[3] - H.update_body() + if(istype(target) && eye_colour) + target.r_eyes = eye_colour[1] + target.g_eyes = eye_colour[2] + target.b_eyes = eye_colour[3] + target.update_body() + ..() /obj/item/organ/proc/bitten(mob/user) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 72f827f7ed..440d48aca1 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -193,6 +193,10 @@ updateinfolinks() update_icon() +/obj/item/weapon/paper/proc/get_signature(var/obj/item/weapon/pen/P, mob/user as mob) + if(P) + return P.get_signature(user) + return (user && user.real_name) ? user.real_name : "Anonymous" /obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob, var/iscrayon = 0) // t = copytext(sanitize(t),1,MAX_MESSAGE_LEN) @@ -208,7 +212,7 @@ t = replacetext(t, "\[/u\]", "") t = replacetext(t, "\[large\]", "") t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[sign\]", "[user ? user.real_name : "Anonymous"]") + t = replacetext(t, "\[sign\]", "[get_signature(P, user)]") t = replacetext(t, "\[field\]", "") t = replacetext(t, "\[h1\]", "

") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 6197956587..dd60029382 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -1,114 +1,140 @@ -/* Pens! - * Contains: - * Pens - * Sleepy Pens - * Parapens - */ - - -/* - * Pens - */ -/obj/item/weapon/pen - desc = "It's a normal black ink pen." - name = "pen" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - flags = FPRINT | TABLEPASS - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 0 - w_class = 1.0 - throw_speed = 7 - throw_range = 15 - matter = list("metal" = 10) - var/colour = "black" //what colour the ink is! - pressure_resistance = 2 - - -/obj/item/weapon/pen/blue - desc = "It's a normal blue ink pen." - icon_state = "pen_blue" - colour = "blue" - -/obj/item/weapon/pen/red - desc = "It's a normal red ink pen." - icon_state = "pen_red" - colour = "red" - -/obj/item/weapon/pen/invisible - desc = "It's an invisble pen marker." - icon_state = "pen" - colour = "white" - - -/obj/item/weapon/pen/attack(mob/M as mob, mob/user as mob) - if(!ismob(M)) - return - user << "You stab [M] with the pen." -// M << "\red You feel a tiny prick!" //That's a whole lot of meta! - M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") - return - - -/* - * Sleepy Pens - */ -/obj/item/weapon/pen/sleepypen - desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - flags = FPRINT | TABLEPASS | OPENCONTAINER - slot_flags = SLOT_BELT - origin_tech = "materials=2;syndicate=5" - - -/obj/item/weapon/pen/sleepypen/New() - var/datum/reagents/R = new/datum/reagents(30) //Used to be 300 - reagents = R - R.my_atom = src - R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N - ..() - return - - -/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) - if(!(istype(M,/mob))) - return - ..() - if(reagents.total_volume) - if(M.reagents) reagents.trans_to(M, 50) //used to be 150 - return - - -/* - * Parapens - */ - /obj/item/weapon/pen/paralysis - flags = FPRINT | TABLEPASS | OPENCONTAINER - slot_flags = SLOT_BELT - origin_tech = "materials=2;syndicate=5" - - -/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) - - if(!(istype(M,/mob))) - return - - ..() - - - if(M.can_inject(user,1)) - if(reagents.total_volume) - if(M.reagents) reagents.trans_to(M, 50) - return - - -/obj/item/weapon/pen/paralysis/New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - R.add_reagent("zombiepowder", 10) - R.add_reagent("cryptobiolin", 15) - ..() - return +/* Pens! + * Contains: + * Pens + * Sleepy Pens + * Parapens + */ + + +/* + * Pens + */ +/obj/item/weapon/pen + desc = "It's a normal black ink pen." + name = "pen" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + flags = FPRINT | TABLEPASS + slot_flags = SLOT_BELT | SLOT_EARS + throwforce = 0 + w_class = 1.0 + throw_speed = 7 + throw_range = 15 + matter = list("metal" = 10) + var/colour = "black" //what colour the ink is! + pressure_resistance = 2 + + +/obj/item/weapon/pen/blue + desc = "It's a normal blue ink pen." + icon_state = "pen_blue" + colour = "blue" + +/obj/item/weapon/pen/red + desc = "It's a normal red ink pen." + icon_state = "pen_red" + colour = "red" + +/obj/item/weapon/pen/invisible + desc = "It's an invisble pen marker." + icon_state = "pen" + colour = "white" + + +/obj/item/weapon/pen/attack(mob/M as mob, mob/user as mob) + if(!ismob(M)) + return + user << "You stab [M] with the pen." +// M << "\red You feel a tiny prick!" //That's a whole lot of meta! + M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [M.name] ([M.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") + return + + +/* + * Sleepy Pens + */ +/obj/item/weapon/pen/sleepypen + desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" + flags = FPRINT | TABLEPASS | OPENCONTAINER + slot_flags = SLOT_BELT + origin_tech = "materials=2;syndicate=5" + + +/obj/item/weapon/pen/sleepypen/New() + var/datum/reagents/R = new/datum/reagents(30) //Used to be 300 + reagents = R + R.my_atom = src + R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N + ..() + return + + +/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) + if(!(istype(M,/mob))) + return + ..() + if(reagents.total_volume) + if(M.reagents) reagents.trans_to(M, 50) //used to be 150 + return + + +/* + * Parapens + */ + /obj/item/weapon/pen/paralysis + flags = FPRINT | TABLEPASS | OPENCONTAINER + slot_flags = SLOT_BELT + origin_tech = "materials=2;syndicate=5" + + +/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) + + if(!(istype(M,/mob))) + return + + ..() + + + if(M.can_inject(user,1)) + if(reagents.total_volume) + if(M.reagents) reagents.trans_to(M, 50) + return + + +/obj/item/weapon/pen/paralysis/New() + var/datum/reagents/R = new/datum/reagents(50) + reagents = R + R.my_atom = src + R.add_reagent("zombiepowder", 10) + R.add_reagent("cryptobiolin", 15) + ..() + return + +/* + * Chameleon pen + */ +/obj/item/weapon/pen/chameleon + var/signature = "" + +/obj/item/weapon/pen/chameleon/attack_self(mob/user as mob) + /* + // Limit signatures to official crew members + var/personnel_list[] = list() + for(var/datum/data/record/t in data_core.locked) //Look in data core locked. + personnel_list.Add(t.fields["name"]) + personnel_list.Add("Anonymous") + + var/new_signature = input("Enter new signature pattern.", "New Signature") as null|anything in personnel_list + if(new_signature) + signature = new_signature + */ + signature = trim_strip_html_properly(input("Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) + +/obj/item/weapon/pen/proc/get_signature(var/mob/user) + return (user && user.real_name) ? user.real_name : "Anonymous" + +/obj/item/weapon/pen/chameleon/get_signature(var/mob/user) + return signature ? signature : "Anonymous" diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index bfba755eb7..ad47a4eb28 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -1,23 +1,3 @@ -//Boards -/obj/item/weapon/circuitboard/batteryrack - name = "Circuit board (Battery rack PSU)" - build_path = "/obj/machinery/power/smes/batteryrack" - board_type = "machine" - origin_tech = "powerstorage=3;engineering=2" - frame_desc = "Requires 3 power cells." - req_components = list("/obj/item/weapon/cell" = 3) - - -/obj/item/weapon/circuitboard/ghettosmes - name = "Circuit board (makeshift PSU)" - desc = "An APC circuit repurposed into some power storage device controller" - build_path = "/obj/machinery/power/smes/batteryrack/makeshift" - board_type = "machine" - frame_desc = "Requires 3 power cells." - req_components = list("/obj/item/weapon/cell" = 3) - - -//Machines //The one that works safely. /obj/machinery/power/smes/batteryrack name = "power cell rack PSU" @@ -32,36 +12,12 @@ var/cells_amount = 0 var/capacitors_amount = 0 - // Smaller capacity, but higher I/O - // Starts fully charged, as it's used in substations. This replaces Engineering SMESs round start charge. -/obj/machinery/power/smes/batteryrack/substation - name = "Substation PSU" - desc = "A rack of power cells working as a PSU. This one seems to be equipped for higher power loads." - output_level = 150000 - input_level = 150000 - output_attempt = 1 - - // One high capacity cell, two regular cells. Lots of room for engineer upgrades - // Also five basic capacitors. Again, upgradeable. -/obj/machinery/power/smes/batteryrack/substation/add_parts() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/batteryrack - component_parts += new /obj/item/weapon/cell/high - component_parts += new /obj/item/weapon/cell - component_parts += new /obj/item/weapon/cell - component_parts += new /obj/item/weapon/stock_parts/capacitor - component_parts += new /obj/item/weapon/stock_parts/capacitor - component_parts += new /obj/item/weapon/stock_parts/capacitor - component_parts += new /obj/item/weapon/stock_parts/capacitor - component_parts += new /obj/item/weapon/stock_parts/capacitor - /obj/machinery/power/smes/batteryrack/New() ..() add_parts() RefreshParts() return - //Maybe this should be moved up to obj/machinery /obj/machinery/power/smes/batteryrack/proc/add_parts() component_parts = list() diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 701a2bb146..feb6f1d38a 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -17,6 +17,8 @@ var/on = 0 var/busy = 0 var/directions = list(1,2,4,8,5,6,9,10) + var/RCon_tag = "NO_TAG" + var/update_locked = 0 /obj/machinery/power/breakerbox/activated icon_state = "bbox_on" @@ -33,19 +35,29 @@ user << "\red It seems to be offline" /obj/machinery/power/breakerbox/attack_ai(mob/user) + if(update_locked) + user << "\red System locked. Please try again later." + return + if(busy) user << "\red System is busy. Please wait until current operation is finished before changing power settings." return busy = 1 user << "\green Updating power settings.." - if(do_after(user, 50)) //5s for AI as AIs can manipulate electronics much faster. + if(do_after(user, 50)) set_state(!on) user << "\green Update Completed. New setting:[on ? "on": "off"]" + update_locked = 1 + spawn(600) + update_locked = 0 busy = 0 /obj/machinery/power/breakerbox/attack_hand(mob/user) + if(update_locked) + user << "\red System locked. Please try again later." + return if(busy) user << "\red System is busy. Please wait until current operation is finished before changing power settings." @@ -55,13 +67,27 @@ for(var/mob/O in viewers(user)) O.show_message(text("\red [user] started reprogramming [src]!"), 1) - if(do_after(user, 300)) // 30s for non-AIs as humans have to manually reprogram it and rapid switching may cause some lag / powernet updates flood. If AIs spam it they can be easily traced. + if(do_after(user, 50)) set_state(!on) user.visible_message(\ "[user.name] [on ? "enabled" : "disabled"] the breaker box!",\ "You [on ? "enabled" : "disabled"] the breaker box!") + update_locked = 1 + spawn(600) + update_locked = 0 busy = 0 +/obj/machinery/power/breakerbox/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(istype(W, /obj/item/device/multitool)) + var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text + if(newtag) + RCon_tag = newtag + user << "You changed the RCON tag to: [newtag]" + + + + + /obj/machinery/power/breakerbox/proc/set_state(var/state) on = state if(on) @@ -93,3 +119,14 @@ icon_state = icon_state_off for(var/obj/structure/cable/C in src.loc) del(C) + +// Used by RCON to toggle the breaker box. +/obj/machinery/power/breakerbox/proc/auto_toggle() + if(!update_locked) + set_state(!on) + update_locked = 1 + spawn(600) + update_locked = 0 + +/obj/machinery/power/breakerbox/process() + return 1 \ No newline at end of file diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm index e3f39ede6d..9e6d4e2d88 100644 --- a/code/modules/power/sensors/sensor_monitoring.dm +++ b/code/modules/power/sensors/sensor_monitoring.dm @@ -5,7 +5,7 @@ */ /obj/machinery/computer/power_monitor - name = "Power Monitor" + name = "Power Monitoring Console" desc = "Computer designed to remotely monitor power levels around the station" icon = 'icons/obj/computer.dmi' icon_state = "power" @@ -15,8 +15,9 @@ anchored = 1.0 circuit = /obj/item/weapon/circuitboard/powermonitor var/list/grid_sensors = null - var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks) - var/active_sensor = null + var/list/sensors_by_powernet = null + var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks) + var/active_sensor = null //name_tag of the currently selected sensor use_power = 1 idle_power_usage = 300 active_power_usage = 300 @@ -34,12 +35,19 @@ /obj/machinery/computer/power_monitor/proc/refresh_sensors() grid_sensors = list() + sensors_by_powernet = list() for(var/obj/machinery/power/sensor/S in machines) if((S.loc.z == src.loc.z) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! error("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") else - grid_sensors += S + grid_sensors[S.name_tag] = S + + var/pnet = (S.powernet)? S.powernet : "none" + if (pnet in sensors_by_powernet) + sensors_by_powernet[pnet] += S + else + sensors_by_powernet[pnet] = list(S) /obj/machinery/computer/power_monitor/attack_ai(mob/user) @@ -75,13 +83,10 @@ t += "
Close

" if(!grid_sensors) - t += "Unable to connect to sensor!" + t += "No sensors available." else - var/obj/machinery/power/sensor/OKS = null - for(var/obj/machinery/power/sensor/S in grid_sensors) - if(S.name_tag == active_sensor) - OKS = S - if(OKS) + if (active_sensor in grid_sensors) + var/obj/machinery/power/sensor/OKS = grid_sensors[active_sensor] t += "[OKS.name_tag] - Sensor Reading
" t += OKS.ReturnReading() else @@ -91,20 +96,36 @@ else t += "
Refresh" t += "
Close

" - if((!grid_sensors) || (!grid_sensors.len)) - t += "ERROR - No Active Sensors Detected!" - else - for(var/obj/machinery/power/sensor/S in grid_sensors) // Show all data from current Z level. - if(S.check_grid_warning()) // Display grids with active alarms in bold text - t += "[S.name]
" - else - t += "[S.name]
" - - + + t += render_sensor_list() user << browse(t, "window=powcomp;size=600x900") onclose(user, "powcomp") +/obj/machinery/computer/power_monitor/proc/render_sensor_list() + if((!grid_sensors) || (!grid_sensors.len)) + return "ERROR - No Active Sensors Detected!" + + var/html = "" + for (var/pnet in sensors_by_powernet) + if (pnet && pnet != "none") + html += "" + + if ("none" in sensors_by_powernet) + html += "" + html += "
Power NetworkSensors
[uppertext("\ref[pnet]")]" + for(var/obj/machinery/power/sensor/S in sensors_by_powernet[pnet]) + //really, if one of them has a warning, they all should - but the interface doesn't guarantee that so whatever + if(S.check_grid_warning()) // Display grids with active alarms in bold text + html += "[S.name]
" + else + html += "[S.name]
" + html += "
\[N/A\]" + for(var/obj/machinery/power/sensor/S in sensors_by_powernet["none"]) + html += "[S.name]
" + html += "
" + + return html /obj/machinery/computer/power_monitor/Topic(href, href_list) ..() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 6de6cd9ee2..8f90743e46 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -6,8 +6,8 @@ var/global/list/uneatable = list( ) /obj/machinery/singularity/ - name = "Gravitational Singularity" - desc = "A Gravitational Singularity." + name = "gravitational singularity" + desc = "A gravitational singularity." icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" anchored = 1 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 5156095e6e..61677068b8 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -32,6 +32,11 @@ var/last_input_attempt = 0 var/last_charge = 0 + var/input_cut = 0 + var/input_pulsed = 0 + var/output_cut = 0 + var/output_pulsed = 0 + var/open_hatch = 0 var/name_tag = null var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! @@ -119,7 +124,7 @@ var/last_onln = outputting //inputting - if(input_attempt) + if(input_attempt && (!input_pulsed && !input_cut)) var/target_load = min((capacity-charge)/SMESRATE, input_level) // charge at set rate, limited to spare capacity var/actual_load = draw_power(target_load) // add the load to the terminal side network charge += actual_load * SMESRATE // increase the charge @@ -132,7 +137,7 @@ inputting = 0 //outputting - if(outputting) + if(outputting && (!output_pulsed && !output_cut)) output_used = min( charge/SMESRATE, output_level) //limit output to that stored charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) @@ -318,6 +323,8 @@ // auto update every Master Controller tick ui.set_auto_update(1) +/obj/machinery/power/smes/proc/Percentage() + return round(100.0*charge/capacity, 0.1) /obj/machinery/power/smes/Topic(href, href_list) if(..()) @@ -413,6 +420,4 @@ /obj/machinery/power/smes/magical/process() charge = 5000000 - ..() - -#undef SMESRATE + ..() diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 676b84e50e..17b24858f9 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -1,43 +1,51 @@ -// Constructable SMES version. Based on Coils. Each SMES can hold 6 Coils by default. -// Each coil adds 250kW I/O and 5M capacity. -// This is second version, now subtype of regular SMES. +// Constructable SMES version (based on SMES Coils) - -//Board -/obj/item/weapon/circuitboard/smes - name = "Circuit board (SMES Cell)" - build_path = "/obj/machinery/power/smes/buildable" - board_type = "machine" - origin_tech = "powerstorage=6;engineering=4" // Board itself is high tech. Coils have to be ordered from cargo or salvaged from existing SMESs. - frame_desc = "Requires 1 superconducting magnetic coil and 30 wires." - req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30) - -//Construction Item +//Construction Items /obj/item/weapon/smes_coil - name = "Superconducting Magnetic Coil" - desc = "Heavy duty superconducting magnetic coil, mainly used in construction of SMES units." + name = "superconductive magnetic coil" + desc = "Heavy duty superconductive magnetic coil, mainly used in construction of SMES units." icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" // Just few icons patched together. If someone wants to make better icon, feel free to do so! w_class = 4.0 // It's LARGE (backpack size) var/ChargeCapacity = 5000000 var/IOCapacity = 250000 - - - // SMES itself /obj/machinery/power/smes/buildable var/max_coils = 6 //30M capacity, 1.5MW input/output when fully upgraded /w default coils var/cur_coils = 1 // Current amount of installed coils var/safeties_enabled = 1 // If 0 modifications can be done without discharging the SMES, at risk of critical failure. var/failing = 0 // If 1 critical failure has occured and SMES explosion is imminent. + var/datum/wires/smes/wires + var/grounding = 1 // Cut to quickly discharge, at cost of "minor" electrical issues in output powernet. + var/RCon = 1 // Cut to disable AI and remote control. + var/RCon_tag = "NO_TAG" // RCON tag, change to show it on SMES Remote control console. charge = 0 should_be_mapped = 1 +/obj/machinery/power/smes/buildable/process() + if(!grounding && (Percentage() > 5)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + charge -= (output_level_max * SMESRATE) + if(prob(1)) // Small chance of overload occuring since grounding is disabled. + apcs_overload(5,10) + + ..() + + +/obj/machinery/power/smes/buildable/attack_ai() + if(RCon) + ..() + else // RCON wire cut + usr << "Connection error: Destination Unreachable." + /obj/machinery/power/smes/buildable/New() component_parts = list() component_parts += new /obj/item/stack/cable_coil(src,30) component_parts += new /obj/item/weapon/circuitboard/smes(src) + src.wires = new /datum/wires/smes(src) // Allows for mapped-in SMESs with larger capacity/IO for(var/i = 1, i <= cur_coils, i++) @@ -46,6 +54,11 @@ recalc_coils() ..() +/obj/machinery/power/smes/buildable/attack_hand() + ..() + if(open_hatch) + wires.Interact(usr) + /obj/machinery/power/smes/buildable/proc/recalc_coils() if ((cur_coils <= max_coils) && (cur_coils >= 1)) capacity = 0 @@ -205,8 +218,15 @@ // - No action was taken in parent function (terminal de/construction atm). if (..()) + // Multitool - change RCON tag + if(istype(W, /obj/item/device/multitool)) + var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text + if(newtag) + RCon_tag = newtag + user << "You changed the RCON tag to: [newtag]" + return // Charged above 1% and safeties are enabled. - if((charge > (capacity/100)) && safeties_enabled && (!istype(W, /obj/item/device/multitool))) + if((charge > (capacity/100)) && safeties_enabled) user << "Safety circuit of [src] is preventing modifications while it's charged!" return @@ -263,8 +283,18 @@ else usr << "\red You can't insert more coils to this SMES unit!" - // Multitool - Toggle the safeties. - else if(istype(W, /obj/item/device/multitool)) - safeties_enabled = !safeties_enabled - user << "You [safeties_enabled ? "connected" : "disconnected"] the safety circuit." - src.visible_message("\icon[src] [src] beeps: \"Caution. Safety circuit has been: [safeties_enabled ? "re-enabled" : "disabled. Please excercise caution."]\"") +/obj/machinery/power/smes/buildable/proc/toggle_input() + input_attempt = !input_attempt + update_icon() + +/obj/machinery/power/smes/buildable/proc/toggle_output() + output_attempt = !output_attempt + update_icon() + +/obj/machinery/power/smes/buildable/proc/set_input(var/new_input = 0) + input_level = new_input + update_icon() + +/obj/machinery/power/smes/buildable/proc/set_output(var/new_output = 0) + output_level = new_output + update_icon() \ No newline at end of file diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 861665b462..28eaf27619 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -22,6 +22,9 @@ var/list/solars_list = list() var/turn_angle = 0 var/obj/machinery/power/solar_control/control = null +/obj/machinery/power/solar/drain_power() + return -1 + /obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S) ..(loc) Make(S) @@ -302,6 +305,8 @@ var/list/solars_list = list() var/obj/machinery/power/tracker/connected_tracker = null var/list/connected_panels = list() +/obj/machinery/power/solar_control/drain_power() + return -1 /obj/machinery/power/solar_control/New() ..() diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 610c0f28a3..1e09903a7e 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -41,6 +41,10 @@ else user << "\blue There is no bullet in the casing to inscribe anything into." +/obj/item/ammo_casing/examine(mob/user) + ..() + if (!BB) + user << "This one is spent." //Boxes of ammo /obj/item/ammo_magazine diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index e524c9765c..134b9a6ca3 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -67,7 +67,7 @@ name = "shotgun shell" desc = "A blank shell." icon_state = "blshell" - projectile_type = "" + projectile_type = "/obj/item/projectile/bullet/chameleon" matter = list("metal" = 250) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d2811fdfcc..f41ba5967b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -53,8 +53,8 @@ /obj/item/weapon/gun/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) if(flag) return //It's adjacent, is the user, or is on the user's person if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy)) return//Shouldnt flag take care of this? - - + + //decide whether to aim or shoot normally var/aiming = 0 if(user && user.client && !(A in target)) @@ -62,10 +62,10 @@ //If help intent is on and we have clicked on an eligible target, switch to aim mode automatically if(user.a_intent == "help" && isliving(A) && !C.gun_mode) C.ToggleGunMode() - + if(C.gun_mode) aiming = PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at. - + if (!aiming) if(user && user.a_intent == "help") //regardless of what happens, refuse to shoot if help intent is on user << "\red You refrain from firing your [src] as your intent is set to help." @@ -92,11 +92,7 @@ if(istype(user, /mob/living)) var/mob/living/M = user if (HULK in M.mutations) - M << "\red Your meaty finger is much too large for the trigger guard!" - return - if(ishuman(user)) - if(user.dna && user.dna.mutantrace == "adamantine") - user << "\red Your metal fingers don't fit in the trigger guard!" + M << "Your fingers are much too large for the trigger guard!" return add_fingerprint(user) diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index a755f33cff..fb678d9b4d 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -1,6 +1,5 @@ //Vox pinning weapon. /obj/item/weapon/gun/launcher/spikethrower - name = "Vox spike thrower" desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive." @@ -65,7 +64,6 @@ //This gun only functions for armalis. The on-sprite is too huge to render properly on other sprites. /obj/item/weapon/gun/energy/noisecannon - name = "alien heavy cannon" desc = "It's some kind of enormous alien weapon, as long as a man is tall." @@ -119,4 +117,4 @@ /obj/item/projectile/energy/sonic/proc/split() //TODO: create two more projectiles to either side of this one, fire at targets to the side of target turf. - return \ No newline at end of file + return diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index fb506def21..8a38a0325d 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -1,7 +1,7 @@ /obj/item/weapon/gun/energy - icon_state = "energy" name = "energy gun" desc = "A basic energy-based gun." + icon_state = "energy" fire_sound = 'sound/weapons/Taser.ogg' var/obj/item/weapon/cell/power_supply //What type of power cell this uses diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 9493dc0e14..394ac3a8f6 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/energy/laser name = "laser carbine" - desc = "a basic weapon designed kill with concentrated energy bolts" + desc = "A basic weapon designed to kill with concentrated energy bolts." icon_state = "laser" item_state = "laser" fire_sound = 'sound/weapons/Laser.ogg' @@ -186,4 +186,4 @@ obj/item/weapon/gun/energy/laser/retro if(!power_supply) return 0 power_supply.give(100) update_icon() - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 61c65165ab..a52119c168 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -53,7 +53,7 @@ return 0 /obj/item/weapon/gun/energy/gun/nuclear - name = "Advanced Energy Gun" + name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized reactor." icon_state = "nucgun" origin_tech = "combat=3;materials=5;powerstorage=3" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index b4ba69a5a0..74b6af43c3 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -52,6 +52,7 @@ name = "pulse destroyer" desc = "A heavy-duty, pulse-based energy weapon." cell_type = "/obj/item/weapon/cell/infinite" + fire_delay = 10 attack_self(mob/living/user as mob) user << "\red [src.name] has three settings, and they are all DESTROY." @@ -59,10 +60,11 @@ /obj/item/weapon/gun/energy/pulse_rifle/M1911 - name = "m1911-P" + name = "\improper M1911-P" desc = "It's not the size of the gun, it's the size of the hole it puts through people." icon_state = "m1911-p" cell_type = "/obj/item/weapon/cell/infinite" + fire_delay = 10 isHandgun() - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 44941eb532..a87218d12c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -214,7 +214,7 @@ obj/item/weapon/gun/energy/staff/focus projectile_type = "/obj/item/projectile/energy/phoron" /obj/item/weapon/gun/energy/sniperrifle - name = "L.W.A.P. Sniper Rifle" + name = "\improper L.W.A.P. sniper rifle" desc = "A rifle constructed of lightweight materials, fitted with a SMART aiming-system scope." icon = 'icons/obj/gun.dmi' icon_state = "sniper" diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 38a78c31b8..91b64a1de4 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -1,4 +1,3 @@ - /obj/item/weapon/gun/energy/taser name = "taser gun" desc = "A small, low capacity gun used for non-lethal takedowns." @@ -10,12 +9,6 @@ cell_type = "/obj/item/weapon/cell/crap" /obj/item/weapon/gun/energy/taser/cyborg - name = "taser gun" - desc = "A small, low capacity gun used for non-lethal takedowns." - icon_state = "taser" - fire_sound = 'sound/weapons/Taser.ogg' - charge_cost = 100 - projectile_type = "/obj/item/projectile/beam/stun" cell_type = "/obj/item/weapon/cell/secborg" var/charge_tick = 0 var/recharge_time = 10 //Time it takes for shots to recharge (in ticks) @@ -107,5 +100,3 @@ force = 10 matter = list("metal" = 200000) projectile_type = "/obj/item/projectile/energy/bolt/large" - - diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 372bcd4cf2..f096b819c8 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -3,8 +3,8 @@ #define MAGAZINE 2 /obj/item/weapon/gun/projectile - desc = "A classic revolver. Uses 357 ammo" name = "revolver" + desc = "A classic revolver. Uses 357 ammo" icon_state = "revolver" caliber = "357" origin_tech = "combat=2;materials=2" @@ -38,7 +38,6 @@ return 0 AC.loc = get_turf(src) //Eject casing onto ground. if(AC.BB) - AC.desc += " This one is spent." //descriptions are magic - only when there's a projectile in the casing in_chamber = AC.BB //Load projectile into chamber. AC.BB.loc = src //Set projectile loc to gun. return 1 @@ -118,4 +117,3 @@ if(istype(AC)) bullets += 1 return bullets - diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 93a7010d7d..ee0d8a6427 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -16,7 +16,7 @@ /obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "Uzi" + name = "\improper Uzi" desc = "A lightweight, fast firing gun, for when you want someone dead. Uses .45 rounds." icon_state = "mini-uzi" w_class = 3.0 @@ -143,4 +143,5 @@ However, it looks like subsequent guns that use removable magazines don't take that into account and just get around simulating a removable magazine by adding the casings into the loaded list and spawning an empty magazine when the gun is out of rounds. Which means you can't eject magazines with rounds in them. The below is a very - rough and poor attempt at making that happen. -Ausops */ \ No newline at end of file + rough and poor attempt at making that happen. -Ausops */ + \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/crossbow.dm b/code/modules/projectiles/guns/projectile/crossbow.dm index e7bc073f0a..0f5cdbb2c8 100644 --- a/code/modules/projectiles/guns/projectile/crossbow.dm +++ b/code/modules/projectiles/guns/projectile/crossbow.dm @@ -1,7 +1,6 @@ //AMMUNITION /obj/item/weapon/arrow - name = "bolt" desc = "It's got a tip for you - get the point?" icon = 'icons/obj/weapons.dmi' @@ -28,7 +27,6 @@ item_state = "bolt" /obj/item/weapon/arrow/quill - name = "vox quill" desc = "A wickedly barbed quill from some bizarre animal." icon = 'icons/obj/weapons.dmi' @@ -37,7 +35,6 @@ throwforce = 5 /obj/item/weapon/arrow/rod - name = "metal rod" desc = "Don't cry for me, Orithena." icon_state = "metal-rod" @@ -50,7 +47,6 @@ src.Del() /obj/item/weapon/gun/launcher/crossbow - name = "powered crossbow" desc = "A 2557AD twist on an old classic. Pick up that can." icon_state = "crossbow" @@ -173,7 +169,6 @@ ..() /obj/item/weapon/gun/launcher/crossbow/proc/superheat_rod(var/mob/user) - if(!user || !cell || !in_chamber) return if(cell.charge < 500) return if(in_chamber.throwforce >= 15) return @@ -262,4 +257,4 @@ del(src) return else - ..() \ No newline at end of file + ..() diff --git a/code/modules/projectiles/guns/projectile/launcher.dm b/code/modules/projectiles/guns/projectile/launcher.dm index 5f9d9fdfde..ee0da727c7 100644 --- a/code/modules/projectiles/guns/projectile/launcher.dm +++ b/code/modules/projectiles/guns/projectile/launcher.dm @@ -1,5 +1,4 @@ /obj/item/weapon/gun/launcher - name = "launcher" desc = "A device that launches things." icon = 'icons/obj/weapons.dmi' @@ -87,4 +86,4 @@ return 1 /obj/item/weapon/gun/launcher/attack_self(mob/living/user as mob) - return \ No newline at end of file + return diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index c7748091e9..b963924614 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -149,4 +149,4 @@ desc = "a silencer" icon = 'icons/obj/gun.dmi' icon_state = "silencer" - w_class = 2 \ No newline at end of file + w_class = 2 diff --git a/code/modules/projectiles/guns/projectile/pneumatic.dm b/code/modules/projectiles/guns/projectile/pneumatic.dm index feb32d15bd..2a6e519d0d 100644 --- a/code/modules/projectiles/guns/projectile/pneumatic.dm +++ b/code/modules/projectiles/guns/projectile/pneumatic.dm @@ -27,7 +27,6 @@ tank_container.tag = "gas_tank_holder" /obj/item/weapon/gun/launcher/pneumatic/verb/set_pressure() //set amount of tank pressure. - set name = "Set Valve Pressure" set category = "Object" set src in range(0) @@ -37,7 +36,6 @@ usr << "You dial the pressure valve to [pressure_setting]%." /obj/item/weapon/gun/launcher/pneumatic/verb/eject_tank() //Remove the tank. - set name = "Eject Tank" set category = "Object" set src in range(0) @@ -79,7 +77,6 @@ user << "That won't fit into the hopper." /obj/item/weapon/gun/launcher/pneumatic/attack_self(mob/user as mob) - if(contents.len > 0) var/obj/item/removing = contents[contents.len] if(removing == in_chamber) @@ -210,4 +207,4 @@ del(src) return else - ..() \ No newline at end of file + ..() diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 19806429a3..f1eac3e858 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/detective - desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds." name = "revolver" + desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds." icon_state = "detective" max_shells = 6 caliber = "38" @@ -71,8 +71,8 @@ /obj/item/weapon/gun/projectile/detective/semiauto - desc = "A cheap Martian knock-off of a Colt M1911. Uses less-than-lethal .45 rounds." name = "\improper Colt M1911" + desc = "A cheap Martian knock-off of a Colt M1911. Uses less-than-lethal .45 rounds." icon_state = "colt" max_shells = 7 caliber = ".45" @@ -103,7 +103,7 @@ // You can spin the chamber to randomize the position of the bullet. /obj/item/weapon/gun/projectile/russian - name = "Russian Revolver" + name = "\improper Russian revolver" desc = "A Russian made revolver. Uses .357 ammo. It has a single slot in it's chamber for a bullet." max_shells = 6 origin_tech = "combat=2;materials=2" @@ -113,7 +113,6 @@ update_icon() /obj/item/weapon/gun/projectile/russian/proc/Spin() - for(var/obj/item/ammo_casing/AC in loaded) del(AC) loaded = list() @@ -126,7 +125,6 @@ /obj/item/weapon/gun/projectile/russian/attackby(var/obj/item/A as obj, mob/user as mob) - if(!A) return var/num_loaded = 0 @@ -155,13 +153,11 @@ return /obj/item/weapon/gun/projectile/russian/attack_self(mob/user as mob) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") if(getAmmo() > 0) Spin() /obj/item/weapon/gun/projectile/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj) - if(!loaded.len) user.visible_message("\red *click*", "\red *click*") playsound(user, 'sound/weapons/empty.ogg', 100, 1) @@ -186,4 +182,3 @@ user.apply_damage(300, BRUTE, affecting, sharp=1) // You are dead, dead, dead. return ..() - diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm index 8183de4d4e..ea88e7956a 100644 --- a/code/modules/projectiles/guns/projectile/rocket.dm +++ b/code/modules/projectiles/guns/projectile/rocket.dm @@ -1,5 +1,4 @@ /obj/item/weapon/gun/rocketlauncher - var/projectile name = "rocket launcher" desc = "MAGGOT." icon_state = "rocket" @@ -11,7 +10,7 @@ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY slot_flags = 0 origin_tech = "combat=8;materials=5" - projectile = /obj/item/missile + var/projectile = /obj/item/missile var/missile_speed = 2 var/missile_range = 30 var/max_rockets = 1 @@ -49,4 +48,4 @@ del(I) return else - usr << "\red [src] is empty." \ No newline at end of file + usr << "\red [src] is empty." diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index aef481cc0e..9c30e31102 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -134,4 +134,4 @@ slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) name = "sawn-off shotgun" desc = "Omar's coming!" - user << "You shorten the barrel of \the [src]!" \ No newline at end of file + user << "You shorten the barrel of \the [src]!" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 84c9347ed0..b811eb9281 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -170,4 +170,4 @@ var/list/beam_master = list() icon_state = "stun" nodamage = 1 agony = 40 - damage_type = HALLOSS \ No newline at end of file + damage_type = HALLOSS diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 90157efd62..215c117342 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -85,4 +85,3 @@ del(M) return new_mob - diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 00fd886f3d..b94bda70ad 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -65,4 +65,3 @@ damage = 20 damage_type = TOX irradiate = 20 - diff --git a/code/modules/projectiles/projectile/force.dm b/code/modules/projectiles/projectile/force.dm index a0f1da84b5..4dffe4ce89 100644 --- a/code/modules/projectiles/projectile/force.dm +++ b/code/modules/projectiles/projectile/force.dm @@ -25,4 +25,4 @@ throwdir = get_dir(src,target) M.throw_at(get_edge_target_turf(M, throwdir),15,1) return ..() -*/ \ No newline at end of file +*/ diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index f426eefb2f..49cd420994 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -80,7 +80,6 @@ on_hit(var/atom/target, var/blocked = 0) var/mob/living/M = target -// if(ishuman(target) && M.dna && M.dna.mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays. if(ishuman(target)) var/mob/living/carbon/human/H = M if((H.species.flags & IS_PLANT) && (M.nutrition < 500)) @@ -120,7 +119,6 @@ on_hit(var/atom/target, var/blocked = 0) var/mob/M = target -// if(ishuman(target) && M.dna && M.dna.mutantrace == "plant") //These rays make plantmen fat. if(ishuman(target)) //These rays make plantmen fat. var/mob/living/carbon/human/H = M if((H.species.flags & IS_PLANT) && (M.nutrition < 500)) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 7393a255ab..7e11d25f9a 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -332,10 +332,9 @@ datum if(!M) M = holder.my_atom if(ishuman(M)) var/mob/living/carbon/human/human = M - if(human.dna.mutantrace == null) - M << "\red Your flesh rapidly mutates!" - human.dna.mutantrace = "slime" - human.update_mutantrace() + if(human.species.name != "Slime") + M << "Your flesh rapidly mutates!" + human.set_species("Slime") ..() return diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index b6f9c36b77..7aaad7a678 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -665,7 +665,7 @@ /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" - desc = "A slab of meat" + desc = "A slab of green meat. Smells like acid." icon_state = "xenomeat" filling_color = "#43DE18" diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 238d0ae84b..d570f13861 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -428,16 +428,9 @@ return /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/Crossed(AM as mob|obj) - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - - M.stop_pulling() - M << "\blue You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + if (istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the [src]!") /obj/item/weapon/reagent_containers/food/snacks/grown/wheat name = "wheat" diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index e5d3c38bc6..efd73c3a4e 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -1,6 +1,6 @@ /obj/item/weapon/reagent_containers/food/snacks/meat name = "meat" - desc = "A slab of meat" + desc = "A slab of meat." icon_state = "meat" health = 180 filling_color = "#FF1C1C" @@ -14,7 +14,7 @@ new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) - user << "You cut the meat in thin strips." + user << "You cut the meat into thin strips." del(src) else ..() @@ -23,15 +23,13 @@ name = "synthetic meat" desc = "A synthetic slab of flesh." +// Seperate definitions because some food likes to know if it's human. +// TODO: rewrite kitchen code to check a var on the meat item so we can remove +// all these sybtypes. /obj/item/weapon/reagent_containers/food/snacks/meat/human - name = "-meat" - var/subjectname = "" - var/subjectjob = null - - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey //same as plain meat /obj/item/weapon/reagent_containers/food/snacks/meat/corgi name = "Corgi meat" - desc = "Tastes like... well you know..." \ No newline at end of file + desc = "Tastes like... well, you know." \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 57843d894b..1db8fa1aa4 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -22,7 +22,7 @@ src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT /obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob) - if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \ + if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) \ || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart)) return diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index baa766c57e..40de21081d 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -35,23 +35,23 @@ other types of metals and chemistry for reagents). #define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals #define AUTOLATHE 4 //Uses glass/metal only. #define CRAFTLATHE 8 //Uses fuck if I know. For use eventually. -#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars. +#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars. //Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. datum/design //Datum for object designs, used in construction - var/name = "Name" //Name of the created object. - var/desc = "Desc" //Description of the created object. - var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols - var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. - var/reliability_mod = 0 //Reliability modifier of the device at it's starting point. - var/reliability_base = 100 //Base reliability of a device before modifiers. - var/reliability = 100 //Reliability of the device. - var/build_type = null //Flag as to what kind machine the design is built in. See defines. - var/list/materials = list() //List of materials. Format: "id" = amount. - var/build_path = null //The path of the object that gets created - var/locked = 0 //If true it will spawn inside a lockbox with currently sec access - var/category = null //Primarily used for Mech Fabricators, but can be used for anything - + var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible. + var/desc = null //Description of the created object. If null it will use group_desc and name where applicable. + var/item_name = null //An item name before it is modified by various name-modifying procs + var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols. + var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. + var/reliability_mod = 0 //Reliability modifier of the device at it's starting point. + var/reliability_base = 100 //Base reliability of a device before modifiers. + var/reliability = 100 //Reliability of the device. + var/build_type = null //Flag as to what kind machine the design is built in. See defines. + var/list/materials = list() //List of materials. Format: "id" = amount. + var/build_path = null //The path of the object that gets created. + var/locked = 0 //If true it will spawn inside a lockbox with currently sec access. + var/category = null //Primarily used for Mech Fabricators, but can be used for anything. //A proc to calculate the reliability of a design based on tech levels and innate modifiers. //Input: A list of /datum/tech; Output: The new reliabilty. @@ -64,843 +64,640 @@ datum/design/proc/CalcReliability(var/list/temp_techs) reliability = new_reliability return +datum/design/New() + ..() + item_name = name + AssembleDesignInfo() -///////////////////Computer Boards/////////////////////////////////// +//These procs are used in subtypes for assigning names and descriptions dynamically +datum/design/proc/AssembleDesignInfo() + AssembleDesignName() + AssembleDesignDesc() + return -datum/design/seccamera - name = "Circuit Design (Security)" - desc = "Allows for the construction of circuit boards used to build security camera computers." - id = "seccamera" - req_tech = list("programming" = 2) +datum/design/proc/AssembleDesignName() + if(!name && build_path) //Get name from build path if posible + var/atom/movable/A = build_path + name = initial(A.name) + item_name = name + return + +datum/design/proc/AssembleDesignDesc() + if(!desc) //Try to make up a nice description if we don't have one + desc = "Allows for the construction of \a [item_name]." + return + +/////////////////////////////////// +/////General Type Definitions////// +/////////////////////////////////// +datum/design/circuit build_type = IMPRINTER + req_tech = list("programming" = 2) materials = list("$glass" = 2000, "sacid" = 20) + +datum/design/circuit/AssembleDesignName() + ..() + name = "Circuit design ([item_name])" + +datum/design/circuit/AssembleDesignDesc() + if(!desc) + desc = "Allows for the construction of \a [item_name] circuit board." + +datum/design/item + build_type = PROTOLATHE + +/////////////////////////////////// +//////////Computer Boards////////// +/////////////////////////////////// +datum/design/circuit/seccamera + name = "security camera monitor" + id = "seccamera" build_path = /obj/item/weapon/circuitboard/security -datum/design/aicore - name = "Circuit Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." +datum/design/circuit/aicore + name = "AI core" id = "aicore" req_tech = list("programming" = 4, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aicore -datum/design/aiupload - name = "Circuit Design (AI Upload)" - desc = "Allows for the construction of circuit boards used to build an AI Upload Console." +datum/design/circuit/aiupload + name = "AI upload console" id = "aiupload" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aiupload -datum/design/borgupload - name = "Circuit Design (Cyborg Upload)" - desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." +datum/design/circuit/borgupload + name = "cyborg upload console" id = "borgupload" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/borgupload -datum/design/med_data - name = "Circuit Design (Medical Records)" - desc = "Allows for the construction of circuit boards used to build a medical records console." - id = "med_data" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/med_data - -datum/design/operating - name = "Circuit Design (Operating Computer)" - desc = "Allows for the construction of circuit boards used to build an operating computer console." +datum/design/circuit/operating + name = "patient monitoring console" id = "operating" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/operating -datum/design/pandemic - name = "Circuit Design (PanD.E.M.I.C. 2200)" - desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." +datum/design/circuit/pandemic + name = "PanD.E.M.I.C. 2200" id = "pandemic" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pandemic -datum/design/scan_console - name = "Circuit Design (DNA Machine)" - desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." +datum/design/circuit/scan_console + name = "DNA machine" id = "scan_console" - req_tech = list("programming" = 2, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/scan_consolenew -datum/design/comconsole - name = "Circuit Design (Communications)" - desc = "Allows for the construction of circuit boards used to build a communications console." +datum/design/circuit/comconsole + name = "communications console" id = "comconsole" - req_tech = list("programming" = 2, "magnets" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/communications -datum/design/idcardconsole - name = "Circuit Design (ID Computer)" - desc = "Allows for the construction of circuit boards used to build an ID computer." +datum/design/circuit/idcardconsole + name = "ID card modification console" id = "idcardconsole" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/card -datum/design/crewconsole - name = "Circuit Design (Crew monitoring computer)" - desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." +datum/design/circuit/crewconsole + name = "crew monitoring console" id = "crewconsole" req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/crew -datum/design/teleconsole - name = "Circuit Design (Teleporter Console)" - desc = "Allows for the construction of circuit boards used to build a teleporter control console." +datum/design/circuit/teleconsole + name = "teleporter control console" id = "teleconsole" req_tech = list("programming" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter -datum/design/secdata - name = "Circuit Design (Security Records Console)" - desc = "Allows for the construction of circuit boards used to build a security records console." - id = "secdata" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) +datum/design/circuit/emp_data + name = "employment records console" + id = "emp_data" + build_path = /obj/item/weapon/circuitboard/skills + +datum/design/circuit/med_data + name = "medical records console" + id = "med_data" + build_path = /obj/item/weapon/circuitboard/med_data + +datum/design/circuit/secdata + name = "security records console" + id = "sec_data" build_path = /obj/item/weapon/circuitboard/secure_data -datum/design/atmosalerts - name = "Circuit Design (Atmosphere Alert)" - desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.." +datum/design/circuit/atmosalerts + name = "atmosphere alert console" id = "atmosalerts" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/atmos_alert -datum/design/air_management - name = "Circuit Design (Atmospheric Monitor)" - desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." +datum/design/circuit/air_management + name = "atmosphere monitoring console" id = "air_management" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/air_management +datum/design/circuit/rcon_console + name = "RCON remote control console" + id = "rcon_console" + req_tech = list("programming" = 4, "engineering" = 3, "powerstorage" = 5) + build_path = /obj/item/weapon/circuitboard/rcon_console + /* Uncomment if someone makes these buildable -datum/design/general_alert - name = "Circuit Design (General Alert Console)" - desc = "Allows for the construction of circuit boards used to build a General Alert console." +datum/design/circuit/general_alert + name = "general alert console" id = "general_alert" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/general_alert" + build_path = /obj/item/weapon/circuitboard/general_alert */ -datum/design/robocontrol - name = "Circuit Design (Robotics Control Console)" - desc = "Allows for the construction of circuit boards used to build a Robotics Control console." +datum/design/circuit/robocontrol + name = "robotics control console" id = "robocontrol" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/robotics -datum/design/dronecontrol - name = "Circuit Design (Drone Control Console)" - desc = "Allows for the construction of circuit boards used to build a Drone Control console." +datum/design/circuit/dronecontrol + name = "drone control console" id = "dronecontrol" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/drone_control -datum/design/clonecontrol - name = "Circuit Design (Cloning Machine Console)" - desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." +datum/design/circuit/clonecontrol + name = "cloning control console" id = "clonecontrol" req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/cloning -datum/design/clonepod - name = "Circuit Design (Clone Pod)" - desc = "Allows for the construction of circuit boards used to build a Cloning Pod." +datum/design/circuit/clonepod + name = "clone pod" id = "clonepod" req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/clonepod -datum/design/clonescanner - name = "Circuit Design (Cloning Scanner)" - desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." +datum/design/circuit/clonescanner + name = "cloning scanner" id = "clonescanner" req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/clonescanner -datum/design/arcademachine - name = "Circuit Design (Arcade Machine)" - desc = "Allows for the construction of circuit boards used to build a new arcade machine." +datum/design/circuit/arcademachine + name = "arcade machine" id = "arcademachine" req_tech = list("programming" = 1) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/arcade -datum/design/powermonitor - name = "Circuit Design (Power Monitor)" - desc = "Allows for the construction of circuit boards used to build a new power monitor" +datum/design/circuit/powermonitor + name = "power monitoring console" id = "powermonitor" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/powermonitor -datum/design/solarcontrol - name = "Circuit Design (Solar Control)" - desc = "Allows for the construction of circuit boards used to build a solar control console" +datum/design/circuit/solarcontrol + name = "solar control console" id = "solarcontrol" - req_tech = list("programming" = 2, "powerstorage" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/solar_control -datum/design/prisonmanage - name = "Circuit Design (Prisoner Management Console)" - desc = "Allows for the construction of circuit boards used to build a prisoner management console." +datum/design/circuit/prisonmanage + name = "prisoner management console" id = "prisonmanage" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/prisoner -datum/design/mechacontrol - name = "Circuit Design (Exosuit Control Console)" - desc = "Allows for the construction of circuit boards used to build an exosuit control console." +datum/design/circuit/mechacontrol + name = "exosuit control console" id = "mechacontrol" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha_control -datum/design/mechapower - name = "Circuit Design (Mech Bay Power Control Console)" - desc = "Allows for the construction of circuit boards used to build a mech bay power control console." +datum/design/circuit/mechapower + name = "mech bay power control console" id = "mechapower" - req_tech = list("programming" = 2, "powerstorage" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mech_bay_power_console -datum/design/rdconsole - name = "Circuit Design (R&D Console)" - desc = "Allows for the construction of circuit boards used to build a new R&D console." +datum/design/circuit/rdconsole + name = "R&D control console" id = "rdconsole" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdconsole -datum/design/ordercomp - name = "Circuit Design (Supply ordering console)" - desc = "Allows for the construction of circuit boards used to build a Supply ordering console." +datum/design/circuit/ordercomp + name = "supply ordering console" id = "ordercomp" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/ordercomp -datum/design/supplycomp - name = "Circuit Design (Supply shuttle console)" - desc = "Allows for the construction of circuit boards used to build a Supply shuttle console." +datum/design/circuit/supplycomp + name = "supply control console" id = "supplycomp" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/supplycomp -datum/design/comm_monitor - name = "Circuit Design (Telecommunications Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." +datum/design/circuit/comm_monitor + name = "telecommunications monitoring console" id = "comm_monitor" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/comm_monitor -datum/design/comm_server - name = "Circuit Design (Telecommunications Server Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." +datum/design/circuit/comm_server + name = "telecommunications server monitoring console" id = "comm_server" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/comm_server -datum/design/message_monitor - name = "Circuit Design (Messaging Monitor Console)" - desc = "Allows for the construction of circuit boards used to build a messaging monitor console." +datum/design/circuit/message_monitor + name = "messaging monitor console" id = "message_monitor" req_tech = list("programming" = 5) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/message_monitor -datum/design/aifixer - name = "Circuit Design (AI Integrity Restorer)" - desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." +datum/design/circuit/aifixer + name = "AI integrity restorer" id = "aifixer" req_tech = list("programming" = 3, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aifixer -// VERY VERY EXPENSIVE (needs diamonds and stuff) -datum/design/smes_cell - name = "Circuit Design (SMES Cell)" - desc = "Allows for the construction of circuit boards used to build an SMES Cell." - id = "smes_cell" - req_tech = list("powerstorage" = 7, "engineering" = 5) // Higher than obtained by deconstructing existing boards. Needs more RnD effor to make - build_type = IMPRINTER - materials = list("$glass" = 4000, "sacid" = 40, "$gold" = 1000, "$silver" = 1000, "$diamond" = 500) - build_path = /obj/item/weapon/circuitboard/smes +/////////////////////////////////// +/////////Shield Generators///////// +/////////////////////////////////// +datum/design/circuit/shield + req_tech = list("bluespace" = 4, "phorontech" = 3) + materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000) + +datum/design/circuit/shield/AssembleDesignName() + name = "Shield generator circuit design ([name])" +datum/design/circuit/shield/AssembleDesignDesc() + if(!desc) + desc = "Allows for the construction of \a [name] shield generator." + +datum/design/circuit/shield/bubble + name = "bubble" + id = "shield_gen" + build_path = /obj/item/weapon/circuitboard/shield_gen + +datum/design/circuit/shield/hull + name = "hull" + id = "shield_gen_ex" + build_path = /obj/item/weapon/circuitboard/shield_gen_ex + +datum/design/circuit/shield/capacitor + name = "capacitor" + desc = "Allows for the construction of a shield capacitor circuit board." + id = "shield_cap" + req_tech = list("magnets" = 3, "powerstorage" = 4) + build_path = /obj/item/weapon/circuitboard/shield_cap /////////////////////////////////// //////////AI Module Disks////////// /////////////////////////////////// -datum/design/safeguard_module - name = "Module Design (Safeguard)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "safeguard_module" - req_tech = list("programming" = 3, "materials" = 4) +datum/design/aimodule/ build_type = IMPRINTER materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + +datum/design/aimodule/AssembleDesignName() + name = "AI module design ([name])" +datum/design/aimodule/AssembleDesignDesc() + desc = "Allows for the construction of \a '[name]' AI module." + +datum/design/aimodule/safeguard + name = "Safeguard" + id = "safeguard" + req_tech = list("programming" = 3, "materials" = 4) build_path = /obj/item/weapon/aiModule/safeguard -datum/design/onehuman_module - name = "Module Design (OneHuman)" - desc = "Allows for the construction of a OneHuman AI Module." - id = "onehuman_module" +datum/design/aimodule/onehuman + name = "OneHuman" + id = "onehuman" req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) build_path = /obj/item/weapon/aiModule/oneHuman -datum/design/protectstation_module - name = "Module Design (ProtectStation)" - desc = "Allows for the construction of a ProtectStation AI Module." - id = "protectstation_module" +datum/design/aimodule/protectstation + name = "ProtectStation" + id = "protectstation" req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/protectStation -datum/design/notele_module - name = "Module Design (TeleporterOffline Module)" - desc = "Allows for the construction of a TeleporterOffline AI Module." - id = "notele_module" +datum/design/aimodule/notele + name = "TeleporterOffline" + id = "notele" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/teleporterOffline -datum/design/quarantine_module - name = "Module Design (Quarantine)" - desc = "Allows for the construction of a Quarantine AI Module." - id = "quarantine_module" +datum/design/aimodule/quarantine + name = "Quarantine" + id = "quarantine" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/quarantine -datum/design/oxygen_module - name = "Module Design (OxygenIsToxicToHumans)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "oxygen_module" +datum/design/aimodule/oxygen + name = "OxygenIsToxicToHumans" + id = "oxygen" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/oxygen -datum/design/freeform_module - name = "Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Module." - id = "freeform_module" +datum/design/aimodule/freeform + name = "Freeform" + id = "freeform" req_tech = list("programming" = 4, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/freeform -datum/design/reset_module - name = "Module Design (Reset)" - desc = "Allows for the construction of a Reset AI Module." - id = "reset_module" +datum/design/aimodule/reset + name = "Reset" + id = "reset" req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) build_path = /obj/item/weapon/aiModule/reset -datum/design/purge_module - name = "Module Design (Purge)" - desc = "Allows for the construction of a Purge AI Module." - id = "purge_module" +datum/design/aimodule/purge + name = "Purge" + id = "purge" req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) build_path = /obj/item/weapon/aiModule/purge -datum/design/freeformcore_module - name = "Core Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Core Module." - id = "freeformcore_module" +// *** Core modules +datum/design/aimodule/core req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + +datum/design/aimodule/core/AssembleDesignName() + name = "AI core module design ([name])" +datum/design/aimodule/core/AssembleDesignDesc() + desc = "Allows for the construction of \a '[name]' AI core module." + +datum/design/aimodule/core/freeformcore + name = "Freeform" + id = "freeformcore" build_path = /obj/item/weapon/aiModule/freeformcore -datum/design/asimov - name = "Core Module Design (Asimov)" - desc = "Allows for the construction of a Asimov AI Core Module." - id = "asimov_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) +datum/design/aimodule/core/asimov + name = "Asimov" + id = "asimov" build_path = /obj/item/weapon/aiModule/asimov -datum/design/paladin_module - name = "Core Module Design (P.A.L.A.D.I.N.)" - desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." - id = "paladin_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) +datum/design/aimodule/core/paladin + name = "P.A.L.A.D.I.N." + id = "paladin" build_path = /obj/item/weapon/aiModule/paladin -datum/design/tyrant_module - name = "Core Module Design (T.Y.R.A.N.T.)" - desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." - id = "tyrant_module" +datum/design/aimodule/core/tyrant + name = "T.Y.R.A.N.T." + id = "tyrant" req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) build_path = /obj/item/weapon/aiModule/tyrant - - /////////////////////////////////// -/////Subspace Telecomms//////////// +////////Telecomms Machinery//////// /////////////////////////////////// -datum/design/subspace_receiver - name = "Circuit Design (Subspace Receiver)" - desc = "Allows for the construction of Subspace Receiver equipment." - id = "s-receiver" - req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/receiver - -datum/design/telecomms_bus - name = "Circuit Design (Bus Mainframe)" - desc = "Allows for the construction of Telecommunications Bus Mainframes." - id = "s-bus" +datum/design/circuit/tcom req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/bus -datum/design/telecomms_hub - name = "Circuit Design (Hub Mainframe)" - desc = "Allows for the construction of Telecommunications Hub Mainframes." - id = "s-hub" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/hub +datum/design/circuit/tcom/AssembleDesignName() + name = "Telecommunications machinery circuit design ([name])" +datum/design/circuit/tcom/AssembleDesignDesc() + desc = "Allows for the construction of a telecommunications [name] circuit board." -datum/design/telecomms_relay - name = "Circuit Design (Relay Mainframe)" - desc = "Allows for the construction of Telecommunications Relay Mainframes." - id = "s-relay" - req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/relay -datum/design/telecomms_processor - name = "Circuit Design (Processor Unit)" - desc = "Allows for the construction of Telecommunications Processor equipment." - id = "s-processor" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) +datum/design/circuit/tcom/server + name = "server mainframe" + id = "tcom-server" + build_path = /obj/item/weapon/circuitboard/telecomms/server + +datum/design/circuit/tcom/processor + name = "processor unit" + id = "tcom-processor" build_path = /obj/item/weapon/circuitboard/telecomms/processor -datum/design/telecomms_server - name = "Circuit Design (Server Mainframe)" - desc = "Allows for the construction of Telecommunications Servers." - id = "s-server" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/server +datum/design/circuit/tcom/bus + name = "bus mainframe" + id = "tcom-bus" + build_path = /obj/item/weapon/circuitboard/telecomms/bus -datum/design/subspace_broadcaster - name = "Circuit Design (Subspace Broadcaster)" - desc = "Allows for the construction of Subspace Broadcasting equipment." - id = "s-broadcaster" +datum/design/circuit/tcom/hub + name = "hub mainframe" + id = "tcom-hub" + build_path = /obj/item/weapon/circuitboard/telecomms/hub + +datum/design/circuit/tcom/relay + name = "relay mainframe" + id = "tcom-relay" + req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3) + build_path = /obj/item/weapon/circuitboard/telecomms/relay + +datum/design/circuit/tcom/broadcaster + name = "subspace broadcaster" + id = "tcom-broadcaster" req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster +datum/design/circuit/tcom/receiver + name = "subspace receiver" + id = "tcom-receiver" + req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2) + build_path = /obj/item/weapon/circuitboard/telecomms/receiver /////////////////////////////////// -/////Non-Board Computer Stuff////// +////////////Mecha Modules////////// /////////////////////////////////// - -datum/design/intellicard - name = "Intellicard AI Transportation System" - desc = "Allows for the construction of an intellicard." - id = "intellicard" - req_tech = list("programming" = 4, "materials" = 4) - build_type = PROTOLATHE - materials = list("$glass" = 1000, "$gold" = 200) - build_path = /obj/item/device/aicard - -datum/design/paicard - name = "Personal Artificial Intelligence Card" - desc = "Allows for the construction of a pAI Card" - id = "paicard" - req_tech = list("programming" = 2) - build_type = PROTOLATHE - materials = list("$glass" = 500, "$metal" = 500) - build_path = /obj/item/device/paicard - -datum/design/posibrain - name = "Positronic Brain" - desc = "Allows for the construction of a positronic brain" - id = "posibrain" - req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4) - - build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$phoron" = 500, "$diamond" = 100) - build_path = /obj/item/device/mmi/digital/posibrain - -/////////////////////////////////// -//////////Mecha Module Disks/////// -/////////////////////////////////// - -datum/design/ripley_main - name = "Circuit Design (APLU \"Ripley\" Central Control module)" - desc = "Allows for the construction of a \"Ripley\" Central Control module." - id = "ripley_main" +datum/design/circuit/mecha req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) + +datum/design/circuit/mecha/AssembleDesignName() + name = "Exosuit module circuit design ([name])" +datum/design/circuit/mecha/AssembleDesignDesc() + desc = "Allows for the construction of \a [name] module." + + +datum/design/circuit/mecha/ripley_main + name = "APLU 'Ripley' central control" + id = "ripley_main" build_path = /obj/item/weapon/circuitboard/mecha/ripley/main -datum/design/ripley_peri - name = "Circuit Design (APLU \"Ripley\" Peripherals Control module)" - desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." +datum/design/circuit/mecha/ripley_peri + name = "APLU 'Ripley' peripherals control" id = "ripley_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals -datum/design/odysseus_main - name = "Circuit Design (\"Odysseus\" Central Control module)" - desc = "Allows for the construction of a \"Odysseus\" Central Control module." +datum/design/circuit/mecha/odysseus_main + name = "'Odysseus' central control" id = "odysseus_main" req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main -datum/design/odysseus_peri - name = "Circuit Design (\"Odysseus\" Peripherals Control module)" - desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." +datum/design/circuit/mecha/odysseus_peri + name = "'Odysseus' peripherals control" id = "odysseus_peri" req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals -datum/design/gygax_main - name = "Circuit Design (\"Gygax\" Central Control module)" - desc = "Allows for the construction of a \"Gygax\" Central Control module." +datum/design/circuit/mecha/gygax_main + name = "'Gygax' central control" id = "gygax_main" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/main -datum/design/gygax_peri - name = "Circuit Design (\"Gygax\" Peripherals Control module)" - desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." +datum/design/circuit/mecha/gygax_peri + name = "'Gygax' peripherals control" id = "gygax_peri" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals -datum/design/gygax_targ - name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." +datum/design/circuit/mecha/gygax_targ + name = "'Gygax' weapon control and targeting" id = "gygax_targ" req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting -datum/design/durand_main - name = "Circuit Design (\"Durand\" Central Control module)" - desc = "Allows for the construction of a \"Durand\" Central Control module." +datum/design/circuit/mecha/durand_main + name = "'Durand' central control" id = "durand_main" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/main -datum/design/durand_peri - name = "Circuit Design (\"Durand\" Peripherals Control module)" - desc = "Allows for the construction of a \"Durand\" Peripheral Control module." +datum/design/circuit/mecha/durand_peri + name = "'Durand' peripherals control" id = "durand_peri" req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals -datum/design/durand_targ - name = "Circuit Design (\"Durand\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." +datum/design/circuit/mecha/durand_targ + name = "'Durand' weapon control and targeting" id = "durand_targ" req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting -datum/design/honker_main - name = "Circuit Design (\"H.O.N.K\" Central Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." +datum/design/circuit/mecha/honker_main + name = "'H.O.N.K' central control" id = "honker_main" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/main -datum/design/honker_peri - name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." +datum/design/circuit/mecha/honker_peri + name = "'H.O.N.K' peripherals control" id = "honker_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals -datum/design/honker_targ - name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." +datum/design/circuit/mecha/honker_targ + name = "'H.O.N.K' weapon control and targeting" id = "honker_targ" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting //////////////////////////////////////// /////////// Mecha Equpment ///////////// //////////////////////////////////////// -datum/design/mech_scattershot - name = "Exosuit Weapon Design (LBX AC 10 \"Scattershot\")" - desc = "Allows for the construction of LBX AC 10." - id = "mech_scattershot" - build_type = MECHFAB - req_tech = list("combat" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - category = "Exosuit Equipment" - -datum/design/mech_laser - name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" - desc = "Allows for the construction of CH-PS Laser." - id = "mech_laser" - build_type = MECHFAB - req_tech = list("combat" = 3, "magnets" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - category = "Exosuit Equipment" - -datum/design/mech_laser_rigged - name = "Exosuit Weapon Design (Jury-rigged Laser)" - desc = "Allows for the construction a welder-laser assembly package for non-combat exosuits." - id = "mech_laser_rigged" - build_type = MECHFAB - req_tech = list("combat" = 2, "magnets" = 2) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser - category = "Exosuit Equipment" - -datum/design/mech_laser_heavy - name = "Exosuit Weapon Design (CH-LC \"Solaris\" Laser Cannon)" - desc = "Allows for the construction of CH-LC Laser Cannon." - id = "mech_laser_heavy" - build_type = MECHFAB - req_tech = list("combat" = 4, "magnets" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - category = "Exosuit Equipment" - -datum/design/mech_ion - name = "Exosuit Weapon Design (mkIV Ion Heavy Cannon)" - desc = "Allows for the construction of the Ion Cannon." - id = "mech_ion" - build_type = MECHFAB - req_tech = list("combat" = 4, "magnets" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - category = "Exosuit Equipment" - -datum/design/mech_grenade_launcher - name = "Exosuit Weapon Design (SGL-6 Grenade Launcher)" - desc = "Allows for the construction of SGL-6 Grenade Launcher." - id = "mech_grenade_launcher" +datum/design/item/mecha build_type = MECHFAB req_tech = list("combat" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang category = "Exosuit Equipment" -datum/design/clusterbang_launcher - name = "Exosuit Module Design (SOP-6 Clusterbang Launcher)" - desc = "A weapon that violates the Geneva Convention at 6 rounds per minute" +datum/design/item/mecha/AssembleDesignName() + ..() + name = "Exosuit module design ([item_name])" +datum/design/item/mecha/weapon/AssembleDesignName() + ..() + name = "Exosuit weapon design ([item_name])" +datum/design/item/mecha/AssembleDesignDesc() + if(!desc) + desc = "Allows for the construction of \a '[item_name]' exosuit module." + +// *** Weapon modules +datum/design/item/mecha/weapon/scattershot + id = "mech_scattershot" + req_tech = list("combat" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot + +datum/design/item/mecha/weapon/laser + id = "mech_laser" + req_tech = list("combat" = 3, "magnets" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser + +datum/design/item/mecha/weapon/laser_rigged + desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits." + id = "mech_laser_rigged" + req_tech = list("combat" = 2, "magnets" = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser + +datum/design/item/mecha/weapon/laser_heavy + id = "mech_laser_heavy" + req_tech = list("combat" = 4, "magnets" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy + +datum/design/item/mecha/weapon/ion + id = "mech_ion" + req_tech = list("combat" = 4, "magnets" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion + +datum/design/item/mecha/weapon/grenade_launcher + id = "mech_grenade_launcher" + req_tech = list("combat" = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + +datum/design/item/mecha/weapon/clusterbang_launcher + desc = "A weapon that violates the Geneva Convention at 6 rounds per minute." id = "clusterbang_launcher" - build_type = MECHFAB req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited - category = "Exosuit Equipment" -datum/design/mech_wormhole_gen - name = "Exosuit Module Design (Localized Wormhole Generator)" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." +// *** Nonweapon modules +datum/design/item/mecha/wormhole_gen + desc = "An exosuit module that can generate small quasi-stable wormholes." id = "mech_wormhole_gen" - build_type = MECHFAB req_tech = list("bluespace" = 3, "magnets" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - category = "Exosuit Equipment" -datum/design/mech_teleporter - name = "Exosuit Module Design (Teleporter Module)" - desc = "An exosuit module that allows exosuits to teleport to any position in view." +datum/design/item/mecha/teleporter + desc = "An exosuit module that allows teleportation to any position in view." id = "mech_teleporter" - build_type = MECHFAB req_tech = list("bluespace" = 10, "magnets" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/teleporter - category = "Exosuit Equipment" -datum/design/mech_rcd - name = "Exosuit Module Design (RCD Module)" - desc = "An exosuit-mounted Rapid Construction Device." +datum/design/item/mecha/rcd + desc = "An exosuit-mounted rapid construction device." id = "mech_rcd" - build_type = MECHFAB req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd - category = "Exosuit Equipment" -datum/design/mech_gravcatapult - name = "Exosuit Module Design (Gravitational Catapult Module)" - desc = "An exosuit mounted Gravitational Catapult." +datum/design/item/mecha/gravcatapult + desc = "An exosuit-mounted gravitational catapult." id = "mech_gravcatapult" - build_type = MECHFAB req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult - category = "Exosuit Equipment" -datum/design/mech_repair_droid - name = "Exosuit Module Design (Repair Droid Module)" - desc = "Automated Repair Droid. BEEP BOOP" +datum/design/item/mecha/repair_droid + desc = "Automated repair droid, exosuits' best companion. BEEP BOOP" id = "mech_repair_droid" - build_type = MECHFAB req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid - category = "Exosuit Equipment" -datum/design/mech_phoron_generator - name = "Exosuit Module Design (Phoron Generator Module)" +datum/design/item/mecha/phoron_generator desc = "Exosuit-mounted phoron generator." id = "mech_phoron_generator" - build_type = MECHFAB req_tech = list("phorontech" = 2, "powerstorage"= 2, "engineering" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/generator - category = "Exosuit Equipment" -datum/design/mech_energy_relay - name = "Exosuit Module Design (Tesla Energy Relay)" - desc = "Tesla Energy Relay" +datum/design/item/mecha/energy_relay id = "mech_energy_relay" - build_type = MECHFAB req_tech = list("magnets" = 4, "powerstorage" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - category = "Exosuit Equipment" -datum/design/mech_ccw_armor - name = "Exosuit Module Design(Reactive Armor Booster Module)" - desc = "Exosuit-mounted armor booster." +datum/design/item/mecha/ccw_armor + desc = "Exosuit close-combat armor booster." id = "mech_ccw_armor" - build_type = MECHFAB req_tech = list("materials" = 5, "combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster - category = "Exosuit Equipment" -datum/design/mech_proj_armor - name = "Exosuit Module Design(Reflective Armor Booster Module)" - desc = "Exosuit-mounted armor booster." +datum/design/item/mecha/proj_armor + desc = "Exosuit projectile armor booster." id = "mech_proj_armor" - build_type = MECHFAB req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - category = "Exosuit Equipment" -datum/design/mech_syringe_gun - name = "Exosuit Module Design(Syringe Gun)" +datum/design/item/mecha/syringe_gun desc = "Exosuit-mounted syringe gun and chemical synthesizer." id = "mech_syringe_gun" - build_type = MECHFAB req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - category = "Exosuit Equipment" -datum/design/mech_diamond_drill - name = "Exosuit Module Design (Diamond Mining Drill)" - desc = "An upgraded version of the standard drill" +datum/design/item/mecha/diamond_drill + desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger." id = "mech_diamond_drill" - build_type = MECHFAB req_tech = list("materials" = 4, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - category = "Exosuit Equipment" -datum/design/mech_generator_nuclear - name = "Exosuit Module Design (ExoNuclear Reactor)" - desc = "Compact nuclear reactor module" +datum/design/item/mecha/generator_nuclear + desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy." id = "mech_generator_nuclear" - build_type = MECHFAB req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear - category = "Exosuit Equipment" //////////////////////////////////////// @@ -924,464 +721,404 @@ datum/design/tech_disk materials = list("$metal" = 30, "$glass" = 10) build_path = /obj/item/weapon/disk/tech_disk +/////////////////////////////////// +/////Non-Board Computer Stuff////// +/////////////////////////////////// + +datum/design/item/intellicard + name = "'intelliCard', AI preservation and transportation system" + desc = "Allows for the construction of an intelliCard." + id = "intellicard" + req_tech = list("programming" = 4, "materials" = 4) + materials = list("$glass" = 1000, "$gold" = 200) + build_path = /obj/item/device/aicard + +datum/design/item/paicard + name = "'pAI', personal artificial intelligence device" + id = "paicard" + req_tech = list("programming" = 2) + materials = list("$glass" = 500, "$metal" = 500) + build_path = /obj/item/device/paicard + +datum/design/item/posibrain + id = "posibrain" + req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4) + materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$phoron" = 500, "$diamond" = 100) + build_path = /obj/item/device/mmi/digital/posibrain + //////////////////////////////////////// /////////////Stock Parts//////////////// //////////////////////////////////////// +datum/design/item/stock_part + build_type = PROTOLATHE -datum/design/basic_capacitor - name = "Basic Capacitor" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/AssembleDesignName() + ..() + name = "Component design ([item_name])" + +datum/design/item/stock_part/AssembleDesignDesc() + if(!desc) + desc = "A stock part used in the construction of various devices." + +datum/design/item/stock_part/basic_capacitor + build_type = PROTOLATHE | AUTOLATHE id = "basic_capacitor" req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = /obj/item/weapon/stock_parts/capacitor -datum/design/basic_sensor - name = "Basic Sensor Module" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/basic_sensor + build_type = PROTOLATHE | AUTOLATHE id = "basic_sensor" req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE materials = list("$metal" = 50, "$glass" = 20) build_path = /obj/item/weapon/stock_parts/scanning_module -datum/design/micro_mani - name = "Micro Manipulator" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/micro_mani + build_type = PROTOLATHE | AUTOLATHE id = "micro_mani" req_tech = list("materials" = 1, "programming" = 1) - build_type = PROTOLATHE | AUTOLATHE materials = list("$metal" = 30) build_path = /obj/item/weapon/stock_parts/manipulator -datum/design/basic_micro_laser - name = "Basic Micro-Laser" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/basic_micro_laser + build_type = PROTOLATHE | AUTOLATHE id = "basic_micro_laser" req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE materials = list("$metal" = 10, "$glass" = 20) build_path = /obj/item/weapon/stock_parts/micro_laser -datum/design/basic_matter_bin - name = "Basic Matter Bin" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/basic_matter_bin + build_type = PROTOLATHE | AUTOLATHE id = "basic_matter_bin" req_tech = list("materials" = 1) - build_type = PROTOLATHE | AUTOLATHE materials = list("$metal" = 80) build_path = /obj/item/weapon/stock_parts/matter_bin -datum/design/adv_capacitor - name = "Advanced Capacitor" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/adv_capacitor id = "adv_capacitor" req_tech = list("powerstorage" = 3) - build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = /obj/item/weapon/stock_parts/capacitor/adv -datum/design/adv_sensor - name = "Advanced Sensor Module" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/adv_sensor id = "adv_sensor" req_tech = list("magnets" = 3) - build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 20) build_path = /obj/item/weapon/stock_parts/scanning_module/adv -datum/design/nano_mani - name = "Nano Manipulator" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/nano_mani id = "nano_mani" req_tech = list("materials" = 3, "programming" = 2) - build_type = PROTOLATHE materials = list("$metal" = 30) build_path = /obj/item/weapon/stock_parts/manipulator/nano -datum/design/high_micro_laser - name = "High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/high_micro_laser id = "high_micro_laser" req_tech = list("magnets" = 3) - build_type = PROTOLATHE materials = list("$metal" = 10, "$glass" = 20) build_path = /obj/item/weapon/stock_parts/micro_laser/high -datum/design/adv_matter_bin - name = "Advanced Matter Bin" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/adv_matter_bin id = "adv_matter_bin" req_tech = list("materials" = 3) - build_type = PROTOLATHE materials = list("$metal" = 80) build_path = /obj/item/weapon/stock_parts/matter_bin/adv -datum/design/super_capacitor - name = "Super Capacitor" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/super_capacitor id = "super_capacitor" req_tech = list("powerstorage" = 5, "materials" = 4) - build_type = PROTOLATHE reliability_base = 71 materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) build_path = /obj/item/weapon/stock_parts/capacitor/super -datum/design/phasic_sensor - name = "Phasic Sensor Module" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/phasic_sensor id = "phasic_sensor" req_tech = list("magnets" = 5, "materials" = 3) - build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) reliability_base = 72 build_path = /obj/item/weapon/stock_parts/scanning_module/phasic -datum/design/pico_mani - name = "Pico Manipulator" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/pico_mani id = "pico_mani" req_tech = list("materials" = 5, "programming" = 2) - build_type = PROTOLATHE materials = list("$metal" = 30) reliability_base = 73 build_path = /obj/item/weapon/stock_parts/manipulator/pico -datum/design/ultra_micro_laser - name = "Ultra-High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/ultra_micro_laser id = "ultra_micro_laser" req_tech = list("magnets" = 5, "materials" = 5) - build_type = PROTOLATHE materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) reliability_base = 70 build_path = /obj/item/weapon/stock_parts/micro_laser/ultra -datum/design/super_matter_bin - name = "Super Matter Bin" - desc = "A stock part used in the construction of various devices." +datum/design/item/stock_part/super_matter_bin id = "super_matter_bin" req_tech = list("materials" = 5) - build_type = PROTOLATHE materials = list("$metal" = 80) reliability_base = 75 build_path = /obj/item/weapon/stock_parts/matter_bin/super +///////////////////////////////////////// +//////////Tcommsat Stock Parts/////////// +///////////////////////////////////////// - -datum/design/subspace_ansible - name = "Subspace Ansible" - desc = "A compact module capable of sensing extradimensional activity." +datum/design/item/stock_part/subspace_ansible id = "s-ansible" req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE materials = list("$metal" = 80, "$silver" = 20) build_path = /obj/item/weapon/stock_parts/subspace/ansible -datum/design/hyperwave_filter - name = "Hyperwave Filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." +datum/design/item/stock_part/hyperwave_filter id = "s-filter" req_tech = list("programming" = 3, "magnets" = 3) - build_type = PROTOLATHE materials = list("$metal" = 40, "$silver" = 10) build_path = /obj/item/weapon/stock_parts/subspace/filter -datum/design/subspace_amplifier - name = "Subspace Amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." +datum/design/item/stock_part/subspace_amplifier id = "s-amplifier" req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) build_path = /obj/item/weapon/stock_parts/subspace/amplifier -datum/design/subspace_treatment - name = "Subspace Treatment Disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." +datum/design/item/stock_part/subspace_treatment id = "s-treatment" req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE materials = list("$metal" = 10, "$silver" = 20) build_path = /obj/item/weapon/stock_parts/subspace/treatment -datum/design/subspace_analyzer - name = "Subspace Analyzer" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." +datum/design/item/stock_part/subspace_analyzer id = "s-analyzer" req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE materials = list("$metal" = 10, "$gold" = 15) build_path = /obj/item/weapon/stock_parts/subspace/analyzer -datum/design/subspace_crystal - name = "Ansible Crystal" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." +datum/design/item/stock_part/subspace_crystal id = "s-crystal" req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) build_path = /obj/item/weapon/stock_parts/subspace/crystal -datum/design/subspace_transmitter - name = "Subspace Transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." +datum/design/item/stock_part/subspace_transmitter id = "s-transmitter" req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3) - build_type = PROTOLATHE materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) build_path = /obj/item/weapon/stock_parts/subspace/transmitter //////////////////////////////////////// -//////////////////Power///////////////// +//////////Misc Circuit Boards/////////// //////////////////////////////////////// -datum/design/basic_cell - name = "Basic Power Cell" - desc = "A basic power cell that holds 1000 units of energy" - id = "basic_cell" - req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE |MECHFAB - materials = list("$metal" = 700, "$glass" = 50) - build_path = /obj/item/weapon/cell - category = "Misc" - -datum/design/high_cell - name = "High-Capacity Power Cell" - desc = "A power cell that holds 10000 units of energy" - id = "high_cell" - req_tech = list("powerstorage" = 2) - build_type = PROTOLATHE | AUTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 60) - build_path = /obj/item/weapon/cell/high - category = "Misc" - -datum/design/super_cell - name = "Super-Capacity Power Cell" - desc = "A power cell that holds 20000 units of energy" - id = "super_cell" - req_tech = list("powerstorage" = 3, "materials" = 2) - reliability_base = 75 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 70) - build_path = /obj/item/weapon/cell/super - category = "Misc" - -datum/design/hyper_cell - name = "Hyper-Capacity Power Cell" - desc = "A power cell that holds 30000 units of energy" - id = "hyper_cell" - req_tech = list("powerstorage" = 5, "materials" = 4) - reliability_base = 70 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) - build_path = /obj/item/weapon/cell/hyper - category = "Misc" - -datum/design/light_replacer - name = "Light Replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." - id = "light_replacer" - req_tech = list("magnets" = 3, "materials" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) - build_path = /obj/item/device/lightreplacer - -//////////////////////////////////////// -//////////////MISC Boards/////////////// -//////////////////////////////////////// - -datum/design/destructive_analyzer - name = "Destructive Analyzer Board" - desc = "The circuit board for a destructive analyzer." +datum/design/circuit/destructive_analyzer + name = "destructive analyzer" id = "destructive_analyzer" req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/destructive_analyzer -datum/design/protolathe - name = "Protolathe Board" - desc = "The circuit board for a protolathe." +datum/design/circuit/protolathe + name = "protolathe" id = "protolathe" req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/protolathe -datum/design/circuit_imprinter - name = "Circuit Imprinter Board" - desc = "The circuit board for a circuit imprinter." +datum/design/circuit/circuit_imprinter + name = "circuit imprinter" id = "circuit_imprinter" req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/circuit_imprinter -datum/design/autolathe - name = "Autolathe Board" - desc = "The circuit board for a autolathe." +datum/design/circuit/autolathe + name = "autolathe board" id = "autolathe" req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/autolathe -datum/design/rdservercontrol - name = "R&D Server Control Console Board" - desc = "The circuit board for a R&D Server Control Console" +datum/design/circuit/rdservercontrol + name = "R&D server control console" id = "rdservercontrol" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdservercontrol -datum/design/rdserver - name = "R&D Server Board" - desc = "The circuit board for an R&D Server" +datum/design/circuit/rdserver + name = "R&D server" id = "rdserver" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdserver -datum/design/mechfab - name = "Exosuit Fabricator Board" - desc = "The circuit board for an Exosuit Fabricator" +datum/design/circuit/mechfab + name = "exosuit fabricator" id = "mechfab" req_tech = list("programming" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mechfab -datum/design/gas_heater - name = "Gas Heating System Board" - desc = "The circuit board for a gas heating system" +datum/design/circuit/gas_heater + name = "gas heating system" id = "gasheater" req_tech = list("powerstorage" = 2, "engineering" = 1) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/unary_atmos/heater -datum/design/gas_cooler - name = "Gas Cooling System Board" - desc = "The circuit board for a gas cooling system" +datum/design/circuit/gas_cooler + name = "gas cooling system" id = "gascooler" req_tech = list("magnets" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler -datum/design/secure_airlock - name = "Secure Airlock Electronics" - desc = "Tamper-resistant airlock electronics" +datum/design/circuit/secure_airlock + name = "secure airlock electronics" + desc = "Allows for the construction of a tamper-resistant airlock electronics." id = "securedoor" req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/airlock_electronics/secure ///////////////////////////////////////// -////////////Power Stuff////////////////// +////////Power Stuff Circuitboards//////// ///////////////////////////////////////// - -datum/design/pacman - name = "PACMAN-type Generator Board" - desc = "The circuit board that for a PACMAN-type portable generator." +datum/design/circuit/pacman + name = "PACMAN-type generator" id = "pacman" req_tech = list("programming" = 3, "phorontech" = 3, "powerstorage" = 3, "engineering" = 3) - build_type = IMPRINTER reliability_base = 79 materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman -datum/design/superpacman - name = "SUPERPACMAN-type Generator Board" - desc = "The circuit board that for a SUPERPACMAN-type portable generator." +datum/design/circuit/superpacman + name = "SUPERPACMAN-type generator" id = "superpacman" req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) - build_type = IMPRINTER reliability_base = 76 materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman/super -datum/design/mrspacman - name = "MRSPACMAN-type Generator Board" - desc = "The circuit board that for a MRSPACMAN-type portable generator." +datum/design/circuit/mrspacman + name = "MRSPACMAN-type generator" id = "mrspacman" req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) - build_type = IMPRINTER reliability_base = 74 materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman/mrs -datum/design/batteryrack - name = "Cell rack PSU Board" - desc = "The circuit board for a power cell rack PSU." +datum/design/circuit/batteryrack + name = "cell rack PSU" id = "batteryrack" req_tech = list("powerstorage" = 3, "engineering" = 2) - build_type = IMPRINTER materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/batteryrack +datum/design/circuit/smes_cell + name = "'SMES' superconductive magnetic energy storage" + desc = "Allows for the construction of circuit boards used to build a SMES." + id = "smes_cell" + req_tech = list("powerstorage" = 7, "engineering" = 5) + //A uniquely-priced board; probably not the best idea + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 1000, "$silver" = 1000, "$diamond" = 500) + build_path = /obj/item/weapon/circuitboard/smes + +//////////////////////////////////////// +///////////////Power Items////////////// +//////////////////////////////////////// +datum/design/item/light_replacer + name = "Light replacer" + desc = "A device to automatically replace lights. Refill with working lightbulbs." + id = "light_replacer" + req_tech = list("magnets" = 3, "materials" = 4) + materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) + build_path = /obj/item/device/lightreplacer + +// *** Power cells +datum/design/item/powercell + build_type = PROTOLATHE | MECHFAB + +datum/design/item/powercell/AssembleDesignName() + name = "Power cell model ([item_name])" + +datum/design/item/powercell/AssembleDesignDesc() + if(build_path) + var/obj/item/weapon/cell/C = build_path + desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy." + +datum/design/item/powercell/basic + name = "basic" + build_type = PROTOLATHE | AUTOLATHE | MECHFAB + id = "basic_cell" + req_tech = list("powerstorage" = 1) + materials = list("$metal" = 700, "$glass" = 50) + build_path = /obj/item/weapon/cell + category = "Misc" + +datum/design/item/powercell/high + name = "high-capacity" + build_type = PROTOLATHE | AUTOLATHE | MECHFAB + id = "high_cell" + req_tech = list("powerstorage" = 2) + materials = list("$metal" = 700, "$glass" = 60) + build_path = /obj/item/weapon/cell/high + category = "Misc" + +datum/design/item/powercell/super + name = "super-capacity" + id = "super_cell" + req_tech = list("powerstorage" = 3, "materials" = 2) + reliability_base = 75 + materials = list("$metal" = 700, "$glass" = 70) + build_path = /obj/item/weapon/cell/super + category = "Misc" + +datum/design/item/powercell/hyper + name = "hyper-capacity" + id = "hyper_cell" + req_tech = list("powerstorage" = 5, "materials" = 4) + reliability_base = 70 + materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) + build_path = /obj/item/weapon/cell/hyper + category = "Misc" ///////////////////////////////////////// ////////////Medical Tools//////////////// ///////////////////////////////////////// +datum/design/item/medical + materials = list("$metal" = 30, "$glass" = 20) -datum/design/robot_scanner - name = "Cyborg Analyzer" - desc = "A hand-held scanner able to diagnose robotic injuries. " +datum/design/item/medical/AssembleDesignName() + ..() + name = "Biotech device prototype ([item_name])" + +datum/design/item/medical/robot_scanner + desc = "A hand-held scanner able to diagnose robotic injuries." id = "robot_scanner" req_tech = list("magnets" = 3, "biotech" = 2, "engineering" = 3) - build_type = PROTOLATHE materials = list("$metal" = 500, "$glass" = 200) - build_path = "/obj/item/device/robotanalyzer" + build_path = /obj/item/device/robotanalyzer -datum/design/mass_spectrometer - name = "Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood." +datum/design/item/medical/mass_spectrometer + desc = "A device for analyzing chemicals in blood." id = "mass_spectrometer" req_tech = list("biotech" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) reliability_base = 76 build_path = /obj/item/device/mass_spectrometer -datum/design/adv_mass_spectrometer - name = "Advanced Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood and their quantities." +datum/design/item/medical/adv_mass_spectrometer + desc = "A device for analyzing chemicals in blood and their quantities." id = "adv_mass_spectrometer" req_tech = list("biotech" = 2, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) reliability_base = 74 build_path = /obj/item/device/mass_spectrometer/adv -datum/design/reagent_scanner - name = "Reagent Scanner" +datum/design/item/medical/reagent_scanner desc = "A device for identifying chemicals." id = "reagent_scanner" req_tech = list("biotech" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) reliability_base = 76 build_path = /obj/item/device/reagent_scanner -datum/design/adv_reagent_scanner - name = "Advanced Reagent Scanner" +datum/design/item/medical/adv_reagent_scanner desc = "A device for identifying chemicals and their proportions." id = "adv_reagent_scanner" req_tech = list("biotech" = 2, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) reliability_base = 74 build_path = /obj/item/device/reagent_scanner/adv -datum/design/mmi - name = "Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." +datum/design/item/medical/mmi id = "mmi" req_tech = list("programming" = 2, "biotech" = 3) build_type = PROTOLATHE | MECHFAB @@ -1390,9 +1127,7 @@ datum/design/mmi build_path = /obj/item/device/mmi category = "Misc" -datum/design/mmi_radio - name = "Radio-enabled Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." +datum/design/item/medical/mmi_radio id = "mmi_radio" req_tech = list("programming" = 2, "biotech" = 4) build_type = PROTOLATHE | MECHFAB @@ -1401,9 +1136,7 @@ datum/design/mmi_radio build_path = /obj/item/device/mmi/radio_enabled category = "Misc" -datum/design/synthetic_flash - name = "Synthetic Flash" - desc = "When a problem arises, SCIENCE is the solution." +datum/design/item/medical/synthetic_flash id = "sflash" req_tech = list("magnets" = 3, "combat" = 2) build_type = MECHFAB @@ -1412,335 +1145,272 @@ datum/design/synthetic_flash build_path = /obj/item/device/flash/synthetic category = "Misc" -datum/design/nanopaste - name = "nanopaste" +datum/design/item/medical/nanopaste desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." id = "nanopaste" req_tech = list("materials" = 4, "engineering" = 3) - build_type = PROTOLATHE materials = list("$metal" = 7000, "$glass" = 7000) build_path = /obj/item/stack/nanopaste -/* // Removal of loyalty implants. Can't think of a way to add this to the config option. -datum/design/implant_loyal - name = "loyalty implant" - desc = "Makes you loyal or such." - id = "implant_loyal" - req_tech = list("materials" = 2, "biotech" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 7000, "$glass" = 7000) - build_path = /obj/item/weapon/implantcase/loyalty" -*/ +datum/design/item/scalpel_laser1 + name = "Basic Laser Scalpel" + desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." + id = "scalpel_laser1" + req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2) + materials = list("$metal" = 12500, "$glass" = 7500) + build_path = /obj/item/weapon/scalpel/laser1 -datum/design/implant_chem - name = "chemical implant" - desc = "Injects things." - id = "implant_chem" - req_tech = list("materials" = 2, "biotech" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/implantcase/chem +datum/design/item/scalpel_laser2 + name = "Improved Laser Scalpel" + desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." + id = "scalpel_laser2" + req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4) + materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500) + build_path = /obj/item/weapon/scalpel/laser2 -datum/design/implant_free - name = "freedom implant" - desc = "Use this to escape from those evil Red Shirts." - id = "implant_free" - req_tech = list("syndicate" = 2, "biotech" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/implantcase/freedom +datum/design/item/scalpel_laser3 + name = "Advanced Laser Scalpel" + desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" + id = "scalpel_laser3" + req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5) + materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500) + build_path = /obj/item/weapon/scalpel/laser3 -datum/design/chameleon - name = "Chameleon Kit" - desc = "It's a set of clothes with dials on them." - id = "chameleon" - req_tech = list("syndicate" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 500) - build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon +datum/design/item/scalpel_manager + name = "Incision Management System" + desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." + id = "scalpel_manager" + req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4) + materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750) + build_path = /obj/item/weapon/scalpel/manager +// *** Beakers (not really a subtype of design/item/medical) +datum/design/item/beaker/AssembleDesignName() + name = "Beaker prototype ([item_name])" -datum/design/bluespacebeaker - name = "bluespace beaker" +datum/design/item/beaker/bluespace + name = "bluespace" desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." id = "bluespacebeaker" req_tech = list("bluespace" = 2, "materials" = 6) - build_type = PROTOLATHE materials = list("$metal" = 3000, "$phoron" = 3000, "$diamond" = 500) reliability_base = 76 build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace -datum/design/noreactbeaker - name = "cryostasis beaker" +datum/design/item/beaker/noreact + name = "cryostasis" desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." id = "splitbeaker" req_tech = list("materials" = 2) - build_type = PROTOLATHE materials = list("$metal" = 3000) reliability_base = 76 build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact category = "Misc" -datum/design/scalpel_laser1 - name = "Basic Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." - id = "scalpel_laser1" - req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500) - build_path = /obj/item/weapon/scalpel/laser1 +// *** Implants (not really a subtype of design/item/medical) +datum/design/item/implant + materials = list("$metal" = 50, "$glass" = 50) -datum/design/scalpel_laser2 - name = "Improved Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." - id = "scalpel_laser2" - req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500) - build_path = /obj/item/weapon/scalpel/laser2 +datum/design/item/implant/AssembleDesignName() + ..() + name = "Implantable biocircuit design ([item_name])" -datum/design/scalpel_laser3 - name = "Advanced Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" - id = "scalpel_laser3" - req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5) - build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500) - build_path = /obj/item/weapon/scalpel/laser3 +/* // Removal of loyalty implants. Can't think of a way to add this to the config option. +datum/design/item/implant/loyalty + name = "loyalty" + id = "implant_loyal" + req_tech = list("materials" = 2, "biotech" = 3) + materials = list("$metal" = 7000, "$glass" = 7000) + build_path = /obj/item/weapon/implantcase/loyalty" +*/ -datum/design/scalpel_manager - name = "Incision Management System" - desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." - id = "scalpel_manager" - req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4) - build_type = PROTOLATHE - materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750) - build_path = /obj/item/weapon/scalpel/manager +datum/design/item/implant/chemical + name = "chemical" + id = "implant_chem" + req_tech = list("materials" = 2, "biotech" = 3) + build_path = /obj/item/weapon/implantcase/chem + +datum/design/item/implant/freedom + name = "freedom" + id = "implant_free" + req_tech = list("syndicate" = 2, "biotech" = 3) + build_path = /obj/item/weapon/implantcase/freedom ///////////////////////////////////////// /////////////////Weapons///////////////// ///////////////////////////////////////// +datum/design/item/weapon/AssembleDesignName() + ..() + name = "Weapon prototype ([item_name])" -datum/design/nuclear_gun - name = "Advanced Energy Gun" - desc = "An energy gun with an experimental miniaturized reactor." +datum/design/item/weapon/AssembleDesignDesc() + if(!desc) + if(build_path) + var/obj/item/I = build_path + desc = initial(I.desc) + ..() + +datum/design/item/weapon/nuclear_gun id = "nuclear_gun" req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500) reliability_base = 76 build_path = /obj/item/weapon/gun/energy/gun/nuclear locked = 1 -datum/design/stunrevolver - name = "Stun Revolver" - desc = "The prize of the Head of Security." +datum/design/item/weapon/stunrevolver id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) - build_type = PROTOLATHE materials = list("$metal" = 4000) build_path = /obj/item/weapon/gun/energy/stunrevolver locked = 1 -datum/design/lasercannon - name = "Laser Cannon" - desc = "A heavy duty laser cannon." +datum/design/item/weapon/lasercannon + desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core." id = "lasercannon" req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) - build_type = PROTOLATHE materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000) build_path = /obj/item/weapon/gun/energy/lasercannon locked = 1 -datum/design/decloner - name = "Decloner" - desc = "Your opponent will bubble into a messy pile of goop." +datum/design/item/weapon/decloner id = "decloner" req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6) - build_type = PROTOLATHE materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) build_path = /obj/item/weapon/gun/energy/decloner locked = 1 -datum/design/chemsprayer - name = "Chem Sprayer" +datum/design/item/weapon/chemsprayer desc = "An advanced chem spraying device." id = "chemsprayer" req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000) reliability_base = 100 build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer -datum/design/rapidsyringe - name = "Rapid Syringe Gun" - desc = "A gun that fires many syringes." +datum/design/item/weapon/rapidsyringe id = "rapidsyringe" req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000) build_path = /obj/item/weapon/gun/syringe/rapidsyringe /* -datum/design/largecrossbow +datum/design/item/weapon/largecrossbow name = "Energy Crossbow" desc = "A weapon favoured by syndicate infiltration teams." id = "largecrossbow" req_tech = list("combat" = 4, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000) build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow" */ -datum/design/temp_gun - name = "Temperature Gun" - desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want +datum/design/item/weapon/temp_gun + desc = "A gun that shoots high-powered glass-encased energy temperature bullets." id = "temp_gun" req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) build_path = /obj/item/weapon/gun/energy/temperature locked = 1 -datum/design/flora_gun - name = "Floral Somatoray" - desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." +datum/design/item/weapon/flora_gun id = "flora_gun" req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) - build_type = PROTOLATHE materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500) build_path = /obj/item/weapon/gun/energy/floragun -datum/design/large_grenade - name = "Large Grenade" - desc = "A grenade that affects a larger area and use larger containers." +datum/design/item/weapon/large_grenade id = "large_Grenade" req_tech = list("combat" = 3, "materials" = 2) - build_type = PROTOLATHE materials = list("$metal" = 3000) reliability_base = 79 build_path = /obj/item/weapon/grenade/chem_grenade/large -datum/design/smg - name = "Submachine Gun" - desc = "A lightweight, fast firing gun." +datum/design/item/weapon/smg id = "smg" req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) build_path = /obj/item/weapon/gun/projectile/automatic locked = 1 -datum/design/ammo_9mm - name = "Ammunition Box (9mm)" - desc = "A box of prototype 9mm ammunition." +datum/design/item/weapon/ammo_9mm id = "ammo_9mm" req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE materials = list("$metal" = 3750, "$silver" = 100) build_path = /obj/item/ammo_magazine/c9mm -datum/design/stunshell - name = "Stun Shell" +datum/design/item/weapon/stunshell desc = "A stunning shell for a shotgun." id = "stunshell" req_tech = list("combat" = 3, "materials" = 3) - build_type = PROTOLATHE materials = list("$metal" = 4000) build_path = /obj/item/ammo_casing/shotgun/stunshell -datum/design/phoronpistol - name = "phoron pistol" - desc = "A specialized firearm designed to fire lethal bolts of phoron." +datum/design/item/weapon/phoronpistol id = "ppistol" req_tech = list("combat" = 5, "phorontech" = 4) - build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000, "$phoron" = 3000) build_path = /obj/item/weapon/gun/energy/toxgun + ///////////////////////////////////////// /////////////////Mining////////////////// ///////////////////////////////////////// +//Subtype of item/weapon/, because we get the nice desc update +datum/design/item/weapon/mining/AssembleDesignName() + ..() + name = "Mining equipment design ([item_name])" -datum/design/jackhammer - name = "Sonic Jackhammer" - desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." +datum/design/item/weapon/mining/jackhammer id = "jackhammer" req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2) - build_type = PROTOLATHE materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500) build_path = /obj/item/weapon/pickaxe/jackhammer -datum/design/drill - name = "Mining Drill" - desc = "Yours is the drill that will pierce through the rock walls." +datum/design/item/weapon/mining/drill id = "drill" req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2) - build_type = PROTOLATHE materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners. build_path = /obj/item/weapon/pickaxe/drill -datum/design/plasmacutter - name = "Plasma Cutter" - desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." +datum/design/item/weapon/mining/plasmacutter id = "plasmacutter" req_tech = list("materials" = 4, "phorontech" = 3, "engineering" = 3) - build_type = PROTOLATHE materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$phoron" = 500) reliability_base = 79 build_path = /obj/item/weapon/pickaxe/plasmacutter -datum/design/pick_diamond - name = "Diamond Pickaxe" - desc = "A pickaxe with a diamond pick head, this is just like minecraft." +datum/design/item/weapon/mining/pick_diamond id = "pick_diamond" req_tech = list("materials" = 6) - build_type = PROTOLATHE materials = list("$diamond" = 3000) build_path = /obj/item/weapon/pickaxe/diamond -datum/design/drill_diamond - name = "Diamond Mining Drill" - desc = "Yours is the drill that will pierce the heavens!" +datum/design/item/weapon/mining/drill_diamond id = "drill_diamond" req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4) - build_type = PROTOLATHE materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed. reliability_base = 79 build_path = /obj/item/weapon/pickaxe/diamonddrill -datum/design/mesons - name = "Optical Meson Scanners" - desc = "Used for seeing walls, floors, and stuff through anything." - id = "mesons" - req_tech = list("magnets" = 2, "engineering" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/clothing/glasses/meson - ///////////////////////////////////////// //////////////Blue Space///////////////// ///////////////////////////////////////// - -datum/design/beacon - name = "Tracking Beacon" - desc = "A blue space tracking beacon." +datum/design/item/beacon + name = "Bluespace tracking beacon design" id = "beacon" req_tech = list("bluespace" = 1) - build_type = PROTOLATHE materials = list ("$metal" = 20, "$glass" = 10) build_path = /obj/item/device/radio/beacon -datum/design/bag_holding - name = "Bag of Holding" - desc = "A backpack that opens into a localized pocket of Blue Space." +datum/design/item/bag_holding + name = "'Bag of Holding', an infinite capacity bag prototype" + desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy." id = "bag_holding" req_tech = list("bluespace" = 4, "materials" = 6) - build_type = PROTOLATHE materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250) reliability_base = 80 build_path = /obj/item/weapon/storage/backpack/holding /* datum/design/bluespace_crystal - name = "Artificial Bluespace Crystal" + name = "Artificial bluespace crystal" desc = "A small blue crystal with mystical properties." id = "bluespace_crystal" req_tech = list("bluespace" = 5, "materials" = 7) @@ -1753,234 +1423,143 @@ datum/design/bluespace_crystal ///////////////////////////////////////// /////////////////HUDs//////////////////// ///////////////////////////////////////// +datum/design/item/hud + materials = list("$metal" = 50, "$glass" = 50) -datum/design/health_hud - name = "Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." +datum/design/item/hud/AssembleDesignName() + ..() + name = "HUD glasses prototype ([item_name])" + +datum/design/item/hud/AssembleDesignDesc() + desc = "Allows for the construction of \a [item_name] HUD glasses." + +datum/design/item/hud/health + name = "health scanner" id = "health_hud" req_tech = list("biotech" = 2, "magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) build_path = /obj/item/clothing/glasses/hud/health -datum/design/security_hud - name = "Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." +datum/design/item/hud/security + name = "security records" id = "security_hud" req_tech = list("magnets" = 3, "combat" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) build_path = /obj/item/clothing/glasses/hud/security locked = 1 ///////////////////////////////////////// -//////////////////Test/////////////////// +////////////////PDA Stuff//////////////// ///////////////////////////////////////// +datum/design/item/pda + name = "PDA design" + desc = "Cheaper than whiny non-digital assistants." + id = "pda" + req_tech = list("engineering" = 2, "powerstorage" = 3) + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/device/pda - /* test - name = "Test Design" - desc = "A design to test the new protolathe." - id = "protolathe_test" - build_type = PROTOLATHE - req_tech = list("materials" = 1) - materials = list("$gold" = 3000, "iron" = 15, "copper" = 10, "$silver" = 2500) - build_path = /obj/item/weapon/banhammer" */ +// *** Cartridges +datum/design/item/pda_cartridge + req_tech = list("engineering" = 2, "powerstorage" = 3) + materials = list("$metal" = 50, "$glass" = 50) -//////////////////////////////////////// -//Disks for transporting design datums// -//////////////////////////////////////// - -/obj/item/weapon/disk/design_disk - name = "Component Design Disk" - desc = "A disk for storing device design data for construction in lathes." - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - item_state = "card-id" - w_class = 2.0 - matter = list("metal" = 30,"glass" = 10) - var/datum/design/blueprint - -/obj/item/weapon/disk/design_disk/New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) +datum/design/item/pda_cartridge/AssembleDesignName() + ..() + name = "PDA accessory ([item_name])" +datum/design/item/pda_cartridge/cart_basic + id = "cart_basic" + build_path = /obj/item/weapon/cartridge +datum/design/item/pda_cartridge/engineering + id = "cart_engineering" + build_path = /obj/item/weapon/cartridge/engineering +datum/design/item/pda_cartridge/atmos + id = "cart_atmos" + build_path = /obj/item/weapon/cartridge/atmos +datum/design/item/pda_cartridge/medical + id = "cart_medical" + build_path = /obj/item/weapon/cartridge/medical +datum/design/item/pda_cartridge/chemistry + id = "cart_chemistry" + build_path = /obj/item/weapon/cartridge/chemistry +datum/design/item/pda_cartridge/security + id = "cart_security" + build_path = /obj/item/weapon/cartridge/security + locked = 1 +datum/design/item/pda_cartridge/janitor + id = "cart_janitor" + build_path = /obj/item/weapon/cartridge/janitor +/* +datum/design/item/pda_cartridge/clown + id = "cart_clown" + build_path = /obj/item/weapon/cartridge/clown" +datum/design/item/pda_cartridge/mime + id = "cart_mime" + build_path = /obj/item/weapon/cartridge/mime" +*/ +datum/design/item/pda_cartridge/science + id = "cart_science" + build_path = /obj/item/weapon/cartridge/signal/science +datum/design/item/pda_cartridge/quartermaster + id = "cart_quartermaster" + build_path = /obj/item/weapon/cartridge/quartermaster + locked = 1 +datum/design/item/pda_cartridge/hop + id = "cart_hop" + build_path = /obj/item/weapon/cartridge/hop + locked = 1 +datum/design/item/pda_cartridge/hos + id = "cart_hos" + build_path = /obj/item/weapon/cartridge/hos + locked = 1 +datum/design/item/pda_cartridge/ce + id = "cart_ce" + build_path = /obj/item/weapon/cartridge/ce + locked = 1 +datum/design/item/pda_cartridge/cmo + id = "cart_cmo" + build_path = /obj/item/weapon/cartridge/cmo + locked = 1 +datum/design/item/pda_cartridge/rd + id = "cart_rd" + build_path = /obj/item/weapon/cartridge/rd + locked = 1 +datum/design/item/pda_cartridge/captain + id = "cart_captain" + build_path = /obj/item/weapon/cartridge/captain + locked = 1 ///////////////////////////////////////// -//////////////Borg Upgrades////////////// +///////////////Misc Stuff//////////////// ///////////////////////////////////////// -datum/design/borg_syndicate_module - name = "Borg Illegal Weapons Upgrade" - desc = "Allows for the construction of illegal upgrades for cyborgs" +datum/design/item/borg_syndicate_module + name = "Cyborg lethal weapons upgrade" + desc = "Allows for the construction of lethal upgrades for cyborgs." id = "borg_syndicate_module" build_type = MECHFAB req_tech = list("combat" = 4, "syndicate" = 3) build_path = /obj/item/borg/upgrade/syndicate category = "Cyborg Upgrade Modules" -///////////////////////////////////////// -/////////////PDA and Radio stuff///////// -///////////////////////////////////////// -datum/design/binaryencrypt - name = "binary encryption key" - desc = "An encyption key for a radio headset. Contains cypherkeys." +datum/design/item/mesons + name = "Optical meson scanners design" + desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else." + id = "mesons" + req_tech = list("magnets" = 2, "engineering" = 2) + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/clothing/glasses/meson + +datum/design/item/binaryencrypt + name = "Binary encryption key" + desc = "Allows for deciphering the binary channel on-the-fly." id = "binaryencrypt" req_tech = list("syndicate" = 2) - build_type = PROTOLATHE materials = list("$metal" = 300, "$glass" = 300) build_path = /obj/item/device/encryptionkey/binary -datum/design/pda - name = "PDA" - desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." - id = "pda" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/device/pda -datum/design/cart_basic - name = "Generic Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_basic" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge -datum/design/cart_engineering - name = "Power-ON Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_engineering" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/engineering -datum/design/cart_atmos - name = "BreatheDeep Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_atmos" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/atmos -datum/design/cart_medical - name = "Med-U Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_medical" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/medical -datum/design/cart_chemistry - name = "ChemWhiz Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_chemistry" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/chemistry -datum/design/cart_security - name = "R.O.B.U.S.T. Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_security" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/security - locked = 1 -datum/design/cart_janitor - name = "CustodiPRO Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_janitor" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/janitor -/* -datum/design/cart_clown - name = "Honkworks 5.0 Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_clown" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/clown" -datum/design/cart_mime - name = "Gestur-O 1000 Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_mime" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/mime" -*/ - -datum/design/cart_science - name = "Signal Ace 2 Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_science" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/signal/science -datum/design/cart_quartermaster - name = "Space Parts & Space Vendors Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_quartermaster" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/quartermaster - locked = 1 -datum/design/cart_hop - name = "Human Resources 9001 Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_hop" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/hop - locked = 1 -datum/design/cart_hos - name = "R.O.B.U.S.T. DELUXE Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_hos" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/hos - locked = 1 -datum/design/cart_ce - name = "Power-On DELUXE Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_ce" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/ce - locked = 1 -datum/design/cart_cmo - name = "Med-U DELUXE Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_cmo" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/cmo - locked = 1 -datum/design/cart_rd - name = "Signal Ace DELUXE Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_rd" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/rd - locked = 1 -datum/design/cart_captain - name = "Value-PAK Cartridge" - desc = "A data cartridge for portable microcomputers." - id = "cart_captain" - req_tech = list("engineering" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = /obj/item/weapon/cartridge/captain - locked = 1 +datum/design/item/chameleon + name = "Holographic equipment kit" + desc = "A kit of dangerous, high-tech equipment with changeable looks." + id = "chameleon" + req_tech = list("syndicate" = 2) + materials = list("$metal" = 500) + build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index f6ed81ae41..aef24dd8be 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -8,7 +8,7 @@ It is used to destroy hand-held objects and advance technological research. Cont Note: Must be placed within 3 tiles of the R&D Console */ /obj/machinery/r_n_d/destructive_analyzer - name = "Destructive Analyzer" + name = "destructive analyzer" icon_state = "d_analyzer" var/obj/item/weapon/loaded_item = null var/decon_mod = 1 @@ -105,13 +105,3 @@ Note: Must be placed within 3 tiles of the R&D Console busy = 0 return 1 return - -//For testing purposes only. -/*/obj/item/weapon/deconstruction_test - name = "Test Item" - desc = "WTF?" - icon = 'icons/obj/weapons.dmi' - icon_state = "d20" - g_amt = 5000 - m_amt = 5000 - origin_tech = "materials=5;phorontech=5;syndicate=5;programming=9"*/ diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 7299f801be..3f40be01df 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -32,7 +32,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, */ /obj/machinery/computer/rdconsole - name = "R&D Console" + name = "R&D control console" icon_state = "rdcomp" circuit = /obj/item/weapon/circuitboard/rdconsole var/datum/research/files //Stores all the collected research data. @@ -50,9 +50,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = list(access_research) //Data and setting manipulation requires scientist access. - - - /obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. var/datum/tech/check_tech var/return_name = null @@ -125,7 +122,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, C.files.AddDesign2Known(D) C.files.RefreshResearch() - /obj/machinery/computer/rdconsole/New() ..() files = new /datum/research(src) //Setup the research data holder. @@ -250,8 +246,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(linked_destroy.busy) usr << "\red The destructive analyzer is busy at the moment." else - var/choice = input("Proceeding will destroy loaded item.") in list("Proceed", "Cancel") - if(choice == "Cancel" || !linked_destroy) return + if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy) return linked_destroy.busy = 1 screen = 0.1 updateUsrDialog() @@ -441,7 +436,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, linked_lathe.reagents.clear_reagents() else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material - var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"]) + var/desired_num_sheets = text2num(href_list["amount"]) var/res_amount, type switch(href_list["lathe_ejectsheet"]) if("metal") @@ -475,7 +470,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, else del sheet else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material - var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) + var/desired_num_sheets = text2num(href_list["amount"]) var/res_amount, type switch(href_list["imprinter_ejectsheet"]) if("glass") @@ -577,22 +572,38 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(1.0) //Main Menu dat += "Main Menu:

" - dat += "Current Research Levels
" - if(t_disk) dat += "Disk Operations
" - else if(d_disk) dat += "Disk Operations
" - else dat += "(Please Insert Disk)
" - if(linked_destroy != null) dat += "Destructive Analyzer Menu
" - if(linked_lathe != null) dat += "Protolathe Construction Menu
" - if(linked_imprinter != null) dat += "Circuit Construction Menu
" - dat += "Settings" + dat += "Loaded disk: " + dat += (t_disk || d_disk) ? (t_disk ? "technology storage disk" : "design storage disk") : "none" + dat += "
" if(1.1) //Research viewer + dat += "Main Menu
" dat += "Current Research Levels:

" + dat += "
    " for(var/datum/tech/T in files.known_tech) - dat += "[T.name]
    " - dat += "* Level: [T.level]
    " - dat += "* Summary: [T.desc]
    " - dat += "Main Menu" + dat += "
  • " + dat += "[T.name]" + dat += "
      " + dat += "
    • Level: [T.level]" + dat += "
    • Summary: [T.desc]" + dat += "
    " + dat += "
" if(1.2) //Technology Disk Menu @@ -615,9 +626,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
Main Menu || " dat += "Return to Disk Operations
" dat += "Load Technology to Disk:

" + dat += "
    " for(var/datum/tech/T in files.known_tech) - dat += "[T.name] " - dat += "(Copy to Disk)
    " + dat += "
  • [T.name] " + dat += "\[copy to disk\]" + dat += "
" if(1.4) //Design Disk menu. dat += "Main Menu
" @@ -645,58 +658,67 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu || " dat += "Return to Disk Operations
" dat += "Load Design to Disk:

" + dat += "
    " for(var/datum/design/D in files.known_designs) - dat += "[D.name] " - dat += "(Copy to Disk)
    " + if(D.build_path) + dat += "
  • [D.name] " + dat += "\[copy to disk\]" + dat += "
" if(1.6) //R&D console settings dat += "Main Menu
" - dat += "R&D Console Setting:

" + dat += "R&D Console Setting:
" + dat += "
    " if(sync) - dat += "Sync Database with Network
    " - dat += "Disconnect from Research Network
    " + dat += "
  • Sync Database with Network
    " + dat += "
  • Disconnect from Research Network
    " else - dat += "Connect to Research Network
    " - dat += "Device Linkage Menu
    " - dat += "Lock Console
    " - dat += "Reset R&D Database.
    " + dat += "
  • Connect to Research Network
    " + dat += "
  • Device Linkage Menu
    " + dat += "
  • Lock Console
    " + dat += "
  • Reset R&D Database
    " + dat += "
      " if(1.7) //R&D device linkage dat += "Main Menu || " - dat += "Settings Menu
      " + dat += "Settings Menu
      " dat += "R&D Console Device Linkage Menu:

      " - dat += "Re-sync with Nearby Devices
      " - dat += "Linked Devices:
      " + dat += "Re-sync with Nearby Devices
      " + dat += "Linked Devices:" + dat += "
        " if(linked_destroy) - dat += "* Destructive Analyzer (Disconnect)
        " + dat += "
      • Destructive Analyzer (Disconnect)" else - dat += "* (No Destructive Analyzer Linked)
        " + dat += "
      • (No Destructive Analyzer Linked)" if(linked_lathe) - dat += "* Protolathe (Disconnect)
        " + dat += "
      • Protolathe (Disconnect)" else - dat += "* (No Protolathe Linked)
        " + dat += "
      • (No Protolathe Linked)" if(linked_imprinter) - dat += "* Circuit Imprinter (Disconnect)
        " + dat += "
      • Circuit Imprinter (Disconnect)" else - dat += "* (No Circuit Imprinter Linked)
        " + dat += "
      • (No Circuit Imprinter Linked)" + dat += "
      " ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// if(2.0) + dat += "Main Menu
      " dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE

      " - dat += "Main Menu" if(2.1) + dat += "Main Menu
      " dat += "No Item Loaded. Standing-by...

      " - dat += "Main Menu" if(2.2) dat += "Main Menu
      " dat += "Deconstruction Menu
      " dat += "Name: [linked_destroy.loaded_item.name]
      " - dat += "Origin Tech:
      " + dat += "Origin Tech:" + dat += "
        " var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech) for(var/T in temp_tech) - dat += "* [CallTechName(T)] [temp_tech[T]]
        " + dat += "
      • [CallTechName(T)] [temp_tech[T]]" + dat += "
      " dat += "
      Deconstruct Item || " dat += "Eject Item || " @@ -712,13 +734,14 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Protolathe Menu:

      " dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
      " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
      " + dat += "
        " for(var/datum/design/D in files.known_designs) - if(!(D.build_type & PROTOLATHE)) + if(!D.build_path || !(D.build_type & PROTOLATHE)) continue - var/temp_dat = "[D.name]" + var/temp_dat var/check_materials = 1 for(var/M in D.materials) - temp_dat += " [D.materials[M]] [CallMaterialName(M)]" + temp_dat += ", [D.materials[M]] [CallMaterialName(M)]" if(copytext(M, 1, 2) == "$") switch(M) if("$glass") @@ -737,64 +760,52 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0 else if (!linked_lathe.reagents.has_reagent(M, D.materials[M])) check_materials = 0 + if(temp_dat) + temp_dat = " \[[copytext(temp_dat,3)]\]" if (check_materials) - dat += "* [temp_dat]
        " + dat += "
      • [D.name][temp_dat]" else - dat += "* [temp_dat]
        " + dat += "
      • [D.name][temp_dat]" + dat += "
      " if(3.2) //Protolathe Material Storage Sub-menu dat += "Main Menu || " dat += "Protolathe Menu
      " dat += "Material Storage

      " - //Metal - dat += "* [linked_lathe.m_amount] cm3 of Metal || " - dat += "Eject: " - if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) " - if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) " - if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)" - dat += "
      " - //Glass - dat += "* [linked_lathe.g_amount] cm3 of Glass || " - dat += "Eject: " - if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) " - if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) " - if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)" - dat += "
      " - //Gold - dat += "* [linked_lathe.gold_amount] cm3 of Gold || " - dat += "Eject: " - if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Silver - dat += "* [linked_lathe.silver_amount] cm3 of Silver || " - dat += "Eject: " - if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Phoron - dat += "* [linked_lathe.phoron_amount] cm3 of Solid Phoron || " - dat += "Eject: " - if(linked_lathe.phoron_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.phoron_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.phoron_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Uranium - dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || " - dat += "Eject: " - if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Diamond - dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || " - dat += "Eject: " - if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " + dat += "
        " + for(var/M in list("metal", "glass", "gold", "silver", "phoron", "uranium", "diamond")) + var/amount + var/sheetsize = 2000 + switch(M) + if("metal") + amount = linked_lathe.m_amount + sheetsize = 3750 + if("glass") + amount = linked_lathe.g_amount + sheetsize = 3750 + if("gold") + amount = linked_lathe.gold_amount + if("silver") + amount = linked_lathe.silver_amount + if("phoron") + amount = linked_lathe.phoron_amount + if("uranium") + amount = linked_lathe.uranium_amount + if("diamond") + amount = linked_lathe.diamond_amount + else + continue + dat += "
      • [capitalize(M)]: [amount] cm3" + if(amount >= sheetsize) + dat += " || Eject " + for (var/C in list(1,3,5,10,15,20,25,30,40)) + if(amount < C * sheetsize) + break + dat += "[C > 1 ? ", " : ""][C] " + + dat += " or max sheets" + dat += "" + dat += "
      " if(3.3) //Protolathe Chemical Storage Submenu dat += "Main Menu || " @@ -817,14 +828,14 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Circuit Imprinter Menu:

      " dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
      " dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
      " - + dat += "
        " for(var/datum/design/D in files.known_designs) - if(!(D.build_type & IMPRINTER)) + if(!D.build_path || !(D.build_type & IMPRINTER)) continue - var/temp_dat = "[D.name]" + var/temp_dat var/check_materials = 1 for(var/M in D.materials) - temp_dat += " [D.materials[M]] [CallMaterialName(M)]" + temp_dat += ", [D.materials[M]] [CallMaterialName(M)]" if(copytext(M, 1, 2) == "$") switch(M) if("$glass") @@ -837,10 +848,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0 else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M])) check_materials = 0 + if(temp_dat) + temp_dat = " \[[copytext(temp_dat,3)]\]" if (check_materials) - dat += "* [temp_dat]
        " + dat += "
      • [D.name][temp_dat]" else - dat += "* [temp_dat]
        " + dat += "
      • [D.name][temp_dat]" + dat += "
      " if(4.2) dat += "Main Menu || " @@ -855,35 +869,44 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu || " dat += "Circuit Imprinter Menu
      " dat += "Material Storage

      " - //Glass - dat += "* [linked_imprinter.g_amount] cm3 of Glass || " - dat += "Eject: " - if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) " - if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) " - if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)" - dat += "
      " - //Gold - dat += "* [linked_imprinter.gold_amount] cm3 of Gold || " - dat += "Eject: " - if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) " - if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) " - if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Diamond - dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || " - dat += "Eject: " - if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) " - if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) " - if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)" - dat += "
      " - //Uranium - dat += "* [linked_imprinter.uranium_amount] cm3 of Uranium || " - dat += "Eject: " - if(linked_imprinter.uranium_amount >= 2000) dat += "(1 Sheet) " - if(linked_imprinter.uranium_amount >= 10000) dat += "(5 Sheets) " - if(linked_imprinter.uranium_amount >= 2000) dat += "(Max Sheets)" + dat += "
        " + for(var/M in list("glass", "gold", "diamond", "uranium")) + var/amount + var/sheetsize = 2000 + switch(M) + if("glass") + amount = linked_imprinter.g_amount + sheetsize = 3750 + if("gold") + amount = linked_imprinter.gold_amount + if("diamond") + amount = linked_imprinter.diamond_amount + if("uranium") + amount = linked_imprinter.uranium_amount + dat += "
      • [capitalize(M)]: [amount] cm3" + if(amount >= sheetsize) + dat += " || Eject: " + for (var/C in list(1,3,5,10,15,20,25,30,40)) + if(amount < C * sheetsize) + break + dat += "[C > 1 ? ", " : ""][C] " - user << browse("Research and Development Console
        [dat]", "window=rdconsole;size=575x400") + dat += " or max sheets" + dat += "" + dat += "
      " + + ///////////////////Research Information Browser//////////////////// + if(5.0) + dat += "Main Menu
      " + dat += "List of Researched Technologies and Designs:" + dat += "
        " + for(var/datum/design/D in files.known_designs) + if(D.build_path) + dat += "
      • [D.name]: [D.desc]" + dat += "
      " + + + user << browse("Research and Development Console
      [dat]", "window=rdconsole;size=850x600") onclose(user, "rdconsole") /obj/machinery/computer/rdconsole/robotics diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 536d712f2e..3dcd21e9bb 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -257,7 +257,7 @@ datum/tech/robotics /obj/item/weapon/disk/tech_disk - name = "Technology Disk" + name = "technology disk" desc = "A disk for storing technology data for further research." icon = 'icons/obj/cloning.dmi' icon_state = "datadisk2" @@ -268,4 +268,18 @@ datum/tech/robotics /obj/item/weapon/disk/tech_disk/New() src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) \ No newline at end of file + src.pixel_y = rand(-5.0, 5) + +/obj/item/weapon/disk/design_disk + name = "component design disk" + desc = "A disk for storing device design data for construction in lathes." + icon = 'icons/obj/cloning.dmi' + icon_state = "datadisk2" + item_state = "card-id" + w_class = 2.0 + matter = list("metal" = 30,"glass" = 10) + var/datum/design/blueprint + +/obj/item/weapon/disk/design_disk/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) diff --git a/code/modules/shuttles/antagonist.dm b/code/modules/shuttles/antagonist.dm index 4383626789..5bad5364cb 100644 --- a/code/modules/shuttles/antagonist.dm +++ b/code/modules/shuttles/antagonist.dm @@ -4,6 +4,6 @@ shuttle_tag = "Vox Skipjack" /obj/machinery/computer/shuttle_control/multi/syndicate - name = "Syndicate control console" + name = "mercenary shuttle control console" req_access = list(access_syndicate) - shuttle_tag = "Mercenary" \ No newline at end of file + shuttle_tag = "Mercenary" diff --git a/code/modules/shuttles/departmental.dm b/code/modules/shuttles/departmental.dm index 9efd0ed795..018d194a71 100644 --- a/code/modules/shuttles/departmental.dm +++ b/code/modules/shuttles/departmental.dm @@ -1,17 +1,17 @@ /obj/machinery/computer/shuttle_control/mining - name = "mining shuttle console" + name = "mining shuttle control console" shuttle_tag = "Mining" //req_access = list(access_mining) circuit = /obj/item/weapon/circuitboard/mining_shuttle /obj/machinery/computer/shuttle_control/engineering - name = "engineering shuttle console" + name = "engineering shuttle control console" shuttle_tag = "Engineering" //req_one_access_txt = "11;24" circuit = /obj/item/weapon/circuitboard/engineering_shuttle /obj/machinery/computer/shuttle_control/research - name = "research shuttle console" + name = "research shuttle control console" shuttle_tag = "Research" //req_access = list(access_research) - circuit = /obj/item/weapon/circuitboard/research_shuttle \ No newline at end of file + circuit = /obj/item/weapon/circuitboard/research_shuttle diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index c078307490..c0e8d31546 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -126,4 +126,4 @@ //returns 1 if the shuttle has a valid arrive time /datum/shuttle/proc/has_arrive_time() - return (moving_status == SHUTTLE_INTRANSIT) \ No newline at end of file + return (moving_status == SHUTTLE_INTRANSIT) diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index 013b77144f..814401cb5a 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -1,4 +1,3 @@ - /datum/shuttle/ferry/emergency //pass diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm index 0fb54b2396..5d6663f3b5 100644 --- a/code/modules/shuttles/shuttle_ferry.dm +++ b/code/modules/shuttles/shuttle_ferry.dm @@ -1,4 +1,3 @@ - #define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up. /datum/shuttle/ferry diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index 82f921ff90..c4122434e7 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -1,8 +1,3 @@ - - - - - /datum/shuttle/ferry/supply var/away_location = 1 //the location to hide at while pretending to be in-transit var/late_chance = 80 @@ -76,4 +71,4 @@ //returns the ETA in minutes /datum/shuttle/ferry/supply/proc/eta_minutes() var/ticksleft = arrive_time - world.time - return round(ticksleft/600,1) \ No newline at end of file + return round(ticksleft/600,1) diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm index 4c3b7bdf37..9c2528adaa 100644 --- a/code/modules/shuttles/shuttles_multi.dm +++ b/code/modules/shuttles/shuttles_multi.dm @@ -140,4 +140,4 @@ MS.short_jump(MS.last_departed, MS.destinations[choice]) MS.last_departed = MS.destinations[choice] - updateUsrDialog() \ No newline at end of file + updateUsrDialog() diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm index 80899aeee7..76ad0b6201 100644 --- a/code/modules/surgery/headreattach.dm +++ b/code/modules/surgery/headreattach.dm @@ -181,11 +181,11 @@ target.update_body() target.updatehealth() target.UpdateDamageIcon() - var/obj/item/weapon/organ/head/B = tool - if (B.brainmob.mind) - B.brainmob.mind.transfer_to(target) - del(B) - + for(var/obj/item/organ/replacing_organ in tool) + replacing_organ.loc = get_turf(tool) + replacing_organ.replaced(target,affected) + del(replacing_organ) //Just in case. + del(tool) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index b5fbb3ecb0..c6e27d1e04 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -314,30 +314,12 @@ // Extract the organ! if(target.op_stage.current_organ) - - var/datum/organ/external/affected = target.get_organ(target_zone) var/datum/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] - var/obj/item/organ/O if(I && istype(I)) O = I.remove(user) if(O && istype(O)) - - // Stop the organ from continuing to reject. - O.organ_data.rejecting = null - - // Transfer over some blood data, if the organ doesn't have data. - var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list - if(!organ_blood || !organ_blood.data["blood_DNA"]) - target.vessel.trans_to(O, 5, 1, 1) - - // Kinda redundant, but I'm getting some buggy behavior. - target.internal_organs_by_name[target.op_stage.current_organ] = null - target.internal_organs_by_name -= target.op_stage.current_organ - target.internal_organs -= O.organ_data - affected.internal_organs -= O.organ_data O.removed(target,user) - target.op_stage.current_organ = null fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -409,30 +391,8 @@ "\blue You have transplanted \the [tool] into [target]'s [affected.display_name].") user.drop_item(tool) var/obj/item/organ/O = tool - if(istype(O)) - - var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list - if(!transplant_blood) - O.organ_data.transplant_data = list() - O.organ_data.transplant_data["species"] = target.species.name - O.organ_data.transplant_data["blood_type"] = target.dna.b_type - O.organ_data.transplant_data["blood_DNA"] = target.dna.unique_enzymes - else - O.organ_data.transplant_data = list() - O.organ_data.transplant_data["species"] = transplant_blood.data["species"] - O.organ_data.transplant_data["blood_type"] = transplant_blood.data["blood_type"] - O.organ_data.transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"] - - O.organ_data.organ_holder = null - O.organ_data.owner = target - target.internal_organs |= O.organ_data - affected.internal_organs |= O.organ_data - target.internal_organs_by_name[O.organ_tag] = O.organ_data - O.organ_data.status |= ORGAN_CUT_AWAY - O.replaced(target) - - del(O) + O.replaced(target,affected) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index c5e883e79a..3f5cc5800f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -5,7 +5,7 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null - // type paths referencing mutantraces that this step applies to. + // type paths referencing races that this step applies to. var/list/allowed_species = null var/list/disallowed_species = null diff --git a/code/setup.dm b/code/setup.dm index 4c541b1da7..c3ab2739a8 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -9,7 +9,7 @@ #define IDEAL_GAS_ENTROPY_CONSTANT 1164 //(mol^3 * s^3) / (kg^3 * L). Equal to (4*pi/(avrogadro's number * planck's constant)^2)^(3/2) / (avrogadro's number * 1000 Liters per m^3). //radiation constants -#define STEFAN_BOLTZMANN_CONSTANT 0.0000000567 //W/(m^2*K^4) +#define STEFAN_BOLTZMANN_CONSTANT 5.6704e-8 //W/(m^2*K^4) #define COSMIC_RADIATION_TEMPERATURE 3.15 //K #define AVERAGE_SOLAR_RADIATION 200 //W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars. #define RADIATOR_OPTIMUM_PRESSURE 110 //kPa at 20 C @@ -29,10 +29,10 @@ #define BREATH_VOLUME 0.5 //liters in a normal breath #define BREATH_MOLES (ONE_ATMOSPHERE * BREATH_VOLUME /(T20C*R_IDEAL_GAS_EQUATION)) +//Amount of air to take a from a tile #define BREATH_PERCENTAGE BREATH_VOLUME/CELL_VOLUME - //Amount of air to take a from a tile +//Amount of air needed before pass out/suffocation commences #define HUMAN_NEEDED_OXYGEN MOLES_CELLSTANDARD*BREATH_PERCENTAGE*0.16 - //Amount of air needed before pass out/suffocation commences #define SOUND_MINIMUM_PRESSURE 10 @@ -87,41 +87,30 @@ #define REAGENTS_EFFECT_MULTIPLIER REAGENTS_METABOLISM / 0.4 +//Minimum ratio of air that must move to/from a tile to suspend group processing #define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 - //Minimum ratio of air that must move to/from a tile to suspend group processing +//Minimum amount of air that has to move before a group processing can be suspended #define MINIMUM_AIR_TO_SUSPEND MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND - //Minimum amount of air that has to move before a group processing can be suspended #define MINIMUM_MOLES_DELTA_TO_MOVE MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND //Either this must be active #define MINIMUM_TEMPERATURE_TO_MOVE T20C+100 //or this (or both, obviously) +//Minimum temperature difference before group processing is suspended #define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012 #define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4 - //Minimum temperature difference before group processing is suspended +//Minimum temperature difference before the gas temperatures are just set to be equal #define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5 - //Minimum temperature difference before the gas temperatures are just set to be equal - #define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION T20C+10 #define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION T20C+200 +//Must be between 0 and 1. Values closer to 1 equalize temperature faster +//Should not exceed 0.4 else strange heat flow occur #define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4 #define WALL_HEAT_TRANSFER_COEFFICIENT 0.0 #define DOOR_HEAT_TRANSFER_COEFFICIENT 0.0 #define SPACE_HEAT_TRANSFER_COEFFICIENT 0.2 //a hack to partly simulate radiative heat #define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4 #define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 //a hack for now - //Must be between 0 and 1. Values closer to 1 equalize temperature faster - //Should not exceed 0.4 else strange heat flow occur - -/* -#define FIRE_MINIMUM_TEMPERATURE_TO_SPREAD 150+T0C -#define FIRE_MINIMUM_TEMPERATURE_TO_EXIST 100+T0C -#define FIRE_SPREAD_RADIOSITY_SCALE 0.85 -#define FIRE_CARBON_ENERGY_RELEASED 500000 //Amount of heat released per mole of burnt carbon into the tile -#define FIRE_PHORON_ENERGY_RELEASED 3000000 //Amount of heat released per mole of burnt phoron into the tile -#define FIRE_GROWTH_RATE 40000 //For small fires - -#define WATER_BOIL_TEMP 393 */ // Fire Damage #define CARBON_LIFEFORM_FIRE_RESISTANCE 200+T0C @@ -144,32 +133,19 @@ #define XGM_GAS_OXIDIZER 2 #define XGM_GAS_CONTAMINANT 4 -//Used to be used by FEA -//var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference when atmos wants to remove excess heat. - #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking #define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere #define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion #define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa aboe threshold // was 2 atm - -//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage -var/MAX_EXPLOSION_RANGE = 14 -//#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE - #define HUMAN_STRIP_DELAY 40 //takes 40ds = 4s to strip someone. - #define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien. - #define NORMPIPERATE 30 //pipe-insulation rate divisor #define HEATPIPERATE 8 //heat-exch pipe insulation - #define FLOWFRAC 0.99 // fraction of gas transfered per process - #define SHOES_SLOWDOWN -1.0 // How much shoes slow you down by default. Negative values speed you up - //ITEM INVENTORY SLOT BITMASKS #define SLOT_OCLOTHING 1 #define SLOT_ICLOTHING 2 @@ -228,19 +204,20 @@ var/MAX_EXPLOSION_RANGE = 14 #define PASSBLOB 8 //turf-only flags -#define NOJAUNT 1 - +#define NOJAUNT 1 //This is used in literally one place, turf.dm, to block ethereal jaunt. //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. -#define HIDEGLOVES 1 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDETAIL 16 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDEMASK 1 //APPLIES ONLY TO HELMETS/MASKS!! -#define HIDEEARS 2 //APPLIES ONLY TO HELMETS/MASKS!! (ears means headsets and such) -#define HIDEEYES 4 //APPLIES ONLY TO HELMETS/MASKS!! (eyes means glasses) -#define HIDEFACE 8 //APPLIES ONLY TO HELMETS/MASKS!! Dictates whether we appear as unknown. +//APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDEGLOVES 1 +#define HIDESUITSTORAGE 2 +#define HIDEJUMPSUIT 4 +#define HIDESHOES 8 +#define HIDETAIL 16 +//APPLIES ONLY TO HELMETS/MASKS!! +#define HIDEMASK 1 +#define HIDEEARS 2 //headsets and such +#define HIDEEYES 4 //glasses +#define HIDEFACE 8 //Dictates whether we appear as unknown. //slots #define slot_back 1 @@ -304,7 +281,6 @@ var/MAX_EXPLOSION_RANGE = 14 #define THERMAL_PROTECTION_HAND_LEFT 0.025 #define THERMAL_PROTECTION_HAND_RIGHT 0.025 - //bitflags for mutations // Extra powers: #define SHADOW (1<<10) // shadow teleportation (create in/out portals anywhere) (25%) @@ -318,11 +294,6 @@ var/MAX_EXPLOSION_RANGE = 14 #define SHOCKWAVE (1<<18) // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%) #define ELECTRICITY (1<<19) // ability to shoot electric attacks (15%) - -// String identifiers for associative list lookup - -// mob/var/list/mutations - #define STRUCDNASIZE 27 #define UNIDNASIZE 13 @@ -336,7 +307,6 @@ var/MAX_EXPLOSION_RANGE = 14 #define HUSK 7 #define NOCLONE 8 - // Extra powers: #define LASER 9 // harm intent - click anywhere to shoot lasers from eyes #define HEAL 10 // healing people with hands @@ -350,8 +320,6 @@ var/MAX_EXPLOSION_RANGE = 14 #define SHIELD 18 // shielding from all projectile attacks (30%) #define SHOCKWAVE 19 // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%) #define ELECTRICITY 20 // ability to shoot electric attacks (15%) - - //2spooky #define SKELETON 29 #define PLANT 30 @@ -405,8 +373,6 @@ var/MAX_EXPLOSION_RANGE = 14 #define SHOCK 8 #define SAFE 16 -#define ENGINE_EJECT_Z 3 - //metal, glass, rod stacks #define MAX_STACK_AMOUNT_METAL 50 #define MAX_STACK_AMOUNT_GLASS 50 @@ -418,22 +384,8 @@ var/MAX_EXPLOSION_RANGE = 14 #define GAS_CO2 (1 << 3) #define GAS_N2O (1 << 4) - -var/list/accessable_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = 60) -//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. -//(Exceptions: extended, sandbox and nuke) -Errorage -//Was list("3" = 30, "4" = 70). -//Spacing should be a reliable method of getting rid of a body -- Urist. -//Go away Urist, I'm restoring this to the longer list. ~Errorage - #define IS_MODE_COMPILED(MODE) (ispath(text2path("/datum/game_mode/"+(MODE)))) - -var/list/global_mutations = list() // list of hidden mutation things - -//Bluh shields - - //Damage things //TODO: merge these down to reduce on defines //Way to waste perfectly good damagetype names (BRUTE) on this... If you were really worried about case sensitivity, you could have just used lowertext(damagetype) in the proc... #define BRUTE "brute" @@ -470,8 +422,6 @@ var/list/global_mutations = list() // list of hidden mutation things #define DISFIGURED 16384 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system #define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy. -var/static/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/items/Welder.ogg','sound/items/Welder2.ogg','sound/machines/airlock.ogg','sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - //Grab levels #define GRAB_PASSIVE 1 #define GRAB_AGGRESSIVE 2 @@ -491,28 +441,6 @@ var/static/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons #define TRANSITIONEDGE 7 //Distance from edge to move to another z-level -var/list/liftable_structures = list(\ - - /obj/machinery/autolathe, \ - /obj/machinery/constructable_frame, \ - /obj/machinery/portable_atmospherics/hydroponics, \ - /obj/machinery/computer, \ - /obj/machinery/optable, \ - /obj/structure/dispenser, \ - /obj/machinery/gibber, \ - /obj/machinery/microwave, \ - /obj/machinery/vending, \ - /obj/machinery/seed_extractor, \ - /obj/machinery/space_heater, \ - /obj/machinery/recharge_station, \ - /obj/machinery/flasher, \ - /obj/structure/stool, \ - /obj/structure/closet, \ - /obj/machinery/photocopier, \ - /obj/structure/filingcabinet, \ - /obj/structure/reagent_dispensers, \ - /obj/machinery/portable_atmospherics/canister) - //A set of constants used to determine which type of mute an admin wishes to apply: //Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO etc = (MUTE_IC << 1) //Therefore there needs to be a gap between the flags for the automute flags @@ -564,8 +492,6 @@ var/list/liftable_structures = list(\ #define BORGTHERM 2 #define BORGXRAY 4 -var/list/robot_module_types = list("Standard", "Engineering", "Construction", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security"/*, "Combat"*/) - //some arbitrary defines to be used by self-pruning global lists. (see master_controller) #define PROCESS_KILL 26 //Used to trigger removal from a processing list @@ -673,6 +599,7 @@ var/list/robot_module_types = list("Standard", "Engineering", "Construction", "S #define BE_MUTINEER 8192 #define BE_PAI 16384 +//Not sure if moving this to global.dm would break the defines. var/list/be_special_flags = list( "Traitor" = BE_TRAITOR, "Operative" = BE_OPERATIVE, @@ -725,38 +652,26 @@ var/list/be_special_flags = list( #define PULSE_FAST 3 //90-120 bpm #define PULSE_2FAST 4 //>120 bpm #define PULSE_THREADY 5 //occurs during hypovolemic shock -//feel free to add shit to lists below -var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") //increase heart rate -var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") //decrease heart rate -var/list/heartstopper = list("potassium_phorochloride", "zombie_powder") //this stops the heart -var/list/cheartstopper = list("potassium_chloride") //this stops the heart when overdose is met -- c = conditional - -//proc/get_pulse methods #define GETPULSE_HAND 0 //less accurate (hand) #define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc) -var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them. - "thunder", - "ERT", - "NUKE" - ) - //Species flags. -#define NO_BLOOD 1 -#define NO_BREATHE 2 -#define NO_SCAN 4 -#define NO_PAIN 8 -#define NO_SLIP 16 -#define NO_POISON 32 - -#define HAS_SKIN_TONE 64 -#define HAS_SKIN_COLOR 128 -#define HAS_LIPS 256 -#define HAS_UNDERWEAR 512 -#define IS_PLANT 1024 -#define IS_WHITELISTED 2048 -#define IS_SYNTHETIC 4096 -#define HAS_EYE_COLOR 8192 +#define NO_BLOOD 1 // Vessel var is not filled with blood, cannot bleed out. +#define NO_BREATHE 2 // Cannot suffocate or take oxygen loss. +#define NO_SCAN 4 // Cannot be scanned in a DNA machine/genome-stolen. +#define NO_PAIN 8 // Cannot suffer halloss/recieves deceptive health indicator +#define NO_SLIP 16 // Cannot fall over +#define NO_POISON 32 // Cannot not suffer toxloss +#define HAS_SKIN_TONE 64 // Skin tone selectable in chargen (0-255) +#define HAS_SKIN_COLOR 128 // Skin colour selectable in chargen (RGB) +#define HAS_LIPS 256 // Lips are drawn onto the mob icon (lipstick) +#define HAS_UNDERWEAR 512 // Underwear is drawn onto the mob icon +#define IS_PLANT 1024 // Is a treeperson +#define IS_WHITELISTED 2048 // Must be whitelisted to play +#define IS_SYNTHETIC 4096 // Is a machine race +#define HAS_EYE_COLOR 8192 // Eye colour selectable in chargen (RGB) +#define CAN_JOIN 16384 // Species is selectable in chargen +#define IS_RESTRICTED 32768 // Is not a core/normally playable species (castes, mutantraces) //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. @@ -764,6 +679,9 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight #define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand. #define HIVEMIND 16 // Broadcast to all mobs with this language. +#define NONGLOBAL 32 // Do not add to general languages list +#define INNATE 64 // All mobs can be assumed to speak and understand this language (audible emotes) +#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message //Flags for zone sleeping #define ZONE_ACTIVE 1 @@ -779,8 +697,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define COLOR_ORANGE "#FF9900" #define COLOR_WHITE "#FFFFFF" - - /* Germs and infections */ @@ -792,7 +708,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define INFECTION_LEVEL_TWO 500 #define INFECTION_LEVEL_THREE 1000 - /* Shuttles */ @@ -833,7 +748,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define MAX_GEAR_COST 5 //Used in chargen for loadout limit. - /* Atmos Machinery */ @@ -855,8 +769,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define ATMOS_DEFAULT_VOLUME_MIXER 200 //L #define ATMOS_DEFAULT_VOLUME_PIPE 70 //L -var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") - // Reagent metabolism defines. #define FOOD_METABOLISM 0.4 #define ALCOHOL_METABOLISM 0.1 @@ -864,3 +776,29 @@ var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") //Chemistry #define CHEM_SYNTH_ENERGY 500 //How much energy does it take to synthesize 1 unit of chemical, in J + + +#define SPEED_OF_LIGHT 3e8 //not exact but hey! +#define SPEED_OF_LIGHT_SQ 9e+16 +#define FIRE_DAMAGE_MODIFIER 0.0215 //Higher values result in more external fire damage to the skin (default 0.0215) +#define AIR_DAMAGE_MODIFIER 2.025 //More means less damage from hot air scalding lungs, less = more damage. (default 2.025) +#define INFINITY 1.#INF +#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary. + // 1 will enable set background. 0 will disable set background. + +//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam +#define MAX_MESSAGE_LEN 1024 +#define MAX_PAPER_MESSAGE_LEN 3072 +#define MAX_BOOK_MESSAGE_LEN 9216 +#define MAX_NAME_LEN 26 + +// Event defines. +#define EVENT_LEVEL_MUNDANE 1 +#define EVENT_LEVEL_MODERATE 2 +#define EVENT_LEVEL_MAJOR 3 + +// Suit sensor levels +#define SUIT_SENSOR_OFF 0 +#define SUIT_SENSOR_BINARY 1 +#define SUIT_SENSOR_VITAL 2 +#define SUIT_SENSOR_TRACKING 3 \ No newline at end of file diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 2d9020e0f0..c722d86dd5 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -79,6 +79,7 @@ h1.alert, h2.alert {color: #000000;} .tajaran_signlang {color: #941C1C;} .skrell {color: #00CED1;} .soghun {color: #228B22;} +.solcom {color: #22228B;} .changeling {color: #800080;} .vox {color: #AA00AA;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} diff --git a/code/world.dm b/code/world.dm index 50bee5f49f..f53e039e4f 100644 --- a/code/world.dm +++ b/code/world.dm @@ -26,16 +26,14 @@ var/global/datum/global_init/init = new () var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") href_logfile = file("data/logs/[date_string] hrefs.htm") diary = file("data/logs/[date_string].log") - diaryofmeanpeople = file("data/logs/[date_string] Attack.log") diary << "[log_end]\n[log_end]\nStarting up. [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]" - diaryofmeanpeople << "[log_end]\n[log_end]\nStarting up. [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]" changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently if(byond_version < RECOMMENDED_VERSION) world.log << "Your server's byond version does not meet the recommended requirements for this server. Please update BYOND" config.post_load() - + if(config && config.server_name != null && config.server_suffix && world.port > 0) // dumb and hardcoded but I don't care~ config.server_name += " #[(world.port % 1000) / 100]" @@ -110,8 +108,8 @@ var/world_topic_spam_protect_time = world.timeofday var/list/s = list() s["version"] = game_version s["mode"] = master_mode - s["respawn"] = config ? abandon_allowed : 0 - s["enter"] = enter_allowed + s["respawn"] = config.abandon_allowed + s["enter"] = config.enter_allowed s["vote"] = config.allow_vote_mode s["ai"] = config.allow_ai s["host"] = host ? host : null @@ -266,9 +264,6 @@ var/world_topic_spam_protect_time = world.timeofday config.load("config/game_options.txt","game_options") config.loadsql("config/dbconfig.txt") config.loadforumsql("config/forumdbconfig.txt") - // apply some settings from config.. - abandon_allowed = config.respawn - /hook/startup/proc/loadMods() world.load_mods() @@ -318,10 +313,10 @@ var/world_topic_spam_protect_time = world.timeofday else features += "STARTING" - if (!enter_allowed) + if (!config.enter_allowed) features += "closed" - features += abandon_allowed ? "respawn" : "no respawn" + features += config.abandon_allowed ? "respawn" : "no respawn" if (config && config.allow_vote_mode) features += "vote" diff --git a/config/example/config.txt b/config/example/config.txt index ed2f0c0ae3..eb9ab2195f 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -297,3 +297,27 @@ EVENT_CUSTOM_START_MAJOR 80;100 ## designed for environments where you have testers but don't want them ## able to use the more powerful debug options. #DEBUG_PARANOID + +## Uncomment to allow aliens to spawn. +#ALIENS_ALLOWED + +## Uncomment to allow xenos to spawn. +#NINJAS_ALLOWED + +## Uncomment to disable the restrictive weldervision overlay. +#DISABLE_WELDER_VISION + +## Uncomment to prevent anyone from joining the round by default. +#DISABLE_ENTRY + +## Uncomment to disable the OOC channel by default. +#DISABLE_OOC + +## Uncomment to disable the dead OOC channel by default. +#DISABLE_DEAD_OOC + +## Uncomment to disable ghost chat by default. +#DISABLE_DSAY + +## Uncomment to disable respawning by default. +#DISABLE_RESPAWN \ No newline at end of file diff --git a/icons/mob/custom-synthetic.dmi b/icons/mob/custom-synthetic.dmi index 4da962274d..a82446462f 100644 Binary files a/icons/mob/custom-synthetic.dmi and b/icons/mob/custom-synthetic.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 9644ef3b8b..b3a24f07c7 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_races/r_diona.dmi b/icons/mob/human_races/r_diona.dmi index c09acaa953..91757faf7c 100644 Binary files a/icons/mob/human_races/r_diona.dmi and b/icons/mob/human_races/r_diona.dmi differ diff --git a/icons/mob/human_races/r_golem.dmi b/icons/mob/human_races/r_golem.dmi new file mode 100644 index 0000000000..f9cfb8e157 Binary files /dev/null and b/icons/mob/human_races/r_golem.dmi differ diff --git a/icons/mob/human_races/r_human.dmi b/icons/mob/human_races/r_human.dmi index 8cafd92ce1..7ddd945381 100644 Binary files a/icons/mob/human_races/r_human.dmi and b/icons/mob/human_races/r_human.dmi differ diff --git a/icons/mob/human_races/r_lizard.dmi b/icons/mob/human_races/r_lizard.dmi index 41b275beef..85208cff78 100644 Binary files a/icons/mob/human_races/r_lizard.dmi and b/icons/mob/human_races/r_lizard.dmi differ diff --git a/icons/mob/human_races/r_plant.dmi b/icons/mob/human_races/r_plant.dmi deleted file mode 100644 index ef55275d5a..0000000000 Binary files a/icons/mob/human_races/r_plant.dmi and /dev/null differ diff --git a/icons/mob/human_races/r_shadow.dmi b/icons/mob/human_races/r_shadow.dmi new file mode 100644 index 0000000000..70450af690 Binary files /dev/null and b/icons/mob/human_races/r_shadow.dmi differ diff --git a/icons/mob/human_races/r_skrell.dmi b/icons/mob/human_races/r_skrell.dmi index 913474d3b6..bb9f0fcfed 100644 Binary files a/icons/mob/human_races/r_skrell.dmi and b/icons/mob/human_races/r_skrell.dmi differ diff --git a/icons/mob/human_races/r_slime.dmi b/icons/mob/human_races/r_slime.dmi new file mode 100644 index 0000000000..287779d3c7 Binary files /dev/null and b/icons/mob/human_races/r_slime.dmi differ diff --git a/icons/mob/human_races/r_tajaran.dmi b/icons/mob/human_races/r_tajaran.dmi index 7a7419df41..69fa8ce5c0 100644 Binary files a/icons/mob/human_races/r_tajaran.dmi and b/icons/mob/human_races/r_tajaran.dmi differ diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi index 6aada937c2..f212822aaf 100644 Binary files a/icons/mob/human_races/r_vox.dmi and b/icons/mob/human_races/r_vox.dmi differ diff --git a/icons/mob/slimes.dmi b/icons/mob/slimes.dmi index 0f69a47d8b..3e6b915efa 100644 Binary files a/icons/mob/slimes.dmi and b/icons/mob/slimes.dmi differ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index ae4d61c053..3118d5d30d 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 2172fed549..19ae35a15d 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -57,7 +57,7 @@ "abe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port) "abf" = (/turf/simulated/wall,/area/maintenance/security_port) "abg" = (/obj/structure/closet/wardrobe/tactical,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"abh" = (/obj/machinery/camera{c_tag = "Armoury - Tactical Equipment "; dir = 2; network = list("SS13")},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/rack,/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = null; req_access_txt = "58"},/obj/item/ammo_magazine/c45m{icon_state = "45-7"},/obj/item/ammo_magazine/c45m{icon_state = "45-7"},/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"abh" = (/obj/machinery/camera{c_tag = "Armoury - Tactical Equipment "; dir = 2; network = list("SS13")},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = null; req_access_txt = "58"},/obj/item/ammo_magazine/c45m{icon_state = "45-7"},/obj/item/ammo_magazine/c45m{icon_state = "45-7"},/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "abi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/range) "abj" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor,/area/security/range) "abk" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/security/range) @@ -71,7 +71,7 @@ "abs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/foresolar) "abt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/foresolar) "abu" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/foresolar) -"abv" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"abv" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Fore Solar"},/turf/simulated/floor/plating,/area/maintenance/foresolar) "abw" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/foresolar) "abx" = (/obj/effect/decal/cleanable/ash,/obj/structure/closet/emcloset,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/security_port) "aby" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -128,10 +128,10 @@ "acx" = (/turf/simulated/floor/plating,/area/maintenance/foresolar) "acy" = (/obj/machinery/camera{c_tag = "Fore Solar Control"; dir = 1},/obj/structure/cable,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/foresolar) "acz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Fore Solar Access"; dir = 8},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/security_port) -"acA" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/projectile/shotgun/pump/combat{ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"; pixel_x = 2; pixel_y = -2},/obj/item/weapon/gun/projectile/shotgun/pump/combat{ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"; pixel_x = 2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"acB" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"acC" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"acD" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 1},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"acA" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"acB" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/projectile/shotgun/pump/combat{ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"; pixel_x = 2; pixel_y = -2},/obj/item/weapon/gun/projectile/shotgun/pump/combat{ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"; pixel_x = 2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"acC" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 1},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"acD" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "acE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "acF" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "acG" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/security/main) @@ -150,7 +150,7 @@ "acT" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxport) "acU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating/airless,/area/maintenance/foresolar) "acV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port) -"acW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"acW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "acX" = (/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "acY" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "acZ" = (/obj/machinery/door/poddoor{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/security/warden) @@ -167,12 +167,12 @@ "adk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adl" = (/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"adn" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/camera{c_tag = "Armoury - Secure"; dir = 4; network = list("SS13")},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adn" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/camera{c_tag = "Armoury - Secure"; dir = 4; network = list("SS13")},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "ado" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "adp" = (/obj/structure/table,/obj/machinery/recharger,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"adq" = (/obj/structure/rack,/obj/item/weapon/storage/box/beanbags{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/beanbags,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"adr" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/flashbangs,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"ads" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adq" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/flashbangs,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adr" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/beanbags{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/beanbags,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"ads" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "adt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "adu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "adv" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main) @@ -185,7 +185,7 @@ "adC" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "External Construction Airlock"; req_access_txt = "32"},/obj/item/tape/engineering{icon_state = "engineering_door"; layer = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port) "adE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port) -"adF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "adG" = (/obj/machinery/door_control{id = "Armoury"; name = "Armoury Access"; pixel_x = -1; pixel_y = -28; req_access_txt = "3"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "adH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main) "adI" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main) @@ -200,8 +200,8 @@ "adR" = (/obj/structure/closet/toolcloset,/obj/item/clothing/head/hardhat/dblue,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adS" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port) -"adU" = (/obj/structure/rack,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) -"adV" = (/obj/structure/rack,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adU" = (/obj/structure/table/rack,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) +"adV" = (/obj/structure/table/rack,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "adW" = (/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "adX" = (/obj/machinery/light,/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/warden) "adY" = (/obj/machinery/door_control{id = "Armoury"; name = "Emergency Access"; pixel_x = -28; pixel_y = 4; req_access_txt = "3"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/floor,/area/security/main) @@ -269,13 +269,13 @@ "afi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/main) "afj" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/security/main) "afk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"afl" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afl" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "afm" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet/emcloset,/obj/machinery/camera/xray{c_tag = "Security Escape Pod"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "afn" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape_pod3/station) "afo" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape_pod3/station) "afp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod3/station) "afq" = (/obj/effect/decal/cleanable/blood/oil,/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port) -"afr" = (/obj/structure/rack,/obj/item/weapon/secbot_assembly,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port) +"afr" = (/obj/structure/table/rack,/obj/item/weapon/secbot_assembly,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port) "afs" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port) "aft" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/security/warden) "afu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/security/warden) @@ -305,7 +305,7 @@ "afS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_port) "afT" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/security_port) "afU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/security_port) -"afV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/maintenance/security_port) +"afV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/maintenance/security_port) "afW" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/security_port) "afX" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/security_port) "afY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/security_port) @@ -313,10 +313,10 @@ "aga" = (/obj/item/weapon/cigbutt,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/security_port) "agb" = (/turf/simulated/floor/plating,/area/maintenance/security_port) "agc" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/plating,/area/maintenance/security_port) -"agd" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) -"age" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) +"agd" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) +"age" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) "agf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/warden) -"agg" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) +"agg" = (/obj/structure/table/rack,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) "agh" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden) "agi" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor,/area/security/main) "agj" = (/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/main) @@ -336,7 +336,7 @@ "agx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "agy" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod3/station) "agz" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station) -"agA" = (/obj/structure/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/security_port) +"agA" = (/obj/structure/table/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/security_port) "agB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/security_port) "agC" = (/obj/item/trash/candy,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/security_port) "agD" = (/turf/simulated/wall/r_wall,/area/security/brig) @@ -356,7 +356,7 @@ "agR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos) "agS" = (/obj/machinery/photocopier,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "agT" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"agU" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/security_port) +"agU" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/security_port) "agV" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port) "agW" = (/turf/simulated/wall,/area/security/brig) "agX" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig) @@ -417,7 +417,7 @@ "aia" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "aib" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "aic" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"aid" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_port) +"aid" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_port) "aie" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/maintenance/security_port) "aif" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/security_port) "aig" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/plating,/area/maintenance/security_port) @@ -460,7 +460,7 @@ "aiR" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiS" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiT" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"aiU" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aiU" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aiW" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Security Equipment South"; dir = 4; network = list("SS13")},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main) "aiX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main) @@ -496,7 +496,7 @@ "ajB" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main) "ajC" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/crew_quarters/heads/hos) "ajD" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"ajE" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ajE" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "ajF" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/security_port) "ajG" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/security_port) "ajH" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/security_port) @@ -525,7 +525,7 @@ "ake" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig) "akf" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig) "akg" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/brig) -"akh" = (/obj/structure/rack,/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) +"akh" = (/obj/structure/table/rack,/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "aki" = (/obj/structure/disposalpipe/segment,/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akj" = (/obj/structure/noticeboard{pixel_y = 30},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akk" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) @@ -533,7 +533,7 @@ "akm" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akn" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "ako" = (/turf/simulated/wall,/area/security/detectives_office) -"akp" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akp" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "akq" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "akr" = (/turf/space,/area/shuttle/syndicate_elite/station) "aks" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig) @@ -569,8 +569,8 @@ "akW" = (/obj/structure/table/woodentable,/obj/machinery/door_control{id = "detdoor"; name = "Office Door"; normaldoorcontrol = 1},/obj/item/weapon/handcuffs,/obj/item/device/flash,/turf/simulated/floor/carpet,/area/security/detectives_office) "akX" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Detective"},/turf/simulated/floor/carpet,/area/security/detectives_office) "akY" = (/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) -"akZ" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/item/trash/raisins,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"ala" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akZ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ala" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "alb" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "alc" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/brig) "ald" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/security/brig) @@ -604,7 +604,7 @@ "alF" = (/obj/structure/table/woodentable,/obj/item/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/detectives_office) "alG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/detectives_office) "alH" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) -"alI" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"alI" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/item/trash/raisins,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "alJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxstarboard) "alK" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxstarboard) "alL" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/turf/simulated/floor/plating,/area/security/brig) @@ -640,10 +640,10 @@ "amp" = (/obj/structure/table/woodentable,/obj/item/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/flash,/obj/item/weapon/handcuffs,/turf/simulated/floor/carpet,/area/security/detectives_office) "amq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/detectives_office) "amr" = (/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 5},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) -"ams" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"amt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/maintenance/substation/security) -"amu" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid"; name_tag = "Security Subgrid"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/security) -"amv" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/security) +"ams" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"amt" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"amu" = (/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"amv" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid"; name_tag = "Security Subgrid"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/security) "amw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/security) "amx" = (/turf/simulated/floor/plating,/area/space) "amy" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxstarboard) @@ -679,7 +679,7 @@ "anc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/security_starboard) "and" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/security) "ane" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/security) -"anf" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"anf" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Security Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/security) "ang" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/security) "anh" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/syndicate_elite/station) "ani" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxstarboard) @@ -716,8 +716,8 @@ "anN" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "anO" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/security_starboard) "anP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plating,/area/maintenance/substation/security) -"anQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera{c_tag = "Security Substation"; dir = 1; network = list("SS13","Engineering")},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/security) -"anR" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/security) +"anQ" = (/turf/simulated/wall,/area/maintenance/substation/security) +"anR" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Security Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/security) "anS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/security) "anT" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) "anU" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/auxport) @@ -749,7 +749,7 @@ "aou" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/lobby) "aov" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/lobby) "aow" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/lobby) -"aox" = (/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 0},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) +"aox" = (/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 0},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "aoy" = (/obj/machinery/photocopier,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "aoz" = (/obj/structure/window/basic{dir = 1},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office) "aoA" = (/obj/structure/window/basic{dir = 1},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office) @@ -987,8 +987,8 @@ "asY" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "asZ" = (/turf/simulated/wall/r_wall,/area/maintenance/dormitory) "ata" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/plating,/area/maintenance/dormitory) -"atb" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/dormitory) -"atc" = (/obj/structure/rack{dir = 1},/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/dormitory) +"atb" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/dormitory) +"atc" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/dormitory) "atd" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/maintenance/dormitory) "ate" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/dormitory) "atf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/dormitory) @@ -1004,7 +1004,7 @@ "atp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod2/station) "atq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals) "atr" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/arrivals) -"ats" = (/obj/structure/rack,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/maintenance/evahallway) +"ats" = (/obj/structure/table/rack,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/maintenance/evahallway) "att" = (/obj/item/weapon/cigbutt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/evahallway) "atu" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/security/prison) "atv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) @@ -1127,7 +1127,7 @@ "avI" = (/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/arrivals) "avJ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access_txt = "13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/arrivals) "avK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/arrivals) -"avL" = (/obj/structure/rack,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"avL" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/arrivals) "avM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/arrivals) "avN" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/arrivals) "avO" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/arrivals) @@ -1178,10 +1178,10 @@ "awH" = (/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) "awI" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) "awJ" = (/obj/structure/closet,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/arrivals) -"awK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"awL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"awM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"awN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"awK" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"awL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera{c_tag = "Security Substation"; dir = 1; network = list("SS13","Engineering")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"awM" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"awN" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) "awO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "catwalk12"},/area/space) "awP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/maintenance/evahallway) "awQ" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/evahallway) @@ -1219,8 +1219,8 @@ "axw" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) "axx" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry/fore) "axy" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) -"axz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) -"axA" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"axz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc/high{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) +"axA" = (/obj/machinery/camera{c_tag = "Arrivals East"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) "axB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axC" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/evahallway) @@ -1229,7 +1229,7 @@ "axG" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/evahallway) "axH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway) "axI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/evahallway) -"axJ" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/maintenance/evahallway) +"axJ" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/maintenance/evahallway) "axK" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/evahallway) "axL" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/evahallway) "axM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/evahallway) @@ -1238,7 +1238,7 @@ "axP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore) "axQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor,/area/hallway/primary/fore) "axR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore) -"axS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/dormitory) +"axS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "axT" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) "axU" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) "axV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) @@ -1266,10 +1266,10 @@ "ayr" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/fore) "ays" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry/fore) "ayt" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc/high{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry/fore) -"ayu" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry/fore) +"ayu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) "ayv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry/fore) "ayw" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/hallway/secondary/entry/fore) -"ayx" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"ayx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/checkpoint2) "ayy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ayz" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_tool_pump"; tag_exterior_door = "solar_tool_outer"; frequency = 1379; id_tag = "solar_tool_airlock"; tag_interior_door = "solar_tool_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_tool_sensor"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ayA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -1326,7 +1326,7 @@ "azz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry/fore) "azA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry/fore) "azB" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/fore) -"azC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"azC" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/checkpoint2) "azD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "azE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "azF" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -1352,13 +1352,13 @@ "azZ" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva) "aAa" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/ai_monitored/storage/eva) "aAb" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) -"aAc" = (/obj/structure/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aAc" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aAd" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore) "aAe" = (/turf/simulated/floor/carpet{tag = "icon-carpet2-0"; icon_state = "carpet2-0"},/area/crew_quarters/sleep/bedrooms) "aAf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) "aAg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms) "aAh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) -"aAi" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/dormitory) +"aAi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "aAj" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/crew_quarters/sleep) "aAk" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/crew_quarters/sleep) "aAl" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -27},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep) @@ -1392,7 +1392,7 @@ "aAN" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway) "aAO" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/gateway) "aAP" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/gateway) -"aAQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aAQ" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aAR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aAS" = (/obj/structure/table/reinforced,/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aAT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/ai_monitored/storage/eva) @@ -1440,8 +1440,8 @@ "aBJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port) "aBK" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) "aBL" = (/turf/simulated/wall,/area/hallway/secondary/entry/port) -"aBM" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aBN" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aBM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/checkpoint2) +"aBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/checkpoint2) "aBO" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/arrivals) "aBP" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals) "aBQ" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -1466,10 +1466,10 @@ "aCj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aCk" = (/obj/machinery/suit_cycler/security,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aCl" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore) -"aCm" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) -"aCn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) -"aCo" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera{c_tag = "Dormitory South"; c_tag_order = 999; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) -"aCp" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/dormitory) +"aCm" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/civilian_east) +"aCn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/bar) +"aCo" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian East Subgrid"; name_tag = "Civilian East Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aCp" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera{c_tag = "Dormitory South"; c_tag_order = 999; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) "aCq" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aCr" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aCs" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) @@ -1483,13 +1483,13 @@ "aCA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) "aCB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) "aCC" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port) -"aCD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc/high{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) +"aCD" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/checkpoint2) "aCE" = (/turf/simulated/wall,/area/security/checkpoint2) "aCF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/machinery/meter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/arrivals) "aCG" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/arrivals) "aCH" = (/obj/machinery/camera{c_tag = "Fore Port Solar Control"; dir = 1},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aCI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"aCJ" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) +"aCJ" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Fore Port Solar"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aCK" = (/turf/simulated/wall,/area/storage/primary) "aCL" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/primary) "aCM" = (/turf/simulated/wall/r_wall,/area/storage/primary) @@ -1501,8 +1501,8 @@ "aCS" = (/obj/machinery/gateway{dir = 10},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/gateway) "aCT" = (/obj/machinery/gateway,/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway) "aCU" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway) -"aCV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) -"aCW" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aCV" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aCW" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aCX" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aCY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva) "aCZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) @@ -1510,8 +1510,8 @@ "aDb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva) "aDc" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aDd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore) -"aDe" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/dormitory) -"aDf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) +"aDe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/civilian_east) +"aDf" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian East Substation Bypass"},/obj/machinery/camera{c_tag = "East Civilian Substation"; dir = 4; network = list("SS13","Engineering")},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) "aDg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) "aDh" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aDi" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) @@ -1523,14 +1523,14 @@ "aDo" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/paper{info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest."; name = "Shotgun permit"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aDp" = (/turf/simulated/wall,/area/crew_quarters/bar) "aDq" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aDr" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/bar) +"aDr" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Civilian East Substation"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) "aDs" = (/turf/simulated/wall,/area/maintenance/bar) "aDt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aDu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aDv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aDw" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/cell_charger,/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) -"aDx" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) -"aDy" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aDw" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aDx" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aDy" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) "aDz" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aDA" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aDB" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) @@ -1548,7 +1548,7 @@ "aDN" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/arrival/station) "aDO" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/arrival/station) "aDP" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port) -"aDQ" = (/obj/machinery/camera{c_tag = "Arrivals East"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) +"aDQ" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) "aDR" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/obj/item/device/flashlight/flare,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint2) "aDS" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint2) "aDT" = (/obj/machinery/computer/security,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint2) @@ -1578,14 +1578,14 @@ "aEr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/gateway) "aEs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/gateway) "aEt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/gateway) -"aEu" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/evahallway) +"aEu" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/evahallway) "aEv" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hardsuits"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aEw" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aEx" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aEy" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aEz" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aEA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) -"aEB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aEB" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aEC" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aED" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central_one) "aEE" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/hallway/primary/central_one) @@ -1604,12 +1604,12 @@ "aER" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aES" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "25"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/bar) "aET" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j1s"; sortType = "Bar"; name = "Bar"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aEU" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "East Civilian Substation"; dir = 4; network = list("SS13","Engineering")},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian East Subgrid"; name_tag = "Civilian East Subgrid"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) -"aEV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) -"aEW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aEU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aEV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) +"aEW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep) "aEX" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aEY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aEZ" = (/obj/machinery/camera{c_tag = "Fore Starboard Solars"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"aEZ" = (/obj/machinery/camera{c_tag = "Fore Starboard Solars"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Fore Starboard Solar"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aFa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/bar) "aFb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) "aFc" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/library) @@ -1630,20 +1630,20 @@ "aFr" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/shuttle/arrival/station) "aFs" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/shuttle/arrival/station) "aFt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) -"aFu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port) +"aFu" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating,/area/maintenance/arrivals) "aFv" = (/obj/structure/closet/wardrobe/red,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint2) -"aFw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/checkpoint2) -"aFx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/checkpoint2) -"aFy" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/checkpoint2) -"aFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/checkpoint2) -"aFA" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/checkpoint2) -"aFB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aFC" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aFD" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aFE" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aFF" = (/obj/machinery/camera{c_tag = "Fore Port Solar Access"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/arrivals) -"aFG" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/arrivals) -"aFH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/arrivals) +"aFw" = (/obj/machinery/camera{c_tag = "Fore Port Solar Access"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/arrivals) +"aFx" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aFy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/arrivals) +"aFz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/arrivals) +"aFA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2) +"aFB" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aFC" = (/turf/simulated/wall,/area/maintenance/substation/civilian_west) +"aFD" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aFE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Civilian West Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aFF" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry/port) +"aFG" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = null; req_access_txt = "1"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) +"aFH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) "aFI" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/primary) "aFJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/storage/primary) "aFK" = (/obj/effect/landmark/start{name = "Assistant"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/storage/primary) @@ -1682,9 +1682,9 @@ "aGr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar) "aGs" = (/turf/simulated/floor/plating,/area/maintenance/bar) "aGt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/bar) -"aGu" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/maintenance/substation/civilian_east) -"aGv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/civilian_east) -"aGw" = (/obj/machinery/door/airlock/engineering{name = "Civilian East Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aGu" = (/obj/item/weapon/cigbutt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/dormitory) +"aGv" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aGw" = (/obj/effect/decal/cleanable/dirt,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/bar) "aGx" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access_txt = "10"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aGy" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard) "aGz" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/bar) @@ -1704,18 +1704,18 @@ "aGN" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/shuttle/arrival/station) "aGO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) "aGP" = (/obj/machinery/camera{c_tag = "Security Checkpoint"; dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint2) -"aGQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2) +"aGQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) "aGR" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2) "aGS" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2) "aGT" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2) "aGU" = (/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint2) -"aGV" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aGW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aGX" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aGY" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aGZ" = (/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aHa" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aHb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aGV" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera{c_tag = "West Civilian Substation"; dir = 8; network = list("SS13","Engineering")},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aGW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aGX" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) +"aGY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/hallway/secondary/entry/port) +"aGZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) +"aHa" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) +"aHb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) "aHc" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary) "aHd" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary) "aHe" = (/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage) @@ -1741,7 +1741,7 @@ "aHy" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry/port) "aHz" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry/port) "aHA" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/port) -"aHB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep) +"aHB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Command Substation"; req_one_access = list(11,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/substation/command) "aHC" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aHD" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aHE" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) @@ -1757,15 +1757,15 @@ "aHO" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/effect/decal/cleanable/flour,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) "aHP" = (/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; sortType = "Kitchen"; name = "Kitchen"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) "aHQ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aHR" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aHS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aHT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/bar) -"aHU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/bar) -"aHV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/bar) -"aHW" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/bar) -"aHX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/bar) -"aHY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/bar) -"aHZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHR" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/bar) +"aHS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/bar) +"aHT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/bar) +"aHU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHV" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHX" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 4; sortType = "Chapel"; name = "Chapel"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Fore Starboard Solar Access"; dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aHZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/bar) "aIa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/bar) "aIb" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/bar) "aIc" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;37"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/library) @@ -1791,17 +1791,17 @@ "aIw" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "aIx" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aIy" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) -"aIz" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry/port) +"aIz" = (/obj/machinery/camera{c_tag = "Arrivals Lounge"; dir = 2},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) "aIA" = (/turf/simulated/wall,/area/hallway/secondary/entry/starboard) -"aIB" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = null; req_access_txt = "1"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/starboard) +"aIB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) "aIC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard) "aID" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/window/brigdoor{dir = 1; name = "Security Checkpoint"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/secondary/entry/starboard) "aIE" = (/obj/structure/sign/double/map/left,/turf/simulated/wall,/area/hallway/secondary/entry/starboard) "aIF" = (/obj/structure/sign/double/map/right,/turf/simulated/wall,/area/hallway/secondary/entry/starboard) -"aIG" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aIH" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aII" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aIJ" = (/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aIG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) +"aIH" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) +"aII" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian West Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aIJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) "aIK" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary) "aIL" = (/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/storage/primary) "aIM" = (/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/storage/primary) @@ -1821,7 +1821,7 @@ "aJa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aJb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aJc" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) -"aJd" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/head/helmet/space/skrell/black,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/black,/obj/item/clothing/head/helmet/space/skrell/white,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/white,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aJd" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/head/helmet/space/skrell/black,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/black,/obj/item/clothing/head/helmet/space/skrell/white,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/white,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aJe" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central_one) "aJf" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central_one) "aJg" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/central_one) @@ -1838,18 +1838,18 @@ "aJr" = (/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = -28; pixel_y = 4},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aJs" = (/obj/machinery/door/window/southleft{name = "Bar Delivery"; icon_state = "left"; dir = 8; req_access_txt = "25"; base_state = "left"},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/bar) "aJt" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/crew_quarters/bar) -"aJu" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/bar) +"aJu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/substation/command) "aJv" = (/obj/effect/landmark{name = "blobstart"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/bar) "aJw" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Kitchen Cold Room Maintenance"; req_access_txt = "28"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/bar) "aJx" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/maintenance/bar) "aJy" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/bar) "aJz" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJB" = (/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; sortType = "Hydroponics"; name = "Hydroponics"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJD" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 4; sortType = "Chapel"; name = "Chapel"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Fore Starboard Solar Access"; dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) -"aJF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) +"aJA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"aJB" = (/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; sortType = "Hydroponics"; name = "Hydroponics"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/bar) +"aJC" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory) +"aJD" = (/obj/machinery/camera{c_tag = "Dormitory Bedroom Aft"; dir = 1},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms) +"aJE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"aJF" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "aJG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar) "aJH" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/bar) "aJI" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/library) @@ -1868,20 +1868,20 @@ "aJV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aJW" = (/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver"; pixel_x = 25},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aJX" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/arrival/station) -"aJY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/hallway/secondary/entry/port) -"aJZ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKa" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) -"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) -"aKc" = (/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard) +"aJY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aJZ" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian West"; name_tag = "Civilian West Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aKa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian West Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Civilian West Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"aKc" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) "aKd" = (/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKe" = (/obj/machinery/camera{c_tag = "Arrivals Lounge"; dir = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKf" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard) -"aKi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard) -"aKj" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aKk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) -"aKl" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aKe" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/storage/emergency2) +"aKf" = (/obj/machinery/light/small,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency2) +"aKg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/locker) +"aKh" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/locker) +"aKi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/locker) +"aKj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/locker) +"aKk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/locker) +"aKl" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance"; req_access_txt = "31"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage) "aKm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/primary) "aKn" = (/turf/simulated/floor,/area/storage/primary) "aKo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/primary) @@ -1907,7 +1907,7 @@ "aKI" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aKJ" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aKK" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) -"aKL" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/rig/unathi,/obj/item/clothing/mask/breath,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) +"aKL" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/rig/unathi,/obj/item/clothing/mask/breath,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aKM" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "nuke_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) "aKN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/central_one) "aKO" = (/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central_one) @@ -2319,7 +2319,7 @@ "aSE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aSF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display{density = 0; layer = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aSG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) -"aSH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/tinted,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"aSH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aSI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aSJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aSK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two) @@ -2406,16 +2406,16 @@ "aUn" = (/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/hallway/primary/central_one) "aUo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aUp" = (/turf/simulated/wall/r_wall,/area/bridge) -"aUq" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/bridge) +"aUq" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/bridge) "aUr" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "red"},/area/bridge) "aUs" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/box/PDAs{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/ids,/turf/simulated/floor{icon_state = "red"},/area/bridge) "aUt" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/bridge) -"aUu" = (/obj/structure/window/reinforced/tinted{dir = 5},/turf/simulated/floor/plating,/area/bridge) -"aUv" = (/obj/machinery/computer/communications,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/bridge) +"aUu" = (/obj/machinery/computer/communications,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/bridge) +"aUv" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/bridge) "aUw" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/bridge) -"aUx" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/bridge) -"aUy" = (/obj/machinery/computer/crew,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/bridge) -"aUz" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/bridge) +"aUx" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area/bridge) +"aUy" = (/obj/machinery/computer/power_monitor,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/bridge) +"aUz" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/structure/window/reinforced{dir = 4},/obj/item/device/aicard,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/bridge) "aUA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aUB" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/hallway/primary/central_two) "aUC" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/hallway/primary/central_two) @@ -2476,8 +2476,8 @@ "aVF" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/storage/art) "aVG" = (/turf/simulated/wall,/area/storage/emergency2) "aVH" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency2) -"aVI" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency2) -"aVJ" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian West"; name_tag = "Civilian West Subgrid"},/turf/simulated/floor/plating,/area/storage/emergency2) +"aVI" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "5;12;47"},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aVJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/research_port) "aVK" = (/turf/simulated/floor/plating,/area/storage/emergency2) "aVL" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/camera{c_tag = "Auxiliary Tool Storage"; dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/storage/tools) "aVM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/storage/tools) @@ -2488,11 +2488,11 @@ "aVR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/bridge) "aVS" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) "aVT" = (/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) -"aVU" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/bridge) -"aVV" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/bridge) +"aVU" = (/obj/machinery/computer/rcon,/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/bridge) +"aVV" = (/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/bridge) "aVW" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/bridge) -"aVX" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/bridge) -"aVY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/bridge) +"aVX" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/bridge) +"aVY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/bridge) "aVZ" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/bridge) "aWa" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/bridge) "aWb" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/bridge) @@ -2562,18 +2562,18 @@ "aXn" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/camera{c_tag = "Art Storage"; dir = 1},/obj/machinery/light/small,/turf/simulated/floor,/area/storage/art) "aXo" = (/obj/structure/table,/obj/item/device/camera_film,/obj/item/device/camera,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/storage/art) "aXp" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency2) -"aXq" = (/obj/machinery/light/small,/obj/structure/reagent_dispensers/watertank,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency2) +"aXq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/research_port) "aXr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2) -"aXs" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2) +"aXs" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2) "aXt" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools) "aXu" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/tools) "aXv" = (/turf/simulated/floor,/area/storage/tools) "aXw" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/cell_charger,/turf/simulated/floor,/area/storage/tools) "aXx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aXy" = (/turf/simulated/wall,/area/bridge) -"aXz" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/multitool,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/bridge) -"aXA" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) -"aXB" = (/obj/item/weapon/wrench,/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Bridge West"; dir = 2},/obj/item/device/assembly/timer,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) +"aXz" = (/obj/machinery/camera{c_tag = "Bridge West"; dir = 2},/obj/structure/table,/obj/item/device/multitool,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) +"aXA" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) +"aXB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/computer/crew,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/bridge) "aXC" = (/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/bridge) "aXD" = (/turf/simulated/floor,/area/bridge) "aXE" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/bridge) @@ -2582,7 +2582,7 @@ "aXH" = (/turf/simulated/floor{dir = 4; icon_state = "escapecorner"},/area/bridge) "aXI" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Bridge East"; dir = 2},/obj/item/weapon/storage/donut_box,/obj/structure/noticeboard{pixel_y = 27},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/bridge) "aXJ" = (/obj/machinery/computer/med_data,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/bridge) -"aXK" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/bridge) +"aXK" = (/turf/simulated/wall,/area/maintenance/substation/medical) "aXL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aXM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aXN" = (/obj/machinery/camera{c_tag = "Bar West"; dir = 4; network = list("SS13")},/obj/machinery/atm{pixel_x = -25},/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -2647,7 +2647,7 @@ "aYU" = (/obj/structure/table,/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/turf/simulated/floor,/area/crew_quarters/locker) "aYV" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "nuke_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 32; req_access_txt = "0"; req_one_access_txt = "13"},/turf/space,/area/space) "aYW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/crew_quarters/locker) -"aYX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/storage/emergency2) +"aYX" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Medical Substation"; dir = 2; network = list("SS13","Engineering")},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "aYY" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/storage/tools) "aYZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/tools) "aZa" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/hallway/primary/central_one) @@ -2726,14 +2726,14 @@ "bav" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/locker) "baw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/locker) "bax" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/locker) -"bay" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/locker) +"bay" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "baz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/civilian_west) -"baA" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) -"baB" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"baA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/medical) +"baB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/bridge) "baC" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/turf/simulated/floor/plating,/area/maintenance/locker) "baD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/tools) "baE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools) -"baF" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/storage/tools) +"baF" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/storage/tools) "baG" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/storage/tools) "baH" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/storage/tools) "baI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_one) @@ -2803,7 +2803,7 @@ "bbU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft) "bbV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/vacantoffice) "bbW" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{anchored = 1; department = "Vacant Office"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/vacantoffice) -"bbX" = (/obj/structure/rack{dir = 4},/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/locker) +"bbX" = (/obj/structure/table/rack{dir = 4},/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/locker) "bbY" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/locker) "bbZ" = (/turf/simulated/wall,/area/crew_quarters/locker/locker_toilet) "bca" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet) @@ -2816,10 +2816,10 @@ "bch" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker) "bci" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/locker) "bcj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/locker) -"bck" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/locker) -"bcl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/engineering{name = "Civilian West Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) -"bcm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) -"bcn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/camera{c_tag = "West Civilian Substation"; dir = 8; network = list("SS13","Engineering")},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bck" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bcl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bcm" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Medical Substation"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bcn" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; sortType = "Robotics"; name = "Robotics"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) "bco" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/locker) "bcp" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/storage/tools) "bcq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/storage/tools) @@ -2834,9 +2834,9 @@ "bcz" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "bcA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "bcB" = (/obj/machinery/computer/guestpass{pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) -"bcC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/bridge) +"bcC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/bridge) "bcD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/bridge) -"bcE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/bridge) +"bcE" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bcF" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "bcG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "bcH" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/hallway/primary/central_two) @@ -2900,7 +2900,7 @@ "bdN" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/disposalpipe/segment,/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/crew_quarters/locker) "bdO" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker) "bdP" = (/turf/simulated/wall,/area/quartermaster/storage) -"bdQ" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance"; req_access_txt = "31"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/quartermaster/storage) +"bdQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation"; req_access_txt = "0"; req_one_access_txt = "11;24;5"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "bdR" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office) "bdS" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/turf/simulated/floor/plating,/area/quartermaster/office) "bdT" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/obj/structure/plasticflaps{opacity = 0},/turf/simulated/floor/plating,/area/quartermaster/office) @@ -2966,10 +2966,10 @@ "bfb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) "bfc" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) "bfd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/locker) -"bfe" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/stack/sheet/cardboard,/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) +"bfe" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/stack/sheet/cardboard,/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "bff" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "bfg" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) -"bfh" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) +"bfh" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "bfi" = (/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/turf/simulated/floor/plating,/area/quartermaster/office) "bfj" = (/obj/structure/stool,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/office) "bfk" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/office) @@ -3320,7 +3320,7 @@ "blR" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/hallway/primary/starboard) "blS" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/turf/simulated/floor{dir = 5; icon_state = "whiteblue"},/area/hallway/primary/starboard) "blT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor,/area/hallway/primary/starboard) -"blU" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"blU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurplecorner"},/area/medical/medbay2) "blV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard) "blW" = (/turf/simulated/floor{dir = 1; icon_state = "loadingarea"},/area/hallway/primary/starboard) "blX" = (/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard) @@ -3399,8 +3399,8 @@ "bns" = (/obj/machinery/camera{c_tag = "Morgue"; network = list("SS13")},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue) "bnt" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue) "bnu" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/medical/morgue) -"bnv" = (/turf/simulated/wall,/area/storage/emergency3) -"bnw" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency3) +"bnv" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bnw" = (/obj/machinery/door/airlock{name = "Medbay Substation"; req_access_txt = "5"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "bnx" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor,/area/hallway/primary/starboard) "bny" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id = "Skynet_launch"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/starboard) "bnz" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) @@ -3444,10 +3444,10 @@ "bol" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central_one) "bom" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/substation/command) "bon" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"boo" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera{c_tag = "Command Substation"; dir = 2; network = list("SS13","Engineering")},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bop" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"boq" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Command Subgrid"; name_tag = "Command Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bor" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"boo" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera{c_tag = "Command Substation"; dir = 2; network = list("SS13","Engineering")},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Command Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bop" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/command{name = "Electrical Maintenance"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"boq" = (/obj/machinery/camera{c_tag = "Engineering Washroom"; dir = 1; network = list("SS13")},/obj/machinery/light,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"bor" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bos" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/maintenance/substation/command) "bot" = (/turf/simulated/wall,/area/maintenance/substation/command) "bou" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -3549,17 +3549,17 @@ "bqm" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "packageExternal"},/turf/simulated/floor,/area/quartermaster/office) "bqn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/hallway/primary/central_one) "bqo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central_one) -"bqp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/primary/central_one) -"bqq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bqp" = (/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"bqq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bqr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bqs" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bqt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bqu" = (/obj/machinery/door/window{dir = 4; name = "Substation Command Access"; req_access_txt = "0"; req_one_access_txt = "19;57"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bqv" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/door_control{id = "bridge_electrical_maintenance"; name = "Maintenance Bolt Control"; normaldoorcontrol = 1; pixel_x = 24; pixel_y = 6; req_access_txt = "0"; req_one_access_txt = "19;57"; specialfunctions = 4},/obj/machinery/light_switch{pixel_x = 24; pixel_y = -6},/turf/simulated/floor,/area/maintenance/substation/command) -"bqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/maintenance/substation/command) -"bqx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/turf/space,/area/space) -"bqy" = (/obj/machinery/camera{c_tag = "Dormitory Bedroom Aft"; dir = 1},/turf/simulated/floor/carpet{tag = "icon-carpet1-0"; icon_state = "carpet1-0"},/area/crew_quarters/sleep/bedrooms) -"bqz" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/armor/captain,/obj/item/clothing/head/helmet/space/capspace,/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bqs" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_three) +"bqt" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/camera{c_tag = "AI Upload Chamber"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bqu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"bqv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bqw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bqx" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bqy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/primary/central_three) +"bqz" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/armor/captain,/obj/item/clothing/head/helmet/space/capspace,/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqA" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqB" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Captain's Desk Door"; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqC" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3592,7 +3592,7 @@ "brd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bre" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "brf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) -"brg" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) +"brg" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "brh" = (/turf/simulated/wall/r_wall,/area/assembly/robotics) "bri" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"},/area/rnd/research) "brj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) @@ -3638,14 +3638,14 @@ "brX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/primary/central_one) "brY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/hallway/primary/central_one) "brZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/primary/central_one) -"bsa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "bridge_electrical_maintenance"; locked = 1; name = "Electrical Maintenance"; req_access_txt = "10"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"bsa" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Command Substation Bypass"},/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/substation/command) "bsb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bsc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bsd" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bsc" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bsd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/medbay2) "bse" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bsf" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Bridge Substation"; dir = 1},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bsg" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/command) -"bsh" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/space,/area/space) +"bsf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bsg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid"; name_tag = "Medbay Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bsh" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload Access"; req_access_txt = "16"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"},/area/hallway/primary/central_three) "bsi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/turret_protected/ai_upload) "bsj" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bsk" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) @@ -3694,7 +3694,7 @@ "btb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/lab) "btc" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab) "btd" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab) -"bte" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency) +"bte" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency) "btf" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "admin_shuttle_dock_sensor"; pixel_x = -30; pixel_y = 8},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry/aft) "btg" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "admin_shuttle_dock_pump"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry/aft) "bth" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) @@ -3723,7 +3723,7 @@ "btE" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_three) "btF" = (/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor,/area/hallway/primary/central_three) "btG" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central_three) -"btH" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"btH" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command) "btI" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/substation/command) "btJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/cyan,/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/turret_protected/ai_upload) "btK" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) @@ -3822,21 +3822,21 @@ "bvz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/recharger/wallcharger{pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bvA" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bvB" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/crew_quarters/heads/hop) -"bvC" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/turf/space,/area/space) +"bvC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) "bvD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/structure/cable/cyan,/turf/simulated/floor/plating,/area/turret_protected/ai_upload) -"bvE" = (/obj/structure/table,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) -"bvF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) -"bvG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bvH" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bvI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bvJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) -"bvK" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bvE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) +"bvF" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) +"bvG" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bvH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bvI" = (/obj/structure/table,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bvJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bvK" = (/obj/machinery/hologram/holopad,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bvL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/structure/cable/cyan,/turf/simulated/floor/plating,/area/turret_protected/ai_upload) -"bvM" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/space,/area/space) -"bvN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/captain) -"bvO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bvP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bvQ" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bvM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bvN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bvO" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bvP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bvQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bvR" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) "bvS" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/captain) "bvT" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/hallway/primary/central_two) @@ -3911,12 +3911,12 @@ "bxk" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) "bxl" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/crew_quarters/heads/hop) "bxm" = (/obj/structure/sign/kiddieplaque,/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) -"bxn" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/camera{c_tag = "AI Upload Chamber"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bxn" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bxo" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bxp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bxq" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bxq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/machinery/power/sensor{name = "Powernet Sensor - Command Subgrid"; name_tag = "Command Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bxr" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) -"bxs" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bxs" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/substation/command) "bxt" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/machinery/camera{c_tag = "Captain's Quarters"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bxu" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/storage/box/matches,/obj/item/clothing/mask/cigarette/cigar,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bxv" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"; req_access_txt = "0"},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) @@ -3943,10 +3943,10 @@ "bxQ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitehall_m"; tag = "icon-whitehall_m"},/area/medical/medbay2) "bxR" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/medical/medbay2) "bxS" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bxT" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/decal/cleanable/cobweb,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency3) -"bxU" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/storage/emergency3) -"bxV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/weapon/extinguisher,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3) -"bxW" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/storage/emergency3) +"bxT" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "5;12;47"},/turf/simulated/floor/plating,/area/storage/emergency3) +"bxU" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bxV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bxW" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bxX" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) "bxY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/assembly/chargebay) "bxZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/assembly/chargebay) @@ -4013,12 +4013,12 @@ "bzi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bzj" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bzk" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bzl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bzm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/medical/medbay2) -"bzn" = (/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3) -"bzo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/storage/emergency3) -"bzp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/storage/emergency3) -"bzq" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; sortType = "Robotics"; name = "Robotics"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency3) +"bzl" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bzm" = (/obj/machinery/door_control{id = "misclab"; name = "Test Chamber Blast Doors"; pixel_x = 6; pixel_y = 30; req_access_txt = "47"},/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bzn" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bzo" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/patient_wing) +"bzp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bzq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/patient_wing) "bzr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "29"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/assembly/chargebay) "bzs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bzt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/assembly/chargebay) @@ -4095,13 +4095,13 @@ "bAM" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurplecorner"},/area/medical/medbay2) "bAN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/medbay2) "bAO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitepurplecorner"},/area/medical/medbay2) -"bAP" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bAQ" = (/turf/simulated/floor{dir = 2; icon_state = "whitepurplecorner"},/area/medical/medbay2) -"bAR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/medbay2) -"bAS" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency3) -"bAT" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency3) -"bAU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency3) -"bAV" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency3) +"bAP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/patient_wing) +"bAQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whiteredcorner"},/area/medical/patient_wing) +"bAR" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bAS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whiteredcorner"},/area/medical/patient_wing) +"bAT" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitered_c"; tag = "icon-whitered_c (WEST)"},/area/medical/patient_wing) +"bAU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bAV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera{c_tag = "Medbay Patient Hallway - Starboard"; dir = 1; network = list("SS13")},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bAW" = (/obj/structure/table,/turf/simulated/floor,/area/assembly/chargebay) "bAX" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/assembly/chargebay) "bAY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/assembly/chargebay) @@ -4174,7 +4174,7 @@ "bCn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bCo" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Laboratory"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bCp" = (/turf/simulated/wall,/area/medical/genetics) -"bCq" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency3) +"bCq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bCr" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/airlock/glass_research{name = "Robotics Lab"; req_access_txt = "29; 47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bCs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/rnd/research) "bCt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/rnd/research) @@ -4214,8 +4214,8 @@ "bDb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room) "bDc" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access_txt = "30"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room) "bDd" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -12; pixel_y = 20},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/turretid/stun{control_area = "\improper AI Upload Chamber"; name = "AI Upload turret control"; pixel_x = 6; pixel_y = 24},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) -"bDe" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) -"bDf" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) +"bDe" = (/obj/structure/closet/crate,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/turf/simulated/floor/plating,/area/engine/storage_hard) +"bDf" = (/obj/machinery/door_control{id = "engineering_cubicle"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 8; req_access_txt = "0"; specialfunctions = 4},/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 4},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "bDg" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station"; req_access_txt = "16"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station) "bDh" = (/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station) "bDi" = (/obj/effect/landmark/start{name = "Cyborg"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station) @@ -4238,7 +4238,7 @@ "bDz" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "bDA" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay) "bDB" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay3) -"bDC" = (/obj/structure/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/machinery/camera{c_tag = "Medbay Equipment Storage"; dir = 1},/obj/item/clothing/tie/stethoscope,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3) +"bDC" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/tie/stethoscope,/obj/machinery/camera{c_tag = "Medbay Equipment Storage"; dir = 1},/obj/item/clothing/tie/stethoscope,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3) "bDD" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3) "bDE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "bDF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -4313,14 +4313,14 @@ "bEW" = (/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/camera{c_tag = "Messaging Server"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room) "bEX" = (/obj/machinery/camera{c_tag = "AI Upload Access"; dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) "bEY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) -"bEZ" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/cyan,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer) +"bEZ" = (/obj/structure/window/basic{dir = 4},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower{color = "#FFA500"; layer = 3.3},/obj/machinery/door/window/northleft{name = "Shower"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "bFa" = (/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/camera{c_tag = "Cyborg Station"; dir = 1},/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station) "bFb" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) "bFc" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) "bFd" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter) "bFe" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/teleporter) "bFf" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/teleporter) -"bFg" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter) +"bFg" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter) "bFh" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/teleporter) "bFi" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central_two) "bFj" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/sleeper) @@ -4395,7 +4395,7 @@ "bGA" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Cargo Bay Entrance"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central_three) "bGB" = (/obj/machinery/status_display,/turf/simulated/wall,/area/hallway/primary/central_three) "bGC" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central_three) -"bGD" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload Access"; req_access_txt = "16"},/turf/simulated/floor{icon_state = "vault"},/area/hallway/primary/central_three) +"bGD" = (/obj/structure/window/basic{dir = 8},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower{color = "#FFA500"; layer = 3.3},/obj/machinery/door/window/northright{name = "Shower"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "bGE" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1; dir = 2; req_access_txt = "5"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/sleeper) "bGF" = (/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bGG" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) @@ -4442,7 +4442,7 @@ "bHv" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock) "bHw" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/quartermaster/miningdock) "bHx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock) -"bHy" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/quartermaster/miningdock) +"bHy" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/quartermaster/miningdock) "bHz" = (/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/quartermaster/qm) "bHA" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor,/area/quartermaster/qm) "bHB" = (/turf/simulated/floor,/area/quartermaster/qm) @@ -4459,7 +4459,7 @@ "bHM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Central Primary Hallway South South-West"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central_three) "bHN" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three) "bHO" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/hallway/primary/central_three) -"bHP" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/primary/central_three) +"bHP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/locker_room) "bHQ" = (/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central_three) "bHR" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/hallway/primary/central_three) "bHS" = (/obj/machinery/camera{c_tag = "Central Primary Hallway South South-East"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central_three) @@ -4508,7 +4508,7 @@ "bIJ" = (/turf/simulated/wall,/area/rnd/storage) "bIK" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research) "bIL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research) -"bIM" = (/obj/structure/rack,/obj/item/weapon/rig/hazmat,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) +"bIM" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bIN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bIO" = (/obj/machinery/computer/mecha,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bIP" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) @@ -4518,7 +4518,7 @@ "bIT" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/miningdock) "bIU" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor,/area/quartermaster/miningdock) "bIV" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock) -"bIW" = (/obj/structure/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor,/area/quartermaster/miningdock) +"bIW" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor,/area/quartermaster/miningdock) "bIX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/qm) "bIY" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/qm) "bIZ" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/turf/simulated/floor,/area/quartermaster/qm) @@ -4534,7 +4534,7 @@ "bJj" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three) "bJk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/hallway/primary/central_three) "bJl" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AftH"; location = "AIW"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three) -"bJm" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three) +"bJm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engine/locker_room) "bJn" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHE"; location = "AIE"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three) "bJo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_three) "bJp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_three) @@ -4565,7 +4565,7 @@ "bJO" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bJP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/medical/genetics) "bJQ" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) -"bJR" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bJR" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) "bJS" = (/obj/machinery/alarm/server{dir = 4; pixel_x = -22; pixel_y = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) "bJT" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) "bJU" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) @@ -4587,8 +4587,8 @@ "bKk" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bKl" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/research_shuttle) "bKm" = (/obj/structure/closet/crate,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) -"bKn" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) -"bKo" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) +"bKn" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) +"bKo" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) "bKp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/rnd/test_area) "bKq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/rnd/test_area) "bKr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/test_area) @@ -4758,8 +4758,8 @@ "bNz" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) "bNA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/storage/tech) "bNB" = (/obj/machinery/camera{c_tag = "Tech Storage"; dir = 2},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/storage/tech) -"bNC" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/unary_atmos/heater,/obj/item/weapon/circuitboard/unary_atmos/cooler{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) -"bND" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech) +"bNC" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech) +"bND" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/unary_atmos/heater,/obj/item/weapon/circuitboard/unary_atmos/cooler{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) "bNE" = (/obj/machinery/vending/assist,/turf/simulated/floor/plating,/area/storage/tech) "bNF" = (/turf/simulated/wall,/area/hallway/primary/aft) "bNG" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -4858,7 +4858,7 @@ "bPv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/engineering) "bPw" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/engineering) "bPx" = (/turf/simulated/floor/plating,/area/maintenance/engineering) -"bPy" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/engineering) +"bPy" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/engineering) "bPz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bPA" = (/obj/machinery/door_control{id = "acutesep"; name = "Acute Separation Shutters"; pixel_y = 25; req_access_txt = "5"},/obj/machinery/camera{c_tag = "Medbay Acute 2"; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bPB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; name = "Acute Two"; req_access_txt = "5"},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay) @@ -4912,13 +4912,13 @@ "bQx" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/cargo) "bQy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/maintenance/cargo) "bQz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech) -"bQA" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor,/area/storage/tech) +"bQA" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor,/area/storage/tech) "bQB" = (/obj/machinery/camera{c_tag = "Secure Tech Storage"; dir = 2},/turf/simulated/floor,/area/storage/tech) "bQC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) "bQD" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech) -"bQE" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech) -"bQF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/tech) -"bQG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bQE" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech) +"bQF" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bQG" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/tech) "bQH" = (/obj/machinery/requests_console{department = "Tech storage"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) "bQI" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bQJ" = (/turf/simulated/floor,/area/hallway/primary/aft) @@ -4984,7 +4984,7 @@ "bRR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo) "bRS" = (/turf/simulated/floor/plating,/area/maintenance/cargo) "bRT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech) -"bRU" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/card{pixel_x = 2; pixel_y = -2},/obj/item/weapon/circuitboard/communications{pixel_x = 5; pixel_y = -5},/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/storage/tech) +"bRU" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/card{pixel_x = 2; pixel_y = -2},/obj/item/weapon/circuitboard/communications{pixel_x = 5; pixel_y = -5},/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/storage/tech) "bRV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/storage/tech) "bRW" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Tech Storage"; req_access_txt = "19;23"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/tech) "bRX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/tech) @@ -5007,7 +5007,7 @@ "bSo" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "bSp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay) "bSq" = (/obj/machinery/light,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo) -"bSr" = (/obj/structure/rack,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/weapon/storage/belt/medical,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -38},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo) +"bSr" = (/obj/structure/table/rack,/obj/item/clothing/tie/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/weapon/storage/belt/medical,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -38},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo) "bSs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo) "bSt" = (/obj/machinery/computer/crew,/obj/machinery/light,/turf/simulated/floor{dir = 6; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo) "bSu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2) @@ -5057,13 +5057,13 @@ "bTm" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) "bTn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/cargo) "bTo" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo) -"bTp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor,/area/storage/tech) +"bTp" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor,/area/storage/tech) "bTq" = (/turf/simulated/floor,/area/storage/tech) "bTr" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/storage/tech) "bTs" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/turf/simulated/floor/plating,/area/storage/tech) -"bTt" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/obj/item/weapon/circuitboard/med_data{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) -"bTu" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/skills{pixel_x = 4; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/tech) -"bTv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/stationalert{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bTt" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/obj/item/weapon/circuitboard/med_data{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bTu" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/stationalert{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bTv" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/skills{pixel_x = 4; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/tech) "bTw" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plating,/area/storage/tech) "bTx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bTy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) @@ -5160,7 +5160,7 @@ "bVl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medprivb"; name = "Patient Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/patient_b) "bVm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute B"; req_access_txt = "0"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bVn" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bVo" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bVo" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bVp" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/item/clothing/glasses/science,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bVq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bVr" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5195,9 +5195,9 @@ "bVU" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo) "bVV" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) "bVW" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech) -"bVX" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/clothing/glasses/meson,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) -"bVY" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech) -"bVZ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech) +"bVX" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/clothing/glasses/meson,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) +"bVY" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech) +"bVZ" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech) "bWa" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) "bWb" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/aft) "bWc" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/carpet,/area/engine/break_room) @@ -5237,11 +5237,11 @@ "bWK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitered_b"; tag = "icon-whitered_b (WEST)"},/area/medical/patient_wing) "bWL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing) "bWM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Patient Wing Maintenance Access"; req_access_txt = "5"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing) -"bWN" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; name = "Miscellaneous Research"; sortType = "Miscellaneous Research"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"bWO" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/rnd/misc_lab) -"bWP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bWQ" = (/obj/machinery/door_control{id = "misclab"; name = "Test Chamber Blast Doors"; pixel_x = 6; pixel_y = 30; req_access_txt = "47"},/obj/structure/stool,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bWR" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bWN" = (/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bWO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bWP" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bWQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bWR" = (/obj/machinery/door/airlock/glass_medical{name = "Hygiene Facilities"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bWS" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bWT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bWU" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5297,23 +5297,23 @@ "bXS" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay4) "bXT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bXU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bXV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bXW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/patient_wing) -"bXX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/patient_wing) -"bXY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/patient_wing) -"bXZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bYa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whiteredcorner"},/area/medical/patient_wing) -"bYb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitered_c"; tag = "icon-whitered_c (WEST)"},/area/medical/patient_wing) -"bYc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whiteredcorner"},/area/medical/patient_wing) -"bYd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera{c_tag = "Medbay Patient Hallway - Starboard"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bYe" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bXV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bXW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"bXY" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/research) +"bXZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/substation/research) +"bYa" = (/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bYb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bYc" = (/turf/simulated/wall,/area/maintenance/substation/research) +"bYd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bYe" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Research Substation"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/research) "bYf" = (/turf/simulated/wall,/area/maintenance/research_port) "bYg" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) "bYh" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bYi" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bYj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bYk" = (/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bYl" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bYi" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/machinery/power/sensor{name = "Powernet Sensor - Research Subgrid"; name_tag = "Research Subgrid"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bYj" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research Substation Bypass"},/obj/machinery/camera{c_tag = "Research Substation"; dir = 2; network = list("SS13","Engineering")},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bYk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bYl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) "bYm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bYn" = (/obj/machinery/light_switch{pixel_x = 7; pixel_y = -23},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bYo" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5376,18 +5376,18 @@ "bZt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay4) "bZu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay4) "bZv" = (/obj/machinery/camera{c_tag = "Medbay Patient Hallway - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bZw" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bZw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_port) "bZx" = (/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bZy" = (/turf/simulated/wall,/area/medical/biostorage) "bZz" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Secondary Storage"; req_access_txt = "5"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/medical/medbay2) "bZA" = (/turf/simulated/wall,/area/medical/patient_c) "bZB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medprivc"; name = "Patient Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/patient_c) "bZC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute C"; req_access_txt = "0"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_c) -"bZD" = (/obj/machinery/door/airlock/glass_medical{name = "Hygiene Facilities"; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bZD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "bZE" = (/obj/machinery/light,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bZF" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bZG" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"bZH" = (/obj/machinery/portable_atmospherics/powered/pump,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"bZF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bZG" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"bZH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "bZI" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera{c_tag = "Telescience Control Room"; dir = 1; network = list("SS13","Research"); pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/bombcloset,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "bZK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light,/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) @@ -5447,15 +5447,15 @@ "caM" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/patient_c) "caN" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/patient_c) "caO" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_c) -"caP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"caQ" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/medical_science) -"caR" = (/obj/structure/rack{dir = 1},/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/research_port) -"caS" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) +"caP" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"caQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"caR" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/research_port) +"caS" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) "caT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/research_port) "caU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_port) "caV" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/plating,/area/maintenance/research_port) "caW" = (/obj/machinery/door/firedoor/border_only{name = "hazard door south"},/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research) -"caX" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/device/flashlight,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/research_starboard) +"caX" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/device/flashlight,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "caY" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "caZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) "cba" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5507,25 +5507,25 @@ "cbU" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/patient_c) "cbV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_c) "cbW" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Medbay Patient C"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_c) -"cbX" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cbY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/research_port) -"cbZ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cca" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/maintenance/research_port) -"ccc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ccd" = (/obj/machinery/camera{c_tag = "Medical Science Substation"; dir = 2; network = list("SS13","Engineering")},/obj/structure/table,/obj/item/device/flashlight,/obj/item/weapon/extinguisher,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cce" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ccf" = (/obj/machinery/meter,/obj/machinery/light{dir = 1},/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ccg" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cch" = (/turf/simulated/wall,/area/maintenance/substation/medical_science) -"cci" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccj" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cck" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccl" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ccn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"cco" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"ccp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) +"cbX" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"cbY" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"cbZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"cca" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"ccc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_access_txt = "0"; req_one_access_txt = "11;24;47"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research) +"ccd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/research) +"cce" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing) +"ccg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"cch" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"cci" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccj" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; name = "Miscellaneous Research"; sortType = "Miscellaneous Research"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"cck" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess) +"cco" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ccp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) "ccq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "ccr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "ccs" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) @@ -5535,14 +5535,14 @@ "ccw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating,/area/maintenance/research_starboard) "ccy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/research_starboard) -"ccz" = (/obj/structure/rack,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/research_starboard) +"ccz" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/research_starboard) "ccA" = (/turf/simulated/floor/plating/airless,/area/engine/engine_eva_maintenance) "ccB" = (/obj/machinery/light/small,/turf/simulated/floor{dir = 10; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance) "ccC" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eng_eva_pump"},/obj/machinery/camera{c_tag = "Engineering EVA Airlock"; dir = 1},/turf/simulated/floor{dir = 6; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance) "ccD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance) "ccE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance) "ccF" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/plating,/area/engine/engine_eva_maintenance) -"ccG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief) +"ccG" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief) "ccH" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/crew_quarters/heads/chief) "ccI" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/chief) "ccJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/chief) @@ -5566,7 +5566,7 @@ "cdb" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access_txt = "10;24;5"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cdc" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = -20; pixel_y = -21},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "cdd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) -"cde" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light,/obj/machinery/camera{c_tag = "Engineering Washroom"; dir = 1; network = list("SS13")},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"cde" = (/obj/machinery/camera{c_tag = "Engineering Substation"; dir = 2; network = list("SS13","Engineering")},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid"; name_tag = "Engineering Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cdf" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "cdg" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryobs) "cdh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/surgeryobs) @@ -5590,15 +5590,15 @@ "cdz" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/medical/patient_c) "cdA" = (/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/patient_c) "cdB" = (/obj/machinery/door_control{id = "medprivc"; name = "Privacy Shutters"; pixel_y = -25},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_c) -"cdC" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cdD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) -"cdE" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall,/area/maintenance/research_port) -"cdF" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid"; name_tag = "Medbay Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cdG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cdH" = (/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cdI" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Research Subgrid"; name_tag = "Research Subgrid"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cdJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cdK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"cdC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) +"cdD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"cdE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/medical/virologyaccess) +"cdF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/virologyaccess) +"cdG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess) +"cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/virologyaccess) +"cdI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"cdJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"cdK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) "cdL" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora_storage) "cdM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_storage) "cdN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_storage) @@ -5640,9 +5640,9 @@ "cex" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "cey" = (/obj/structure/noticeboard{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "cez" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) -"ceA" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"ceA" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "ceB" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "engineering_cubicle"; name = "Restroom"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) -"ceC" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"ceC" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "ceD" = (/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryobs) "ceE" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/medical/surgeryobs) "ceF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/surgeryobs) @@ -5656,15 +5656,15 @@ "ceN" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "ceO" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "ceP" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) -"ceQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) +"ceQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) "ceR" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 32},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"ceS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/maintenance/research_port) -"ceT" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ceU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ceV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ceW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ceX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"ceY" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceT" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/engine/locker_room) +"ceU" = (/turf/simulated/wall,/area/engine/locker_room) +"ceV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"ceW" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/engine/locker_room) +"ceX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table,/obj/machinery/camera{c_tag = "Engineering Washroom"; dir = 1; network = list("SS13")},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/engine/locker_room) +"ceY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engine/locker_room) "ceZ" = (/obj/structure/table,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/hand_labeler,/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora_storage) "cfa" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cfb" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -5698,8 +5698,8 @@ "cfD" = (/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/engine/engine_eva) "cfE" = (/obj/structure/dispenser{phorontanks = 0},/turf/simulated/floor,/area/engine/engine_eva) "cfF" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engine/engine_eva) -"cfG" = (/obj/structure/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/item/clothing/suit/space/void/engineering,/turf/simulated/floor,/area/engine/engine_eva) -"cfH" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/structure/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/turf/simulated/floor,/area/engine/engine_eva) +"cfG" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/item/clothing/suit/space/void/engineering,/turf/simulated/floor,/area/engine/engine_eva) +"cfH" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/turf/simulated/floor,/area/engine/engine_eva) "cfI" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/hallway/primary/aft) "cfJ" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/aft) "cfK" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/aft) @@ -5712,7 +5712,7 @@ "cfR" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "cfS" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) "cfT" = (/obj/machinery/door/poddoor{desc = "For use by authorized NanoTrasen AI maintenance technicians or in case of emergency only."; id = "AI Door"; name = "AI Chamber Maintenance Door"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/ai) -"cfU" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 4},/obj/machinery/door_control{id = "engineering_cubicle"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 8; req_access_txt = "0"; specialfunctions = 4},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"cfU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cfV" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/medical/surgeryobs) "cfW" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/surgeryobs) "cfX" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/surgeryobs) @@ -5726,21 +5726,21 @@ "cgf" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera{c_tag = "Medbay Mental Health Room"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/psych) "cgg" = (/obj/structure/stool/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych) "cgh" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing) -"cgi" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing) +"cgi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/engine/locker_room) "cgj" = (/obj/structure/table,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing) "cgk" = (/obj/item/weapon/storage/toolbox/emergency,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) -"cgl" = (/obj/structure/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) +"cgl" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "cgm" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/blood/oil{amount = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/research_port) "cgn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cgo" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cgp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cgq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/maintenance/research_port) -"cgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cgs" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall,/area/maintenance/research_port) -"cgt" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cgu" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cgv" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cgw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) +"cgo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/locker_room) +"cgp" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor,/area/engine/locker_room) +"cgq" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/locker_room) +"cgs" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/engineering) +"cgt" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Aft Starboard Solar"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cgu" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Engineering Substation"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cgv" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/virology) +"cgw" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) "cgx" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/camera/autoname{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "cgy" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora_storage) "cgz" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -5793,17 +5793,17 @@ "chu" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor{icon_state = "bcarpet08"},/area/medical/psych) "chv" = (/obj/structure/stool/bed/psych,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor{icon_state = "bcarpet09"},/area/medical/psych) "chw" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virologyaccess) -"chx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess) +"chx" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/medical/virology) "chy" = (/obj/structure/bedsheetbin,/obj/structure/table,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "chz" = (/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/weapon/gun/syringe,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "chA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) "chB" = (/turf/simulated/floor/plating,/area/maintenance/research_port) "chC" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle1"; name = "Cubicle 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "chD" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle2"; name = "Cubicle 2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"chE" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"chF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"chG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"chH" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) +"chE" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plating/airless,/area/medical/virology) +"chF" = (/turf/simulated/floor/plating/airless,/area/medical/virology) +"chG" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) +"chH" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) "chI" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "chJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora_storage) "chK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -5823,7 +5823,7 @@ "chY" = (/obj/machinery/computer/reconstitutor,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "chZ" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cia" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"cib" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cib" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cic" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "cid" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "cie" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) @@ -5847,13 +5847,13 @@ "ciw" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engine/locker_room) "cix" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) "ciy" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{dir = 1},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) -"ciz" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/engine/locker_room) +"ciz" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/maintenance/engineering) "ciA" = (/turf/simulated/wall,/area/maintenance/substation/engineering) -"ciB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"ciC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/table/reinforced,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"ciD" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Engineering Substation"; dir = 2; network = list("SS13","Engineering")},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"ciE" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid"; name_tag = "Engineering Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"ciF" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"ciB" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) +"ciC" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) +"ciD" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ciE" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ciF" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "ciG" = (/turf/simulated/wall,/area/medical/surgery) "ciH" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/light_switch{pixel_x = -22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "ciI" = (/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -5870,15 +5870,9 @@ "ciT" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "ciU" = (/turf/simulated/wall,/area/medical/surgery2) "ciV" = (/obj/machinery/camera{c_tag = "Virology Access Fore"; dir = 4; network = list("SS13","Research")},/turf/simulated/floor,/area/medical/virologyaccess) -"ciW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/medical/virologyaccess) "ciX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/medical/surgeryprep) "ciY" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 4},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "ciZ" = (/obj/machinery/shower{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"cja" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cjb" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cjc" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cjd" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cje" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "cjf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_port) "cjg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora_storage) "cjh" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -5908,8 +5902,6 @@ "cjF" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3; pixel_y = 0},/turf/simulated/floor,/area/engine/engine_eva) "cjG" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor,/area/engine/engine_eva) "cjH" = (/obj/machinery/camera{c_tag = "Engineering EVA Storage"; dir = 1; network = list("SS13")},/obj/machinery/suit_cycler/engineering,/turf/simulated/floor,/area/engine/engine_eva) -"cjI" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) -"cjJ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) "cjK" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor,/area/hallway/primary/aft) "cjL" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/hallway/primary/aft) "cjM" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/hallway/primary/aft) @@ -5919,13 +5911,7 @@ "cjQ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/primary/aft) "cjR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/locker_room) "cjS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/locker_room) -"cjT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/locker_room) -"cjU" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cjV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cjW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cjX" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cjY" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cjZ" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cjZ" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; sortType = "Atmospherics"; name = "Atmospherics"},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor,/area/atmos) "cka" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "ckb" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "ckc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -5943,17 +5929,10 @@ "cko" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) "ckp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess) "ckq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/medical/virologyaccess) -"ckr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/medical/virologyaccess) -"cks" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess) "ckt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ckv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research_port) -"ckw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) -"ckx" = (/obj/machinery/door/airlock/engineering{name = "Medbay Science Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) -"cky" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/medical_science) -"ckz" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; sortType = "Atmospherics"; name = "Atmospherics"},/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor,/area/atmos) -"ckA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor,/area/atmos) -"ckB" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor,/area/atmos) +"ckz" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/atmos) +"ckA" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/atmos) +"ckB" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor,/area/atmos) "ckC" = (/obj/machinery/door/window/northright{name = "Xenoflora Containment"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "ckD" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "ckE" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology) @@ -5992,14 +5971,9 @@ "cll" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) "clm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cln" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) -"clo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/engine/locker_room) -"clp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/locker_room) -"clq" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/locker_room) "clr" = (/obj/structure/table,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/storage/art) -"cls" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/medical/virologyaccess) "clt" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/tape_roll,/turf/simulated/floor,/area/hallway/primary/aft) -"clu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"clv" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"clv" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos) "clw" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/engineering) "clx" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engineering) "cly" = (/obj/structure/table,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -6024,12 +5998,6 @@ "clR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) "clS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) "clT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) -"clU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port) -"clV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_port) -"clW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/research_port) -"clX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/research_port) -"clY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/research_port) -"clZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) "cma" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "cmb" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "cmc" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) @@ -6075,14 +6043,8 @@ "cmQ" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) "cmR" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) "cmS" = (/turf/simulated/floor,/area/engine/locker_room) -"cmT" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engine/locker_room) -"cmU" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cmV" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry/port) -"cmW" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/space) -"cmX" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/plating,/area/engine/engine_room) -"cmY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cmZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cna" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cmX" = (/obj/machinery/atmospherics/pipe/cap/visible{color = "#ffcc00"},/turf/simulated/floor,/area/atmos) "cnb" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "cnc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "cnd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -6107,7 +6069,7 @@ "cnw" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cnx" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/lattice,/turf/space,/area/space) "cny" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) -"cnz" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) +"cnz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = 32},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 2e+006; RCon_tag = "Atmospherics"},/turf/simulated/floor/plating,/area/atmos) "cnA" = (/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/construction) "cnB" = (/obj/item/device/flashlight,/turf/simulated/floor,/area/construction) "cnC" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/construction) @@ -6158,7 +6120,7 @@ "cov" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cow" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cox" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/atmos) -"coy" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating,/area/engine/engine_room) +"coy" = (/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 500000; output_level = 500000; RCon_tag = "Engine Main"},/obj/structure/cable,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/engine_smes) "coz" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry/port) "coA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/atmos) "coB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/atmos) @@ -6169,7 +6131,7 @@ "coG" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor,/area/atmos) "coH" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor,/area/atmos) "coI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/atmos_monitoring) -"coJ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"coJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/computer/power_monitor,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) "coK" = (/obj/machinery/firealarm{pixel_x = 32; pixel_y = 24},/turf/simulated/floor,/area/engine/atmos_monitoring) "coL" = (/obj/machinery/computer/atmoscontrol,/turf/simulated/floor,/area/engine/atmos_monitoring) "coM" = (/turf/simulated/wall/r_wall,/area/engine/engineering_monitoring) @@ -6208,13 +6170,13 @@ "cpt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/atmos) "cpu" = (/turf/simulated/floor,/area/atmos) "cpv" = (/obj/machinery/atmospherics/valve/digital/open{name = "Mixed Air Outlet Valve"},/turf/simulated/floor{dir = 9; icon_state = "arrival"},/area/atmos) -"cpw" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) -"cpx" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) -"cpy" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) -"cpz" = (/obj/machinery/atmospherics/tvalve/mirrored/digital{dir = 4; name = "coolant replacement valve"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cpA" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact-supply (NORTHWEST)"; icon_state = "intact-supply"; dir = 9},/turf/simulated/floor,/area/atmos) +"cpw" = (/obj/machinery/computer/rcon,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) +"cpx" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Supermatter")},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) +"cpy" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"cpz" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 25; req_access_txt = "10"},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_room) +"cpA" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Output"; name_tag = "Engine Output"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cpB" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) -"cpC" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cpC" = (/obj/machinery/alarm{breach_detection = 0; dir = 2; frequency = 1439; name = "Engine Room Air Alarm"; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) "cpD" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) "cpE" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/space,/area/space) "cpF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating/airless,/area/atmos) @@ -6272,7 +6234,7 @@ "cqF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology) "cqG" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/rnd/xenobiology) "cqH" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cqI" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_access = null; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "waste pump"},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_waste) +"cqI" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006; RCon_tag = "Engine Core"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cqJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/atmos) "cqK" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) "cqL" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/obj/structure/lattice,/turf/space,/area/space) @@ -6366,7 +6328,6 @@ "csv" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/engine/storage_hard) "csw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/storage_hard) "csx" = (/obj/structure/closet/crate,/obj/item/stack/sheet/mineral/phoron{amount = 25},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor/plating,/area/engine/storage_hard) -"csy" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/maintenance/engineering) "csz" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "csA" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "csB" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) @@ -6389,13 +6350,13 @@ "csS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "csT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/starboard) "csU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos) -"csV" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) +"csV" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) "csW" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "csX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/atmos) "csY" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room) "csZ" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) "cta" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) -"ctb" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"ctb" = (/obj/machinery/atmospherics/omni/filter{on = 0; tag_east = 1; tag_north = 0; tag_south = 4; tag_west = 2},/turf/simulated/floor/plating,/area/engine/engine_room) "ctc" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) "ctd" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access"; req_access_txt = "12;24"},/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/atmos) "cte" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_waste) @@ -6404,7 +6365,7 @@ "cth" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/atmos) "cti" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) "ctj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) -"ctk" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) +"ctk" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "ctl" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Monitoring Room"; req_access_txt = "11"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engineering_monitoring) "ctm" = (/obj/machinery/camera{c_tag = "Engineering Hallway North"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/engine/hallway) "ctn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/hallway) @@ -6418,7 +6379,6 @@ "ctv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering) "ctw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/engineering) "ctx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 1 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery) -"cty" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) "ctz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) "ctA" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) "ctB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 2 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery2) @@ -6445,14 +6405,14 @@ "ctW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "ctX" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) "ctY" = (/turf/space,/area/syndicate_station/southwest) -"ctZ" = (/obj/machinery/atmospherics/omni/filter{on = 0; tag_east = 1; tag_north = 0; tag_south = 4; tag_west = 2},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/engine/engine_room) +"ctZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cua" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor,/area/atmos) "cub" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/starboard) -"cuc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_waste) +"cuc" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_room) "cud" = (/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/starboard) "cue" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos) "cuf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cug" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) +"cug" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) "cuh" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/turf/simulated/floor,/area/atmos) "cui" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) "cuj" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) @@ -6560,17 +6520,17 @@ "cwh" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/rnd/xenobiology) "cwi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 8},/area/rnd/xenobiology) "cwj" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cwk" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) +"cwk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_waste) "cwl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/solar/port) "cwm" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_waste) -"cwn" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"cwo" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) -"cwp" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/atmos) -"cwq" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_access = null; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_waste) +"cwn" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_access = null; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_waste) +"cwo" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"cwp" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cwq" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) "cwr" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "EngineEmitterPortWest"; layer = 3.3; name = "Engine Waste Handling Access"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) "cws" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor,/area/atmos) "cwt" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/atmos) -"cwu" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating,/area/engine/engine_room) +"cwu" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/valve/digital/open{dir = 4},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) "cwv" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/wall/r_wall,/area/atmos) "cww" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/engine/hallway) "cwx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/engine/hallway) @@ -6616,7 +6576,7 @@ "cxl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor,/area/rnd/xenobiology) "cxm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/rnd/xenobiology) "cxn" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/rnd/xenobiology) -"cxo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) +"cxo" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) "cxp" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor,/area/atmos) "cxq" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/atmos) "cxr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/wall/r_wall,/area/atmos) @@ -6680,7 +6640,7 @@ "cyx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/atmos) "cyy" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/camera{c_tag = "Atmospherics South East"; dir = 1},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/atmos) "cyz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/atmos) -"cyA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = 32},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 2e+006},/turf/simulated/floor/plating,/area/atmos) +"cyA" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) "cyB" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cyC" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cyD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/atmos) @@ -6832,15 +6792,16 @@ "cBt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/atmos) "cBu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cBv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos) -"cBw" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/atmos) -"cBx" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower{color = "#FFA500"; layer = 3.3},/obj/machinery/door/window/northleft{name = "Shower"; req_access_txt = "0"},/obj/structure/window/basic{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) -"cBy" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower{color = "#FFA500"; layer = 3.3},/obj/machinery/door/window/northright{name = "Shower"; req_access_txt = "0"},/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) +"cBw" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_access = null; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/window/reinforced,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "waste pump"},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_waste) +"cBz" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cBA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) "cBB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBC" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBD" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBE" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBF" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/structure/cable/cyan,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/atmos) "cBG" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/atmos) +"cBH" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) "cBI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) "cBJ" = (/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) "cBK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) @@ -6897,7 +6858,6 @@ "cCJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engine/engine_hallway) "cCK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) "cCL" = (/obj/structure/sign/securearea,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engine/engine_hallway) -"cCM" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cCN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle) "cCO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13;11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/engi_shuttle) "cCP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle) @@ -7001,12 +6961,14 @@ "cEJ" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cEK" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cEL" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/rnd/xenobiology) +"cEM" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "cEN" = (/obj/machinery/light/small,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cEO" = (/obj/machinery/light/small,/turf/simulated/floor/engine{carbon_dioxide = 0; name = "phoron floor"; nitrogen = 0; oxygen = 0; phoron = 70000},/area/atmos) "cEP" = (/obj/machinery/light/small,/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cEQ" = (/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cER" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/drone_fabrication) "cES" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"cET" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) "cEU" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cEV" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor,/area/engine/engine_smes) "cEW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_smes) @@ -7031,6 +6993,7 @@ "cFp" = (/obj/machinery/door/poddoor{desc = "By gods, release the hounds!"; id = "xenobioout6"; name = "Containment Release"},/turf/simulated/floor/engine,/area/rnd/xenobiology) "cFq" = (/obj/structure/grille,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "cFr" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"cFs" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) "cFt" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "cFu" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical,/obj/machinery/camera{c_tag = "Drone Fabrication"; dir = 8; network = list("SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cFv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engine/engine_smes) @@ -7056,6 +7019,8 @@ "cFP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) "cFQ" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cFR" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cFS" = (/obj/machinery/atmospherics/pipe/cap/visible{color = "#00ffff"; dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"cFT" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Aft Port Solar"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cFU" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cFV" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "cFW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_smes) @@ -7069,8 +7034,6 @@ "cGe" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating,/area/engine/engine_airlock) "cGf" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engine_airlock) "cGg" = (/turf/space,/area/shuttle/constructionsite/station) -"cGh" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/engineering) -"cGi" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/engineering) "cGj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/engineering) "cGk" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/space,/area/space) "cGl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) @@ -7082,13 +7045,9 @@ "cGr" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/drone_fabrication) "cGs" = (/obj/machinery/light,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/sensor{name = "Powernet Sensor - Master Grid"; name_tag = "Master"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/drone_fabrication) "cGt" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "map_on"; on = 1},/turf/simulated/floor,/area/atmos) -"cGu" = (/obj/machinery/power/smes/buildable{charge = 1e+007; input_level = 500000; input_attempt = 1; cur_coils = 4; output_level = 500000},/obj/structure/cable,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/engine_smes) "cGv" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/light,/obj/machinery/door_control{id = "engine_electrical_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -25; req_access_txt = "10"; specialfunctions = 4},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/engine/engine_smes) "cGw" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_smes) "cGx" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; pressure_setting = 100; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) -"cGy" = (/obj/machinery/computer/power_monitor{name = "Engine Power Monitoring"},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) -"cGz" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Supermatter")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) -"cGA" = (/obj/machinery/computer/power_monitor{name = "Main Power Grid Monitoring"},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) "cGB" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) "cGC" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_al_c_snsr"; pixel_x = -25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_airlock) "cGD" = (/turf/simulated/floor/plating,/area/engine/engine_airlock) @@ -7112,11 +7071,6 @@ "cGW" = (/obj/machinery/atmospherics/binary/pump{icon_state = "map_on"; on = 1},/turf/simulated/floor,/area/atmos) "cGY" = (/obj/machinery/atmospherics/valve/digital/open{name = "Mixed Air Inlet Valve"},/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/atmos) "cGZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engine_room) -"cHa" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 25; req_access_txt = "10"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) -"cHb" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room) -"cHc" = (/obj/machinery/alarm{breach_detection = 0; dir = 2; frequency = 1439; name = "Engine Room Air Alarm"; pixel_y = 23},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) -"cHd" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Output"; name_tag = "Engine Output"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) -"cHe" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cHf" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "cHg" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/engine/engine_room) "cHh" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/atmos) @@ -7124,7 +7078,6 @@ "cHj" = (/turf/simulated/floor/plating,/area/engine/engine_room) "cHk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/engine/engine_room) "cHl" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/clothing/glasses/welding,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) -"cHm" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engine/engine_room) "cHn" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "cHp" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "cHq" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space) @@ -7134,8 +7087,6 @@ "cHu" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor,/area/atmos) "cHv" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/atmos) "cHw" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "EngineEmitterPortWest"; layer = 3.3; name = "Engine Waste Handling Access"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cHx" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"cHy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_room) "cHz" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cHA" = (/obj/machinery/atmospherics/valve/digital/open{name = "Nitrogen Outlet Valve"},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/atmos) "cHB" = (/obj/machinery/atmospherics/binary/pump,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) @@ -7182,16 +7133,12 @@ "cIu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_waste) "cIv" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor,/area/atmos) "cIw" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/engine/engine_room) -"cIx" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) "cIy" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) "cIz" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/atmos) "cIA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "cIB" = (/obj/machinery/atmospherics/valve/digital{dir = 4},/turf/simulated/floor,/area/atmos) "cID" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos) "cIE" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/wall/r_wall,/area/atmos) -"cIG" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cIH" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cII" = (/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cIJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cIK" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) "cIL" = (/turf/simulated/wall/r_wall,/area/maintenance/engi_engine) @@ -7206,11 +7153,9 @@ "cIW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cIX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/portsolar) "cIY" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cIZ" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJa" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/portsolar) "cJb" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engi_engine) "cJc" = (/obj/structure/closet/crate,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/engi_engine) -"cJd" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJe" = (/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJf" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7268,10 +7213,8 @@ "cKq" = (/turf/space,/area/vox_station/southwest_solars) "cKr" = (/obj/machinery/power/solar{id = "auxsolarnorth"; name = "Fore Solar Array"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore) "cKv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/atmos) -"cKw" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) "cKA" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/space,/area/space) "cKB" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/space,/area/space) -"cKT" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/engine/engine_room) "cKU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_room) "cKV" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 5; pixel_y = -25; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "EngineEmitterPort"; name = "Engine Charging Port"; pixel_x = -5; pixel_y = -25; req_access_txt = "10"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) "cKX" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) @@ -7348,29 +7291,29 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaaaaauaauaauaauaauaauaauaauaauaaaaauaauaauaauaaaaaaaaaaamaamaaIaafaaacKraazaavaafcKraazaavaaacKraazaavaafaaaaaaaacaaaaafaafabcabdabdabdabdabeabfaaaaaaaaTabgabgabhabgabgaaTaaaaafaayabiabjaaXabkaaXabjaaXaayablaaZabmaayabnaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaaaaauaauaauaauaauaauaauaauaauaaaaauaauaauaauaaaaaaaaaaamaaaaafaaaaafaafaoPaafaafaafaoPaafaaaaafaoPaafaaaaaaaaaaaaaaaabqabrabsabtabuabvabwabxabfaafaaaaaTabyabzabAabBabCaaTaaaaaaabDabEabFabGabHaaEabFaaEabIabJabKabLabMabNabOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaIaafaoSaoRaoQaoTaoTaoTaoTaoTaoTaoTaoTaoTaoTaoTaoTaoVaoRaoRaoUabWabXabYabZacaacbaccacdaaTaaTaaTaaTaaTaceacfacgaaTaaTachaciacjackaclacmacnacmacoackackackacpacqacracsactaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaafaaLaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaamaaaaafaaaaafaafaoOaafaaaaafaoOaafaaaaafaoOaafaaaaaaaaaaaaaaaabqabracvacwacxacyabdaczaaTaaTacAacBacCacDacEacFaaTaaTacGacHacIacJacKacLacMacNacOacPacQacQacRacSacracsabbabbabbabbabbabbaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaamaaaaafaaaaafaafaoOaafaaaaafaoOaafaaaaafaoOaafaaaaaaaaaaaaaaaabqabracvacwacxacyabdaczaaTaaTacBacAacDacCacEacFaaTaaTacGacHacIacJacKacLacMacNacOacPacQacQacRacSacracsabbabbabbabbabbabbaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaamaamaaIaafaafcKraoNaavaaacKraoNaavaaacKraoNaavaafaaaaaaaaaaaaaafaafacUabdabdabdabdacVaaTacWacXacXacXacXacEacXacYacZadaacQadbadcaddadeacMadfacQacQacQacQadgadhackadiadjabbadkadladmabbaaLaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaacKraoNaavaafcKraoNaavaaacKraoNaavaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaabfacVaaTadnadoadpadqadradsadtaduacZadaacQadvadcaddadwadxadyacQadzadzadzaddadAacradBadladCadladladladCaaLaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaacKraoNaavaafcKraoNaavaaacKraoNaavaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaabfacVaaTadnadoadpadradqadsadtaduacZadaacQadvadcaddadwadxadyacQadzadzadzaddadAacradBadladCadladladladCaaLaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaIaafcKraoNaavaaacKraoNaavaaacKraoNaavaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaadDadEaaTadFacXacXacXacXacEacXadGacZadaacQadvadHadIadJadKadLadMadNadNadNadOadPacradQadlabbadRadSadlabbaaLaaLaafaaaaafaaaaaLaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaIaafcKraoNaavaaacKraoNaavaafcKraoNaavaafaafaafaaaaafaafaaaaaaaaaaaaaaaadTadEaaTaaTadUadVadWadXacEadXaaTaaTadYacQadbacQaddadZaeaadyadMadNaebadNaecaedacradQaeeabbabbabbabbabbaaLaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaafaafaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaIaafcKraoNaavaaacKraoNaavaafcKraoNaavaafaafaafaaaaafaafaaaaaaaaaaaaaaaadTadEaaTaaTadVadUadWadXacEadXaaTaaTadYacQadbacQaddadZaeaadyadMadNaebadNaecaedacradQaeeabbabbabbabbabbaaLaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaafaafaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaaaaaaaauaauaauaauaauaauaauaaaaaaaauaauaauaauaacaaaaaaaaaaaaaaaaaqaafcKraoWaavaaacKraoWaavaaacKraoWaavaafaaaaafaafaafaaaaaaaaaaaaaaaaaaadTaegaaTaaTaaTaaTaaTaaTaehaaTaaTaaTaeiaejaekaelaemaenaeoaepaeqaeraesaeraetaeuacradBaevabbaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaewadEaexaeyaezaaTaeAaeBaeCaeDaeEaeFaeGaeHaeIaeHaddadZaeJaeKaeLaeLaeMaeLaeNaeOaePaeQaeRabbaeSaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaeTaamaamaamaamaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafabfadEaeUaeVaeWaaTaeAaeAaeXaeYaeZaeFafaafbafcafdaddafeaffafgacQacQafhacQafiafjacrafkaflabbafmafnafoafoafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabfabfabfabfadEafqafrafsaaTaftafuafvafwafxafyafzafAafBafAafCafDadxafEafFacQafhacQafGafHafIafJafKafLadlafMafNafOafPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTagdageagfaggaghaeFagiagjagkaglagmagnagoagpagqagragsagtaguagpagvagwagxabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTageagdagfaggaghaeFagiagjagkaglagmagnagoagpagqagragsagtaguagpagvagwagxabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaabfagAagBafZafZafZafYafYafZagCagDagDagDagDagDagDagDagDagDagDagEaaTagFagGagHagIagJaeFagKagLagLagLaddagMagNagOagPagQagRagQagPagSagvagTadlabbabbaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahiahjahkahlahmahnahnahnahnaddahoahpahqahrahsahtahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRahAabfahBadEagWahCahDahEahFahGahHagDagZahIahFahJahKahLahLahMahNahOahPacXacXacEacXahQahRahSacQacQacQaddahTahUahVahWahXahYahZaiaaibagvahxaicabOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfaigadEagWaihaiiaijaikailaimagDagZahIainagWaioahLaipaiqahKahOairaisacXaitacXacXaiuaivahSacQacQaddaiwaixaiyagPagPaizagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEaiFaiGaiHaiIahFagDaiJaiKaiLagWaiMaiNaiOaiOaiPaiQaiRaiSaiTacEaiUaiVaeFaiWaiXaiYaiZajaajbajcajdajeajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajjabfabfajkajlagWagWajmagWagWajnagWagWagWajoagWagWajpajqajrajsajtajuagWajvajwajxajyajqagWagWajzajAajBagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeakfakgajzakhakiakjakkaklakmaknakoahxakpadlakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMakNakOakPakJakQakRakSakTakUakVakWakXakYakoakZabbalaalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalealfagWalgalhahLalialjagWalkallalkagWalmalnaloagWalpalqalralsagDaltalualvalwalxagWalyalzalzalAagWalBalCalDalEalFalGalHakoalIabbabbabbabbaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabPaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEalLalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoamsamtamuamvamwaaaaaaamxaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeakfakgajzakhakiakjakkaklakmaknakoakpalaakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMakNakOakPakJakQakRakSakTakUakVakWakXakYakoalIabbamsalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalealfagWalgalhahLalialjagWalkallalkagWalmalnaloagWalpalqalralsagDaltalualvalwalxagWalyalzalzalAagWalBalCalDalEalFalGalHakoamtanQamuanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabPaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEalLalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaamxaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaanWaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTamUamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafamxaafaafamxaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoMaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaanUaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpanqanpanransantanuanvanwanxanyanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPanQanRanSaaaaaaaafaaaaafamxaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafaefaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafabTaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoeaofaogaohaoiaojaokaolaomaonaooaonaopaoqaoraonaosaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGaoHaoHaoHaoHaoIaoJaoHaoKaoLaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafalJalKalKalKalKaniaefamzamyamyamyamyanjaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaanUaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpanqanpanransantanuanvanwanxanyanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafamxaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafaefaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafabTaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoeaofaogaohaoiaojaokaolaomaonaooaonaopaoqaoraonaosaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoKaoLaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafalJalKalKalKalKaniaefamzamyamyamyamyanjaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafacuabVabVabVabVacTabTabUabSabSabSabSabRaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcapdapeapfapgaphapiapjaonaonapkaplaonapmapnaoraonapoaonappapqapramgamfamgamTapsamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapDapEapFapGaoHaoHapHaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafaefaafapIapIapIapIapIaafaaIaaaaaaahzahzahzahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafabTaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapLapMagWalgapNaofapOapPapQapRaokapSapTapUapVapWapXapYapZaqaaqbaqcaqdaovaqeaovaqfaqgaqhaqiaqjaqkanGaqlaqmapyaqnaqoaqpaqoaqqaqraqsapFaqtaquapFaqvaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafaefaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafabTaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWaqCalRagWalWalWalWaqDaqEapkaqFaqGaqHaonaqIaqJaqKaqLaqMaqNaqOaqPaqQaqRaqSaqTaqUaqVaqWamVanGaqXaqYaqZaraarbarcardanGarearfapFaqtaqtapFargaoHarhariarjaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafaefaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7381,100 +7324,100 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTatUatTatSatVatWatVatSaafatqatXatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafabTaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhauiaonapnaonasJaqEaujaukaulaumaunauoauparAauqaurausarEatBasZauuaySauvatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauJauwauLatPauMatRatRatRatRatRatQatPaafaaaaaaaamaafalJalKalKalKalKaniaefamzamyamyamyamyanjaafaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTauOatTauNatVauPatVauNauQauRauSauTauUauUauVauQauQaafaaaaaIaafacuabVabVabVabVacTabTabUabSabSabSabSabRaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWavbavcaonavdaveaveavfavgaveavhaviavjarAavkauravlarEavmasZavnauKauvatCavpavqatFatGauzauAavravsavtatMatNavuavvauGauHauHauJavwavxavyavzatRatRatRatRatRavAatPatPatPaaaaamaaaapIapIapIapIapIaafaefaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBavCavDauNavEavFavGauNavHavIavJavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafaoYaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaavQavRavSavTavUavVavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweawfawgaukawhawiawjawkawlarAawmaurawnarEatBasZawoavoawpatCawravqatFatFatFawsawtawuatFatFatNawvawwauGauHauHauJawxawyawzawAatRatRatRatRatRawBawCawDawEaaaaamaaaaafaaaaafaafaaaaaaaoXaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJawKawLawMawMawMawLawNasAaaaaaaaaIaaaaafaaaaafaafaaaaaaaoZaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPavRawQawRavUawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawXawUawYaxaaxbawZaxdaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxnaxpaxqaxraxsatRatRatRatRatRaxsaxtaxuaxvaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNaxwaxxatSauNaxyaxxatSauNaxzauNauNauNauNauNaxAatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaxCaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaxGaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaxOaxPaxQaxRaxOaxSasZaxTaxjautatCaxVaxXaxXaxXaxZaxYayaaybaxXavqaydayeayfaygayhayhayhayiavxayjaykatRatRatRatRatRaykaylaxuaxvaaaaaaaaaaafaafaaaaafaaaaaaavPaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoayqayoayrayoaysaytayuayvayvayvaywauNayxatqaaaaafaafaaaaaaaaaaaaaafaaaayyayzayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLayNayLayMayLayLayLarAayOayPayQarEaoKasZayRaycaxUatCayUayTayWayVayYayXayYayZayTazaazbazcazdazeazdazdazfazgazhaziazjatRatRatRatRatRazkazlazmaznaaaaaaaaaaaaaafaaaaafaaaazoazpazoaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwazBauNazCauRaafaafaaaaaaaaaaaaaaaaafazDazEazFazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTazUazVazWazXazYazZaAaaAbazTaAcarAaAdayPayQarEaoKasZaAfaAecfSatCaxWaxXaxXaxXaxXaAjaAkaAlaAmaAnaxkaAoaApaApaApaApaAqavxavxaAraAsatRatRatRatRatRaAtatPatPatPaaaaaaaaaaafaafaafaafaaaaAuaAvaAuaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNazCauQauQaAEauUauUauUauUauVauQaAFaAGaAHaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaoKasZawXaAgaAhaBbaBcaBdaBeaBfaBgaBhaBiaBjaBjaBkaBjatPaBlaBmaBnaBoaBpaBqaBratPaBsatRatRatRatRatRaBtatPaafaaaaaaaaaaaaaafaafaaaaafaBuaBvaBwaBxaByaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaBEaBFaBBawHaBGaBHaBIaBJaBKaBLaBMawMawMawMawMawMawMaBNaBOaBPaAFaBQaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaCeaCfaCgaChaCfaCiaCjazTaCkarAaAdayPaClarEaAiasZaAZaAYaBaatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaCtatPatPatPaBtatRatRatRatRatRaBtatPaaaaaaaaaaacaaaaCuaCuaCuaCuaCvaCwaCxaCyaCvaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaCDaBLaCEaCEaCEaCEaCEaCEaCEazCaCFaCGaAFaCHaCIaCJaAFaCKaCLaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaDcayLayLayLarAaAdayPayQarEaoKasZaCmaAYauvatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaDnaDoaDpaDqaDraDsaafaDtaDuaDuaDuaDuaDuaDvaafaaaaaaaaaaaaaaaaCuaDwaDxaDyaCvaDzaDAaDBaCvaafaaaaaaaDCaDCaDCaDCaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaDQaBLaDRaDSaDTaDUaDVaDWaCEazCaDXauQaAFaAFaDYaDZaCMaEaaEbaEcaEdaEeaEfaEgaEhaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaEvaEwaCfaExaEyaATaEzaEAaEBaEBarAaAdayPayQarEaoKasZaCnbqyauvatCaEHaEIatEaEJaEKaEKaELaEMaEKaENaEOaBjaEPaEQaERaESaETaDraDsaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaCuaEUaEVaEWaCvaEXaEYaEZaCvaFaaFbaDCaDCaFcaFdaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaFhaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkaFlaFlaFmaFnaFoaFpaFqaFlaFlaFraFsaFtaDPaFuaBLaFvaFwaFxaFyaFxaFzaFAaFBaFCaFDaFEaFFaFGaFHaFIaFJaFKaFLaFLaFLaFMaFLaFLaFNaFOaCMaaaaBYaFPaElaFQaEnaFRaBYaaaazJazOazPaFSaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaFZazTaGaarAaGbaGcaGdarEaoKasZasZasZasZasZaCoaGjaGkaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaGqaDpaGraGsaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaCuaGuaGvaGwaCvaCvaGxaGyaCvaGzaGAaGBaFdaGCaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaGHaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPaFuaBLaGPaGQaGRaGSaGTaGUaCEaGVaGWaGXaGYaGZaHaaHbaCKaHcaFLaFLaFLaFLaFLaFLaFLaFNaHdaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaHkaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaCpaoKaoKaoKaoKaDeaDfaHBatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaHIaDpaHJaHKaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHRaHSaHTaHUaHVaHWaHXaHYaHZaIaaIbaDCaDCaIcaDCaIdaIeaIfaIgaGFaIhaGFaIiaIjaIkaIlaImaInaIoaIpaIqaIraIsaItaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaIwaFlaFlaDKaFlaGLaFlaGLaIxaGLaIyaGLaFlaGMaGNaGOaDPaIzaIAaIAaIBaICaIDaICaIAaIAaIEaIFaIAaIGaIHaIIaIJaCKaIKaILaIMaFLaFLaINaFLaIOaIPaIKaCMaaaaBYaBYaIQaIRaIQaBYaBYaaaazJazOazPaISaITaIUaFTaIVazPaIWaIXayLaIYazTaIZaEwaCfaJaaEyaATaJbaJcazTaJdaJeaJfaJgaJhaMbaECaMbaMbaMbaMbaJlaJjaJkaJlaJmaJnaBjaJoaBjaJpaBjaJqaBjaJraGpaJsaJtaGsaJuaDqaJvaDsaDsaJwaDsaDsaJxaDsaGsaJyaGsaGsaGsaJzaJAaJBaJCaJCaJCaJDaJEaJCaJFaJGaJHaIgaJIaJJaJKaJLaJMaJNaIgaJOaJPaGFaJQaJRaJSaJTaImaJUaIoaJVaJWaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPaJYaJZaKaaKbaKcaKcaKdaKeaKfaKgaKhaKiaKjaKkaKlaKlaCKaIKaKmaKnaKoaKpaIKaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPaKxaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaKHaKIaKJaKKaKLaJeaEDaKNaKOaKPaEEaKRaaaaaaaJlaKSaKTaKUaJlaKVaJnaJnaJnaKWaJnaJnaJnaBjaDpaKXaDpaDpaDpaDpaKYaDpaKZaLaaLbaLcaLdaLeaLfaLgaLhaLfaLfaLfaLfaLfaLiaLfaLfaLfaLfaLfaLfaLfaLfaGraIgaLjaLkaLlaEFaLnaLoaIgaLpaLqaGFaLraLsaLtaJTaLuaJUaIoaJVaIoaLvaLwaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkaFlaFlaFlaLAaFlaFlaLBaFlaFlaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaIAaLKaLKaLKaLKaLKaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaLYaKuaKuaLZaMaaLZaJeaJeaMbaMcaJeaJeaJeaJeaMdaMeaMfaMgaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaMqaMraJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaMvaMwaMxaMyaMzaKZaMAaMBaMCaMCaMDaLfaMEaMFaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaGraIgaMPaMQaMRaMSaMTaMUaIgaMVaMWaMXaMYaMZaNaaNbaGFaGGaNcaJVaIoaNdaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaaaoZaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPavRawQawRavUawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawXawUawYaxaaxbawZaxdaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxnaxpaxqaxraxsatRatRatRatRatRaxsaxtaxuaxvaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNaxwaxxatSauNaxyaxxatSauNawMauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaxCaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaxGaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaxOaxPaxQaxRaxOaxSasZaxTaxjautatCaxVaxXaxXaxXaxZaxYayaaybaxXavqaydayeayfaygayhayhayhayiavxayjaykatRatRatRatRatRaykaylaxuaxvaaaaaaaaaaafaafaaaaafaaaaaaavPaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoayqayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyayzayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLayNayLayMayLayLayLarAayOayPayQarEaAiasZayRaycaxUatCayUayTayWayVayYayXayYayZayTazaazbazcazdazeazdazdazfazgazhaziazjatRatRatRatRatRazkazlazmaznaaaaaaaaaaaaaafaaaaafaaaazoazpazoaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwazBauNavHauRaafaafaaaaaaaaaaaaaaaaafazDazEazFazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTazUazVazWazXazYazZaAaaAbazTaAcarAaAdayPayQarEaAiasZaAfaAecfSatCaxWaxXaxXaxXaxXaAjaAkaAlaAmaAnaxkaAoaApaApaApaApaAqavxavxaAraAsatRatRatRatRatRaAtatPatPatPaafaafaafaafaafaafaafaaaaAuaAvaAuaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNavHauQauQaAEauUauUauUauUauVauQaAFaAGaAHaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaAiasZawXaAgaAhaBbaBcaBdaBeaBfaBgaBhaBiaBjaBjaBkaBjatPaBlaBmaBnaBoaBpaBqaBratPaBsatRatRatRatRatRaBtatPaafaaaaaaaaaaaaaafaafaaaaafaBuaBvaBwaBxaByaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaBEaBFaBBawHaBGaBHaBIaBJaBKaBLavHavHavHavHavHavHavHavHaBOaBPaAFaBQaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaCeaCfaCgaChaCfaCiaCjazTaCkarAaAdayPaClarEaJCasZaAZaAYaBaatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaCtatPatPatPaBtatRatRatRatRatRaBtatPaaaaaaaaaaacaaaaafaaaaaaaaaaCvaCwaCxaCyaCvaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaCHaCIaCJaAFaCKaCLaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaDcayLayLayLarAaAdayPayQarEaAiasZaxTaJDauvatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaDnaDoaDpaDqaGwaDsaafaDtaDuaDuaDuaDuaDuaDvaafaaaaaaaaaaaaaaaaafaaaaaaaaaaCvaDzaDAaDBaCvaafaaaaaaaDCaDCaDCaDCaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaxAaBLaDRaDSaDTaDUaDVaDWaCEavHaDXauQaAFaAFaDYaDZaCMaEaaEbaEcaEdaEeaEfaEgaEhaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaEvaEwaCfaExaEyaATaEzaEAaEBaEBarAaAdayPayQarEaAiaCmaCmaCmaCmaCmaEHaEIatEaEJaEKaEKaELaEMaEKaENaEOaBjaEPaEQaERaESaETaCnaDsaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaCvaEXaEYaEZaCvaFaaFbaDCaDCaFcaFdaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaFhaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkaFlaFlaFmaFnaFoaFpaFqaFlaFlaFraFsaFtaDPayuaBLaFvayxaBMazCaBMaBNaCDavHaFuaDQaFxaFwaFzaFyaFIaFJaFKaFLaFLaFLaFMaFLaFLaFNaFOaCMaaaaBYaFPaElaFQaEnaFRaBYaaaazJazOazPaFSaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaFZazTaGaarAaGbaGcaGdarEaAiaDeaDfaDraCoaDeaCpaGjaGkaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaGqaDpaGraGsaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaCvaCvaGxaGyaCvaGzaGAaGBaFdaGCaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaGHaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPayuaBLaGPaFAaGRaGSaGTaGUaCEaFBaFDaFCaFCaFCbazaFEaFCaHcaFLaFLaFLaFLaFLaFLaFLaFNaHdaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaHkaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaGuaDyaEUaGvaDwaDxaEVaEWatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaHIaDpaHJaHKaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHVaDsaDsaDsaDsaHRaHSaHTaHUaIaaIbaDCaDCaIcaDCaIdaIeaIfaIgaGFaIhaGFaIiaIjaIkaIlaImaInaIoaIpaIqaIraIsaItaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaIwaFlaFlaDKaFlaGLaFlaGLaIxaGLaIyaGLaFlaGMaGNaGOaDPaFFaIAaIAaFGaICaIDaICaIAaIAaIEaIFaFCaGQaFHaGWaGVaFCaIKaILaIMaFLaFLaINaFLaIOaIPaIKaCMaaaaBYaBYaIQaIRaIQaBYaBYaaaazJazOazPaISaITaIUaFTaIVazPaIWaIXayLaIYazTaIZaEwaCfaJaaEyaATaJbaJcazTaJdaJeaJfaJgaJhaMbaECaCuaCuaCuaCuaCuaJjaJkaJlaJmaJnaBjaJoaBjaJpaBjaJqaBjaJraGpaJsaJtaGsaGsaDqaJvaDsaDsaJwaDsaDsaJxaDsaGsaJyaGsaGsaGsaJzaHZaJBaJAaJAaJAaHXaHYaHWaHWaJGaJHaIgaJIaJJaJKaJLaJMaJNaIgaJOaJPaGFaJQaJRaJSaJTaImaJUaIoaJVaJWaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPaGYaGXaHaaGZaHbaHbaIBaIzaIHaIGaIJaIIaJZaJYaKbaKaaFCaIKaKmaKnaKoaKpaIKaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPaKxaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaKHaKIaKJaKKaKLaJeaEDaKNaKOaKPaEEaKRaaaaaaaJlaKSaKTaKUaJlaKVaJnaJnaJnaKWaJnaJnaJnaBjaDpaKXaDpaDpaDpaDpaKYaDpaKZaLaaLbaLcaLdaLeaLfaLgaLhaLfaLfaLfaLfaLfaLiaLfaLfaLfaLfaLfaLfaLfaLfaGraIgaLjaLkaLlaEFaLnaLoaIgaLpaLqaGFaLraLsaLtaJTaLuaJUaIoaJVaIoaLvaLwaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkaFlaFlaFlaLAaFlaFlaLBaFlaFlaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaLYaKuaKuaLZaMaaLZaJeaJeaMbaMcaJeaJeaJeaJeaMdaMeaMfaMgaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaMqaMraJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaMvaMwaMxaMyaMzaKZaMAaMBaMCaMCaMDaLfaMEaMFaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaGraIgaMPaMQaMRaMSaMTaMUaIgaMVaMWaMXaMYaMZaNaaNbaGFaGGaNcaJVaIoaNdaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaDJaDKaDJaDJaDLaDMaDJaDJaDKaLzaNgaBIaNhaLEaNiaNjaNjaNkaNjaNlaIAaNmaNnaLJaNoaNpaNqaNraNsaNtaNraNuaNraNraNraNvaNraNraNwaNxaNyaNzaNAaNBaNzaNCaNzaNzaNzaNzaNDaNEaNFaNGaNraNHaNIaNJaNKaNLaNMaNLaNNaNOaNPaNQaNQaNRaNSaNTaNSaNUaNVaNWaEGaNYaNZaOaaObaOcaMkaMkaMkaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaJlaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaKZaOyaOzaOAaOAaOBaLfaOCaODaOEaOEaOEaOEaOFaOGaOHaOIaOJaOKaOKaOLaOMaLfaGraIgaONaOOaOPaOQaONaONaIgaORaOSaGFaOTaOUaOVaOWaGFaIoaIoaJVaIoaGGaGGaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaPfaPgaPhaPhaPiaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaQaaQbaQbaQbaQcaQbaQbaQdaQeaQfaQgaKZaQhaMCaQiaQjaQkaLfaQlaQmaQnaQnaQnaQnaQnaQoaQpaQqaQraQnaQnaQsaQtaLfaGraIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaQxaGFaIoaIoaJVaIoaQyaQzaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaQEaQFaQGaGOaQCaQHaQIaBIaQJaLEaPeaQKaQLaPhaPhaPiaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaQTaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaRbaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaRraRsaRsaRsaRsaRsaRtaRuaRvaRwaKZaKZaKZaKZaKZaRxaLfaRyaQmaQnaRzaRAaRBaRCaRDaREaRFaQraRGaRHaRIaRJaLfaGraIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaGeaGgaGgaGiaGfaGhaSdaOYaLDaDPaHxaHxaSfaLDaOYaLDaHyaHAaHzaLEaSkaSlaSlaNkaSlaNlaIAaSmaNnaSnaIAaLKaLKaSoaLKaLKaLKaLKaLKaLKaSpaSqaLKaLKaLKaLKaLKaLKaSraSsaSraLKaStaLKaNraQPaSuaSvaSwaSxaNraSyaLKaMbaMbaMkaSzaKOaSAaMnaMnaSBaSBaSBaSBaSCaJeaSDaSEaSFaSGaSGaSHaSGaSGaSFaSEaSIaJeaSJaSKaSKaSKaSKaSLaSLaSMaSNaRqaRpaJlaSOaSPaSPaSPaSPaSPaSPaSQaSRaSSaSTaSUaSVaSWaSXaSYaKZaKZaSZaTaaTbaTcaTdaTeaTeaTeaTfaTgaTfaTeaTeaTeaTeaGraIgaThaONaRLaRMaONaONaTiaIgaTjaTkaTlaGGaIoaTmaTnaToaTpaTqaIoaTraTsaGGaTtaTuaRZaTvaTwaTxaafaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQaNXaLmaKMaQAaSgaSeaSiaShaSjaSiaTzaTyaTBaTAaTEaTCaTAaTFcozaTIaTJaTKaTLaTLaTLaTMaTLaTNaTOaIAaTPaTQaTRaTSaTTaTUaTVaTWaTXaTUaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUeaUiaLKaLKaUjaLKaLKaLKaLKaUkaUlaLKaUmaMbaUnaSzaKOaUoaaaaaaaaaaaaaaaaaaaaaaUpaUqaUraUsaUtaUuaUvaUuaUwaUxaUyaUzaUpaaaaaaaaaaaaaaaaaaaaaaUAaSNaRqaUBaUCaUDaUEaUFaUFaUFaUFaUGaUHaUIaUFaUFaUFaUJaUKaULaUMaUNaUOaUPaUQaURaUSaUTaTfaUUaUVaUWaUXaUYaUZaVaaVbaTeaGraIgaVcaVcaRLaRMaVdaVdaVeaIgaIgaVfaIgaGGaVgaVhaViaViaViaVjaVkaGGaGGaGGaVlaVmaVnaVoaVpaVqaafaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQcmVaVrclfaDPaVsaVsaVtaVsaVsaVsaVDaVsaVsaVtaVsaVsaYEaWYaVuaVvaKdaKdaKdaKdaKdaVwaVxaVyaVzaIAaTQaTQaVAaTSaVBaTUaTUaTUaTUaTUaTYaVCaTUaTUaTUaUdaUeclraVEaVFaUeaUiaVGaVHaVIaVJaVKaUmaVLaVMaVNaVOaVPaVQaMkaSzaKOaUoaaaaaaaaaaaaaUpaUpaUpaUpaVRaVSaVTaVUaVVaVWaVXaVYaVZaWaaWbaUpaUpaUpaUpaaaaaaaaaaaaaUAaSNaRqaRpaWcaSSaWdaWeaWfaSSaWgaWhaWiaWjaWkaWlaWmaWnaQbaWoaWpaWqaWraWsaWtaWtaWuaWvaWwaWxaWyaWzaWAaWBaWCaWDaWEaTeaGraIgaThaONaRLaRMaONaONaONaWFaWGaONaWHaGGaWIaWJaToaToaToaWKaWLaWLaWMaWNaWOaWPaWQaVoaWRaWSaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTGaGgaTHaGiaBIaBIaBIaWVaWWaWWaWWaWWaWWaWWaWWaWXaBIaBLcpSaWZaIAaXaaXbaXbaXbaXcaXdaIAaIAaIAaIAaTQaXeaXfaTSaXgaTUaTUaXhaXiaXjaXkaXhaTUaTUaTUaXlaUeaXmaXnaXoaUeaUiaVGaXpaXqaXraXsaUmaXtaVPaXuaXvaXwaXxaMkaSzaKOaMmaSCaMbaXyaUpaUpaXzaXAaXBaXCaXDaXDaXEaXFaXGaXEaXFaXDaXDaXHaXIaXJaXKaUpaUpaXyaJlaXLaXMaSNaRqaRpaJlaXNaWdaXOaWfaSSaXPaXQaSSaXRaXSaWfaSSaXTaOtaXUaXVaUQaXWaXXaXYaXZaYaaYbaYcaYdaYeaYfaYgaWBaYhaWDaYiaTeaGraIgaYjaYjaRLaRMaYkaONaONaYlaONaYmaYnaGGaIoaYoaYpaToaYqaYpaYraYsaGGaYtaVoaYuaVoaYvaYwaYxaYyaYzaYAaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaYVaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaafaYCaYDcpKaYFaYGaYHaYHaYIaYJaYKaYLaYMaYNaYOaYPaYQaYRaYSaTSaYTaTUaTUaXhaXjaYUbbTaXhaTUaTUaYWaUdaUeaUeaUeaUeaUeaUiaVGaVGaYXaVGaVGaUmaYYaXvaYZaXvaXvaXxaMkaSzaKOaNSaNSaZaaZbaZcaUpaZdaZeaZfaZgaZfaZfaZfaZfaZhaZfaZfaZfaZfaZfaZfaZiaZjaUpaZkaZbaZlaZmaZnaSNaRqaRpaWcaSSaSSaSSaSSaSSaXPaZoaSSaXRaZpaWfaSSaXTaOtaZqaXVaUQaZraZsaZtaZuaYaaZvaZwaYdaYeaYfaYgaWBaYhaZxaZyaZzaZAaZzaZzaZzaZBaZCaZDaZEaOOaZFaZGaZHaZIaGGaZJaZKaZLaToaZMaZLaIoaIoaGGaYtaVoaYuaVoaZNaZOaZPaZQaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaZSaZTaZUbjnaZWaZXaZYaZZbaababbacbadbaebafaYObagbahbaibajaTSbakbalbambanbaobapbaqbarbarbarbasbataTSbaubavbawbaxbaybazbaAbaBbajbaCaUmbaDbaEbaFbaGbaHbaIaMkbaJbaKaMkbaLbaMbaNbaObaPbaQbaRbaQbaSbaTbaUbaVbaWbaXbaYbaZbbabbbbbcbaQbbdbbebbfbbgbbhbbibbjbbkbblbbmbbnaJlaUDaWdbboaWfaSSbbpbbqbbrbbsaXOaWfaSSaXTbbtaULaXVbbubbvbbwaUQaUQaYabbxbbybbzbbAbbBaYgaWBbbCaWDbbDaZzbbEbbFbbFbbGbbHbbIaRLaRLaRLaRLaRLaRLaRLaGGbbJaYoaYpaToaYqaYpaIobbKaGGbbLaVoaYuaVoaZNbbMbbNbbOaafbbPaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbbQbbRbbScqObbUaZXbaabaabaabaabaabbVbaabbWaYObbXbbYbaibbZbbZbbZbbZbcabbZbcbaTUbccbcdbcebcebcfbcgaTSaXebchbcibcjbckbclbcmbcnbcobcobcpbcpbcpbcpbcpbcqaMbbcrbcsbctbcubcvbcwbcxbcyaUpbczbcAbcBbcCaUpaUpaUpaUpaUpbcDaUpaUpaUpbcEbcFbcGbczaUpbcybcxbcHbcIbcJbcKbcLaRpaWcaSSaSSaSSaSSaSSaGpbcMaSSbcNaSSbcObcObcObcObcPbcQbcRbcSaUQaUQaUQbcTbcUaTebcVbcWbcXaYgaWBaYhaWDbcYaZzbcZbdabdbbdcbddbdebddbddbddbddbddbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdraVoaYubdsaZNaVobdtbbOaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbdubdvaZUbdwbdxaZXaYHbdybaababbdzbbVbaabdAaYObdBbdCbaibbZbdDbdEbdFbdGbbZbdHbdIbdJaTSbdKbdLbdMbdNaTSaXebdObdPbdPbdQbdPbdPbdPbdPbdRbdSbdSbdSbdTbdSbdUaMbbdVbdWbdXaJeaJeaJebdYbdYbdYbdZbeabdZbdYbebbebbebbebbebbecbebbebbebbedbedbeebedaUpaUpaUpaJiaJiaJibcKbcLaRpaJlbefbegaDmbehaSSbeibcMbejbekbelbcObcObembenaZzaZzaZzbeobepbepbepaZzaZzaZzbeqberbesbetaWBaYhaYhbeuaZzbevbewbexaZzbeybezbeAaZEbeBbeCbeDbeEaONaGGaIobeFbeGbeHbeFbeIaIoaIoaGGbeJaVoaYuaVoaZNbeKbeLbbOaafbeMaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQaNXaLmaKMaQAaSgaSeaSiaShaSjaSiaTzaTyaTBaTAaTEaTCaTAaTFcozaTIaTJaTKaTLaTLaTLaTMaTLaTNaTOaIAaTPaTQaTRaTSaTTaTUaTVaTWaTXaTUaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUeaUiaLKaLKaUjaLKaLKaLKaLKaUkaUlaLKaUmaMbaUnaSzaKOaUoaaaaaaaaaaaaaaaaaaaaaaUpaUqaUraUsaUtaUvaUuaUxaUwaUzaUyaVUaUpaaaaaaaaaaaaaaaaaaaaaaUAaSNaRqaUBaUCaUDaUEaUFaUFaUFaUFaUGaUHaUIaUFaUFaUFaUJaUKaULaUMaUNaUOaUPaUQaURaUSaUTaTfaUUaUVaUWaUXaUYaUZaVaaVbaTeaGraIgaVcaVcaRLaRMaVdaVdaVeaIgaIgaVfaIgaGGaVgaVhaViaViaViaVjaVkaGGaGGaGGaVlaVmaVnaVoaVpaVqaafaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaKQcmVaVrclfaDPaVsaVsaVtaVsaVsaVsaVDaVsaVsaVtaVsaVsaYEaWYaVuaVvaKdaKdaKdaKdaKdaVwaVxaVyaVzaIAaTQaTQaVAaTSaVBaTUaTUaTUaTUaTUaTYaVCaTUaTUaTUaUdaUeclraVEaVFaUeaUiaVGaVHaKeaKcaVKaUmaVLaVMaVNaVOaVPaVQaMkaSzaKOaUoaaaaaaaaaaaaaUpaUpaUpaUpaVRaVSaVTaXEaVVaVWaVXaXFaVZaWaaWbaUpaUpaUpaUpaaaaaaaaaaaaaUAaSNaRqaRpaWcaSSaWdaWeaWfaSSaWgaWhaWiaWjaWkaWlaWmaWnaQbaWoaWpaWqaWraWsaWtaWtaWuaWvaWwaWxaWyaWzaWAaWBaWCaWDaWEaTeaGraIgaThaONaRLaRMaONaONaONaWFaWGaONaWHaGGaWIaWJaToaToaToaWKaWLaWLaWMaWNaWOaWPaWQaVoaWRaWSaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTGaGgaTHaGiaBIaBIaBIaWVaWWaWWaWWaWWaWWaWWaWWaWXaBIaBLcpSaWZaIAaXaaXbaXbaXbaXcaXdaIAaIAaIAaIAaTQaXeaXfaTSaXgaTUaTUaXhaXiaXjaXkaXhaTUaTUaTUaXlaUeaXmaXnaXoaUeaUiaVGaXpaKfaXraXsaUmaXtaVPaXuaXvaXwaXxaMkaSzaKOaMmaSCaMbaXyaUpaUpaVYaXAaXzaXCaXDaXDaXEaXFaXGaXEaXFaXDaXDaXHaXIaXJaXBaUpaUpaXyaJlaXLaXMaSNaRqaRpaJlaXNaWdaXOaWfaSSaXPaXQaSSaXRaXSaWfaSSaXTaOtaXUaXVaUQaXWaXXaXYaXZaYaaYbaYcaYdaYeaYfaYgaWBaYhaWDaYiaTeaGraIgaYjaYjaRLaRMaYkaONaONaYlaONaYmaYnaGGaIoaYoaYpaToaYqaYpaYraYsaGGaYtaVoaYuaVoaYvaYwaYxaYyaYzaYAaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaYVaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaafaYCaYDcpKaYFaYGaYHaYHaYIaYJaYKaYLaYMaYNaYOaYPaYQaYRaYSaTSaYTaTUaTUaXhaXjaYUbbTaXhaTUaTUaYWaUdaUeaUeaUeaUeaUeaUiaVGaVGaVGaVGaVGaUmaYYaXvaYZaXvaXvaXxaMkaSzaKOaNSaNSaZaaZbaZcaUpaZdaZeaZfaZgaZfaZfaZfaZfaZhaZfaZfaZfaZfaZfaZfaZiaZjaUpaZkaZbaZlaZmaZnaSNaRqaRpaWcaSSaSSaSSaSSaSSaXPaZoaSSaXRaZpaWfaSSaXTaOtaZqaXVaUQaZraZsaZtaZuaYaaZvaZwaYdaYeaYfaYgaWBaYhaZxaZyaZzaZAaZzaZzaZzaZBaZCaZDaZEaOOaZFaZGaZHaZIaGGaZJaZKaZLaToaZMaZLaIoaIoaGGaYtaVoaYuaVoaZNaZOaZPaZQaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaZSaZTaZUbjnaZWaZXaZYaZZbaababbacbadbaebafaYObagbahbaibajaTSbakbalbambanbaobapbaqbarbarbarbasbataTSbaubavbawbaxaKgbajbnZaKhbajbaCaUmbaDbaEbaFbaGbaHbaIaMkbaJbaKaMkbaLbaMbaNbaObaPbaQbaRbaQbaSbaTbaUbaVbaWbaXbaYbaZbbabbbbbcbaQbbdbbebbfbbgbbhbbibbjbbkbblbbmbbnaJlaUDaWdbboaWfaSSbbpbbqbbrbbsaXOaWfaSSaXTbbtaULaXVbbubbvbbwaUQaUQaYabbxbbybbzbbAbbBaYgaWBbbCaWDbbDaZzbbEbbFbbFbbGbbHbbIaRLaRLaRLaRLaRLaRLaRLaGGbbJaYoaYpaToaYqaYpaIobbKaGGbbLaVoaYuaVoaZNbbMbbNbbOaafbbPaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbbQbbRbbScqObbUaZXbaabaabaabaabaabbVbaabbWaYObbXbbYbaibbZbbZbbZbbZbcabbZbcbaTUbccbcdbcebcebcfbcgaTSaXebchbcibcjaKiaKjblcaKkbcobcobcpbcpbcpbcpbcpbcqaMbbcrbcsbctbcubcvbcwbcxbcyaUpbczbcAbcBbaBaUpaUpaUpaUpaUpbcDaUpaUpaUpbcCbcFbcGbczaUpbcybcxbcHbcIbcJbcKbcLaRpaWcaSSaSSaSSaSSaSSaGpbcMaSSbcNaSSbcObcObcObcObcPbcQbcRbcSaUQaUQaUQbcTbcUaTebcVbcWbcXaYgaWBaYhaWDbcYaZzbcZbdabdbbdcbddbdebddbddbddbddbddbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdraVoaYubdsaZNaVobdtbbOaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbdubdvaZUbdwbdxaZXaYHbdybaababbdzbbVbaabdAaYObdBbdCbaibbZbdDbdEbdFbdGbbZbdHbdIbdJaTSbdKbdLbdMbdNaTSaXebdObdPbdPaKlbdPbdPbdPbdPbdRbdSbdSbdSbdTbdSbdUaMbbdVbdWbdXaJeaJeaJebdYbdYbdYbdZbeabdZbdYbebbebbebbebbebbecbebbebbebbedbedbeebedaUpaUpaUpaJiaJiaJibcKbcLaRpaJlbefbegaDmbehaSSbeibcMbejbekbelbcObcObembenaZzaZzaZzbeobepbepbepaZzaZzaZzbeqberbesbetaWBaYhaYhbeuaZzbevbewbexaZzbeybezbeAaZEbeBbeCbeDbeEaONaGGaIobeFbeGbeHbeFbeIaIoaIoaGGbeJaVoaYuaVoaZNbeKbeLbbOaafbeMaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbeNbeObePbeQbeRbeSaYHbeTbeUaYHbdzbbVbeVbeWaYObeXbeYbaibbZbbZbbZbeZbfabbZbfbbdIbfcaTSbdKbdLbdMbfdaTSaXebdObdPbfebffbfgbfgbfhbdPbfibfjbfkbflbfmbfmbfmaMbaMkbcsbctaJebfnbfobfpbfqbfrbfsbftbfubdYbebbfvbfwbfxbfybfzbfAbfBbebbedbfCbfDbfEbfFbfGbfHbfIbfJaJibfKbfLbfMaJlaZzaZzaZzaZzbfNbfObfPbfQaZzaZzbfRaZzaZzaZzaZzbfSbfTbfUbfVbfVbfVbfWbfXaZzbfYbfZbgabgbbgcbgcbgcbgdaZzbevbewbgeaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbgfbggbghbgibgjbgfbggaZzaRZbgkaVoaYuaVoaZNaZObglbgmaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObguaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbdKbdLbdMbfdaTSaXebdObdPbgBbgCbgDbfgbgDbdPbfibgEbgFbgGbgHbgIbgJaMbbgKbgLbctbgMbgNbgObgPbgQbgQbgRbgSbgTbdYbebbgUbgVbgWbgXbfvbgYbgZbebbedbhabhbbhcbhdbhebhfbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhCbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIbhJbhKbhLbhMbhNaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbhRbhSbhTbhTbhTbhTbhTbhUbhVbhWbhXbhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbdKbibbicbidaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbilaMbbimaSzbctbinbiobipbiqbirbisbitbiubivbdYbebbiwbixbiybiybiybgYbizbebbedbiAbiBbiCbiDbiEbiFbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjqbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbjubjvbjuaTSaTSaTSaTSbjwaTSbjxbdObdPbjybjzbgDbjAbjBbdPbfibfmbjCbgGbgGbgGbjDaMbbjEaSzbctbjFbjGbgObjHbjIbjJbjKbjLbjMbdYbjNbjObjPbiybjQbiybgVbjRbjSbedbjTbjUbjVbjWbjWbjWbjXbjYaJibjZbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkkbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktbkubkvbewbkpbkwbkxbkybhFbewbewbkzbewbewbkAbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGbkHbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQblRblSblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzblUaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmdaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFaJebmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMbmNbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubnvbnwblOblObnxblObnybnyblObnzbnAbnBblObnCbnDbnCblOblXblYbmbblObnEbnFbnEblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaabnNbnObnPbeQbnQbgrbnRbjpbnSbnTbnUbnVbjpbnWbnXbnYbnZbmlbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbofbdPbdPbdPbogbdPbohboibojbgGbgGbgGbokblpblqaSzbolaJebombonboobopboqborbosbotaafbebboubovbowboxboybozboAbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpboIboJboKboLboMboNboOboPboQboRboRboSboTboUboUboVboWboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibnvbnwbpjbpkbplbpmbpnbpobppbpqbprbpqbpsbptbpubpvblOaZzbpwbpxblObpybpzbpAbpBbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqobqpbqqbqrbqrbqsbqtbqubqvbqwbqxbebbebbebbebcfTbebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJbqKbqLbqMbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbnvbnwbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbrubrvbrwbrxbrxbrybrzbrAbgrbrBbrCbpPbrDbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbrIbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbosbotbshbsibsjbskbslbsmbsnbskbsobsiaafbedbspbsqbspbedbedbedbsraJibssaRqaRpboIboJboKbstbsubsvbqLbswbqNbsxbsybszbsAbsBbsCbqObsDbnibsEbsFbsGbsHbnnbsIbqVbpebpfbpgbphbpfbpibnvbnwbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbthbtibtibtibtjbtibtibgrbtkbtlbtmbpPbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubtvbtwbtxbtybtzbtAbfmbfmbtBbfmbfmbtCbtDbtEbtFbtGbtHbmGbmGbmGbmGbmGbtIbmGbshbtJbtKbtLbtMbtNbtMbtLbtObtPaafbspbtQbtRbtSbtTbtUbspbtVaJlbtWbbmbtXaJibtYbmUbtZbuabubbucbudbuebufbugbuhbuibujbukbulbumbnibnnbunbuobupbnnbuqburbusbutbuubuubuvbuwbnvbnwbpjbuxbplbplbsMbuybuzbuAbuBbuCbuDbuEbuFbuGbrhbuHbuIbuJbnIbuKbuLbuMbtbbpCbuNbnIbpEbpFbuObnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuTbeObuUbuUbuVbpHbuWbgnbgobuXbuWbgrbuYbuZbvabvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibvjbvkbvlbvmbvnbvobfmbvpbgGbvqbvrbvsbvtbvubvvbtGbtGbvwbvxbvybvzbvAbvBbvwbvCbvDbvEbvFbvGbvHbvIbvJbvKbvLbvMbvNbvObvPbvQbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbvYbvZbucbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwkbwkbwkbwkbwnbwkbwkbwkbnvbnvbnvbnwbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbwubwvbwwbwxbwybnIbwzbwAbwBbwCbpCbwDbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbwGbwHbwIbwJbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbwYbwZbxabgGbgGbxbbxcbvtbvubxdbxebxfbxgbxhbxibxjbxkbxlbvwaafbxmbxnbskbxobxpbxobskbxqbxraafbspbxsbxtbxubedbxvbspbtVaJlbxwbcLaRpaJibxxbxybxzbxAbxBbxCbxDbxEbxCbxFbxGbxHbxFbwkbxIbxJbwkbwkbxKbxLbxMbxNbxObxPbxQbxRbxSbwkbxTbxUbxVbxWbpjbxXbqZbqZbxYbxZbppbyabwsbwsbwsbsSbwtbybbwwbycbydbyebwwbyfbygbyhbyibpCbyjbnIbrqbykbnMaaaaaaaaaaaaaaaaafbylbymbwIbwJbwIbynbuRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbyobypbyobyqbyrbwQbrJbrJbrJbysbrJbwTbrKbytbdPbdPbyubgGbrNbwXbyvbywbyxbyybyybyzbyAbyBbyCbyDbvsbyEbyFbyGbxkbyHbyIbyJbvwaafbxrbxrbyKbtLbyLbskbyMbxrbxraafbyNbyNbyNbyNbyNbyNbyNbyOaJibyPblMblNaJibyQbyRbyRbySbyTbxCbyUbyVbyWbyXbyYbyZbzabwmbzbbzcbzdbzebzfbzgbzgbzhbzibzgbzjbzkbzlbzmbznbzobzpbzqbzrbzsbztbzubzvbzwbppbzxbpqbpqbzybsSbwtbzzbzAbzBbzCbzDbzAbzEbzFbzGbzHbzIbwwbwwbzJbnMbnMbzKbzLbzLbzLbzMbzNbwGbwJbwIbwJbwJbzObwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaacaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbzPbzQbzPbzRbrJbwQbrJbzSbzSbzSbzSbwTbrKbzTbzUbdPbzVbgGbrNbwXbzWbzXbzYbgGblnbgGbzZbAabAbbAcbAdbyEbAebAfbxkbxkbxkbAgbvwbAhbAhbAhbxrbAibxpbAibxrbAjbAjbAjbyNbAkbAlbAmbAnbAobApbAqaJibAraRqaRpaJibAsbAtbAubAvbAwbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbAJbAKbAIbALbAMbANbAObAPbAQbARbwkbASbATbAUbAVbpjbAWbAXbAYbAZbAZbppbBabBbbBcbppbBdbBebBfbBgbBhbBibBjbBkbBlbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbBwbBwbBxbBybBzbuQbuRbBAbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbBEbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbBGbgGbBHbBIbgGbBJbgFbgGbgGbBKbvsbvtbAbbAcbAdbyEbvwbBLbBMbBNbBMbBObvwbBPbBQbBRbAhbxrbBSbxrbAjbBTbBUbBVbyNbBWbBXbBYbBZbCabCabCbbCcbAraRqaRpaJibCdbCebCebySbCfbxCbCgbChbxCbCibCjbCjbCkbwkbClbCmbwkbwkbwkbwkbwkbwkbCnbwkbwkbwmbCobwkbCpbCpbCpbCqbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbCrbCsbCtbBhbCubCvbCwbCxbCxbCxbCybCzbCAbCBbCCbCDbCEbCFbCGbCHbCGbCIbCJbzKbzLbzMbCKbzNbCLaaaaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbzPbzQbzPbCMbCNbCObrJbrJbrJbCNbrJbwTbrKbzTbCPbdPbCQbgGbrNbwXbgGbqlbCRbgGbgGbCSbxcbvtbAbbCTbxcbCUbvwbCVbCWbCXbCYbxlbvwbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbyNbDkbDlbDlbDmbDnbDobDpaJibDqbDrbDsaJibDtbDubDvbDwbDxbDybDzbDAbyWbDBbDCbCjbDDbwmbDEbDFbwmbDGbDHbDIbDJbDKbDLbDMbCpbDNbDObDPbDQbDRbCpbDSbDTbDUbDVbDWbDXbDXbDYbDZbEabEbbEcbEdbEebEfbEabEgbEhbCvbEibEjbEkbwwbwwbwwbwwbwwbElbEmbEnbzKbzMbCJbEobEpbEqbErbEsbEtbEubEvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbEwbExbEwbEybEzbEAbEAbEAbEAbEAbEBbECbEDbzTbEEbdPbEFbEGbEHbEIbEJbtzbEKbELbEMbfmbtCbENbAbbEObEPbyEbvwbEQbERbESbBMbETbvwbEUbEVbEWbAhbEXbEYbEZbAjbFabFbbFcbyNbFdbFebFfbFgbDnbDobFhaJibxwaRqaRpbFibFjbFkbFlbFmbFnbFobFpbFqbxCbxFbxFbFrbxFbwkbFsbFtbFubFvbFwbFxbDJbFybDLbFzbFAbFBbDObFCbFDbFEbFFbFGbFHbFIbDVbFJbDXbDXbFKbFLbFMbFLbFLbFNbFObFPbFQbFRbFSbCvbFTbFUbFVbFWbFXbFYbFZbGabGbbGcbGdaafaafbCJbGebGfbGgbGhbGibGjbGkbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbGubGtbGvbGwbGxbGybGzbtCbvtbAbbGAbGBbtCbtGbtGbtGbtGbtGbGCbtGbtGbtGbtGbtGbtGbGDbtGbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJiaJiaJibxwaRqaRpbFibGEbFkbGFbGGbGHbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbGWbGXbGYbGZbHabHbbHcbHdbHebHfbCpbHgbHhbwwbwwbwwbwwbwwbHibwwbwwbwwbzAbHjbzAbzAbHkbBhbCubCvbFTbHlbHmbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbCJbBybCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbHAbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbHMbHLbHNbHObHPbHQbHRbAabHSbAabHTbAabzZbHUbHVbHWbHXbHYbHZbxwaRqbDsaJlbDtbIabIabIabDtbxCbIbbIcbIdbIebIfbIgbIhbIibIjbIkbwmbIlbImbInbDJbDLbIobIpbIqbIrbFDbIsbItbIubCpbIvbIwbIxbIybIzbIAbIBbICbIDbIEbIFbIGbIHbIIbIJbzAbIKbCubCvbILbIMbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbCJaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbITbIUbIVbIWbIXbIYbIZbJabJbbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebJebJkbJlbJmbJnbJobJebJebJebJpbJgbJhbJqbJrbJsbJtbJubJtbJvbJwbvUaJlbJxbFlbFnbFnbJybJzbFpbJAbJBbJCbxFbJDbJEbJFbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbJVbJWbJXbJYbIFbJZbKabKbbKbbzAbKcbKdbKebKfbKgbKhbKibKjbKjbKkbGabGbbKlbEnbKmbKnbKobEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQblRblSblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzaVIaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmdaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFbmGbmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMbmNbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubYfaVJblOblObnxblObnybnyblObnzbnAbnBblObnCbnDbnCblOblXblYbmbblObnEbnFbnEblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaabnNbnObnPbeQbnQbgrbnRbjpbnSbnTbnUbnVbjpbnWbnXbnYbnZbmlbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbofbdPbdPbdPbogbdPbohboibojbgGbgGbgGbokblpblqaSzbolbmGbombonboobcEbvGbotbosbotaafbebboubovbowboxboybozboAbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpboIboJboKboLboMboNboOboPboQboRboRboSboTboUboUboVboWboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbpmbpnbpobppbpqbprbpqbpsbptbpubpvblOaZzbpwbpxblObpybpzbpAbpBbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbopbxsbotaafbebbebbebbebcfTbebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJbqKbqLbqMbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbrubrvbrwbrxbrxbrybrzbrAbgrbrBbrCbpPbrDbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbrIbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZaHBbsbbqvbsabsebscbotbosbotaafbsibsjbskbslbsmbsnbskbsobsiaafbedbspbsqbspbedbedbedbsraJibssaRqaRpboIboJboKbstbsubsvbqLbswbqNbsxbsybszbsAbsBbsCbqObsDbnibsEbsFbsGbsHbnnbsIbqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbthbtibtibtibtjbtibtibgrbtkbtlbtmbpPbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubtvbtwbtxbtybtzbtAbfmbfmbtBbfmbfmbtCbtDbtEbtFbmGbtHbmGbmGbmGbmGbmGbtIbmGaafbtJbtKbtLbtMbtNbtMbtLbtObtPaafbspbtQbtRbtSbtTbtUbspbtVaJlbtWbbmbtXaJibtYbmUbtZbuabubbucbudbuebufbugbuhbuibujbukbulbumbnibnnbunbuobupbnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbuxbplbplbsMbuybuzbuAbuBbuCbuDbuEbuFbuGbrhbuHbuIbuJbnIbuKbuLbuMbtbbpCbuNbnIbpEbpFbuObnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuTbeObuUbuUbuVbpHbuWbgnbgobuXbuWbgrbuYbuZbvabvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibvjbvkbvlbvmbvnbvobfmbvpbgGbvqbvrbvsbvtbvubvvbmGbmGbmGbvxbvybvzbvAbvBbvwaafbvDbvIbvHbvJbvKbvMbvNbvObvLaafbspbvPbvQbxnbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbvYbvZbucbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwkbwkbwkbwkbwnbwkbwkaXKaXKaXKaXKaVJbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbwubwvbwwbwxbwybnIbwzbwAbwBbwCbpCbwDbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbwGbwHbwIbwJbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbwYbwZbxabgGbgGbxbbxcbvtbvubxdbxebxfbxgbxhbxibxjbxkbxlbvwaafbxmbqtbskbxobxpbxobskbqxbxraafbspbqwbxtbxubedbxvbspbtVaJlbxwbcLaRpaJibxxbxybxzbxAbxBbxCbxDbxEbxCbxFbxGbxHbxFbwkbxIbxJbwkbwkbxKbxLbxMbxNbxObxPbxQbxRbxSaXKbayaYXaXKaVJbpjbxXbqZbqZbxYbxZbppbyabwsbwsbwsbsSbwtbybbwwbycbydbyebwwbyfbygbyhbyibpCbyjbnIbrqbykbnMaaaaaaaaaaaaaaaaafbylbymbwIbwJbwIbynbuRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbyobypbyobyqbyrbwQbrJbrJbrJbysbrJbwTbrKbytbdPbdPbyubgGbrNbwXbyvbywbyxbyybyybyzbyAbyBbyCbyDbvsbyEbyFbyGbxkbyHbyIbyJbvwaafbxrbxrbyKbtLbyLbskbyMbxrbxraafbyNbyNbyNbyNbyNbyNbyNbyOaJibyPblMblNaJibyQbyRbyRbySbyTbxCbyUbyVbyWbyXbyYbyZbzabwmbzbbzcbzdbzebzfbzgbzgbzhbzibzgbzjbzkbckbaAbcmbclbdQbcnbzrbzsbztbzubzvbzwbppbzxbpqbpqbzybsSbwtbzzbzAbzBbzCbzDbzAbzEbzFbzGbzHbzIbwwbwwbzJbnMbnMbzKbzLbzLbzLbzMbzNbwGbwJbwIbwJbwJbzObwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaacaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbzPbzQbzPbzRbrJbwQbrJbzSbzSbzSbzSbwTbrKbzTbzUbdPbzVbgGbrNbwXbzWbzXbzYbgGblnbgGbzZbAabAbbAcbAdbyEbAebAfbxkbxkbxkbAgbvwbAhbAhbAhbxrbAibxpbAibxrbAjbAjbAjbyNbAkbAlbAmbAnbAobApbAqaJibAraRqaRpaJibAsbAtbAubAvbAwbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbAJbAKbAIbALbAMbANbAObnvblUbsdbnwbsgbsfbaAbPObpjbAWbAXbAYbAZbAZbppbBabBbbBcbppbBdbBebBfbBgbBhbBibBjbBkbBlbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbBwbBwbBxbBybBzbuQbuRbBAbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbBEbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbBGbgGbBHbBIbgGbBJbgFbgGbgGbBKbvsbvtbAbbAcbAdbyEbvwbBLbBMbBNbBMbBObvwbBPbBQbBRbAhbxrbBSbxrbAjbBTbBUbBVbyNbBWbBXbBYbBZbCabCabCbbCcbAraRqaRpaJibCdbCebCebySbCfbxCbCgbChbxCbCibCjbCjbCkbwkbClbCmbwkbwkbwkbwkbwkbwkbCnbwkbwkbwmbCoaXKaXKaXKaXKbxTbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbCrbCsbCtbBhbCubCvbCwbCxbCxbCxbCybCzbCAbCBbCCbCDbCEbCFbCGbCHbCGbCIbCJbzKbzLbzMbCKbzNbCLaaaaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbzPbzQbzPbCMbCNbCObrJbrJbrJbCNbrJbwTbrKbzTbCPbdPbCQbgGbrNbwXbgGbqlbCRbgGbgGbCSbxcbvtbAbbCTbxcbCUbvwbCVbCWbCXbCYbxlbvwbCZbDabDbbDcbDdbvFbvEbDgbDhbDibDjbyNbDkbDlbDlbDmbDnbDobDpaJibDqbDrbDsaJibDtbDubDvbDwbDxbDybDzbDAbyWbDBbDCbCjbDDbwmbDEbDFbwmbDGbDHbDIbDJbDKbDLbDMbCpbDNbDObDPbDQbDRbCpbDSbDTbDUbDVbDWbDXbDXbDYbDZbEabEbbEcbEdbEebEfbEabEgbEhbCvbEibEjbEkbwwbwwbwwbwwbwwbElbEmbEnbzKbzMbCJbEobEpbEqbErbEsbEtbEubEvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbEwbExbEwbEybEzbEAbEAbEAbEAbEAbEBbECbEDbzTbEEbdPbEFbEGbEHbEIbEJbtzbEKbELbEMbfmbtCbENbAbbEObEPbyEbvwbEQbERbESbBMbETbvwbEUbEVbEWbAhbEXbvCbEYbAjbFabFbbFcbyNbFdbFebFfbFgbDnbDobFhaJibxwaRqaRpbFibFjbFkbFlbFmbFnbFobFpbFqbxCbxFbxFbFrbxFbwkbFsbFtbFubFvbFwbFxbDJbFybDLbFzbFAbFBbDObFCbFDbFEbFFbFGbFHbFIbDVbFJbDXbDXbFKbFLbFMbFLbFLbFNbFObFPbFQbFRbFSbCvbFTbFUbFVbFWbFXbFYbFZbGabGbbGcbGdaafaafbCJbGebGfbGgbGhbGibGjbGkbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbGubGtbGvbGwbGxbGybGzbtCbvtbAbbGAbGBbtCbtGbtGbtGbtGbtGbGCbtGbtGbtGbtGbtGbtGbshbtGbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJiaJiaJibxwaRqaRpbFibGEbFkbGFbGGbGHbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbGWbGXbGYbGZbHabHbbHcbHdbHebHfbCpbHgbHhbwwbwwbwwbwwbwwbHibwwbwwbwwbzAbHjbzAbzAbHkbBhbCubCvbFTbHlbHmbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbCJbBybCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbHAbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbHMbHLbHNbHObqybHQbHRbAabHSbAabHTbAabzZbHUbHVbHWbHXbHYbHZbxwaRqbDsaJlbDtbIabIabIabDtbxCbIbbIcbIdbIebIfbIgbIhbIibIjbIkbwmbIlbImbInbDJbDLbIobIpbIqbIrbFDbIsbItbIubCpbIvbIwbIxbIybIzbIAbIBbICbIDbIEbIFbIGbIHbIIbIJbzAbIKbCubCvbILbIMbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbCJaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbITbIUbIVbIWbIXbIYbIZbJabJbbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebJebJkbJlbqsbJnbJobJebJebJebJpbJgbJhbJqbJrbJsbJtbJubJtbJvbJwbvUaJlbJxbFlbFnbFnbJybJzbFpbJAbJBbJCbxFbJDbJEbJFbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbJVbJWbJXbJYbIFbJZbKabKbbKbbzAbKcbKdbKebKfbKgbKhbKibKjbKjbKkbGabGbbKlbEnbKmbKobKnbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabKvbKwbKxbKwbKyaaaaaaaaabGtbGtbKzbKAbIVbKAbKBbKCbHBbKDbKEbtCbKFbvtbKGbKHbAabKIbAabzZbHHbKJbAabKKbKLbKMbKNbKObAcbAabKPbKQbHLbKRbHLbHLbKSbKTbKUbKVbKWbKXbcLbKYaRpaRpaRpaJlbKZbGFbLabLbbGFbLcbLdbLebLfbLgbLhbLibLjbLkbDEbIkbLlbLmbLnbDJbDJbLobLobLobCpbLpbLqbLrbLsbLtbCpbLubLvbIxbLwbLxbLybLzbLAbLBbLCbIFbLDbLEbKbbKbbzAbBhbLFbCvbwwbLGbLHbLIbLJbLKbLLbGabLMbLNbLObLObLObLPbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLQbLRbLSbLRbKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbLWbLXbLYbLVbLZbMabMbbGtbMcbMdbMebMfbMgbMhbMibMjbMjbMkbtCbtCbtCbMlbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbMpbtCaJlaJlaJlaJlbMqaJlaKSaMpbMraJlbMsbGFbGFbMtbMubMvbMwbMxbxCbMybMzbMAbMBbwkbMCbMDbMEbMFbMGbMHbMIbMJbMKbMLbItbJObFDbFDbMMbJObCpbMNbMObMObMObMObMObMObMObMObMObMObMPbMQbMRbMRbzAbMSbMTbMUbwwbMVbMVbMVbMWbMXbMYbMVbMVbMVbMVbMVbMZbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbNdbLRbLRbNebKtbKtbLTbLTbNfbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbNhbNgbKxbNibNjbNkbNlbNmbNnbKAbNobNpbGvbNqbNrbNsbNtbGvbNubNvbNwbNxaaaaaaaaaaaabNybNzbNAbNBbNCbNDbNEbNFbNGbNHbNIbNFbNJbNKbNLbNMbNNbNObNPbNQbNRbNSbNTbNUbNUbNUbNUbDtbNVbNWbNWbNXbDtbNYbNZbOabObbMzbOcbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbMKbOobFDbFDbOpbJObJObOobCpbMNbMObOqbOrbOsbOtbOubOvbOwbOxbMObOybOzbOAbOAbzAbOBbOCbCvbzIbODbOEbOFbOGbOHbOIbOJbOKbOLbOMbMVbEnbONbEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbNhbNgbKxbNibNjbNkbNlbNmbNnbKAbNobNpbGvbNqbNrbNsbNtbGvbNubNvbNwbNxaaaaaaaaaaaabNybNzbNAbNBbNDbNCbNEbNFbNGbNHbNIbNFbNJbNKbNLbNMbNNbNObNPbNQbNRbNSbNTbNUbNUbNUbNUbDtbNVbNWbNWbNXbDtbNYbNZbOabObbMzbOcbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbMKbOobFDbFDbOpbJObJObOobCpbMNbMObOqbOrbOsbOtbOubOvbOwbOxbMObOybOzbOAbOAbzAbOBbOCbCvbzIbODbOEbOFbOGbOHbOIbOJbOKbOLbOMbMVbEnbONbEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbOQbORbKAbOSbOTbOUbKAbKAbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbPebPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbPnbPobPpbPqbPrbPsbPtbPtbNSbPubPvbPwbPxbPybDtbMsbPzbGFbGFbPAbPBbDzbPCbxCbPDbPEbPFbPGbwkbPHbPIbwkbPJbPKbPLbPMbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbPQbPRbOsbOsbOsbOsbPSbMObPTbLEbPUbPUbzAbBhbPVbPWbPXbPYbPYbPYbPYbPZbQabQabQbbQcbQdbMVbQebQfbQgbOObQhbQibQjbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNhbNhbNhbKxbQnbQobQpbQqbQrbKAbKAbQsbQtbQubQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbQBbQCbQDbPfbQEbQFbQGbQHbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbKZbQVbLabLbbGFbQWbQXbLebQYbQZbRabRbbRcbRdbDEbIkbRebPJbPLbPLbPMbRfbMKbRgbRhbRibRjbRkbRlbRmbRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubRvbRwbRxbRybRybRzbRAbRybRybRybRBbRCbRDbREbRFbRGbRHbRIbRJbRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNhbNhbNhbKxbQnbQobQpbQqbQrbKAbKAbQsbQtbQubQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbQBbQCbQDbPfbQEbQGbQFbQHbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbKZbQVbLabLbbGFbQWbQXbLebQYbQZbRabRbbRcbRdbDEbIkbRebPJbPLbPLbPMbRfbMKbRgbRhbRibRjbRkbRlbRmbRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubRvbRwbRxbRybRybRzbRAbRybRybRybRBbRCbRDbREbRFbRGbRHbRIbRJbRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbRWbRXbRYbRZbSabSbbSbbScbSdbSebSfbNFbPtbPtbPtbPtbPtbSgbPtbPtbShbSibSjbNUbPxbSkbSlbDtbJxbQVbGFbSmbSnbQWbSobJAbSpbSqbSrbSsbStbSubFsbSvbSwbSxbSybSzbSAbSBbMKbSCbSDbSEbRjbSFbSGbSHbRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbSMbSNbSObSPbSQbSRbSSbQabSTbSUbMVbSVbQfbSWbOObSXbSYbSZbTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTubTvbTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbTGbTHbTIbDtbTJbTKbTLbTMbTNbTJbTObTPbTQbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbUabUbbUcbUdbUebUfbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbUEbUFbNFbUGbUGbUGbUGbUGbUGbUGbUGbUHbUIbUJbUKbUKbUMbNUbDtbUNbUObUPbUQbURbUSbUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVjbRjbVlbVmbVlbRnbPObMObVnbVobVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbVybVzbVAbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbVLaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVMbLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVYbVZbPfbNFbWabWbbNIbNFbUGbWcbWdbWebWfbWgbWhbUGbWibWibWibWibWibTFbWjbWkbWlbWmbWnbWobWpbWqbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbWRbWSbWTbWUbWSbWSbWVbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbVybXabXbbXcbXdbXebXfbXgbXhbMVbXibVHbXjbOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNFbNFbUDbUEbXtbNFbNFbXubXvbXwbXwbXvbXxbUGbXybXzbXzbXAbWibXBbDtbDtbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbXVbXUbXWbXXbXYbXZbYabYbbYcbYdbYebYfbYgbIwbYhbYhbYibYjbYkbYlbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbVybXabYwbVBbYxbVBbYybYzbYAbMVbXjbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYRbYSbYTbYUbYVbYWbXvbYXbYYbYZbZabZbbZcbZdbZebZfbZgbWibZhbNSbZibZjbZkbZlbZlbZmbZnbZobZpbTJbTJbZqbZrbTJbTJbZsbZtbZubVibZvbZwbZxbZybZzbZybZAbZBbZCbZBbZAbZDbYfbMNbIwbZEbZFbZGbZHbZIbZJbZKbMObMObwwbwwbwwbwwbwwbZLbZMbZNbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZTbZUbZUbZUbZVbZUbZUbZWbZXbYIbZYbZZbYIcaacabcaccadcaecafcagcahcaicajcakcalcambXvbYXcancaobZacapbUGcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbZwcaJbZycaKcaLbZAcaMcaNcaObZAcaPbYfbPObIwbIwcaQcaQcaQcaQcaQcaQbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcaZcbabXjcbbbXjbXjcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbicbjcbkcblcbmcbncbocbpcbqbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbycbzbYSbYTbYUcbAcbBbXvbXvcbCcbDbXvcbEbUGcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJcbKbTJcbLcbMcbNcbOcaEcbPcbQcbRcaIbZxbZwbZxbZycbScbTbZAcbUcbVcbWbZAcbXcbYcbZccaccbcccccdcceccfccgcchcciccjcckcclccmccjccnccoccpccqccrccscctcctcctcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccAccAcbkccBccCcbnccDccEccFbYIccGccHccIccJccKccLccMccNccOccPccQccRbTyccSccTccUccVccWccXccYccZcdacdbcdccddcdecdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbZwbZxbZycdxcdybZAcdzcdAcdBbZAcdCbYfbYfcdDcdEcdFcdGcdHcdHcdIcdJcdKcdLcdLcdMcdNcdLcdOcdPcdQcdRcdOcdScdTcdUcdVcdScdScdScdScdWcdUcdVcdScdSbXjcdXcdYcdZceacebcecawFawOawOawOawOawOawOawOawOawOawOawOawOawOawOawOawOcefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezceAcaqceBcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbZwceNbZyceOcePbZAbZAbZAbZAbZAceQceRbYfcdDceSceTceUceTceVceWceXceYcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficfjcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfBcfCcfDcfEcfFcfGcfHcfHcamcfIcfIcfJcfKcbzbYSbYTbYUcfLcamcfMcfNcfOcfPcfQcfRbUGcBxcBycaqcfUcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghcgicgjbZycgkcglbZycgmbLvbVicgncgocgpcgqcgrcgscgtcdGcguceVcgvcgwcdDcdLcgxcgycgycgzcgAcgBcgCcgBcgDcgEcgFcgGcgGcgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaaaaacgScgTcgTcgTcgUcgVcejcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlchmchnbNFbUGbUGbUGbUGbUGbUGbUGcaqcaqcaqcaqcaqbTFcbIcbIchochpchqcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwchxchwbZychychzbZychAchBbVichCbVichDbYfcdDbYfchEchFchGcdHchHcjecdDcdLchIchJchJchKchLchMchNchOchPchQchRchSchTchUchVchWcgIcgIcgIchXchYcdSchZciacibcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccidciccgRciecifciecgRcigcihcigcgRaaaaaaciicgTcgTcgUcgUcijcejcikcilcemcimcinciocipciqcirbQJbQJcisbQJcbzbYScitbYUciucivciwcixciycixcizciAciBciCciDciEciFciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVciWckqbZybZybZybZychBchBbViciYbViciZbYfcdDbYfcjacjbcjbcjccjdcchcjfcdLcjgcjhcjhcjicjjcjkcjlcjmcjncjocjpcjqcgIcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccjyciccgRciecjzciecgRcigcjAcigcgRaaaaaaciicgTcgUcgUcgUcjBcjCcjDcjEcemcjFcjGcjHcjIcjJcivcjKcjLcjMcjNcbzbYScjOchmcjPcjQcjRcjScjScjScjTcjUcjVcjWcjXcjYcjZciAbTFciGckaciIckbckcckdckeckfckgckhckickjckkcklciSckmciUcknckockpclickrclsckscktcktckucktckvbVibVibVibVibYfckwbYfckxckycchcchcchcchcjfcdLckCckDckDckDckEcdOckFcdOckGckHckIckJckJckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRckSckTckUcgRckXckWckVcgRclackZckYcgRaaaaafciiclbcgTcgUcgUcgUcejclccldcleclecnIclecleclecleclgbQJclhcltcbzcljclkcllclmclncloclpclpclpclqciAceCcnacIIcluclvclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfclUcktcktcktcktcktclVclWclXclYcktcktcktcktclZcdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcmscmtcmucgRcCpcmtcmwcgRcCpcmtcmwcgRaaaaafcmzcgTcgTcgUcgUcmAcejcmBcmCcmDcmEcmFcmGcmHcmHcmIcmJcmHcmKcmLcbzcmMcmNcmOcmPcivcmQcmQcmRcmScmTciAcmUcIHcIIcIGcmYcmZcqgciGcnbciIcnccndcneciGcnfciNcngcfYcnhcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfbYfbYfbYfbYfcdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcnEcnFclecnGcnHcleclecqUcleclecnJcivclecnKcnLcnMcnNcnKclecnOcnOcnOcnPcnQcnOcnRcnRcnRcnRcnRcnRcnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcoicojcokcolcomconcoocopcoqcoraaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbTGbTHbTIbDtbTJbTKbTLbTMbTNbTJbTObTPbTQbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbUabUbbUcbUdbUebUfbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbUEbUFbNFbUGbUGbUGbUGbUGbUGbUGbUGbUHbUIbUJbUKbUKbUMbNUbDtbUNbUObUPbUQbURbUSbUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVjbRjbVlbVmbVlbRnbPObMObVnbxUbVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbVybVzbVAbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbVLaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVMbLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbUGbWcbWdbWebWfbWgbWhbUGbWibWibWibWibWibTFbWjbWkbWlbWmbWnbWobWpbWqbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbWMbxVbMObxWbzmbzlbWSbWTbWUbWSbWSbWVbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbVybXabXbbXcbXdbXebXfbXgbXhbMVbXibVHbXjbOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNFbNFbUDbUEbXtbNFbNFbXubXvbXwbXwbXvbXxbUGbXybXzbXzbXAbWibXBbDtbDtbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbASbAVbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbVybXabYwbVBbYxbVBbYybYzbYAbMVbXjbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYRbYSbYTbYUbYVbYWbXvbYXbYYbYZbZabZbbZcbZdbZebZfbZgbWibZhbNSbZibZjbZkbZlbZlbZmbZnbZobZpbTJbTJbZqbZrbTJbTJbZsbZtbZubVibZvbWQbZxbZybZzbZybZAbZBbZCbZBbZAbWRbYfbMNbIwbZEbXWbXVbXVbZIbZJbZKbMObMObwwbwwbwwbwwbwwbZLbZMbZNbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZTbZUbZUbZUbZVbZUbZUbZWbZXbYIbZYbZZbYIcaacabcaccadcaecafcagcahcaicajcakcalcambXvbYXcancaobZacapbUGcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcaJbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYbYabXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcaZcbabXjcbbbXjbXjcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbicbjcbkcblcbmcbncbocbpcbqbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbycbzbYSbYTbYUcbAcbBbXvbXvcbCcbDbXvcbEbUGcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJcbKbTJcbLcbMcbNcbOcaEcbPcbQcbRcaIbZxbWQbZxbZycbScbTbZAcbUcbVcbWbZAbXXbYfbYbbYdbYcbYibYebYjbYcchBbYkbYlcktbZDbZwbZFcktccrbZGbZHccqccrccscctcctcctcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccAccAcbkccBccCcbnccDccEccFbYIccGccHccIccJccKccLccMccNccOccPccQccRbTyccSccTccUccVccWccXccYccZcdacdbcdccddaJEcdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQbZxbZycdxcdybZAcdzcdAcdBbZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLcdMcdNcdLcdOcdPcdQcdRcdOcdScdTcdUcdVcdScdScdScdScdWcdUcdVcdScdSbXjcdXcdYcdZceacebcecawFawOawOawOawOawOawOawOawOawOawOawOawOawOawOawOawOcefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezaJFboqaJFcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdcccbYcbYcchBccecjfcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficfjcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfBcfCcfDcfEcfFcfGcfHcfHcamcfIcfIcfJcfKcbzbYSbYTbYUcfLcamcfMcfNcfOcfPcfQcfRbUGaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghccfcgjbZycgkcglbZycgmbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLcgxcgycgycgzcgAcgBcgCcgBcgDcgEcgFcgGcgGcgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaaaaacgScgTcgTcgTcgUcgVcejcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlchmchnbNFbUGbUGbUGbUGbUGbUGbUGbEZbGDcaqbDfcaqbTFcbIcbIchochpchqcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwccnchwbZychychzbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKchLchMchNchOchPchQchRchSchTchUchVchWcgIcgIcgIchXchYcdSchZciacgtcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccidciccgRciecifciecgRcigcihcigcgRaaaaaaciicgTcgTcgUcgUcijcejcikcilcemcimcinciocipciqcirbQJbQJcisbQJcbzbYScitbYUciucivciwcixciycixcixceTceUceUciAciAciAciAbTFciGciHciIciIciJciKciLciMciXciOciPciQciRciSciSciTciUcaIcaIcaIciVcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcjhcjhcjicjjcjkcjlcjmcjncjocjpcjqcgIcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccjyciccgRciecjzciecgRcigcjAcigcgRaaaaaaciicgTcgUcgUcgUcjBcjCcjDcjEcemcjFcjGcjHchHchGcivcjKcjLcjMcjNcbzbYScjOchmcjPcjQcjRcjScjScjSbJmbHPcjScjSceCcdeceAciAbTFciGckaciIckbckcckdckeckfckgckhckickjckkcklciSckmciUcknckockpclicdFcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckCckDckDckDckEcdOckFcdOckGckHckIckJckJckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRckSckTckUcgRckXckWckVcgRclackZckYcgRaaaaafciiclbcgTcgUcgUcgUcejclccldcleclecnIclecleclecleclgbQJclhcltcbzcljclkcllclmclncgicgocgocgocgrcmScmScgpciAcgucgqclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIceSbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcmscmtcmucgRcCpcmtcmwcgRcCpcmtcmwcgRaaaaafcmzcgTcgTcgUcgUcmAcejcmBcmCcmDcmEcmFcmGcmHcmHcmIcmJcmHcmKcmLcbzcmMcmNcmOcmPcivcmQcmQcmRcmSceYceXceWceWciAcibceVcfUcqgciGcnbciIcnccndcneciGcnfciNcngcfYcnhcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcnEcnFclecnGcnHcleclecqUcleclecnJcivclecnKcnLcnMcnNcnKclecnOcnOcnOcnPcnQcnOcnRcnRcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcoicojcokcolcomconcoocopcoqcoraaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucovcowcoxcowcovcKvcoxcqWcrScKvcoAcrTcrUcoBcoCcoCcoCcoCcoCcoCcoCcoCcoDcoEcoFcoGcoHcoIcvscoKcoLcoMcoNcoOcoPcoMcoQcoRcoScnOcoTcoUcoVcoWcoXcoYcnOcoZcoZcpacpbcpbcnRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcpjcpkcpjclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcpncpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacvtaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcuicpvcHhcGYcuicHFcHDcHEcHBcHCcHvcHAcHucpucHscpHcHrcpJcHlcpLcpMcpNcpOckzcpQcGtcGWcpTcpUcpVcpWcpXcpYcpZcqacqbcoQcqccqdcnOcoXcoXcoXcoXcoXcqecnOcqfcqfcqfcpbcpbcnRbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcqzcqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacvmaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqJcpucFtcGmcFVcpucymcpucrRczxcymcpucrRczxcpucpucpucpucpucqRcpucpucpucGWckAcGtcqYcymcpTcracrbcrccrdcrecrfcrgcrhcoQcqccricnOcrjcoXcoXcrkcoXcrlcnOcrmcrncrocrncrpcnRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcvnaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcptcpucqYcpucqYcpucymcpucIicqMcyucqMcIjcqMcqMcyscIhcpucpucqScqPcqPcqPcrZckBcsdcsdcIgcpTcHYcHXcsicoMcsjcskcslcoMcsmcsncsocspcsqcsrcsscstcoXcsucnOcsvcrncswcrncsxcnRbTFcsyciGcszcsAcsBcsCciGcfYcsDcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsKcsLcqvcqvcqvcsMcqvcqvcqvcqvcsNcsOcsPcqvcqvcqvcrHaaaaaacdOcofcogcohcsQcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaacudaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacptcpucqYcpucsUcsXcHTcsWcHUcHVcyucqMcHWcqMcqMcyscHRcpucpucHScGmcHPcBwcwpcpAcqYcqYcHQctictjcHHcoCcoMctlcoMcoMcoMctmctncsoctoctpctqctrctscoXcttcnOctucrncswcrncrncnRctvctwciGciGctxciGciGciGctyctzctAciUciUciUctBciUciUcsIcrGaaacqvctCctDctEctFctGctHctIctJctKctLcqvctMctDctNcqvctOctPcqvaafaafcdOcplcplcplctQcpoctRctSctTctUctVcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafcudaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcuicpvcHhcGYcuicHFcHDcHEcHBcHCcHvcHAcHucpucHscpHcHrcpJcHlcpLcpMcpNcpOcjZcpQcGtcGWcpTcpUcpVcpWcpXcpYcpZcqacqbcoQcqccqdcnOcoXcoXcoXcoXcoXcqecnOcqfcqfcqfcpbcpbcnRbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcqzcqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacvmaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqJcpucFtcGmcFVcpucymcpucrRczxcymcpucrRczxcpucpucpucpucpucqRcpucpucpucGWckzcGtcqYcymcpTcracrbcrccrdcrecrfcrgcrhcoQcqccricnOcrjcoXcoXcrkcoXcrlcnOcrmcrncrocrncrpcnRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcvnaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcptcpucqYcpucqYcpucymcpucIicqMcyucqMcIjcqMcqMcyscIhcpucpucqScqPcqPcqPcrZckAcsdcsdcIgcpTcHYcHXcsicoMcsjcskcslcoMcsmcsncsocspcsqcsrcsscstcoXcsucnOcsvcrncswcrncsxcnRbTFcizciGcszcsAcsBcsCciGcfYcsDcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsKcsLcqvcqvcqvcsMcqvcqvcqvcqvcsNcsOcsPcqvcqvcqvcrHaaaaaacdOcofcogcohcsQcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaacudaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacptcpucqYcpucsUcsXcHTcsWcHUcHVcyucqMcHWcqMcqMcyscHRcpucpucHScGmcHPckBckBclvcqYcqYcHQctictjcHHcoCcoMctlcoMcoMcoMctmctncsoctoctpctqctrctscoXcttcnOctucrncswcrnbDecnRctvctwciGciGctxciGciGciGciBctzctAciUciUciUctBciUciUcsIcrGaaacqvctCctDctEctFctGctHctIctJctKctLcqvctMctDctNcqvctOctPcqvaafaafcdOcplcplcplctQcpoctRctSctTctUctVcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafcudaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucsUcsXcsXcsXcHTcsXcsXcsXcHTcsXcsXcsXcsXcsXcIncsXcsXcHTcsXcIvcsXcsXcsXcIpctgcthcuicpucIzcukculcumcuncuocupcuncuqcurcuscutcuucuucuvcuucuwcuxcuycuzcuAcuBcuBcnRcuCcuDcuEcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcuLcuMcuNctFcuOcuPcuQcuQcuRcuQcuScuTcuUcuVcuWcuXcuQcqvaaaaaacdOcplcplcplcsQcuYcuZcvacvbcvccvdcrNcrNcvecvfcvgcdOaafaafcrPaafcvkcvicvicvicvicvhcudcubcsTcsTcsTcsTcvjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucIlcpucpucvucvvcIkcvwcvxcvycvxcvAcvBcvCcvDcvEcvBcvBcvFcvGcnPcvHcoXcvIcvJcoXcoXcvKcrncrncvLcuBcuBcnRbPxcAscvNcvNcvNcvNcvOcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcvQctFctFcvRcvScvTcvUcvVcvWcvVcvXcvYcvZcwacwbcwccqvaaaaaacdOcomcomcomcomcwdcppcvacwecwfcwgcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacudaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucvpcpucpucvpcvpcvpcpucpucwtcAtcoCcoCcoCcoCcwvcwwcoQcwxcwycspcwzcoXcwAcvJcoXcwBcnOcwCcrncwEcwFcwGcnRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvaaaaaacdOcofcogcohcxfcsRcuZcxgcxhcxhcxicxjcxkcxlcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaacudaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucvpcpucpucvpcvpcmXcpucpucwtcAtcoCcoCcoCcoCcwvcwwcoQcwxcwycspcwzcoXcwAcvJcoXcwBcnOcwCcrncwEcwFcwGcnRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvaaaaaacdOcofcogcohcxfcsRcuZcxgcxhcxhcxicxjcxkcxlcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaacudaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucpucrWcGmcxpcuecuecxpcykcxpcIBcIAcIDcuecqVcuecxAcxBcIEcwwcoQcxDcoQcxEcxFcoXcoXcxGcoXcxHcnOcxIcxIcxJcwFcwGcnRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScybcuTcyccuVcqvcqvcqvaaaaaacdOcplcpmcplcydcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafcudaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucqScqPcqPcxwcxycqPcxwcqPcxxcxwcqPcqPcqPcqPcxvcqPcrXcxucqQcvpcpucpucyvcwscywcxtcyycyzcpucsbcpucxqcxqcxrcyGcoQcxDcyHcnOcyIcoXcyJcoXcyKcyLcnOcnRcnRcnRcnRcnRcnRbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcyRcrGaaaaaaaaaaaaaaaaaacqvcuVcySctFctFcyTcyUcyVcyWctMctDctNcyXctMctDcyYcqvaaaaaaaaaaaacdOcplcplcplcxfcyZczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafcvkcvicvicvicvicvhcudcubcsTcsTcsTcsTcvjaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCctdcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOczDczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaacudaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCcBFcyAcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaacBkaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaacudaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaacyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcvqcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycmWcCmcCncCocrHaaaaaaaaaaaaaaaaaacKwaafcdOcCqcCrcCscomcCtcCucCvcomcCwcCxcCycdOaaaaaacrPaaactXctXctXctXctXaafcudaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLcCMcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaacDfaaLcClcDgaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafcvkcvicvicvicvicvhcudcubcsTcsTcsTcsTcvjaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCcBFcnzcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaacudaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaacyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcvqcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcCrcCscomcCtcCucCvcomcCwcCxcCycdOaaaaaacrPaaactXctXctXctXctXaafcudaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEcDgaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafcvkcvicvicvicvicvhcudcubcsTcsTcsTcsTcvjaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcpFaaaaaaaaaaamaaaaaaaaacAzcAvcAwcAxcAycABcAAcAHcAycABcAAcAHcAycABcBucBucBvcAHcAycABcBtcoCaaacDvcDwcDxcDycDzcDAcAucDCcDDcDDcDEcDFcDGcDHcDIcDJcDHcDIcDGcDKcDLcDMcDKcCBcCBcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacCWaafaaaaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacudaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcClcqLcqLcqLcpEcpIcpIcpIcqLcpIcpPcpIcpGcpIcpPcpIcpGcpIcpPcpIcpGcpIcqLcpIcpRcpIcpGcpIcqNaafaaacEicEjcEkcElcEmcEncAucEocDDcEpcEqcErcEscEtcEucEvcEwcExcEscEycEzcEAcDKaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCacEEcEFcEGcCacCWaafaafaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacvlaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaaqaaaaaaaaaaafcgRcCpcmtcmvcgRcCpcmtcmvcgRcCpcmtcmxcgRaaacgRcmycmtcmxcgRaaaaafaaacEicEQcERcEScEQcCAcDBcEUcDDcEVcEWcEXcEscEYcEZcFacFbcFccEscFdcFecFfcDKaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacFjcFjcFjcCacFkcFlaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcFpcFpcFpckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacvmaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaaaafcgRcDjcDkcDlcgRcDmcDncDocgRcDpcDqcDrcgRaafcgRcDscDtcDucgRaaaaafaaacEicFrcEkcEQcEQcqZcqXcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcFIcDKaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaaacBkaafaafaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaLaaLaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafbNcaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUcGhcGicGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaafaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcGucGvcGwcEscGxcGycGzcGAcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaaaafcgRcDjcDkcDlcgRcDmcDncDocgRcDpcDqcDrcgRaafcgRcDscDtcDucgRaaaaafaaacEicFrcEkcEQcEQcqZcqXcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcFIcDKaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaaacBkaafaafaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafbNcaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUciEciDcGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaafaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcoycGvcGwcEscGxcpwcoJcpxcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZSaaaaaacgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaacFqcgRcgRcgRcgRaaaaaaaaaaaacCzcCzcCzcCzcCzcsccGJcGJcGJcGJcGKcGJcGLcGMcGNcGMcGOcGJcGJcGPcGJcGJcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcHacHbcHccHdcHecHfcsZcsYctacHgcHicmXcnycsVcHmcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHnceecHpaaacHnceecHpaaacHnceecHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecedcHwcHxcHjcHycHzctkctZcoyctccHjcHjcHjcnzcHkctbcHIcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncpscHpaaacHncpscHpaaacHncpscHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcuccqIcHwcHxcHjcufcHjcugcoJcpxcpwcpycnycnycpzcpBcHZcIacGJcIbaafaaIaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncpscHpaaacHncpscHpaafcHncpscHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQcwqcwrcwncwocxocwocwucwDcpDcImcpCcIocIocIocwkcHZcIqcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncpscHpaafcHncpscHpaaacHncpscHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcIxcIycKYcLbcvocIycKUcKVcKYcKZcKXcHZcKTcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcpzcpycpCcpAcqIcHfcsZcsYctacHgcHicHjcHkcsVcHIcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHnceecHpaaacHnceecHpaaacHnceecHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecedcHwctkctbcucctZcHzcIwcHjctccHjcHjcHjcHjcugcHZcIacGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncpscHpaaacHncpscHpaaacHncpscHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcwkcwncHwcwpcwocwqcufcHjcHjcxocwucyAcHjcHjcHjcugcHZcIqcGJcIbaafaaIaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncpscHpaaacHncpscHpaafcHncpscHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQcBwcwrcBzcwDcBHcBAcnycnycpDcImcEMcIocIocIocpBcHZcFScGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncpscHpaafcHncpscHpaaacHncpscHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcFscETcKYcLbcvocIycKUcKVcKYcKZcKXcHZcFScGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncpscHpaafcHncpscHpaaacHncpscHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcujcIPcIQcGJcGJcGJcIRcIScHzcGJaafaaabZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcAGaafaafaafcAGaafaaaaafcAGaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcIZcJacJbcJccJdcJecJfcJgcJecGJcJhcHjcJicJjcJkcJlcJmcJncJocJlcJpcJjcJqcHjcJrcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcAGaafaafaafcAGaafaaaaafcAGaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcFTcJacJbcJcciFcJecJfcJgcJecGJcJhcHjcJicJjcJkcJlcJmcJncJocJlcJpcJjcJqcHjcJrcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafczjczicypcxzcxzcxzcxzcxzcxzcxzcxzcxzcxzcxzczCcziczicziczzcJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicJjcJkcJLcJMcJNcJOcJLcJpcJjcJqcHjcJPcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxsaafaaaaafcxsaafaaaaafcxsaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcJjcJkcKacJMcKbcKccKacJpcJjcKdcHjcHjcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwlcHpaaacHncwlcHpaaacHncwlcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcKkcGJcGJcGJcGJcGJcGZcGJcGJaafaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 77c25d8e5e..19775ea2e3 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -65,21 +65,21 @@ "bm" = (/turf/space/transit/east/shuttlespace_ew12,/area/space) "bn" = (/turf/space/transit/east/shuttlespace_ew9,/area/space) "bo" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall{icon_state = "iron3"},/area/space) -"bp" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_desert) -"bq" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid6"; dir = 2},/area/holodeck/source_desert) +"bp" = (/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert) +"bq" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor{icon_state = "cult"; dir = 2},/area/holodeck/source_theatre) "br" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{icon_state = "iron3"},/area/space) "bs" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "bt" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) -"bu" = (/obj/structure/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/hairflower,/turf/simulated/floor/holofloor{icon_state = "cult"; dir = 2},/area/holodeck/source_theatre) -"bv" = (/obj/effect/landmark/costume,/obj/structure/rack/holorack,/turf/simulated/floor/holofloor{icon_state = "cult"; dir = 2},/area/holodeck/source_theatre) +"bu" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/hairflower,/turf/simulated/floor/holofloor{icon_state = "cult"; dir = 2},/area/holodeck/source_theatre) +"bv" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert) "bw" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Holodeck Projector Floor"},/area/holodeck/source_wildlife) "bx" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Holodeck Projector Floor"},/area/holodeck/source_plating) "by" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_emptycourt) "bz" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_emptycourt) "bA" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_emptycourt) "bB" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{icon_state = "iron3"},/area/space) -"bC" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_desert) -"bD" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid5"; dir = 2},/area/holodeck/source_desert) +"bC" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert) +"bD" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership) "bE" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "bF" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "bG" = (/turf/simulated/floor/holofloor{icon_state = "cult"; dir = 2},/area/holodeck/source_theatre) @@ -87,15 +87,15 @@ "bI" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/source_emptycourt) "bJ" = (/turf/simulated/floor/holofloor,/area/holodeck/source_emptycourt) "bK" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/source_emptycourt) -"bL" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid2"; dir = 4},/area/holodeck/source_desert) +"bL" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "bM" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor{icon_state = "wood_siding2"; dir = 4},/area/holodeck/source_picnicarea) "bN" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor{icon_state = "wood_siding2"; dir = 4},/area/holodeck/source_picnicarea) -"bO" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_desert) -"bP" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid7"; dir = 2},/area/holodeck/source_desert) +"bO" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"bP" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "bQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_picnicarea) "bR" = (/turf/simulated/floor/holofloor{icon_state = "wood"; dir = 4},/turf/simulated/floor/holofloor{icon_state = "siding1"; dir = 2},/area/holodeck/source_theatre) "bS" = (/turf/simulated/floor/holofloor{icon_state = "rampbottom"; dir = 2},/area/holodeck/source_theatre) -"bT" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) +"bT" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "bU" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor{icon_state = "wood_siding5"; dir = 2},/area/holodeck/source_picnicarea) "bV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_picnicarea) "bW" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/holotable/wood,/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_picnicarea) @@ -110,7 +110,7 @@ "cf" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) "cg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) "ch" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdownside"; nostop = 1; stopper = 0; tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space) -"ci" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/turf/simulated/floor/holofloor{icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert) +"ci" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "cj" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor{icon_state = "wood_siding6"; dir = 2},/area/holodeck/source_picnicarea) "ck" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor{icon_state = "wood_siding10"; dir = 2},/area/holodeck/source_picnicarea) "cl" = (/obj/structure/holostool,/turf/simulated/floor/holofloor{icon_state = "carpet7-3"; dir = 4},/area/holodeck/source_theatre) @@ -632,7 +632,7 @@ "mh" = (/obj/structure/table,/obj/effect/spawner/newbomb/timer/syndicate,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) "mi" = (/obj/machinery/door/poddoor{id = "smindicate"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_mothership) "mj" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) -"mk" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership) +"mk" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ml" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership) "mm" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership) "mn" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership) @@ -705,8 +705,8 @@ "nC" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = null; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "nD" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "nE" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) -"nF" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"nG" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"nF" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nG" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "nH" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start) "nI" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "nJ" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -714,8 +714,8 @@ "nL" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "nM" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "nN" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) -"nO" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"nP" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"nO" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"nP" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "nQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "nR" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "nS" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -723,14 +723,14 @@ "nU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) "nV" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "nW" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) -"nX" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"nY" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"nX" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"nY" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "nZ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oa" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "ob" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) "oc" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "od" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) -"oe" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"oe" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "of" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "og" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -741,35 +741,36 @@ "om" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_station/start) "on" = (/obj/machinery/door/window/northright{name = "Flight Deck"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oo" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_station/start) -"op" = (/obj/structure/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"oq" = (/obj/structure/rack,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"op" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"oq" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "or" = (/obj/structure/closet,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"os" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor{icon_state = "17"; dir = 5},/area/holodeck/source_space) "ot" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space) "ou" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"ov" = (/obj/structure/rack,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"ow" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ov" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ow" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ox" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "oy" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"oz" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"oz" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "oA" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oB" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oC" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "oD" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"oE" = (/obj/structure/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"oE" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "oF" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "oG" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = null; req_access_txt = "150"},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oH" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 0; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space) "oJ" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"oK" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"oL" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"oK" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"oL" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "oM" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "oN" = (/turf/unsimulated/wall,/area/centcom) "oO" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "synd_sensor"; pixel_x = 8; pixel_y = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "oP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) -"oQ" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"oR" = (/obj/structure/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"oS" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"oQ" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) +"oR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"oS" = (/obj/structure/table/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "oT" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom) "oU" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/centcom) "oV" = (/turf/unsimulated/floor{name = "plating"},/area/centcom) @@ -791,7 +792,7 @@ "pl" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "pm" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "pn" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"po" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"po" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "pp" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) "pq" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "pr" = (/obj/machinery/vending/cigarette,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -955,7 +956,7 @@ "st" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "su" = (/obj/item/weapon/weldingtool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "sv" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = null; req_access_txt = "150"},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"sw" = (/obj/structure/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"sw" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "sx" = (/obj/structure/table,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/living) "sy" = (/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/centcom/living) "sz" = (/obj/machinery/sleeper,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/living) @@ -1014,7 +1015,7 @@ "tA" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/space,/area/supply/dock) "tB" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/supply/dock) "tC" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/space,/area/supply/dock) -"tD" = (/obj/structure/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) +"tD" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "tE" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "tF" = (/obj/machinery/shield_gen,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "tG" = (/obj/machinery/shield_capacitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) @@ -1045,11 +1046,11 @@ "uf" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "ug" = (/turf/unsimulated/wall,/area/centcom/test) "uh" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) -"ui" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) -"uj" = (/obj/structure/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"uk" = (/obj/structure/rack,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/ammo_magazine/c9mm,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"ul" = (/obj/structure/rack,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"um" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"ui" = (/obj/structure/table/rack,/obj/item/weapon/gun/grenadelauncher,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"uj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"uk" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) +"ul" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"um" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "un" = (/obj/structure/table/reinforced,/obj/item/weapon/circuitboard/aiupload,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "uo" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "up" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) @@ -1061,7 +1062,7 @@ "uv" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uw" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 9},/area/centcom/specops) "ux" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "ASSAULT"; name = "Assault Armor Storage"; p_open = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) -"uy" = (/obj/structure/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"uy" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "uz" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "uA" = (/obj/machinery/pipedispenser/disposal/orderable,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "uB" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) @@ -1093,7 +1094,7 @@ "vb" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "vc" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "vd" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/thermal,/obj/item/clothing/glasses/thermal,/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"ve" = (/obj/structure/rack,/obj/item/weapon/gun/grenadelauncher,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"ve" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "vf" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "vg" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "vh" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/wall,/area/prison/solitary) @@ -1125,12 +1126,12 @@ "vH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/obj/machinery/camera{c_tag = "Court"; invisibility = 1; network = list("thunder"); pixel_x = 10},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "vI" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops) "vJ" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"vK" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) +"vK" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "vL" = (/obj/structure/sign/poster{poster_type = "/datum/poster/bay_50"; pixel_x = -32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "vM" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"vN" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) +"vN" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "vO" = (/obj/machinery/vending/tool,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"vP" = (/obj/structure/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) +"vP" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "vQ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "vR" = (/obj/structure/closet{icon_closed = "syndicate1"; icon_opened = "syndicate1open"; icon_state = "syndicate1"; name = "emergency response team wardrobe"},/obj/item/clothing/under/ert,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/rank/centcom_officer,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "vS" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/handcuffs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) @@ -1151,7 +1152,7 @@ "wh" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "ASSAULT2"; name = "Launch Bay #2"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) "wi" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) "wj" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/teleporter,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"wk" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"wk" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "wl" = (/obj/machinery/vending/engivend,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "wm" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "wn" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 9},/area/centcom) @@ -1170,7 +1171,7 @@ "wA" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "blue"},/area/centcom) "wB" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "wC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"wD" = (/obj/structure/rack,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"wD" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "wE" = (/obj/machinery/vending/engineering,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "wF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) "wG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) @@ -1207,8 +1208,8 @@ "xl" = (/obj/machinery/mech_bay_recharge_port,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom) "xm" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom) "xn" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"xo" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) -"xp" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"xo" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) +"xp" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "xq" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "xr" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "xs" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) @@ -1272,15 +1273,15 @@ "yy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control) "yz" = (/obj/machinery/chem_dispenser/meds,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "yA" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) -"yB" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"yB" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "yC" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"yD" = (/obj/structure/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"yD" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "yE" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "yF" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "yG" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "yH" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "yI" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) -"yJ" = (/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"yJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "yK" = (/obj/structure/bookcase{name = "bookcase (Reports)"},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "yL" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/control) "yM" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) @@ -1296,9 +1297,9 @@ "yW" = (/obj/structure/table/reinforced,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "yX" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "yY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "103"; tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) -"yZ" = (/obj/structure/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"za" = (/obj/structure/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"zb" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) +"yZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"za" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"zb" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "zc" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "zd" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "ze" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) @@ -1306,7 +1307,7 @@ "zg" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "zh" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "zi" = (/obj/structure/closet/crate/medical,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/bonesetter,/obj/item/weapon/scalpel,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"zj" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) +"zj" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "zk" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "zl" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom) "zm" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) @@ -1683,22 +1684,22 @@ "Gt" = (/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Gu" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Gv" = (/obj/structure/stool/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"Gw" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Gw" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "Gx" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/floor,/area/tdome) "Gy" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome) -"Gz" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Gz" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "GA" = (/obj/machinery/door/poddoor{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "GB" = (/obj/machinery/igniter,/turf/simulated/floor,/area/tdome) "GC" = (/turf/simulated/floor,/area/tdome) "GD" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome) -"GE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"GE" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "GF" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "GG" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) "GH" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome) "GI" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome) "GJ" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome) "GK" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) -"GL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"GL" = (/obj/structure/table/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) "GM" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) "GN" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "GO" = (/obj/machinery/camera{pixel_x = 11; pixel_y = -9; network = list("thunder"); c_tag = "Red Team"},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) @@ -1722,10 +1723,10 @@ "Hg" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "Hh" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) "Hi" = (/turf/unsimulated/floor{icon_state = "redcorner"; dir = 8},/area/tdome) -"Hj" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Hj" = (/obj/structure/table/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "Hk" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = null; req_access_txt = "102"},/turf/simulated/floor,/area/tdome) "Hl" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome) -"Hm" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Hm" = (/obj/structure/table/rack,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Hn" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/tdome) "Ho" = (/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "Hp" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) @@ -1828,10 +1829,10 @@ "Ji" = (/obj/item/target/syndicate,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "Jj" = (/obj/item/target/alien,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "Jk" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station) -"Jl" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"Jl" = (/obj/structure/table/rack,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Jm" = (/obj/structure/kitchenspike,/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "Jn" = (/obj/structure/kitchenspike,/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) -"Jo" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) +"Jo" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Jp" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Jq" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "Jr" = (/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) @@ -1900,6 +1901,7 @@ "KC" = (/obj/structure/table/reinforced,/obj/item/weapon/circular_saw,/obj/structure/window/basic{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KD" = (/obj/machinery/optable,/obj/item/organ/brain,/obj/structure/window/basic{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KE" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) +"KF" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor{icon_state = "1"; dir = 5},/area/holodeck/source_space) "KG" = (/mob/living/simple_animal/hostile/tribesman{name = "Experiment 69T"},/turf/unsimulated/floor{tag = "icon-asteroid2"; name = "plating"; icon_state = "asteroid2"},/area/wizard_station) "KH" = (/obj/structure/flora/ausbushes/grassybush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) "KI" = (/mob/living/simple_animal/hostile/retaliate/goat{name = "Experiment 97d"},/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) @@ -1910,23 +1912,20 @@ "KN" = (/obj/machinery/atmospherics/pipe/tank/nitrogen{dir = 1; initialize_directions = 1; start_pressure = 493.6},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KO" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KP" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"KQ" = (/obj/structure/rack,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"KR" = (/obj/structure/rack,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"KS" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"KT" = (/obj/structure/rack,/obj/item/weapon/gun/dartgun/vox/raider,/obj/item/weapon/gun/dartgun/vox/medical,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"KQ" = (/obj/structure/table/rack,/obj/item/weapon/gun/dartgun/vox/raider,/obj/item/weapon/gun/dartgun/vox/medical,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"KR" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"KS" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/pneumatic,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"KT" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KU" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KV" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KW" = (/obj/machinery/bodyscanner,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KX" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "KY" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/vox/station) "KZ" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) -"La" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"Lb" = (/obj/structure/rack,/obj/item/weapon/gun/launcher/pneumatic,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"La" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"Lb" = (/obj/structure/table/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Lc" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox/station) "Ld" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) -"Le" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"Lf" = (/obj/structure/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"Lg" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "Lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) "Li" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) "Lj" = (/obj/machinery/door/airlock/hatch{req_access_txt = "150"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) @@ -1944,32 +1943,29 @@ "Lv" = (/obj/machinery/door/poddoor{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "Lw" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 0; req_access = null; req_access_txt = "150"},/obj/item/weapon/surgicaldrill,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start) "Lx" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"Ly" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) -"Lz" = (/obj/structure/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) -"LA" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) (1,1,1) = {" aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaQ -ajaRaSaTaUaVaWaXaYaZbabbbcbdbebfaWaVbaaSaTaXbbaUbdaZabatauavbgbhbibjaAbkblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasataJaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbqbpbpbrbsbtbsbtbsbrbubvbvbvbvbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbybzbzbzbAbB -amaUaZbcaXbeaSaWbaaVbdaYbfaTbbaRaSbebdaZbcaWaYaXaTaVaeaqarasatauavbgaxbibjbnbkblbmapaqararasataubgbhbibjbnbkblbmapaqaGaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbCbpbpbDbrbEbFbEbFbEbrbGbGbGbGbGbrbwbHbwbHbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB -adaXaVbfaWbbaZaSbdbeaTbaaRbcaYaUaZbbaTaVbfaSbaaWbcbeahbgbhbibjbnbkblaDapaqarasatauavbgbhavbgbhbiblbmapaqarasatauavbgaxaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbLbpbpbpbrbMbNbMbNbMbrbGbGbGbGbGbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB -alaWbeaRaSaYaVaZaTbbbcbdaUbfbaaXaVaYbcbeaRaZbdaSbfbbagblbmapaqarasataJavbgbhbibjbnbkblbmasatauavatauavbgbhbibjbnbkblaDaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbObpbpbrbQbQbQbQbQbrbRbRbRbRbSbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB +ajaRaSaTaUaVaWaXaYaZbabbbcbdbebfaWaVbaaSaTaXbbaUbdaZabatauavbgbhbibjaAbkblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasataJaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrbsbtbsbtbsbrbubqbqbqbqbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbybzbzbzbAbB +amaUaZbcaXbeaSaWbaaVbdaYbfaTbbaRaSbebdaZbcaWaYaXaTaVaeaqarasatauavbgaxbibjbnbkblbmapaqararasataubgbhbibjbnbkblbmapaqaGaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbvbpbpbpbrbEbFbEbFbEbrbGbGbGbGbGbrbwbHbwbHbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB +adaXaVbfaWbbaZaSbdbeaTbaaRbcaYaUaZbbaTaVbfaSbaaWbcbeahbgbhbibjbnbkblaDapaqarasatauavbgbhavbgbhbiblbmapaqarasatauavbgaxaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrbMbNbMbNbMbrbGbGbGbGbGbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB +alaWbeaRaSaYaVaZaTbbbcbdaUbfbaaXaVaYbcbeaRaZbdaSbfbbagblbmapaqarasataJavbgbhbibjbnbkblbmasatauavatauavbgbhbibjbnbkblaDaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbCbpbpbrbQbQbQbQbQbrbRbRbRbRbSbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB aoaSbbaUaZbabeaVbcaYbfaTaXaRbdaWbebabfbbaUaVaTaZaRaYacbgbhbibjbnbkblaDapaqarasatauavbgbhbibjbnbkblbmapaqarasatauavbgaxaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrbUbVbWbVbXbrbYbZcacbbYbrbwbwbHbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbIbJbJbJbKbB -abaZaYaXaVbdbbbebfbacccdcecfcgchbbbdaRaYaXbebcaVaUbaaiarasatauavbgbhaybjbnbkblbmapaqarasapaqarasbhbibjbnbkblbmapaqaraHaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbPbpbpbDbrcjbVbWbVckbrbYclcmcnbYbrbwbwbHbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB -aeaVbaaWbeaTaYbbaRcqcrcsctcucvcwcxaTaUbaaWbbbfbeaXbdafbnbkblbmapaqaraHatauavbgbhbibjbnbiavaraqbhauasatauavbgbhbibjbnaBaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbCbPbpbObrbQbQbQbQbQbrcyclcmcncybrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB -ahbebdaSbbbcbaaYaUczcucAcBcCcscDcEbcaXbdaSaYaRbbaWaTanbmapaqarasatauaKbgbhbibjbnbkblbmcFcGcHcIcJcKavbgbhbibjbnbkblbmaEaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbPbpbrcLcMcLcMcLbrcNclcmcncNbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB -agbbaTaZaYbfbdbaaXcOcPcBcQcRcSctcTbeaWaTaZbaaUaYaSbcakbibjbnbkblbmapaFarasatauavbgbhbicKcUcVcWcXcYaqarasatauavbgbhbiazaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbTbpbpbPbrbEbFbEbFbEbrcNclcmcncNbrbwbHbwbHbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB -acaYbcaVbaaRaTbdaWchcvcDdacucQcBdbdcaSbcaVbdaXbaaZbfaaasatauavbgbhbiazbnbkblbmapaqarasdddedfdgdhdibhbnbkblbmapaqarasaIaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobObpcibpbCbrbsbtbsbtbsbrdkdldmdndkbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrdodpdpdpdqbB +abaZaYaXaVbdbbbebfbacccdcecfcgchbbbdaRaYaXbebcaVaUbaaiarasatauavbgbhaybjbnbkblbmapaqarasapaqarasbhbibjbnbkblbmapaqaraHaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrcjbVbWbVckbrbYclcmcnbYbrbwbwbHbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB +aeaVbaaWbeaTaYbbaRcqcrcsctcucvcwcxaTaUbaaWbbbfbeaXbdafbnbkblbmapaqaraHatauavbgbhbibjbnbiavaraqbhauasatauavbgbhbibjbnaBaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbvbpbpbCbrbQbQbQbQbQbrcyclcmcncybrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB +ahbebdaSbbbcbaaYaUczcucAcBcCcscDcEbcaXbdaSaYaRbbaWaTanbmapaqarasatauaKbgbhbibjbnbkblbmcFcGcHcIcJcKavbgbhbibjbnbkblbmaEaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrcLcMcLcMcLbrcNclcmcncNbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB +agbbaTaZaYbfbdbaaXcOcPcBcQcRcSctcTbeaWaTaZbaaUaYaSbcakbibjbnbkblbmapaFarasatauavbgbhbicKcUcVcWcXcYaqarasatauavbgbhbiazaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrbEbFbEbFbEbrcNclcmcncNbrbwbHbwbHbwbrbxbxbxbxbxbraMaMaMaMaMbrcobJbJbJcpbB +acaYbcaVbaaRaTbdaWchcvcDdacucQcBdbdcaSbcaVbdaXbaaZbfaaasatauavbgbhbiazbnbkblbmapaqarasdddedfdgdhdibhbnbkblbmapaqarasaIaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobCbpbpbpbvbrbsbtbsbtbsbrdkdldmdndkbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrdodpdpdpdqbB aibabfbebdaUbcaTchdrcsdscPcCdacDcAdtdubfbeaTaWbdaVaRajbhbibjbnbkblbmaEaqarasatauavbgbhdvdwdxdydedzapaqarasatauavbgbhayaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMdAdBdBdBdBdBdCdBdBdBdBdBdCdBdBdBdBdBdCdDdDdDdDdDdCdDdDdDdDdDdCdDdDdDdDdDdCdDdDdDdDdDdE afbdaRbbaTaXbfbcducDcAdFcvctcPdscRcQdGaRbbbcaSaTbeaUamaqarasatauavbgaxbibjbnbkblbmapaqdHdddIcGcHcIbhbibjbnbkblbmapaqaGaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJdKdLdJdKbrdMdMdMdMdMbrdNdNdNdNdNbrdOdOdPdQdQbrdRdSdTdRdUbrdVdWdWdWdXbrdYdZdZdZeabB -anaTaUaYbcaWaRbfdGdscRcScscBcvdFcudaebaUaYbfaZbcbbaXadauavbgbhbibjbnaBblbmapaqarasatauarbibjbnbkbgbkblbmapaqarasatauaKaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodKdLdJdKdLbrdMecdMdMdMbrdNedeeefdNbregegeheieibrdUejekelembreneoeoeoepbreqerereresbB +anaTaUaYbcaWaRbfdGdscRcScscBcvdFcudaebaUaYbfaZbcbbaXadauavbgbhbibjbnaBblbmapaqarasatauarbibjbnbkbgbkblbmapaqarasatauaKaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodKdLdJosdLbrdMecdMdMdMbrdNedeeefdNbregegeheieibrdUejekelembreneoeoeoepbreqerereresbB akbcaXbabfaSaUaRebdFcucQcAcDcscScCcPdcaXbaaRaVbfaYaWalbjbnbkblbmapaqaGasatauavbgbhbibjcFcGcHcIcJcKarasatauavbgbhbibjaAaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodLdJdKdLdJbrdMdMdMetdMbrdNeueueudNbregeveveveibrdRewdRdSdRbreneoeoeoepbreqerereresbB -aabfaWbdaRaZaXaUdccScCdacRdscAcQctcvcxaWbdaUbeaRbaaSaobkblbmapaqarasaIauavbgbhbibjbnbkcKexeyezeAcYatauavbgbhbibjbnbkaCaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJdKdLdJdKbrdMdMdMdMdMbrdNdNdNdNdNbregeheheheibrdSdRdUekdUbreneoeoeoepbreqerereresbB +aabfaWbdaRaZaXaUdccScCdacRdscAcQctcvcxaWbdaUbeaRbaaSaobkblbmapaqarasaIauavbgbhbibjbnbkcKexeyezeAcYatauavbgbhbibjbnbkaCaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJosdLdJdKbrdMdMdMdMdMbrdNdNdNdNdNbregeheheheibrdSdRdUekdUbreneoeoeoepbreqerereresbB ajaRaSaTaUaVaWaXcxcQctcPcudFcRdacBcscEaSaTaXbbaUbdaZabavbgbhbibjbnbkaCbmapaqarasatauavddeBeCeDeEdiblbmapaqarasatauavawaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodKdLdJdKdLbrdMdMdMeFdMbrdNeGeHeIdNbreJeKeKeKeLbrdRdTdReMdTbreNeOeOeOePbreqerereresbB amaUaZbcaXbeaSaWcEdacBcvcCcScucPcDcAcqaZbcaWaYaXaTaVaebnbkblbmapaqaraHatauavbgbhbibjbndveQeReSeBdzasatauavbgbhbibjbnaBaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodLdJdKdLdJbrdMeTdMdMdMbrdNeUeVeWdNbreXeYeYeYeZbrdUfafbfcdSbrfdfefefeffbrfgerererfhbB -adaXaVbfaWbbaZaScqcPcDcsctcQcCcvdscRczaVbfaSbaaWbcbeaharasatauavbgbhaybjbnbkblbmapaqardHdddIcGcHcIbibjbnbkblbmapaqaraHaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJdKdLdJdKbrdMdMdMdMecbrdNeUeVeWdNbrfiehfjehfkbrfaflfmfnfcbrfoeoeoeofpbrfgerererfhbB +adaXaVbfaWbbaZaScqcPcDcsctcQcCcvdscRczaVbfaSbaaWbcbeaharasatauavbgbhaybjbnbkblbmapaqardHdddIcGcHcIbibjbnbkblbmapaqaraHaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJdKdLKFdKbrdMdMdMdMecbrdNeUeVeWdNbrfiehfjehfkbrfaflfmfnfcbrfoeoeoeofpbrfgerererfhbB alaWbeaRaSaYaVaZczcvdscAcBdactcsdFcucTbeaRaZbdaSbfbbagbibjbnbkblbmapaFarasatauavbgbhbibjbnbkblbmapaqarasatauavbgbhbiazaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodKdLdJdKdLbrfqdMdMdMdMbrdNeUeVeWdNbrfifrfrfrfkbrflfmfmfmfnbrfoeoeoeofpbrfgerererfhbB -aoaSbbaUaZbabeaVcTcsdFcRcDcPcBcAcScCfsbbaUaVaTaZaRaYacatauavbgbhbibjaAbkblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasataJaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodLdJdKdLdJbrdMeFdMeTdMbrdNftfufvdNbrfifiehfkfkbrfmfmfmfmfmbrfoeoeoeofpbrfgerererfhbB +aoaSbbaUaZbabeaVcTcsdFcRcDcPcBcAcScCfsbbaUaVaTaZaRaYacatauavbgbhbibjaAbkblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasataJaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodLKFdKdLdJbrdMeFdMeTdMbrdNftfufvdNbrfifiehfkfkbrfmfmfmfmfmbrfoeoeoeofpbrfgerererfhbB abaZaYaXaVbdbbbefscAcScudscvcDcRcQctccaYaXbebcaVaUbaaibmapaqarasatauaKbgbhbibjbnbkblbmapaqarasatauavbgbhbibjbnbkblbmaEaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbodJdKdLdJdKbrdMdMdMdMfqbrdNdNdNdNdNbrfwfwfxfyfybrfmfmfmfmfmbrfzfAfAfAfBbrfCfDfDfDfEbB aeaVbaaWbeaTaYbbcccRcQcCdFcsdscudacBfFbaaWbbbfbeaXbdafbkblbmapaqarasaIauavbgbhbibjbnbkblbmapaqarasatauavbgbhbibjbnbkaCaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMfGfHfHfHfHfHfIfHfHfHfHfHfIfHfHfHfHfHfIfHfHfHfHfHfIfHfHfHfHfHfIfHfHfHfHfHfIfHfHfHfHfHfJ ahbebdaSbbbcbaaYfFcudactcScAdFcCcPcDfKbdaSaYaRbbaWaTanauavbgbhbibjbnaBblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasatauaKaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2020,7 +2016,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOlLlMlXlXlXmbjBjBjBmcjBjBjBjBmafOjGiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOlXlXlXlXmdfOmemfmgfOmhfOmifOfOfOmjiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOlXlXlXfOfOfOlXlXlXfOfOfOjBjBjBfOjGiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOlLlMmkfOiAfOmlmlmlfOiAfOjFmmmnfOjGiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOlLlMbDfOiAfOmlmlmlfOiAfOjFmmmnfOjGiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAfOmlmlmlfOiAkpmompmqkriAfOmlmlmlfOjGiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAkpmompmqkriAiAiAiAiAiAiAkpmompmqkriAiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM mrmrmrmrmrmrmrmrmrmrmrmrmrmrmraMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMihiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAihaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmsmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt @@ -2049,25 +2045,25 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMnvnwnxnxnxnynzaMaMndnenfngnenenenhihninjnknlihmumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMnvnHnInJnKnLnMnHnzaMndnenmnmnenenenennnonononpihmumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMnHnQnRnRnSnRnRnLnHaMndnqnrnsntneneneihnonononuihihihihihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHnZnRnRnRnRoanLnHaMndnenAnAnenenenBihnCnonDnEihnFkQnGihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndnenenenenenenNihihihihihihnOkQnPihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihnXkQnYihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoGoyoaouswnHaMaMaMaMaMaMobkdkdkdoclalaododihnXkQoeihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHnZnRnRnRnRoanLnHaMndnenAnAnenenenBihnCnonDnEihbLkQbOihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndnenenenenenenNihihihihihihbPkQbTihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihcikQmkihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoGoyoaounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQnGihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihmumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihopopkQkQkQoqoqihihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihovowkQkQkQkQkQkQkQoxihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbpakRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQoEihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmpakRpLkRkdkdkdkdihoKoLkQkQkQkQkQkQkQoMihmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxphnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihoQoRkQkQkQoSoSihihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRornHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPihihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRornHnHnHnHnzototihkdkdkdkdihnYnXkQkQkQkQkQkQkQoxihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoZoOpbpakRpnkRkdkdkdkdoCkQkQkQkQkQoDkQkQkQoeihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpknHnHpJoZplpmpakRpLkRkdkdkdkdihoqopkQkQkQkQkQkQkQoMihmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpxnHnHnRnRpynHnHpzpApznHoIoIihoPnanUihihihihowovkQkQkQozozihihmumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHpGnRnRpHnHnRnRnRnHrbpKrdpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihmumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepfpfpepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRqbnRnRnRqcnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihpokQpoihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeptpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqDnRnRnRqEnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihpokQpoihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpepCpCpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihpokQpoihmumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasercsvnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihpokQpoihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepfpfpepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRqbnRnRnRqcnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeptpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqDnRnRnRqEnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihoEkQoEihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpepCpCpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihoEkQoEihmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasercsvnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqpqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMrirjrjrjrjrjnHnRnRnRnHrenRnRnRrkrlaMaMaMaMaMmPaMmumumuihihihihihmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHqIpFpFpFpFpFqqqvqsqJqKqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMrBrCrDrjrjrjrEnRnRnRrFnRnRnRrGrHrIaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpeqSpBqSpBqSpepBpBpBqTqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqvqvqLqMqMqMqMqMqMqMqMqNqyqXqYqYqYqYqYqXqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMrPrjrjrjrjrjrQnRnRnRrRnRnRnRnRrSrTaMaMaMaMaMmAaMaMmBmumumumumumumumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsbrjrjrjscnHpzsdpznHozozsInRsfnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsbrjrjrjscnHpzsdpznHoKoKsInRsfnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrqqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrtrururvpFrwrxrypZqzqXqYqYqYqYrzrApZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsqsrssstnHsunRvUnHyCnHnHLvnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvqsqJrKqsqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYrOpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsGrjsHLwnHnHnRsJsKnHnHnHnRnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfrUrJrJrJrJpepBpBpBpBpBpepBrVrWpeoVpFqopUpUqpqvqvqvqvqvqvqvqvqvpFrLrXrYrYpFpFrZpFpZqzqXqYqYqYqYsaqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsWsXsYnHaMnHsZsZsZnHaMnHnLtatbnHaMaMaMaMaMaMaMmAaMmBaMmumumumumumumumumumumumumumu @@ -2077,23 +2073,23 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVqRpepepepepepepepepepeqHoVoVoVoVpFpFtctdpFpFpFtctetdpFqvqvqvpFtftgtgtgtgtgthpFpZqztitjqYqYqYtktlqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVpFtptptptptptptptptppFpFtqpFpFtptptptptptptppFpZqztrtstttttttstuqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNtvoNoNoNoNoNoNoNoNoNoNoNoNtwtwtwtwtwtwtwtwtwtwtwtwtxtxtxtxtxtxtxpFtytztypFtxtxtxtxtxtxtxtxpZqzqztAtBtBtBtCqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNtDoNaMaMaMaMoNtEtFtGtHtHoNtItJtwtItKtwtLtMtwtItJtwtNtxtOtPtQtRtSpFtytztypFtTtUtVtWtWtxaMaMpZqzqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoLoNaMaMaMaMoNtEtFtGtHtHoNtItJtwtItKtwtLtMtwtItJtwtNtxtOtPtQtRtSpFtytztypFtTtUtVtWtWtxaMaMpZqzqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNtXoNoNoNoNoNoNtYtZtZtZuaoNubtMtwubuctwubtJtwubudtwtNtxueufufufufpFtytztypFtWtWtWtWtWtxaMaMugugugugugugugugugugugtxtxtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvoNuhuiujukulumoNuntZtZtZuaoNtwtwtwtwtwtwtwtwtwtwtwtwtNtxueufufufufpFpFtqpFpFtWtWtWtWtWtxuguguguguguguoupuqtxurururtxururururururururtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutuuuvuwuxuhtZtZtZtZuyoNuztZtZtZuAoNuBudtwtIudtwuCtJtwtItMtwtNtxuDuEuFuGuHtxuIuIuItxtWtWtWtWtWtxuJuKuJuLuMuguNuNuNuOurururuOuruPuQuPuruRuSuTtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVuWuXuVuVuVuYuWuZvavbvcoNvdtZtZtZtZveoNvftZtZtZvgoNubtJvhubtJtwubvitwubvjtwtNtxvktxvlvmvntxufufuftxvlvmvotxvptxvqvrvqvrvqugtxtxtxtxurururtxvsvtuPvuvsvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvoNuhoQoSoRswpooNuntZtZtZuaoNtwtwtwtwtwtwtwtwtwtwtwtwtNtxueufufufufpFpFtqpFpFtWtWtWtWtWtxuguguguguguguoupuqtxurururtxururururururururtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutuuuvuwuxuhtZtZtZtZtDoNuztZtZtZuAoNuBudtwtIudtwuCtJtwtItMtwtNtxuDuEuFuGuHtxuIuIuItxtWtWtWtWtWtxuJuKuJuLuMuguNuNuNuOurururuOuruPuQuPuruRuSuTtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVuWuXuVuVuVuYuWuZvavbvcoNvdtZtZtZtZuioNvftZtZtZvgoNubtJvhubtJtwubvitwubvjtwtNtxvktxvlvmvntxufufuftxvlvmvotxvptxvqvrvqvrvqugtxtxtxtxurururtxvsvtuPvuvsvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvoNvxtZtZtZtZvyoNvztZtZvAoNoNoNtvtvtvtvtvtvtvtvtvtvtvtNtxufufvBvCvCvCvCvCvCvCvCvCvDufufvEvqvqvqvqvqugvFuNuotxurururtxvGvGvHvGvGvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutvIvbvJoNvKLALzvMtZoNoNvNtZtZvOoNvPvQoNvRvRvRvRvRvRvSvTcZtvtNtxufufvVvWvXvXvXvXvXvXvXvYueufufugvZwawbwcwdugweuNuptxurururtxwfwfuNwfwfvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwgaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVwhuXuVuVuVuYwhwivavbwjoNtvoNoNoNtZoNwktZtZtZwloNwmwnwowpwpwpwpwpwpwqtvtvtvtvtvufufvVwrwsufwtwuwvufwswrueufufugugugugugugugweuNuptxurururtxwwwwuNwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutwxvbwyoNwzwAwBoNtZoNyBwDtZtZwEoNwmvMtvwFwGwGwGwHwGwItvwJwJwJtvufufwKwLwMwNwOwPwQwRwSwLwTufuftxwUwUwUwUwUtxtxuOtxtxtxuOtxtxuNuNuNuNuNvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutvIvbvJoNukujulvMtZoNoNumtZtZvOoNuyvQoNvRvRvRvRvRvRvSvTcZtvtNtxufufvVvWvXvXvXvXvXvXvXvYueufufugvZwawbwcwdugweuNuptxurururtxwfwfuNwfwfvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwgaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVwhuXuVuVuVuYwhwivavbwjoNtvoNoNoNtZoNvetZtZtZwloNwmwnwowpwpwpwpwpwpwqtvtvtvtvtvufufvVwrwsufwtwuwvufwswrueufufugugugugugugugweuNuptxurururtxwwwwuNwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumu +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutwxvbwyoNwzwAwBoNtZoNvNvKtZtZwEoNwmvMtvwFwGwGwGwHwGwItvwJwJwJtvufufwKwLwMwNwOwPwQwRwSwLwTufuftxwUwUwUwUwUtxtxuOtxtxtxuOtxtxuNuNuNuNuNvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwWoUoVoVoVqVwWwXwYvMwZoNxatZxboNxcoNoNoNxdoNoNoNwmwnxexfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNxouhxpoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhwkoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNvMyaoNoNoNoNoNyboNycwmydyeyfygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywyxtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyALyyZtZoNdjwmydyfyfygwmyDyEyFyhyGyHyIyJyKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNdjwmydyfyfygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNyQtZtZtZtZtZtZoNdjtZtZwqwqwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNyQtZtZtZtZtZyWoNyXtZtZyYtZtZwCzazbzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhzizjzkzloNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNyQtZtZtZtZtZyWoNyXtZtZyYtZtZwCyDyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhziyZzkzloNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNzAzBzBzAaMaMaMyhyIzCzDzEzDyhzszFzFzszGzHufzwtxzIwTufwKzJtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNzOzOzNzNzPaMyhyIyIyIyIyIyhzsztztzszQzHufzwtxueufufufvVtxaMaMaMaMaMaMaMaMaMaMaMzRzSzTzUaMaMaMaMaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaAbAcAcAdAdzNzPyhyhyhyhyhyhyhzszszszsAezHufzwtxAfAgAfAhAftxaMaMaMaMaMaMaMaMaMaMzRAiAjAkAlzUaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2129,16 +2125,16 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGbGbGbGbGlEHGiGmGmGmGmGmGiGiGiGmGmGmGmGnGoEHFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGpGqGqGbGbGrGiGiGsGtGsGiGiGiGiGiGsGtGsGuGiEHFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHFeEHEHEHEHEHEHEHEHGiGmGmGmGmGmGiGiGiGmGmGmGmGvGiEHEHEHEHEHEHEHFeEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAFeEHEHGwGwGwGwGwEHGxGxGxGxGxGxGxGxGxGxGxGxGxGyGxEHGzGzGzGzGzEHFeFeFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAFeEHEHzazazazazaEHGxGxGxGxGxGxGxGxGxGxGxGxGxGyGxEHzbzbzbzbzbEHFeFeFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHEHEHGAGAGAGAGAEHGBGCGCGCGCGCGCGCGCGCGCGCGCGDGBEHGAGAGAGAGAEHEHEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHGEGFGGGGGGGGGGGHGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGHGKGKGKGKGKGFGLEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHGEGFGGGMGGGMGGGHGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGHGKGNGKGNGKGFGLEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHGEGFGGGGGOGGGGGHGIGCGCGCGCGCGPGQGPGCGCGCGCGDGJGHGKGKGRGKGKGFGLEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHGEGFGGGGGGGGGGGHGIGCGCGCGCGCGSGTGSGCGCGCGCGDGJGHGKGKGKGKGKGFGLEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGU -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHGEGFGGGMGGGMGGGHGIGCGCGCGCGCGVGWGXGCGCGCGCGDGJGHGKGNGKGNGKGFGLEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGZGYGYGYHaHaHaGYGYHaHaHaGYGYGYGYGYGU +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGFGGGGGGGGGGGHGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGHGKGKGKGKGKGFGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGFGGGMGGGMGGGHGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGHGKGNGKGNGKGFGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGFGGGGGOGGGGGHGIGCGCGCGCGCGPGQGPGCGCGCGCGDGJGHGKGKGRGKGKGFGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGFGGGGGGGGGGGHGIGCGCGCGCGCGSGTGSGCGCGCGCGDGJGHGKGKGKGKGKGFGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGU +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGFGGGMGGGMGGGHGIGCGCGCGCGCGVGWGXGCGCGCGCGDGJGHGKGNGKGNGKGFGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGZGYGYGYHaHaHaGYGYHaHaHaGYGYGYGYGYGU aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHFbHbGGGGGGGGGGGHGIGCGCGCGCGCGCHcGCGCGCGCGCGDGJGHGKGKGKGKGKHbFbEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUHdGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYHeGU aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHHfEHHgHgHgHgHgEHGBGCGCGCGCGCGCHcGCGCGCGCGCGDGBEHHgHgHgHgHgEHHfEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHhGYGYGYGYGYGU -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFJHiFbEHHjHjHjHjHjEHGxGxGxGxGxGxHkHlHkGxGxGxGxGyGxEHHmHmHmHmHmEHFbHnFMEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHdGYGYGYGYGYGU +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFJHiFbEHGzGzGzGzGzEHGxGxGxGxGxGxHkHlHkGxGxGxGxGyGxEHGEGEGEGEGEEHFbHnFMEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHdGYGYGYGYGYGU aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHEHFbEHEHEHEHEHEHEHHoHpHpHpHpHpHqHrHoHpHpHpHpHsHoEHEHEHEHEHEHEHFbEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYHtHhGYGYGYGYGYGYGYGYGYGYGYGYGYGU aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFbFbFeFeFeFeFeEHHoHoHuHoHuHoHoHvHwHoHuHoHuHxHoEHFeFeFeFeFeFbFbEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGU aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHEHEHEHEHEHFeFYHoHoHoHyHyHyHoHoHoHyHyHyHyHyHoFYFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYHzHAGYGYGYGYGYGYGYGYGYGYGYGYGU @@ -2186,7 +2182,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIxHYIyIyIzHYIAIBICIDHYaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIEIEIcIcIcIFHYIyIyIyIGIyIyIyIHHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIIIJIKaMIIIJIKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcILHYIMINIOHYIPIQIRIDHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMISITIUIUIUIVISaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcItHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIIIJIWIJIXIYIZJaJbIYJcIJIWIJIKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJeJfJgIcJhJiJjJhJkJlJmJnJoHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMITIUIUIVISaMITIYJpJqJrIYIVaMISITIUIUIVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJeJfJgIcJhJiJjJhJkGLJmJnHjHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMITIUIUIVISaMITIYJpJqJrIYIVaMISITIUIUIVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJsJtJgIcJuJuJuJuJvJwJxJwJxHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYJyJzIYISITIYJAJBJCJBJDIYIVISIYJEJFIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJGJHJgIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYJIJJIYIUJKJLJDJBJMJBJDJLJKIUIYJNJOIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJPJQJgIcJuJuJuJuJuJuJRJSJTHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYJUJVIYIUJWJLJDJBJDJBJDJLJWIUIYJXJYIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2194,10 +2190,10 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcJuJuJuJuJuJuJuJuJuHYaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKeKfKfKgKfKfKfKgKfKfKfKgKfKfKhHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJKKiKjKjKjKjKjKjIYKjIYKjKjKjKjKjKjKiJKIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKkKlKlJkKmKnKoJkKpKpKqJkKrKsKtHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUKuKvKwKxKyKzIYKbIYKbIYKbIYKAKBKCKDKvKuIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKlKEKkJvKnKGKnJvKHKIKpJvKJKtKKHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIUJWKvJDJDJDKLIYJDJDJDJDJDIYJDJDKMJDKvJWIUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMITIYKNKOKPKQKRIYKSJDJDJDKTIYKUKVKWKXKNIYIVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYIYKZKZIYIYIYIYLaJDJDJDLbIYIYIYIYKZKZIYLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYLdLdLcaMaMIYLeJDJDJDLfIYaMaMKYLdLdLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYLgJDJDJDLfIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMITIYKNKOKPJlHmIYJoJDJDJDKQIYKUKVKWKXKNIYIVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYIYKZKZIYIYIYIYKRJDJDJDKSIYIYIYIYKZKZIYLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMKYLdLdLcaMaMIYKTJDJDJDLaIYaMaMKYLdLdLcaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYLbJDJDJDLaIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYLhLiLjLhLiIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYLkLlJDLmLnIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMIYLoLpJDLqLrIYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM diff --git a/maps/exodus-3.dmm b/maps/exodus-3.dmm index d361b0a7d7..b47e2af998 100644 --- a/maps/exodus-3.dmm +++ b/maps/exodus-3.dmm @@ -83,9 +83,9 @@ "bE" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bF" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bG" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bH" = (/obj/structure/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bI" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bJ" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bH" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bJ" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bK" = (/obj/machinery/power/apc{dir = 8; name = "west bump-derelict"; operating = 0; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bL" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bM" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) @@ -237,7 +237,7 @@ "eC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "eD" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat) "eE" = (/obj/machinery/camera{c_tag = "Telecoms Storage"; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/turret_protected/tcomsat) -"eF" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/turret_protected/tcomsat) +"eF" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/turret_protected/tcomsat) "eG" = (/obj/machinery/camera{c_tag = "West Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area/space) "eH" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera{c_tag = "West Wing Middle"; dir = 8; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat) "eI" = (/obj/machinery/telecomms/broadcaster/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -336,7 +336,7 @@ "gx" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/computer/power_monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Telecommunications Grid"; name_tag = "Telecommunications Grid"},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "gy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/entrance) "gz" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/fractal_reactor{mapped_in = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/tcommsat/entrance) -"gA" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) +"gA" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Telecommunications Main Breaker"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) "gB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/camera{c_tag = "Power Room West"; dir = 1; network = list("Tcomsat")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance) "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/tcommsat/entrance) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcommsat/entrance) @@ -381,7 +381,7 @@ "hq" = (/turf/simulated/floor/plating/airless,/area/AIsattele) "hr" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/AIsattele) "hs" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/AIsattele) -"ht" = (/obj/structure/rack,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating/airless,/area/AIsattele) +"ht" = (/obj/structure/table/rack,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating/airless,/area/AIsattele) "hu" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/AIsattele) "hv" = (/obj/item/weapon/cell,/turf/simulated/floor/plating/airless,/area/AIsattele) "hw" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/AIsattele) @@ -433,7 +433,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQagagagagagaEagagajacacaNafagagaEagagagaMapbsaabtakacacacacacacacakbsaaaaaUbjbublblblblbvblblbwbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxagagagagbyavatagagagagagagagagaEagagadakbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUaabzbAbdbdbdbdbdbdbdbAbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEbCbDbEagaMapakacacadatagagagagavacapbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavatbFbGaMapafbHbIbJajambKbLaGbMaHawbNacalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavatbFbGaMapafbHbJbIajambKbLaGbMaHawbNacalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtakadacapafagagagagagaEagagaMadamawawarasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbQbRagagagagagagbSbTaMapbsbtbUawarasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtacambVagagagagagavadapbsaaaabtbUarasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/exodus-4.dmm b/maps/exodus-4.dmm index 59c41cfb41..88ef671094 100644 --- a/maps/exodus-4.dmm +++ b/maps/exodus-4.dmm @@ -100,7 +100,7 @@ "bV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/djstation) "bW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/djstation) "bX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/djstation/solars) -"bY" = (/obj/structure/rack,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plating,/area/djstation) +"bY" = (/obj/structure/table/rack,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plating,/area/djstation) "bZ" = (/obj/machinery/mass_driver{dir = 4; id = "constructiondriver1"; name = "construction driver #1"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm/monitor{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/djstation) "ca" = (/obj/machinery/door/poddoor{id = "constructiondriver1"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/djstation) "cb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/djstation/solars) @@ -108,8 +108,8 @@ "cd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/storage/box/lights/mixed,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/djstation) "ce" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/djstation) "cf" = (/obj/machinery/telecomms/relay/preset/ruskie,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/djstation) -"cg" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/djstation) -"ch" = (/obj/structure/rack,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating,/area/djstation) +"cg" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/djstation) +"ch" = (/obj/structure/table/rack,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating,/area/djstation) "ci" = (/obj/machinery/driver_button{id = "constructiondriver2"; name = "Construction Driver #2"; pixel_x = 25; pixel_y = 7},/turf/simulated/floor/plating,/area/djstation) "cj" = (/obj/structure/lattice,/turf/space,/area/constructionsite/maintenance) "ck" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access_txt = "30"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) @@ -117,7 +117,7 @@ "cm" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/ai) "cn" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) "co" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/djstation) -"cp" = (/obj/structure/rack,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/djstation) +"cp" = (/obj/structure/table/rack,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/djstation) "cq" = (/obj/machinery/mass_driver{dir = 4; id = "constructiondriver2"; name = "construction driver #2"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm/monitor{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/djstation) "cr" = (/obj/machinery/door/poddoor{id = "constructiondriver2"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/djstation) "cs" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm index adc6d51955..454f3c4f1e 100644 --- a/maps/exodus-5.dmm +++ b/maps/exodus-5.dmm @@ -10,7 +10,7 @@ "aj" = (/obj/machinery/light/small,/obj/structure/transit_tube,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "ak" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "al" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/simulated/mineral,/area/mine/unexplored) -"am" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) +"am" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "an" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "ao" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "ap" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/space,/area/space) @@ -19,9 +19,8 @@ "as" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore1) "at" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore1) "au" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/unexplored) -"av" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/hallway) -"aw" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/hallway) -"ax" = (/obj/structure/transit_tube,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/hallway) +"av" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) +"aw" = (/obj/structure/transit_tube,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "ay" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/research_outpost/hallway) "az" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) "aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/transit_tube,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) @@ -43,7 +42,7 @@ "aQ" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/obj/structure/lattice,/turf/space,/area/space) "aR" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "N-S"},/turf/space,/area/space) "aS" = (/turf/simulated/wall/r_wall,/area/research_outpost/spectro) -"aT" = (/obj/structure/rack,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 5; pixel_y = 5},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/belt/utility{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plating,/area/research_outpost/maintstore1) +"aT" = (/obj/structure/table/rack,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 5; pixel_y = 5},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/belt/utility{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plating,/area/research_outpost/maintstore1) "aU" = (/turf/simulated/floor/plating,/area/research_outpost/maintstore1) "aV" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/research_outpost/maintstore1) "aW" = (/turf/simulated/wall,/area/research_outpost/maintstore1) @@ -277,7 +276,7 @@ "fq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) "fr" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plating,/area/research_outpost/power) "fs" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/research_outpost/power) -"ft" = (/obj/structure/sign/electricshock{pixel_x = 32},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes/buildable{capacity = 1e+007; charge = 1e+007; cur_coils = 2; input_attempt = 1; input_level = 500000; output_level = 500000},/turf/simulated/floor/plating,/area/research_outpost/power) +"ft" = (/obj/structure/sign/electricshock{pixel_x = 32},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes/buildable{capacity = 1e+007; charge = 1e+007; cur_coils = 2; input_attempt = 1; input_level = 500000; output_level = 500000; RCon_tag = "Research Outpost"},/turf/simulated/floor/plating,/area/research_outpost/power) "fu" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/research_outpost/power) "fv" = (/obj/machinery/light/small{dir = 8},/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "fw" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -299,7 +298,7 @@ "fM" = (/obj/structure/sign/science{desc = "A warning sign which reads 'ANOMALOUS MATERIALS'"; name = "\improper ANOMALOUS MATERIALS"; pixel_x = 32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/research_outpost/hallway) "fN" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "fO" = (/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) -"fP" = (/obj/structure/rack,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) +"fP" = (/obj/structure/table/rack,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "fQ" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "fR" = (/obj/machinery/light/small,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "fS" = (/obj/machinery/camera{c_tag = "Research Outpost Anomalous Materials Lab"; dir = 8; network = list("Research","SS13")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) @@ -357,7 +356,7 @@ "gS" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/research_outpost/hallway) "gT" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/research_outpost/hallway) "gU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/hallway) -"gV" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) +"gV" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) "gW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "gX" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "gY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -392,7 +391,7 @@ "hB" = (/obj/machinery/door/window/westleft{dir = 8; name = "Locker room"; opacity = 0; req_access_txt = "65"},/turf/simulated/floor,/area/research_outpost/hallway) "hC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/research_outpost/hallway) "hD" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/hallway) -"hE" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) +"hE" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) "hF" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "hG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "hH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -432,7 +431,7 @@ "ip" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access_txt = "47"},/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced,/turf/simulated/floor,/area/research_outpost/hallway) "iq" = (/obj/structure/closet/secure_closet/scientist,/obj/structure/window/reinforced,/turf/simulated/floor,/area/research_outpost/hallway) "ir" = (/obj/machinery/door/window/westleft{dir = 2; name = "Locker room"; opacity = 0; req_access_txt = "65"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/hallway) -"is" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/structure/window/reinforced,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) +"is" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/structure/window/reinforced,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) "it" = (/obj/machinery/door/window/westleft{dir = 2; name = "Monkey Pen"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "iu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "iv" = (/obj/machinery/door/firedoor/border_only{name = "\improper Firelock South"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -501,7 +500,7 @@ "jG" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) "jH" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned) "jI" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned) -"jJ" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/abandoned) +"jJ" = (/obj/structure/table/rack,/turf/simulated/floor,/area/mine/abandoned) "jK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/transit_tube{icon_state = "D-NE"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "jL" = (/obj/structure/transit_tube{icon_state = "S-NW"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/entry) "jM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/research_outpost/entry) @@ -628,7 +627,7 @@ "md" = (/turf/simulated/wall,/area/research_outpost/gearstore) "me" = (/obj/structure/closet/excavation,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/research_outpost/gearstore) "mf" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/research_outpost/gearstore) -"mg" = (/obj/structure/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/research_outpost/gearstore) +"mg" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/research_outpost/gearstore) "mh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "mi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/research_outpost/gearstore) "mj" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/research_outpost/gearstore) @@ -669,7 +668,7 @@ "mS" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/wall,/area/mine/explored) "mT" = (/obj/structure/closet/excavation,/turf/simulated/floor,/area/research_outpost/gearstore) "mU" = (/turf/simulated/floor,/area/research_outpost/gearstore) -"mV" = (/obj/structure/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/research_outpost/gearstore) +"mV" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/research_outpost/gearstore) "mW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "mX" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/gearstore) "mY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/research_outpost/gearstore) @@ -761,7 +760,7 @@ "oG" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso3) "oH" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/iso3) "oI" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) -"oJ" = (/obj/structure/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) +"oJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oK" = (/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) "oL" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/longtermstorage) "oM" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) @@ -786,15 +785,15 @@ "pf" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three"; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) "pg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) "ph" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) -"pi" = (/obj/structure/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) -"pj" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) +"pi" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) +"pj" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "pk" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral/random,/area/mine/unexplored) "pl" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pm" = (/obj/structure/transit_tube{icon_state = "D-NW"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pn" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) "po" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned) "pp" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"pq" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"pq" = (/obj/structure/table/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) "pr" = (/obj/structure/closet,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "ps" = (/obj/machinery/door/window/westleft{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pt" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -820,12 +819,12 @@ "pN" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) "pO" = (/obj/structure/transit_tube{icon_state = "E-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pP" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) -"pQ" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"pQ" = (/obj/structure/table/rack,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pR" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) "pS" = (/obj/structure/table,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pU" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"pV" = (/obj/structure/rack,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"pV" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pW" = (/obj/structure/transit_tube{icon_state = "N-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "pX" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/mine/explored) "pY" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SE"},/turf/space,/area/mine/explored) @@ -905,9 +904,9 @@ "ru" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "rv" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "rw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"rx" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"ry" = (/obj/structure/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"rz" = (/obj/machinery/light_construct/small,/obj/structure/rack,/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"rx" = (/obj/machinery/light_construct/small,/obj/structure/table/rack,/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"ry" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"rz" = (/obj/item/weapon/table_parts,/obj/structure/table/rack,/obj/item/stack/sheet/glass/reinforced{amount = 8},/obj/item/stack/rods{amount = 6},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "rA" = (/turf/simulated/mineral/random/high_chance,/area/mine/unexplored) "rB" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) "rC" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) @@ -926,8 +925,8 @@ "rP" = (/obj/structure/stool/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "rQ" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "rR" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"rS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/decal/cleanable/cobweb,/obj/item/stack/sheet/metal{amount = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/north_outpost) -"rT" = (/obj/machinery/power/smes/buildable{charge = 1e+007; input_level = 500000; input_attempt = 1; cur_coils = 4; output_level = 500000},/turf/simulated/floor/plating,/area/mine/north_outpost) +"rS" = (/obj/effect/decal/cleanable/cobweb,/obj/item/stack/sheet/metal{amount = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/north_outpost) +"rT" = (/turf/simulated/floor/plating,/area/mine/north_outpost) "rU" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_north_outpost_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null; req_one_access = list(13,54); req_one_access_txt = null},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "rV" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_north_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "rW" = (/obj/structure/closet/walllocker/emerglocker/south,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) @@ -938,24 +937,24 @@ "sb" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "sc" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "sd" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/mine/north_outpost) -"se" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/mine/north_outpost) -"sf" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/mine/north_outpost) +"se" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/mine/north_outpost) +"sf" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/mine/north_outpost) "sg" = (/obj/machinery/conveyor_switch{id = "mining_north"; pixel_x = -5},/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "sh" = (/obj/item/weapon/pickaxe,/obj/item/weapon/shovel,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"si" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/camera{c_tag = "North Outpost"; dir = 8; network = list("MINE")},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"si" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/camera{c_tag = "North Outpost"; dir = 8; network = list("MINE")},/obj/effect/decal/cleanable/blood/oil,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "sj" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/mine/north_outpost) "sk" = (/obj/machinery/light/small{dir = 4},/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/mine/north_outpost) "sl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"sm" = (/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"sn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"so" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/north_outpost) -"sp" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/deliveryChute{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"sq" = (/obj/machinery/mineral/output,/obj/machinery/conveyor{dir = 8; id = "mining_north"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"sr" = (/obj/machinery/mineral/unloading_machine{icon_state = "unloader-corner"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"ss" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_north"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"st" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/north_outpost) -"su" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"sv" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/obj/item/stack/sheet/glass/reinforced{amount = 8},/obj/item/stack/rods{amount = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"sm" = (/obj/structure/disposalpipe/junction/yjunction,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"sn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/mine/north_outpost) +"so" = (/obj/machinery/mineral/output,/obj/machinery/conveyor{dir = 8; id = "mining_north"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"sp" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/deliveryChute{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"sq" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_north"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"sr" = (/obj/machinery/mineral/unloading_machine{icon_state = "unloader-corner"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"ss" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"st" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/north_outpost) +"su" = (/obj/structure/table/rack,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/mine/west_outpost) +"sv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "sw" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/mine/north_outpost) "sx" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/meter,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/mine/north_outpost) "sy" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8; initialize_directions = 0; level = 1},/turf/simulated/floor/plating,/area/mine/north_outpost) @@ -965,9 +964,9 @@ "sC" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) "sD" = (/turf/simulated/mineral/random/high_chance,/area/mine/explored) "sE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"sF" = (/turf/simulated/floor/airless,/area/space) -"sG" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"sH" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"sF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"sG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"sH" = (/turf/simulated/floor/airless,/area/space) "sI" = (/turf/simulated/mineral/random,/area/space) "sJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "sK" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) @@ -1050,8 +1049,8 @@ "uj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/west_outpost) "uk" = (/obj/machinery/recharge_station,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/mine/west_outpost) "ul" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/mine/west_outpost) -"um" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/mine/west_outpost) -"un" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/west_outpost) +"um" = (/obj/structure/table/rack,/turf/simulated/floor,/area/mine/west_outpost) +"un" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/weapon/mining_scanner,/turf/simulated/floor,/area/mine/eva) "uo" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/mine/west_outpost) "up" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/west_outpost) "uq" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) @@ -1082,7 +1081,7 @@ "uP" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "uQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/west_outpost) "uR" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/mine/west_outpost) -"uS" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"uS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "uT" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "uU" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "uV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) @@ -1090,7 +1089,7 @@ "uX" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "uY" = (/turf/simulated/floor,/area/mine/living_quarters) "uZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/living_quarters) -"va" = (/obj/structure/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/weapon/mining_scanner,/turf/simulated/floor,/area/mine/eva) +"va" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/rack,/obj/item/weapon/rig/industrial,/turf/simulated/floor,/area/mine/living_quarters) "vb" = (/obj/machinery/suit_cycler/mining,/turf/simulated/floor,/area/mine/eva) "vc" = (/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "vd" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/mine/west_outpost) @@ -1114,7 +1113,6 @@ "vv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/living_quarters) "vw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/mine/living_quarters) "vx" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/simulated/floor,/area/mine/living_quarters) -"vy" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/weapon/rig/industrial,/turf/simulated/floor,/area/mine/living_quarters) "vz" = (/turf/simulated/wall,/area/mine/production) "vA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production) "vB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production) @@ -1133,7 +1131,7 @@ "vO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production) "vP" = (/obj/machinery/alarm{pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/stack/flag/yellow,/obj/item/stack/flag/red,/turf/simulated/floor,/area/mine/production) "vQ" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/mine/production) -"vR" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/production) +"vR" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "vS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/mine/eva) "vT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/eva) "vU" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/mine/eva) @@ -1172,7 +1170,7 @@ "wB" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/mine/production) "wC" = (/turf/simulated/floor,/area/mine/production) "wD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/production) -"wE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/mine/production) +"wE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "wF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access_txt = "54"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/mine/eva) "wG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/mine/eva) "wH" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/mine/eva) @@ -1213,9 +1211,9 @@ "xq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera{c_tag = "Production Line External"; dir = 1; network = list("MINE")},/turf/simulated/floor/plating,/area/mine/eva) "xr" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/plating,/area/mine/west_outpost) "xs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/mine/west_outpost) -"xt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes/buildable{charge = 5e+006; cur_coils = 1; input_attempt = 1; input_level = 250000; output_level = 250000},/turf/simulated/floor/plating,/area/mine/living_quarters) +"xt" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "xu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"xv" = (/obj/machinery/conveyor_switch{id = "mining_west"; pixel_y = 10},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"xv" = (/obj/structure/ore_box,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "xw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/mine/living_quarters) "xx" = (/obj/machinery/light,/turf/simulated/floor,/area/mine/living_quarters) "xy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/mine/living_quarters) @@ -1256,9 +1254,9 @@ "yh" = (/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) "yi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) "yj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) -"yk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/living_quarters) +"yk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/mine/production) "yl" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/mine/living_quarters) -"ym" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/plating,/area/mine/living_quarters) +"ym" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/mine/production) "yn" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters) "yo" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "mining_west_pump"},/obj/structure/closet/walllocker/emerglocker/west,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/living_quarters) "yp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/living_quarters) @@ -1273,7 +1271,7 @@ "yy" = (/obj/machinery/sleep_console,/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/mine/living_quarters) "yz" = (/obj/machinery/camera{c_tag = "Sleeper Room"; dir = 1; network = list("MINE")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) "yA" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) -"yB" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plating,/area/mine/living_quarters) +"yB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "yC" = (/turf/simulated/floor/plating,/area/mine/living_quarters) "yD" = (/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Mining Outpost Grid"; name_tag = "Mining Outpost Grid"},/obj/structure/cable,/turf/simulated/floor/plating,/area/mine/living_quarters) "yE" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/plating,/area/mine/living_quarters) @@ -1311,7 +1309,7 @@ "zk" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/production) "zl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/mine/production) "zm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production) -"zn" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"zn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/mine/production) "zo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) "zp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "zq" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_outpost_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/mine/production) @@ -1354,18 +1352,28 @@ "Ab" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "Ac" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "Ad" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"Ae" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"Af" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"Ae" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) +"Af" = (/obj/machinery/conveyor_switch{id = "mining_west"; pixel_y = 10},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "Ag" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"Ah" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"Ah" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) "Ai" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) "Aj" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/mine/west_outpost) "Ak" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 28},/obj/item/weapon/storage/box/lights/bulbs,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/mine/west_outpost) "Al" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/mine/west_outpost) -"Am" = (/turf/simulated/floor/plating,/area/mine/west_outpost) +"Am" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/mine/west_outpost) "An" = (/obj/machinery/light/small,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/mine/west_outpost) -"Ao" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"Ap" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) +"Ao" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/ore_box,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"Ap" = (/obj/structure/ore_box,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) +"Aq" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes/buildable{capacity = 1e+007; charge = 1e+007; cur_coils = 2; input_attempt = 1; input_level = 250000; output_level = 250000; RCon_tag = "Mining Outpost"},/turf/simulated/floor/plating,/area/mine/living_quarters) +"Ar" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/mine/living_quarters) +"As" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/living_quarters) +"At" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters) +"Au" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/mine/living_quarters) +"Av" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) +"Aw" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) +"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) +"Az" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1409,9 +1417,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadababababababababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaafagahahaiaiaiaiaiajaiakalabababababababababamanaoaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaafapaqababababababarararasatalabababauavawawaxayazaAaBaBahaBaCaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadababababababadadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaafagahahaiaiaiaiaiajaiakalababababadadadadamananaoaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaafapaqababababababarararasatalabababauavaiaiawayazaAaBaBahaBaCaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaEaqabababababababaraFaGaHasataIaraJaKaLaMaMaMaNaOaMaMaMaMaeaPaQaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaRababababababababaSaTaUaVaWaXaYaZbabbbcbdbebcbfbgbcbhbdaMaeaebibjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababbkbkababbkbkbkbkabbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaRabababababaSaSaSaSblbmaUbnbobpbpbpbqbcbrbsbtbubvbwbxbyaMaeaebzbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1438,13 +1446,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnyohhhgDewoiewojokewhjewojokewhilYewmOolcqjFewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonoonGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewoNgFhjjFfAhikzhiiNhhewojoOoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpapboEpcpdpeoGpfpgphoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewgFjFpniKdohhgFewhifAewpopppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCpEpFpGoEpHpIpJoGpKpLpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewjFdViNgFhifAiNewoiewewjHcqpppQpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpVgygygygygygygygypWpXaaaaaaaaaaaepYpZqaqbqcqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewjHcqjIcqpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpVgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewjFdViNgFhifAiNewoiewewjHcqpppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqaqbqcqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewjHcqjIcqpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewjHjIjIjIjJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTqUqVaiaiaiaiqWaiaiaiaiaiqXqYqZraogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkewewewewewewewewewewewewewewoQrbrcewewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygygypBrfpCrgrhrigygygygyonrjrkababbkbkbkbkbkbkbkbkrlrmrnroadqKadadqKabababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewppppjIewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewrtrurtewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygygygygygygygygygyaaaaaaaaaaaaaaaaesesesababababesesesgygygygygyrvgygydXgygypzpzpzbkbkbkbkbkbkbkbkbkbkbkbkkDbkadqubkabbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadewrwrboQewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesrxryrzgygygygygyesesesaaaaaaaaaaaaaaaaaaababababababababesesesgygygyrvgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadewrwrboQewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesespVryrxgygygygygyesesesaaaaaaaaaaaaaaaaaaababababababababesesesgygygyrvgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadrBrCrDadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesmResgygymQmQesababaaaaaaaaaaaaaaaaaabkbkbkbkbkabababababesesgygyrvgygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadadadrEadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababesesesesesesababaaaaaaaaaaaaaaaaaabkbkbkbkbkababababababesgygyrvgygygydXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkbkbkbkabababbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadadadadadrEadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababaaaaaaaabkbkaaaaaaaabkbkbkbkbkbkbkbkababesgygyrFrGgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1454,109 +1462,109 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygygyrvgygygygyrJrKrLrMrNrOrPrQrRrIrSrTrIbkbkbkbkbkbkbkbkbkbkabababbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesesgygyrvgygygygyrUrVrWrXrYrZsasbscsdsesfrIbkbkbkbkbkbkbkbkbkbkbkbkababbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaabaaaaaaaabkbkbkbkbkbkbkabababesgygyrvgygygygyrIrIrIrIrIrIsgshsirIsjskrIbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkbkbkaaaabkbkbkbkbkbkbkbkbkabesgygyrFslsmsnsnsospsqsrssstsusasvswsxsyrIbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkbkbkaaaaaabkbkbkbkbkbkbkbkabesgygygygyrvgygyrIrIrIrIszrIrIrIrIrIrIrIrIbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkabesesgygygyrvgygygygysAsBsCsCdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyrJrhrigygygygygygygydXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygypBrppCgygygygygygygydXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkabesgygygyrvgygygygygygygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaarAaaaabkbkbkbkbkbkbkbkabesgygygyrvgygyesmQesdXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkrArAaaaabkbkbkbkbkbkbkabesgygygyrvgygyesesesbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaabkbkrAaaaaaabkbkbkbkbkbkabesesgygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkababesgygyrvgyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkababesgygyrvgygyesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaadXdXaaaaaaaaaaaabkbkbkababesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaadXdXsDaaaaaaaaaaaabkbkbkababesgygyrFrGgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaasDaaaaaaaaaaaaaaaabkbkbkababesgygygyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLrArArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaeaeaeaeaeaeaeaedXdXbkbkababesmRsEgyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXsFsFsFsFsFsFsFsFdXdXdXbkababesesgygyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXaeaeaeaeaeaeaeaedXbkbkbkababesgygygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaabkbkbkbkababesgygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkababesgygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkabbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkabababesgygyrJrhrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabbkbkababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkabababesgygypBrppCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkabababesesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkbkababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkababababesgysGsHgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababesesgyrvgygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababesgygyrvgyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkababbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababesesgygyrvnDmRababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababesgygysGsHgyesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesesesgygyrvgygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesgygygygyrvgygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyrvgygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArArAqLqLqLrArArArArArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyrvgygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyrvgygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyrvgygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaasIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygyrvgygygyesesabababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyrvgygygygyesesesesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyrvgygygygygygygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyrvgyrJrigygygygygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygyrFslsJsKslslslrGgygyesesesbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaagygygygygygygygypBpCgygygyrvgygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaesesgysLgygygygygygygygyrFslrGgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaabesesmResesesesesesgygygygyrvgygygyesesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaababababababababesesgygygyrvgygygygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArAqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaeaeaeaeaeaeaeaeaeaeaeesesesesabababababesesgygyrFslslrGgygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXdXsFsFsFsFsFsFsFsFsFsFsFsFsFsFdXdXdXdXbkabababesgygygygygyrvgygygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedXdXbkbkbkababesesgygygygyrFslslrGgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababesesesesgysMgygyrvgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaabkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabababesesmRgygyrvgygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLrAqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadbkbkbkbkadadaaaaaaaaaaaaaabkbkbkbkbkbkbkabababababesesgyrFslrGgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadadaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkababababesgygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkababababesesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkabababababesgyrJrhrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaabkbkbkadadaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkabababababesgypBrppCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkababababesesesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLrAqLrArArArAqLqLrArArAqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArArArArAqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgygygygygygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgysGslslslslsHgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgyrvgygygygysLgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgyrvgygygygymResesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkababesgyrvgygygyesesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkababesgyrvgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLrArArArArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkabesesgyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLrArArArAqLrAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkababesgygyrvgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLqLrArArArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesesgysGsHgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLrArArArArArAqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLrArArAqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababmRsErJrhrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababesgypBrppCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLesesesqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLesgygyesqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXaeaeaeaeaeaeaeaeaeaedXdXbkbkbkbkbkababesgygyrvgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLgygygygyqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXsNsNsNsNsNsNsNsNsNdXdXdXbkbkbkbkbkababesesgyrvgygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLgygygygyqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaeaeaeaeaesDsDaeaeaedXdXbkbkbkbkbkbkabababesgyrvgygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLgygygygyesesesesqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaasDsDsDsDaaaaaabkbkbkbkbkbkbkbkababesesgyrvgygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLrArArArArArAqLqLqLqLgygygygygyesesesqLqLqLabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaasDsDsDsDaaaaaaaabkbkbkbkbkbkbkbkababesgygyrvgygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLrArAqLqLqLqLrArArAqLqLqLqLqLqLqLgygygygygyesesqLqLqLqLabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaasDsDaaaaaaaaaabkbkbkbkbkbkbkbkabesesgygyrvgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLrArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLsOgysOgyesesesqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabesgygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArArAqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLsPsQsPgyesqLqLqLqLabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesesgygygyrvgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArArArArAqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsTqLqLqLqLqLababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsUqLqLqLqLqLabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLgygyqwqCsVsWsWsWsWsWsWsXsSsUqLqLqLqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYsYsYsYsYsYsYbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyrvnDmRabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLgygygygysQsZsZsZsZsZsZsZtatbsUqLqLqLqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYtctdtetftcsYbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabesesgygygyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLesgygygyqwtgrerererererethsStitjqLqLqLqLqLesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYtctktltmtnsYbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygygyrvgyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLrArArAqLqLqLqLqLqLesesesgygygygyqLqLqLqLqLqLsRsSsUqLqLqLgygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqFtotpbktqsYsYsYtrsYsYsYbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkababesgygygyrvgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLababesesgygygyqLqLqLqLqLqLqLsRsSsUqLgygygygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktstpttbktqtutvtqtwtqesesabababababaaaaaaaaaaaaaaaaaaaaaaabbkbkbkbkbkbkbkbkababesesgygyrvgygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrAababesesesgygyqLqLqLqLqLqLqLtxsSsUgygygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqFmRabtqtytztAtwtqgyesesababababaaaaaaaaaaaaaaaaaaaaababbkbkbkbkbkbkbkbkabababgygygyrvgygygygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAababqLqLqLqLqLqLqLqLqLqLqLsOsQsOgygygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktBbkabtqtqtqtqtCtqgygyesesmResesaaaaaaaaaaaaaaaaaaaaaaababbkbkbkbkababababababesgygyrvgygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAababqLqLqLqLqLqLqLqLqLgygysPgysPgygygygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktDbkbktqtutEtqtwtFgygygygytGgyesesaaaaaaaaaaaaaaaaaaaaababababababababababababesgygyrvgygygygygygygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLgygygygygygygygytHtHtHgygygyesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababbkbkbkbkbkbkbkbkbkbkbkbktDbkbktqtytztItwtJgygygygygygygygygyaaaaaaaaaaaaaaaaaaaaababababababkDmRmRmRmRmRgygyrvgygygygygygygygyadesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLrArArArArArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLgygygygygygygygytKtLtMgygygyesabababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesesesesesesababababababababbkbkbkbkbkbkbkbkbkbktqtNtqtqtqtqtqtqtwtOgygygygygygygygygygygyaaaaaaaaaaaaaaaaaaabababababmRtPsCtQtQtRgyrJrhrigygygygygygygyadadesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLgygytStStStStStStTtUtVtStStStStSgygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesgygygygygyesesesesesabababababababbkbkbkbktqtqtqtqtWtXtYtqtutZtqtCtqtqtquaubuctqgygygygygygyaaaaaaaaaaaaaaaaaaabababesmRudowueueufgypBrppCgygygygygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkabbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLrArArArArAqLqLesgygygytSuguhuiujukulumunuoupuqurusrigygyesesesesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygygygyesesesesesababababbkbkbktqutuuuvuwuuuutqtytzuxtwtquyuzuAuBuAtFgygygygygygygyaaaaaaaaaaaaaaaaaaesesesmRuCuDuEuEpCgygyuFuGuHuIuGuGgygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLrArArAqLqLqLqLqLqLqLqLrArArAqLqLabesgygygytSuJuKuLuMuKuKuKuKuNuOuPuQuRuSgygygygygyesesesabababababababbkbkbkbkbkbkbkbkbkbkbkbkababesesmRgygygygygygygygygygygygygygygyesesababababababtquTuuuUuVuWuXtqtqtqtqtwtquyuYuYuZuYtJgygygygygygygyaaaaaaaaaaaaaaaaaagygygygygygygygygygygyuFvavavavbuGgyvcgygygynDmResababbkbkbkbkbkbkbkbkbkbkababbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLabesgygygytSvdvevfvgvhvfvfvivjupvkvlvmpCgygygygygygygyesesesesababababababbkbkbkbkbkbkbkbkbkababesesgytGgygygygygygygygygygygygygygygygyesesesesabababtqvnuuvovpvqvrvsvtvuvvvwtquyuYvxuZvytOgygygygygygyaaaaaaaaaaaaaaaaaaaaaaaagygygygygyvzvzvAvBuFvCvDvDvEuGuGuGuGgygygygyesesababbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkesesgygytSvFuKuKujvGuKuKvHtStStStStStSrJrigygygygygygygygyesesesabababababbkbkbkbkbkbkbkabababesgygygygygygygygygygygyrJrigygygygygygygygygyesesababtqtqtqtqtqtqtqvIvJvKvIvJtqtqtqtqvLtqtqtqvMvNgygyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygyvOvBvPvQvRvSvTvTvTvUvVvWvXvYrigygygymQesababbkbkbkbkbkbkbkabababbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLbkbkabesgygytSvZwawbuMwcwdweuKwfwgwhwiwjwkAhyjxNxNxNxNxNxMgygygygyesesesabababababbkbkbkababababesesgygyAcxNxNxNxNxNxNxNxNzpyjxNxNxNxNxMgygygygygyesabababababtqwlwmwnuYuYtwuYuYwowpwqwruZwswtwtwuwvubucwwwxwxwxwxwxwxwxwywywywywywywyvAwzwAwBwCwDwEwFwGwHwHwIwJwKwLwMwNgygygymQesababbkbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLbkbkabesgygytStStStStSwOwPwQtStSwRtStStStSAipCgygygygygyxugygygygyesgyesesababababababababababesesgygygyxugygygygygygygygypBpCgygygygyxugygygygygyesesmResesabtqtqtqtqwSwTwUvvvvvvwVwWwXwYwXwZxaxbxcwXxcxdxdxdxdxdxdxdxdxexexexexexexexfxgxfxhxgxiwCxjxkxlxmxnvVxoxpxqpCgygygygyesesababbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLbkbkabesesgygygygygytSxrxsAjAktSsCxvsAgygyAfgygysMgygygyAbxNxNxMgygygygyesababababababababababesgygyAcxNAdgygygygyesgygysMgygygygygygyxugygygygygygygytGgyesesesesestquYuZuYuYuYuYxwuZxxxyuYxzuYxAxBubucxCxCxCxCxCxCxCxCxDxDxDxDxDxDxEvAwzxFxGwCxHwCxIvzvzvzvzvzvzvzvzuDuDxJuDqFmQesababbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkabesesgygygygytSxKxLAnAmAlAoAoAoAoAoApesesmResgygygygygyxugygygygygyesabababababesesesesesgyAcAdgygygyesesesesesesmRgygygygygygyxugygygygygygygygygygygyesestqtqxOxPxOtqtqxQxRxStqtqxOxTxOtqxUgygygyaaaaaaaaaeaaaaaaaeaaaaaaaaaaaeaaxVvBwCxWxXxYxZyayaybvzycydyeyfyfyfyfqFgyesababbkbkbkbkabababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkabesesgygygytStStStStStSgygyesesesesesababesesgygygygyxugygygygygygyesesesesesesgygygygygyxugygyesesesabababababesgygygygygygyxugygygyrJrigygygygygygygyestqygyhyiyhtqxtykylymyntqyoypyqtqgygygygygygyaaaaaeaaaaaaaeaeaeaeaeaeaeaeaevzyrysytvzvzvzvzyuvzyvvzvzywqFqFqFqFgyesababbkbkbkababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkababesgygygygygygygygygygygyesabababababababesesgygygyAbxNxNxNxMgygygygygygygygygygygygygyxugyesesabababababababesesgygygygygyAbxNxNxNzpyjxNxNxNxMgygygygytqyxyyyzyAtqyByCyDyEyntqyFyGyHtqgygygygygygyaeaeaeaeaeaeaeyIyIyIyIyIaeaaaavzyJyKwCyLyMyNyayayOyaybvzgygygygygyesesababbkbkabababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkbkbkaaaabkbkbkbkbkbkbkbkbkabesgygyrFslsmxNxNsnspsosrsqstsssvrzswsxsyrIbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkbkbkaaaaaabkbkbkbkbkbkbkbkabesgygygygyxugygyrIrIrIrIszrIrIrIrIrIrIrIrIbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkabesesgygygyxugygygygysAsBsCsCdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyrJsFrigygygygygygygydXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygypBsGpCgygygygygygygydXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkabesgygygyxugygygygygygygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaarAaaaabkbkbkbkbkbkbkbkabesgygygyxugygyesmQesdXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaabkrArAaaaabkbkbkbkbkbkbkabesgygygyxugygyesesesbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaabkbkrAaaaaaabkbkbkbkbkbkabesesgygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkababesgygyxugyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkababesgygyxugygyesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaadXdXaaaaaaaaaaaabkbkbkababesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaadXdXsDaaaaaaaaaaaabkbkbkababesgygyAbxMgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaasDaaaaaaaaaaaaaaaabkbkbkababesgygygyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLrArArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaeaeaeaeaeaeaeaedXdXbkbkababesmRsEgyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXsHsHsHsHsHsHsHsHdXdXdXbkababesesgygyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXaeaeaeaeaeaeaeaedXbkbkbkababesgygygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaabkbkbkbkababesgygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkababesgygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkabbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkabababesgygyrJsFrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabbkbkababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkabababesgygypBsGpCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkabababesesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkbkababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkababababesgyAcAdgyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababesesgyxugygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababesgygyxugyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkababbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababesesgygyxunDmRababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababesgygyAcAdgyesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesesesgygyxugygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesgygygygyxugygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyxugygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLrArArArArArAqLqLqLrArArArArArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyxugygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyxugygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygyxugygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaasIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygyxugygygyesesabababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyxugygygygyesesesesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyxugygygygygygygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygyxugyrJrigygygygygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygyAbxNzpyjxNxNxNxMgygyesesesbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaagygygygygygygygypBpCgygygyxugygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaesesgysLgygygygygygygygyAbxNxMgygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaabesesmResesesesesesgygygygyxugygygyesesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaababababababababesesgygygyxugygygygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArAqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaeaeaeaeaeaeaeaeaeaeaeesesesesabababababesesgygyAbxNxNxMgygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXdXsHsHsHsHsHsHsHsHsHsHsHsHsHsHdXdXdXdXbkabababesgygygygygyxugygygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedXdXbkbkbkababesesgygygygyAbxNxNxMgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababesesesesgysMgygyxugygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaabkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabababesesmRgygyxugygygyesesabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLrAqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadbkbkbkbkadadaaaaaaaaaaaaaabkbkbkbkbkbkbkabababababesesgyAbxNxMgygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadadaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkababababesgygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkababababesesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaadadbkbkbkadadaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkabababababesgyrJsFrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaabkbkbkadadaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkabababababesgypBsGpCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkababababesesesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLrAqLrArArArAqLqLrArArAqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArArArArAqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgygygygygygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArArArArAqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgyAcxNxNxNxNAdgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgyxugygygygysLgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkababesgyxugygygygymResesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkababesgyxugygygyesesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArArArArArArAqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkababesgyxugygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLrArArArArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkabesesgyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLrArArArAqLrAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkababesgygyxugyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLqLrArArArArArAqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesesgyAcAdgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArArAqLqLqLrArArArArArAqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLrArArAqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababmRsErJsFrigyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkababesgypBsGpCgyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLesesesqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLesgygyesqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXaeaeaeaeaeaeaeaeaeaedXdXbkbkbkbkbkababesgygyxugygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLgygygygyqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXsNsNsNsNsNsNsNsNsNdXdXdXbkbkbkbkbkababesesgyxugygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLrArArAqLqLqLqLqLqLgygygygyqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaeaeaeaeaesDsDaeaeaedXdXbkbkbkbkbkbkabababesgyxugygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLrArArArArAqLqLqLqLgygygygyesesesesqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaasDsDsDsDaaaaaabkbkbkbkbkbkbkbkababesesgyxugygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLrArArArArArAqLqLqLqLgygygygygyesesesqLqLqLabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaasDsDsDsDaaaaaaaabkbkbkbkbkbkbkbkababesgygyxugygygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLrArAqLqLqLqLrArArAqLqLqLqLqLqLqLgygygygygyesesqLqLqLqLabbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaasDsDaaaaaaaaaabkbkbkbkbkbkbkbkabesesgygyxugygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLrArArArArArArAqLqLqLqLqLrArAqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLsOgysOgyesesesqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabesgygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLrArArArArArArAqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLsPsQsPgyesqLqLqLqLabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesesgygygyxugygyesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArArArArAqLqLqLqLqLrArArAqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsTqLqLqLqLqLababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLrAqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsUqLqLqLqLqLabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLgygyqwqCsVsWsWsWsWsWsWsXsSsUqLqLqLqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYsYsYsYsYsYsYbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabesgygygygyxunDmRabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArAqLqLqLqLqLqLqLqLqLqLgygygygysQsZsZsZsZsZsZsZtatbsUqLqLqLqLqLqLababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYtctdtetftcsYbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkabesesgygygyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLesgygygyqwtgrerererererethsStitjqLqLqLqLqLesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbksYtctktltmtnsYbkbkbkbkabaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkababesgygygyxugyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAqLrArArAqLqLqLqLqLqLesesesgygygygyqLqLqLqLqLqLsRsSsUqLqLqLgygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqFtotpbktqsYsYsYtrsYsYsYbkbkbkababaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkababesgygygyxugyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLababesesgygygyqLqLqLqLqLqLqLsRsSsUqLgygygygygyesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktstpttbktqtutvtqtwtqesesabababababaaaaaaaaaaaaaaaaaaaaaaabbkbkbkbkbkbkbkbkababesesgygyxugygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrAababesesesgygyqLqLqLqLqLqLqLtxsSsUgygygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqFmRabtqtytztAtwtqgyesesababababaaaaaaaaaaaaaaaaaaaaababbkbkbkbkbkbkbkbkabababgygygyxugygygygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAababqLqLqLqLqLqLqLqLqLqLqLsOsQsOgygygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktBbkabtqtqtqtqtCtqgygyesesmResesaaaaaaaaaaaaaaaaaaaaaaababbkbkbkbkababababababesgygyxugygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLrArArAababqLqLqLqLqLqLqLqLqLgygysPgysPgygygygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktDbkbktqtutEtqtwtFgygygygytGgyesesaaaaaaaaaaaaaaaaaaaaababababababababababababesgygyxugygygygygygygyesesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLqLqLqLrArArArArAqLqLqLqLqLqLqLqLqLgygygygygygygygytHtHtHgygygyesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababbkbkbkbkbkbkbkbkbkbkbkbktDbkbktqtytztItwtJgygygygygygygygygyaaaaaaaaaaaaaaaaaaaaababababababkDmRmRmRmRmRgygyxugygygygygygygygyadesesababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLrArArArArArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLqLqLqLqLqLgygygygygygygygytKtLtMgygygyesabababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesesesesesesababababababababbkbkbkbkbkbkbkbkbkbktqtNtqtqtqtqtqtqtwtOgygygygygygygygygygygyaaaaaaaaaaaaaaaaaaabababababmRtPsCtQtQtRgyrJsFrigygygygygygygyadadesababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLrArArArArArAqLqLqLqLgygytStStStStStStTtUtVtStStStStSgygygyesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesgygygygygyesesesesesabababababababbkbkbkbktqtqtqtqtWtXtYtqtutZtqtCtqtqtquaubuctqgygygygygygyaaaaaaaaaaaaaaaaaaabababesmRudowueueufgyuSvRufgygygygygygygygygyesesabababbkbkbkbkbkbkbkbkbkbkbkabbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArArArArAqLqLqLqLqLqLqLrArArArArAqLqLesgygygytSuguhuiujukulsuumuoupuqurussCsCriesesesesababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygygygyesesesesesababababbkbkbktqutuuuvuwuuuutqtytzuxtwtquyuzuAuBuAtFgygygygygygygyaaaaaaaaaaaaaaaaaaesesesmRuCuDuEuEpCgywEuFuGuHuIuGuGgygygygygygyesabababbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLrArArAqLqLqLqLqLqLqLqLrArArAqLqLabesgygygytSuJuKuLuMuKuKuKuKuNuOuPuQuRxtowufgygygyesesesabababababababbkbkbkbkbkbkbkbkbkbkbkbkababesesmRgygygygygygygygygygygygygygygyesesababababababtquTuuuUuVuWuXtqtqtqtqtwtquyuYuYuZuYtJgygygygygygygyaaaaaaaaaaaaaaaaaagygygygygygygygygygyAiuFunununvbuGgyvcgygygynDmResababbkbkbkbkbkbkbkbkbkbkababbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLrArArAqLqLqLqLqLqLqLqLqLqLqLqLqLabesgygygytSvdvevfvgvhvfvfvivjupvkvlvmxvowufgygygygygyesesesesababababababbkbkbkbkbkbkbkbkbkababesesgytGgygygygygygygygygygygygygygygygyesesesesabababtqvnuuvovpvqvrvsvtvuvvvwtquyuYvxuZvatOgygygygygygyaaaaaaaaaaaaaaaaaaaaaaaagygygygygyvzvzvAykuFvCvDvDvEuGuGuGuGgygygygyesesababbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkesesgygytSvFuKuKujvGuKuKvHtStStStStStSowufgygygygygygygygyesesesabababababbkbkbkbkbkbkbkabababesgygygygygygygygygygygyrJrigygygygygygygygygyesesababtqtqtqtqtqtqtqvIvJvKvIvJtqtqtqtqvLtqtqtqvMvNgygyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygyvOvBvPvQymvSvTvTvTvUvVvWvXvYrigygygymQesababbkbkbkbkbkbkbkabababbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLbkbkabesgygytSvZwawbuMwcwdweuKwfwgwhwiwjwkyByjxNxNxNxNxNxMgygygygyesesesabababababbkbkbkababababesesgygyAcxNxNxNxNxNxNxNxNzpyjxNxNxNxNxMgygygygygyesabababababtqwlwmwnuYuYtwuYuYwowpwqwruZwswtwtwuwvubucwwwxwxwxwxwxwxwxwywywywywywywyvAwzwAwBwCwDznwFwGwHwHwIwJwKwLwMwNgygygymQesababbkbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLbkbkabesgygytStStStStSwOwPwQtStSwRtStStStSAeufgygygygygyxugygygygyesgyesesababababababababababesesgygygyxugygygygygygygygypBpCgygygygyxugygygygygyesesmResesabtqtqtqtqwSwTwUvvvvvvwVwWwXwYwXwZxaxbxcwXxcxdxdxdxdxdxdxdxdxexexexexexexexfxgxfxhxgxiwCxjxkxlxmxnvVxoxpxqpCgygygygyesesababbkbkbkbkbkabababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLbkbkabesesgygygygygytSxrxsAjAktSowAfAhowowAeufgysMgygygyAbxNxNxMgygygygyesababababababababababesgygyAcxNAdgygygygyesgygysMgygygygygygyxugygygygygygygytGgyesesesesestquYuZuYuYuYuYxwuZxxxyuYxzuYxAxBubucxCxCxCxCxCxCxCxCxDxDxDxDxDxDxEvAwzxFxGwCxHwCxIvzvzvzvzvzvzvzvzuDuDxJuDqFmQesababbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkabesesgygygygytSxKxLAnAmAlzozozozozoAoApesmResgygygygygyxugygygygygyesabababababesesesesesgyAcAdgygygyesesesesesesmRgygygygygygyxugygygygygygygygygygygyesestqtqxOxPxOtqtqxQxRxStqtqxOxTxOtqxUgygygyaaaaaaaaaeaaaaaaaeaaaaaaaaaaaeaaxVvBwCxWxXxYxZyayaybvzycydyeyfyfyfyfqFgyesababbkbkbkbkabababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkabesesgygygytStStStStStSgygyesesesesesesabesesgygygygyxugygygygygygyesesesesesesgygygygygyxugygyesesesabababababesgygygygygygyxugygygyrJrigygygygygygygyestqygyhyiyhtqAqArylAsyntqyoypyqtqgygygygygygyaaaaaeaaaaaaaeaeaeaeaeaeaeaeaevzyrysytvzvzvzvzyuvzyvvzvzywqFqFqFqFgyesababbkbkbkababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkababesgygygygygygygygygygygyesabababababababesesgygygyAbxNxNxNxMgygygygygygygygygygygygygyxugyesesabababababababesesgygygygygyAbxNxNxNzpyjxNxNxNxMgygygygytqyxyyyzyAtqAtyCyDyEAutqyFyGyHtqgygygygygygyaeaeaeaeaeaeaeyIyIyIyIyIaeaaaavzyJyKwCyLyMyNyayayOyaybvzgygygygygyesesababbkbkabababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkabesgygygygygygygygygyesesesababababababababesesesgygygygygyAbxMgygyrJrigygyAcxNxNxNxNxNAdgyesababababbkbkbkababesesesgygygygygygygypBpCgygygyxugygygygytqtqtqtqtqtqyPyQyRySyntqxOyTxOtqgygygygygygyaaaaaeaaaaaaaeyIyIyIyIyIaeaavOvBwCyUyVvzvzvzvzvzvzyWyXvzgygygygygyesababbkbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkesesesesgygygygyesesesababababababababababababesesesgysMgygyAbxNxNzpyjxNxNAdgygygygygygygyesabababbkbkbkbkbkabababesesesesgygygygygygygygygyAbxNxNxMgygygygygygytqtqtqtqtqtqtqowyYufyZgygygygygyaaaaaaaeaaaaaaaeyIyIyIyIyIzawzzbzczdzezfzgzhzizjzkzlzmyXvzgygygygyesesababbkbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkabesesesesesesabababababababbkbkbkbkabababababesesmResgygygygypBpCgygygygysMgyesesesesesababbkbkbkbkbkbkbkabababababesesesesesesesesgygygygygyxugygygygygygygygypBznzozozozoAepCgygygygygygyaeaeaeaeaeaeaeaeyIyIyIyIyIzqzrzsztwCyUwCwCwCzuwCwCzvzwzxvzgygygygyesabababbkbkabababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabababababababababbkbkbkbkbkbkbkbkbkababababababesesgygygygygygygygygymResesabababababbkbkbkbkbkbkbkbkababababababababababababesesgygygygyxugygygygygygygygygygygygygygyAfgygygygygygygygyaaaaaaaaaaaaaeyIyIyIyIyIvAwzxFzywCyUwCwCwCzzwCwCwCzAzBvzgygygyzCmRabababbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkabesesesesesesabababababababbkbkbkbkabababababesesmResgygygygypBpCgygygygysMgyesesesesesababbkbkbkbkbkbkbkabababababesesesesesesesesgygygygygyxugygygygygygygygyAwAvAxAxAxAxAyufgygygygygygyaeaeaeaeaeaeaeaeyIyIyIyIyIzqzrzsztwCyUwCwCwCzuwCwCzvzwzxvzgygygygyesabababbkbkabababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkabababababababababbkbkbkbkbkbkbkbkbkababababababesesgygygygygygygygygymResesabababababbkbkbkbkbkbkbkbkababababababababababababesesgygygygyxugygygygygygygygypBuDuDuDuDuDAzpCgygygygygygygyaaaaaaaaaaaaaeyIyIyIyIyIvAwzxFzywCyUwCwCwCzzwCwCwCzAzBvzgygygyzCmRabababbkababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkabbkbkababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababesesesgygygyesesesesesabababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababesgygygygyAbxNxNxNxNxNxNxNxNxNxNxNxNxNxNAgslslrGgygygygygygyaaaaaaaaaaaeyIyIyIyIyIzDaaxVvBzEyUwCwCwCzFzGwCwCyWzHvzgygygygyesabababababababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababesesesesesabababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababesesesgygygygygygygygygygygygygygygygygygygygyrvgyrJrigygygypzpzaaaaaaaeyIyIyIyIyIaeaaaazIzIzJzfzfzlzKzLzMzNzwyXvzgygygygyesababababbkababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababababesesesgygygygygygygygygygygygygygygygygygyrFslsJsKslslslzOzPzQzQzQzQzQzQzQzQzQzQzQzQzRzSzTwCwCwCzUzVzWzXzYzZvzgygyesesesababbkbkbkabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/mech_bay_console.tmpl b/nano/templates/mech_bay_console.tmpl new file mode 100644 index 0000000000..87e34d7b8e --- /dev/null +++ b/nano/templates/mech_bay_console.tmpl @@ -0,0 +1,67 @@ +

      Subsystems

      +
      +
      + Recharge Station: +
      +
      + {{if data.has_floor}} + OK + {{else}} + ERROR + {{/if}} +
      +
      +
      +
      + Power Port: +
      +
      + {{if data.has_port}} + OK + {{else}} + ERROR + {{/if}} +
      +
      +
      +
      + Mecha: +
      +
      + {{if data.has_mech}} + LOCATED ({{:data.mecha_name}}) + {{else}} + NONE + {{/if}} +
      +
      +{{if data.has_mech}} +

      Charging

      +
      +
      + Charge Level: +
      +
      + {{:helper.displayBar(data.mecha_charge_percentage, 0, 100)}} +
      + {{:data.mecha_charge_percentage}}%
      +
      +
      +
      +
      +
      + Cell Rating: +
      +
      + {{:data.mecha_maxcharge}} +
      +
      +
      +
      + Cell Charge: +
      +
      + {{:data.mecha_charge}} +
      +
      +{{/if}} \ No newline at end of file diff --git a/nano/templates/rcon.tmpl b/nano/templates/rcon.tmpl new file mode 100644 index 0000000000..5db5940fe3 --- /dev/null +++ b/nano/templates/rcon.tmpl @@ -0,0 +1,57 @@ +Detected SMES units with RCON support: +{{for data.smes_info}} +
      +
      + {{:value.RCON_tag}} +
      +
      + +
      + {{if value.charge > 50}} + {{:helper.displayBar(value.charge, 0, 100, 'good')}} + {{else value.charge > 25}} + {{:helper.displayBar(value.charge, 0, 100, 'average')}} + {{else}} + {{:helper.displayBar(value.charge, 0, 100, 'bad')}} + {{/if}} +
      + {{:value.charge}}%
      +
      +
      + Input: {{:value.input_val}}W - {{:value.input_set ? "AUTO" : "OFF"}} + + {{:helper.link('', 'power', { 'smes_in_toggle' : value.RCON_tag})}} + {{:helper.link('', 'pencil', { 'smes_in_set' : value.RCON_tag})}} +
      + Output: {{:value.output_val}}W - {{:value.output_set ? "ONLINE" : "OFFLINE"}} + + {{:helper.link('', 'power', { 'smes_out_toggle' : value.RCON_tag})}} + {{:helper.link('', 'pencil', { 'smes_out_set' : value.RCON_tag})}} +
      + Output Load: + + {{:value.output_load}}W +
      +
      +
      +{{empty}} + No connected SMES units detected! +{{/for}} +Detected Breaker Boxes with RCON support: +{{for data.breaker_info}} +
      +
      + {{:value.RCON_tag}} +
      +
      + +
      + {{:value.enabled ? "[ENABLED]" : "[DISABLED]"}} + + {{:helper.link('', 'power', {'toggle_breaker' : value.RCON_tag})}} +
      +
      +
      +{{empty}} + No connected Breaker Boxes detected! +{{/for}} \ No newline at end of file diff --git a/nano/templates/sec_camera.tmpl b/nano/templates/sec_camera.tmpl new file mode 100644 index 0000000000..ea18fb2047 --- /dev/null +++ b/nano/templates/sec_camera.tmpl @@ -0,0 +1,23 @@ + +{{:helper.link('Show Map', 'pin-s', {'showMap' : 1})}} +{{:helper.link('Reset', 'refresh', {'reset' : 1})}} +
      +
      Current Camera:
      + {{if data.current}} +
      {{:data.current.name}}
      + {{else}} +
      None
      + {{/if}} +
      +{{for data.cameras}} + {{if data.current && value.name == data.current.name}} + {{:helper.link(value.name, '', {'switchTo' : value.camera}, 'selected')}} + {{else value.deact}} + {{:helper.link(value.name + " (deactivated)", '', {}, 'inactive')}} + {{else}} + {{:helper.link(value.name, '', {'switchTo' : value.camera})}} + {{/if}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/sec_camera_map_content.tmpl b/nano/templates/sec_camera_map_content.tmpl new file mode 100644 index 0000000000..52dc8aeadd --- /dev/null +++ b/nano/templates/sec_camera_map_content.tmpl @@ -0,0 +1,20 @@ + +{{for data.cameras}} + {{if value.z == 1}} +
      + {{if data.current && value.name == data.current.name}} + {{:helper.link("#", '', {'switchTo' : value.camera}, 'selected')}} + {{else value.deact}} + {{:helper.link('#', '', {}, 'inactive')}} + {{else}} + {{:helper.link("#", '', {'switchTo' : value.camera})}} + {{/if}} + +
      + {{/if}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/sec_camera_map_header.tmpl b/nano/templates/sec_camera_map_header.tmpl new file mode 100644 index 0000000000..175e61062e --- /dev/null +++ b/nano/templates/sec_camera_map_header.tmpl @@ -0,0 +1,23 @@ + +{{:helper.link('Show Camera List', 'script', {'showMap' : 0})}} +{{:helper.link('Reset', 'refresh', {'reset' : 1})}} +
      +
      +
      Current Camera: 
      + {{if data.current}} +
      {{:data.current.name}}
      + {{else}} +
      None
      + {{/if}} +
      +
      +
      + Zoom Level:  + + + + +
      \ No newline at end of file