From 51035f931e6d3fc03e572ecfe6860df237acd5c2 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 31 Jul 2015 23:59:41 +0200 Subject: [PATCH 01/21] Powernet rework --- .../components/trinary_devices/filter.dm | 6 - .../components/unary/vent_pump.dm | 6 +- .../components/unary/vent_scrubber.dm | 4 +- code/__DEFINES/game.dm | 4 + code/__DEFINES/misc.dm | 3 + code/_globalvars/lists/objects.dm | 2 +- code/controllers/Processes/machinery.dm | 12 +- code/controllers/master_controller.dm | 9 +- code/datums/mixed.dm | 15 - code/datums/wires/smartfridge.dm | 51 ++ code/game/area/Space Station 13 areas.dm | 1 - code/game/area/areas.dm | 6 +- code/game/atoms_movable.dm | 8 +- code/game/gamemodes/events/power_failure.dm | 24 +- code/game/gamemodes/gameticker.dm | 6 - code/game/machinery/alarm.dm | 16 +- code/game/machinery/atmo_control.dm | 10 +- code/game/machinery/autolathe.dm | 13 - code/game/machinery/camera/camera.dm | 5 - code/game/machinery/computer/computer.dm | 5 - code/game/machinery/doors/airlock.dm | 16 +- code/game/machinery/floodlight.dm | 3 + code/game/machinery/kitchen/smartfridge.dm | 152 +++- code/game/machinery/machinery.dm | 17 +- code/game/machinery/suit_storage_unit.dm | 12 - code/game/machinery/syndicatebeacon.dm | 2 +- code/game/machinery/vending.dm | 14 - .../mecha/equipment/tools/medical_tools.dm | 4 +- code/game/objects/items.dm | 5 +- code/game/objects/items/devices/PDA/cart.dm | 83 +- code/game/objects/items/devices/PDA/radio.dm | 7 +- code/game/objects/items/devices/powersink.dm | 203 ++--- code/game/objects/items/stacks/stack.dm | 3 + code/game/objects/objs.dm | 3 - code/modules/admin/verbs/debug.dm | 2 +- code/modules/assembly/signaler.dm | 2 +- code/modules/power/apc.dm | 376 +++++---- code/modules/power/cable.dm | 783 ++++++++++++------ code/modules/power/power.dm | 477 ++++------- code/modules/power/powernet.dm | 158 ++++ code/modules/power/singularity/collector.dm | 1 - .../power/singularity/containment_field.dm | 42 +- code/modules/power/singularity/emitter.dm | 14 +- code/modules/power/smes.dm | 330 ++++---- code/modules/power/solar.dm | 33 +- code/modules/power/terminal.dm | 6 +- code/modules/power/tracker.dm | 10 +- code/modules/power/turbine.dm | 1 - code/modules/research/rdmachines.dm | 14 - code/world.dm | 2 +- icons/obj/power.dmi | Bin 22790 -> 24398 bytes nano/templates/apc.tmpl | 8 +- nano/templates/pda.tmpl | 73 +- nano/templates/smartfridge.tmpl | 39 - nano/templates/smes.tmpl | 18 +- nano/templates/solar_control.tmpl | 20 +- paradise.dme | 3 + 57 files changed, 1711 insertions(+), 1431 deletions(-) create mode 100644 code/__DEFINES/game.dm create mode 100644 code/datums/wires/smartfridge.dm create mode 100644 code/modules/power/powernet.dm diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 5e1fabcebd3..09aecb64393 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -30,12 +30,6 @@ Filter types: if(frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) -/* I don't know why this is here, but it's ugly, so I'm disabling it -/obj/machinery/atmospherics/trinary/filter/New() - ..() - if(radio_controller) - initialize() -*/ /obj/machinery/atmospherics/trinary/filter/update_icon() if(istype(src, /obj/machinery/atmospherics/trinary/filter/m_filter)) icon_state = "m" diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 307b98f0ad7..d61f22485cf 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -64,9 +64,6 @@ if (!id_tag) assign_uid() id_tag = num2text(uid) - if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() ..() /obj/machinery/atmospherics/unary/vent_pump/high_volume @@ -227,11 +224,12 @@ /obj/machinery/atmospherics/unary/vent_pump/initialize() ..() - //some vents work his own spesial way + //some vents work his own special way radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) + src.broadcast_status() /obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 5a6220a48ee..b1bb5ffece0 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -42,9 +42,6 @@ if (!id_tag) assign_uid() id_tag = num2text(uid) - if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() ..() /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) @@ -131,6 +128,7 @@ radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) + src.broadcast_status() /obj/machinery/atmospherics/unary/vent_scrubber/process() ..() diff --git a/code/__DEFINES/game.dm b/code/__DEFINES/game.dm new file mode 100644 index 00000000000..68518e80d6c --- /dev/null +++ b/code/__DEFINES/game.dm @@ -0,0 +1,4 @@ +#define GAME_STATE_PREGAME 1 +#define GAME_STATE_SETTING_UP 2 +#define GAME_STATE_PLAYING 3 +#define GAME_STATE_FINISHED 4 \ No newline at end of file diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6d24ef3099b..a2071b28385 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -50,6 +50,9 @@ #define INFECTION_LEVEL_TWO 500 #define INFECTION_LEVEL_THREE 1000 +// Damage above this value must be repaired with surgery. +#define ROBOLIMB_SELF_REPAIR_CAP 30 + //metal, glass, rod stacks #define MAX_STACK_AMOUNT_METAL 50 #define MAX_STACK_AMOUNT_GLASS 50 diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 510be54c75c..8c419cc35fb 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -15,8 +15,8 @@ var/global/list/singularities = list() //list of all singularities var/global/list/aibots = list() // AI controlled bots var/global/list/table_recipes = list() //list of all table craft recipes -var/global/list/active_areas = list() var/global/list/all_areas = list() var/global/list/machines = list() +var/global/list/processing_power_items = list() //items that ask to be called every cycle diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 2d8986ff2ae..1e8fb197dde 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -4,6 +4,7 @@ /datum/controller/process/machinery/doWork() process_power() + process_power_drain() process_machines() /datum/controller/process/machinery/proc/process_machines() @@ -40,5 +41,12 @@ powerNetwork.reset() scheck() continue - else - powernets -= powerNetwork + + powernets.Remove(powerNetwork) + +/datum/controller/process/machinery/proc/process_power_drain() + // Currently only used by powersinks. These items get priority processed before machinery + for(var/obj/item/I in processing_power_items) + if(!I.pwr_drain()) // 0 = Process Kill, remove from processing list. + processing_power_items.Remove(I) + scheck() diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 15890ce870a..a2434e3ead7 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -318,13 +318,8 @@ datum/controller/game_controller/proc/process() /datum/controller/game_controller/proc/processPowernets() last_thing_processed = /datum/powernet - - for (var/datum/powernet/Powernet in powernets) - if (Powernet) - Powernet.reset() - continue - - powernets -= Powernet + for(var/datum/powernet/Powernet in powernets) + Powernet.reset() /datum/controller/game_controller/proc/processNano() last_thing_processed = /datum/nanoui diff --git a/code/datums/mixed.dm b/code/datums/mixed.dm index a47137b9f1d..df066541633 100644 --- a/code/datums/mixed.dm +++ b/code/datums/mixed.dm @@ -28,20 +28,5 @@ name = "text" var/data = null - - -/datum/powernet - var/list/cables = list() // all cables & junctions - var/list/nodes = list() // all connected machines - - var/load = 0 // the current load on the powernet, increased by each machine at processing - var/newavail = 0 // what available power was gathered last tick, then becomes... - var/avail = 0 //...the current available power in the powernet - var/viewload = 0 // the load as it appears on the power console (gradually updated) - var/number = 0 // Unused //TODEL - var/netexcess = 0 // excess power on the powernet (typically avail-load) - - - /datum/debug var/list/debuglist diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm new file mode 100644 index 00000000000..b611497e796 --- /dev/null +++ b/code/datums/wires/smartfridge.dm @@ -0,0 +1,51 @@ +/datum/wires/smartfridge + holder_type = /obj/machinery/smartfridge + wire_count = 3 + +/datum/wires/smartfridge/secure + random = 1 + wire_count = 4 + +var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1 +var/const/SMARTFRIDGE_WIRE_THROW = 2 +var/const/SMARTFRIDGE_WIRE_IDSCAN = 4 + +/datum/wires/smartfridge/CanUse(var/mob/living/L) + var/obj/machinery/smartfridge/S = holder + if(!istype(L, /mob/living/silicon)) + if(S.seconds_electrified) + if(S.shock(L, 100)) + return 0 + if(S.panel_open) + return 1 + return 0 + +/datum/wires/smartfridge/GetInteractWindow() + var/obj/machinery/smartfridge/S = holder + . += ..() + . += "
The orange light is [S.seconds_electrified ? "off" : "on"].
" + . += "The red light is [S.shoot_inventory ? "off" : "blinking"].
" + . += "A [S.scan_id ? "purple" : "yellow"] light is on.
" + +/datum/wires/smartfridge/UpdatePulsed(var/index) + var/obj/machinery/smartfridge/S = holder + switch(index) + if(SMARTFRIDGE_WIRE_THROW) + S.shoot_inventory = !S.shoot_inventory + if(SMARTFRIDGE_WIRE_ELECTRIFY) + S.seconds_electrified = 30 + if(SMARTFRIDGE_WIRE_IDSCAN) + S.scan_id = !S.scan_id + +/datum/wires/smartfridge/UpdateCut(var/index, var/mended) + var/obj/machinery/smartfridge/S = holder + switch(index) + if(SMARTFRIDGE_WIRE_THROW) + S.shoot_inventory = !mended + if(SMARTFRIDGE_WIRE_ELECTRIFY) + if(mended) + S.seconds_electrified = 0 + else + S.seconds_electrified = -1 + if(SMARTFRIDGE_WIRE_IDSCAN) + S.scan_id = 1 diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index d6ff953e598..5ed3ac97e67 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -35,7 +35,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/eject = null var/debug = 0 - var/powerupdate = 10 //We give everything 10 ticks to settle out it's power usage. var/requires_power = 1 var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index b0914724fa6..d457ae4e3df 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -16,7 +16,6 @@ icon_state = "" layer = 10 uid = ++global_uid - active_areas += src all_areas += src if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area @@ -245,7 +244,7 @@ if(radalert) // always show the radiation alert, regardless of power icon_state = "radiation" blend_mode = BLEND_MULTIPLY - else if ((fire || eject || party) && ((!requires_power)?(!requires_power):power_environ))//If it doesn't require power, can still activate this proc. + else if ((fire || eject || party) && (!requires_power||power_environ))//If it doesn't require power, can still activate this proc. if(fire && !radalert && !eject && !party) icon_state = "red" blend_mode = BLEND_MULTIPLY @@ -297,9 +296,8 @@ // called when power status changes /area/proc/power_change() - powerupdate = 2 for(var/obj/machinery/M in src) // for each machine in the area - M.power_change() // reverify power status (to update icons etc.) + M.power_change() // reverify power status (to update icons etc.) if (fire || eject || party) updateicon() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ae10059f504..c8c6af0161d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -16,11 +16,14 @@ var/mob/pulledby = null var/area/areaMaster + + var/auto_init = 1 /atom/movable/New() . = ..() areaMaster = get_area_master(src) - + if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING) + initialize() /atom/movable/Destroy() for(var/atom/movable/AM in contents) @@ -32,6 +35,9 @@ pulledby = null ..() return QDEL_HINT_QUEUE + +/atom/movable/proc/initialize() + return // Used in shuttle movement and AI eye stuff. // Primarily used to notify objects being moved by a shuttle/bluespace fuckup. diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm index ed1c7fbded2..70c3619494d 100644 --- a/code/game/gamemodes/events/power_failure.dm +++ b/code/game/gamemodes/events/power_failure.dm @@ -10,10 +10,13 @@ var/area/current_area = get_area(S) if(current_area.type in skipped_areas || !(S.z in config.station_levels)) continue + S.last_charge = S.charge + S.last_output_attempt = S.output_attempt + S.last_input_attempt = S.input_attempt S.charge = 0 - S.output = 0 - S.online = 0 - S.updateicon() + S.inputting(0) + S.outputting(0) + S.update_icon() S.power_change() @@ -40,10 +43,10 @@ var/area/current_area = get_area(S) if(current_area.type in skipped_areas || !(S.z in config.station_levels)) continue - S.charge = S.capacity - S.output = 200000 - S.online = 1 - S.updateicon() + S.charge = S.last_charge + S.output_attempt = S.last_output_attempt + S.input_attempt = S.last_input_attempt + S.update_icon() S.power_change() /proc/power_restore_quick(var/announce = 1) @@ -54,7 +57,8 @@ if(S.z != 1) continue S.charge = S.capacity - S.output = 200000 - S.online = 1 - S.updateicon() + S.output_level = S.output_level_max + S.output_attempt = 1 + S.input_attempt = 1 + S.update_icon() S.power_change() diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 5880c2bee59..3d816ee1715 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -1,11 +1,5 @@ var/global/datum/controller/gameticker/ticker -#define GAME_STATE_PREGAME 1 -#define GAME_STATE_SETTING_UP 2 -#define GAME_STATE_PLAYING 3 -#define GAME_STATE_FINISHED 4 - - /datum/controller/gameticker var/const/restart_timeout = 600 var/current_state = GAME_STATE_PREGAME diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 753d53e9e3a..6643776eaa8 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -141,8 +141,6 @@ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 update_icon() - if(ticker && ticker.current_state == GAME_STATE_PLAYING) - initialize() return first_run() @@ -528,19 +526,6 @@ E.update_icon()*/ - -/obj/machinery/alarm/proc/shock(mob/user, prb) - if((stat & (NOPOWER))) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 //you lucked out, no shock for you - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() //sparks always. - if (electrocute_mob(user, get_area(src), src)) - return 1 - else - return 0 /////////////// //END HACKING// /////////////// @@ -626,6 +611,7 @@ /obj/machinery/alarm/proc/get_nano_data(mob/user, fromAtmosConsole=0, AtmosConsoleEmagged=0) var/data[0] + data["name"] = sanitize(name) data["air"]=ui_air_status() data["alarmActivated"]=alarmActivated || local_danger_level==2 data["sensors"]=TLV diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 5e0e3c5689f..ea13b442df4 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -87,6 +87,8 @@ obj/machinery/air_sensor process() if(on) + if(!radio_connection) + return var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = id_tag @@ -128,12 +130,6 @@ obj/machinery/air_sensor initialize() set_frequency(frequency) - New() - ..() - - if(radio_controller) - set_frequency(frequency) - Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) @@ -533,6 +529,8 @@ legend { send_signal(list("tag"=device, "status")) proc/send_signal(var/list/data) + if(!radio_connection) + return var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.source = src diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 4f8d02e0411..5df74641bcc 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -500,19 +500,6 @@ dat += "[D.materials["$glass"] / coeff] glass" return dat -/obj/machinery/autolathe/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 - /obj/machinery/autolathe/proc/adjust_hacked(var/hack) hacked = hack diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 289a67ca432..dcecc4aa34d 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -113,11 +113,6 @@ src.view_range = num cameranet.updateVisibility(src, 0) -/obj/machinery/camera/proc/shock(var/mob/living/user) - if(!istype(user)) - return - user.electrocute_act(10, src) - /obj/machinery/camera/attackby(W as obj, mob/living/user as mob, params) invalidateCameraCache() var/msg = "You attach [W] into the assembly inner circuits." diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 35197a7c7d1..c7bd2c86388 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -14,11 +14,6 @@ var/light_range_on = 2 var/light_power_on = 1 -/obj/machinery/computer/New() - ..() - if(ticker) - initialize() - /obj/machinery/computer/initialize() power_change() update_icon() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 48d4050ff51..6eaa50bc1f1 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -450,25 +450,19 @@ About the new airlock wires panel: // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise // The preceding comment was borrowed from the grille's shock script -/obj/machinery/door/airlock/proc/shock(mob/user, prb) - if((stat & (NOPOWER)) || !src.arePowerSystemsOn()) // unpowered, no shock +/obj/machinery/door/airlock/shock(mob/user, prb) + if(!arePowerSystemsOn()) return 0 if(hasShocked) return 0 //Already shocked someone recently? - if(!prob(prb)) - return 0 //you lucked out, no shock for you - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() //sparks always. - if(electrocute_mob(user, get_area(src), src)) + if(..()) hasShocked = 1 - spawn(10) - hasShocked = 0 + sleep(10) + hasShocked = 0 return 1 else return 0 - /obj/machinery/door/airlock/update_icon() if(overlays) overlays.Cut() overlays = list() diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 37a892f940b..1bba12b0113 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -31,6 +31,9 @@ set_light(0) src.visible_message("[src] shuts down due to lack of power!") return + +/obj/machinery/floodlight/attack_ai(mob/user as mob) + return /obj/machinery/floodlight/attack_hand(mob/user as mob) if(open && cell) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index d1354d17c9d..81ae816fb42 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -14,9 +14,28 @@ var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. var/icon_on = "smartfridge" var/icon_off = "smartfridge-off" + var/icon_panel = "smartfridge-panel" var/item_quants = list() - var/ispowered = 1 //starts powered - var/isbroken = 0 + var/seconds_electrified = 0; + var/shoot_inventory = 0 + var/locked = 0 + var/scan_id = 1 + var/is_secure = 0 + var/datum/wires/smartfridge/wires = null + +/obj/machinery/smartfridge/secure + is_secure = 1 + +/obj/machinery/smartfridge/New() + ..() + if(is_secure) + wires = new/datum/wires/smartfridge/secure(src) + else + wires = new/datum/wires/smartfridge(src) + +/obj/machinery/smartfridge/Destroy() + qdel(wires) + ..() /obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/)) @@ -58,27 +77,47 @@ return 1 return 0 +/obj/machinery/smartfridge/process() + if(stat & (BROKEN|NOPOWER)) + return + if(src.seconds_electrified > 0) + src.seconds_electrified-- + if(src.shoot_inventory && prob(2)) + src.throw_item() /obj/machinery/smartfridge/power_change() - if( powered() ) - src.ispowered = 1 - stat &= ~NOPOWER - if(!isbroken) - icon_state = icon_on + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/smartfridge/update_icon() + if(stat & (BROKEN|NOPOWER)) + icon_state = icon_off else - spawn(rand(0, 15)) - src.ispowered = 0 - stat |= NOPOWER - if(!isbroken) - icon_state = icon_off + icon_state = icon_on /******************* * Item Adding ********************/ -/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(!src.ispowered) +/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/screwdriver)) + panel_open = !panel_open + user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") + overlays.Cut() + if(panel_open) + overlays += image(icon, icon_panel) + nanomanager.update_uis(src) + return + + if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters)) + if(panel_open) + attack_hand(user) + return + + if(stat & NOPOWER) user << "\The [src] is unpowered and useless." return @@ -87,21 +126,18 @@ user << "\The [src] is full." return 1 else - if(!user.unEquip(O)) - usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]" - return + user.remove_from_mob(O) O.loc = src if(item_quants[O.name]) item_quants[O.name]++ else item_quants[O.name] = 1 - user.visible_message("[user] has added \the [O] to \the [src].", \ - "You add \the [O] to \the [src].") + user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].") nanomanager.update_uis(src) - else if(istype(O, /obj/item/weapon/storage/bag/plants) || istype(O, /obj/item/weapon/storage/belt/medical)) - var/obj/item/weapon/storage/bag/plants/P = O + else if(istype(O, /obj/item/weapon/storage/bag)) + var/obj/item/weapon/storage/bag/P = O var/plants_loaded = 0 for(var/obj/G in P.contents) if(accept_check(G)) @@ -117,27 +153,23 @@ plants_loaded++ if(plants_loaded) - user.visible_message( \ - "[user] loads \the [src] with \the [P].", \ - "You load \the [src] with \the [P].") + user.visible_message("[user] loads \the [src] with \the [P].", "You load \the [src] with \the [P].") if(P.contents.len > 0) user << "Some items are refused." nanomanager.update_uis(src) - else user << "\The [src] smartly refuses [O]." return 1 - updateUsrDialog() - - /obj/machinery/smartfridge/attack_ai(mob/user as mob) - return 0 + attack_hand(user) /obj/machinery/smartfridge/attack_hand(mob/user as mob) - + if(stat & (NOPOWER|BROKEN)) + return + wires.Interact(user) ui_interact(user) //Drag pill bottle to fridge to empty it into the fridge @@ -145,7 +177,7 @@ if(!istype(over_object, /obj/item/weapon/storage/pill_bottle)) //Only pill bottles, please return - if(!src.ispowered) + if(stat & NOPOWER) user << "\The [src] is unpowered and useless." return @@ -170,8 +202,6 @@ if(P.contents.len > 0) user << "Some items are refused." nanomanager.update_uis(src) - updateUsrDialog() - /******************* * SmartFridge Menu @@ -182,38 +212,41 @@ var/data[0] data["contents"] = null + data["electrified"] = seconds_electrified > 0 + data["shoot_inventory"] = shoot_inventory + data["locked"] = locked + data["secure"] = is_secure var/list/items[0] for (var/i=1 to length(item_quants)) var/K = item_quants[i] var/count = item_quants[K] - if (count > 0) + if(count > 0) items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count))) - if (items.len > 0) + if(items.len > 0) data["contents"] = items - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) ui.set_initial_data(data) ui.open() /obj/machinery/smartfridge/Topic(href, href_list) - if (..()) return 0 + if(..()) return 0 var/mob/user = usr var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) - if (href_list["close"]) + if(href_list["close"]) user.unset_machine() ui.close() return 0 - if (href_list["vend"]) + if(href_list["vend"]) var/index = text2num(href_list["vend"]) var/amount = text2num(href_list["amount"]) var/K = item_quants[index] @@ -225,14 +258,47 @@ var/i = amount for(var/obj/O in contents) - if (O.name == K) + if(O.name == K) O.loc = loc i-- - if (i <= 0) + if(i <= 0) return 1 return 1 - return 0 +/obj/machinery/smartfridge/proc/throw_item() + var/obj/throw_item = null + var/mob/living/target = locate() in view(7,src) + if(!target) + return 0 + for (var/O in item_quants) + if(item_quants[O] <= 0) //Try to use a record that actually has something to dump. + continue + + item_quants[O]-- + for(var/obj/T in contents) + if(T.name == O) + T.loc = src.loc + throw_item = T + break + break + if(!throw_item) + return 0 + spawn(0) + throw_item.throw_at(target,16,3,src) + src.visible_message("[src] launches [throw_item.name] at [target.name]!") + return 1 + +/************************ +* Secure SmartFridges +*************************/ + +/obj/machinery/smartfridge/secure/Topic(href, href_list) + if(stat & (NOPOWER|BROKEN)) return 0 + if(usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) + if(!allowed(usr) && !emagged && locked != -1 && href_list["vend"]) + usr << "Access denied." + return 0 + return ..() \ No newline at end of file diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 4b054a58f42..266111cfe2b 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -353,9 +353,6 @@ Class Procs: src.add_fingerprint(user) - var/area/A = get_area(src) - A.powerupdate = 1 - return 0 /obj/machinery/CheckParts() @@ -524,3 +521,17 @@ Class Procs: threatcount += 4 return threatcount + + +/obj/machinery/proc/shock(mob/user, prb) + if(inoperable()) + return 0 + if(!prob(prb)) + return 0 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if (electrocute_mob(user, get_area(src), src, 0.7)) + if(user.stunned) + return 1 + return 0 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index efbef9c5670..a841267faa3 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1016,18 +1016,6 @@ if (WIRE_SCANID) locked = !locked */ -/obj/machinery/suit_cycler/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 //There HAS to be a less bloated way to do this. TODO: some kind of table/icon name coding? ~Z /obj/machinery/suit_cycler/proc/apply_paintjob() diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 667ebfddde8..915def6bdda 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -192,7 +192,7 @@ return PROCESS_KILL else if(surplus() > 1500) - add_load(1500) + draw_power(1500) else Deactivate() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 98ef44fdfc6..bf33153a3a8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -677,20 +677,6 @@ src.visible_message("\red [src] launches [throw_item.name] at [target.name]!") return 1 - -/obj/machinery/vending/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 - /* * Vending machine types */ diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 4d5f134662d..685a65ad15e 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -372,9 +372,7 @@ if(!PN) PN = new() - powernets += PN - NC.powernet = PN - PN.cables += NC + PN.add_cable(NC) NC.mergeConnectedNetworks(NC.d2) //NC.mergeConnectedNetworksOnTurf() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 160843152c6..ab0454b9c61 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -701,4 +701,7 @@ spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously if(current_size >= STAGE_FOUR) throw_at(S,14,3) - else ..() \ No newline at end of file + else ..() + +/obj/item/proc/pwr_drain() + return 0 // Process Kill \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 4add16544fc..4e6c9c3f2ef 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -59,10 +59,9 @@ icon_state = "cart-s" access_security = 1 -/obj/item/weapon/cartridge/security/New() +/obj/item/weapon/cartridge/security/initialize() + radio = new /obj/item/radio/integrated/beepsky(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) /obj/item/weapon/cartridge/detective name = "D.E.T.E.C.T. Cartridge" @@ -111,12 +110,9 @@ access_reagent_scanner = 1 access_atmos = 1 -/obj/item/weapon/cartridge/signal/New() +/obj/item/weapon/cartridge/signal/initialize() + radio = new /obj/item/radio/integrated/signal(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/signal(src) - - /obj/item/weapon/cartridge/quartermaster name = "Space Parts & Space Vendors Cartridge" @@ -124,10 +120,9 @@ icon_state = "cart-q" access_quartermaster = 1 -/obj/item/weapon/cartridge/quartermaster/New() +/obj/item/weapon/cartridge/quartermaster/initialize() + radio = new /obj/item/radio/integrated/mule(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/mule(src) /obj/item/weapon/cartridge/head name = "Easy-Record DELUXE" @@ -142,10 +137,9 @@ access_janitor = 1 access_security = 1 -/obj/item/weapon/cartridge/hop/New() +/obj/item/weapon/cartridge/hop/initialize() + radio = new /obj/item/radio/integrated/mule(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/mule(src) /obj/item/weapon/cartridge/hos name = "R.O.B.U.S.T. DELUXE" @@ -153,10 +147,9 @@ access_status_display = 1 access_security = 1 -/obj/item/weapon/cartridge/hos/New() +/obj/item/weapon/cartridge/hos/initialize() + radio = new /obj/item/radio/integrated/beepsky(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) /obj/item/weapon/cartridge/ce name = "Power-On DELUXE" @@ -179,10 +172,9 @@ access_reagent_scanner = 1 access_atmos = 1 -/obj/item/weapon/cartridge/rd/New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/signal(src) +/obj/item/weapon/cartridge/rd/initialize() + radio = new /obj/item/radio/integrated/signal(src) + ..() /obj/item/weapon/cartridge/captain name = "Value-PAK Cartridge" @@ -197,10 +189,9 @@ access_status_display = 1 access_atmos = 1 -/obj/item/weapon/cartridge/captain/New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) +/obj/item/weapon/cartridge/captain/initialize() + radio = new /obj/item/radio/integrated/beepsky(src) + ..() /obj/item/weapon/cartridge/supervisor name = "Easy-Record DELUXE" @@ -221,10 +212,9 @@ access_status_display = 1 access_atmos = 1 -/obj/item/weapon/cartridge/centcom/New() +/obj/item/weapon/cartridge/centcom/initialize() + radio = new /obj/item/radio/integrated/beepsky(src) ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) /obj/item/weapon/cartridge/syndicate name = "Detomatix Cartridge" @@ -294,29 +284,32 @@ /* Power Monitor (Mode: 43 / 433) */ if(mode==43 || mode==433) var/pMonData[0] + var/apcData[0] for(var/obj/machinery/computer/monitor/pMon in world) if(!(pMon.stat & (NOPOWER|BROKEN)) ) pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]") - if(isnull(powmonitor)) powmonitor = pMon - + if(isnull(powmonitor)) powmonitor = pMon + values["powermonitors"] = pMonData - values["poweravail"] = powmonitor.powernet.avail - values["powerload"] = num2text(powmonitor.powernet.viewload,10) + if (!isnull(powmonitor.powernet)) + values["powerconnected"] = 1 + values["poweravail"] = powmonitor.powernet.avail + values["powerload"] = num2text(powmonitor.powernet.viewload,10) + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powmonitor.powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powmonitor.powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - - var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on - var/list/chg = list(0,1,1) // Charging: nope, charging, full - var/apcData[0] - for(var/obj/machinery/power/apc/A in L) - apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0) - - values["apcs"] = apcData + var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on + var/list/chg = list(0,1,1) // Charging: nope, charging, full + for(var/obj/machinery/power/apc/A in L) + apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0) + + values["apcs"] = apcData + else + values["powerconnected"] = 0 diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index bc631aece49..aa5e34eba90 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -229,17 +229,14 @@ var/last_transmission var/datum/radio_frequency/radio_connection -/obj/item/radio/integrated/signal/New() - ..() - if(radio_controller) - initialize() - /obj/item/radio/integrated/signal/Destroy() if(radio_controller) radio_controller.remove_object(src, frequency) return ..() /obj/item/radio/integrated/signal/initialize() + if(!radio_controller) + return if (src.frequency < 1441 || src.frequency > 1489) src.frequency = sanitize_frequency(src.frequency) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 7b0ea895654..336ac002671 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 @@ -13,114 +13,119 @@ m_amt = 750 w_amt = 750 origin_tech = "powerstorage=3;syndicate=5" - var/drain_rate = 600000 // amount of power to drain per tick - var/power_drained = 0 // has drained this much power - var/max_power = 1e8 // maximum power that can be drained before exploding - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - + var/drain_rate = 1500000 // amount of power to drain per tick + var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. + var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. + var/power_drained = 0 // Amount of power drained. + var/max_power = 5e9 // Detonation point. + var/mode = 0 // 0 = off, 1=clamped (off), 2=operating + var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. + var/datum/powernet/PN // Our powernet var/obj/structure/cable/attached // the attached cable - attackby(var/obj/item/I, var/mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - if(mode == 0) - var/turf/T = loc - if(isturf(T) && !T.intact) - attached = locate() in T - if(!attached) - user << "No exposed cable here to attach to." - return - else -// attached.attached = src - anchored = 1 - mode = 1 - user << "You attach the device to the cable." - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] attaches the power sink to the cable." - return +/obj/item/device/powersink/Destroy() + processing_objects.Remove(src) + processing_power_items.Remove(src) + ..() + +/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/weapon/screwdriver)) + if(mode == 0) + var/turf/T = loc + if(isturf(T) && !T.intact) + attached = locate() in T + if(!attached) + user << "No exposed cable here to attach to." + return else - user << "Device must be placed over an exposed cable to attach to it." + anchored = 1 + mode = 1 + src.visible_message("[user] attaches [src] to the cable!") return else - if (mode == 2) - processing_objects.Remove(src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite - anchored = 0 - mode = 0 - user << "You detach the device from the cable." -// attached.attached = null - attached = null - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] detaches the power sink from the cable." - set_light(0) - icon_state = "powersink0" - + user << "Device must be placed over an exposed cable to attach to it." return else + if (mode == 2) + processing_objects.Remove(src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite + processing_power_items.Remove(src) + anchored = 0 + mode = 0 + src.visible_message("[user] detaches [src] from the cable!") + set_light(0) + icon_state = "powersink0" + + return + else + ..() + +/obj/item/device/powersink/attack_ai() + return + +/obj/item/device/powersink/attack_hand(var/mob/user) + switch(mode) + if(0) ..() + if(1) + src.visible_message("[user] activates [src]!") + mode = 2 + icon_state = "powersink1" + processing_objects.Add(src) + processing_power_items.Add(src) + if(2) //This switch option wasn't originally included. It exists now. --NeoFite + src.visible_message("[user] deactivates [src]!") + mode = 1 + set_light(0) + icon_state = "powersink0" + processing_objects.Remove(src) + processing_power_items.Remove(src) - Destroy() - set_light(0) - processing_objects.Remove(src) -// attached.attached = null - attached = null - return ..() +/obj/item/device/powersink/pwr_drain() + if(!attached) + return 0 + + if(drained_this_tick) + return 1 + drained_this_tick = 1 + + var/drained = 0 + + if(!PN) + return 1 + + set_light(12) + PN.trigger_warning() + // found a powernet, so drain up to max power from it + drained = PN.draw_power(drain_rate) + // if tried to drain more than available on powernet + // now look for APCs and drain their cells + if(drained < drain_rate) + for(var/obj/machinery/power/terminal/T in PN.nodes) + // Enough power drained this tick, no need to torture more APCs + if(drained >= drain_rate) + break + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.operating && A.cell) + var/cur_charge = A.cell.charge / CELLRATE + var/drain_val = min(apc_drain_rate, cur_charge) + A.cell.use(drain_val * CELLRATE) + drained += drain_val + power_drained += drained + return 1 - attack_ai() +/obj/item/device/powersink/process() + drained_this_tick = 0 + power_drained -= min(dissipation_rate, power_drained) + if(power_drained > max_power * 0.95) + playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + if(power_drained >= max_power) + explosion(src.loc, 3,6,9,12) + qdel(src) return - - attack_hand(var/mob/user) - switch(mode) - if(0) - ..() - - if(1) - user << "You activate the device!" - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] activates the power sink!" - mode = 2 - icon_state = "powersink1" - processing_objects.Add(src) - - if(2) //This switch option wasn't originally included. It exists now. --NeoFite - user << "You deactivate the device!" - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] deactivates the power sink!" - mode = 1 - set_light(0) - icon_state = "powersink0" - processing_objects.Remove(src) - - process() - if(attached) - var/datum/powernet/PN = attached.powernet - if(PN) - set_light(12) - - // found a powernet, so drain up to max power from it - - var/drained = min ( drain_rate, PN.avail ) - PN.load += drained - power_drained += drained - - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - A.cell.charge = max(0, A.cell.charge - 50) - power_drained += 50 - - - if(power_drained > max_power * 0.95) - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - if(power_drained >= max_power) - processing_objects.Remove(src) - explosion(src.loc, 3,6,9,12) - qdel(src) + if(attached && attached.powernet) + PN = attached.powernet + else + PN = null diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2736ccd4260..08e4b53d212 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -191,6 +191,9 @@ /obj/item/stack/proc/get_amount() return amount + +/obj/item/stack/proc/get_max_amount() + return max_amount /obj/item/stack/attack_hand(mob/user as mob) if (user.get_inactive_hand() == src) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 7000b0c01a6..595bd5cad2d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -83,9 +83,6 @@ else return null -/atom/movable/proc/initialize() - return - /obj/proc/updateUsrDialog() if(in_use) var/is_in_use = 0 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 93dc0fba5b9..6c82fc63185 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1139,7 +1139,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that for(var/obj/machinery/power/smes/SMES in world) if(SMES.anchored) - SMES.chargemode = 1 + SMES.input_attempt = 1 /client/proc/cmd_debug_mob_lists() set category = "Debug" diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 869720b1d43..57b23b30813 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -18,7 +18,7 @@ var/delay = 0 var/datum/radio_frequency/radio_connection var/airlock_wire = null - + New() ..() if(!radio_controller) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index d0bbbadb3fc..03dc1c4eac9 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -54,7 +54,7 @@ var/areastring = null var/obj/item/weapon/stock_parts/cell/cell var/start_charge = 90 // initial cell charge % - var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500 + var/cell_type = 2500 var/opened = 0 //0=closed, 1=opened, 2=cover removed var/shorted = 0 var/lighting = 3 @@ -84,12 +84,13 @@ var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver var/overload = 1 //used for the Blackout malf module var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment - var/mob/living/silicon/ai/occupant = null + var/mob/living/silicon/ai/occupier = null var/longtermpower = 10 var/update_state = -1 var/update_overlay = -1 var/global/status_overlays = 0 var/updating_icon = 0 + var/standard_max_charge var/datum/wires/apc/wires = null //var/debug = 0 var/global/list/status_overlays_lock @@ -99,14 +100,21 @@ var/global/list/status_overlays_environ var/indestructible = 0 // If set, prevents aliens from destroying it -/obj/machinery/power/apc/updateDialog() - if (stat & (BROKEN|MAINT)) - return - ..() +/obj/machinery/power/apc/connect_to_network() + //Override because the APC does not directly connect to the network; it goes through a terminal. + //The terminal is what the power computer looks for anyway. + if(!terminal) + make_terminal() + if(terminal) + terminal.connect_to_network() /obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) ..() wires = new(src) + var/tmp/obj/item/weapon/stock_parts/cell/tmp_cell = new + standard_max_charge = tmp_cell.maxcharge + qdel(tmp_cell) + // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area if (building) @@ -128,8 +136,24 @@ src.update_icon() spawn(5) src.update() - - + +/obj/machinery/power/apc/Destroy() + if(malfai && operating) + if (ticker.mode.config_tag == "malfunction") + if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas)) + ticker.mode:apcs-- + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 + area.power_change() + if(occupier) + malfvacate(1) + qdel(wires) + if(cell) + qdel(cell) // qdel + if(terminal) + disconnect_terminal() + ..() /obj/machinery/power/apc/proc/make_terminal() // create a terminal object at the same position as original turf loc @@ -269,7 +293,7 @@ if(update & 2) if(overlays.len) - overlays = 0 + overlays.len = 0 if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) overlays += status_overlays_lock[locked+1] @@ -342,10 +366,11 @@ return 0 if(last_update_state != update_state) results += 1 - if(last_update_overlay != update_overlay && update_overlay != 0) + if(last_update_overlay != update_overlay) results += 2 return results +// Used in process so it doesn't update the icon too much /obj/machinery/power/apc/proc/queue_icon_update() if(!updating_icon) @@ -372,29 +397,30 @@ if (istype(W, /obj/item/weapon/crowbar) && opened) if (has_electronics==1) if (terminal) - user << "\red Disconnect wires first." + user << "Disconnect wires first." return playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues if(do_after(user, 50)) - has_electronics = 0 - if ((stat & BROKEN) || malfhack) - user.visible_message(\ - "\red [user.name] has broken the power control board inside [src.name]!",\ - "You broke the charred power control board and remove the remains.", - "You hear a crack!") - //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 - else - user.visible_message(\ - "\red [user.name] has removed the power control board from [src.name]!",\ - "You remove the power control board.") - new /obj/item/weapon/module/power_control(loc) + if (has_electronics==1) + has_electronics = 0 + if ((stat & BROKEN) || malfhack) + user.visible_message(\ + "[user.name] has broken the power control board inside [src.name]!",\ + "You broke the charred power control board and remove the remains.", + "You hear a crack!") + //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 + else + user.visible_message(\ + "[user.name] has removed the power control board from [src.name]!",\ + "You remove the power control board.") + new /obj/item/weapon/module/power_control(loc) else if (opened!=2) //cover isn't removed opened = 0 update_icon() else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) ) if(coverlocked && !(stat & MAINT)) - user << "\red The cover is locked and cannot be opened." + user << "The cover is locked and cannot be opened." return else opened = 1 @@ -405,20 +431,20 @@ return else if (stat & MAINT) - user << "\red There is no connector for your power cell." + user << "There is no connector for your power cell." return user.drop_item() W.loc = src cell = W user.visible_message(\ - "\red [user.name] has inserted the power cell to [src.name]!",\ + "[user.name] has inserted the power cell to [src.name]!",\ "You insert the power cell.") chargecount = 0 update_icon() else if (istype(W, /obj/item/weapon/screwdriver)) // haxing if(opened) if (cell) - user << "\red Close the APC first." //Less hints more mystery! + user << "Close the APC first." //Less hints more mystery! return else if (has_electronics==1 && terminal) @@ -432,7 +458,7 @@ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You unfasten the electronics." else /* has_electronics==0 */ - user << "\red There is nothing to secure." + user << "There is nothing to secure." return update_icon() else if(emagged) @@ -457,87 +483,90 @@ user << "You [ locked ? "lock" : "unlock"] the APC interface." update_icon() else - user << "\red Access denied." + user << "Access denied." else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the floor plating in front of the APC first." + user << "You must remove the floor plating in front of the APC first." return var/obj/item/stack/cable_coil/C = W if(C.amount < 10) - user << "\red You need more wires." + user << "You need more wires." return user << "You start adding cables to the APC frame..." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && C.amount >= 10) - var/turf/T = get_turf(src) - var/obj/structure/cable/N = T.get_cable_node() - if (prob(50) && electrocute_mob(usr, N, N)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - return - C.use(10) - user.visible_message(\ - "\red [user.name] has added cables to the APC frame!",\ - "You add cables to the APC frame.") - make_terminal() - terminal.connect_to_network() + if(do_after(user, 20)) + if (C.amount >= 10 && !terminal && opened && has_electronics != 2) + var/turf/T = get_turf(src) + var/obj/structure/cable/N = T.get_cable_node() + if (prob(50) && electrocute_mob(usr, N, N)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + return + C.use(10) + user.visible_message(\ + "[user.name] has added cables to the APC frame!",\ + "You add cables to the APC frame.") + make_terminal() + terminal.connect_to_network() else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the floor plating in front of the APC first." + user << "You must remove the floor plating in front of the APC first." return user << "You begin to cut the cables..." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 50)) - if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - return - new /obj/item/stack/cable_coil(loc,10) - user.visible_message(\ - "\red [user.name] cut the cables and dismantled the power terminal.",\ - "You cut the cables and dismantle the power terminal.") - qdel(terminal) + if(terminal && opened && has_electronics!=2) + if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + return + new /obj/item/stack/cable_coil(loc,10) + user << "You cut the cables and dismantle the power terminal." + qdel(terminal) // qdel else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) user << "You trying to insert the power control board into the frame..." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 10)) - has_electronics = 1 - user << "You place the power control board inside the frame." - qdel(W) + if(has_electronics==0) + has_electronics = 1 + user << "You place the power control board inside the frame." + qdel(W) // qdel else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) - user << "\red You cannot put the board inside, the frame is damaged." + user << "You cannot put the board inside, the frame is damaged." return else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal) var/obj/item/weapon/weldingtool/WT = W if (WT.get_fuel() < 3) - user << "\blue You need more welding fuel to complete this task." + user << "You need more welding fuel to complete this task." return - user << "You start welding the APC frame..." + user.visible_message("[user.name] welds [src].", \ + "You start welding the APC frame...", \ + "You hear welding.") playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 50)) if(!src || !WT.remove_fuel(3, user)) return if (emagged || malfhack || (stat & BROKEN) || opened==2) new /obj/item/stack/sheet/metal(loc) user.visible_message(\ - "\red [src] has been cut apart by [user.name] with the weldingtool.",\ - "You disassembled the broken APC frame.",\ - "\red You hear welding.") + "[src] has been cut apart by [user.name] with the weldingtool.",\ + "You disassembled the broken APC frame.",\ + "You hear welding.") else new /obj/item/mounted/frame/apc_frame(loc) user.visible_message(\ - "\red [src] has been cut from the wall by [user.name] with the weldingtool.",\ - "You cut the APC frame from the wall.",\ - "\red You hear welding.") - qdel(src) + "[src] has been cut from the wall by [user.name] with the weldingtool.",\ + "You cut the APC frame from the wall.",\ + "You hear welding.") + qdel(src) // qdel return else if (istype(W, /obj/item/mounted/frame/apc_frame) && opened && emagged) emagged = 0 if (opened==2) opened = 1 user.visible_message(\ - "\red [user.name] has replaced the damaged APC frontal panel with a new one.",\ + "[user.name] has replaced the damaged APC frontal panel with a new one.",\ "You replace the damaged APC frontal panel with a new one.") qdel(W) update_icon() @@ -548,7 +577,7 @@ user << "You begin to replace the damaged APC frame..." if(do_after(user, 50)) user.visible_message(\ - "\red [user.name] has replaced the damaged APC frame with new one.",\ + "[user.name] has replaced the damaged APC frame with new one.",\ "You replace the damaged APC frame with new one.") qdel(W) stat &= ~BROKEN @@ -566,8 +595,8 @@ ) \ && prob(20) ) opened = 2 - user.visible_message("\red The APC cover was knocked down with the [W.name] by [user.name]!", \ - "\red You knock down the APC cover with your [W.name]!", \ + user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ + "You knock down the APC cover with your [W.name]!", \ "You hear bang") update_icon() else @@ -578,8 +607,8 @@ istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/assembly/signaler))) return src.attack_hand(user) user.do_attack_animation(src) - user.visible_message("\red The [src.name] has been hit with the [W.name] by [user.name]!", \ - "\red You hit the [src.name] with your [W.name]!", \ + user.visible_message("The [src.name] has been hit with the [W.name] by [user.name]!", \ + "You hit the [src.name] with your [W.name]!", \ "You hear bang") /obj/machinery/power/apc/emag_act(user as mob) @@ -612,7 +641,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - H << "\red The APC power currents surge eratically, damaging your chassis!" + H << "The APC power currents surge eratically, damaging your chassis!" H.adjustFireLoss(10,0) else if(src.cell && src.cell.charge > 0) if(H.nutrition < 450) @@ -624,13 +653,13 @@ H.nutrition += src.cell.charge/10 src.cell.charge = 0 - user << "\blue You slot your fingers into the APC interface and siphon off some of the stored charge for your own use." + user << "You slot your fingers into the APC interface and siphon off some of the stored charge for your own use." if(src.cell.charge < 0) src.cell.charge = 0 if(H.nutrition > 500) H.nutrition = 500 src.charging = 1 else - user << "\blue You are already fully charged." + user << "You are already fully charged." else user << "There is no charge to draw from that APC." return @@ -645,7 +674,7 @@ cell.updateicon() src.cell = null - user.visible_message("\red [user.name] removes the power cell from [src.name]!", "You remove the power cell.") + user.visible_message("[user.name] removes the power cell from [src.name]!", "You remove the power cell.") //user << "You remove the power cell." charging = 0 src.update_icon() @@ -664,7 +693,7 @@ return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - user.visible_message("\red [user.name] slashes at the [src.name]!", "\blue You slash at the [src.name]!") + user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) var/allcut = wires.IsAllCut() @@ -672,12 +701,12 @@ if(beenhit >= pick(3, 4) && wiresexposed != 1) wiresexposed = 1 src.update_icon() - src.visible_message("\red The [src.name]'s cover flies open, exposing the wires!") + src.visible_message("The [src.name]'s cover flies open, exposing the wires!") else if(wiresexposed == 1 && allcut == 0) wires.CutAll() src.update_icon() - src.visible_message("\red The [src.name]'s wires are shredded!") + src.visible_message("The [src.name]'s wires are shredded!") else beenhit += 1 return @@ -700,7 +729,7 @@ /obj/machinery/power/apc/proc/get_malf_status(mob/user) if (ticker && ticker.mode && (user.mind in ticker.mode.malf_ai) && istype(user, /mob/living/silicon/ai)) if (src.malfai == (user:parent ? user:parent : user)) - if (src.occupant == user) + if (src.occupier == user) return 3 // 3 = User is shunted in this APC else if (istype(user.loc, /obj/machinery/power/apc)) return 4 // 4 = User is shunted in another APC @@ -801,7 +830,7 @@ /obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic() if (user.stat && !isobserver(user)) - user << "\red You must be conscious to use this [src]!" + user << "You must be conscious to use this [src]!" return 0 if(stat & (NOPOWER|BROKEN)) return 0 @@ -811,13 +840,13 @@ return 0 if ( ! (istype(user, /mob/living/carbon/human) || \ istype(user, /mob/living/silicon))) - user << "\red You don't have the dexterity to use this [src]!" + user << "You don't have the dexterity to use this [src]!" return 0 if(user.restrained()) - user << "\red You must have free hands to use this [src]" + user << "You must have free hands to use this [src]" return 0 if(user.lying) - user << "\red You must stand to use this [src]!" + user << "You must stand to use this [src]!" return 0 autoflag = 5 if (istype(user, /mob/living/silicon)) @@ -832,7 +861,7 @@ ) \ ) if(!loud) - user << "\red \The [src] has AI control disabled!" + user << "\The [src] has AI control disabled!" user << browse(null, "window=apc") user.unset_machine() return 0 @@ -844,10 +873,10 @@ if (istype(H)) if(H.getBrainLoss() >= 60) for(var/mob/M in viewers(src, null)) - M << "\red [H] stares cluelessly at [src] and drools." + M << "[H] stares cluelessly at [src] and drools." return 0 else if(prob(H.getBrainLoss())) - user << "\red You momentarily forget how to use [src]." + user << "You momentarily forget how to use [src]." return 0 return 1 @@ -989,34 +1018,34 @@ return if(!(src.z in config.station_levels)) return - src.occupant = new /mob/living/silicon/ai(src,malf.laws,null,1) - src.occupant.adjustOxyLoss(malf.getOxyLoss()) - if(!findtext(src.occupant.name,"APC Copy")) - src.occupant.name = "[malf.name] APC Copy" + src.occupier = new /mob/living/silicon/ai(src,malf.laws,null,1) + src.occupier.adjustOxyLoss(malf.getOxyLoss()) + if(!findtext(src.occupier.name,"APC Copy")) + src.occupier.name = "[malf.name] APC Copy" if(malf.parent) - src.occupant.parent = malf.parent + src.occupier.parent = malf.parent else - src.occupant.parent = malf - malf.mind.transfer_to(src.occupant) - src.occupant.eyeobj.name = "[src.occupant.name] (AI Eye)" + src.occupier.parent = malf + malf.mind.transfer_to(src.occupier) + src.occupier.eyeobj.name = "[src.occupier.name] (AI Eye)" if(malf.parent) qdel(malf) - src.occupant.verbs += /mob/living/silicon/ai/proc/corereturn - src.occupant.verbs += /datum/game_mode/malfunction/proc/takeover - src.occupant.cancel_camera() + src.occupier.verbs += /mob/living/silicon/ai/proc/corereturn + src.occupier.verbs += /datum/game_mode/malfunction/proc/takeover + src.occupier.cancel_camera() if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) for(var/obj/item/weapon/pinpointer/point in world) point.the_disk = src //the pinpointer will detect the shunted AI /obj/machinery/power/apc/proc/malfvacate(var/forced) - if(!src.occupant) + if(!src.occupier) return - if(src.occupant.parent && src.occupant.parent.stat != 2) - src.occupant.mind.transfer_to(src.occupant.parent) - src.occupant.parent.adjustOxyLoss(src.occupant.getOxyLoss()) - src.occupant.parent.cancel_camera() - qdel(src.occupant) + if(src.occupier.parent && src.occupier.parent.stat != 2) + src.occupier.mind.transfer_to(src.occupier.parent) + src.occupier.parent.adjustOxyLoss(src.occupier.getOxyLoss()) + src.occupier.parent.cancel_camera() + del(src.occupier) // qdel if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) for(var/obj/item/weapon/pinpointer/point in world) for(var/datum/mind/AI_mind in ticker.mode.malf_ai) @@ -1025,11 +1054,11 @@ point.the_disk = A //The pinpointer tracks the AI back into its core. else - src.occupant << "\red Primary core damaged, unable to return core processes." + src.occupier << "Primary core damaged, unable to return core processes." if(forced) - src.occupant.loc = src.loc - src.occupant.death() - src.occupant.gib() + src.occupier.loc = src.loc + src.occupier.death() + src.occupier.gib() for(var/obj/item/weapon/pinpointer/point in world) point.the_disk = null //the pinpointer will go back to pointing at the nuke disc. @@ -1040,7 +1069,7 @@ if(prob(3)) src.locked = 1 if (src.cell.charge > 0) -// world << "\red blew APC in [src.loc.loc]" +// world << "blew APC in [src.loc.loc]" src.cell.charge = 0 cell.corrupt() src.malfhack = 1 @@ -1053,7 +1082,7 @@ s.set_up(3, 1, src) s.start() for(var/mob/M in viewers(src)) - M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2) + M.show_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "You hear sizzling electronics.", 2) /obj/machinery/power/apc/surplus() @@ -1062,9 +1091,14 @@ else return 0 -/obj/machinery/power/apc/add_load(var/amount) +//Returns 1 if the APC should attempt to charge +/obj/machinery/power/apc/proc/attempt_charging() + return (chargemode && charging == 1 && operating) + +/obj/machinery/power/apc/draw_power(var/amount) if(terminal && terminal.powernet) - terminal.powernet.load += amount + return terminal.powernet.draw_power(amount) + return 0 /obj/machinery/power/apc/avail() if(terminal) @@ -1082,8 +1116,7 @@ lastused_light = area.usage(LIGHT) lastused_equip = area.usage(EQUIP) lastused_environ = area.usage(ENVIRON) - if(area.powerupdate) - area.clear_usage() + area.clear_usage() lastused_total = lastused_light + lastused_equip + lastused_environ @@ -1102,33 +1135,24 @@ else main_status = 2 - //if(debug) - //world << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light]" + if(debug) + log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") if(cell && !shorted) - var/cell_charge = cell.charge - var/cell_maxcharge = cell.maxcharge - // draw power from cell as before to power the area - - var/cellused = min(cell_charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) if(excess > lastused_total) // if power excess recharge the cell - // by the same amount just used - cell.give(cellused) - add_load(cellused/CELLRATE) // add the load used to recharge the cell - - + // by the same amount just used + var/draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell + cell.give(draw * CELLRATE) else // no excess, and not enough per-apc - - if( (cell_charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - - cell_charge = min(cell_maxcharge, cell_charge + CELLRATE * excess) //recharge with what we can - add_load(excess) // so draw what we can from the grid + if( (cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + var/draw = draw_power(excess) + cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * draw) //recharge with what we can charging = 0 - - else if (autoflag != 0) // not enough power available to run the last tick! + else // not enough power available to run the last tick! charging = 0 chargecount = 0 // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room. @@ -1138,7 +1162,7 @@ autoflag = 0 - // set channels depending on how much charge we have left + // Set channels depending on how much charge we have left // Allow the APC to operate as normal if the cell can charge if(charging && longtermpower < 10) @@ -1146,31 +1170,30 @@ else if(longtermpower > -10) longtermpower -= 2 - - if(cell_charge >= 1250 || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 + if(cell.charge >= 1250 || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 if(autoflag != 3) equipment = autoset(equipment, 1) lighting = autoset(lighting, 1) environ = autoset(environ, 1) autoflag = 3 area.poweralert(1, src) - if(cell_charge >= 4000) + if(cell.charge >= 4000) area.poweralert(1, src) - else if(cell_charge < 1250 && cell_charge > 750 && longtermpower < 0) // <30%, turn off equipment + else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) area.poweralert(0, src) autoflag = 2 - else if(cell_charge < 750 && cell_charge > 10 && longtermpower < 0) // <15%, turn off lighting & equipment - if(autoflag != 1) + else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment + if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0)) equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) environ = autoset(environ, 1) area.poweralert(0, src) autoflag = 1 - else if(cell_charge <= 0) // zero charge, turn all off + else if(cell.charge <= 0) // zero charge, turn all off if(autoflag != 0) equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) @@ -1180,32 +1203,31 @@ // now trickle-charge the cell - if(chargemode && charging == 1 && operating) + if(src.attempt_charging()) if(excess > 0) // check to make sure we have enough to charge // Max charge is capped to % per second constant var/ch = min(excess*CELLRATE, cell.maxcharge*CHARGELEVEL) - add_load(ch/CELLRATE) // Removes the power we're taking from the grid - cell.give(ch) // actually recharge the cell + + ch = draw_power(ch/CELLRATE) // Removes the power we're taking from the grid + cell.give(ch*CELLRATE) // actually recharge the cell else charging = 0 // stop charging chargecount = 0 // show cell as fully charged if so - if(cell.charge >= cell.maxcharge) cell.charge = cell.maxcharge charging = 2 if(chargemode) if(!charging) - if(excess > cell_maxcharge*CHARGELEVEL) + if(excess > cell.maxcharge*CHARGELEVEL) chargecount++ else chargecount = 0 - charging = 0 - if(chargecount == 10) + if(chargecount >= 10) chargecount = 0 charging = 1 @@ -1224,18 +1246,15 @@ area.poweralert(0, src) autoflag = 0 - // update icon & area power if anything changed + if(last_lt != lighting || last_eq != equipment || last_en != environ) queue_icon_update() update() else if (last_ch != charging) queue_icon_update() - -// val 0=off, 1=off(auto) 2=on 3=on(auto) -// on 0=off, 1=on, 2=autooff - -obj/machinery/power/apc/proc/autoset(var/val, var/on) + +/obj/machinery/power/apc/proc/autoset(var/val, var/on) if(on==0) if(val==2) // if on, return off return 0 @@ -1251,14 +1270,14 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) return 1 return val - + // damage and destruction acts /obj/machinery/power/apc/emp_act(severity) if(cell) cell.emp_act(severity) - if(occupant) - occupant.emp_act(severity) + if(occupier) + occupier.emp_act(severity) lighting = 0 equipment = 0 environ = 0 @@ -1293,6 +1312,12 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) set_broken() if (cell && prob(5)) cell.blob_act() + + +/obj/machinery/power/apc/disconnect_terminal() + if(terminal) + terminal.master = null + terminal = null /obj/machinery/power/apc/proc/set_broken() if(malfai && operating) @@ -1301,7 +1326,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) ticker.mode:apcs-- stat |= BROKEN operating = 0 - if(occupant) + if(occupier) malfvacate(1) update_icon() update() @@ -1320,35 +1345,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) L.broken() sleep(1) -/obj/machinery/power/apc/Destroy() - if(malfai && operating) - if (ticker.mode.config_tag == "malfunction") - if ((src.z in config.station_levels)) //if (is_type_in_list(get_area(src), the_station_areas)) - ticker.mode:apcs-- - area.power_light = 0 - area.power_equip = 0 - area.power_environ = 0 - area.power_change() - if(occupant) - malfvacate(1) - qdel(wires) - if(cell) - qdel(cell) - return ..() - -/obj/machinery/power/apc/proc/shock(mob/user, prb) - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(isalien(user)) - return 0 - if (electrocute_mob(user, src, src)) - return 1 - else - return 0 - /obj/machinery/power/apc/proc/setsubsystem(val) if(cell && cell.charge > 0) return (val==1) ? 0 : val diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 550d0ada3fe..33f4a475e86 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -1,27 +1,26 @@ -// attach a wire to a power machine - leads from the turf you are standing on +/////////////////////////////// +//CABLE STRUCTURE +/////////////////////////////// -/obj/machinery/power/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/stack/cable_coil)) +//////////////////////////////// +// Definitions +//////////////////////////////// - var/obj/item/stack/cable_coil/coil = W +/* Cable directions (d1 and d2) - var/turf/T = user.loc - if(T.intact || !istype(T, /turf/simulated/floor)) - return + 9 1 5 + \ | / + 8 - 0 - 4 + / | \ + 10 2 6 - if(get_dist(src, user) > 1) - return - - if(!directwired) // only for attaching to directwired machines - return - - coil.turf_place(T, user) - return - else - ..() - return +If d1 = 0 and d2 = 0, there's no cable +If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to dir (knot cable) +If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2 +By design, d1 is the smallest direction and d2 is the highest +*/ /obj/structure/cable level = 1 @@ -29,43 +28,33 @@ var/datum/powernet/powernet name = "power cable" desc = "A flexible superconducting cable for heavy-duty power transfer" - icon = 'icons/obj/power_cond/power_cond_red.dmi' + icon = 'icons/obj/power_cond/power_cond_white.dmi' icon_state = "0-1" var/d1 = 0 var/d2 = 1 layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 - var/cable_color = "red" - var/obj/structure/powerswitch/power_switch + color = COLOR_RED /obj/structure/cable/yellow - cable_color = "yellow" - icon = 'icons/obj/power_cond/power_cond_yellow.dmi' + color = COLOR_YELLOW /obj/structure/cable/green - cable_color = "green" - icon = 'icons/obj/power_cond/power_cond_green.dmi' + color = COLOR_GREEN /obj/structure/cable/blue - cable_color = "blue" - icon = 'icons/obj/power_cond/power_cond_blue.dmi' + color = COLOR_BLUE /obj/structure/cable/pink - cable_color = "pink" - icon = 'icons/obj/power_cond/power_cond_pink.dmi' + color = COLOR_PINK /obj/structure/cable/orange - cable_color = "orange" - icon = 'icons/obj/power_cond/power_cond_orange.dmi' + color = COLOR_ORANGE /obj/structure/cable/cyan - cable_color = "cyan" - icon = 'icons/obj/power_cond/power_cond_cyan.dmi' + color = COLOR_CYAN /obj/structure/cable/white - cable_color = "white" - icon = 'icons/obj/power_cond/power_cond_white.dmi' - -// the power cable object + color = COLOR_WHITE /obj/structure/cable/New() ..() @@ -82,15 +71,20 @@ var/turf/T = src.loc // hide if turf is not intact if(level==1) hide(T.intact) - cable_list += src + cable_list += src //add it to the global cable list -/obj/structure/cable/Destroy() // called when a cable is deleted +/obj/structure/cable/Destroy() // called when a cable is deleted if(powernet) - powernet.cut_cable(src) // update the powernets - cable_list -= src - return ..() // then go ahead and delete the cable + cut_cable_from_powernet() // update the powernets + cable_list -= src //remove it from global cable list + ..() // then go ahead and delete the cable +/////////////////////////////////// +// General procedures +/////////////////////////////////// + +//If underfloor, hide the cable /obj/structure/cable/hide(var/i) if(level == 1 && istype(loc, /turf)) @@ -108,51 +102,72 @@ /obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete return powernet +//Telekinesis has no effect on a cable /obj/structure/cable/attack_tk(mob/user) return -/obj/structure/cable/attackby(obj/item/W, mob/user, params) +// Items usable on a cable : +// - Wirecutters : cut it duh ! +// - Cable coil : merge cables +// - Multitool : get the power currently passing through the cable +// +/obj/structure/cable/attackby(obj/item/W, mob/user) var/turf/T = src.loc if(T.intact) return if(istype(W, /obj/item/weapon/wirecutters)) - -// if(power_switch) -// user << "\red This piece of cable is tied to a power switch. Flip the switch to remove it." -// return +///// Z-Level Stuff + /* if(src.d1 == 12 || src.d2 == 12) + user << "You must cut this cable from above." + return */ +///// Z-Level Stuff + /* if(breaker_box) + user << "\red This cable is connected to nearby breaker box. Use breaker box to interact with it." + return */ if (shock(user, 50)) return if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long - new/obj/item/stack/cable_coil(T, 2, cable_color) + new/obj/item/stack/cable_coil(T, 2, color) else - new/obj/item/stack/cable_coil(T, 1, cable_color) + new/obj/item/stack/cable_coil(T, 1, color) for(var/mob/O in viewers(src, null)) - O.show_message("\red [user] cuts the cable.", 1) + O.show_message("[user] cuts the cable.", 1) +///// Z-Level Stuff + /*if(src.d1 == 11 || src.d2 == 11) + var/turf/controllerlocation = locate(1, 1, z) + for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) + if(controller.down) + var/turf/below = locate(src.x, src.y, controller.down_target) + for(var/obj/structure/cable/c in below) + if(c.d1 == 12 || c.d2 == 12) + c.qdel()*/ +///// Z-Level Stuff investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires") - qdel(src) + qdel(src) // qdel return else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W + if (coil.get_amount() < 1) + user << "Not enough cable" + return coil.cable_join(src, user) else if(istype(W, /obj/item/device/multitool)) - var/datum/powernet/PN = get_powernet() // find the powernet - - if(PN && (PN.avail > 0)) // is it powered? - user << "\red [PN.avail]W in power network." + if(powernet && (powernet.avail > 0)) // is it powered? + user << "[powernet.avail]W in power network." else - user << "\red The cable is not powered." + user << "The cable is not powered." shock(user, 5, 0.2) @@ -163,7 +178,6 @@ src.add_fingerprint(user) // shock the user with probability prb - /obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0) if(!prob(prb)) return 0 @@ -175,35 +189,279 @@ else return 0 +//explosion handling /obj/structure/cable/ex_act(severity) switch(severity) if(1.0) - qdel(src) + qdel(src) // qdel if(2.0) if (prob(50)) - new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color) - qdel(src) + new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, color) + qdel(src) // qdel if(3.0) if (prob(25)) - new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color) - qdel(src) + new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, color) + qdel(src) // qdel return -/obj/structure/cable/singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - qdel(src) +obj/structure/cable/proc/cableColor(var/colorC) + var/color_n = "#DD0000" + if(colorC) + color_n = colorC + color = color_n -// the cable coil object, used for laying cable +///////////////////////////////////////////////// +// Cable laying helpers +//////////////////////////////////////////////// + +//handles merging diagonally matching cables +//for info : direction^3 is flipping horizontally, direction^12 is flipping vertically +/obj/structure/cable/proc/mergeDiagonalsNetworks(var/direction) + + //search for and merge diagonally matching cables from the first direction component (north/south) + var/turf/T = get_step(src, direction&3)//go north/south + + for(var/obj/structure/cable/C in T) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable + if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) + var/datum/powernet/newPN = new() + newPN.add_cable(C) + + if(powernet) //if we already have a powernet, then merge the two powernets + merge_powernets(powernet,C.powernet) + else + C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet + + //the same from the second direction component (east/west) + T = get_step(src, direction&12)//go east/west + + for(var/obj/structure/cable/C in T) + + if(!C) + continue + + if(src == C) + continue + if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable + if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) + var/datum/powernet/newPN = new() + newPN.add_cable(C) + + if(powernet) //if we already have a powernet, then merge the two powernets + merge_powernets(powernet,C.powernet) + else + C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet + +// merge with the powernets of power objects in the given direction +/obj/structure/cable/proc/mergeConnectedNetworks(var/direction) + + var/fdir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf + + if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing + return + + var/turf/TB = get_step(src, direction) + + for(var/obj/structure/cable/C in TB) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == fdir || C.d2 == fdir) //we've got a matching cable in the neighbor turf + if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) + var/datum/powernet/newPN = new() + newPN.add_cable(C) + + if(powernet) //if we already have a powernet, then merge the two powernets + merge_powernets(powernet,C.powernet) + else + C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet + +// merge with the powernets of power objects in the source turf +/obj/structure/cable/proc/mergeConnectedNetworksOnTurf() + var/list/to_connect = list() + + if(!powernet) //if we somehow have no powernet, make one (should not happen for cables) + var/datum/powernet/newPN = new() + newPN.add_cable(src) + + //first let's add turf cables to our powernet + //then we'll connect machines on turf with a node cable is present + for(var/AM in loc) + if(istype(AM,/obj/structure/cable)) + var/obj/structure/cable/C = AM + if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) //only connected if they have a common direction + if(C.powernet == powernet) continue + if(C.powernet) + merge_powernets(powernet, C.powernet) + else + powernet.add_cable(C) //the cable was powernetless, let's just add it to our powernet + + else if(istype(AM,/obj/machinery/power/apc)) + var/obj/machinery/power/apc/N = AM + if(!N.terminal) continue // APC are connected through their terminal + + if(N.terminal.powernet == powernet) + continue + + to_connect += N.terminal //we'll connect the machines after all cables are merged + + else if(istype(AM,/obj/machinery/power)) //other power machines + var/obj/machinery/power/M = AM + + if(M.powernet == powernet) + continue + + to_connect += M //we'll connect the machines after all cables are merged + + //now that cables are done, let's connect found machines + for(var/obj/machinery/power/PM in to_connect) + if(!PM.connect_to_network()) + PM.disconnect_from_network() //if we somehow can't connect the machine to the new powernet, remove it from the old nonetheless + +////////////////////////////////////////////// +// Powernets handling helpers +////////////////////////////////////////////// + +//if powernetless_only = 1, will only get connections without powernet +/obj/structure/cable/proc/get_connections(var/powernetless_only = 0) + . = list() // this will be a list of all connected power objects + var/turf/T + +///// Z-Level Stuff + /* if (d1 == 11 || d1 == 12) + var/turf/controllerlocation = locate(1, 1, z) + for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) + if(controller.up && d1 == 12) + T = locate(src.x, src.y, controller.up_target) + if(T) + . += power_list(T, src, 11, 1) + if(controller.down && d1 == 11) + T = locate(src.x, src.y, controller.down_target) + if(T) + . += power_list(T, src, 12, 1) */ +///// Z-Level Stuff + //get matching cables from the first direction + if(d1) //if not a node cable + T = get_step(src, d1) + if(T) + . += power_list(T, src, turn(d1, 180), powernetless_only) //get adjacents matching cables + + if(d1&(d1-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d1&3) // go north/south + if(T) + . += power_list(T, src, d1 ^ 3, powernetless_only) //get diagonally matching cables + T = get_step(src,d1&12) // go east/west + if(T) + . += power_list(T, src, d1 ^ 12, powernetless_only) //get diagonally matching cables + + . += power_list(loc, src, d1, powernetless_only) //get on turf matching cables + +///// Z-Level Stuff + /*if(d2 == 11 || d2 == 12) + var/turf/controllerlocation = locate(1, 1, z) + for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) + if(controller.up && d2 == 12) + T = locate(src.x, src.y, controller.up_target) + if(T) + . += power_list(T, src, 11, 1) + if(controller.down && d2 == 11) + T = locate(src.x, src.y, controller.down_target) + if(T) + . += power_list(T, src, 12, 1) +///// Z-Level Stuff + else */ + //do the same on the second direction (which can't be 0) + T = get_step(src, d2) + if(T) + . += power_list(T, src, turn(d2, 180), powernetless_only) //get adjacents matching cables + + if(d2&(d2-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d2&3) // go north/south + if(T) + . += power_list(T, src, d2 ^ 3, powernetless_only) //get diagonally matching cables + T = get_step(src,d2&12) // go east/west + if(T) + . += power_list(T, src, d2 ^ 12, powernetless_only) //get diagonally matching cables + . += power_list(loc, src, d2, powernetless_only) //get on turf matching cables + + return . + +//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. +//needed as this can, unlike other placements, disconnect cables +/obj/structure/cable/proc/denode() + var/turf/T1 = loc + if(!T1) return + + var/list/powerlist = power_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a powernet + if(powerlist.len>0) + var/datum/powernet/PN = new() + propagate_network(powerlist[1],PN) //propagates the new powernet beginning at the source cable + + if(PN.is_empty()) //can happen with machines made nodeless when smoothing cables + qdel(PN) // qdel + +// cut the cable's powernet at this cable and updates the powergrid +/obj/structure/cable/proc/cut_cable_from_powernet() + var/turf/T1 = loc + var/list/P_list + if(!T1) return + if(d1) + T1 = get_step(T1, d1) + P_list = power_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... + + P_list += power_list(loc, src, d1, 0, cable_only = 1)//... and on turf + + + if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its powernet + powernet.remove_cable(src) + + for(var/obj/machinery/power/P in T1)//check if it was powering a machine + if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_network() //remove from current network (and delete powernet) + return + + // remove the cut cable from its turf and powernet, so that it doesn't get count in propagate_network worklist + loc = null + powernet.remove_cable(src) //remove the cut cable from its powernet + + var/datum/powernet/newPN = new()// creates a new powernet... + propagate_network(P_list[1], newPN)//... and propagates it to the other side of the cable + + // Disconnect machines connected to nodes + if(d1 == 0) // if we cut a node (O-X) cable + for(var/obj/machinery/power/P in T1) + if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_network() //remove from current network + +/////////////////////////////////////////////// +// The cable coil object, used for laying cable +/////////////////////////////////////////////// + +//////////////////////////////// +// Definitions +//////////////////////////////// #define MAXCOIL 30 + /obj/item/stack/cable_coil name = "cable coil" icon = 'icons/obj/power.dmi' - icon_state = "coil_red" - item_state = "coil_red" + icon_state = "coil" amount = MAXCOIL - _color = "red" + max_amount = MAXCOIL + color = COLOR_RED desc = "A coil of power cable." throwforce = 10 w_class = 2.0 @@ -213,47 +471,86 @@ g_amt = 20 flags = CONDUCT slot_flags = SLOT_BELT + item_state = "coil" attack_verb = list("whipped", "lashed", "disciplined", "flogged") - suicide_act(mob/user) - if(locate(/obj/structure/stool) in user.loc) - viewers(user) << "[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide." - else - viewers(user) << "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." - return(OXYLOSS) +/obj/item/stack/cable_coil/suicide_act(mob/user) + if(locate(/obj/structure/stool) in user.loc) + user.visible_message("[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide.") + else + user.visible_message("[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.") + return(OXYLOSS) - -/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/param_color = null) +/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/paramcolor = null) ..() src.amount = length - if (param_color) - _color = param_color + if (paramcolor) + color = paramcolor + else + color = color pixel_x = rand(-2,2) pixel_y = rand(-2,2) update_icon() + update_wclass() + +/////////////////////////////////// +// General procedures +/////////////////////////////////// + +//you can use wires to heal robotics +/obj/item/stack/cable_coil/attack(mob/M as mob, mob/user as mob) + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting) + if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") + return ..() + + if(H.species.flags & IS_SYNTHETIC) + if(M == user) + user << "\red You can't repair damage to your own body - it's against OH&S." + return + + if(S.burn_dam > 0 && use(1)) + S.heal_damage(0,15,0,1) + user.visible_message("\red \The [user] repairs some burn damage on \the [M]'s [S.name] with \the [src].") + return + else + user << "Nothing to fix!" + + else + return ..() + /obj/item/stack/cable_coil/update_icon() - if (!_color) - _color = pick("red", "yellow", "blue", "green") + if (!color) + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + color = color if(amount == 1) - icon_state = "coil_[_color]1" + icon_state = "coil1" name = "cable piece" else if(amount == 2) - icon_state = "coil_[_color]2" + icon_state = "coil2" name = "cable piece" else - icon_state = "coil_[_color]" + icon_state = "coil" name = "cable coil" +/obj/item/stack/cable_coil/proc/update_wclass() + if(amount == 1) + w_class = 1.0 + else + w_class = 2.0 + /obj/item/stack/cable_coil/examine() set src in view(1) - if(amount == 1) + if(get_amount() == 1) usr << "A short piece of power cable." - else if(amount == 2) + else if(get_amount() == 2) usr << "A piece of power cable." else - usr << "A coil of power cable. There are [amount] lengths of cable in the coil." + usr << "A coil of power cable. There are [get_amount()] lengths of cable in the coil." + /obj/item/stack/cable_coil/verb/make_restraint() set name = "Make Cable Restraints" @@ -266,23 +563,25 @@ usr << "\red You need at least 15 lengths to make restraints!" return var/obj/item/weapon/restraints/handcuffs/cable/B = new /obj/item/weapon/restraints/handcuffs/cable(usr.loc) - B.icon_state = "cuff_[_color]" + B.icon_state = "cuff_[color]" usr << "\blue You wind some cable together to make some restraints." src.use(15) else usr << "\blue You cannot do that." ..() -/obj/item/stack/cable_coil/attackby(obj/item/weapon/W, mob/user, params) +// Items usable on a cable coil : +// - Wirecutters : cut them duh ! +// - Cable coil : merge cables +/obj/item/stack/cable_coil/attackby(obj/item/weapon/W, mob/user) ..() if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1) src.amount-- - new/obj/item/stack/cable_coil(user.loc, 1,_color) + new/obj/item/stack/cable_coil(user.loc, 1,color) user << "You cut a piece off the cable coil." src.update_icon() return - - else if( istype(W, /obj/item/stack/cable_coil) ) + else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if(C.amount >= MAXCOIL) user << "The coil is too long, you cannot add any more cable to it." @@ -301,20 +600,28 @@ src.use(amt) return +//remove cables from the stack +/* This is probably reduntant /obj/item/stack/cable_coil/use(var/used) if(src.amount < used) return 0 else if (src.amount == used) - //handle mob icon update - if(ismob(loc)) + if(ismob(loc)) //handle mob icon update var/mob/M = loc M.unEquip(src) - qdel(src) + qqdel(src) + return 1 else amount -= used update_icon() return 1 +*/ +/obj/item/stack/cable_coil/use(var/used) + . = ..() + update_icon() + return +//add cables to the stack /obj/item/stack/cable_coil/proc/give(var/extra) if(amount + extra > MAXCOIL) amount = MAXCOIL @@ -322,18 +629,24 @@ amount += extra update_icon() +/////////////////////////////////////////////// +// Cable laying procedures +////////////////////////////////////////////// + // called when cable_coil is clicked on a turf/simulated/floor - /obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user) - if(!isturf(user.loc)) return - if(get_dist(F,user) > 1) + if(get_amount() < 1) // Out of cable + user << "There is no cable left." + return + + if(get_dist(F,user) > 1) // Too far user << "You can't lay cable at a place that far away." return - if(F.intact) // if floor is intact, complain + if(F.intact) // Ff floor is intact, complain user << "You can't lay cable there unless the floor tiles are removed." return @@ -345,6 +658,48 @@ else dirn = get_dir(F, user) + for(var/obj/structure/cable/LC in F) + if((LC.d1 == dirn && LC.d2 == 0 ) || ( LC.d2 == dirn && LC.d1 == 0)) + user << "There's already a cable at that position." + return +///// Z-Level Stuff + // check if the target is open space + /* if(istype(F, /turf/simulated/floor/open)) + for(var/obj/structure/cable/LC in F) + if((LC.d1 == dirn && LC.d2 == 11 ) || ( LC.d2 == dirn && LC.d1 == 11)) + user << "There's already a cable at that position." + return + + var/turf/simulated/floor/open/temp = F + var/obj/structure/cable/C = new(F) + var/obj/structure/cable/D = new(temp.floorbelow) + + C.cableColor(color) + + C.d1 = 11 + C.d2 = dirn + C.add_fingerprint(user) + C.updateicon() + + var/datum/powernet/PN = new() + PN.add_cable(C) + + C.mergeConnectedNetworks(C.d2) + C.mergeConnectedNetworksOnTurf() + + D.cableColor(color) + + D.d1 = 12 + D.d2 = 0 + D.add_fingerprint(user) + D.updateicon() + + PN.add_cable(D) + D.mergeConnectedNetworksOnTurf() + + // do the normal stuff + else */ +///// Z-Level Stuff for(var/obj/structure/cable/LC in F) if((LC.d1 == dirn && LC.d2 == 0 ) || ( LC.d2 == dirn && LC.d1 == 0)) user << "There's already a cable at that position." @@ -352,34 +707,34 @@ var/obj/structure/cable/C = new(F) - C.cableColor(_color) + C.cableColor(color) - C.d1 = 0 + //set up the new cable + C.d1 = 0 //it's a O-X node cable C.d2 = dirn C.add_fingerprint(user) C.updateicon() - C.powernet = new() - powernets += C.powernet - C.powernet.cables += C + //create a new powernet with the cable, if needed it will be merged later + var/datum/powernet/PN = new() + PN.add_cable(C) - C.mergeConnectedNetworks(C.d2) - C.mergeConnectedNetworksOnTurf() + C.mergeConnectedNetworks(C.d2) //merge the powernet with adjacents powernets + C.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) use(1) if (C.shock(user, 50)) if (prob(50)) //fail - new/obj/item/stack/cable_coil(C.loc, 1, C.cable_color) - qdel(C) - //src.laying = 1 - //last = C - + new/obj/item/stack/cable_coil(C.loc, 1, C.color) + qdel(C) // qdel // called when cable_coil is click on an installed obj/cable - +// or click on a turf that already contains a "node" cable /obj/item/stack/cable_coil/proc/cable_join(obj/structure/cable/C, mob/user) - var/turf/U = user.loc if(!isturf(U)) return @@ -394,12 +749,14 @@ return - if(U == T) // do nothing if we clicked a cable we're standing on - return // may change later if can think of something logical to do + if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing + turf_place(T,user) + return var/dirn = get_dir(C, user) - if(C.d1 == dirn || C.d2 == dirn) // one end of the clicked cable is pointing towards us + // one end of the clicked cable is pointing towards us + if(C.d1 == dirn || C.d2 == dirn) if(U.intact) // can't place a cable if the floor is complete user << "You can't lay cable there unless the floor tiles are removed." return @@ -415,26 +772,34 @@ return var/obj/structure/cable/NC = new(U) - NC.cableColor(_color) + NC.cableColor(color) NC.d1 = 0 NC.d2 = fdirn NC.add_fingerprint() NC.updateicon() - if(C.powernet) - NC.powernet = C.powernet - NC.powernet.cables += NC - NC.mergeConnectedNetworks(NC.d2) - NC.mergeConnectedNetworksOnTurf() + //create a new powernet with the cable, if needed it will be merged later + var/datum/powernet/newPN = new() + newPN.add_cable(NC) + + NC.mergeConnectedNetworks(NC.d2) //merge the powernet with adjacents powernets + NC.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets + + if(NC.d2 & (NC.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + NC.mergeDiagonalsNetworks(NC.d2) + use(1) + if (NC.shock(user, 50)) if (prob(50)) //fail - new/obj/item/stack/cable_coil(NC.loc, 1, NC.cable_color) - qdel(NC) + new/obj/item/stack/cable_coil(NC.loc, 1, NC.color) + qdel(NC) // qdel return - else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub + + // exisiting cable doesn't point at our position, so see if it's a stub + else if(C.d1 == 0) // if so, make it a full cable pointing from it's old direction to our dirn var/nd1 = C.d2 // these will be the new directions var/nd2 = dirn @@ -453,7 +818,7 @@ return - C.cableColor(_color) + C.cableColor(color) C.d1 = nd1 C.d2 = nd2 @@ -462,110 +827,33 @@ C.updateicon() - C.mergeConnectedNetworks(C.d1) - C.mergeConnectedNetworks(C.d2) + C.mergeConnectedNetworks(C.d1) //merge the powernets... + C.mergeConnectedNetworks(C.d2) //...in the two new cable directions C.mergeConnectedNetworksOnTurf() + if(C.d1 & (C.d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d1) + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) + use(1) + if (C.shock(user, 50)) if (prob(50)) //fail - new/obj/item/stack/cable_coil(C.loc, 2, C.cable_color) - qdel(C) + new/obj/item/stack/cable_coil(C.loc, 2, C.color) + qdel(C) // qdel + return + C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets. return -/obj/structure/cable/proc/mergeConnectedNetworks(var/direction) - var/turf/TB - if(!(d1 == direction || d2 == direction)) - return - TB = get_step(src, direction) - - for(var/obj/structure/cable/TC in TB) - - if(!TC) - continue - - if(src == TC) - continue - - var/fdir = (!direction)? 0 : turn(direction, 180) - - if(TC.d1 == fdir || TC.d2 == fdir) - - if(!TC.powernet) - TC.powernet = new() - powernets += TC.powernet - TC.powernet.cables += TC - - if(powernet) - merge_powernets(powernet,TC.powernet) - else - powernet = TC.powernet - powernet.cables += src - - - - -/obj/structure/cable/proc/mergeConnectedNetworksOnTurf() - if(!powernet) - powernet = new() - powernets += powernet - powernet.cables += src - - for(var/AM in loc) - if(istype(AM,/obj/structure/cable)) - var/obj/structure/cable/C = AM - if(C.powernet == powernet) continue - if(C.powernet) - merge_powernets(powernet, C.powernet) - else - C.powernet = powernet - powernet.cables += C - - else if(istype(AM,/obj/machinery/power/apc)) - var/obj/machinery/power/apc/N = AM - if(!N.terminal) continue - if(N.terminal.powernet) - merge_powernets(powernet, N.terminal.powernet) - else - N.terminal.powernet = powernet - powernet.nodes[N.terminal] = N.terminal - - else if(istype(AM,/obj/machinery/power)) - var/obj/machinery/power/M = AM - if(M.powernet == powernet) continue - if(M.powernet) - merge_powernets(powernet, M.powernet) - else - M.powernet = powernet - powernet.nodes[M] = M - - -obj/structure/cable/proc/cableColor(var/colorC) - var/color_n = "red" - if(colorC) - color_n = colorC - cable_color = color_n - switch(colorC) - if("red") - icon = 'icons/obj/power_cond/power_cond_red.dmi' - if("yellow") - icon = 'icons/obj/power_cond/power_cond_yellow.dmi' - if("green") - icon = 'icons/obj/power_cond/power_cond_green.dmi' - if("blue") - icon = 'icons/obj/power_cond/power_cond_blue.dmi' - if("pink") - icon = 'icons/obj/power_cond/power_cond_pink.dmi' - if("orange") - icon = 'icons/obj/power_cond/power_cond_orange.dmi' - if("cyan") - icon = 'icons/obj/power_cond/power_cond_cyan.dmi' - if("white") - icon = 'icons/obj/power_cond/power_cond_white.dmi' +////////////////////////////// +// Misc. +///////////////////////////// /obj/item/stack/cable_coil/cut - item_state = "coil_red2" + item_state = "coil2" /obj/item/stack/cable_coil/cut/New(loc) ..() @@ -573,68 +861,37 @@ obj/structure/cable/proc/cableColor(var/colorC) pixel_x = rand(-2,2) pixel_y = rand(-2,2) update_icon() + update_wclass() /obj/item/stack/cable_coil/yellow - _color = "yellow" - icon_state = "coil_yellow" + color = COLOR_YELLOW /obj/item/stack/cable_coil/blue - _color = "blue" - icon_state = "coil_blue" - item_state = "coil_blue" + color = COLOR_BLUE /obj/item/stack/cable_coil/green - _color = "green" - icon_state = "coil_green" + color = COLOR_GREEN /obj/item/stack/cable_coil/pink - _color = "pink" - icon_state = "coil_pink" + color = COLOR_PINK /obj/item/stack/cable_coil/orange - _color = "orange" - icon_state = "coil_orange" + color = COLOR_ORANGE /obj/item/stack/cable_coil/cyan - _color = "cyan" - icon_state = "coil_cyan" + color = COLOR_CYAN /obj/item/stack/cable_coil/white - _color = "white" - icon_state = "coil_white" + color = COLOR_WHITE /obj/item/stack/cable_coil/random/New() - _color = pick("red","yellow","green","blue","pink") - icon_state = "coil_[_color]" + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) ..() -/obj/item/stack/cable_coil/attack(mob/M as mob, mob/user as mob) - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting) - if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") - return ..() - - if(H.species.flags & IS_SYNTHETIC) - if(M == user) - user << "\red You can't repair damage to your own body - it's against OH&S." - return - - if(S.burn_dam > 0 && use(1)) - S.heal_damage(0,15,0,1) - user.visible_message("\red \The [user] repairs some burn damage on \the [M]'s [S.name] with \the [src].") - H.updatehealth() - return - else - user << "Nothing to fix!" - - else - return ..() - /obj/item/stack/cable_coil/cyborg name = "cyborg cable coil" /obj/item/stack/cable_coil/cyborg/attack_self(mob/user) - var/cable_color = input(user,"Pick a cable color.","Cable Color") in list("red","yellow","green","blue","pink","orange","cyan","white") - _color = cable_color - update_icon() \ No newline at end of file + var/cablecolor = input(user,"Pick a cable color.","Cable Color") in list("red","yellow","green","blue","pink","orange","cyan","white") + color = cablecolor + update_icon() \ No newline at end of file diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index ff952f7c07e..5e7e935e1f7 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -1,26 +1,37 @@ +////////////////////////////// +// POWER MACHINERY BASE CLASS +////////////////////////////// + +///////////////////////////// +// Definitions +///////////////////////////// + /obj/machinery/power name = null icon = 'icons/obj/power.dmi' anchored = 1.0 var/datum/powernet/powernet = null - var/directwired = 1 // by default, power machines are connected by a cable in a neighbouring turf - // if set to 0, requires a 0-X cable on this turf use_power = 0 idle_power_usage = 0 active_power_usage = 0 -/obj/machinery/power/Destroy() +/obj/machinery/power/Del() disconnect_from_network() - return ..() + ..() + +/////////////////////////////// +// General procedures +////////////////////////////// // common helper procs for all power machines /obj/machinery/power/proc/add_avail(var/amount) if(powernet) powernet.newavail += amount -/obj/machinery/power/proc/add_load(var/amount) +/obj/machinery/power/proc/draw_power(var/amount) if(powernet) - powernet.load += amount + return powernet.draw_power(amount) + return 0 /obj/machinery/power/proc/surplus() if(powernet) @@ -34,17 +45,16 @@ else return 0 +/obj/machinery/power/proc/disconnect_terminal() // machines without a terminal will just return, no harm no fowl. + return + // returns true if the area has power on given channel (or doesn't require power). // defaults to power_channel - -/obj/machinery/proc/powered(var/chan = -1) +/obj/machinery/proc/powered(var/chan = -1) // defaults to power_channel if(!src.loc) return 0 - if(!use_power) - return 1 - var/area/A = src.loc.loc // make sure it's in an area if(!A || !isarea(A)) return 0 // if not, then not powered @@ -71,94 +81,63 @@ stat |= NOPOWER return +// connect the machine to a powernet if a node cable is present on the turf +/obj/machinery/power/proc/connect_to_network() + var/turf/T = src.loc + if(!T || !istype(T)) + return 0 -// the powernet datum -// each contiguous network of cables & nodes - - -// rebuild all power networks from scratch - -/hook/startup/proc/buildPowernets() - return makepowernets() - -/proc/makepowernets() - for(var/datum/powernet/PN in powernets) - qdel(PN) - powernets.Cut() - - for(var/obj/structure/cable/PC in cable_list) - if(!PC.powernet) - PC.powernet = new() - powernets += PC.powernet -// if(Debug) world.log << "Starting mpn at [PC.x],[PC.y] ([PC.d1]/[PC.d2])" - powernet_nextlink(PC,PC.powernet) - -// if(Debug) world.log << "[powernets.len] powernets found" - - for(var/obj/structure/cable/C in cable_list) - if(!C.powernet) continue - C.powernet.cables += C - - for(var/obj/machinery/power/M in machines) - if(!M.powernet) continue // APCs have powernet=0 so they don't count as network nodes directly - M.powernet.nodes[M] = M + var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked + if(!C || !C.powernet) + return 0 + C.powernet.add_machine(src) return 1 +// remove and disconnect the machine from its current powernet +/obj/machinery/power/proc/disconnect_from_network() + if(!powernet) + return 0 + powernet.remove_machine(src) + return 1 -// returns a list of all power-related objects (nodes, cable, junctions) in turf, -// excluding source, that match the direction d -// if unmarked==1, only return those with no powernet -/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0) - . = list() - var/fdir = (!d)? 0 : turn(d, 180) // the opposite direction to d (or 0 if d==0) -// world.log << "d=[d] fdir=[fdir]" - for(var/AM in T) - if(AM == source) continue //we don't want to return source +// attach a wire to a power machine - leads from the turf you are standing on +//almost never called, overwritten by all power machines but terminal and generator +/obj/machinery/power/attackby(obj/item/weapon/W, mob/user) - if(istype(AM,/obj/machinery/power)) - var/obj/machinery/power/P = AM - if(P.powernet == 0) continue // exclude APCs which have powernet=0 + if(istype(W, /obj/item/stack/cable_coil)) - if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet - if(P.directwired || (d == 0)) - . += P + var/obj/item/stack/cable_coil/coil = W - else if(istype(AM,/obj/structure/cable)) - var/obj/structure/cable/C = AM + var/turf/T = user.loc - if(!unmarked || !C.powernet) - if(C.d1 == fdir || C.d2 == fdir) - . += C - else if(C.d1 == turn(C.d2, 180)) - . += C - return . + if(T.intact || !istype(T, /turf/simulated/floor)) + return + if(get_dist(src, user) > 1) + return -/obj/structure/cable/proc/get_connections() - . = list() // this will be a list of all connected power objects - var/turf/T = loc - - if(d1) T = get_step(src, d1) - if(T) . += power_list(T, src, d1, 1) - - T = get_step(src, d2) - if(T) . += power_list(T, src, d2, 1) - - return . + coil.turf_place(T, user) + return + else + ..() + return +/////////////////////////////////////////// +// Powernet handling helpers +////////////////////////////////////////// +//returns all the cables WITHOUT a powernet in neighbors turfs, +//pointing towards the turf the machine is located at /obj/machinery/power/proc/get_connections() . = list() - if(!directwired) - return get_indirect_connections() - var/cdir + var/turf/T for(var/card in cardinal) - var/turf/T = get_step(loc,card) + T = get_step(loc,card) cdir = get_dir(T,loc) for(var/obj/structure/cable/C in T) @@ -167,193 +146,132 @@ . += C return . +//returns all the cables in neighbors turfs, +//pointing towards the turf the machine is located at +/obj/machinery/power/proc/get_marked_connections() + + . = list() + + var/cdir + var/turf/T + + for(var/card in cardinal) + T = get_step(loc,card) + cdir = get_dir(T,loc) + + for(var/obj/structure/cable/C in T) + if(C.d1 == cdir || C.d2 == cdir) + . += C + return . + +//returns all the NODES (O-X) cables WITHOUT a powernet in the turf the machine is located at /obj/machinery/power/proc/get_indirect_connections() . = list() for(var/obj/structure/cable/C in loc) if(C.powernet) continue - if(C.d1 == 0) + if(C.d1 == 0) // the cable is a node cable . += C return . +/////////////////////////////////////////// +// GLOBAL PROCS for powernets handling +////////////////////////////////////////// -/proc/powernet_nextlink(var/obj/O, var/datum/powernet/PN) - var/list/P - while(1) - if( istype(O,/obj/structure/cable) ) - var/obj/structure/cable/C = O - C.powernet = PN - P = C.get_connections() +// returns a list of all power-related objects (nodes, cable, junctions) in turf, +// excluding source, that match the direction d +// if unmarked==1, only return those with no powernet +/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0) + . = list() + var/fdir = (!d)? 0 : turn(d, 180) // the opposite direction to d (or 0 if d==0) +///// Z-Level Stuff + var/Zdir + if(d==11) + Zdir = 11 + else if (d==12) + Zdir = 12 + else + Zdir = 999 +///// Z-Level Stuff + for(var/AM in T) + if(AM == source) continue //we don't want to return source - else if(O.anchored && istype(O,/obj/machinery/power)) - var/obj/machinery/power/M = O - M.powernet = PN - P = M.get_connections() + if(!cable_only && istype(AM,/obj/machinery/power)) + var/obj/machinery/power/P = AM + if(P.powernet == 0) continue // exclude APCs which have powernet=0 + + if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet + if(d == 0) + . += P + + else if(istype(AM,/obj/structure/cable)) + var/obj/structure/cable/C = AM + + if(!unmarked || !C.powernet) +///// Z-Level Stuff + if(C.d1 == fdir || C.d2 == fdir || C.d1 == Zdir || C.d2 == Zdir) +///// Z-Level Stuff + . += C + else if(C.d1 == d || C.d2 == d) + . += C + return . + +/hook/startup/proc/buildPowernets() + return makepowernets() + +// rebuild all power networks from scratch - only called at world creation or by the admin verb +/proc/makepowernets() + for(var/datum/powernet/PN in powernets) + del(PN) + powernets.Cut() + + for(var/obj/structure/cable/PC in cable_list) + if(!PC.powernet) + var/datum/powernet/NewPN = new() + NewPN.add_cable(PC) + propagate_network(PC,PC.powernet) + return 1 + +//remove the old powernet and replace it with a new one throughout the network. +/proc/propagate_network(var/obj/O, var/datum/powernet/PN) + //world.log << "propagating new network" + var/list/worklist = list() + var/list/found_machines = list() + var/index = 1 + var/obj/P = null + + worklist+=O //start propagating from the passed object + + while(index<=worklist.len) //until we've exhausted all power objects + P = worklist[index] //get the next power object found + index++ + + if( istype(P,/obj/structure/cable)) + var/obj/structure/cable/C = P + if(C.powernet != PN) //add it to the powernet, if it isn't already there + PN.add_cable(C) + worklist |= C.get_connections() //get adjacents power objects, with or without a powernet + + else if(P.anchored && istype(P,/obj/machinery/power)) + var/obj/machinery/power/M = P + found_machines |= M //we wait until the powernet is fully propagates to connect the machines else - return + continue - if(P.len == 0) return - - O = P[1] - - for(var/L = 2 to P.len) - powernet_nextlink(P[L], PN) + //now that the powernet is set, connect found machines to it + for(var/obj/machinery/power/PM in found_machines) + if(!PM.connect_to_network()) //couldn't find a node on its turf... + PM.disconnect_from_network() //... so disconnect if already on a powernet -// cut a powernet at this cable object -/datum/powernet/proc/cut_cable(var/obj/structure/cable/C) - var/turf/T1 = C.loc - if(!T1) return - var/node = 0 - if(C.d1 == 0) - node = 1 - - var/turf/T2 - if(C.d2) T2 = get_step(T1, C.d2) - if(C.d1) T1 = get_step(T1, C.d1) - - - var/list/P1 = power_list(T1, C, C.d1) // what joins on to cut cable in dir1 - var/list/P2 = power_list(T2, C, C.d2) // what joins on to cut cable in dir2 - -// if(Debug) -// for(var/obj/O in P1) -// world.log << "P1: [O] at [O.x] [O.y] : [istype(O, /obj/structure/cable) ? "[O:d1]/[O:d2]" : null] " -// for(var/obj/O in P2) -// world.log << "P2: [O] at [O.x] [O.y] : [istype(O, /obj/structure/cable) ? "[O:d1]/[O:d2]" : null] " - - - if(P1.len == 0 || P2.len == 0)//if nothing in either list, then the cable was an endpoint no need to rebuild the powernet, - cables -= C //just remove cut cable from the list -// if(Debug) world.log << "Was end of cable" +//Merge two powernets, the bigger (in cable length term) absorbing the other +/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2) + if(!net1 || !net2) //if one of the powernet doesn't exist, return return - //null the powernet reference of all cables & nodes in this powernet - var/i=1 - while(i<=cables.len) - var/obj/structure/cable/Cable = cables[i] - if(Cable) - Cable.powernet = null - if(Cable == C) - cables.Cut(i,i+1) - continue - i++ - i=1 - while(i<=nodes.len) - var/obj/machinery/power/Node = nodes[i] - if(Node) - Node.powernet = null - i++ - - // remove the cut cable from the network -// C.netnum = -1 - - C.loc = null - - powernet_nextlink(P1[1], src) // propagate network from 1st side of cable, using current netnum //TODO? - - // now test to see if propagation reached to the other side - // if so, then there's a loop in the network - var/notlooped = 0 - for(var/O in P2) - if( istype(O, /obj/machinery/power) ) - var/obj/machinery/power/Machine = O - if(Machine.powernet != src) - notlooped = 1 - break - else if( istype(O, /obj/structure/cable) ) - var/obj/structure/cable/Cable = O - if(Cable.powernet != src) - notlooped = 1 - break - - if(notlooped) - // not looped, so make a new powernet - var/datum/powernet/PN = new() - powernets += PN - -// if(Debug) world.log << "Was not looped: spliting PN#[number] ([cables.len];[nodes.len])" - - i=1 - while(i<=cables.len) - var/obj/structure/cable/Cable = cables[i] - if(Cable && !Cable.powernet) // non-connected cables will have powernet=null, since they weren't reached by propagation - Cable.powernet = PN - cables.Cut(i,i+1) // remove from old network & add to new one - PN.cables += Cable - continue - i++ - - i=1 - while(i<=nodes.len) - var/obj/machinery/power/Node = nodes[i] - if(Node && !Node.powernet) - Node.powernet = PN - nodes.Cut(i,i+1) - PN.nodes[Node] = Node - continue - i++ - - // Disconnect machines connected to nodes - if(node) - for(var/obj/machinery/power/P in T1) - if(P.powernet && !P.powernet.nodes[src]) - P.disconnect_from_network() -// if(Debug) -// world.log << "Old PN#[number] : ([cables.len];[nodes.len])" -// world.log << "New PN#[PN.number] : ([PN.cables.len];[PN.nodes.len])" -// -// else -// if(Debug) -// world.log << "Was looped." -// //there is a loop, so nothing to be done -// return - - - -/datum/powernet/proc/reset() - - //see if there's a surplus of power remaining in the powernet and stores unused power in the SMES - netexcess = avail - load - - if(netexcess > 100 && nodes && nodes.len) // if there was excess power last cycle - for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network - S.restore() // and restore some of the power that was used - - //updates the viewed load (as seen on power computers) - viewload = 0.8*viewload + 0.2*load - viewload = round(viewload) - - //reset the powernet - load = 0 - avail = newavail - newavail = 0 - -/datum/powernet/proc/get_electrocute_damage() - switch(avail) - if (5000000 to INFINITY) - return min(rand(200,300),rand(200,300)) - if (4000000 to 5000000) - return min(rand(80,180),rand(80,180)) - if (1000000 to 4000000) - return min(rand(50,160),rand(50,160)) - if (200000 to 1000000) - return min(rand(25,80),rand(25,80)) - if (100000 to 200000)//Ave powernet - return min(rand(20,60),rand(20,60)) - if (50000 to 100000) - return min(rand(15,40),rand(15,40)) - if (1000 to 50000) - return min(rand(10,20),rand(10,20)) - else - return 0 - -//The powernet that calls this proc will consume the other powernet - Rockdtben -//TODO: rewrite so the larger net absorbs the smaller net -/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2) - if(!net1 || !net2) return - if(net1 == net2) return + if(net1 == net2) //don't merge same powernets + return //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around @@ -361,57 +279,18 @@ net1 = net2 net2 = temp - for(var/i=1,i<=net2.nodes.len,i++) //merge net2 into net1 - var/obj/machinery/power/Node = net2.nodes[i] - if(Node) - Node.powernet = net1 - net1.nodes[Node] = Node + //merge net2 into net1 + for(var/obj/structure/cable/Cable in net2.cables) //merge cables + net1.add_cable(Cable) + + if(!net2) return net1 - for(var/i=1,i<=net2.cables.len,i++) - var/obj/structure/cable/Cable = net2.cables[i] - if(Cable) - Cable.powernet = net1 - net1.cables += Cable + for(var/obj/machinery/power/Node in net2.nodes) //merge power machines + if(!Node.connect_to_network()) + Node.disconnect_from_network() //if somehow we can't connect the machine to the new powernet, disconnect it from the old nonetheless - qdel(net2) return net1 - -/obj/machinery/power/proc/connect_to_network() - var/turf/T = src.loc - var/obj/structure/cable/C = T.get_cable_node() - if(!C || !C.powernet) return 0 -// makepowernets() //TODO: find fast way //EWWWW what are you doing!? - powernet = C.powernet - powernet.nodes[src] = src - return 1 - -/obj/machinery/power/proc/disconnect_from_network() - if(!powernet) - //world << " no powernet" - return 0 - powernet.nodes -= src - powernet = null - //world << "powernet null" - return 1 - -/turf/proc/get_cable_node() - if(!istype(src, /turf/simulated/floor)) - return null - for(var/obj/structure/cable/C in src) - if(C.d1 == 0) - return C - return null - -/area/proc/get_apc() - // This was a simple locate() in src, but an unresolved BYOND bug causes trying to locate() in an - // area to take an inconceivably long time, especially for large areas. - // See: http://www.byond.com/forum/?post=1860571 - var/obj/machinery/power/apc/FINDME - for(FINDME in src) - return FINDME - - //Determines how strong could be shock, deals damage to mob, uses power. //M is a mob who touched wire/whatever //power_source is a source of electricity, can be powercell, area, apc, cable, powernet or null @@ -419,9 +298,6 @@ //No animations will be performed by this proc. /proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb - - //This is for performance optimization only. - //DO NOT modify siemens_coeff here. That is checked in human/electrocute_act() if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.gloves) @@ -475,8 +351,7 @@ source_area.use_power(drained_energy/CELLRATE) else if (istype(power_source,/datum/powernet)) var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts" - PN.load+=drained_power + drained_power = PN.draw_power(drained_power) else if (istype(power_source, /obj/item/weapon/stock_parts/cell)) cell.use(drained_energy) return drained_energy - diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm new file mode 100644 index 00000000000..e80113b3057 --- /dev/null +++ b/code/modules/power/powernet.dm @@ -0,0 +1,158 @@ +/datum/powernet + var/list/cables = list() // all cables & junctions + var/list/nodes = list() // all connected machines + + var/load = 0 // the current load on the powernet, increased by each machine at processing + var/newavail = 0 // what available power was gathered last tick, then becomes... + var/avail = 0 //...the current available power in the powernet + var/viewload = 0 // the load as it appears on the power console (gradually updated) + var/number = 0 // Unused //TODEL + + var/perapc = 0 // per-apc avilability + var/perapc_excess = 0 + var/netexcess = 0 // excess power on the powernet (typically avail-load) + + var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet. + + +/datum/powernet/New() + powernets += src + ..() + +/datum/powernet/Destroy() + powernets -= src + ..() + +//Returns the amount of excess power (before refunding to SMESs) from last tick. +//This is for machines that might adjust their power consumption using this data. +/datum/powernet/proc/last_surplus() + return max(avail - load, 0) + +/datum/powernet/proc/draw_power(var/amount) + var/draw = between(0, amount, avail - load) + load += draw + return draw + +/datum/powernet/proc/is_empty() + return !cables.len && !nodes.len + +//remove a cable from the current powernet +//if the powernet is then empty, delete it +//Warning : this proc DON'T check if the cable exists +/datum/powernet/proc/remove_cable(var/obj/structure/cable/C) + cables -= C + C.powernet = null + if(is_empty())//the powernet is now empty... + del(src)///... delete it - qdel + +//add a cable to the current powernet +//Warning : this proc DON'T check if the cable exists +/datum/powernet/proc/add_cable(var/obj/structure/cable/C) + if(C.powernet)// if C already has a powernet... + if(C.powernet == src) + return + else + C.powernet.remove_cable(C) //..remove it + C.powernet = src + cables +=C + +//remove a power machine from the current powernet +//if the powernet is then empty, delete it +//Warning : this proc DON'T check if the machine exists +/datum/powernet/proc/remove_machine(var/obj/machinery/power/M) + nodes -=M + M.powernet = null + if(is_empty())//the powernet is now empty... + del(src)///... delete it - qdel + + +//add a power machine to the current powernet +//Warning : this proc DON'T check if the machine exists +/datum/powernet/proc/add_machine(var/obj/machinery/power/M) + if(M.powernet)// if M already has a powernet... + if(M.powernet == src) + return + else + M.disconnect_from_network()//..remove it + M.powernet = src + nodes[M] = M + +// Triggers warning for certain amount of ticks +/datum/powernet/proc/trigger_warning(var/duration_ticks = 20) + problem = max(duration_ticks, problem) + +//handles the power changes in the powernet +//called every ticks by the powernet controller +/datum/powernet/proc/reset() + var/numapc = 0 + + if(problem > 0) + problem = max(problem - 1, 0) + + if(nodes && nodes.len) // Added to fix a bad list bug -- TLE + for(var/obj/machinery/power/terminal/term in nodes) + if( istype( term.master, /obj/machinery/power/apc ) ) + numapc++ + + netexcess = avail - load + + if(numapc) + //very simple load balancing. If there was a net excess this tick then it must have been that some APCs used less than perapc, since perapc*numapc = avail + //Therefore we can raise the amount of power rationed out to APCs on the assumption that those APCs that used less than perapc will continue to do so. + //If that assumption fails, then some APCs will miss out on power next tick, however it will be rebalanced for the tick after. + if (netexcess >= 0) + perapc_excess += min(netexcess/numapc, (avail - perapc) - perapc_excess) + else + perapc_excess = 0 + + perapc = avail/numapc + perapc_excess + + if(netexcess > 100 && nodes && nodes.len) // if there was excess power last cycle + for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network + S.restore() // and restore some of the power that was used + + //updates the viewed load (as seen on power computers) + viewload = round(load) + + //reset the powernet + load = 0 + avail = newavail + newavail = 0 + +/datum/powernet/proc/get_electrocute_damage() + switch(avail) + if (1000000 to INFINITY) + return min(rand(50,160),rand(50,160)) + if (200000 to 1000000) + return min(rand(25,80),rand(25,80)) + if (100000 to 200000)//Ave powernet + return min(rand(20,60),rand(20,60)) + if (50000 to 100000) + return min(rand(15,40),rand(15,40)) + if (1000 to 50000) + return min(rand(10,20),rand(10,20)) + else + return 0 + +//////////////////////////////////////////////// +// Misc. +/////////////////////////////////////////////// + + +// return a knot cable (O-X) if one is present in the turf +// null if there's none +/turf/proc/get_cable_node() + if(!istype(src, /turf/simulated/floor)) + return null + for(var/obj/structure/cable/C in src) + if(C.d1 == 0) + return C + return null + +/area/proc/get_apc() + // This was a simple locate() in src, but an unresolved BYOND bug causes trying to locate() in an + // area to take an inconceivably long time, especially for large areas. + // See: http://www.byond.com/forum/?post=1860571 + var/obj/machinery/power/apc/FINDME + for(FINDME in src) + return FINDME \ No newline at end of file diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index c7e96dd4737..3e94274cf2f 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -8,7 +8,6 @@ var/global/list/rad_collectors = list() icon_state = "ca" anchored = 0 density = 1 - directwired = 1 req_access = list(access_engine_equip) // use_power = 0 var/obj/item/weapon/tank/plasma/P = null diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index b940014b517..2b32af83526 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -46,57 +46,23 @@ return 1 return 0 - - -/obj/machinery/containment_field/proc/shock(mob/living/user as mob) +/obj/machinery/containment_field/shock(mob/living/user as mob) if(hasShocked) return 0 if(!FG1 || !FG2) qdel(src) return 0 - if(iscarbon(user)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, user.loc) - s.start() - + if(isliving(user)) hasShocked = 1 var/shock_damage = min(rand(30,40),rand(30,40)) - user.burn_skin(shock_damage) - user.updatehealth() - user.visible_message("\red [user.name] was shocked by the [src.name]!", \ - "\red You feel a powerful shock course through your body sending you flying!", \ - "\red You hear a heavy electrical crack") + user.electrocute_act(shock_damage, src) - var/stun = min(shock_damage, 15) - user.Stun(stun) - user.Weaken(10) - - user.updatehealth() var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src))) user.throw_at(target, 200, 4) sleep(20) + hasShocked = 0 - return - - else if(issilicon(user)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, user.loc) - s.start() - - hasShocked = 1 - var/shock_damage = rand(15,30) - user.take_overall_damage(0,shock_damage) - user.visible_message("\red [user.name] was shocked by the [src.name]!", \ - "\red Energy pulse detected, system damaged!", \ - "\red You hear an electrical crack") - if(prob(20)) - user.Stun(2) - - sleep(20) - hasShocked = 0 - return - return /obj/machinery/containment_field/proc/set_master(var/master1,var/master2) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 687cbd7dcb5..a30d2de451e 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -48,7 +48,6 @@ ..() if(state == 2 && anchored) connect_to_network() - src.directwired = 1 if(frequency) set_frequency(frequency) /obj/machinery/power/emitter/multitool_menu(var/mob/user,var/obj/item/device/multitool/P) @@ -145,8 +144,8 @@ return if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1)) - if(!active_power_usage || avail(active_power_usage)) - add_load(active_power_usage) + var/actual_load = draw_power(active_power_usage) + if(actual_load >= active_power_usage) //does the laser have enough power to shoot? if(!powered) powered = 1 update_icon() @@ -238,7 +237,6 @@ state = 2 user << "You weld the [src] to the floor." connect_to_network() - src.directwired = 1 else user << "\red You need more welding fuel to complete this task." if(2) @@ -252,7 +250,6 @@ state = 1 user << "You cut the [src] free from the floor." disconnect_from_network() - src.directwired = 0 else user << "\red You need more welding fuel to complete this task." return @@ -275,11 +272,8 @@ ..() return -/obj/machinery/power/emitter/emag_act(user as mob) +/obj/machinery/power/emitter/emag_act(var/mob/living/user as mob) if(!emagged) - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user locked = 0 emagged = 1 - H.visible_message("[H.name] emags the [src.name].","\red You short out the lock.") + user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.") diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index ba38cf9ea73..7fb7aee723b 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -13,22 +13,32 @@ icon_state = "smes" density = 1 anchored = 1 - use_power = 0 - var/output = 50000 - var/lastout = 0 - var/loaddemand = 0 - var/capacity = 5e6 - var/charge = 0 - var/charging = 0 - var/chargemode = 0 - var/chargecount = 0 - var/chargelevel = 50000 - var/input_level_max = 200000 // cap on input_level - var/output_level_max = 200000 // cap on output_level - var/online = 1 + + var/capacity = 5e6 // maximum charge + var/charge = 1e6 // actual charge + + var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge + var/inputting = 0 // 1 = actually inputting, 0 = not inputting + var/input_level = 50000 // amount of power the SMES attempts to charge by + var/input_level_max = 200000 // cap on input_level + var/input_available = 0 // amount of charge available from input last tick + + var/output_attempt = 1 // 1 = attempting to output, 0 = not attempting to output + var/outputting = 1 // 1 = actually outputting, 0 = not outputting + var/output_level = 50000 // amount of power the SMES attempts to output + var/output_level_max = 200000 // cap on output_level + var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power + + //Holders for powerout event. + var/last_output_attempt = 0 + var/last_input_attempt = 0 + var/last_charge = 0 + + var/open_hatch = 0 var/name_tag = null + var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! var/obj/machinery/power/terminal/terminal = null - var/list/overlay_images + /obj/machinery/power/smes/New() ..() @@ -42,6 +52,7 @@ component_parts += new /obj/item/weapon/stock_parts/capacitor(null) component_parts += new /obj/item/stack/cable_coil(null, 5) RefreshParts() + spawn(5) if(!powernet) connect_to_network() @@ -59,9 +70,22 @@ terminal.master = src if(!terminal.powernet) terminal.connect_to_network() - updateicon() + update_icon() return +/obj/machinery/power/smes/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/smes(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/stack/cable_coil(null, 5) + RefreshParts() + /obj/machinery/power/smes/RefreshParts() var/IO = 0 var/C = 0 @@ -73,41 +97,25 @@ C += PC.maxcharge capacity = C / (15000) * 1e6 -/obj/machinery/power/smes/proc/updateicon() +/obj/machinery/power/smes/update_icon() overlays.Cut() if(stat & BROKEN) return - if(isnull(src.overlay_images)) - src.overlay_images = new - src.overlay_images.len = 3 + overlays += image('icons/obj/power.dmi', "smes-op[outputting]") - src.overlay_images[1] = image('icons/obj/power.dmi', "smes-op[online]") - src.overlay_images[2] = image('icons/obj/power.dmi', "smes-oc0") - src.overlay_images[3] = image('icons/obj/power.dmi', "smes-og1") - - var/image/buffer - - buffer = src.overlay_images[1] - buffer.icon_state = "smes-op[online]" - overlays += src.overlay_images[1] - - if(!charging && chargemode) - buffer = src.overlay_images[2] - buffer.icon_state = "smes-oc0" - overlays += src.overlay_images[2] + if(inputting == 2) + overlays += image('icons/obj/power.dmi', "smes-oc2") + else if (inputting == 1) + overlays += image('icons/obj/power.dmi', "smes-oc1") else - buffer = src.overlay_images[2] - buffer.icon_state = "smes-oc1" - overlays += src.overlay_images[2] + if(input_attempt) + overlays += image('icons/obj/power.dmi', "smes-oc0") var/clevel = chargedisplay() - if(clevel > 0) - buffer = src.overlay_images[3] - buffer.icon_state = "smes-og[clevel]" - overlays += src.overlay_images[3] + if(clevel>0) + overlays += image('icons/obj/power.dmi', "smes-og[clevel]") return - /obj/machinery/power/smes/attackby(obj/item/I, mob/user, params) //opening using screwdriver if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) @@ -203,7 +211,7 @@ user.visible_message(\ "[user.name] cuts the cables and dismantles the power terminal.",\ "You cut the cables and dismantle the power terminal.") - charging = 0 //stop inputting, since we have don't have a terminal anymore + inputting = 0 //stop inputting, since we have don't have a terminal anymore qdel(terminal) return @@ -221,92 +229,70 @@ disconnect_terminal() return ..() -// create a terminal object pointing towards the SMES -// wires will attach to this -/obj/machinery/power/smes/proc/make_terminal(var/turf/T) - terminal = new/obj/machinery/power/terminal(T) - terminal.dir = get_dir(T,src) - terminal.master = src - -/obj/machinery/power/smes/proc/disconnect_terminal() - if(terminal) - terminal.master = null - terminal = null + return round(5.5*charge/(capacity ? capacity : 5e6)) /obj/machinery/power/smes/proc/chargedisplay() - return round(5.5*charge/capacity) - + return round(5.5*charge/(capacity ? capacity : 5e6)) +#define SMESRATE 0.05 /obj/machinery/power/smes/process() - if(stat & BROKEN) - return + + if(stat & BROKEN) return //store machine state to see if we need to update the icon overlays var/last_disp = chargedisplay() - var/last_chrg = charging - var/last_onln = online + var/last_chrg = inputting + var/last_onln = outputting - if(terminal) - var/excess = terminal.surplus() + //inputting + if(input_attempt) + 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 - if(charging) - if(excess >= 0) // if there's power available, try to charge + if (actual_load >= target_load) // Did we charge at full rate? + inputting = 2 + else if (actual_load) // If not, did we charge at least partially? + inputting = 1 + else // Or not at all? + inputting = 0 - var/load = min((capacity-charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity + //outputting + if(outputting) + output_used = min( charge/SMESRATE, output_level) //limit output to that stored - charge += load * SMESRATE // increase the charge + charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) - add_load(load) // add the load to the terminal side network + add_avail(output_used) // add output to powernet (smes side) - else // if not enough capcity - charging = 0 // stop charging - chargecount = 0 - - else - if(chargemode) - if(chargecount > rand(3,6)) - charging = 1 - chargecount = 0 - - if(excess > chargelevel) - chargecount++ - else - chargecount = 0 - else - chargecount = 0 - - if(online) // if outputting - lastout = min( charge/SMESRATE, output) //limit output to that stored - - charge -= lastout*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) - - add_avail(lastout) // add output to powernet (smes side) - - if(charge < 0.0001) - online = 0 // stop output if charge falls to zero + if(output_used < 0.0001) // either from no charge or set to 0 + outputting = 0 + investigate_log("lost power and turned off","singulo") + else if(output_attempt && charge > output_level && output_level > 0) + outputting = 1 + else + output_used = 0 // only update icon if state changed - if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online) - updateicon() + if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) + update_icon() + - return // called after all power processes are finished // restores charge level to smes if there was excess this ptick - - /obj/machinery/power/smes/proc/restore() if(stat & BROKEN) return - if(!online) - loaddemand = 0 + if(!outputting) + output_used = 0 return var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes - excess = min(lastout, excess) // clamp it to how much was actually output by this SMES last ptick + excess = min(output_used, excess) // clamp it to how much was actually output by this SMES last ptick excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen) @@ -314,23 +300,51 @@ var/clev = chargedisplay() - charge += excess * SMESRATE + charge += excess * SMESRATE // restore unused power powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it - loaddemand = lastout-excess + output_used -= excess - if(clev != chargedisplay() ) - updateicon() + if(clev != chargedisplay() ) //if needed updates the icons overlay + update_icon() return +//Will return 1 on failure +/obj/machinery/power/smes/proc/make_terminal(const/mob/user) + if (user.loc == loc) + user << "You must not be on the same tile as the [src]." + return 1 -/obj/machinery/power/smes/add_load(var/amount) + //Direction the terminal will face to + var/tempDir = get_dir(user, src) + switch(tempDir) + if (NORTHEAST, SOUTHEAST) + tempDir = EAST + if (NORTHWEST, SOUTHWEST) + tempDir = WEST + var/turf/tempLoc = get_step(src, reverse_direction(tempDir)) + if (istype(tempLoc, /turf/space)) + user << "You can't build a terminal on space." + return 1 + else if (istype(tempLoc)) + if(tempLoc.intact) + user << "You must remove the floor plating first." + return 1 + user << "You start adding cable to the [src]." + if(do_after(user, 50)) + terminal = new /obj/machinery/power/terminal(tempLoc) + terminal.dir = tempDir + terminal.master = src + return 0 + return 1 + +/obj/machinery/power/smes/draw_power(var/amount) if(terminal && terminal.powernet) - terminal.powernet.load += amount - + return terminal.powernet.draw_power(amount) + return 0 /obj/machinery/power/smes/attack_ai(mob/user) - add_fingerprint(user) + add_hiddenprint(user) ui_interact(user) /obj/machinery/power/smes/attack_ghost(mob/user) @@ -344,7 +358,6 @@ return /obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(stat & BROKEN) return @@ -352,14 +365,21 @@ var/data[0] data["nameTag"] = name_tag data["storedCapacity"] = round(100.0*charge/capacity, 0.1) - data["charging"] = charging - data["chargeMode"] = chargemode - data["chargeLevel"] = chargelevel + data["charging"] = inputting + data["chargeMode"] = input_attempt + data["chargeLevel"] = input_level data["chargeMax"] = input_level_max - data["outputOnline"] = online - data["outputLevel"] = output + data["outputOnline"] = output_attempt + data["outputLevel"] = output_level data["outputMax"] = output_level_max - data["outputLoad"] = round(loaddemand) + data["outputLoad"] = round(output_used) + + if(outputting) + data["outputting"] = 2 // smes is outputting + else if(!outputting && output_attempt) + data["outputting"] = 1 // smes is online but not outputting because it's charge level is too low + else + data["outputting"] = 0 // smes is not outputting // 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) @@ -374,7 +394,6 @@ // auto update every Master Controller tick ui.set_auto_update(1) - /obj/machinery/power/smes/Topic(href, href_list) ..() @@ -391,43 +410,39 @@ return 0 // Do not update ui if( href_list["cmode"] ) - chargemode = !chargemode - if(!chargemode) - charging = 0 - updateicon() + inputting(!input_attempt) + update_icon() else if( href_list["online"] ) - online = !online - updateicon() + outputting(!output_attempt) + update_icon() else if( href_list["input"] ) switch( href_list["input"] ) if("min") - chargelevel = 0 + input_level = 0 if("max") - chargelevel = input_level_max //30000 + input_level = input_level_max if("set") - chargelevel = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", chargelevel) as num - chargelevel = max(0, min(input_level_max, chargelevel)) // clamp to range + input_level = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", input_level) as num + input_level = max(0, min(input_level_max, input_level)) // clamp to range else if( href_list["output"] ) switch( href_list["output"] ) if("min") - output = 0 + output_level = 0 if("max") - output = output_level_max //30000 + output_level = output_level_max if("set") - output = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output) as num - output = max(0, min(output_level_max, output)) // clamp to range + output_level = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output_level) as num + output_level = max(0, min(output_level_max, output_level)) // clamp to range - investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") + investigate_log("input/output; [input_level>output_level?"":""][input_level]/[output_level] | Output-mode: [output_attempt?"on":"off"] | Input-mode: [input_attempt?"auto":"off"] by [usr.key]","singulo") return 1 - /obj/machinery/power/smes/proc/ion_act() - if((src.z in config.station_levels)) + if(src.z in config.station_levels) if(prob(1)) //explosion - world << "\red SMES explosion in [src.loc.loc]" for(var/mob/M in viewers(src)) M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2) sleep(10*pick(4,5,6,7,10,14)) @@ -435,11 +450,10 @@ smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() - explosion(src.loc, -1, 0, 1, 3, 0) + explosion(src.loc, -1, 0, 1, 3, 1, 0) qdel(src) return if(prob(15)) //Power drain - world << "\red SMES power drain in [src.loc.loc]" var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -448,45 +462,43 @@ else emp_act(2) if(prob(5)) //smoke only - world << "\red SMES smoke in [src.loc.loc]" var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() +/obj/machinery/power/smes/proc/inputting(var/do_input) + input_attempt = do_input + if(!input_attempt) + inputting = 0 + +/obj/machinery/power/smes/proc/outputting(var/do_output) + output_attempt = do_output + if(!output_attempt) + outputting = 0 /obj/machinery/power/smes/emp_act(severity) - online = 0 - charging = 0 - output = 0 + inputting(rand(0,1)) + outputting(rand(0,1)) + output_level = rand(0, output_level_max) + input_level = rand(0, input_level_max) charge -= 1e6/severity if (charge < 0) charge = 0 - spawn(100) - output = initial(output) - charging = initial(charging) - online = initial(online) + update_icon() ..() - - /obj/machinery/power/smes/engineering - charge = 1e6 // Engineering starts with some charge for singulo + charge = 1e6 // Engineering starts with some charge for singulo /obj/machinery/power/smes/magical name = "magical power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Magically produces power." - process() - capacity = INFINITY - charge = INFINITY - ..() + capacity = 9000000 + output_level = 250000 -/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) - var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+" - if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+" - return rate +/obj/machinery/power/smes/magical/process() + charge = 5000000 + ..() - - -#undef SMESRATE +#undef SMESRATE \ No newline at end of file diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 3eb5b0dc8e3..33b4dddea2e 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -289,15 +289,11 @@ var/lastgen = 0 var/track = 0 // 0= off 1=timed 2=auto (tracker) var/trackrate = 600 // 300-900 seconds - var/nexttime = 0 // time for a panel to rotate of 1° in manual tracking + var/nexttime = 0 // time for a panel to rotate of 1? in manual tracking var/obj/machinery/power/tracker/connected_tracker = null var/list/connected_panels = list() - -/obj/machinery/power/solar_control/New() - ..() - if(ticker) - initialize() +/obj/machinery/power/solar_control/initialize() connect_to_network() /obj/machinery/power/solar_control/Destroy() @@ -309,11 +305,12 @@ /obj/machinery/power/solar_control/disconnect_from_network() ..() - sun.solars.Remove(src) + if(sun) + sun.solars.Remove(src) /obj/machinery/power/solar_control/connect_to_network() var/to_return = ..() - if(powernet) //if connected and not already in solar list... + if(powernet && sun) //if connected and not already in solar list... sun.solars |= src //... add it return to_return @@ -366,9 +363,21 @@ if(cdir > -1) overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) +/obj/machinery/power/solar_control/attack_ai(mob/user as mob) + src.add_hiddenprint(user) + ui_interact(user) + +/obj/machinery/power/solar_control/attack_ghost(mob/user as mob) + ui_interact(user) + /obj/machinery/power/solar_control/attack_hand(mob/user) - if(!..()) - ui_interact(user) + if(..(user)) + return 1 + + if(stat & BROKEN) + return + + ui_interact(user) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) @@ -438,9 +447,9 @@ connected_tracker.unset_control() if(track==1 && trackrate) //manual tracking and set a rotation speed - if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1°... + if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1?... targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it - nexttime += 36000/abs(trackrate) //reset the counter for the next 1° + nexttime += 36000/abs(trackrate) //reset the counter for the next 1? /obj/machinery/power/solar_control/Topic(href, href_list) if(..()) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index f739ba93fda..194e96f6dba 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -11,7 +11,6 @@ layer = TURF_LAYER var/obj/machinery/power/master = null anchored = 1 - directwired = 0 // must have a cable on same turf connecting to terminal layer = 2.6 // a bit above wires @@ -20,6 +19,11 @@ var/turf/T = src.loc if(level==1) hide(T.intact) return + +/obj/machinery/power/terminal/Destroy() + if(master) + master.disconnect_terminal() + return ..() /obj/machinery/power/terminal/hide(var/i) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index d429d876769..9fc6765e6fa 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -23,11 +23,11 @@ /obj/machinery/power/tracker/Destroy() unset_control() //remove from control computer - return ..() + ..() //set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST /obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) - if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST)) + if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) return 0 control = SC SC.connected_tracker = src @@ -58,7 +58,7 @@ if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet control.cdir = angle -/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user, params) +/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user) if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) @@ -70,7 +70,7 @@ S.give_glass() playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.") - qdel(src) + del(src) // qdel return ..() @@ -81,4 +81,4 @@ name = "tracker electronics" icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" - w_class = 2.0 \ No newline at end of file + w_class = 2.0 diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 01e52edfee9..583de36d245 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -22,7 +22,6 @@ anchored = 1 density = 1 var/obj/machinery/compressor/compressor - directwired = 1 var/turf/simulated/outturf var/lastgen diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index ee922a055a6..4f0b81e5315 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -35,20 +35,6 @@ src.disable_wire = pick(w) w -= src.disable_wire -/obj/machinery/r_n_d/proc/ - shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 - /obj/machinery/r_n_d/attack_hand(mob/user as mob) if (shocked) shock(user,50) diff --git a/code/world.dm b/code/world.dm index e1e99b18d2f..2086f563590 100644 --- a/code/world.dm +++ b/code/world.dm @@ -18,7 +18,7 @@ var/global/datum/global_init/init = new () cache_lifespan = 0 //stops player uploaded stuff from being kept in the rsc past the current session -#define RECOMMENDED_VERSION 501 +#define RECOMMENDED_VERSION 508 /world/New() //logs diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index f0628147b4d5ff586fb68ce168d85a925897c93a..ea42ac5b39daa095c8d980df70860c1f5d3297a4 100644 GIT binary patch literal 24398 zcmbTebzEFsvo6?3ut0zS!68V{1h?Ss7Th%ihoC_l3GVLDxJz(%clY4IA-FX*oA>+9 znRDmN%{~IIvn@ ztjR(?3|O?bJif7?`&!n&R!^3Qa4Y$gOT%(ddwX_!u`kBUD}ZxCbv^gPh{C2VzSrni z^Gry%hH7s%d!4!R(-gI|xK&SlwOs0qYURS>LTI>R? z*N&X2%21K;XQrA<9~4O&u;XOiV`I-z=xNWhOP{EhG)t zwqqd^?MO-sY}C@db+(E=}-!2SpR6^G3Bgp7sJ+TWe~{ z2L+{$Y=}$OKjoTCrjhyc`yBIF(e^1qN?cuDZC1>Ez`CP&Z!lgU>E`v<%7_Yr0xEbz zJ&JzYNwqShd;Dh%{lS`NYwec$AUIbZy7wuRChoTEXoFbdx! zscF2@wvw)Ryk{mCGnGwyn7g430-=w5LFTAWiYv90;lU9jAHC-AnC0`E5m6MaQJ*X? zYn2Ol6$gWLM5b4s@0UNE3JaklBXzA(K93v!(c*364GP>X*yM~7gs0Y!!5amE-h-q> zg;ZS9j?z6{u(w;EPR@cfaxu*@B`42~WYE;mka2KCYiRmGFa&EM>a^K}C0A^UpWeSi zpeK)yxm-A4q@S>7zzD4wN~P{4C$~6@`Y>@&XEv!}ggxc^UX;1);@3`gmQ@mA8z z+Ydt+78xxHLs;^C7R*~=BxFi9LEr`-KLkl6GRmk45Hgt`{M-My>Bui`JP}8qQSe$5 zf+1`r_^(lNWvRNs*V&J+>WS2_p>>)%|M?i}(gTc_jlHt81^#EG*7dfypFy zzM6Q$k&vvHmMJ17_4a;f zJ0Xx`u0JecNkQC;Y!ihi1=y>Hf#++$>~x@_eP5>2I3@B(cSgSNV0$&KED2@n5Ef0q z8L;nSOk?!lr9bh1*8m+3h0ajhSy)&owdt#?+|6)j*s#05KAu6u2nHD@vWsBeL*+AJ-eHicsMEJv9sQV= zbDv6pS5gN9_EFt+U7i6g^#|2kCA6^-6s&tSYI8$6Bxjp-EKwZ z7?#u72iJM1meC=C{=UP#gS7gkUS7#KCR6 z4!VPQemjI%bkY{MC^0Lp=|48>D;(XK_vYYE;Qh{jTy>8xQZ86J2xzz8mR3OU#SM8n z$~eSu{)|X~0)tLk$BEh{b+-}>y0;1QVqPPKTrfh|1oW6`UfVx!Cvv>l*o_TQf;tZU z)oT$*-;RJ@Wc48`R4-p}g`u4XVejYu{#o}WDwHIJgp5)^qtQO^xM-kd>Lzxqa2%V4 z%x{5`d{`P!u=S(NV8*>ia1V?Qn(zN6PW>0#`8T-HHY6L6SAFdNrV|y*cXNXR;1D)! z*#C-d|NXB24@ew*_hQ$YXZI|y!z)!vk8e)e^&JIN)tamrM(%ChsgkbUPipIp!)zjX zH_g17p(|?XK9cZU?bo7HyLt!9dDZ)|lmk^tXqkEmAKDo|ME(9mKg;R^g=u*PPdut< zer_b$E2J5@_bQG}FOW~SuxyW~SO4b7e0^Ec6Pi2TI;)^yIy?U>#MungxMdT1|4eh@ zRlWzd*nAXtVqAUJA$vTY@w=}`yQv8K+fD%o@12s85_d8`J8NQ3oG#tIT+E6QP1anb zJ*SSKxNUo9+^24Rrq;?NMv(QRC#=Hl+otxFjPVUbd=J0tR=&L6r9#OwQhbj%<*YT~ z7DlpA1+*)^w*Z1!Z#pdRb{OYNJZ)dZ}ZI zAnPN2dLN}j@>5tI6m;mQe>Jl3s9@^%V_3R?d5|byK&%-3m;8;BX2t4_qxb?Kfc=kD z$-|cgm-Wgxh8{z4A@F?WS8lH)ZT+U!8UlT5lrWHp{C=B|LZ269co3n@2$QvbZF*Eqp14Ykne8@G7(+UVXxqt`#y{)w6`|fVjXS)_$DwhZSs+m?LwWiXWHMnV%zCd;(w?i|V3BdG|1UdDu>o;L1gRC^Gy zTVMm4tkYD}HG9MT>cI6*j+oafH3*Sdq>3-GO?OJQ5)cEM3_0hb;SL% zEs=IYC;Vbs{Rnw~fb!UWRae8g!A40h8B%T>+-9U8DM4kP=y0W_)8iBisMsa3%q33q zXX4~i-LX+iJFI%SA^MBy$cyRJq`luU7C}E}*IjtHSULbJUdjj=dCd#ipj?L*aVP9e zN2?v%JG+NCqkPr0=gSstk;qf+Emx4xsvTZDrd^_SQAyB=q`^G-Vy;?w_@A8-BA#Uu zen-&2yjQhVC<~-^Y~{8lNkv(9@Ie6}E)ZsBxGL?aF$XKgx4T%E0i!RGT0`!E2x)5= ztCR}-#`kRd^^%JKv3$5fhdfgcGaHXr*5cjk(J_4%b{_f$qPPDC{$W3B=Zl+}4kP|Q zbSVFUTyB3DX)hktXf<24hqj2!Dw(GM7EN&Y%^LN!d|IJZ^Crrw7bGe`w?MMuc>D1t zSQpX6!@`gMr?V1yYb!?5{y%(15xvU9bPHx`6Jw-mjnMR8*}()kDdyiJ-E zYJ5gJS3og@8w_`Z(x%LV|Fz}nXc0@$p5ix;UG|iwEKB0PLi7QgLGs_}rH(cMi52Q# zOzG}&W$sX^9hOI0B~Ndse}-#R@=PB=`av8QKV}rOm@fc>OD?!?TR@dBGIpPMqd&mQ zB2cNDv`)@jEaoTp86nt)`Fvn;k#i>f?5ry}%-^b$n{&S$CkNXRMFxM>) z$+D)V;KeRqb+Ew3s#U0iDEZnjDlK)o9xm?{5=d3k(%^z5qSdGp_=!snKJff!Tj;=q zR1IaeBt2GjYQ(YZzS?rM{0MN5OuI%d7dK)i0LxSf9K?jvGR_`kM)M7Rcl$TE(OI!( zQldc1Hv!_*=l!`jYj5B+i+!RNm8Ph*JL6w3eI@QrN^V$73b&&p2ITBnX_9fG_tfzj`7;;UC6 z=^T$Iz$obfgK|A~P zWD$@9g%IP?VOqAWdX3xo-~VWxP%4&Mt#PTGaj+@3~8AqMQMn5*ugk6HenWD&p7@GlD zv)z44%g2(>Rh5KNjrfm^gMZcrLYC+MsA;~o$MaL)DLBzEDqpzTANYD~KNxXrbxm<9PX+dsu2ja#+xBqwvMZ4_RnJAp`2LPV3Tf@WvQnR&<{5wK?)lL9U=7$l3{Qnm%|95|K&`rz*z{$={ z|7Z%d>PekiV+o-#Q4u)GSA$WtmhoneqDQLmA-wzr`hrq6vvl6&y6T&;pB+%DVBb?> zg@lCsa@dszb^LC0uyfpzg;db6ntA7D;#E19Z6xk4R9=BVQViwOiUMbTxwxyRu;FAjBVGQZz1;R{-)K~wuA{?n8Kr>a)2N}W@=dd7HZ;CApoSnf~WoBT4?mK%E-wz)cbC|Is zQuVpo#3+)#-^r16OMy}0zxI_C+ZGF@1HBvCaVj*L3woz z>-4kD5=T_ay9zA$wa9lf`3MC9H=~zX3=@p9e2ApTDu5X;$d2gwHN`SU47@#wX+il` zjR#4}zA>i!M=51J9h4PRII@uRD^Fo>WIWh7}?q4N*Eo@`+=udqR}cJh@w23Dj}Sj*}xB( z$_f}@)Uh@rtYZ;i1k)g05CSrp+v1#}v%E3t@|&K0RLh8vHI=DiX)i9O`}A1!jP={? zunZ}%o6EucT2A-`eA68A#JGHsZ1)ZZB`36ovQ7P+`^h8W`RdgLCgZZ|B~HS6IAIth zwotSWFwX8q!HRacAifBHJlKgKNv^XmVeQkToYyC3hH#j=*xC6;#W-RNW6)>OT*0d^ z$%&W-@E}>tO#R%Dhqu#qV{`(*cBIb5dyB)Mk{F8gu8icJ3Oggw^7=KBm0|E=Jf#h7 zL`V1oqF`RU|&05yBs@@n)&bq5J?2eDfHck6fpbljPzU`sUqYJEpo?_^f0B6x#FQK(5j?^=% z$P*b#Wfl(}_3vyl1Mg=GFpkKx#lf9*Hm5}IH>U@N8>bM6Iu=Bpe~g%v@IdZw#CsLu z0C&m@D{Dsj)1qtV4Y^(n!+EHL*p*-dZ^@8Cl0lauye_c%cLEebLLwry1ynSHggAZ# z;Q~AMBzGTD)}9{kE4|tWZ>_*jjA2AY*f={c?f^laEDWV$>X zrJB`Ny4v}s zGidQq%S-hi7^h(SCzW!0xtriN^R4EX4{;23iCRCqUj4Sv(Ezq@*b+5Az9JYW6RK#8 znW-*{F^Rwx>Yh~Mb86myhYxmXXy%P`E0^p#MekVH7uV4)=kCJ`>+iPn9Ykn6?7!Qu z_@usr8y?Y7J6{YDv$nR%L4>qJMpD>^r)ij+;P==@)p?a+9rKNCSZgf7p7V5j%Z$wN z7JWqK2lcP{IH$|pR@;SylijzT`y$E|BpG2P(~!Go{zjd1b)4hHBZ=ZMwDqjHHulW! z-rt<`Z__thuo~_`N=61Roj+hijD9Ed3M_(0Jz_)e`Db@@qM7}m3|C$6mTRkz~ ze42%D$%&|IHm9~p!ta0~DX?+F>Nc1601Ejy{5=dBck>Z{ zPbc!}_<-5%0t-jHi%Y;qVuzZk1{vkNR8El;`P(v8Qq*-Aere;Da`}kD^WEzi(zq)# zRDZkYwZqAECOG@q2x6t;UMoVwBe^D{-jG~AzOs?Odm~5O2nRU;CB+!Xc7R(sqv1eWgK|soD%lUrim9WyQL{?lYg=!j`liGHPzqWzkK|QEoYc zv6zhRDchTn^82%UMCCl8)SO>9LSITQ$ms5)l?-Vc9p@V0<1}ad^p;Ib4A4@7fzls^ zEBJaXECPbWO}`AgsX^ZOtO1}Pucz=VCIaYr;N^XN%D3i%haPBU*^N~hZohV#Q@xoOrC(Pm4hn;HY!=zKz$6P6K7TWx&u7bc-)CkAEaobo##I=;~qi@}U@z4Bt4g943SMRVl z)t}d9-T&y4PV^v6lwcR84=`pB4_K#0TKH}!7;iiT!TTp{qer7oWjTLyfoWkE@WC75 z2fPl^9E$JHjkcMV^V79;`e%2$#mWhL`{p>ujn-gqX4uknmRGE5KoSMcn?;1ZOWR_0 zzC;}YlQ-FbrZ{RVqN&-nOG#Tr0{CjVlI9&PGv(+zpElMY zXsG^t&g@1hwS3f{@DT1EVKE5!9YTZGGgzIjJ2zTCV#osbf=j5x9oEGXoAxCBGvQPe zznInDsnJm3pJG|q%F-{^$ApDt>=9>hVOtNP(i3HM%zPsAKrD6t^LHRRX+%jy8~5Sm z?kC&UZE4S>kq3|id{Sw32*8SzZ%JW{pnq>o^S6=(8)&?tMLf306y2;|Wpfe0E&O~w z>>PkwFC`gx@GAtqRZ!Gdu*G_zSWdB5?>@;js+lwz!u1R|$2gd;4ua9sm4^TLpCJR@ zhV;wiM{k0^cRzp*<4mY1Sp_<*yt6NY{~=KFLqI=`z&+|S(lm4Ug7f>G%?wOut_oNC zR2A+%O?=&<%Xm{+zLZ<=tzAR#SJu9pUfmH=LFZw_%Sjg;0`#j58wl)8uV?#rF5$%^ zpL(2Ke;fTU$#dM9RbLJn_{}8nzSgc$Y?G@)1woBhd8+R|`MJm4?++3)f2#EOT-L`n z0#U9ESeyp@?I7&L`Jca6gp)E|X?(#r$Q8_~>%civYgZtj{lU)bG3){U#p$Nidmn7i z#-?K2hia>wA>>Qn73(WO8o$jAduj2R@=Iqh%#+2vJ~#y;XzP0>g-rgrtaKFNYB24y z5*0K==VNf;EaL^7_cL*u;54u6IcylQcE#wEa8=;z%^2Sgh71$GZmK)?YForre#hvP z{b{~K-u$`UN*o74;S8tK4?qlNv2Mhc7Gd~ifQ0lCjhH$3WDx3C4IZ8;qM>aEnB>@3 z62(~f*^K{LC-yg(@gJ(4->JKhF%3kJL?L;slGRK0FPsr`qzDj+3*5NV$@D`q1OI&q z8vG?+?IQ~AR>`>hMhe$`zWAUjj#L?GM}-GOTa;)<&Uivi{?->b*RUTb6{5asCZBBt z4gt<0pKBWMDTH!Z3X%1`OaUcuB|bjpY5e4H5c^*#&n_Sl;p$5{EG;J&UO?dFN4W?@fs~OAJ1Le#$6iMZ%tyZ) zvBbp0mZ0W?W0fYu@4CT4bMu7y{QI%LfellR<1u$F9w1-rjLIy`Imjw>AMUJiDC-BR z!tVvPsbgl=OfJ+FhmBin8)xlJ18EMQ?h~XDThHv5#4mh=3Z?8%We) ztEb1Tcr2%YB_z~#v-q!A$=;rcCAfsGO(w2EML(3mFzB`53G%{*0l65e;i-Ueeq|sh z=krM$x>ZzA-W7sFkJ`TiIPv8=nG@}{JF@Cy5|3R|?I&%G2eGfJ7@;8=7tXPa=lBk% zpAQPU4v{9x0m&QqK5_C!4{AS-a$K=SfJj}|;dpx-2Au`#=1iJ(QPu+j0DT|Uw#9dgDTfZJ z6FE_x^1RHshN(DlS#Pyy^tm=++TnM}VGY6pWbZQ#bTDk()^q;UJvk3{@(1=m=Vq;P zJ_y8N^V{r@TT}ucL`&T%S8$>Y&&K%<=B~yjdkt!`T}k~kfGF*Cd%8hGM|XZqBs5hY z0wfzv85OZ~nZ|T2klMt+wSR=UJB-a6>Neo2~p+dL4! zMpfQnzNNe@$u&JE_?74@bKUwTrY-&q&^!Cc+}oKtQ6!je9=BQ96@p^hw6b0Mmd%)w zy1K*`?w3)%#RBG2lpqWEy@IE|L(&L{{9Uu}kp{7Rv4JNsjuZs~(t~I5nc@cELsnQy z5QU)dIf{ehpGzkWOpU0^<7?Q_TK>ULFBXJvDUAz$xMc@RI*8#tqC^G zqXsH&TUvEi_-}~0;Xz#YN7Yyn%&7%Wyy$$FQ5#8Ugd7d3@WM#6k_*UvrgT3})cj!n zF4vFGF`K44C2U+pQ%IZ+P(PGNjcJTA^@*=Kn zZEgEs`u>Sk$Zl;V4tzr_43G(*ZmcaVgzIfqCRSJ9fLtE0=6$k6s$0Ll%*V?rXr5DK zZRugNoPwh1HCL(`QS%a_9p3@tOtgD>dEED}aU4}!jaB(=F*K~hN^r~5{JB@~#J${2 zy~JIZPt@AwNglJyoUV*s~buXrK^8JuBWU6odUGj$a=mCVvW_L#b9eh`{8g-_~7ip2^@ z9Km4i9Y*?o@ogGGT#)iL!0-eLX%vXTH-?E9uDM>Bdy{PB!+bRc4`vH^w+c!<#YDlD z6nAY>pc|h>{}!bXnpcp7`7w3=LksRm7BeVzjPaY=Cz%Xb6TLavF2fObaP`Kv* z6hCC(83)D&_5r(l&4nbi_fMIlInaUIF zb@P5PNXcJWFgut=(OQ#Kdzb76jIV~SUQ+r9N$RpmOhT*`*VoSd75^lqjBp7INPx9t z2-_o~F-01{1LaMPKM|5llia^^dyc*|90|c4`7ID5y!3ke)y$i}+OQj;?9(_d9#9no zi&7v=@lrC?qWvZq$aM`G|GS=N8JIA_)$os`*fX@4n8&`U80o6$B!C}SU63(A*_L+SET3j@Qx)E5&EVxx7T*PBQnsyZt_d!3C4CBq$R8E$1<$K<%dR9m^NgPnH6zB zbGPLrUK31zM44Fb6+#|w%exLinschiOPQK;>iK6l?8XI($8Z$IfIdaM?tt2CW^8d+ zF2BBs%7xZ1XY%^9l4YcJm(Tq^r?0#L2MF3)`sM5AL$AKfL#!`%*l=cY)dfwF%K#r6 zsSH|=kr`6@d$VMT3HrX`x4BJfYUy=z)xY@g#>$uT#w!OltiG`x7rOaWFz;;Sn}C@) z!@c&!KL@+{K6Kdj(L*@KB#$``DpOIwOXSnw`j&ufa9f&#Dk_*iZsAF(RR9{kDR#Y0 zE!d!{0{(y$7>bFanVJdJLqASZtmKI{$W>MIw%ePpK%FiS@L7BO>pc8Or2vLKY5l>Y zr9~c8GbF89$pdMwd}t;co`Y6Bz>~OiczSx??T)&W=YeTdvURJqZ=M62)#y9Su3DPL z7i75}vaU1kw-d8gpV6oH`YY~CyYq8rO;Ok)qrYn63xIitx(SOEP$@%0Ryf?R66>|@ z;NW16>Pq3eH_(m85nw^Z-Gb~|@m3Tt?B`$Tp8?0BUM}MS{`!bHrK1;D00wk>#G0w! z&Jq_$2qQSi@wS?-{Udcs)JOL`h{lr&^zYhpIP(R4fEzl07=F0jn~m=-^+N5uAK}XP z>MeF~pPyy&DxN?ZO|EPSHmilXq42Q;nQzr1Q~4|t>a5SA1Br3pDyJrqVYGBKR0L>supeN%4HPeq#!^lr3Fr$kl^nS#Kuj8SqL{{3rQi^YMZ1{ zR8sQY++?Y#BN&f1r_7G@;J-)Z+9k@u=`}AH6+FJvX4+z$FN~bDeCg;g2J?nUQI2L= z@}ugVZG$0#jd?|Pu?_oyaZR7oqsq2I{>jc`qy)I@0fGGKP6F+o>i(gcu^qMKehm+$ zcX+i-d>R*_lu@Kuasoh6x>uhMOBbckXmEin{J}09IdrkXE+eRXkIk&ZK`w-X*vU1>!5oa9+t0(Hl%)r1Is1qE z^A(W%c8|MbuJ0hOZS2gv57it(Jli*F0vG4a4$rf17@_VMZ%THi=jHpp})kNcKj8$g~qghr9Gx?qv{y(Q3=>=d}HK1E^ywn95SGj+}@={M$C?0i!;cXVrZ? z8TuhH4u33q(B_*viTCXmn#j^ z{7CDs{^A;rXc+ zFVyL9>q1Un)Z2}`Ka{z{2MmDR_xaV^LkI9V!naYV|EEVdfsBw1`qc@&@!Mhc?@CWq zf6H!B`$&UcPV5d1_w9BbB9@l6yw*2zc-wnV<6LYjr&_LN+~CR!GHq!0Uu_!~UH5By zo#3pxtNCNXSJNlPKsxqzYpjBrD76Y}B(rQ6pF3lO+mho2ybtHfWSo*LZ_6MGVWa{i z0EXcKWhJ1@q9WQ2bWi|5xdCBr80m>kv*N_nPe1NFwKQNmL=X}7GOq9}LKJa*+5P;2 z(&lQFYzr;BHxDjB$Hu*JHoi+2^;}aCL<(ulCV-a_%2)Pf+TU*EX6j9?DWRM!OR^SS zTwvIaImfi)gVpJ^pY=ACGHz}d=+p8>`PhmEZ~N8smxNryS!>ZHTOj6JXmp?kvbS-L zYw0{c$YVEN&!98BHLXKS80`DvxU zltSJTnq1x)?b+8Z2Ma-qG(Ft3g_keuN9QKv$$^)&P~Pt8sHa{+^vNF{E( z*TfYMz54M28FBjO>0fedCc4LdnGw~no2|z$`tG^3zc-Ss#n=LVgqp8xi1Fwc?;&Ws z30kd$yDK0)VX1J2wJR6cV$5r}-K0LfUM_y}Aw`E-g_z4cr$I*4MG4n?ad{Y@J4qfV zUiTGsep4gr9uHWYj;t99F@r-5oFz$mgw}qh697G|Bc9zeuGABS5Y^^IPUq8Sqn#oO zxWKYzPqR*;2mY{ReHR}nl3+lh*HDbXnv|{apIHf(&X1WY(4P^<;tww zK5QvpYIe&r;lBs_|AAY3R>nQRQgB)KSw^dl%B&G5G_B3e?)p`+pr@sk!bBLtjcWM* zC=%`gZstt8Pg6sYd#bL@jsx4tAKtwL8L7vkAbCI4^d~0V=J7e;__f^V?cA(sfSpQ9 zl`pq(zkQWxzkc}CV5#tF6->xw4 zmd6AHjm(I8ZNt#nL=*$-{duwB9*-db_yu@bZ_IR=ULomUzIweFVy1!udhZdOH5}TyK z+J|y*i>2v#aM;$1U$Nw#F(4WE_R61_MqH}j?-826l5d~#xrd*AMqSDwE@Z4&fn>lvQMy}&#SLFW42T7bqDx2-;a zzS@A#jM1V2MK74+OcYpo1cKOIE?tZ{**bc7cwGn{MYQXM5~C#jJHJt?bLO1Lo|%mB z{da#x8P25&Y)yr9IEQW9o{MmMoZ26tl1#dHy)6ZrV&HF%(d(D{*FzA7b1a~o-P=ly z^t(H4=KF)#TNJcJofv5UfMtbA-GhRgXQi-M6U_br{~|+AijG%W+2ac1Ggs;wOl^0h z{x)v9XIhQx(ngxe1rDZaL7(Q`OQfY8Wa0)OAJW*}AR%%jY&|`Ybb%DetE$DF(tMxV z=uQTgzJC zPQn$BU~?R9wdjvXM7JaRg7AY<{@x z;^yxP3@BQ%XX@7Na?b}S2hS>%O}A7!st^d|0-vsT2Hf=Akw+r|e7DI01fFoYRWMx^ zp@hME@9Arypht4_9~V~qk7PZb0plpzHU5vJ|Cow4-P zUqIP`Cn(AQ3^0l&1Z?XIAs~vfD%b(V#O?)a%g?AlMNUH_5dssbKJ+bL!Gi98uxM@Pp@fUyEiOisdpxRxe;oI$CLDE`)$w9@ZwRJxGR zNq7sBv*J57$z&D0_)F@<-dar&WD?vBVwAwb0fD5#`mO+HN|Z*_X=(M$eC6T>5bX)E zpQl!op`gCcYjX?tZUU>8Y>HF5sOjqVZAC}S%qX^FO-)W_C1+$fla}XABy-x5c>fVc z!W*4<12y(P8_nP&EJ(8t$>%hm%Kcc8hRscjrbv1R1NTKo2f=_7C}q%tD1Ft4;3rU3 zKOp8()NRBSypGOfIOjS1XpnheO?wp@I$RSUDu!Pb3_o66q71y#!@{S-8Yvt8eh+#l zDj|Uw(MR6KP${X1XBZV`d(h=CUC*FfL(`Cx11G`5ed-wSrGlyUtN22z`;VVli(;f_ zQZasa7rTU)NK#7(c(xazsgREXK0u5Jcpf!1HF(!2^A)5oaTMTFte3ait{>O?P)Hb2 zA?;fF1#<|r-syVSx&4FjhOxeLb4cFxFrv}sshNcjhX)5~Bq*Q>LJ3{nbYm=}CNRI< zvVvFf%Ttj#s%7c`m>WkBMr9^b*H{{Cdeir;saH&R20T%fFmH6*_3(LJn7)l9!MtC+ zzUhENZ?JFe((pg~q}zmT+jd8_{2WvZqm{fCVD}aXbcB?Zu|NicF&_ewHKb)^U_bzI zNkdE9nZZ|YYUOKTJMGi(Cx&J8;l)iI0sOkUE0eqHQdvd)yF@*Y$}-~=AZk}RCx>E+ zulK-@K;_)8b6ejqULCLJx8XRe2i#cTxJV_$3p|}g?(OY$;Hc{ux+t{s(UeS_v|MZD z0ivbQcOlz4e_6KcPO>Sekah?L4#8lvCm7^y3h{h*v*zWcHh;VR6WwCh9q2Ie`*&C% zDHzW?1vU>EAvKP6;`^-#s2S#{uei_x%osuP2}Y2@pfIfGn!esz8N{xIb@h#g4Z9fg zvoZ9Nx@MO(d!B15ar?Hi$yM3fFv0^^f2Gs!foKXlHQjV_I@hy3w(ulbffXm0GRT|y z%d(er7?)kPNporjgKm>xj7hIG*3{t-;6Y?(cb&E^@Y`*QDqLR8M;~}rjH*{WPpPVB z<>Yk#`h?|)nT%{)Tv34tYPlHWS>h*8Pqw-B-IJmtS##Yb<^?!skT=iYhVD!WNohD# zf4BEUPl_@;OL@RiK53>B+T)EB7nlzRd77B)9Xvk{sIjDiW+|eB%77Y#tUA-Be)GI^ z22~AZWn(6!gXL~3{vtDgZ4Sbu&|xQ|zmRh#mWU*A(iNC>+QaOVoW-CDW@t6#}o%!UkI}|Gtw`FJl0%-V)+8{?KI?Iar!-8b!=)RBh-5AV9p*5`U_Sf9x z-6t5&m&5!=SOi<$X1}Bw^>-NobbB{$+n>bDN_05RWz0S#5{?mV3UF(>&2(=s%i7>2 zEG#Gs_(&}+EZDl4)Xz6PEOL|Qqd~c*o*deV*_@lHt@=41+3msI^2Bmu$ z3uGZipRp?~fImq7z8TY~ZjXY5XStP9-9$cs&}3CtlXk_fpSZBBthe(gqTT7bkczr` zPE!*B90IE3!gG%db&UW|5Vo0j!_y$;y1?Z>y=9VS(j!C_hW-m2TVFI^hSJQ*LDPY;k~I^GOzRwK2a6 z8^^h}P}73gTOgCIJn}>W5&W(0IrqB)k=Iz%6H`;Z#5~UHl5*jWozn{R-ddAu&db&s zKo+U3?pyfze5!3ik2B96#l(u79P<2TZQDeZ$7(ANR5AwO6m=X%*_RwJJvFUwLM+Q0 z5o8h>YG>wcZwNeHuPPi&0)$T{B}hlL*5pxC#;@l4pK&2zsHkv{sedZ1;=YvT{*_7Q zv991<9Xh6B#}(F@=QPq(ClMowgKP-rQ98_G~*sq%L`7aKEWZPb#(~+RMgk`sC#-j zEe&`%UjVw(WH`a_V5SJ|(>x)jk$a)+X$FinpCKlUiqQ-zfkK6>rJ^~Lex196Ks1OeEj{!3 z^X%Q{K<*}*Xa*b+{HjUxKmkWy)Giz9sBx!51W;kbt1!S->u-O$Vg#L;6}aF0)ta}a z#*CVEY0}wG9cJv)YkPjW|2)Z=Gf+i2SjA%0gJi8;EPcD3sPF8=d#^2Q-GJ_06;VwhqfjuDdw*W5>%zQs?>;XmIl%gD&gE^2&zwECE8v}@OuztA&x zrfGI`06Cxg=67J@1IB2fiPaq;=8BQqXD5661+;bk5fPnahVH&xx7i|EDjy+}GgoK- zbvkl%P*qmxNG2m2XI#8gBaHw?g@;&APQ@jR!OlqXXLg9=eN&mO(_gvcV`&Kq33;4tQs4=3X5jX2oZ{M}QmN)Da2P0JM=#auV39Mc@+?rlhieN6Z(F=6}IuvXTD zG!Qv!!<`JC@;MFR)q`%7&kjwEo{2x^rOx*(!RIWsq?RrJjOL7j&``1g zFmFhW<3*oeO(ata_itDrod1Lr_ybN*_)p@fH0nWRpQK_%g~VPeMZ49gf+)Y7`<&54 zC}*MV<-$)ODZM$$xz>{<5{TOGaXBdg+Khjk%#pBry4wXp5aI~5j>2}t<&;!a*AB!- zjJnpsolf^lq;1jvtCcU0hx+^fecMGs6eXr8LK#wahCY_GAhMOE$eJbDml;d4H1;KA z86iuyic+?bwMh1e82i4PF=iNZ&wTE^|J?h1{C@Y3`^P-yG4q(myw7=`bKd85o*V9{ zsjY#zqOY5Vc7O?J<#GolS|~To(#QPW(c)6^-l$8G!jSmRx1%K+6{t}H#3S-;+N|g1 z%-c|@{b)f7h!l0B6XAp<~1X>?R z@Y%-W$FdezL=cp$EUOiU%D_^X z#f~qpnRr&kTA=>HE+nMUHs+@7#hC4<7pLxy%kLYH@DR`(g0@L34!9{M=reXt_+`bt zZuel$Yuh}jSV!3YvMKhZJT8bwH2~iPnwgCc((Be)j9oo;=>XO-S7c`B+1$ng&YfVk%Bji(=6 zL!hJW{bnC-`QulVw{%oq=H-38DEaDwmJfw|o7^Ucmvt8$GW|VIAmS6_Cm0P(3bn4A zC|twbBLjg%vlgFactaqO9s<&g@VoiiPKmk0WUDj`V?0ow_4mGDPyJxqk@xN$8&sY0 zR*lKoYW}+vnb*3rj}e**{I*q8;$BYHXW3B zgAsB>X+CFmw3+>$SdlH6+=*BupHEM}!(|ZsHyZX>Zy;5;yw)A3_MCPq1T8gOs_MCU zheu55{x;f6%`rsgiaA5iFU1o5C{@jSh4R-EE6ynUl;wMZv%7)vJb+>wd=C2^FsV?; zybh#p_*gNYp&R@AS+?Qk1Aro2p5O2*eD8Ml$M+E$gP(A{{h5XZ5bqUK0bSgGiYl2- za0VuPSE;yLtUs(3jwNuh-0S*y{3cf5Tmb}3TGJt1gBQ$&KU{o2Q7xL0su4k#P812> z;{;JBnXI0H+f9L;4~y;hWkn>uja;rE9@j))UbX@A7E}IQOrx>o?ed zWFU#Y?~mOee(WyFmg%tX;3RmxvJVhD{1Z_D=|#Z4>98DzmbP0*imjN6W{{EKM3h-iI_6wsJuAPE~*`t(Oc!9KejIi{thIp_<^J4-vrSDBXB=k!=({O z<%wjL2_v%gwsG0OTjlP00sj+x_!YEKt+>LR%1ram#7hGiV4CXH#ha1-vg^so7d0GK zQ1$~~xxGcbCj@(LtyYue*ZoI6sCCdCw-L@DW$!r%ygNx@O%7IJmv7jlk89Wr+hv6? zpKdK4wps0!SvGI!BffQF8}cEK9d-wQ%Yni>Es~Y>VRKz+wxiWfi=&@P=TP0<-R2UC zGs)Bimy$deud?ccUU@`OBk^i|@nQ7BylX}iYXa|8Slk(>J-ZRxj$@|5FJ8vMX}49j zv6r3pKA>%l#!>Ma7W?`8bn1bJOP_Hwo|d)KDQ;}!tQ{si^^a{7^qOQh#_rV`#r@@A zyK7*5*xV?$2-lY&PexhX>LqkoW$amCFY^FH_*Fd<1Lm{z7c)o7$J|d($QJ%?M~T;9 zqObfahR+ncy3@U^iCT_4%@@2TY|PN~qtY@82(F5i zgVwIQ;(9PUT0vfuu)TPxBDyFYq}$O@Khj)UmFf$z*<=}SdnC702H{z``|s{lR15l# zK+dTS=3q`ZHJ zQmha%jx*}1njju*4Ntv&%8yarx!nzopV=n@p;oQ8gehs38cP@o56i>c2Kqaz$r0%P zs<>kyDQiL*VpcZ%|7iOjZ z1k5+9b*1LERt9?5V|!MYuV-EeWr`Z)jA$I|gC&I0y(=W1(w^2MRu-z0_T$~|9=jC@ zqQ6qBJl6G1w<0y-Hk&t_4IJF*LWo%7P_@PUj7f*JA9LX(L3b)E45s=LdoY8Xtf#B6 zNKR8#S(~)uL@XO21T*lP)z5eIq-*8WXYUH+4!$!nyXmoBx%A$P^-~cQa(~G83b`%u ztDC^YWm=MEr+YL621=^9WQC2SM}E}GKspHHwyz45a}O1?y+RZx4!IBWyPOvNC|tcQ z*(-`cd(v@&%FK{BOB>iR#sxL5(}#I7{2Z2Ry0Q8}Va_UNi`l1SSh^L4oR-R4TOaPh z=4Bz*(rDwL%_$H;TTr|4GmDLDM1{ARVYFEa6Woim4+0%xgB%exVnR}iI6~;AO>W@3 z;c%`%1^FfuOUA{2s_oi32HftdRn%)ECw5%sJh7dwY#)oB$}a?PDvok3H9P?;KHq&@glH1oVjW*1>MlQi$d=nu3X+= z07V9Ay&?mXq>qCGjdHe)VnKY-c;1c3A*=M8JynS-ycdt0tnzIv$TAv~d^La1qYDod zUHL}*Am55>npZF4&i{`Hr~fi3E6y}rES!-6pnooL@XMFm);l|6_}B{72o1lBfMhJG zA0T-H`Uus0Tj~yinoK6;B7*b7m}X?J(?H>yC&Lx5_QC#RgkwQ!i4Wl2>$kX9C)V6x9bV)lUYW(ZSUz%` zVXkfE?Vt+W|N2ADl-Q~uAzli%i1y@m7hJy%GbXOSJT{P4z{)%K;6uliqk`m9J{!O4 zDLo~Pc_~xlzM=47(u2Kj_jRWCBOK;qthc(VnOo7+Ao0{#=B`h)Wb(|x<@!ZKdpq9U9I?8j%ud(o+C>X^x#Sw3%)<| zG1XyRN&!0NsFLCMgu+P ze|mUTXrWI!^|X;3!=q`-s8uKF6lMayUb`ZtvoHvg{F$Jg&MMX-8qS5`uSGTF>3a(y zP!_Uq$$?unR|05U*JsLh8kRBl^do@jd|DIHj$y4oas{YjxnPQ@gD>{C{|_$9a?{lP z@${MLJ%HH>OzWJ^mt3a4QgKYKeT%SLM4F}r_Vg7lOJz3jn{66&>*?3f^4 z^Yv<1V_@)LNchW2mw#$hBe+bu@lTb*Op1|SAO65y;np|xM_ag9@tOq zytZlft^65)Gf}sVjg9G`(NXY7r>TEdGhLLSRU8%}f>hNQT%h#8kl!$ecrpCSuzuh; zs4#&R?8LzWw(g_h>3|NwP9Wcv0q!CwT08ynbWro&D=ACbNlbQARh=$Vyq6Yiq4vnr zQ+q^0YBrw-Fg)FVwZ~Wq6BCSo~Ux@ zX%C@ekOnLUYvjnBj{;|pf5lE43BIh z_)2!FyhAAPcKKQMpR9u3VHt9+r`_t-(@V3!9sS{ z({eu)R+%>BPzYuo@4_}Lv7mz0#0vJa5OFNXsw2Hp+vse ze0OH#P^qbHXNouwzOX>W%(bp#a!^yQ#`Dcc#KE_xKhtGw0kz0~i6v#}^5v!Oi?O8W zHDAC5Yel{OH`XS5K}O(@=GfzmIPb?HZryr0;=<%4W-)CWpO}(fLUgb~$?S=gsQ?(E zp(%bFjTg)Pt%@ZNRYFjvoNMzJkC|#6jk|ZbK|vV-DE>2QK_jVpPro+lvGGRv+RN;K zm_b_GB7RBH)=UM!>RV9oY=uzSiYWI7yA5_r@Lv(6BjCn8s0EZ;Dj4^l38E+L`DGD- z^C?n>UgCl)-yuxUwys!RUEIXu1L-qZ(56L^v&(_#Mv6P=-AJ_)59G*PERU!<@^Td& z6|pU-EN<{^d8m}55*B>m5wsDAYauogRa*ja2lMjD%h`TQ;k!ZIudjWs9H{U(vNNzz z`BrD`HO%X7L29(3ZbzYvh7Pmi(1gwnF0O|CygtY4`UvDcAEa5pYH+Pd9tr<$OnN~& zk`sLBe|bne#=zZgraiW0rw38VVZ8lrsYP<3;SJHqmF7S2`wM{*nq18O)pnW4k%}r1A|o4nu$CH7cpp)k1Zxd!_m> zUb<2Px0GD4FuyPFZlceY`;nb8xpSpDx7iX}|MpxR0xGm(?43&#Ke}bpar`?cy&-)w5dE}Cf#}dVT*!Rd27X8Jff zE&kW(G1qY`MzB-MHE8?-n0OW>jadT4H;MjETkv{GbBpL7S^MI?iJjq6;=;!+sVY9Y zcIDEMxPr1c&*!xKvWH1=@}LM~U^zCJqqBS3njtYps`r=!VKutSrUw_x;T74o68&M= zEq~*#D06L5z?vM868b{lt&nhn@pb>b%u_xIaKtHA?N zf&SEN5JZuP`8tCZy8M8zGznhXaFj*}gk0s$1*vHhe#iS0bw}q6(*_ZS8O0(Dys|Rq z134hzE2*H02q^|B2w4Itvu-d7J?ypu`wa+*wDnH{G@BoES7G0_3Gq5 zCfb_8Zqo!xO(y-2ua}H(5VxRBh@TigGBT}8s_v-zvRuAw z!z){jU;Seg=(l$f{yQjA}9{+J9n;I>9+SWtshm|jcJSIhpSiz0sXdgjuY z)DN{CKX2HRb3b(8Ei`WNxpm`$!NH)rvoo6)iSm1aLbSF<82#vF5t6=F+k6nxnvwQ5 zeOA#FgH7gLWZ+bJxVTDh<{QP$EOGj+GaOx{POxRb*8FT&P-kZwS}l8@O7ERS-#XE- zZguY5d0>0G!#`c`zatI$Sbj{R^~5o-7Jv<2$^>LiXv->aFE#A1*PY6=a?mn-{Ac6I zSs8rS`#s8va@6J_-$`LDCHDyxmCYsw^Gpm3gT44%4IrjM#g&yE6e12YWRc6MwwF6+ zk?Y<-ILWIe{vCGIt@*^%k#kJZ#r54web;T*|9*u+K$TJ88Tzu#W37zYW9kK;bEyV& z!|d1+d1WYi8IaYB_fN5%0LGo>#TIKnDm!~ke!2zfuuf9)?HhJJ39$7K1th$jL*vB_ zcCP67^uZ(VSy{zxZ$Hx%<_0PvMl~|SzeSfMS*S8ZX^S=YwQ24DL_4EKFGtMtMKY)B zNN;cQO;8`sEG)RoX+WSBgZZqE&^7tj8WtGSz*A{8-K6)RxRF5anwL0Dw}$Bn*3p5J z#5Q%TE;C;jz{>MX^%Md_7i5| zvCM(FN%xcB0Vab)m2h;Ma1I7z`@t-WaArwHJb;@!b3brug-bnz&D%6Q?aI1JH*2+r zEEUoy7dkIyf zQ(5CA{@4)kh?&ZK$XmZ|@IA(suJIF@VZ__{t>?Z%Am6w1uc~xtA(2gDNQ>2Y#eT{@eHu*pT3q+WjyZSM!=uaW9-$^fb@W-wr%mslD#YBX zSNUm^RxY}Kw4o9o5IIzwdRE4tzIIE7tkDWtrQ2e=>k7}F z&glMgcO*8x^ht<%>2fWzpL5ks-!r7X_T-b(e0{$*j%*%TW_vgq)bDH4(~hX0sZmq0*g_(j5*dDM-W69n#V%p>#^8bi)t>!~9=< z-?!J=`<%V^S^vXY6K^~@&vV_^ecks0O4a*!3PN>u_SW zysh{XuC2|fYnCqfm)kGbyjNCVWT8&Mfb2_VblV?nZO&yTTBZBj$Ip3{Fq87K5sriV z7BP)-(zlPNo}0AcZoVTbk_y1R_~-3?(EYP9BMf*MC}3W=AIv2KOL-T_gQq?(%qDJB zKXj`7mX%H-XTe6ky*lM`#y)TEbW1j_(Ss=n(&o01=R88_@?i`dDow5|P?#PROqXV@ zgr!@&)Y7FeCUv+>Kq2|ZAvVGI&bURKBEZ@n6_2M*Fo%pnH+}5!4s(!lb}ZyFP~!1C zs)WXD;L8Ed9mby4FI}<{cgD;_9^Z+v|MNmz_+u`GmfrsjnN1nEh7I z2WS#MUziYl@*sLI*MT*okkpFRgcWy-@+tE8ni!p1H90#s3)k=RLwQme_Zf-AeSqyR z#1seZa8LunIKg4gH8{3}*I-xaH9UOXmd-HfI^Ath<{lUO&pF4}W#|{>p-oMc)v2}o z8x+Yu`Fc%dnTt0;0rMl*9`|H0nNc-aEyBVuhFxl7FH0hJZOoe-k>I;28fkw!OP&(~ zzF_N_w19GM!F^9$n<<$=#~h(oxPc59hwnAHXZKZGY*Quo&sJ(lN|pn}%aUwwo?gfV zWN0gXd+SE2eHpagoATpU@aU&A{~v5uQ4IS>Q$sBZxSAdTCFSN^uc{DOJR}^}FR?=J z>(z(()rNzD=sQU-g6xtzv21Z$o~TyEuAlyGx<>PP_7l>!0Y-p83?Ky=X)Vu;!%RP4 z(!Xt&Rcpl6@|yX7xqd!T(z8_)V9}Bx8b{k2c=cv#eOt|UZl^kn#M)1qGm3^-ME9#i z1B?armzNBuM!b+}Zyu3)uUV3O*{<{#$YXVRyhx&Go6POlIUjdRcXtm<56k1F0~o^h zY;MV`#nQ6&>Sf0YqR_e&7mUrwGU*!chYBGApOH`zF+zwq#saY!A@V_(GT4kVxB?8o zEgIP<#9-`rRDy6Ka5$;86mWCC6dDtRhza9Aiik2=e9=!(kLb`PZF^TA0j! zN5OceSx!YqOJ3+mp+}&!OmWO_=W%Ox#eLb0Ge+=v|q*xW3@kUyg;|JO(&B?x) z#(FC36YT1Eg!E%#_KE4 zg#!?}%oP)3D23Do_UUpf-q9#vQ>OI)VbqxWDb^ zFGcRI(%XRFXY{k$_0bnf(*3w6-?NljD$fM2a?N%qaJ~Kz;toHiCsgT>pB@RQ<-R}Z zs76!u|9+}|w-yk)Gut6KlN~Op?>4RNd4IEQX1Kq<@1g?5l+iy|e-kpZ@Y8+P(1*)C zigq7~qwiboeji3JD{15vdk^nM3$(ehAQU4iZ#S5|6j4KjudRk)1qvT?w;(Q!FWAIN zGh^F9f#)47v(5>?J2}byU+f0M-43x`-?6~(k92+)>ZIi4Y>R~@B^*46$mdnPe^n)E z4Nfj-;rpi>eYwe1ZBHopSwHx-RPMUSUW7E>UEccZ#4wSc z07hfV`cQ9623ifJcId31HN*o^Ncy){N5M1o0)Db0V1Ld2+2`j-U?S@l9+9ip{NK|Ezya9I`L&$U33e7aqNuv+;?aerSp}WymfbXxZ zH|hw5E?5tCsd1ja!_MS~O%hj0sM0<^Dib7*ldU+%sdcX< zJ1o)j`18~ibxf%8{|$uvr&UiA$<~iuR;r7aEvr54dHgqvkrDFaGx7f~cw!OP0ydqt z@}Piyf?datFR zb~iz|xbz(g&S6?R!XazfItAx25XRlc+#*^o)|h%0j`keZH8s*|6aTm8L2W%q2{_qq;T z?eO zX&JM9Njzhr-Rbj1rzO!U*q7Db7yOx4NMbqF&U;A_M4>juLGg9TweNVP!WsLV*U?dN zwCP1$6#Fk5dhXrM5o55EBTcvO&;s?Y2;q1z@f(rU@MKqGHXcTXrW=R8lb=Ab`Ti+d6I$ce z&$AS{%pv5 zd$NN{yi?G#tx55uCc|IvgY6*3WyT%`;aFJ_&PdQ(qh`^!##nFB{rd(&~T-F(tOwFa$!9dhwlPom2Ls&PCq7iGR zfu#D+b`jbwE$)qm0{tQ>ZL$^SXEJ(;B4p)Tt|^*rQ42|*GK1x`eqM#+jwgLoA&%l< z?40kNA8wCu5`RK7j`Lq&0Eeo`JGGT3i?hpSb@<^^`r?XrW7-ovNC3=`&;PnM9&cFo zMM+vTNk&Z2|43H;6Vm(_ej^8Fc;Ga${~f{kpUV7;>4=7)JnWT>!icA-(l?VfX*HJ5 zk2_eFwF0u0->w#{dY8dbbAv~gyPl7lO-hBSJ^{KkWGvc!IM?s z$zr+W3v>VXp;>>-PXjq-+($j0{`CUxOR8J@e^p~B)l~>((*`fnT%QD=ujh&nciu-L! zlLq7=r*-|7d1Gdg?Jr1VNd+8+5 z4>LE0dyPDY(L@kXfI+GFeU%|_TEuO;p;P5w_!WJFUH9dMTA~rx^hv@EaM47zLpSY$ z!g5JQcKy95PbEsd<5YC-pp47~im)650K=H1j!6ApSb~2qfKkss3fgAHpirnMCPc8P zV(odKUXH$5qzdDqKfj!umJ{Ia2j%{E*O>Uu9&?4W{~DB8EJS;y**y9$D6G1(E!o0p?@UVNpM98*l^)DKbG7C)~sx8o8h6Xdx-}>#)^=AFI0Rb4L98sY zCj0t;J`o2aGn5|}4juByoOyif$(Qcg?`>8E6f||pVZ2mzJ;K=!6lE=r47bdfc{)Ga z8t_6Eyv6?diL4^`h-l;OwkeBw44*lphWF`A(~=}Pa}LAa$5zvS!{-BF0`M7?Xqe&V zaHUF$W06m$KU-0{<&pT<{K71t#)DeH{9}=l#qhh~V;9^r-9yz&2j&R7!$c7Szt`ut z8NsdZZWG!TCKik`kUl#SOPyg;+XsjhpykW8BG*$`wS(Y5p=xD{ve$M;;U;)q0MU>N_ zO)0~#HZ?;aJDX^@c!R9`vR&edenTSjDe-?CS}r~uD$IQ7T%PTJKuZ>hTuQe^>#mvE z{@~w9pXM+L*fBCNm-A1}9~A`&*@&g~lo*EgC5YfN^TmJcWB!-#1|ErhU}G#oIsc!o z-2V&d9%rqzH@`O4>+SD3Oe=!o<{HA2c4aTO2K5NG#|c7?*FC& z*9Y0Uy8|v-+#+jYYH@yLC6nxLyWqKQ%D2h3R-6Wjo2?G_bX3# zkWHAfZm^wV*W54`=-x$(1VrIx=0FrWy(~ff=FOX=jT`%iQg_)%QG&2!tgnR(3Ik5) z<_;*yTpYq|=Qg%fAvN=H<4)aprt~Jp(y4LWnECh}iY{raN#>zKvBmQjE2XW-nw<`n z*FP}WX+ddfTRd{~xt;i;sC+~Hq&TT~R+KD}zC@+GRMtNtf=OZDE!+EQ=80qi${3W` z4=w-vIw=#lv$Yu+QOMeF^^%!RIs#?2$^Jzo2hI6*b4jhWW+3QV^KB-&s#qtO;5>3H z1?&VxFsR%zLAK(`0v9b;_s}4D8=5ntkA1Y8hxRuILPivF(;@ z(~SZqi}hmci2|ON65%pZe40);%=De63=VQ%#--Y&cW>{wbU569DqsW z#T8~9ycp~Y zGV!rZBSj;hZ?Fa2zUCIEzbyJFAO{XyW@pKiXXiruw-wuVO(;fFu#|D6Q?DN})u2@F zh|nU*E=oV3*#AnQj&uW9HAlp5Bf}o;#W?x}xadVq`J-_-S)LSM+k9Al_3?YFm43M> z(nTn9a}E{c<8NPp!_9#0LlQ~#TLw!rjp1Av+`#WR}UETOq0g}(eNn=QkBGwF@lmjwcg=!+awQ+3$ zR@v=PqR5EdO5lX!lz!Edk&bNE;ZKikI_k7Gv7`zvyc;c?^}J1)5IVhl`xIByY*#~h zk=;foq$c(*;YoP6C-NQ<6pKO5eKtN?(Rb;WSl~yGPg3Jo<-S1%0~=OJ z?rSFhyfMT*Fpt+*&PO}M;9AxH6Po;ymz9P6Wx-Jt>OzPE6Z5XjZs+CY zT%S+;JH8G_+fRmBN4M+^-jrd*PYn}EJfH&~ClC`-`fm%FvNaNAbrYw1Q`A_U$ZoLn zPP%+SA4NyPt^J}Pp9+bC^)`sM&JSLeGTkQ~omff)w)?gA5p&+03aMA2+ zY-T&#nevq$B{v!6`O$vUyL;I{cy;&q)^;HliAx@qvxDItzotqTN>|aEjI<<@@9MwU zG%XfVPpTK+1QIlR%~h6~#6$lqm$VPIzAzLWYgJZ@k5jb~&N~j_QpV_n=fx&aeQBX5 z3V=56kkrtdg^HNa)ptf{O=!n({J>ss4m6hSnV}Yz;aM8Z)^yrJHPF8W_FtrZ=#l0; z7u_XsSI`bJ^#@j9qpSW*;p$L{kWP4_VJl$kpaD9M1bt7+V)C4_f}QeR3Kz_Lg*CfO zG!;i9WVWAPL|JpTP)k_b=HwQWrHRxtPiV!E-8^BAuop1a+5Qn*ALnhgrS#N*MA1^v zeS)JH5a42Sb91dl$IrAXXHhYN=ulqnxakF4a(_#~W;>7A-Dbuf^9{5X9r@~C2P1jB zy(>tYT!Vr^iTDFOSbDN9ErY&G_cmp$cJ|s$Ry0UfQUx%fGapZto|BzF?)%1$s+jl) zy&R@7xR=rT*c?w-4+|`r$D9`%hS!>=SjemKCAXbpb^QBV^->`YAsdW2+!qd;8-E4` z_-nhV+`z=lF_$D0vpy9hiX0f^i8m?FFAp)w09V6YCgSqY&V0%jcbkK^Vl^XbAWQK4 z`FgleUGxGf^5oO-)z&ylYOEIp=_!q)e^#T!LRho}w}TNzYF7Ka>W~}b(F)fi*8Ao5jA`G@03TPBMP4xB@ zNy{%?KXm&`HA%8WfAke>)ThRk!?Z->oBa$rS=?X2yA;i4AYj+YBn*_Qn&!In2diA6 z%iDoXM}$Ius#7V+C#Ev|0WN{`K%#F*6^ybbUg=zHcB7#%`8V8SOdK4VqR)P? zVvjo?4}CkasAv2=*}ifu-W{~E!>YAq+l$WjsgRy%kSGE_-zm%V;;I@M;RZ3s9>?lm z#25LIBM-wKu-+kxJbe3?oJspB{N}@+4wKbaf-PpJ12)o{5jJyrAGNpyVxoBb=umSM zUS`oLOnMa96B~)JU5YyzK82_l;st!kmLWM~%FZdiNcVLF1;9f-QMqV+-Nj}v-lgaj z_A;HqXuD^7H7v)#lw++}hYuI&r$3MVm)$1KNXhFLxVBMCsSlRb#3NJY(gHTHsVJe< z^KsV<|MtO=R1RUVyozZQ#ueA3^%4r^0!zkkQ`UY5hKL&frT*k8V{xL2DOTIJ!r~bi~eYuPESu$PEKiQJ6lMZrd;dqU}MPW z6`SW;L{W$?*%Uhq@uNNlhjTuA{#+eUj+_llTyY5GDPng#3yRb0?SvTLER{zH!XtHw zc}G^GcFu3k$H{bfg9=P!kpPZkwFIZra*5NC!E zy~>k~KC44?hv1nd!Kh|`pEcch49DDxHUyJ|6!G@O+lSj{3z$t}wRG{lEVuXn#H$pl zng8|0C7j+RbMzIz)iZ7FV^H{`w3HY0+FI5GB&`3u0_jF#D0or1+b$mWeyWZk0@u*? zV_O4ui>D|qN`6487$s7d6;WcCqI%$3kL?>L^{U%9v|O*Kjo+p4)8B7oJ2T4k0@bap ztQEH~KxP*7JTZR1@Pv%a#-~upr0xy&pzS&Uu&kRO;%47T$$)E=1~T0FRo{Q4%Mo1G z-`vfOed9*g?B?^z(m*qTuDksNOu(vYc*v7kDFnIU)T!y6zASrJ(fvJ|+6D|nR`jQ5 zm)v78S#;fhMnh_{RR(Borcy^R0`qRr$7ys^V&!$(fqp%fD7OuiP`cY3wAxvykU%>W z<}R>2P}$-)>%*_BtLwFUuA9B+)I&hQYl`0P{*!E;?R+A=?P4`Hz)oS;?>2&s4=&C& z1*O>S`TnLpOSAPa@Jlis$z$hs3X-pHiRPT0SqD`WZScKkGmr4y%h>k~7Jz!rmKKNA z1AMaCO^;S{dy|x-smnp2+ZXuV?Qifxz<{W&tw?qHo%|jKgSFF1(jvZ>+Onf9BlaZB zQh{X#@X^cR!88jIMwV9!!lbbYIAr7|gS=!4>Isa#-iqEZGT_ZGXbbIvuoiJhT&7Y>VP-+ke?+K^;`@Zaw5}emzkA9Bj zydIyL+FWp+oF*(Qy&QbYz4kZR5d8Kno*|vMuI5zF{9A5=&&h_(n8;&fn;oa>6-|4C zZ_{P{-`@o<53>FJ_mjCa>TBNE7TJGDbY(#=a@AL2A!XbdDFx`!>*6j^S_hW1coT_W z#O;+C@}56x^zg8jxi7_+YAIPRb_N$0SAVykpT3JgXpzWFDnj>X2$+$jjIDXUvPC~r zPpx;ds;WxPx%xiS$mj64Cw%w!`24)>91v8%N%l~1{PFsAM;>#U~8w>V#l>zw{5v{FPFTV~X-h>y<1R8EnO5D02Xbe(f8RAR+_&oA?nz=j-`ffMJ z2kM+umCT%RzMBB%;9Y6yuR`vQsdp8+A@&QH>$^qVu?mur;bYtgpRM8Zzn)X0TnL|| z2(huHBE|7prna}=-$eTUqVZZ@a<9Z)(uPTll;x;D0W$xIrK|6&7JsyhK1@9FOa5HCj@(Qc_ze}xz)Ui2P@-atl=(hZ z^!6^r*J+#^N}QkhODwVyQgxkA5WXPZAyopvBm8kS`m*@^y8P44Naim#9REdvz=B6s z)1}(Zc=~L$3XPNvBB(lT@W<@6Mw6DqqGXiMiL3*&K3Al@{5^e|b$8?;o*8REU;B~w z;|vFA{K8yQQ&Xu_LqPY(ecKi16}JUKEE;6K|2qbBrW~-)U?1~(-&4Ggwjt54wKOns z3+WMVYu4EZxItU1JojCUImh-z1TnOiT=*=YGlQY*ntD-XoX`^;=rOK!`N6--?x~F zG8Mi=MvhGh;9mLf)4J}vhw`?n803%0MRn2&A2cmAmZOBSXm!-AIzWd!$Cc%I`#z;jI zo~T9S#@r+5Fa^4Dqh*$j>Lh!wAMXwy&T3curiB+U2Zy-2Z~5OGwn2EMN_%kYQ5Nq_~FdnFg2rMdji7lTJ#)DG@<){0nXvtLU)b!vN-y!UC zX?u(@Wg&W zmba4D%&WzGUb^=Y%D`4yR>qaKtDFQ>p0CMhNq2cWjUy{1qR39lx7y3B<$|#BykA%&_G1S39mqEIRko;>@CT>R4r3P!NM24n22r!Z-`fBu7p+ z`kn8to$=|!{v1!T+7M0R`#f-_M^5X#I0wsZ)EF2TeMI=DG1c}9g1_BW%oSJc#OCsW zRi~+;v2JtQ&>%=7=})674kMkPpLe?0QOBnd9&=vk>yvdoUZ%CTw+96_uJ}_^2y!lI zvf8ZvA+(+lm;umG=cpnlDv*Fw*?Yxq0EW+6DM?6+4` z>X;R}L;wWND^BmPPd6xpof!Nt&gpd;ba(^a4Eb+odStQDa&Mj?M)Uob-DSSf1`W)x zvAq9dSz1NuSjw%~OFt{LzDOC7#~~|qHmHZDNQz>i0d#PP99)?ZTzL5Y{>l^qH~Is1;E z1alae8Ro8xTx>u=yDf_`#6-*t;F`xKeBDm#lp3YzlqmK~wt8_UXai(tGlAx_T@QVe zzvB#?nGjJ|VJ4cVmW@c!FOTUrgg-c?~uzrL!D$azp&3;z&tLpvY zyO=W3Z?a!T5+o~?xq5E}h7zk~?O{c?5kF!qiL!G76OZ%0p`ct_m@G%{YTHC|6QmF0chswBmVKEz}#iO>>pa%~aarKF=Q9g|v35 zLVp0tXdY#4a%o;3jQ3jqG5tQS#m>PYt*56q0nl|p`+3O2D!4`NLa%QV!k?m20n`uR zBNL*=qWuH;?V9K;ub~yI*yEI9o;=MS$63{8Jg8q)m2h8-%TGHfY*VC8#3p+uJfI!3 zZ0SfZ?*}Xv`j!2_iBv-N1i17xin9a*cr%_8!zzm~oH)*x6Vp7aK;YYGU<;{MD>h>S zT&0g$4;tqyJEZY!57O$7xmd6&Os{rnYy$yxvWtZ%cp?r2QJridaS8~V$wHJdW`JsCzYcb=elexr z`yIi)^?VUqa;i9yFsh1%PmNk3?7-^U6^vSY-nTXL-+3ESgE2uCHmOq2;A2b+&tHDJ zpzaOZoTb-CpEADnH8NI&5Usxge98n?Ww6en1M3@lMPVnuqJiRaLAwOyO8OL(LArHO z0|esz9S-RG!H@f!%Gx89^YCRgaQySQeC}KLxq;+LN5EWo5pp5SJ?h+9`=4TTep%Vfd&+QQx1Kb7}_nxp{9vB<<5kd zE_Lp_I0rU)lGi3Dq7@gC0x@!e9l+*3`w-3LzBks`~CUZo(L~D#N4k< zrw{yc7%J+DI+P#?vCMD$R5;*fQ1Dyg1I*T9XXVO-G4Oj%RdMOo8z?3zmJe<)JoRT* z@GpT@|E5`J`1Xq*46Hp8ZpX_}b-fF%I#qGx>Vems*xr@=I`D2MppL&~5)Y9HmvS9| z*R0IXN0ylNW0tbv>Z=naCnolm3(29F>g}?oVL+wO~_CF%~Ud6RPF;BiYXkVFUa z<+^*-A|cnq3fUwD7CX?~%X_|%1@Oy(Bwb{X+@`y42v)jrkRkVl1J};zH!WG9(6cY&XSgc12#1(s0PiAM96!xA;LmzB1OP4*A>efB?Sg9Gtm#O{Fx!$gQ zh@JZ{+a8;jxH|{%2W><_$|~!zUc<6?!G8iwwCb9hfR4hYOv1g=#GkjJ zsSbrtB^RmQ1re)7l9G}>czu9;k|JnN1uIcSh)uBF|36X=|EVULNG!WJJvwsK%dxWS ztO6rNXboK@njR-TIukmo&*?#@Ke3c{{NpyG+ z;3H?`p~<89?D?Jv!8I00s%LHON1Hn>6`0?7y;l@MI6C#qb{0h#E3Nq{1HyCzzOj!K z0;m)NVwg$|@Nl_82_>U|k6*U0t+6x17pXH>FWjPg;cK1u$X>)O-4EiPF!I+vt90yF zWqM7}4pw6+C z7!$Oj%;1e6F|a@GxR*&rV{(w@xeBPoRQlB9Mg(8KXPbT04Qcg7qG2Y&?}=FG+I4li z6&mojZrQpzNi*A2hjG)4*>z5F29%u=5gp}jcC{{U;mmGJE=B z35D6tR3AaW;#>>UGyXI>68N3BptRNggcQ#+dZ0f>{y4>ZW&rV7Zl0@I3L)S7tqrqu z-F@t*p(OM;!UIuiJ59d*x1;?W)<1cLymyRAiDeHQUU5m>L58frPw$cIyH^5rh;YdI zF7hmS<`!9nEL}lbLE9+%W6|h+v$<7;9zTvB73wIFG*^b+e*pV+97}>Sv<)(AQfaHo z^ZijjH9s1VP}k70uQ^$yhHGB1gwq?Dm~aG&17aT7qQGsTkTv_q4~meG0%6}j-cf2M zwjqJ{q(bBDzM~R))-TsCCbx6<7VT4R`%mE?Cq04W!VMr{@^#n+YD>Y>s1pjg-!f?8{b*!0>C{++0 zbf};`q1B)?DkkMaN&BQh!JN#dn&)X5s7d@yaK!0I&+)*lFxzpcr|KiyG=UK%^uK5xfaLL~L%oc*iLqDwJ zj@UXTMxRZW5fSf1sM1Q+EujqF3gD(xwV;BAFg$?lIxCU^EI(DuI&YZm6ySFN3c!T2 zJca4&;;F|s*ZgS4cl1VPX3U_~wJ`d=qoo#<2f0Z~K>-Jpou7}s-Ei3Jr$?o6Pb^H< zF0{O3h=e!TE;hWcP3^p`)Wdr7d{MK-pUsb(Y|{H6kkv9||KzU+ z+m8tk!7fw6tBwyOx8b)PHn|S%4zP+6cF)%PKgfV8xMQ1}%P-b^Bc#ZWom`C`Uw^+Y zq9Me_wZKt_5D6c7`%`km9b0H$<8lpY&HAnpX|JJDXXVQEjGn?Mv%H^Be(o^`#(N{9 zSRfnB7#NzNJ05!NxOM5mjDo`rmdyDQ9LjzNWXqO;q|l59zeN5`wqL2tF|Si+LjmQC z$$Y^3Y~D(^O2es7As#A(P+auP(^=6qT8-(6S3K0JTq*7N^mka6aWm=5i)ZyT%x$;O z^1r#XOTHKTND4Si)v1cG_vXHhXZ#F#Wv*GkhM3o_F68-yh|p6N&6)KmC=6H&iIq;& zQ|G@3y}5-h2uMWV9xKn@Z$1p5@{(HITVSNLaz=*nxnWyj_4+Q`tJrKn9Q|67KA5;{xvO?`Icj%uvc>;+i{vTkUc~%-tX~sy9!&_<=x!>ZoqnZbnO*vr zKYw=n2ir>3%Eu+S8ZB)Li-Ll{!uEdbVt%U8-+6K$0p~5r0zhx-V*r5c(u!A$xXeyY zdIzk8OGg5v5r zI2VZP0JWPF&8&-IF4!Z4FE&+Zg?oXdeVXAZ{!Rtr;n&xn`Ll2i`_hdyrmSt3pwzK; z;*>aD8gCz(Q&WS(#l@9%0i~(I*+!f}stud0o-X^k#69;ry!f57SW6qYJpXa=M^o0t zxBk!#1ub2sSU}5N_T`tXL|RGSQa*$%5;i79-Co)!h`^?%<3BUU$Fz|(OS z#-bqtK2156$7rtpL0RW;N`s* z6kEChh<0A~YC{P?;Pdpmx~aT4oFxQ3z{af0CLHB7J>u&Q{1CwK3WC}tDL-s%0(x4J z;O9vAdr;?jBi+w&qs!i%@jQYaB8=)}`5v5{j-qPfEti{EG0>1a&xqn+2yGEMEnKF{O+(02}HjFZ2{P31UTOcBE1DetL~uWp5^}GxhZcA5>W2>Np6G>+L>+SZt&Zn_N?}B z%(!nk=Ukw#D%S!ums8*}2ozdg>)uE9JHffNMq_UBPq=tICi#}jAVdOmFkg>H9!rA* z@(iLqFG5Zsrnm}&m$k76>@@&B5PJ0ZoT9?Yc`{{*hhEq&n>ta9=_UcExaze=Ig`?ye z4a$#MkC?z0M#g^MoqQ014z|hM)^(h}m-o4yqXO3rI!JOi#mQLMA^W$*%9`>*tY%9+^x@EnPH0 zhcGQRAGBuQZI!hb3}ZTq7LGn^N#C%mo5_R0W& zCo_PfUotGvhGRQeuOit4;_!Ocbdxt}nhmnhmr zmO1(P1?L6`up9k zPYotq+e!yH!o3`&B8ZelzI^!tgjGlG6(tbG|@L>#d@ zN#FD9o6yF?&JJ^E9!+ScaDPe*fPNe08Nj(8=AfC$fH`#ObmQJfI=}4h`hJ-8Aj!AG zzwz6N(e5%WNR1dLMI}otq62a02+CEx75BdA91M@}ijc~HPXel#KO*;dI*i_br$vH* z9pwx8irsEV>{rD+Xjcyj>xTxi-*4oE&#gh;{5vkI?et>-ua7%SXhT3x^9=U&Uajvk zqqk5i>!?w9c`GTeNKge+8cfr96)Eq0)#n)ZwCRWGQrExs*@T z)O(taXVn(e`RiLjk~(N{?;r9}>LmaI?(PY{q<@?z^}(%m*D->oA5V`Hi8MS4NWN-d z(()5O$dmTGK{me6?x)tU{3KisEY#=1pEkqQ|G4kZ5Io3st(0*HeZC5ASJtqe`N9c} zFYRNCTDqnAWzgEs@tDfF>4O0=wDp2oSDvCQfDacd#ON zwR?; zO)F{p25^c`pWWXahB&@1<}4u2d0DSkf@2?g&+JVfMi`b;s*d39c!l!x>C?Wlu}1Rt zmpQ{6(VxF5A;~}Qt7~YOw!#At5yt^yev(xkjQP5i0cTH!$GAB-x?-MRQB<7{ZI6wH zIJ{V1jYbnW@+ha6<0kV~}x1Bg*mv9&&SuB5~^!lK76eI(^Tv%8* zz3M3a-@kltIJBG3u@RPF#B{u=^U@3L1GxxY}eQ zd+#@)Bl4{|-3p2rx%~E#>i&7+t$E?TZHPhs>G$Kd5u_2&S?JC^;Iy2> z-Tb!qk$<@z`@Dz`&($oHu#97UHRy0eo2yu3VE4D3A>^zxjYa{YS4i?6D~{ideIsQo zxNuv2LQruZtWSWze~+yhd0LqFT~4AT2K~_==2$oOdE(t)W9M8^bmCOU?YA!g-P?9< z8;BNS5OLW_-fWU&_#8F;X>uvDLaULJSV&KI^O6eo$6oN*@%ob`{tsbmc_kMzyU%vpS~BC4($z@ zIoT_z|(eAXmD zwJmmeB=c3YeR^8j$^Gr|#%kB+KECnw{egJqz6L|x92`HF&B^nP*m2;+pG&xtsrY77 z^V3?$&Ky7Fp~ri*j|QI3@jq=S=jb~3Q*`i{<)+d@=Y8sSwp$!zT*N}|1|EzPc`CAM zvFXS*v_*o-(ERu4xam=zTx`Qs(8WOsH8dO@ezE)6@AlFJ*c-CQl-km=m*-ZE@I4aM zRVbmrhR|nBRFJp-9j|OGUGzQT7HteG?2(oc7bbWcRNs91WuSj_AJD`eD=+2ZQ>aA} zN`Tx~czRD^p9wEe2adbn&vI)84uiVKpz>x$Fv)+0SnN|YVU(LM#+?v!hgbPZxYFNQYF1KV9NF>cHT|Ndn=irTJ-vGlwEYGo zg@~bL|8Zb2g(|zrjB7N0w(qlYOD7Q{!{P_OkcLY5(Zp`opOC}Nupad~ViE{2LC5pt zHUI`B>$1}ckDF10^>U;J1_Jy>cX2ioJ6n4O)~i`gicpI(vB^&+i2%Y8dtUNO1oc7RnTtwo^S9E z{|7-zhCSTXGn!bIQLcnJ`Fte%Sy_VzD^JK>%*n?(3GE;__*91?flkkDHn7GenZ@b^Enr>;V zo2B4mXZ&g;u(Y}Mdr!O9c>1C!&E~R*zIFhQ*#;KlL{swjQOv)V;WzE<>iUeuR)MGc z-B@~vkND-dFE*p)r@lakiqZ*Cw$E%OD6rC?B^NO9DM#A)Foc2});!2gTN4__vO-kI zv}X%Z$7U7MCQg^tTvf*yxHT> zRwjs+mi9V74{bD`0*0d*VI{-#a+}PhH;*0n374+;2W8M zQzq%ggH*mZlm^G<7edW=(7 z3dRlS;8h*>qQIZiZb7o{OlmS#0o4AW{Y2ca7G?8*`?p zoWep(kke`>iWzmh%G;S>Wr5KrRalQ`I$cJ^u|PlmCh2i{0};-?ZzywkNSV6&dJ`aY z*Pa%baP#w3tg6IKuLnYA+e9`+I&Nz_pL#Ek~m7 z`}JGgxt?%-2=qt5O@I;hou&jcLsFb+QJN|~5=Eok$?l}58!pT?*4JYcI!eZR?g#gk zb63vY%{`CMa0&)WtpO=2JwW!10ez!Uhku`si5L?`BalmC;4?1}%_<{*zg|Mz4J37O zx^V%I0lk^6G@wn!>HY0Zh=0HybEue;zhGn-SBVPD+zqG(FOK zp|o*c@?K?af`7Em?)+DYX40sC(Q0D9HbDWXJ5Z4A+|6$)xm@pmL_TS zD+;pA94q#<0qAT-YFSl`tk|fS%QMz>=k8I`jI+d2*uCJGH_@0s%NmZ@DC`)y=2*wO za*wk|c#nH^e*`^OfqrPZnZLNlGN4uirX`xqp{V&uk%{x2%uavVMzx0$0dB{>@x-`? zZZfWerc zD~h*;k3m_R?2UFk03?*ZAG?M$CV@a?M-TrOfGoJG9bQ^B9G`iyK@4d}i1k{H%UJ^K zEy@0FCc22;k(#^zA}zR9PO8QI5ET^VV@U&A)%rG_eW%ie7}LT!eTCyjR0A_9MGJ}& zjq{z2{ru?z(!e$(Rk8@^gjVKhl_!>?>Cf$!lL{rM6xENIK$$hRtn1;B7oeeZA@018 zfEs(mjECrDQiC9{+nDocjSw?uX~8a$fwD0)IE%DKJ)@+H$1Jnb12bU<|Fj?{e5T7T zcTd||0_`CZftRe${{vnQH}kXK{YGd&od$?oy$Od=W#}VN3W{-XsjYOBY$g{o&7XeL zh57NE0{$oIcCGoV2gG9l1wiR_%vklnJqjxfi(47|u@a`Ny81ZFy@Xq5C1`X@zsgVW zO;s48{5}2Q^H?iEjG4FlpUI%dsG&Q@E)j{qlQCE0#R#e|%7TWPPC$xA{%RIwQPFCt z3PyTxf~lw_t~Lfecs}6;?CJiiY?@b*{O^i8kL<5~e^y5A2kfsvwUT7$hHTA|5@PFv zfx=YvBYPNlpZ4CWKxRoZnpR@1QG`Bi4#-dn8)-V3XixW|Ih8=@sbS}Ok}p~s-%L6^ zj$_Y!k|hUTwVui(BNVkCWUV^?VNSBrXD#$Ax1Qa149Vt=+fsnho z?|k>yH*>%Feq@-;9M0^Mv-jH1Ue8)9ct`%6;Jfr3u3Ne)nU!=leEsp4*1NlyM7tUQ zf;@AR`cUgS+6bTgQS0j6tG*!0&$I@BZEK5@{<#76cc{imbwxpT23Gl=082~DpOsUe zX8k-2KAzR^dnM1S!k!)3L|T3WgG|z-HdcA*g&Urf?PH7e@Ax-Y>1@M7YR7AfyZ%xa zqWw$(cFAWXy=rde_xJY~mz5>@F;_m76M*QEc~@tIqj~xm|B0Zu&Ugd3w5NT1G{Ggk?@#3zO5U(!>Vh*|reC7& z$7pg!!bL;XIBC9%VSE%`S42>3| ztq5fXmf#fo$Gmz0-St(W z)mpacAzgIaTuOPng)-6wp>dF%7Ky)M`SLnr%;3+TiII_!sl6bSpxnqA0XlTlN(E}M ze%WUE)tmC6jhpg0)&P_5``b;B_9@Biej>a|!J^^Sf8dD%aQ>&GE!ZB3r%BP~g}{ke zUhnSV(E(mxCD<(yB_KOP&PkgUIHE^qH2oK;+^6&jAA>C#dwSdc$mFONAR7Hf`{yn_ zPV=8u8gd2|^0mgKj36cYAKBR{dFc8GDk>AA8JNQ8km-plI~75{b(R-0;0G{u_P$V4 za_uR_w8^+71fFRWcc@_6d|0)?2%+jE7B`Y6_o}Y7b;-gzmk|Q}m{FIHn44T=Z{86#g)zC1tR@h!$e=Vr#e`y=BF^NkgHI(IV zarAc<8{Wxj00kxvP7@nLS9bIxUJ*aZcl>v#^IjbH5jor@XrTqV-%PPRVA?Yt^;jId ztBbG3Cr9A-SlTfU;7fIpe9A6dG7YmYO2++1xPG3gAGS}zCHi(fB5!`RC1j_YA&A>U zDnjl>%C#kKT{adoyWTT36=VX%_3o}LrN}>ILm$;wxRS-Nm+#*<)xM4@aD{*h`MTSW znk$5<1KlKdeDJR7pQS?l6va}60O&-|o z-vM@Yt^R{_v$;{~gU`HKca1uq`WlU6l3N_FQH5zuPzCF$dkOW=JgPxQL`~maoIpc) zZ*Rw4>`0xiSy%H6Su1(-$JkvOw^>_phIZDGkYAP;{C9=!{@)7}GnsGHoBD`61KeUt zui+2c?VYf#(jCR6-CqgDA(k&4Q1kV@>F$i+-Ftn`sEQsZJ4}c1cu!vsEp=559T`Zj zugFg_7wju;X_@FO-hZ;v{)Dt&D62>+43{IRqv*Jzr-v^Kwm=a4aGH8s7x6I~=awKV z*1cdiUbeTAg8b8o52X)vd?vfVWyhqdO8vb(jx>xkcqZNaN*0M&U=gQxxnap6aGege z_qJGo(BPy7KP0q37}+{J22|pAb~#wsP3ywqDMLGce$8QAi%Wg`{Fefl#Y}S`Omwa} z$P6KKh(+@(0+$#Jea^&r&vFVQkrA;v>(duz$$5GnpYrMUO!JeVP zi?T5rp}SpT5T?#^r#ET+8j7Z% zK5%?{1wGviBPYesiBSgQk*0?%PfTlmwQ;0l?X^MSYAc?1qbU1x0=KUeFeZ$&(|@5s z@F`qv2q9kl5ky5Q?orb0yg#41U4f)JcN>Wh zC);?A1K^9Gq630va7Eo>nG+nh#AL2?`8yF0kSuRU)oo1Z8f6?@p`K1EXIZT0p3GI^ zZ<>EcH$*Zl4i7zYH`6sI=M$_(oOeLUlR_T{fBovCrck#P9I_$5ecOLwFeClpLcFSVq+OvV9qhvMH;v*UpSpdL0wk}{<* zGy1%l8c+0|n_lQ`JL@bZlj|h)HCkA0$?=61DonXJ_}-2_Ox#4Up9z&oqGLN^&2mtH z@)=R8q`F)H=kxZ8i2d z{DNHe)xTmMip_E5FmD3sk+Y{KvazQgPyX1-*lN>{2>kO1NEHjr1XG;JLRU%%6{v){ z>hm-U7QEdF;p|^<6rHIbm`Jy2eex`T5Gn5MiMl^=Sj?sgcoj+X+D}^#-%)K0woAs+ z%e^~&51xT6knZ-;M!Y=j;Q=@TJ1xPmZ4Nl)&=)cqlknfCfi=#?>f;E*{1aRwN_tEeD`y797i1$PU;^bMQz^6i%shST#oV!6p2B3Z)ALNP1{ zoFQ1dn~3?N1NN}lL874D$wko4?hF*1bR{!KQw?bW-+a!gAhg`z02gb1S^J%nZqRil z%bjU1h7Cb|OJ#X3V@YKC*EDI95Gko;3sl_^8+uPyDf%N%khfBM5V@ksYh%=qH~*2= zk%mEU1J9$$pt4H0jbEQ}i`-mXC0r99fSyaQDhogk5Z?s7qYMH|#Z=tMTTH%;D{7c` z9RZ!NpFxgVr)BT0G=)Dq29#$~9h#E3~n6DdjBhSh*DoRx~bqcV<5eMv+Ifye`33bxcRX|y^8UHW_S;z;WjMJV&tZ$ z#|ps6=;nRZyc97c@9+7({Pm?B6ryTS| z{)Ve@u?g$(9?QzRU)LS~>-@BxMwbKa>Uh0pcNL048io8smIsQTREC1XIZ$hrFkCs- zA?rzsA@h_Hh51=8@gn>3w2o!KsRj--%6xHZF=JpRx25_23Y_-hdDxLy>4uyIxlhqX zh8g`C@(&Zc`t+2BsvVI~DjMrfpOy%%!GjLmX_f2RZ0>$y`8B#X)ocpl3Y0Zig? zn6;BLT^X9I%^;K2bra2bzEUN^GCkzL)8|l*h*vX`*a=f2y76PkQ#EX8Jw+TF20C5QX^Dw^h~!5}ARXBfoHBL{)y zTYV_=SbgpXg#vt5%4Rozh7l)tl$_YHrn!vTp3z?GEyQ3gdnO_QjenrYr{bm!?vW;a z2kVN=#=;hBUia9vh6(f&ZS-c>v6Q>K^SgSCogtUTkfe%4i|-HL+h0=2xRpuCVZb*NRk{-^DL z$mYgRdYy6ZrmK}IO@_X{z8yzFxwr7)EzdOy!bw2V0t7f}(<(qDXGV4$dD!udbLZ0c zou_=NtjFavctWq)FC2;BtM+g##wotnO%L>8aJf<3$6ee1Gu8AJ4l;r!+;WVRX&l2z z=Q70x$f*BGIFp-X^7t?v)7mFZ*fC7vwO2CCQ*>kv-d=pb!%>iJW@3`SajKM)qic_R z-nfl{wDbE3@JjW{i7EmD@>7({Si0HIa-lU{u2!<9DJKnHceaoAfou=)&+O&zmhrH*;d-`8GRlzGjU z4%lDxxI5iP^DK44PTL`+aC(+|o*qMLvn{8bQT5=jbNhY*ih*VJbb4GqcOX<0;nsPL z(e%AT5AW9nL%}ev`pMvn9xXdJzc!-xo}gpjJX(Hf(QyDy@7S;-QLQnKmmedeM)U^)Y{Wx%MGK}3PC_fy=-jb90}ym!wZx`bs({4ANG zu6F2An5?*6ePJzB=Uh?n-0!5WIQONH9;63xFgU|E+RBHrus9IP+q5Q;7>D_QN{Tydc@t+PJCNOEL zJ&fVdQQzoR1VVWRD_TD=c|`IIZG~R9wtSqa1wbG-_$HzA$ zX|%ge$ltwXvtQD8kgr9uO}h>yM>#Sox;Q(7qBWv)Bf=SnnO12k6aYIW7uMX^ZdM1ksM9(A9RnSfpTMQpZ*t)g3;XcETmDG%R`7FrRBLUh zj5z5!TCU7&pr=8{cD7{6?hFX%QAi5n3H*-C-=|+kdkCBRfzfZ<5SF78*HJc6>NJk! zOpV0JkRe{CHPGFA^bd0tg>?qo>@1~05A;l46w`mKEL-ql`QPa)OvVyVInG*8+!-iU zaCfP$B)wGbN-Bk81cV2&JZ_o#^iox&3K|*1Os3mS>t!x7aFGN==s} z)vuI#n?TAIUnT+nA7aZ_3|e1Ocs>F^D*tmJmwsEGghlF$g**%1GSi-=VS7iRH_Sj@ zj_2{Wz97Q6R0T$Z?6j`3i>vHol5M`vj|UtW7gVrsM|b-hBQPmb@5YK-a+Z#BrJ>FD aDOi 1}} -
APC Hacked
+ {{else malfStatus == 2}} + {{:helper.link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1})}} + {{else malfStatus == 3}} + {{:helper.link('Return to Main Core', 'arrowreturn-1-w', {'deoccupyapc' : 1})}} + {{else malfStatus == 4}} + {{:helper.link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1}, 'linkOff')}} {{/if}} {{/if}} diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 684c52afc5c..27658721f94 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -519,9 +519,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm {{else data.mode == 43}} -

Station Powermonitors

+

Station Power Monitors

- Select A power monitor: + Select a power monitor:
{{for data.records.powermonitors}}
@@ -532,38 +532,43 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm {{else data.mode == 433}}

Powernet Status

-
-
- Current Load: -
-
- {{:data.records.powerload}} W -
-
-
-
- Total Power: -
-
- {{:data.records.poweravail}} W -
-
-
-
- - {{for data.records.apcs}} - {{if index % 20 === 0}} - - {{/if}} - - {{:helper.string('', value.Equipment==1 ? '#4f7529' : '#8f1414')}} - {{:helper.string('', value.Lights==1 ? '#4f7529' : '#8f1414')}} - {{:helper.string('', value.Environment==1 ? '#4f7529' : '#8f1414')}} - {{:helper.string('', value.CellStatus==1 ? '#4f7529' : '#8f1414', value.CellStatus==-1 ? 'No Cell' : CellPct + '%')}} - - {{/for}} -
 Area  Eqp.  Lgt.  Env  Cell 
{{:value.Name}}   {1}
-
+ {{if data.records.powerconnected == 1}} +
+
+ Current Load: +
+
+ {{:data.records.powerload}} W +
+
+
+
+ Total Power: +
+
+ {{:data.records.poweravail}} W +
+
+
+
+ + {{for data.records.apcs}} + {{if index % 20 === 0}} + + {{/if}} + + {{:helper.string('', value.Equipment==1 ? '#4f7529' : '#8f1414')}} + {{:helper.string('', value.Lights==1 ? '#4f7529' : '#8f1414')}} + {{:helper.string('', value.Environment==1 ? '#4f7529' : '#8f1414')}} + {{:helper.string('', value.CellStatus==1 ? '#4f7529' : '#8f1414', value.CellStatus==-1 ? 'No Cell' : value.CellPct + '%')}} + + {{/for}} +
 Area  Eqp.  Lgt.  Env  Cell 
{{:value.Name}}   {1}
+
+ {{else}} + Power monitor not connected to net + {{/if}} + {{else data.mode == 44}} diff --git a/nano/templates/smartfridge.tmpl b/nano/templates/smartfridge.tmpl index b371baaef32..cc25d760ce0 100644 --- a/nano/templates/smartfridge.tmpl +++ b/nano/templates/smartfridge.tmpl @@ -34,42 +34,3 @@ No products loaded. {{/if}}
- -{{if data.panel_open}} -
-

Access Panel

-
-
-
- Wires: -
-
- {{for data.wires}} -
-
- {{:value.wire}} wire: -
-
- {{if value.cut}} - {{:helper.link('Mend', 'plus', {'cutwire' : value.index})}} - {{else}} - {{:helper.link('Cut', 'minus', {'cutwire' : value.index})}} - {{:helper.link('Pulse', 'signal-diag', {'pulsewire' : value.index})}} - {{/if}} -
-
- {{/for}} -
-
- -
- The orange light is {{:data.electrified ? "on" : "off"}}.
- The red light is {{:data.shoot_inventory ? "on" : "off"}}.
- {{if data.secure}} - The green light is - - {{:data.locked == 1 ? "off" : data.locked == -1 ? "blinking" : "on"}} - .
- {{/if}} -
-{{/if}} diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl index 04b93b41480..799ac3911d7 100644 --- a/nano/templates/smes.tmpl +++ b/nano/templates/smes.tmpl @@ -18,10 +18,12 @@
{{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}}   - {{if data.charging}} + {{if data.charging == 2}} [Charging] + {{else data.charging == 1}} + [Partially Charging] {{else}} - [Not Charging] + [Not Charging] {{/if}}
@@ -36,7 +38,7 @@ {{:helper.link('MIN', null, {'input' : 'min'}, (data.chargeLevel > 0) ? null : 'disabled')}} {{:helper.link('SET', null, {'input' : 'set'}, null)}} {{:helper.link('MAX', null, {'input' : 'max'}, (data.chargeLevel < data.chargeMax) ? null : 'disabled')}} -
 {{:data.chargeLevel}} W 
+
 {{:data.chargeLevel}} W 
@@ -48,6 +50,14 @@
{{:helper.link('Online', 'power', {'online' : 1}, data.outputOnline ? 'selected' : null)}}{{:helper.link('Offline', 'close', {'online' : 1}, data.outputOnline ? null : 'selected')}} +   + {{if data.outputting == 2}} + [Outputting] + {{else data.outputting == 1}} + [Stored energy too low] + {{else}} + [Not Outputting] + {{/if}}
@@ -61,7 +71,7 @@ {{:helper.link('MIN', null, {'output' : 'min'}, (data.outputLevel > 0) ? null : 'disabled')}} {{:helper.link('SET', null, {'output' : 'set'}, null)}} {{:helper.link('MAX', null, {'output' : 'max'}, (data.outputLevel < data.outputMax) ? null : 'disabled')}} -
 {{:data.outputLevel}} W 
+
 {{:data.outputLevel}} W 
diff --git a/nano/templates/solar_control.tmpl b/nano/templates/solar_control.tmpl index 17c3566bece..263764679a2 100644 --- a/nano/templates/solar_control.tmpl +++ b/nano/templates/solar_control.tmpl @@ -3,7 +3,7 @@ Title: Solar Control Computer Used In File(s): \code\modules\power\solar.dm --> -

Status:

+

Status

@@ -30,11 +30,11 @@ Used In File(s): \code\modules\power\solar.dm
-

Tracking:

+

Tracking

-
- Tracker status:  +
+ Tracker status:
{{:helper.link('Off', 'close', {'track' : '0'}, (data.tracking_state == 0) ? 'selected' : '')}} @@ -47,7 +47,7 @@ Used In File(s): \code\modules\power\solar.dm
-
+
Tracking rate:
@@ -66,10 +66,10 @@ Used In File(s): \code\modules\power\solar.dm
-

Connected devices :

+

Connected Devices

-
+
Solars panels:
@@ -78,15 +78,15 @@ Used In File(s): \code\modules\power\solar.dm
-
+
Solar tracker:
{{if data.connected_tracker}} - Found  + Found {{else}} - Not found  + Not Found {{/if}}
diff --git a/paradise.dme b/paradise.dme index 131d5139d79..f0ae528ffd2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -21,6 +21,7 @@ #include "code\__DEFINES\clothing.dm" #include "code\__DEFINES\combat.dm" #include "code\__DEFINES\flags.dm" +#include "code\__DEFINES\game.dm" #include "code\__DEFINES\genetics.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\language.dm" @@ -222,6 +223,7 @@ #include "code\datums\wires\particle_accelerator.dm" #include "code\datums\wires\radio.dm" #include "code\datums\wires\robot.dm" +#include "code\datums\wires\smartfridge.dm" #include "code\datums\wires\syndicatebomb.dm" #include "code\datums\wires\taperecorder.dm" #include "code\datums\wires\vending.dm" @@ -1515,6 +1517,7 @@ #include "code\modules\power\lighting.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" +#include "code\modules\power\powernet.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\switch.dm" From 08f67c7881d9e21d844898b1801e18c041580c81 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 00:18:00 +0200 Subject: [PATCH 02/21] Smartfridge update --- _maps/map_files/cyberiad/cyberiad.dmm | 34 ++++----- code/game/machinery/kitchen/smartfridge.dm | 69 +++++++++++++++--- .../reagents/reagent_containers/pill.dm | 2 +- icons/obj/vending.dmi | Bin 81443 -> 85185 bytes 4 files changed, 75 insertions(+), 30 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 889355a36e0..c3b72f8fb1f 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1797,7 +1797,7 @@ "aIC" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway) "aID" = (/obj/machinery/gateway/centerstation,/turf/simulated/floor{icon_state = "dark"},/area/gateway) "aIE" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway) -"aIF" = (/obj/machinery/requests_console{department = "EVA"; name = "EVA Requests Console"; pixel_x = -32; pixel_y = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) +"aIF" = (/obj/machinery/requests_console{department = "EVA"; name = "EVA Requests Console"; pixel_x = -32; pixel_y = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aIG" = (/turf/simulated/floor,/area/ai_monitored/storage/eva) "aIH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aII" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) @@ -3861,7 +3861,7 @@ "bwm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/port) "bwn" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/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/port) "bwo" = (/obj/structure/table,/obj/item/clothing/head/soft,/obj/item/weapon/stamp/granted{pixel_x = -3; pixel_y = 3},/obj/item/clothing/head/soft,/turf/simulated/floor,/area/quartermaster/storage) -"bwp" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; name = "Cargo Requests Console"; pixel_x = 0; pixel_y = 30},/obj/item/weapon/stamp/granted{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage) +"bwp" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_y = 30},/obj/item/stack/tape_roll,/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office) "bwq" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/quartermaster/storage) "bwr" = (/obj/machinery/camera{c_tag = "Cargo Bay North"},/obj/structure/closet/secure_closet/cargotech,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/quartermaster/storage) "bws" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor,/area/quartermaster/storage) @@ -4309,7 +4309,7 @@ "bES" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"},/area/medical/research{name = "Research Division"}) "bET" = (/obj/machinery/door_control{id = "rdlab2"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = -24; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bEU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) -"bEV" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_y = 30},/obj/item/stack/tape_roll,/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office) +"bEV" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; name = "Cargo Requests Console"; pixel_x = 0; pixel_y = 30},/obj/item/weapon/stamp/granted{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage) "bEW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bEX" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/scanning_module{pixel_x = 0; pixel_y = 0},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 2; pixel_y = 3},/obj/machinery/light_switch{pixel_y = -25},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bEY" = (/obj/machinery/light/small{dir = 1},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 14},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -4407,7 +4407,7 @@ "bGM" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/storage) "bGN" = (/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/storage) "bGO" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) -"bGP" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Cargo Office"; dir = 4; network = list("SS13")},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool,/turf/simulated/floor,/area/quartermaster/office) +"bGP" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Cargo Office"; dir = 4; network = list("SS13")},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool,/turf/simulated/floor,/area/quartermaster/office) "bGQ" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor,/area/quartermaster/office) "bGR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/chiefs_office) "bGS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/office) @@ -4531,7 +4531,7 @@ "bJg" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/backpack/medic,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/weapon/storage/toolbox/emergency,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay2) "bJh" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/engine/hardsuitstorage) "bJi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medical Supplies"; req_access_txt = "5"},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/chemistry) -"bJj" = (/obj/machinery/smartfridge/medbay,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bJj" = (/obj/machinery/smartfridge/secure/medbay,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bJk" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2) "bJl" = (/turf/simulated/wall,/area/medical/medbay3) "bJm" = (/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay3) @@ -5410,12 +5410,15 @@ "cab" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "cac" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "cad" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall,/area/medical/medbay2) +"cae" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/toxins/xenobiology) "caf" = (/obj/machinery/light,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/cmo) "cag" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/device/megaphone,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/cmo) "cah" = (/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/cmo) "cai" = (/obj/machinery/computer/crew,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 6; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/cmo) +"caj" = (/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 1},/obj/item/weapon/reagent_containers/dropper/precision,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cak" = (/turf/simulated/wall,/area/medical/medbay2) "cal" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) +"cam" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/smartfridge/secure/virology,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "can" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) "cao" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) "cap" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) @@ -5431,6 +5434,8 @@ "caz" = (/obj/machinery/camera{c_tag = "Medbay Psych Office"; dir = 8; network = list("SS13")},/obj/machinery/power/apc{dir = 4; name = "Psychiatrist APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/medical/psych) "caA" = (/turf/simulated/wall/r_wall,/area/toxins/telesci) "caB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/telesci) +"caC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 32},/obj/machinery/door_control{id = "virolab"; name = "Virology Laboratory Shutters Control"; pixel_x = -4; pixel_y = 25; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) +"caD" = (/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Virology Lab West"; dir = 4; network = list("SS13")},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "caF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/toxins/telesci) "caG" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "caH" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) @@ -6789,7 +6794,6 @@ "cCR" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cCT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cCU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/smartfridge/extract,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/toxins/xenobiology) "cCV" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/processor{name = "Slime Processor"},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/toxins/xenobiology) "cCW" = (/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher{pixel_x = 4; pixel_y = 4},/obj/structure/table/glass,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/toxins/xenobiology) "cCY" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) @@ -7068,7 +7072,6 @@ "cIQ" = (/obj/machinery/light,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology/lab) "cIR" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light,/obj/machinery/camera{c_tag = "Virology Decontamination West"; dir = 1; network = list("SS13")},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/sign/biohazard{pixel_x = 0; pixel_y = -32},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology/lab) "cIV" = (/obj/item/weapon/storage/fancy/vials,/obj/machinery/power/apc{dir = 1; name = "Virology Laboratory APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) -"cIW" = (/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/reagent_containers/dropper/precision,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cIX" = (/obj/machinery/computer/med_data/laptop,/obj/machinery/camera{c_tag = "Virology Lab North"; dir = 2; network = list("SS13")},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "viro_lab2_airlock_control"; name = "Virology Lab Access Console"; pixel_x = 8; pixel_y = 22; tag_exterior_door = "viro_lab2_airlock_exterior"; tag_interior_door = "viro_lab2_airlock_interior"},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cIY" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cIZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Monkey Pen"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) @@ -7119,7 +7122,6 @@ "cJZ" = (/obj/machinery/disease2/incubator{name = "Pathogenic incubator"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cKa" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/disease2/isolator,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cKb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) -"cKc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cKd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cKe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cKg" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) @@ -7174,7 +7176,6 @@ "cLl" = (/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -27},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "viro_lab_airlock_control"; name = "Virology Lab Access Console"; pixel_x = 8; pixel_y = 22; tag_exterior_door = "viro_lab_airlock_exterior"; tag_interior_door = "viro_lab_airlock_interior"},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cLm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology/lab) "cLn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology/lab) -"cLo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/door_control{id = "virolab"; name = "Virology Laboratory Shutters Control"; pixel_x = 0; pixel_y = 25; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cLp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cLq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cLr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) @@ -7267,7 +7268,6 @@ "cNp" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/space,/area/space) "cNq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "cNr" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) -"cNs" = (/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Virology Lab West"; dir = 4; network = list("SS13")},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cNt" = (/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology/lab) "cNu" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology/lab) "cNv" = (/obj/structure/filingcabinet/filingcabinet,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) @@ -8089,13 +8089,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjzbjAbjBdatbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIaHSbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXaHUbjZbkabkbbkcaVyaVyaHFbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaFTbkubkvbkwaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaAvaAvaBmbkAaZGbkBbfTbkCbjgbjgbjgbjhbkCbfTbesbkDbkEbhDbjlbkFbkGbkHbkIbjlbkJbkKbkLaZKbkMbkNbkObkPaZKbbKbkQbkRbkRbkSbkRbkRbkRbkRbkTbkUbkUbkUbkVbkUbkWbkXbkYbkZblablbblbblbblbblbblbblcbldblcbjPbjPbleblfblgblhblibljbleblkbjPbllblmbllbllbllbllbllbllbllbkcaVyaVyaINblnblobavblpbavblqbavblrblsbltbkfbluaSdblvblwaSdaSdblxblyblyblyaSdaSdaSlblzblAblBblBblBblBblAblCaSlblDbkobkobkpblEaOQblFblGblHblIblJblKblLblMblNaNqblOaPfblPbcHbcHblPaPfblQaNqblRbehaXObeibeibejbeiaXObiZaFTbjabjabjaaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQblSaAvblTblUblVbesbhvbhvbhvbfTblWblXblYblZbesbmabmbbhDbjlbmcbjlbmdbmebjlbmfbmgbmhaZKbkMbkNbkObmiaZKbbKbkQbkRbmjbmkbmlbmmbmnbkRbmobmpbmqbmrbkXbkXbkXbkXbmsbmtbmublbbmvbmwbmxbmybmzbmAbmBbmCbjPbmDblgbmEbmFbmGbmFbmEblgbmHbjPbmIbmJbmKbmLbmMbmNbmObmPbllbmQbmRbmRbmSaINaINaINaINbmTaHFbmTbmUaINaSbaINaINaSdaSdaSdaSdbmVbmWbmWbmWbmWbmXbmYaSlaFSbnaaFSbnbbnbaFSbnaaFSaSlblDbkobkobncblEaOQaOQaOQaOQaOQbgYaOQaOQaOQaOQaNqbndaDxaDxaDxaDxaDxaDxaNqaNqbnhbniaXOaXOaXOaXQaXOaXObhpaFTaHPaFTaFTaHPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEaBmaBmaBmaAyaAyaAyaAyaAyaAybnmbnnbesbesbesbesbesbesbnobesbesbesbnpbnpbnqbjlbnrbnsbmdbntbjlbnubnvbnuaZKbkMbkNbkObnwaZKbbKbkQbkRbnxbnybnzbmmbnzbkRbmobnAbnBbnCbnDbEVbnFbkXbnGbnHbmuaHVbnJbnKbnLbnMbnMbnLbnNbnObjPbnPblgblgbnQbnRbmFbmEblgbnSbjTbnTbnUbnVbnWbnXbnYbnVbnZbllboabobbocbodboebofbogbohbohbohbohbohbohboibojbokbolbohbombohbohbohbohbohbohbohbohbonboobopbopbopbopbopbopboqbofborbosbosbotboubovboubowbouboxboybozbouboAboBboCboDboEboEboEboEboEboEboEboFboGboHboHboHboHboIboHboJboKboLboMboNbfOboOaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEaBmaBmaBmaAyaAyaAyaAyaAyaAybnmbnnbesbesbesbesbesbesbnobesbesbesbnpbnpbnqbjlbnrbnsbmdbntbjlbnubnvbnuaZKbkMbkNbkObnwaZKbbKbkQbkRbnxbnybnzbmmbnzbkRbmobnAbnBbnCbnDbwpbnFbkXbnGbnHbmuaHVbnJbnKbnLbnMbnMbnLbnNbnObjPbnPblgblgbnQbnRbmFbmEblgbnSbjTbnTbnUbnVbnWbnXbnYbnVbnZbllboabobbocbodboebofbogbohbohbohbohbohbohboibojbokbolbohbombohbohbohbohbohbohbohbohbonboobopbopbopbopbopbopboqbofborbosbosbotboubovboubowbouboxboybozbouboAboBboCboDboEboEboEboEboEboEboEboFboGboHboHboHboHboIboHboJboKboLboMboNbfOboOaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaaaabaAvaIiboRboSboTboUboUboUboUboUboVboWboXboYboZbpabnqbjlbjlbjlbpbbmebjlaZKaZKaZKaZKbkMbpcbpdbpeaZKbpfbpgbkRbphbpibmmbnzbpjbkRbmobpkbnBbnCbnCbplbpmbkXbpnbnHbmuaHVbppbpqbprbpsbptbpubnNbpvbjPbpwbnQblgbpxbpybpxblgbnQbpzblkbpAbnVbnVbnWbpBbnYbnVbpCbllbpDbocbocbodboebofbohbohbohbohbohbohbohbpEbohbohbohbohbohbohbpFbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpHbpIbpJboEboEbpKbkobkobkobkobkobkpbkobkobkobkobkobkobkobkobkobkobkobkobpLbkobpMbpNaXOaXOaXOaXOaXOaXOaXObpOaFTaHPaFTaFTaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPaHRaAvaAvbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmuaHVbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvdavbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhaFTaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbrjbrkbrlbrmbrnbpSbrobrpbrqbrqbrrbrsbrtbrubrvbrvbrwbrxbjlbjlbjlbmdbrybmcaZOaZOaZOaZObrzbbKbbKbrAbjybrBbrCbrDbrEbrFbrGbrHbrIbkRbrJbkXbrKbnCbnCbnCbrLaIgbrNbnHbrOblbbrPbrQbnLbnLbnLbnLbnNbrRbjPbrSbrTbjPbjPbjPbjPbjPbjPbjPblkbllbrUbrVbrWbrXbrYbrZbsabllbsbbscbscbsdbsdbsdbsdbsdbsdbsdbsebsebsfbsgbshbshbsgbsfbsebsebsibsibsibsibsibsibsjbsjbskbsjbsjbsjbsjbsjbslbsmbsnbsobkobkobspbspbsqbsqbsqbsqbsqbsrbrabrabqZbrabkobrabrabrabrabssbstbstbstbstbsFbsvbsvbsvbsvbsvbsvbsvbsvbsvaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPaAvaAvaAvbpQbswbpSbsxbpSaIhaIhbpSbpUbpUbdabsAbsBbsBbsCbjlbkFbsDbmdbsEbmcbsHbsGbujbsIbsJbsKbsKbsLbsKbsMbsNbkRbsObsPbsQbsRbsSbrDbsTbkXbsUbnCbnCbsVbsWbsXbrNbnHbsYblbbsZbtabtbbtcbtdbtebtfblbblbbtgbthbtibtjbtkbtjbtlbthaaabtmbllbtnbtobtpbtqbrYbnVbtrbllbtsbttbtubsdbtvbtwbtxbtybtzbtAbtBbtCbtDbtEbtFbtFbtEbtGbtHbtIbsibtJbtLbtKbtMbsibtNbtObtPbtQbtRbtSbtSbtTbslbtUbtVbtWbtXbtWbtYbtYbsqbtZbuabubbsqaImbudaImbsqbuebrabssbstaInbugaInbstbuhbuibstbuwbukbulbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaabunaAvbuoblUbupbpSbuqbpSburbusbutbuubpSbuvbwHbuxbuybsCbjlbjlbjlbjlbjlbjlbuzbuAbuBbuCbuDbkRbkRbkRbkRbkRbkRbkRbuEbkRbkRbkRbuFbkRbuGbuHbuIbnCbnCbnCbuJaIgbuKbnHbuLblbbuMbtablcblcblcblbbuNblbbuObuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbllbuZbnVbvbbvabrYbvcbnVbllbvdbvebvfbsdbvgbvhbvibvjbvkbvlbvmbtFbtFbtFbtFbtFbtFbtFbvnbvobvpbvqbvrbvsbvtbsibvubvvbvwbvxbxqbvzbvvbEbbslbvAbtVbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbsqbvNbvObvPbstbvQbvRbvSbvTbvTbvUbstbvVbvWbvXbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEaBmaBmaAvaAvaAvaAvaAvaAvaAvaGTbwabwbbpSbwcbwdbwebwfbwgbwhbwibgebbKbbKbbKbwjbrvbrvbrvbrvbrvbrvbwkbwlbwlbwmbwnbkRbwobwpbwqbwrbwsbwtbwubwvbkRbwwbwxbwybsTaIgbuIbnCbnCbwzbkXbkXbwAbwBbwCbwDbwEbwFbwGbzDbwIbwJbwKbwLbwMbwNbuWbwObwPbwObwPbwQbuWbuXbwRbwSbwTbwUbwVbwWbwXbwYbwZbwSbxabttbttbsdbxbbxcbxdbxebxfbsdbvmbtFbtFbtFbtFbtFbtFbtFbxgbxhbxibxjbxkbvqbxlbsibxmbxnbxobvxbEbbvzbxpbTrbslbxrbxsbxtbxubxubxvbxwbxxbxybxzbxzbxzbxAbxzbxBbxCbxDbxEbxFbxGbxHbxIbxJbxJbxJbxKbstbxLbvWbxMbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEaBmaBmaAvaAvaAvaAvaAvaAvaAvaGTbwabwbbpSbwcbwdbwebwfbwgbwhbwibgebbKbbKbbKbwjbrvbrvbrvbrvbrvbrvbwkbwlbwlbwmbwnbkRbwobEVbwqbwrbwsbwtbwubwvbkRbwwbwxbwybsTaIgbuIbnCbnCbwzbkXbkXbwAbwBbwCbwDbwEbwFbwGbzDbwIbwJbwKbwLbwMbwNbuWbwObwPbwObwPbwQbuWbuXbwRbwSbwTbwUbwVbwWbwXbwYbwZbwSbxabttbttbsdbxbbxcbxdbxebxfbsdbvmbtFbtFbtFbtFbtFbtFbtFbxgbxhbxibxjbxkbvqbxlbsibxmbxnbxobvxbEbbvzbxpbTrbslbxrbxsbxtbxubxubxvbxwbxxbxybxzbxzbxzbxAbxzbxBbxCbxDbxEbxFbxGbxHbxIbxJbxJbxJbxKbstbxLbvWbxMbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvbxObxPbxQbxRbxSbxSbxTbxUaFzbpSbxVaIhbwfbxXbpSbpSbpSaZOaJkaJkbyabybbyabyabyabybbyaaZOaZObkRbkRbkRbycbkRbydbydbydbydbydbydbwubyeaJlbygbyhbyibyjbykbylbymbynbyobypbyqbyrbysbytbyubyvbyvbywbyxbyybyzbyAbyBbyCbyDbthbyEbuUbyFbuSbyGbthaaabyHbyIbyJbyKbyIbyIbyIbyIbyLbllbyMbttbyNbyObyPbyQbyRbySbyTbsdbyUbyVbyWbyXbyYbyZbzabzbbvnbzcbsibzdbxkbzebzfbsibzgbzhbvwbvxbEbbvzbvvbEbbslbvAbtVbzibzjbzkbzlbzmaJmbzobzpbzqbzrbzsbztbzubsqbzvbzwbzxbstbzybzzbzAbvTbzBbzCbstbxLbvWbAhbumaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvbzEbzFbzGaFyaFybzHbzIaFybzJbpSbzKaJMaKbbzNbpSaaaaaaaaaaabaabbzObzObzObzObzObzObzOaaaaaaaKcbzQbzRbzSbzTbydbydbydbydbydbydbzUbzVbzWbzXbzYbzZbAaaKdbkXbkXbAcbBWbkXbkXbAdbAebAfbAgbBubAibAibAjbAibAkbAlbAmbAnbyDbthbAobtjbtjbtjbApbthaaabyHbyIbAqbArbAsbAtbAubAvbAwbAxbAybttbAzbsdbtvbAAbABbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbANbAObAPbAQbxkbARbASbsibATbAUbAVbAWbAXbAYbAZbtTbslbBabBbbBcbBdbBdbBebBfaKjbBhbBibBjbBkbBlbBmbBnbsqbBobzwbBpbstbBqbBrbBsbvTbvTbBtbstbvVbvWbEGbumaaaaaaaaaaaaaabbBvbBwbBxbBwbBxbBwbByaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBzaAvbBAbBAaMWaAvaAvaIfazEbBDbBCbpSbBEbBFaKbaKbbpSaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaKcbBJbydbBKbBLbBLbBLbBLbBLbBMbBNbBLbBObBPbBQbBRbBSbBTbBUbkXbBVbnCbKebBXaIgbBZbCabCbbAgbAgbAmbCcbCdbCebCfbCgbAmbtgbyDbthaNIaPwbCjaRvaPAbthaaabCmbyIbCnbCobCpbCqbCrbCqbCsbCtbCubttbCvbsdaSVaSOaSObCzbCAbCBbCCbCDbCEbCFbCGbCGbCHbCIbCJbCKbsibAQbCLaSXbsibsibsjbCNbCObCPbsjbslbslbslbCQbCRbtVbCSbzjbzkbCTbBdaKjbCVbCWbCWbCXbvIbCYbCZbDabDbbvObDcbstbDdbDebvTbDfbDgbDhbstbxLbDibumbumaaaaaaaaaaaaaabbDjbDkbDlbDmbDnbDobDjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8135,16 +8135,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaczaaacyYcyZczaaaacyYcyZczaaaacyYcyZczaaabczbaabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaabxYcwybxZczdcwLcxVczecwLcwLcwLczfcwLczdczdcwLcwLcwLcwLczgbzPcxXczicsKczjbZUcybcybczkcwUczlczmczncwUczoctaczpczqczrczscztcHZbHTczucbSczubHTbHTbHTcuFcZScnzbnjbnjbnjbnjbnjcnzcnzaaaczwczxczycjqczzczAcoOcoOczBbAbczDczEbAbczDczEbAbczDczEcyJaaaaabcjIcvWcvWcvWcvWczFcqaczGczHczIczJczKcjIaabaaaaaaaaaaaaaaacwecuPcuMcxCcxCcuOctDcEpaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaaacyYczVczaaaacyYczVczaaaacyYczVczaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabbxYcwybxZczdczYcwLczZcAacAbcAbcxUcwLczdcAccwLcwLcwLcwLcAdcAecAfcAgbYxcAhcAicAjcAkcAlcwUczlcAmcAncwUcAoctacrYcApcrVcAqcArcAscAtcAucAvcAwcAtcAtcAtcAxcAtcnzaaaaaaaaaaaaaaaaaaaabaaacuGcAycvMcAzcAAcABcoOcoOczBbAbcADbAbbAbcADbAbbAbcADbAbcyJaabaabcjIcvPcvQcvRbBBcAIcyMcAJcAKcALcAMcANcjIaabaabaabaabaabaaacwecwecuScuRcwdcwecweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaagaaaaaaaaaakSaabcyYczVczaaaacyYczVczaaabcyYczVczaaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaabxYcwycvecAWcwLcAXcAYcAZcBacBbcBacBccBacBdcBecwHcBfczdczdbzPcBgcBhcBicBjcBkcBlcBmcBncBocBpcBqcBrcBscBtcBucBvcBvcBwcBxcBycBzbBGcBBcBCcBDcBEcBFcBGcBHbBHaabaaaaaaaaaaaaaaaaaaaabaabczwcBJcBKcBLcBMcBNcoOcoOcoOcBOcoOcoOcoOcoOcoOcoOcoOcBPbBIaaaaaacjIcxtbTXcxtcBRcxwcqacBScBTcBUcBVcBWcjIcjIcjIcjIcjIaabaaaaaacwecwecwecwecweaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacxLcBZcvecCacCbcCbcCccvecvecvecvecvecvecvecvecvecvecvecvecvecCdcCecCdcCfcCdcqxbBYcChbCibChbChbCkcCmbClcBucCocCpcCqcCrcCscCtbBGcCvcCwcCxcCycCzcCAcCBbCwaabcCDcCDcCDcCDcCDaaaaaaaabcuGcCEcvMcCFcCGcCHcCIcoOcoOcCJcoOcoOcoOcoOcoOcCKcoOcCLbBIaaaaaacjIcxtcxtcxtbBBcCNcyMcCOcCPcCQcCRcCScCTcCUcCVcCWcjIaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacxLcBZcvecCacCbcCbcCccvecvecvecvecvecvecvecvecvecvecvecvecvecCdcCecCdcCfcCdcqxbBYcChbCibChbChbCkcCmbClcBucCocCpcCqcCrcCscCtbBGcCvcCwcCxcCycCzcCAcCBbCwaabcCDcCDcCDcCDcCDaaaaaaaabcuGcCEcvMcCFcCGcCHcCIcoOcoOcCJcoOcoOcoOcoOcoOcCKcoOcCLbBIaaaaaacjIcxtcxtcxtbBBcCNcyMcCOcCPcCQcCRcCScCTcaecCVcCWcjIaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaabaaaaaaaaaaaaaaaaaaaaaaaaaabbCxcCYcCYcCYcCYcxLcCZcwycDacDbcDccDccDdcDecDfcDgcDgcDgcDgcDhcDicDjcDicDicDkcDkcDicDlcDmcDncDocDocDpcDqcDrcDscDtcDucDucDvcDwcDxcDycDzcDAcCscDBbBGcDCcDDcDEcDFcDGcDHcDIbCycDKcDLcDMcDNcDOcCDaaaaaacDPcDQcDRcDScDTcDRcDUcDVcDWcDXcDYcDZbzLcDYcEbcEccEdcEebCMcyJaaaaaacjIcvWcvWcvWcvWcEgcqacBScEhcEicBVcEjcEkcElcEmcEnbSIcEpaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcEqaabaabaabcEqaabaaaaabcEqaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcEucEvcEwcExcEycEzcEAcDacDacEBcECcvecvecEDcEEcEEcEEcEEcEFcEGcEHcEGcEGcEGcDocDocEIcEJcEKcELcEMcDucENcDrcDucDucDucDucEOcBucEPcEQcCqcDAcCscDAbBGcDCcDDcEScETcEUcEVcEWbCUaabcEYcEZcDOcFacCDaaaaaaaaacDQcFbcFccFdcDRcFecFfcFgcFhcFiczEczDcFicFjcFkcFlczEczDcyJaaaaaacjIcvPcvQcvRbDrcAIcyMcFncFocFpcEmcFqcFrcFscFtcFucjIaabaabaagaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaakSaabcFvcFwcFwcFxcFycFzcFzcFzcFycFzcFzcFzcFycFzcFzcFAcFwcFwcFwcFwcFwcFBcFCcFDcFEcFFcFGcFHcFIcFJceHcwycFKcDacvecvecvecZTcEDcEEcFMcFNcFOcFPbDscFRcFScFTcFUbDtcFWcFXcFYcFZcGabDtcGccGdcDrcGecDucDucDucGfcBucGgcGgcDAcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrbCycGscDLcGtcDOcDOcCDaaaaaaaabcDQcGucFccGvcDRcGwcGxcCIcGycFicGzcGAcFicGBcGCcFlcGzcGDcyJaaaaaacjIcxtbTHcxtcGEcxwcqacGFcFocGGcqacqacGHcvWcvWcvWcjIaaaaaaaaaaaaamjamjamjawTaabaabaabaabcGIaabaabaabaabaabalwamjamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcGJaabaaaaabcGJaabaaaaabcGJaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcGLcGMcGNcCYcZUceHcGPcEzcEzcEzcEzcGQcEzcFJcEEcGRcGScGTcGUbDGcGWcGXcGYcGZbEocHbcHccHdcHecHfbFlcHhcDqcDrcZicHjcDucDucHkcBucHlcHmcDAcHncCscHocHpbFvbFtbGBbFQbGEbGCbGEbGGaabcCDcCDcCDcCDcCDaabaabaabcHxcHycFccGvcDRcHzcHAcHBcHCcHDcHEcHFcHFcHGcHFcHHcHIcDRcHJaaaaaacjIcxtcxtcxtbDrcHKcHLcHMcHNcHOcCTcCTcCTcHPcHQcHRbGHaaaaaaaaaaaaamjaaaaabaaaaabaaaaaaaaacHTaaaaabaabaaaaaaaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEbYRcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcGTbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbcKccFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKGcKHcIdcIecGTcGTcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcKQcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcLlcLmcLncLocLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEbYRcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcajcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcGTbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbcamcFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKGcKHcIdcIecGTcGTcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcKQcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcLlcLmcLncaCcLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEbYVcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMNcMMcMMcMMcMMcMOcMPcMQcMRcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdbUKbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQcNscNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJbTXcxtcvWcNKbTXcxtcvWcNKbTXcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMNcMMcMMcMMcMMcMOcMPcMQcMRcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdbUKbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQcaDcNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJbTXcxtcvWcNKbTXcxtcvWcNKbTXcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcNNcNOcNPcNQcMMcNRcNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdbULbNdcMgcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbSSbJEcOzcOzbTicOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcOKcOLcOMcONcOOcOPcOQcORcJqcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcPecEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaacbTpbTqcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcJncJncJncPwbNybNybNycMMcPAcPBcPCcPCcPDcPEcMScPFcPGcPHcPIcPJcPJcPKcPLcPMcPNcPOcPPcPKcPQcPRcPScPTcGTcPUcPVcPWcOfcMhcPXcPYcDAcNhcDAcPZcDAcNkcNlcJPcJQcQabJCcOkcCDcCDcCDcCDcCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDQcQbcIYcIYcKbcQccQdcOzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPnaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaawTaaaaabaaaaabaaaaabaaacQeaaaaabaaaaabaabaabaabamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 81ae816fb42..88555018962 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -55,28 +55,68 @@ return 1 return 0 -/obj/machinery/smartfridge/extract +/obj/machinery/smartfridge/secure/extract name = "\improper Slime Extract Storage" desc = "A refrigerated storage unit for slime extracts" + req_access_txt = "47" -/obj/machinery/smartfridge/extract/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj) if(istype(O,/obj/item/slime_extract)) return 1 - if(istype(O,/obj/item/device/slime_scanner)) - return 1 return 0 -/obj/machinery/smartfridge/medbay - name = "\improper Medical Fridge" - desc = "Am refridgerated storage unit for medicine." - icon = 'icons/obj/vending.dmi' +/obj/machinery/smartfridge/secure/medbay + name = "\improper Refrigerated Medicine Storage" + desc = "A refrigerated storage unit for storing medicine and chemicals." + icon_state = "smartfridge" //To fix the icon in the map editor. + icon_on = "smartfridge_chem" req_one_access_txt = "5;33" -/obj/machinery/smartfridge/medbay/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/weapon/reagent_containers/) || istype(O,/obj/item/weapon/storage/pill_bottle)) +/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj) + if(istype(O,/obj/item/weapon/reagent_containers/glass/)) + return 1 + if(istype(O,/obj/item/weapon/storage/pill_bottle/)) + return 1 + if(istype(O,/obj/item/weapon/reagent_containers/pill/)) return 1 return 0 +/obj/machinery/smartfridge/secure/virology + name = "\improper Refrigerated Virus Storage" + desc = "A refrigerated storage unit for storing viral material." + req_access_txt = "39" + icon_state = "smartfridge_virology" + icon_on = "smartfridge_virology" + icon_off = "smartfridge_virology-off" + +/obj/machinery/smartfridge/secure/virology/accept_check(var/obj/item/O as obj) + if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial/)) + return 1 + if(istype(O,/obj/item/weapon/virusdish/)) + return 1 + return 0 + +/obj/machinery/smartfridge/chemistry + name = "\improper Smart Chemical Storage" + desc = "A refrigerated storage unit for medicine and chemical storage." + +/obj/machinery/smartfridge/chemistry/accept_check(var/obj/item/O as obj) + if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers)) + return 1 + return 0 + +/obj/machinery/smartfridge/chemistry/virology + name = "\improper Smart Virus Storage" + desc = "A refrigerated storage unit for volatile sample storage." + +/obj/machinery/smartfridge/drinks + name = "\improper Drink Showcase" + desc = "A refrigerated storage unit for tasty tasty alcohol." + +/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj) + if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment)) + return 1 + /obj/machinery/smartfridge/process() if(stat & (BROKEN|NOPOWER)) return @@ -164,7 +204,7 @@ return 1 /obj/machinery/smartfridge/attack_ai(mob/user as mob) - attack_hand(user) + return 0 /obj/machinery/smartfridge/attack_hand(mob/user as mob) if(stat & (NOPOWER|BROKEN)) @@ -202,7 +242,12 @@ if(P.contents.len > 0) user << "Some items are refused." nanomanager.update_uis(src) - + +/obj/machinery/smartfridge/secure/emag_act(user as mob) + emagged = 1 + locked = -1 + user << "You short out the product lock on [src]." + /******************* * SmartFridge Menu ********************/ diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 8ba0779b746..e56d26560f7 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -176,7 +176,7 @@ reagents.add_reagent("methamphetamine", 5) /obj/item/weapon/reagent_containers/pill/charcoal - name = "Chacoal pill" + name = "Charcoal pill" desc = "Neutralizes many common toxins." icon_state = "pill17" New() diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 95bb1778cde4bde309da7916e2bafa115517fdfc..15427f2a18382b66ac71c014f8f890a31adcbd02 100755 GIT binary patch literal 85185 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

65SoqCz8 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¥k@)E|C;nebC&L;bpcV)dhWRg3IC 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 Date: Sat, 1 Aug 2015 00:22:21 +0200 Subject: [PATCH 03/21] Minor smartfridge fixes --- code/game/machinery/kitchen/smartfridge.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 88555018962..8d481e8ab4f 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -144,6 +144,7 @@ /obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/screwdriver)) + playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") overlays.Cut() @@ -345,5 +346,6 @@ if(usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) if(!allowed(usr) && !emagged && locked != -1 && href_list["vend"]) usr << "Access denied." + nanomanager.update_uis(src) return 0 return ..() \ No newline at end of file From e055bbb8471511bfb1a2d38dbfeb92a33db81aab Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 00:34:03 +0200 Subject: [PATCH 04/21] SMES ghost access fix --- code/modules/power/smes.dm | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 7fb7aee723b..89c69c9303b 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -395,19 +395,8 @@ ui.set_auto_update(1) /obj/machinery/power/smes/Topic(href, href_list) - ..() - - if (usr.stat || usr.restrained() ) - return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - if(!istype(usr, /mob/living/silicon/ai)) - usr << "\red You don't have the dexterity to do this!" - return - -//world << "[href] ; [href_list[href]]" - - if (!istype(src.loc, /turf) && !istype(usr, /mob/living/silicon/)) - return 0 // Do not update ui + if(..()) + return 1 if( href_list["cmode"] ) inputting(!input_attempt) @@ -416,6 +405,7 @@ else if( href_list["online"] ) outputting(!output_attempt) update_icon() + else if( href_list["input"] ) switch( href_list["input"] ) if("min") From f9d6bd33e65b0bc8720f56cd46231f336edf830f Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 00:38:35 +0200 Subject: [PATCH 05/21] SMES upgraded fix --- code/modules/power/smes.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 89c69c9303b..5e34cb31fcc 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -77,12 +77,12 @@ ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/smes(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) component_parts += new /obj/item/stack/cable_coil(null, 5) RefreshParts() From 174c0fae985ae814c4aa96c634494db8d628e2e0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 00:42:32 +0200 Subject: [PATCH 06/21] Compile error fix --- code/game/machinery/kitchen/smartfridge.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 8d481e8ab4f..2e36e0ab247 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -144,7 +144,7 @@ /obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") overlays.Cut() From b3b226fd59edb97002d6383263b3c4b3863cf3fd Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 00:52:04 +0200 Subject: [PATCH 07/21] Fix some oversights --- code/game/objects/items/devices/powersink.dm | 2 +- code/modules/power/apc.dm | 4 ++-- nano/templates/apc.tmpl | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 336ac002671..7db62612994 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -27,7 +27,7 @@ /obj/item/device/powersink/Destroy() processing_objects.Remove(src) processing_power_items.Remove(src) - ..() + return ..() /obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 03dc1c4eac9..c5b84b358a7 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -140,7 +140,7 @@ /obj/machinery/power/apc/Destroy() if(malfai && operating) if (ticker.mode.config_tag == "malfunction") - if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas)) + if (src.z == ZLEVEL_STATION) ticker.mode:apcs-- area.power_light = 0 area.power_equip = 0 @@ -153,7 +153,7 @@ qdel(cell) // qdel if(terminal) disconnect_terminal() - ..() + return ..() /obj/machinery/power/apc/proc/make_terminal() // create a terminal object at the same position as original turf loc diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl index 0e5ee45d4ce..3824d8f5e81 100644 --- a/nano/templates/apc.tmpl +++ b/nano/templates/apc.tmpl @@ -167,11 +167,11 @@ {{:helper.link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} {{if data.malfStatus == 1}} {{:helper.link('Override Programming', 'script', {'malfhack' : 1})}} - {{else malfStatus == 2}} + {{else data.malfStatus == 2}} {{:helper.link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1})}} - {{else malfStatus == 3}} + {{else data.malfStatus == 3}} {{:helper.link('Return to Main Core', 'arrowreturn-1-w', {'deoccupyapc' : 1})}} - {{else malfStatus == 4}} + {{else data.malfStatus == 4}} {{:helper.link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1}, 'linkOff')}} {{/if}}

From 689a96f7ee51d886d3044af72ec5e6eba5a588bd Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 01:09:44 +0200 Subject: [PATCH 08/21] GC fixes --- code/modules/power/cable.dm | 2 +- code/modules/power/power.dm | 4 ++-- code/modules/power/tracker.dm | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 33f4a475e86..574a3445ce0 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -78,7 +78,7 @@ By design, d1 is the smallest direction and d2 is the highest if(powernet) cut_cable_from_powernet() // update the powernets cable_list -= src //remove it from global cable list - ..() // then go ahead and delete the cable + return ..() // then go ahead and delete the cable /////////////////////////////////// // General procedures diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 5e7e935e1f7..d4aad807b51 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -15,9 +15,9 @@ idle_power_usage = 0 active_power_usage = 0 -/obj/machinery/power/Del() +/obj/machinery/power/Destroy() disconnect_from_network() - ..() + return ..() /////////////////////////////// // General procedures diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 9fc6765e6fa..8b4f5d32aee 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -23,7 +23,7 @@ /obj/machinery/power/tracker/Destroy() unset_control() //remove from control computer - ..() + return ..() //set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST /obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) @@ -70,7 +70,7 @@ S.give_glass() playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.") - del(src) // qdel + qdel(src) // qdel return ..() From 008f35d87b458aa0a45dfa1519e0e6ecbe8641e2 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 01:45:51 +0200 Subject: [PATCH 09/21] When masks are adjusted, allow CPR --- code/modules/mob/living/carbon/human/human_attackhand.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index f6bc3b36f1d..8a5e18419d6 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -65,11 +65,11 @@ return 1 // if(M.health < -75) return 0 - if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH))) - M << "\blue Remove your mask!" + if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH) && !mask_adjusted)) + M << "Remove your mask!" return 0 - if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH))) - M << "\blue Remove his mask!" + if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH) && !mask_adjusted)) + M << "Remove his mask!" return 0 var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human() From 70ed700e24b9a11acf38918c8eaa43a3e66c7f27 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 01:56:17 +0200 Subject: [PATCH 10/21] Make sure mask is selected --- code/modules/mob/living/carbon/human/human_attackhand.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 8a5e18419d6..a8d9d90958b 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -65,10 +65,10 @@ return 1 // if(M.health < -75) return 0 - if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH) && !mask_adjusted)) + if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH) && !M.wear_mask.mask_adjusted)) M << "Remove your mask!" return 0 - if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH) && !mask_adjusted)) + if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH) && !wear_mask.mask_adjusted)) M << "Remove his mask!" return 0 From 6d1a2cf6d3ecf9cabcf560248f804bf0ceb26d1f Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 19:02:08 +0200 Subject: [PATCH 11/21] Make sure pipes don't runtime --- code/ATMOSPHERICS/atmospherics.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 0887540ef36..3f50bfd797b 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -10,6 +10,9 @@ Pipelines + Other Objects -> Pipe network */ /obj/machinery/atmospherics + + auto_init = 0 + anchored = 1 idle_power_usage = 0 active_power_usage = 0 From 5e2b71a673181834d7086d3c52084d31709713b1 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 19:58:08 +0200 Subject: [PATCH 12/21] Update power monitoring console names --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- _maps/map_files/cyberiad/z3.dmm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 74f1507dc4c..61804f37437 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5232,7 +5232,7 @@ "bWF" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bWG" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bWH" = (/turf/simulated/floor/airless,/area/toxins/test_area) -"bWI" = (/obj/machinery/computer/monitor,/obj/structure/cable,/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom) +"bWI" = (/obj/structure/cable,/obj/machinery/computer/monitor{name = "Grid Power Monitoring Computer"},/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom) "bWJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bWK" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bWL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_dock_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/quartermaster/miningdock) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 37783144a8f..2a50f637ad7 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -222,7 +222,7 @@ "en" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eo" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ep" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"eq" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"eq" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "Telecoms Power Monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "er" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "8"},/turf/simulated/shuttle/plating,/area/shuttle/derelict/ship/start) "es" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/shuttle/plating,/area/shuttle/derelict/ship/start) "et" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) From 0a4a2f34cf44085223ccf1f550bd8f04664a37ab Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 21:41:34 +0200 Subject: [PATCH 13/21] Map updates --- _maps/map_files/cyberiad/cyberiad.dmm | 8 +- _maps/map_files/cyberiad/z3.dmm | 35 ++++---- _maps/map_files/cyberiad/z4.dmm | 104 ++++++++++++----------- code/game/machinery/telecomms/presets.dm | 10 ++- code/modules/power/solar.dm | 14 ++- 5 files changed, 100 insertions(+), 71 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 61804f37437..877376d69d8 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -4531,7 +4531,7 @@ "bJg" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/backpack/medic,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/weapon/storage/toolbox/emergency,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay2) "bJh" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/engine/hardsuitstorage) "bJi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medical Supplies"; req_access_txt = "5"},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/chemistry) -"bJj" = (/obj/machinery/smartfridge/secure/medbay,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bJj" = (/obj/machinery/smartfridge/medbay,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bJk" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2) "bJl" = (/turf/simulated/wall,/area/medical/medbay3) "bJm" = (/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay3) @@ -4948,7 +4948,7 @@ "bRh" = (/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen{name = "Canister: \[O2] (CRYO)"},/turf/simulated/floor,/area/medical/cryo) "bRi" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 1},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) "bRj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/genetics_cloning) -"bRk" = (/obj/machinery/clonepod{biomass = 150},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) +"bRk" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bRl" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bRm" = (/obj/machinery/dna_scannernew,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bRn" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) @@ -5931,6 +5931,7 @@ "ckc" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/incinerator) "ckd" = (/obj/structure/closet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cke" = (/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Virology Lab West"; dir = 4; network = list("SS13")},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) +"ckf" = (/obj/machinery/power/smes{charge = 5e+006; input_attempt = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor,/area/aisat/maintenance) "ckg" = (/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) "ckh" = (/obj/machinery/camera{c_tag = "Secure Tech Storage"; dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/storage/tech) "cki" = (/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) @@ -7792,7 +7793,6 @@ "cYB" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/space,/area/space) "cYC" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "MiniSat Maintenance APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/aisat/maintenance) "cYD" = (/obj/machinery/atmospherics/binary/pump/on{name = "Air Out"},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor,/area/aisat/maintenance) -"cYE" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor,/area/aisat/maintenance) "cYF" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor,/area/aisat/maintenance) "cYG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor,/area/aisat/maintenance) "cYH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/aisat) @@ -8197,7 +8197,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscYpcXtcXtcXScXAcXAcXAcXAcYqcXAcXAcXAcXAcXScXtcXtcYrcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscXccWEaaaaaaaaacYscYscYscYtcYscYscYsaaaaaaaaacWscXkcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscXccWEaaaaabaaacYucYvcYwcYxcYycYzcYuaaaaaaaaacWscXkcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscXccYAcWHcYBcYBcYucYCcYDcYEcYFcYGcYucWHcWHcWHcYccXkcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscXccYAcWHcYBcYBcYucYCcYDckfcYFcYGcYucWHcWHcWHcYccXkcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczcWscYHcWQcWQcWQcWQcYIcYJcYKcYLcYMcYNcYOcYPcWZcWZcWZcYQcWEaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFaaacWFcWFcWFcWFcWFaaacWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaacXecXecXecXecXecYucYRcYScYTcYUcYVcYWcYXcXecXecYYcYYaaaaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWFcWFcWFcWFcWFaaacWFcWFcWFcWFcWFaaacWFcWFcWFcWFcWFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczaczaczaczaczcYucYZcZacZbcZccZdcYuaczaczaczaczaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 2a50f637ad7..b9a60cd9b2b 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -110,10 +110,10 @@ "cf" = (/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "cg" = (/turf/space,/area/turret_protected/tcomsat) "ch" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera{c_tag = "Telecomms West Wing North"; dir = 2; network = list("Telecomms")},/turf/space,/area/turret_protected/tcomsat) -"ci" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ci" = (/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "cj" = (/obj/machinery/power/apc{dir = 1; name = "Telecoms Sat. APC"; pixel_x = 1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 6; level = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "ck" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) -"cl" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cl" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "cm" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "cn" = (/obj/item/weapon/coin/clown,/turf/simulated/floor/engine,/area/tcommsat/computer) "co" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor,/area/tcommsat/computer) @@ -176,7 +176,7 @@ "dt" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "du" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/tcommsat/computer) "dv" = (/obj/machinery/vending/cola,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcommsat/computer) -"dw" = (/obj/item/weapon/cigbutt,/obj/machinery/light,/turf/simulated/floor,/area/tcommsat/computer) +"dw" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/tcommsat/computer) "dx" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) "dy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) "dz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/computer) @@ -222,7 +222,7 @@ "en" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eo" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ep" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"eq" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "Telecoms Power Monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"eq" = (/obj/item/weapon/cigbutt,/obj/machinery/light,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/tcommsat/computer) "er" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "8"},/turf/simulated/shuttle/plating,/area/shuttle/derelict/ship/start) "es" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/shuttle/plating,/area/shuttle/derelict/ship/start) "et" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) @@ -280,13 +280,16 @@ "ft" = (/obj/machinery/door_control{id = "whiteshippoddoor"; name = "Pod Door Control"; pixel_y = -24},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/derelict/ship/start) "fu" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat) "fv" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/turret_protected/tcomsat) -"fw" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/turret_protected/tcomsat) +"fw" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fx" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fy" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fz" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fB" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "fC" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) +"fD" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"fE" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/turret_protected/tcomsat) +"fF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "fG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fH" = (/obj/machinery/camera{c_tag = "Telecomms Server Room South"; dir = 1; network = list("Telecomms")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light,/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -299,7 +302,7 @@ "fP" = (/obj/machinery/power/apc{dir = 1; name = "Telecoms Sat. Foyer APC"; pixel_x = 1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "fQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) "fR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AI's from interacting with this device."; icon_state = "control_kill"; lethal = 1; name = "Telecomms Lethal Turret Control"; pixel_y = 30; req_access = list(61)},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Telecomms Foyer"; dir = 2; network = list("Telecomms")},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/turret_protected/tcomfoyer) -"fS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) +"fS" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "Telecoms Power Monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "fT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) "fU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/obj/machinery/porta_turret{dir = 8},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/turret_protected/tcomfoyer) "fV" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat) @@ -329,6 +332,7 @@ "gt" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance) "gu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) "gv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access_txt = "61"},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"gw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Telecomms Power Room West"; dir = 1; network = list("Telecomms")},/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/tcommsat/entrance) "gx" = (/obj/machinery/power/smes/magical,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/tcommsat/entrance) "gy" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) "gz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) @@ -337,9 +341,9 @@ "gC" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AI's from interacting with this device."; name = "Telecoms Foyer Turret Control"; pixel_y = 30; req_access = list(61)},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/entrance) "gD" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) "gE" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/tcommsat/entrance) +"gF" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) "gH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/entrance) "gI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/tcommsat/entrance) -"gJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Telecomms Power Room West"; dir = 1; network = list("Telecomms")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance) "gK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/tcommsat/entrance) "gL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/tcommsat/entrance) "gM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/tcommsat/entrance) @@ -371,7 +375,6 @@ "hm" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor,/area/tcommsat/entrance) "hn" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/entrance) "ho" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless,/area/space) -"hp" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) "hq" = (/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/tcommsat/entrance) "hr" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/machinery/camera{c_tag = "Telecomms Entrance South"; dir = 1; network = list("Telecomms")},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) "hs" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/tcommsat/entrance) @@ -521,35 +524,35 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWccccccccccccccccccccccccccccccccccccccccccccccccccccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWcccccdcdcdcdcdcdcdcdcdcccccccccccccccccccececececececececcbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccccdcfcgchcicjckclcmcdcececececececececncecocpcqcrcsctceccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcucvcwcxcyczcAcectcBcCcDctcEcecFcecGctctctctctceccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcucvcwcxcyczcAcectcBcCcDdwcEcecFcecGctctctctctceccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHcIcJcxcKcLcMcecNctcOctctcPcecFcecQctcRctctctceccccaUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcgcScTcUcVcWcXcYcZdacRctdbdcceddcededfctdgdhdiceccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHdjdkdldmdmdmdndodpdqdrdsdtdtdtcedudvctdwdxdydzdAdAdBdCdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHdjdkdldmdmdmdndodpdqdrdsdtdtdtcedudvcteqdxdydzdAdAdBdCdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbZbWbWbWbWbWbWbWbWbWbWbWcccdcgcfcgcHdEdFdGdHdHdHcedIdJdKctdLdMdNdtcecedOdPcececececcccbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbZbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUbWcccdcfdQcfdRdEcAdtdtdtdtdtaBaRaLaRaSdWdXdYdtdtdZeaebcfdQcfcdccbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaaaabWcccdcgcfcgcHeceddteeefeeegeheiejeeeeekeleeeedtdZeacMcgcfcgcdccbWbWaaaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaaaabWcccdcgcfcgcHeceddtfwefeeegeheiejeeeeekeleefDdtdZeacMcgcfcgcdccbWbWaaaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaabYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaabWcccdcgcfcgcHemendteeeleleleoelepeleleoeleleedtdZeacMaZaWbocdccccbWaUbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaUbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaabXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbYaabWcccdcgcfcgcHeteudteeeveweleoelexeleleoeyezeedtdZeacMbxeBeCeDcdccbWaabYbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaabYeEbWcccdcgcfcgcHeFeGdteeeleleleoeHexeIeleoeleleedteJeKeLbxeNeOePcdccbWeQbYaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaabYeRcbcccdcfcfcfdReSeTdteUeVeWeXekeeeYeeeeeZfafbfcdtfdfefffgeOfhficdcccbeRbYaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaabYaabWcccdcgcfcgcHeScMdteefjfkeleoflexfmeleofnfoeedtcHeFfpdSeOfrfscdccbWaabYaaaaaaaaaaaUaaaaaaaaaUaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaabXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbYaabWcccdcgcfcgcHeFcMdteeeleleleoelexeleleoeleleedtcHeFcMdSfufvfwcdccbWaabYbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaabXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbYaabWcccdcgcfcgcHeFcMdteeeleleleoelexeleleoeleleedtcHeFcMdSfufvfEcdccbWaabYbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaabYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaabWcccdcgcfcgcHdEcMdteefxfyfzfAelepeleleofBfCeedtcHeFcMdSdSdScdccccbWaUbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaUbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaaaabWcccdcgcfcgcHdEcMdteeeeeefGeeeefHeeeefIeeeeeedtcHeFcMcgcfcgcdccbWbWaaaUbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXbXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWcccdcfdQcfdReFcAdtdtdtdtdtdtdtfJdtdtdtdtdtdtdtdReFcAcfdQcfcdccbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbZbWbWbWbWbWbWbWbWcccdcgcfcgcHfKfLfMcXcXfNfOfPfQfRfSfTfUfNcXcXfVfWeFcMcgcfcgcdccbWbWbWbWbWbWbWbZbWbWbWbWbWbWbWbWbWbWbZbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbZbWbWbWbWbWbWbWbWcccdcgcfcgcHfKfLfMcXcXfNfOfPfQfRfFfTfUfNcXcXfVfWeFcMcgcfcgcdccbWbWbWbWbWbWbWbZbWbWbWbWbWbWbWbWbWbWbZbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHfXfYfYfYfYfZgagbgcgdgegfggghfYfffYfYgicMcgcfgjcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdgkcfcgcgdHdHgldHdHfNgmgngogpgqgrgsfNdHdHdHdHdHcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcgcgcgcfcggtfNfNfNgugvfNfNfNfNgtcgcgcgcgcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEeqdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccccdcfcgcgcgcgcgcdgtgHgIgJgKgLgMgNgMgOgtcdcgcgcgcgcgcfcdccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEfSdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccccdcfcgcgcgcgcgcdgtgHgIgwgKgLgMgNgMgOgtcdcgcgcgcgcgcfcdccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWcccccdcdcdcdcdcdcdgtgtgtgtgPgQgRgtgtgtgtcdcdcdcdcdcdcdccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWccccccccccccccccccccccgtgSgTgUgtccccccccccccccccccccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWgtgtgVgWgXgtgtbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbYbYbWbWgtgtgYgZhagMhbgtgtbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYgtgthchdhehfgEhfhfhggtbWaUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYhhhihjhkhlhfhfhmhfhfhngtbWaUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYhogRgtgthphqhfhfhfhfhggtbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYhogRgtgtgFhqhfhfhfhfhggtbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbYbYbWbWgtgthrhshshshtgtgtbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWgtgthuhvhwgtgtbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWgtgtgtgtgtbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index 9fa62f5aeb2..051608af944 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -36,10 +36,10 @@ "aJ" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/space) "aK" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk10"; icon_state = "catwalk10"},/area/space) "aL" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/space) -"aM" = (/obj/structure/grille,/obj/structure/girder/reinforced,/turf/simulated/floor/plating/airless,/area/engiestation/solars) -"aN" = (/obj/machinery/power/solar/fake,/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) -"aO" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/engiestation/solars) -"aP" = (/turf/simulated/floor/plating/airless,/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/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/engiestation/solars) +"aM" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk9"; icon_state = "catwalk9"},/area/engiestation/solars) +"aN" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/engiestation/solars) +"aO" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk14"; icon_state = "catwalk14"},/area/engiestation/solars) +"aP" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "aQ" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aR" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/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/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aS" = (/turf/simulated/wall/r_wall,/area/engiestation) @@ -53,7 +53,7 @@ "ba" = (/turf/simulated/floor/airless{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/constructionsite/ai) "bb" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) "bc" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/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/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) -"bd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engiestation) +"bd" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk11"; icon_state = "catwalk11"},/area/engiestation/solars) "be" = (/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bf" = (/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bg" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/space) @@ -68,58 +68,60 @@ "bp" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bq" = (/turf/simulated/wall/r_wall,/area/space) "br" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) -"bs" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"bt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"bu" = (/obj/machinery/telecomms/relay/preset/ruskie,/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) -"bv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"bw" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) +"bs" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"bt" = (/turf/simulated/floor/plating/airless,/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/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) +"bu" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk10"; icon_state = "catwalk10"},/area/engiestation/solars) +"bv" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) +"bw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bx" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{icon_state = "delivery"},/area/engiestation) "by" = (/turf/simulated/floor,/area/engiestation) "bz" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/engiestation) "bA" = (/obj/machinery/driver_button{id_tag = "constructiondriver0"; name = "Construction Driver #0"; pixel_x = 25},/obj/structure/engineeringcart,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engiestation) "bB" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/ai) -"bC" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/engiestation/solars) +"bC" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "bD" = (/turf/simulated/floor/plating/airless,/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/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "bE" = (/turf/simulated/floor/plating/airless,/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/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) "bF" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plating,/area/exploration/methlab) -"bG" = (/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/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"bH" = (/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/engiestation) -"bI" = (/obj/machinery/power/terminal,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engiestation) -"bJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engiestation) -"bK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"bG" = (/obj/machinery/light{dir = 1},/obj/machinery/power/solar_control{name = "Engineering Outpost Solar Control"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) +"bH" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"bI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/engiestation) +"bJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"bK" = (/turf/simulated/floor/plating/airless,/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/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "bL" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/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/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/engiestation/solars) "bM" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/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/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) -"bN" = (/turf/simulated/floor/plating/airless,/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/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) +"bN" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/telecomms/relay/preset/engioutpost,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bO" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "delivery"},/area/engiestation) "bP" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engiestation) "bQ" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver0"; name = "construction driver #0"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "bR" = (/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{icon_state = "warnplate"; dir = 4},/area/engiestation) -"bS" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver0"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/engiestation) +"bS" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver0"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "bT" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai) -"bU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"bU" = (/obj/structure/table,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/cell_charger,/turf/simulated/floor,/area/engiestation) "bV" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation) -"bW" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"bX" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) -"bY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"bW" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) +"bX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"bY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engiestation) "bZ" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor,/area/engiestation) "ca" = (/obj/machinery/driver_button{id_tag = "constructiondriver1"; name = "Construction Driver #1"; pixel_x = 25},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/engiestation) -"cb" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/engiestation/solars) +"cb" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) "cc" = (/turf/simulated/floor/plating/airless,/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"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "cd" = (/turf/simulated/floor/plating/airless,/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"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) +"ce" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engiestation) "cf" = (/turf/simulated/floor/plating,/area/engiestation) "cg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engiestation) "ch" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engiestation) -"ci" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"ci" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cj" = (/turf/simulated/floor/plating/airless,/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/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/engiestation/solars) "ck" = (/turf/simulated/floor/plating/airless,/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/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) -"cl" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) +"cl" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/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{icon_state = "dark"},/area/engiestation) "cm" = (/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/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},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/wood{amount = 30},/obj/structure/table,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/simulated/floor,/area/engiestation) "cn" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver1"; name = "construction driver #1"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) -"co" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver1"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/engiestation) +"co" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver1"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) +"cp" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "cq" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "Engineering Outpost APC"; pixel_y = -24},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"cr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/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{icon_state = "dark"},/area/engiestation) -"cs" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) -"ct" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{amount = 30},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"cr" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"cs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"ct" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cu" = (/obj/machinery/vending/tool,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engiestation) "cv" = (/obj/machinery/driver_button{id_tag = "constructiondriver2"; name = "Construction Driver #2"; pixel_x = 25},/turf/simulated/floor,/area/engiestation) "cw" = (/obj/structure/lattice,/turf/space,/area/constructionsite/maintenance) @@ -130,9 +132,11 @@ "cB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cC" = (/obj/machinery/vending/engivend,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engiestation) "cD" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver2"; name = "construction driver #2"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) -"cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/engiestation) +"cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "cF" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) +"cG" = (/obj/machinery/power/smes{input_attempt = 1; input_level = 40000; inputting = 1; output_level = 10000},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cH" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engiestation) +"cI" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) "cJ" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "cK" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/structure/sign/singulo{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "cL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/meatballsoup,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/engiestation) @@ -141,7 +145,7 @@ "cO" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engiestation) "cP" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/engiestation) "cQ" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engiestation) -"cR" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/engiestation) +"cR" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk5"; icon_state = "catwalk5"},/area/engiestation/solars) "cS" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor,/area/engiestation) "cT" = (/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/engiestation) "cU" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor,/area/engiestation) @@ -170,11 +174,13 @@ "dt" = (/obj/structure/lattice,/turf/space,/area/constructionsite/hallway/aft) "du" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/engiestation) "dv" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/engiestation) +"dw" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) "dx" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "warning"},/area/engiestation) "dy" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/engiestation) "dA" = (/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "wood"},/area/engiestation) "dB" = (/turf/simulated/floor{icon_state = "wood"},/area/engiestation) "dC" = (/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/engiestation) +"dD" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "dE" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/space) "dF" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) "dG" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/engiestation) @@ -190,6 +196,7 @@ "dQ" = (/obj/machinery/door/airlock{name = "Restroom"; req_access_txt = "0"},/turf/simulated/floor,/area/engiestation) "dR" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engiestation) "dS" = (/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/engiestation) +"dT" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk7"; icon_state = "catwalk7"},/area/engiestation/solars) "dU" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor{icon_state = "wood"},/area/engiestation) "dV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/engiestation) "dW" = (/obj/structure/table,/obj/item/toy/minimeteor,/obj/item/toy/carpplushie,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/engiestation) @@ -208,6 +215,7 @@ "ej" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/engiestation) "ek" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engiestation) "el" = (/obj/structure/mirror,/turf/simulated/wall,/area/engiestation) +"em" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) "en" = (/obj/structure/table/woodentable,/obj/item/ashtray/plastic,/obj/structure/sign/poster/legit{pixel_y = -32},/turf/simulated/floor{icon_state = "wood"},/area/engiestation) "eo" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/engiestation) "ep" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor{icon_state = "wood"},/area/engiestation) @@ -221,7 +229,7 @@ "ex" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/engiestation) "ey" = (/turf/simulated/floor{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/engiestation) "ez" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/paint/remover,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor,/area/engiestation) -"eA" = (/obj/item/weapon/vending_refill/coffee,/obj/item/weapon/vending_refill/cola,/obj/item/weapon/vending_refill/snack,/obj/structure/table,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/engiestation) +"eA" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "eB" = (/obj/structure/dispenser,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "delivery"},/area/engiestation) "eC" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/space) "eD" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor,/area/engiestation) @@ -425,21 +433,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaFaFaFaDaFaFaFaDaDaDaFaFaDaDaDaDaDaDaEaEaEaEacaeaeaeapaoaoanabaaabaaabaaabacacacacacacaeapaoaoaoapaeacacacacacacabaaabaaabaaabanauaoapaeaeaeacaEaEaEaEaFaEaFababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababaDaHaHaHaHacacacaeapaoaoanabaaabaaabaaabacaeaeaeaeaeaeapaoaoaoapaeaeaeaeaeaeacabaaabaaabaaabanauaoapaeacacacaDaDaDaDaEaEaEaaabaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababacaeapaoaoanabababababababacaeaeaeaeapapapaoaoaoapapapaeaeaeaeacabababababababanauauapaeacaEaEaEaEaEaEaEaEaEaEaEaFaEaFaFaFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavabaaaaaaaaaaabavavavabaaaaaaaaaaaaaaaaaaabavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabaaabaaabaaabacaeapapapapauauaoaoaoauauapapapapaeacabaaabaaabaaabanauauapaeacaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaIaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabaaabaaabababapaqapauauauauauaoaoaoauauauauauapaqapabababaaabaaabanaoauapaeacaFaEaFaEaFaEaFaEaFaFaEaEaEaFaFaFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLababaaaaaaaMaMaMaMaMaMaMaaaaaaababaaaaaaaaaLabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanababababababapapauauauaoaoaoaoaoaoaoaoaoaoauauauauapapababababababanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabababaaabaMaNaOaNaPaNaMaaaaababaaaaaaaaaaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaababababaMaNaQaNaRaNaMaaabababaSaSaSaSaSaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaTapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaaaabababaMaNaQaNaRaNaMabababaaaUaVaWaXaUaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaYaZbaaZaYapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavaLaaababababaMaNbbaNbcaNaMababababbdbebfbfbdbgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaYaZbaaZaYababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaIbhaMaMaMaMaMbibkbjbibjbkbiaMaMaMaMbnbobpbobobqabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababalabalalababalababalacaeapaoaoanabacaeaeapauaoaoaoapapabababaYaZbaaZaYabababapapauaoauauapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabaMaNaNaNaNbkbsbtbubvbwbkaNaNaNaNbnbxbybzbAaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaYaYaYbBaYaYaYabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaaMbCbDbDbEblbGbHbIbJbKblbLbMbMbNbnbObybybPbQbRbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalalalalalacaeapaoaoapaeaeaeapauauaoaoapapababaYaYbTbTaZbTbTaYaYababapapauaoauauapaeaeaeapauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaaMaNaNaNaNbibUbVbWbXbYbiaNaNaNaNbnbZbybycaboboaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaMcbcccccdblbvcfcgchciblcjckckclbncmbybybPcnbRcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalabalalalalalalalalalalalalalaeaeaeaeaeaeaeaeaeaeaeaeapaoaoauauauauauauaoauauapaZaZaZaYbTbTaZbaaZbTbTaYaZaZaZapauauaoauauauauaoauauaoapaeaealalalalalalalalalalalalaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavaLabaMaNaNaNaNbkcqcrcsbfctbkaNaNaNaNbncubybycvboboaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcwaecwaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauaucxbababacyaZaZaZbaaZaZaZczbababacAaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaIbhaSbobobobobobobobobocBbobobobobobobocCbybybPcDbRcEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababalalalalalalalabalabalalalalalaeaeaecwaeaeaeaeaeaeaeaeapaoaoauaoaoaoaoaoaoaoaoapaZaZaZaYbTbTaZbaaZbTbTaYcFcFcFapauauaoauauauauauauaoaoapaeaealalalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabaUcHbrcJcKcLaUcMcNcObycPcQcRbybycScQcTcUcVcWaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcXapapapcYaucYauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabaaabaaabaaabacaeapapapapauauaoaoaoauauapapapapaeacabaaabaaabaaabanauauapaeacaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabababababababaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabaaabaaabababapaqapauauauauauaoaoaoauauauauauapaqapabababaaabaaabanaoauapaeacaFaEaFaEaFaEaFaEaFaFaEaEaEaFaFaFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIaJaJaJaJaOaPaOaPaOaPaOaJaJaJaJaJaJaJaJaJaJaKabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanababababababapapauauauaoaoaoaoaoaoaoaoaoaoauauauauapapababababababanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLababaaabbvbHbCbsbKcbbvaaaaababaaaaaaaaaaaaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLababababbvbHaQbHaRcbbvaaabababaaaSaSaSaSaSaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaTapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaabababbvbHaQbHaRcbbvabababaaaaaUaVaWaXaUaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaYaZbaaZaYapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabababaNaMbHbbbHbccbcRbuabababaaaUbebfbfaUbgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaYaZbaaZaYababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcRaPaPaPaMbibkbjbibjbkbicRaPaPaPbubnbobpbobobqabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababalabalalababalababalacaeapaoaoanabacaeaeapauaoaoaoapapabababaYaZbaaZaYabababapapauaoauauapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbvdwdwdwdwbkbNbwbGbwbJbkdwdwdwdwbvbnbxbybzbAaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaYaYaYbBaYaYaYabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTdDbDbDbEblbXbIcebYciblbLbMbMbtbdbnbObybybPbQbRbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalalalalalacaeapaoaoapaeaeaeapauauaoaoapapababaYaYbTbTaZbTbTaYaYababapapauaoauauapaeaeaeapauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvemememembibwbVcGcpbwbiemememembvbnbZbybycaboboaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdTeAcccccdblcrcfcgchcsblcjckckbWbdbncmbybybPcnbRcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalabalalalalalalalalalalalalalaeaeaeaeaeaeaeaeaeaeaeaeapaoaoauauauauauauaoauauapaZaZaZaYbTbTaZbaaZbTbTaYaZaZaZapauauaoauauauauaoauauaoapaeaealalalalalalalalalalalalaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaIaMemememembkcqctclbebfbkememememcIbncubybycvboboaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcwaecwaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauaucxbababacyaZaZaZbaaZaZaZczbababacAaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbhaSbobobobobobobobobocBbobobobobobobocCbybybPcDbRcEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababalalalalalalalabalabalalalalalaeaeaecwaeaeaeaeaeaeaeaeapaoaoauaoaoaoaoaoaoaoaoapaZaZaZaYbTbTaZbaaZbTbTaYcFcFcFapauauaoauauauauauauaoaoapaeaealalalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabaUcHbrcJcKcLaUcMcNcObycPcQcSbybycScQcTcUcVcWaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcXapapapcYaucYauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdabybydbdcaUdddddebydfboboboboboaSaSaSaSaSbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaccwdgdhdhdgaeaeaedgdididididgdgababaYaYbTbTaZbTbTaYaYababdgdgdididididgaeaeaedgdhdhdiaeacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdjbybydbdkaUdldldmbybyaUdndodpdqaUabdsdsavabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdhdgacacaedgdgdidtdidtdgabababaYaYaYbBaYaYaYabababdgdididhdidgdgaeacacdgdhdhdgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdubybybydvaUdxdxdybybyaUdAdBdCdCaUabaaaadEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdhdFabacaeaedgdididididgdgabababaYaZbaaZaYabababdgdgdididhdidgaeaeacabdFdhdhdgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -448,7 +456,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaSaS aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaaaabdXdYdZeaebboecbybybyaUdUdBdCdCaUababaaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdidFabacaeaeaeeddtdidtdidtdidhdgdgdgeedgdgdgdididhdhdhdidiefaeaeaeacabdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLaaaaegeheiejeaekeldRcTbybyaUeneoepdNaUaaababaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaccwdgdhdidFabacacacacdgdgdididididhdhdhdhdhdhdhdhdhdhdhdhdhdididgdgacacacacabdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaveqaJaJeraSeseteuevbobobocQcQboboboboaSaSaaaaabaLabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdidFababababababdgdgdtdidtdidhdhdhdhdhdhdhdhdhdhdhdididgdgababababababdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavababavaSaSaSaSaSaSewboexeyboezeAeBaSeCaJaJaJbhavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdidFabaaabaaabababdgefdgdidhdhdhdhdhdhdhdhdhdhdhdhdgefdgabababaaabaaabdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavababavaSaSaSaSaSaSewboexeyboezbUeBaSeCaJaJaJbhavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdidFabaaabaaabababdgefdgdidhdhdhdhdhdhdhdhdhdhdhdhdgefdgabababaaabaaabdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabdsdsdsaSaSboeDeEcQbybyeFaSaaaaaaabavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaccwdgdhdhdFabaaabaaabaaabacaedgdgdgdgdhdhdhdhdhdhdhdgdgdgdgaeacabaaabaaabaaabdFdhdhdgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbobyeGboeHeIeJaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdidFabababababababacaeaeaeaedgdgdgdhdhdhdgdgdgaeaeaeaeacabababababababdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababboeKeLaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaagNgNgNgNgNgNgNaaaaaaaaaaaaaagNgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdididFabaaabaaabaaabacaeaeaeaeaeaedgdhdhdhdgaeaeaeaeaeaeacabaaabaaabaaabdFdhdidgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 5d14fc2f9bc..2c530335a10 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -23,6 +23,12 @@ hide = 1 toggled = 0 autolinkers = list("r_relay") + +/obj/machinery/telecomms/relay/preset/engioutpost + id = "Engineering Outpost" + hide = 1 + toggled = 0 + autolinkers = list("e_relay") /obj/machinery/telecomms/relay/preset/centcom id = "Centcom Relay" @@ -39,7 +45,7 @@ /obj/machinery/telecomms/hub/preset id = "Hub" network = "tcommsat" - autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "science", "medical", + autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "e_relay", "science", "medical", "supply", "service", "common", "command", "engineering", "security", "receiverA", "receiverB", "broadcasterA", "broadcasterB") @@ -47,7 +53,7 @@ id = "CentComm Hub" network = "tcommsat" use_power = 0 - autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", + autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", "e_relay", "centcomm", "receiverCent", "broadcasterCent") //Receivers diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 33b4dddea2e..e6305f8374f 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -347,7 +347,8 @@ /obj/machinery/power/solar_control/initialize() ..() - if(!powernet) return + if(!powernet) + return set_panels(cdir) /obj/machinery/power/solar_control/update_icon() @@ -522,7 +523,18 @@ if (prob(75)) broken() src.density = 0 + +// Used for mapping in solar array which automatically starts itself (telecomms, for example) +/obj/machinery/power/solar_control/autostart + track = 2 // Auto tracking mode +/obj/machinery/power/solar_control/autostart/initialize() + ..() + spawn(500) // Make sure the powernet has initialized + src.search_for_connected() + if(connected_tracker && track == 2) + connected_tracker.set_angle(sun.angle) + src.set_panels(cdir) // // MISC From 38b313a4544fade16877462e34467d42217c67a0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 22:25:32 +0200 Subject: [PATCH 14/21] Engineering outpost solar update --- _maps/map_files/cyberiad/z4.dmm | 4 ++-- code/modules/power/power.dm | 2 +- code/modules/power/solar.dm | 34 ++++++++++++++------------------- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index 051608af944..e4ba6112ae9 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -82,7 +82,7 @@ "bD" = (/turf/simulated/floor/plating/airless,/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/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "bE" = (/turf/simulated/floor/plating/airless,/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/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) "bF" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plating,/area/exploration/methlab) -"bG" = (/obj/machinery/light{dir = 1},/obj/machinery/power/solar_control{name = "Engineering Outpost Solar Control"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) +"bG" = (/obj/machinery/light{dir = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/solar_control/autostart{name = "Engineering Outpost Solar Control"},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) "bH" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) "bI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/engiestation) "bJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) @@ -134,7 +134,7 @@ "cD" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver2"; name = "construction driver #2"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "cF" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) -"cG" = (/obj/machinery/power/smes{input_attempt = 1; input_level = 40000; inputting = 1; output_level = 10000},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"cG" = (/obj/machinery/power/smes{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cH" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engiestation) "cI" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) "cJ" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index d4aad807b51..af09f71e271 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -222,7 +222,7 @@ // rebuild all power networks from scratch - only called at world creation or by the admin verb /proc/makepowernets() for(var/datum/powernet/PN in powernets) - del(PN) + qdel(PN) powernets.Cut() for(var/obj/structure/cable/PC in cable_list) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index e6305f8374f..6935bd7777d 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -290,11 +290,24 @@ var/track = 0 // 0= off 1=timed 2=auto (tracker) var/trackrate = 600 // 300-900 seconds var/nexttime = 0 // time for a panel to rotate of 1? in manual tracking + var/autostart = 0 // Automatically search for connected devices var/obj/machinery/power/tracker/connected_tracker = null var/list/connected_panels = list() + +// Used for mapping in solar array which automatically starts itself (telecomms, for example) +/obj/machinery/power/solar_control/autostart + track = 2 // Auto tracking mode + autostart = 1 // Automatically start /obj/machinery/power/solar_control/initialize() - connect_to_network() + ..() + if(!powernet) + return + if(autostart) + src.search_for_connected() + if(connected_tracker && track == 2) + connected_tracker.set_angle(sun.angle) + set_panels(cdir) /obj/machinery/power/solar_control/Destroy() for(var/obj/machinery/power/solar/M in connected_panels) @@ -344,13 +357,6 @@ set_panels(cdir) updateDialog() - -/obj/machinery/power/solar_control/initialize() - ..() - if(!powernet) - return - set_panels(cdir) - /obj/machinery/power/solar_control/update_icon() overlays.Cut() if(stat & NOPOWER) @@ -523,18 +529,6 @@ if (prob(75)) broken() src.density = 0 - -// Used for mapping in solar array which automatically starts itself (telecomms, for example) -/obj/machinery/power/solar_control/autostart - track = 2 // Auto tracking mode - -/obj/machinery/power/solar_control/autostart/initialize() - ..() - spawn(500) // Make sure the powernet has initialized - src.search_for_connected() - if(connected_tracker && track == 2) - connected_tracker.set_angle(sun.angle) - src.set_panels(cdir) // // MISC From 3a9dc7b063485e5e39ea9645b42b41ee12c36084 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 22:50:12 +0200 Subject: [PATCH 15/21] Fix all away missions --- _maps/map_files/RandomZLevels/academy.dmm | 12 +++---- .../RandomZLevels/blackmarketpackers.dmm | 12 +++---- _maps/map_files/RandomZLevels/centcomAway.dmm | 36 +++++++++---------- _maps/map_files/RandomZLevels/clownplanet.dmm | 4 +-- _maps/map_files/RandomZLevels/example.dmm | 8 ++--- .../map_files/RandomZLevels/moonoutpost19.dmm | 4 +-- _maps/map_files/RandomZLevels/spacebattle.dmm | 22 ++++++------ _maps/map_files/RandomZLevels/spacehotel.dmm | 12 +++---- .../RandomZLevels/stationCollision.dmm | 8 ++--- .../RandomZLevels/undergroundoutpost45.dmm | 4 +-- _maps/map_files/RandomZLevels/wildwest.dmm | 2 +- 11 files changed, 62 insertions(+), 62 deletions(-) diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index b3ab2b62556..d7c1987d2b5 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -69,10 +69,10 @@ "bq" = (/obj/machinery/door/airlock/gold,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster) "br" = (/turf/simulated/floor,/area/awaymission/academy/headmaster) "bs" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/classrooms) -"bt" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "AcademyAuto"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms) -"bu" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy/classrooms) -"bv" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "AcademyAuto"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) -"bw" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/academy/classrooms) +"bt" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "AcademyAuto"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms) +"bu" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy/classrooms) +"bv" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "AcademyAuto"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) +"bw" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/academy/classrooms) "bx" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/headmaster) "by" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/academy/headmaster) "bz" = (/turf/simulated/floor,/area/awaymission/academy/classrooms) @@ -175,7 +175,7 @@ "ds" = (/obj/structure/stool/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "dt" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/classrooms) "du" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/academy/classrooms) -"dv" = (/obj/item/seeds/eggyseed,/turf/simulated/floor,/area/awaymission/academy/classrooms) +"dv" = (/turf/simulated/floor,/area/awaymission/academy/classrooms) "dw" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms) "dx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) "dy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) @@ -538,7 +538,7 @@ "kr" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/academy/academygate) "ks" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate) "kt" = (/obj/machinery/door_control{id = "AcademyGate"; pixel_y = -24},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate) -"ku" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/academy/academygate) +"ku" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/academy/academygate) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 32504913bd8..2306b708f72 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -116,8 +116,8 @@ "cl" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/BMPship/Midship) "cm" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"},/area/awaymission/BMPship/Midship) "cn" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/awaymission/BMPship/Aft) -"co" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) -"cp" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) +"co" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) +"cp" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "cq" = (/obj/structure/largecrate,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/BMPship/Aft) "cr" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cs" = (/obj/machinery/light/small,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) @@ -151,7 +151,7 @@ "cU" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cV" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cW" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"},/area/awaymission/BMPship/Aft) -"cX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor/shutters{dir = 2; id = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"cX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "cY" = (/turf/simulated/floor{tag = "icon-carpet15-13 (EAST)"; icon_state = "carpet15-13"; dir = 4},/area/awaymission/BMPship/Fore) "cZ" = (/turf/simulated/floor{tag = "icon-carpet15-7 (EAST)"; icon_state = "carpet15-7"; dir = 4},/area/awaymission/BMPship/Fore) "da" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-carpet15-7 (EAST)"; icon_state = "carpet15-7"; dir = 4},/area/awaymission/BMPship/Fore) @@ -348,7 +348,7 @@ "gJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "gK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "gL" = (/obj/item/weapon/mop,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) -"gM" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"gM" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "gN" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "gO" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/awaymission/BMPship/Fore) "gP" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) @@ -399,7 +399,7 @@ "hI" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/awaymission) "hJ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission) "hK" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/awaymission) -"hL" = (/obj/item/apc_frame,/turf/simulated/floor/plating/airless,/area/awaymission) +"hL" = (/obj/item/mounted/frame/apc_frame,/turf/simulated/floor/plating/airless,/area/awaymission) "hM" = (/obj/structure/ore_box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission) "hN" = (/obj/item/stack/cable_coil{amount = 5},/turf/simulated/floor/plating/airless,/area/awaymission) "hO" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless,/area/awaymission) @@ -443,7 +443,7 @@ "iA" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/turf/simulated/floor,/area/awaymission/BMPship/Aft) "iB" = (/obj/structure/sink{dir = 2},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/BMPship/Aft) "iC" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Aft) -"iD" = (/obj/item/clothing/gloves/fyellow,/turf/space,/area/awaymission) +"iD" = (/obj/item/clothing/gloves/color/yellow,/turf/space,/area/awaymission) "iE" = (/turf/simulated/shuttle/wall{tag = "icon-swall4"; icon_state = "swall4"},/area/awaymission) "iF" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission) "iG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index ce36c5adcd7..cdeea9bc029 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -56,14 +56,14 @@ "bd" = (/obj/item/device/radio,/turf/simulated/floor/plating,/area/awaymission/centcomAway/maint) "be" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/centcomAway/hangar) "bf" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar) -"bg" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar) +"bg" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar) "bh" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bar"; dir = 2},/area/awaymission/centcomAway/cafe) "bi" = (/obj/machinery/door/airlock/freezer,/turf/simulated/floor{icon_state = "freezerfloor"; dir = 2},/area/awaymission/centcomAway/cafe) "bj" = (/obj/machinery/chem_dispenser,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{tag = "icon-greenfull (NORTH)"; icon_state = "greenfull"; dir = 1},/area/awaymission/centcomAway/cafe) "bk" = (/obj/machinery/chem_master,/turf/simulated/floor{tag = "icon-greenfull (NORTH)"; icon_state = "greenfull"; dir = 1},/area/awaymission/centcomAway/cafe) "bl" = (/obj/structure/rack,/obj/item/clothing/suit/fire,/turf/simulated/floor/plating,/area/awaymission/centcomAway/maint) "bm" = (/obj/structure/lattice,/turf/space,/area/space) -"bn" = (/obj/machinery/door/poddoor{id = "XCCHangar1"; name = "XCC Main Hangar"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) +"bn" = (/obj/machinery/door/poddoor{id_tag = "XCCHangar1"; name = "XCC Main Hangar"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) "bo" = (/turf/simulated/floor{tag = "icon-vault (NORTHWEST)"; icon_state = "vault"; dir = 9},/area/awaymission/centcomAway/hangar) "bp" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/awaymission/centcomAway/hangar) "bq" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) @@ -78,7 +78,7 @@ "bz" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plating,/area/awaymission/centcomAway/cafe) "bA" = (/turf/simulated/floor,/area/awaymission/centcomAway/cafe) "bB" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/cafe) -"bC" = (/obj/structure/rack,/obj/item/weapon/extinguisher/mini,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/gloves/black,/turf/simulated/floor/plating,/area/awaymission/centcomAway/maint) +"bC" = (/obj/structure/rack,/obj/item/weapon/extinguisher/mini,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/gloves/color/black,/turf/simulated/floor/plating,/area/awaymission/centcomAway/maint) "bD" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/awaymission/centcomAway/hangar) "bE" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) "bF" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/awaymission/centcomAway/hangar) @@ -256,7 +256,7 @@ "eV" = (/obj/structure/table/reinforced,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/general) "eW" = (/obj/machinery/implantchair,/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/general) "eX" = (/obj/structure/table/reinforced,/obj/item/weapon/extinguisher/mini,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) -"eY" = (/obj/structure/table/reinforced,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) +"eY" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) "eZ" = (/obj/machinery/clonepod,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) "fa" = (/obj/machinery/computer/cloning,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) "fb" = (/obj/machinery/dna_scannernew,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/awaymission/centcomAway/general) @@ -380,7 +380,7 @@ "hp" = (/turf/simulated/floor{tag = "icon-blackcorner"; icon_state = "blackcorner"},/area/awaymission/centcomAway/general) "hq" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/centcomAway/courtroom) "hr" = (/obj/machinery/door/airlock/centcom,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/courtroom) -"hs" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/hangar) +"hs" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/hangar) "ht" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/awaymission/centcomAway/hangar) "hu" = (/turf/simulated/floor{icon_state = "dark"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/awaymission/centcomAway/hangar) "hv" = (/obj/structure/table,/obj/item/weapon/paper/ccaMemo,/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) @@ -414,7 +414,7 @@ "hX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) "hY" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/awaymission/centcomAway/hangar) "hZ" = (/turf/simulated/floor{icon_state = "dark"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/awaymission/centcomAway/hangar) -"ia" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) +"ia" = (/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) "ib" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/general) "ic" = (/turf/simulated/wall,/area/awaymission/centcomAway/general) "id" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/general) @@ -463,14 +463,14 @@ "iU" = (/obj/structure/closet/secure_closet/hos,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/centcomAway/general) "iV" = (/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/centcomAway/general) "iW" = (/obj/structure/bookcase,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/centcomAway/general) -"iX" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "XCCsec3"; name = "XCC Main Access Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) +"iX" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "XCCsec3"; name = "XCC Main Access Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) "iY" = (/obj/structure/flora/ausbushes,/turf/simulated/floor{icon_state = "asteroid6"; name = "sand"; tag = "icon-asteroid6"},/area/awaymission/centcomAway/general) "iZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/space) "ja" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/courtroom) "jb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/courtroom) -"jc" = (/obj/machinery/door/poddoor{id = "XCCMechs"; name = "XCC Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) +"jc" = (/obj/machinery/door/poddoor{id_tag = "XCCMechs"; name = "XCC Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) "jd" = (/turf/simulated/floor{icon_state = "bot"},/area/awaymission/centcomAway/hangar) -"je" = (/obj/machinery/mass_driver{dir = 8; id = "XCCMechs"; name = "gravpult"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/centcomAway/hangar) +"je" = (/obj/machinery/mass_driver{dir = 8; id_tag = "XCCMechs"; name = "gravpult"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/centcomAway/hangar) "jf" = (/turf/simulated/floor{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/area/awaymission/centcomAway/hangar) "jg" = (/obj/machinery/door/airlock/external,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar) "jh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) @@ -499,7 +499,7 @@ "jE" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/general) "jF" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "XCCsec3"; name = "XCC Shutter 3 Control"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/general) "jG" = (/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/awaymission/centcomAway/general) -"jH" = (/obj/machinery/driver_button{id = "XCCMechs"; name = "XCC Mechbay Mass Driver"; pixel_x = 25},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/awaymission/centcomAway/hangar) +"jH" = (/obj/machinery/driver_button{id_tag = "XCCMechs"; name = "XCC Mechbay Mass Driver"; pixel_x = 25},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/awaymission/centcomAway/hangar) "jI" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/hangar) "jJ" = (/turf/simulated/floor{tag = "icon-ironsand4 (WEST)"; icon_state = "ironsand4"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/general) "jK" = (/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/centcomAway/general) @@ -537,15 +537,15 @@ "kq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{name = "plating"},/area/awaymission/centcomAway/general) "kr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{name = "plating"},/area/awaymission/centcomAway/general) "ks" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) -"kt" = (/obj/machinery/door/poddoor/shutters{id = "XCCFerry"; name = "XCC Ferry Hangar"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) +"kt" = (/obj/machinery/door/poddoor/shutters{id_tag = "XCCFerry"; name = "XCC Ferry Hangar"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/hangar) "ku" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/general) "kv" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/centcomAway/general) "kw" = (/obj/machinery/vending/cigarette,/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/centcomAway/general) "kx" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) "ky" = (/obj/machinery/door/airlock/centcom,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/hangar) "kz" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet/ccaInfo,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/general) -"kA" = (/obj/machinery/door/poddoor/shutters{id = "XCCsec1"; name = "XCC Checkpoint 1 Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) -"kB" = (/obj/machinery/door/poddoor/shutters{id = "XCCsec2"; name = "XCC Checkpoint 2 Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) +"kA" = (/obj/machinery/door/poddoor/shutters{id_tag = "XCCsec1"; name = "XCC Checkpoint 1 Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) +"kB" = (/obj/machinery/door/poddoor/shutters{id_tag = "XCCsec2"; name = "XCC Checkpoint 2 Shutters"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/general) "kC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) "kD" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/hangar) "kE" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/general) @@ -594,10 +594,10 @@ "lv" = (/obj/machinery/door/airlock/external,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/awaymission/centcomAway/general) "lw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor{icon_state = "green"; dir = 6},/area/awaymission/centcomAway/general) "lx" = (/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/awaymission/centcomAway/general) -"ly" = (/obj/structure/table/woodentable,/obj/item/clothing/tie/medal,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) +"ly" = (/obj/structure/table/woodentable,/obj/item/clothing/accessory/medal,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lz" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lA" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) -"lB" = (/obj/structure/table/woodentable,/obj/item/clothing/tie/medal/gold,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) +"lB" = (/obj/structure/table/woodentable,/obj/item/clothing/accessory/medal/gold,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lC" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) "lD" = (/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/thunderdome) "lE" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/space,/area/space) @@ -634,7 +634,7 @@ "mj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome) "mk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome) "ml" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/centcomAway/thunderdome) -"mm" = (/obj/machinery/door/poddoor{id = "XCCtdomemelee"; name = "XCC Thunderdome Melee"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) +"mm" = (/obj/machinery/door/poddoor{id_tag = "XCCtdomemelee"; name = "XCC Thunderdome Melee"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) "mn" = (/obj/machinery/portable_atmospherics/scrubber/huge,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/centcomAway/thunderdome) "mo" = (/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/centcomAway/thunderdome) "mp" = (/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/centcomAway/thunderdome) @@ -651,7 +651,7 @@ "mA" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "mB" = (/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome) "mC" = (/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome) -"mD" = (/obj/machinery/door/poddoor{id = "XCCtdome"; name = "XCC Thunderdome"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) +"mD" = (/obj/machinery/door/poddoor{id_tag = "XCCtdome"; name = "XCC Thunderdome"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) "mE" = (/obj/machinery/igniter,/turf/simulated/floor{icon_state = "floor"},/area/awaymission/centcomAway/thunderdome) "mF" = (/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/hatchet,/obj/item/weapon/shield/riot,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "mG" = (/obj/machinery/door/airlock/centcom,/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) @@ -674,7 +674,7 @@ "mX" = (/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/awaymission/centcomAway/thunderdome) "mY" = (/obj/machinery/shower{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) "mZ" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) -"na" = (/obj/machinery/door/poddoor{id = "XCCtdomeguns"; name = "XCC Thunderdome Guns"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) +"na" = (/obj/machinery/door/poddoor{id_tag = "XCCtdomeguns"; name = "XCC Thunderdome Guns"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/centcomAway/thunderdome) "nb" = (/obj/machinery/portable_atmospherics/scrubber/huge,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/awaymission/centcomAway/thunderdome) "nc" = (/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/centcomAway/thunderdome) "nd" = (/turf/simulated/floor{dir = 2; icon_state = "green"},/area/awaymission/centcomAway/thunderdome) diff --git a/_maps/map_files/RandomZLevels/clownplanet.dmm b/_maps/map_files/RandomZLevels/clownplanet.dmm index b2789c9173a..95024bbaaba 100644 --- a/_maps/map_files/RandomZLevels/clownplanet.dmm +++ b/_maps/map_files/RandomZLevels/clownplanet.dmm @@ -36,7 +36,7 @@ "aJ" = (/obj/structure/flora/grass/brown,/obj/structure/flora/grass/both,/turf/unsimulated/floor/plating/snow,/area/planet/clown) "aK" = (/obj/effect/landmark/corpse/mime,/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor/plating/snow,/area/planet/clown) "aL" = (/obj/structure/closet/crate/secure/gear,/obj/item/weapon/bikehorn,/obj/item/weapon/bikehorn,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) -"aM" = (/obj/effect/decal/cleanable/oil,/obj/structure/closet/crate/secure,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) +"aM" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/closet/crate/secure,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "aN" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "aO" = (/obj/effect/landmark/corpse/clown,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "aP" = (/obj/machinery/doppler_array,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) @@ -90,7 +90,7 @@ "bL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/planet/clown) "bM" = (/obj/structure/closet/toolcloset,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "bN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) -"bO" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) +"bO" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "bP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) "bQ" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor/plating/snow,/area/planet/clown) "bR" = (/obj/structure/closet/crate/secure/large/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/planet/clown) diff --git a/_maps/map_files/RandomZLevels/example.dmm b/_maps/map_files/RandomZLevels/example.dmm index 39ef6c83fa9..ef460a6cf3a 100644 --- a/_maps/map_files/RandomZLevels/example.dmm +++ b/_maps/map_files/RandomZLevels/example.dmm @@ -16,7 +16,7 @@ "ap" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor,/area/awaymission/example) "aq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/example) "ar" = (/obj/item/weapon/cigbutt,/turf/simulated/floor,/area/awaymission/example) -"as" = (/obj/machinery/gateway{dir = 10},/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/example) +"as" = (/obj/machinery/gateway{dir = 10},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/awaymission/example) "at" = (/obj/machinery/gateway,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/awaymission/example) "au" = (/obj/machinery/gateway{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/example) "av" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/example) @@ -24,7 +24,7 @@ "ax" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/example) "ay" = (/obj/machinery/light/small,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/example) "az" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/example) -"aA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/example) +"aA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/awaymission/example) "aB" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/awaymission/example) "aC" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/awaymission/example) "aD" = (/obj/machinery/light,/turf/simulated/floor,/area/awaymission/example) @@ -48,8 +48,8 @@ "aV" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) "aW" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) "aX" = (/obj/machinery/door/airlock/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) -"aY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) -"aZ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) +"aY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) +"aZ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) "ba" = (/obj/machinery/door_control{id = "example"; name = "Privacy Shutters"; pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) "bb" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) "bc" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example) diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 300192cb1cb..b4a4ce5813c 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -94,7 +94,7 @@ "bP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "Gateway"; req_access_txt = "150"},/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/clothing/gloves/color/yellow,/obj/item/device/multitool,/turf/simulated/floor/plating{dir = 9; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bR" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/computer3frame,/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"; tag = "icon-warnplate (NORTHEAST)"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) -"bS" = (/obj/machinery/power/smes{charge = 0; chargelevel = 10000; charging = 0; output = 15000; online = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) +"bS" = (/obj/machinery/power/smes{charge = 0; input_level = 10000; inputting = 0; output_level = 15000; outputting = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bT" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{frequency = 1439; locked = 1; pixel_y = 23; req_access = "150"},/turf/simulated/floor/plating{dir = 9; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bU" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"; tag = "icon-warnplate (NORTHEAST)"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bV" = (/obj/structure/alien/weeds/node,/mob/living/simple_animal/hostile/alien,/turf/simulated/floor/plating/airless/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) @@ -254,7 +254,7 @@ "eT" = (/obj/machinery/power/port_gen/pacman/super{desc = "A portable generator for emergency backup power."; name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "eU" = (/obj/machinery/space_heater,/obj/machinery/light/small{dir = 1},/obj/structure/sign/poster{icon_state = "poster5_legit"; pixel_x = 0; pixel_y = 32; serial_number = 21},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "eV" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) -"eW" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1.5e+006; chargelevel = 10000; charging = 0; output = 15000; online = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) +"eW" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1.5e+006; input_level = 10000; inputting = 0; output_level = 15000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "eX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "eY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/weapon/newspaper,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "eZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 21fdd42dac5..38273d307ff 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -61,8 +61,8 @@ "bi" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/combat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bj" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bk" = (/obj/structure/table/reinforced,/obj/item/clothing/head/helmet/swat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) -"bl" = (/obj/machinery/computer/pod{id = "spacebattlepod3"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) -"bm" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "spacebattlepod3"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/syndicate2) +"bl" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod3"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) +"bm" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "spacebattlepod3"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/syndicate2) "bn" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bo" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bp" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3) @@ -100,14 +100,14 @@ "bV" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/spacebattle/cruiser) "bW" = (/obj/machinery/computer/telecomms/monitor,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "bX" = (/turf/simulated/floor{tag = "icon-damaged5"; icon_state = "damaged5"},/area/awaymission/spacebattle/cruiser) -"bY" = (/obj/machinery/computer/pod{id = "spacebattlepod"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) +"bY" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) "bZ" = (/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "ca" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cb" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/awaymission/spacebattle/cruiser) "cc" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/spacebattle/cruiser) "cd" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "ce" = (/turf/simulated/floor{tag = "icon-damaged5"; icon_state = "damaged5"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) -"cf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "spacebattlepod"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) +"cf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "spacebattlepod"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) "cg" = (/turf/simulated/floor{tag = "icon-damaged4"; icon_state = "damaged4"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) "ch" = (/mob/living/simple_animal/hostile/syndicate/melee/space,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "ci" = (/turf/simulated/floor{tag = "icon-damaged2"; icon_state = "damaged2"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) @@ -153,7 +153,7 @@ "cW" = (/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "cX" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "cY" = (/mob/living/simple_animal/hostile/syndicate/ranged/space,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) -"cZ" = (/obj/machinery/computer/pod{id = "spacebattlepod2"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) +"cZ" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod2"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) "da" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "db" = (/obj/machinery/shieldgen{anchored = 1},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "dc" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (EAST)"; icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/spacebattle/cruiser) @@ -168,7 +168,7 @@ "dl" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/awaymission/spacebattle/cruiser) "dm" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/awaymission/spacebattle/cruiser) "dn" = (/turf/simulated/floor{tag = "icon-damaged4"; icon_state = "damaged4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) -"do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "spacebattlepod2"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) +"do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "spacebattlepod2"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) "dp" = (/turf/simulated/floor{tag = "icon-damaged1"; icon_state = "damaged1"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) "dq" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/spacebattle/cruiser) "dr" = (/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/spacebattle/cruiser) @@ -261,9 +261,9 @@ "fa" = (/turf/simulated/floor{icon_state = "red"; dir = 10},/area/awaymission/spacebattle/cruiser) "fb" = (/turf/simulated/floor{icon_state = "red"},/area/awaymission/spacebattle/cruiser) "fc" = (/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/spacebattle/cruiser) -"fd" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/blue,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) +"fd" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/color/blue,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "fe" = (/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) -"ff" = (/obj/machinery/door/poddoor{id = "spacebattlestorage"; name = "Secure Storage"},/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) +"ff" = (/obj/machinery/door/poddoor{id_tag = "spacebattlestorage"; name = "Secure Storage"},/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "fg" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/awaymission/spacebattle/cruiser) "fh" = (/obj/machinery/computer/security/telescreen,/turf/simulated/shuttle/wall,/area/awaymission/spacebattle/cruiser) "fi" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/spacebattle/cruiser) @@ -325,7 +325,7 @@ "gm" = (/obj/structure/artilleryplaceholder{tag = "icon-35"; icon_state = "35"},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "gn" = (/obj/structure/closet/crate/secure/weapon,/obj/item/ammo_casing/a357,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "go" = (/obj/structure/closet/crate,/obj/item/weapon/lipstick/black,/obj/item/weapon/lipstick/jade,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) -"gp" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/rainbow,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) +"gp" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/color/rainbow,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "gq" = (/obj/machinery/door_control{dir = 2; id = "spacebattlestorage"; name = "Secure Storage"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "gr" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/spacebattle/cruiser) "gs" = (/obj/structure/table/reinforced,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/spacebattle/cruiser) @@ -361,7 +361,7 @@ "gW" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7) "gX" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/spacebattle/syndicate7) "gY" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/spacebattle/syndicate4) -"gZ" = (/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe/plasmacutter,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) +"gZ" = (/obj/item/weapon/pickaxe,/obj/item/weapon/gun/energy/plasmacutter,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "ha" = (/obj/item/weapon/circular_saw,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) "hb" = (/obj/item/weapon/paper_bin,/turf/simulated/floor/wood,/area/awaymission/spacebattle/cruiser) "hc" = (/obj/effect/landmark/corpse/engineer/rig{corpseidjob = "Gunner"; mobname = "Dan Hedricks"; name = "Dan Hedricks"},/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) @@ -379,7 +379,7 @@ "ho" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/awaymission/spacebattle/cruiser) "hp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/spacebattle/syndicate7) "hq" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/space,/area/awaymission/spacebattle/syndicate7) -"hr" = (/obj/structure/largecrate,/mob/living/simple_animal/corgi/puppy,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) +"hr" = (/obj/structure/largecrate,/mob/living/simple_animal/pet/corgi/puppy,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hs" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "ht" = (/obj/structure/closet/crate/medical,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "hu" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser) diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 76ce8be814b..6efe878c5ca 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -18,9 +18,9 @@ "ar" = (/obj/structure/window{dir = 4},/obj/machinery/shower,/turf/simulated/floor{dir = 8; icon_state = "whiteblue"},/area/awaymission) "as" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/wizrobe/marisa/fake,/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/carpet,/area/awaymission) "at" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/wizard/marisa/fake,/obj/machinery/camera{c_tag = "Gold Suite"; c_tag_order = 999; network = list("Hotel")},/obj/item/clothing/mask/gas/sexyclown,/turf/simulated/floor/carpet,/area/awaymission) -"au" = (/obj/structure/rack,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/head/kitty,/obj/item/clothing/head/rabbitears,/obj/item/clothing/mask/muzzle,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor/carpet,/area/awaymission) +"au" = (/obj/structure/rack,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/head/kitty,/obj/item/clothing/head/rabbitears,/obj/item/clothing/mask/muzzle,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/carpet,/area/awaymission) "av" = (/obj/structure/dresser,/turf/simulated/floor/carpet,/area/awaymission) -"aw" = (/obj/structure/table/woodentable,/obj/machinery/light/small/lamp/green,/turf/simulated/floor/carpet,/area/awaymission) +"aw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/awaymission) "ax" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/xenos,/obj/item/clothing/suit/wizrobe/marisa/fake,/turf/simulated/floor/carpet,/area/awaymission) "ay" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/xenos,/obj/item/clothing/head/wizard/marisa/fake,/obj/machinery/camera{c_tag = "Silver Suite"; c_tag_order = 999; network = list("Hotel")},/obj/item/clothing/mask/gas/sexyclown,/turf/simulated/floor/carpet,/area/awaymission) "az" = (/turf/simulated/floor/wood,/area/awaymission) @@ -97,12 +97,12 @@ "bS" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) "bT" = (/obj/structure/window,/turf/simulated/floor/carpet,/area/awaymission) "bU" = (/obj/machinery/door/window/southright,/turf/simulated/floor/carpet,/area/awaymission) -"bV" = (/obj/machinery/light/small/lamp/green,/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission) +"bV" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission) "bW" = (/obj/structure/mirror,/turf/simulated/wall,/area/awaymission) "bX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) "bY" = (/obj/machinery/shower{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) -"bZ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/vomit/old,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) -"ca" = (/obj/structure/toilet{dir = 1},/obj/effect/decal/cleanable/vomit/old,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) +"bZ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/vomit,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) +"ca" = (/obj/structure/toilet{dir = 1},/obj/effect/decal/cleanable/vomit,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission) "cb" = (/obj/machinery/light{dir = 8},/turf/unsimulated/beach/water,/area/awaymission) "cc" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/beach/water,/area/awaymission) "cd" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) @@ -215,7 +215,7 @@ "eg" = (/obj/item/toy/sword,/turf/simulated/floor/carpet,/area/awaymission) "eh" = (/obj/machinery/vending/cola,/turf/simulated/floor/carpet,/area/awaymission) "ei" = (/obj/item/candle,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) -"ej" = (/obj/effect/rune,/obj/item/brain,/turf/simulated/floor/engine/cult,/area/awaymission) +"ej" = (/obj/effect/rune,/obj/item/organ/brain,/turf/simulated/floor/engine/cult,/area/awaymission) "ek" = (/obj/item/candle,/turf/simulated/floor/engine/cult,/area/awaymission) "el" = (/obj/item/weapon/tome,/turf/simulated/floor/engine/cult,/area/awaymission) "em" = (/obj/effect/rune,/turf/simulated/floor/engine/cult,/area/awaymission) diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 43bbb2b261d..5530bae43f2 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -95,7 +95,7 @@ "bQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastleft,/obj/machinery/door/window/westright,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "bR" = (/mob/living/simple_animal/lizard,/turf/simulated/floor/grass,/area/awaymission/research) "bS" = (/turf/simulated/floor/grass,/area/awaymission/research) -"bT" = (/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/awaymission/research) +"bT" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/grass,/area/awaymission/research) "bU" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r (EAST)"; icon_state = "burst_r"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/syndishuttle) "bV" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) "bW" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) @@ -123,7 +123,7 @@ "cs" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "ct" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "cu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/awaymission/research) -"cv" = (/obj/structure/window/reinforced,/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/awaymission/research) +"cv" = (/obj/structure/window/reinforced,/mob/living/carbon/human/monkey,/turf/simulated/floor/grass,/area/awaymission/research) "cw" = (/obj/structure/window/reinforced,/turf/simulated/floor/grass,/area/awaymission/research) "cx" = (/obj/structure/window/reinforced,/obj/effect/overlay/palmtree_l,/turf/simulated/floor/grass,/area/awaymission/research) "cy" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/research) @@ -165,8 +165,8 @@ "di" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "dj" = (/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/swat,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "dk" = (/obj/machinery/door_control{id = "Narsiedoor"; name = "Blast Door Control"; pixel_x = -28},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) -"dl" = (/obj/machinery/door/poddoor{id = "Narsiedoor"; name = "Blast Doors"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) -"dm" = (/obj/machinery/singularity/narsie/sc_Narsie,/turf/space,/area/awaymission/research) +"dl" = (/obj/machinery/door/poddoor{id_tag = "Narsiedoor"; name = "Blast Doors"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) +"dm" = (/obj/singularity/narsie/sc_Narsie,/turf/space,/area/awaymission/research) "dn" = (/obj/machinery/power/emitter{anchored = 1; dir = 8; state = 2},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "do" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) "dp" = (/obj/structure/closet/firecloset,/turf/simulated/floor,/area/awaymission/northblock) diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 25b75599837..69f2b00c9bf 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -745,8 +745,8 @@ "oq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "or" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/junction{tag = "icon-pipe-y (WEST)"; icon_state = "pipe-y"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "os" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) -"ot" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; chargelevel = 10000; charging = 1; output = 7000; online = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) -"ou" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; chargelevel = 30000; charging = 1; output = 7000; online = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) +"ot" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 10000; inputting = 1; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) +"ou" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 30000; inputting = 1; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "ov" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (WEST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "ow" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "ox" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm index d8715bf496b..d9135137420 100644 --- a/_maps/map_files/RandomZLevels/wildwest.dmm +++ b/_maps/map_files/RandomZLevels/wildwest.dmm @@ -127,7 +127,7 @@ "cw" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/wood,/area/awaymission/wwmines) "cx" = (/obj/effect/mine/plasma,/obj/item/ammo_box/c10mm,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "cy" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/wood,/area/awaymission/wwgov) -"cz" = (/obj/item/clothing/gloves/yellow,/obj/item/device/multitool,/turf/simulated/floor/wood,/area/awaymission/wwgov) +"cz" = (/obj/item/clothing/gloves/color/yellow,/obj/item/device/multitool,/turf/simulated/floor/wood,/area/awaymission/wwgov) "cA" = (/obj/structure/stool/bed/chair/wood/normal{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwgov) "cB" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "cC" = (/obj/effect/landmark/corpse/chef{mobname = "Chef"},/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) From 8e03775eec4515a5f299dee5d0ab85de581c1b32 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 22:58:45 +0200 Subject: [PATCH 16/21] Floodlight power cell fix --- code/game/machinery/floodlight.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 1bba12b0113..08e023851b4 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -40,7 +40,6 @@ if(ishuman(user)) if(!user.get_active_hand()) user.put_in_hands(cell) - cell.loc = user.loc else cell.loc = loc From 7d1f077378050496a722ebc23d3893b3dffe5772 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 23:01:50 +0200 Subject: [PATCH 17/21] Fix https://github.com/ParadiseSS13/Paradise/issues/1350 --- code/game/machinery/vending.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 267a6f94e6c..2be40422181 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -416,7 +416,7 @@ var/list/data = list() if(currently_vending) data["mode"] = 1 - data["product"] = currently_vending.product_name + data["product"] = sanitize(currently_vending.product_name) data["price"] = currently_vending.price data["message_err"] = 0 data["message"] = src.status_message From 80d4c67eb3c87444d8a55e34cf26cbee100d9246 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 23:24:55 +0200 Subject: [PATCH 18/21] Fix spacebattles id_tags variable --- _maps/map_files/RandomZLevels/spacebattle.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 38273d307ff..168c3ed5d58 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -61,7 +61,7 @@ "bi" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/combat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bj" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bk" = (/obj/structure/table/reinforced,/obj/item/clothing/head/helmet/swat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3) -"bl" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod3"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) +"bl" = (/obj/machinery/computer/pod{id_tags = list("spacebattlepod3"); name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2) "bm" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "spacebattlepod3"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/syndicate2) "bn" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) "bo" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1) @@ -100,7 +100,7 @@ "bV" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/spacebattle/cruiser) "bW" = (/obj/machinery/computer/telecomms/monitor,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "bX" = (/turf/simulated/floor{tag = "icon-damaged5"; icon_state = "damaged5"},/area/awaymission/spacebattle/cruiser) -"bY" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) +"bY" = (/obj/machinery/computer/pod{id_tags = list("spacebattlepod"); name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) "bZ" = (/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "ca" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) "cb" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/awaymission/spacebattle/cruiser) @@ -153,7 +153,7 @@ "cW" = (/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "cX" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "cY" = (/mob/living/simple_animal/hostile/syndicate/ranged/space,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser) -"cZ" = (/obj/machinery/computer/pod{id_tags = "spacebattlepod2"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) +"cZ" = (/obj/machinery/computer/pod{id_tags = list("spacebattlepod2"); name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) "da" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "db" = (/obj/machinery/shieldgen{anchored = 1},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "dc" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (EAST)"; icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/spacebattle/cruiser) From 2a824c5fe07fad3d226435bb7028cdac3f60e6c5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 2 Aug 2015 19:10:31 +0200 Subject: [PATCH 19/21] Tweak electrocution damage from power gloves, GC update --- code/modules/power/powernet.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index e80113b3057..0c65a49b251 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -21,7 +21,7 @@ /datum/powernet/Destroy() powernets -= src - ..() + return ..() //Returns the amount of excess power (before refunding to SMESs) from last tick. //This is for machines that might adjust their power consumption using this data. @@ -121,7 +121,11 @@ /datum/powernet/proc/get_electrocute_damage() switch(avail) - if (1000000 to INFINITY) + if (5000000 to INFINITY) + return min(rand(200,300),rand(200,300)) + if (4000000 to 5000000) + return min(rand(80,180),rand(80,180)) + if (1000000 to 4000000) return min(rand(50,160),rand(50,160)) if (200000 to 1000000) return min(rand(25,80),rand(25,80)) From 62f2f64063b8e16a77b0f47321c94c36f00067d9 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 2 Aug 2015 22:45:25 +0200 Subject: [PATCH 20/21] Make SMES start empty, GC fix --- _maps/map_files/cyberiad/z4.dmm | 2 +- code/game/machinery/kitchen/smartfridge.dm | 2 +- code/modules/power/smes.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index e4ba6112ae9..85f9da07b2f 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -134,7 +134,7 @@ "cD" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver2"; name = "construction driver #2"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "cF" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) -"cG" = (/obj/machinery/power/smes{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"cG" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cH" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engiestation) "cI" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) "cJ" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 0bad514dd84..df4a9110205 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -35,7 +35,7 @@ /obj/machinery/smartfridge/Destroy() qdel(wires) - ..() + return ..() /obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/)) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 5e34cb31fcc..a116655e87e 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -15,7 +15,7 @@ anchored = 1 var/capacity = 5e6 // maximum charge - var/charge = 1e6 // actual charge + var/charge = 0 // actual charge var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge var/inputting = 0 // 1 = actually inputting, 0 = not inputting From 909a7956f2e6493d47e2cbd039acd6b52b0756a9 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 2 Aug 2015 22:50:09 +0200 Subject: [PATCH 21/21] Re-add custom settings to engi outpost SMES --- _maps/map_files/cyberiad/z4.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index 85f9da07b2f..68f283e7018 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -134,7 +134,7 @@ "cD" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver2"; name = "construction driver #2"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "cF" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) -"cG" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) +"cG" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cH" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engiestation) "cI" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) "cJ" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation)