From 51035f931e6d3fc03e572ecfe6860df237acd5c2 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 31 Jul 2015 23:59:41 +0200 Subject: [PATCH 01/27] 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 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 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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 f302506fbdffcd4a596f471da2eb4ec046ea282a Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sat, 1 Aug 2015 05:30:39 -0400 Subject: [PATCH 11/27] Removes explosion immunity from chameleon projector Being disguised via chameleon projector will no longer cause the user to shrug off even the nastiest of explosions. The explosion will now break the illusion AND cause the appropriate strength ex_act on the user. --- code/game/objects/items/devices/chameleonproj.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 034fdb53ebc..a6d3052f9c8 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -115,9 +115,10 @@ M << "Your chameleon-projector deactivates." master.disrupt() -/obj/effect/dummy/chameleon/ex_act() //ok now THATS some serious protection against explosions right here +/obj/effect/dummy/chameleon/ex_act(var/severity) //no longer bomb-proof for(var/mob/M in src) M << "Your chameleon-projector deactivates." + M.ex_act(severity) master.disrupt() /obj/effect/dummy/chameleon/bullet_act() From 6d1a2cf6d3ecf9cabcf560248f804bf0ceb26d1f Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 19:02:08 +0200 Subject: [PATCH 12/27] 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 13/27] 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 14/27] 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 4b84d7ebd8045f2134e7d192353d5f37f84c24d2 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sat, 1 Aug 2015 15:48:29 -0400 Subject: [PATCH 15/27] spawn() added to ex_act --- code/game/objects/items/devices/chameleonproj.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index a6d3052f9c8..a5ec2b9ea25 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -118,7 +118,8 @@ /obj/effect/dummy/chameleon/ex_act(var/severity) //no longer bomb-proof for(var/mob/M in src) M << "Your chameleon-projector deactivates." - M.ex_act(severity) + spawn() + M.ex_act(severity) master.disrupt() /obj/effect/dummy/chameleon/bullet_act() From 38b313a4544fade16877462e34467d42217c67a0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sat, 1 Aug 2015 22:25:32 +0200 Subject: [PATCH 16/27] 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 17/27] 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 18/27] 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 19/27] 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 20/27] 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 24bef6c6f4bc7a5efb5cce4314892e87822f23b8 Mon Sep 17 00:00:00 2001 From: bustygoku Date: Sat, 1 Aug 2015 15:29:48 -0700 Subject: [PATCH 21/27] Fixes Copypaste Message --- interface/interface.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/interface.dm b/interface/interface.dm index f1148629515..69cb4e964c0 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -51,7 +51,7 @@ set desc = "Donate to help with development costs." set hidden = 1 - if(alert("This will open the changelog in your browser. Are you sure?",,"Yes","No")=="No") + if(alert("This will open the donation page in your browser. Are you sure?",,"Yes","No")=="No") return src << link(DONATE) return From 809c34eeb2157fae37131d0e975e4c7ce11d489d Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 1 Aug 2015 20:27:10 -0700 Subject: [PATCH 22/27] Fix xeno icons getting stuck due to impossible check --- code/modules/mob/living/carbon/alien/humanoid/update_icons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 0c18ee5f55a..4c24b06bbe0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -45,7 +45,7 @@ icon_state = "alien[caste]_leap" pixel_x = -32 pixel_y = -32 - else if(icon == 'icons/mob/alienleap.dmi' && icon_state == "alien[caste]_leap" && pixel_x == -32 && pixel_y == -32) + else if(icon == 'icons/mob/alienleap.dmi' && pixel_x == -32 && pixel_y == -32) icon = initial(icon)// ^ this looks odd, but in theory it will prevent the icon and pixel_xy from being reset unless it needs to be pixel_x = initial(pixel_x) pixel_y = initial(pixel_y) From 330e5c0c8db80831c9a1b607464a9ffd4e479af0 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 2 Aug 2015 02:11:03 -0400 Subject: [PATCH 23/27] Fixes Nuke Ops Energy Sword/Shield Uplink Purchase --- code/datums/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 68a663c2648..97ea4890492 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -743,7 +743,7 @@ var/list/uplink_items = list() name = "Energy Shield" desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending against other attacks." item = /obj/item/weapon/shield/energy - reference = "ES" + reference = "ESD" cost = 16 gamemodes = list("nuclear emergency") surplus = 20 From 2a824c5fe07fad3d226435bb7028cdac3f60e6c5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 2 Aug 2015 19:10:31 +0200 Subject: [PATCH 24/27] 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 25/27] 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 26/27] 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) From aaa6170fe428aef726edfea670e6f835fbc491b7 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 2 Aug 2015 16:57:14 -0400 Subject: [PATCH 27/27] Lighting Runtime Fix --- code/modules/lighting/light_source.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm index 72618280137..ae9df7bb702 100644 --- a/code/modules/lighting/light_source.dm +++ b/code/modules/lighting/light_source.dm @@ -130,16 +130,16 @@ #if LIGHTING_FALLOFF == 1 //circular #define LUM_DISTANCE(swapvar, O, T) swapvar = (O.x - T.x)**2 + (O.y - T.y)**2 + LIGHTING_HEIGHT #if LIGHTING_LAMBERTIAN == 1 - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(sqrt(swapvar) / light_range)) * (1 / sqrt(swapvar + 1))) + #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(sqrt(swapvar) / max(1,light_range))) * (1 / sqrt(swapvar + 1))) #else - #define LUM_ATTENUATION(swapvar) swapvar = 1 - CLAMP01(sqrt(swapvar) / light_range) + #define LUM_ATTENUATION(swapvar) swapvar = 1 - CLAMP01(sqrt(swapvar) / max(1,light_range)) #endif #elif LIGHTING_FALLOFF == 2 //square #define LUM_DISTANCE(swapvar, O, T) swapvar = abs(O.x - T.x) + abs(O.y - T.y) + LIGHTING_HEIGHT #if LIGHTING_LAMBERTIAN == 1 - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(swapvar / light_range)) * (1 / sqrt(swapvar**2 + 1))) + #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(swapvar / max(1,light_range))) * (1 / sqrt(swapvar**2 + 1))) #else - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01(swapvar / light_range) + #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01(swapvar / max(1,light_range)) #endif #endif