diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index adafb2ed17..454d04ff44 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -200,7 +200,7 @@ "moles" = round(air2.gas[output_gas], 0.01)) // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "algae_farm_vr.tmpl", "Algae Farm Control Panel", 500, 600) ui.set_initial_data(data) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index ff1089e6f8..5e2bbce6da 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -89,7 +89,7 @@ return 1 /obj/machinery/atmospherics/binary/circulator/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 75, 1) anchored = !anchored user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index c08c82f6b9..3988b790c8 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -197,7 +197,7 @@ ) // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -243,7 +243,7 @@ return /obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (unlocked) to_chat(user, "You cannot unwrench \the [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index a7127a4dc6..d26422c309 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -84,7 +84,7 @@ overlays += image('icons/obj/pipeturbine.dmi', "hi-turb") attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = !anchored playsound(src, W.usesound, 50, 1) to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.") @@ -259,7 +259,7 @@ attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = !anchored playsound(src, W.usesound, 50, 1) turbine = null diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index a89b1c5659..b03206b262 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -140,7 +140,7 @@ Thus, the two variables affect pump operation are set in New(): ) // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -222,7 +222,7 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (!(stat & NOPOWER) && use_power) to_chat(user, "You cannot unwrench this [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 57889c463e..428f37fcfa 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -93,7 +93,7 @@ data = build_uidata() - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) @@ -181,7 +181,7 @@ switch_filter(dir_flag(href_list["dir"]), mode_return_switch(new_filter)) update_icon() - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return /obj/machinery/atmospherics/omni/atmos_filter/proc/mode_return_switch(var/mode) diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index c833b5bb2a..fc00be6ba4 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -76,7 +76,7 @@ if(output) output.air.volume = ATMOS_DEFAULT_VOLUME_MIXER * 0.75 * inputs.len output.concentration = 1 - + rebuild_mixing_inputs() /obj/machinery/atmospherics/omni/mixer/proc/mapper_set() @@ -131,7 +131,7 @@ data = build_uidata() - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) @@ -200,7 +200,7 @@ con_lock(dir_flag(href_list["dir"])) update_icon() - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return /obj/machinery/atmospherics/omni/mixer/proc/switch_mode(var/port = NORTH, var/mode = ATM_NONE) diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 0981ff6b44..6f78a7d064 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -80,7 +80,7 @@ update_icon() /obj/machinery/atmospherics/omni/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(!istype(W, /obj/item/weapon/wrench)) + if(!W.is_wrench()) return ..() if(!can_unwrench()) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 7dca3f52d4..b30bc9b038 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -133,7 +133,7 @@ /obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (connected_device) to_chat(user, "You cannot unwrench \the [src], dettach \the [connected_device] first.") diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 0a68f74c71..394dbceeda 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -52,7 +52,7 @@ update_icon() /obj/machinery/atmospherics/trinary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index b65c615174..cfc990c6e5 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -327,7 +327,7 @@ go_to_side() /obj/machinery/atmospherics/tvalve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (istype(src, /obj/machinery/atmospherics/tvalve/digital)) to_chat(user, "You cannot unwrench \the [src], it's too complicated.") diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 07b0052910..8ff0aa7479 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -83,7 +83,7 @@ data["gasTemperatureClass"] = temp_class // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -180,4 +180,4 @@ /obj/machinery/atmospherics/unary/freezer/examine(mob/user) ..(user) if(panel_open) - user << "The maintenance hatch is open." + to_chat(user, "The maintenance hatch is open.") diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index ed4010f81e..2295f70378 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -67,7 +67,7 @@ return 1 attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() var/turf/T = src.loc if (level==1 && isturf(T) && !T.is_plating()) diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index bc1aaae118..69e638bc22 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -103,7 +103,7 @@ data["gasTemperatureClass"] = temp_class // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -167,4 +167,4 @@ /obj/machinery/atmospherics/unary/heater/examine(mob/user) ..(user) if(panel_open) - user << "The maintenance hatch is open." + to_chat(user, "The maintenance hatch is open.") diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 9338516343..ce2eb97e67 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -407,7 +407,7 @@ update_icon() /obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (!(stat & NOPOWER) && use_power) to_chat(user, "You cannot unwrench \the [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 09b5fde7c1..cb460bd2f1 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -20,7 +20,7 @@ var/hibernate = 0 //Do we even process? var/scrubbing = 1 //0 = siphoning, 1 = scrubbing - var/list/scrubbing_gas = list("carbon_dioxide", "phoron") + var/list/scrubbing_gas = list("carbon_dioxide") var/panic = 0 //is this scrubber panicked? @@ -264,7 +264,7 @@ update_icon() /obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (!(stat & NOPOWER) && use_power) to_chat(user, "You cannot unwrench \the [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 93e5da7c32..f385ae5ed6 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -288,7 +288,7 @@ open() /obj/machinery/atmospherics/valve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user)) to_chat(user, "Access denied.") diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 74cef7a172..28391c4352 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -10,7 +10,7 @@ datum/pipeline var/alert_pressure = 0 Destroy() - qdel_null(network) + QDEL_NULL(network) if(air && air.volume) temporarily_store_air() @@ -204,16 +204,16 @@ datum/pipeline proc/radiate_heat_to_space(surface, thermal_conductivity) var/gas_density = air.total_moles/air.volume thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio - + // We only get heat from the star on the exposed surface area. // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity - + // Previously, the temperature would enter equilibrium at 26C or 294K. // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. // It currently should stabilise at 129.6K or -143.6C heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 - + air.add_thermal_energy(heat_gain) if(network) network.update = 1 diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm index 19b05e8b71..a035857e54 100644 --- a/code/ATMOSPHERICS/pipes/pipe_base.dm +++ b/code/ATMOSPHERICS/pipes/pipe_base.dm @@ -72,7 +72,7 @@ return parent.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() - qdel_null(parent) + QDEL_NULL(parent) if(air_temporary) loc.assume_air(air_temporary) for(var/obj/machinery/meter/meter in loc) @@ -89,7 +89,7 @@ if(istype(W,/obj/item/device/pipe_painter)) return 0 - if (!istype(W, /obj/item/weapon/wrench)) + if (!W.is_wrench()) return ..() var/turf/T = src.loc if (level==1 && isturf(T) && !T.is_plating()) diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index 0f39ab4b56..b7ab1999f0 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -40,15 +40,11 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') obj/var/contaminated = 0 -obj/var/phoronproof = 0 - /obj/item/proc/can_contaminate() //Clothing and backpacks can be contaminated. if(flags & PHORONGUARD) return 0 - else if(phoronproof == 1) - return 0 else if(istype(src,/obj/item/weapon/storage/backpack)) return 0 //Cannot be washed :( else if(istype(src,/obj/item/clothing)) @@ -148,7 +144,7 @@ obj/var/phoronproof = 0 //Checks if the head is adequately sealed. //This is just odd. TODO: Make this respect the body_parts_covered stuff like thermal gear does. if(head) if(vsc.plc.PHORONGUARD_ONLY) - if(head.flags & PHORONGUARD || head.phoronproof) + if(head.flags & PHORONGUARD) return 1 else if(head.body_parts_covered & EYES) return 1 @@ -160,7 +156,7 @@ obj/var/phoronproof = 0 for(var/obj/item/protection in list(wear_suit, gloves, shoes)) //This is why it's odd. If I'm in a full suit, but my shoes and gloves aren't phoron proof, damage. if(!protection) continue - if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD) && !protection.phoronproof) + if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD)) return 0 coverage |= protection.body_parts_covered diff --git a/code/__datastructures/globals.dm b/code/__datastructures/globals.dm new file mode 100644 index 0000000000..637af7f0fc --- /dev/null +++ b/code/__datastructures/globals.dm @@ -0,0 +1,38 @@ +//See controllers/globals.dm +#define GLOBAL_MANAGED(X, InitValue)\ +/datum/controller/global_vars/proc/InitGlobal##X(){\ + ##X = ##InitValue;\ + gvars_datum_init_order += #X;\ +} +#define GLOBAL_UNMANAGED(X, InitValue) /datum/controller/global_vars/proc/InitGlobal##X() + +#ifndef TESTING +#define GLOBAL_PROTECT(X)\ +/datum/controller/global_vars/InitGlobal##X(){\ + ..();\ + gvars_datum_protected_varlist += #X;\ +} +#else +#define GLOBAL_PROTECT(X) +#endif + +#define GLOBAL_REAL_VAR(X) var/global/##X +#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X + +#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X + +#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X, InitValue) + +#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) + +#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, null) + +#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, null) + +#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, null) diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 1d41a31209..ad03630666 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -1,14 +1,15 @@ -#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 ) +#define MC_TICK_CHECK ( ( TICK_USAGE > GLOB.CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) // Used for splitting up your remaining time into phases, if you want to evenly divide it. -#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count +#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = GLOB.CURRENT_TICKLIMIT; var/split_tick_phases = ##phase_count + #define MC_SPLIT_TICK \ - if(split_tick_phases > 1){\ - Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\ - --split_tick_phases;\ - } else {\ - Master.current_ticklimit = original_tick_limit;\ - } + if(split_tick_phases > 1){\ + GLOB.CURRENT_TICKLIMIT = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ + --split_tick_phases;\ + } else {\ + GLOB.CURRENT_TICKLIMIT = original_tick_limit;\ + } // Boilerplate code for multi-step processors. See machines.dm for example use. #define INTERNAL_PROCESS_STEP(this_step, initial_step, proc_to_call, cost_var, next_step)\ @@ -78,9 +79,15 @@ if(current_step == this_step || (initial_step && !resumed)) /* So we start at st #define SS_PAUSING 5 //in the middle of pausing // Standard way to define a global subsystem, keep boilerplate organized here! -#define SUBSYSTEM_DEF(X) var/datum/controller/subsystem/##X/SS##X;\ +#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\ /datum/controller/subsystem/##X/New(){\ NEW_SS_GLOBAL(SS##X);\ PreInit();\ }\ /datum/controller/subsystem/##X + #define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\ +/datum/controller/subsystem/processing/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/processing/##X \ No newline at end of file diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm index 3686518108..4d258cd91f 100644 --- a/code/__defines/_planes+layers.dm +++ b/code/__defines/_planes+layers.dm @@ -73,8 +73,9 @@ What is the naming convention for planes or layers? #define ABOVE_JUNK_LAYER 3.1 // Things that want to be slightly above common objects #define DOOR_CLOSED_LAYER 3.1 // Doors when closed #define WINDOW_LAYER 3.2 // Windows + #define ABOVE_WINDOW_LAYER 3.25 //Above full tile windows so wall items are clickable #define ON_WINDOW_LAYER 3.3 // Ontop of a window - + // Mob planes #define MOB_PLANE -25 #define BELOW_MOB_LAYER 3.9 // Should be converted to plane swaps @@ -90,11 +91,11 @@ What is the naming convention for planes or layers? //#define AREA_LAYER 1 //For easy recordkeeping; this is a byond define //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define - + //#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define - + //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define - + //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define #define HUD_LAYER 20 // Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots) diff --git a/code/__defines/_tick.dm b/code/__defines/_tick.dm index 2c761b86f9..7ca3fb23a2 100644 --- a/code/__defines/_tick.dm +++ b/code/__defines/_tick.dm @@ -3,7 +3,7 @@ #define TICK_LIMIT_MC 70 #define TICK_LIMIT_MC_INIT_DEFAULT 98 -#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit ) +#define TICK_CHECK ( TICK_USAGE > GLOB.CURRENT_TICKLIMIT ) #define CHECK_TICK if TICK_CHECK stoplag() #define TICK_USAGE world.tick_usage diff --git a/code/__defines/color.dm b/code/__defines/color.dm new file mode 100644 index 0000000000..ba9efe20de --- /dev/null +++ b/code/__defines/color.dm @@ -0,0 +1,17 @@ +//Color defines used by the assembly detailer. +#define COLOR_ASSEMBLY_BLACK "#545454" +#define COLOR_ASSEMBLY_BGRAY "#9497AB" +#define COLOR_ASSEMBLY_WHITE "#E2E2E2" +#define COLOR_ASSEMBLY_RED "#CC4242" +#define COLOR_ASSEMBLY_ORANGE "#E39751" +#define COLOR_ASSEMBLY_BEIGE "#AF9366" +#define COLOR_ASSEMBLY_BROWN "#97670E" +#define COLOR_ASSEMBLY_GOLD "#AA9100" +#define COLOR_ASSEMBLY_YELLOW "#CECA2B" +#define COLOR_ASSEMBLY_GURKHA "#999875" +#define COLOR_ASSEMBLY_LGREEN "#789876" +#define COLOR_ASSEMBLY_GREEN "#44843C" +#define COLOR_ASSEMBLY_LBLUE "#5D99BE" +#define COLOR_ASSEMBLY_BLUE "#38559E" +#define COLOR_ASSEMBLY_PURPLE "#6F6192" +#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4" \ No newline at end of file diff --git a/code/__defines/holomap.dm b/code/__defines/holomap.dm index dec72be760..0b93e03ae0 100644 --- a/code/__defines/holomap.dm +++ b/code/__defines/holomap.dm @@ -4,7 +4,7 @@ #define WORLD_ICON_SIZE 32 // Size of a standard tile in pixels (world.icon_size) #define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 // Convert from normal icon size of 32 to whatever insane thing this server is using. -#define HOLOMAP_ICON 'icons/480x480_vr.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas). +#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas). #define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc. #define ui_holomap "CENTER-7, CENTER-7" // Screen location of the holomap "hud" diff --git a/code/__defines/integrated_circuits.dm b/code/__defines/integrated_circuits.dm new file mode 100644 index 0000000000..b2859a232d --- /dev/null +++ b/code/__defines/integrated_circuits.dm @@ -0,0 +1,3 @@ +// Methods of obtaining a circuit. +#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer. +#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it. \ No newline at end of file diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 4563bf989e..c44df79802 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -282,3 +282,9 @@ var/global/list/##LIST_NAME = list();\ #define MATRIX_Achromatomaly list(0.62, 0.32, 0.06, 0.16, 0.78, 0.06, 0.16, 0.32, 0.52) #define MATRIX_Vulp_Colorblind list(0.50, 0.40, 0.10, 0.50, 0.40, 0.10, 0, 0.20, 0.80) #define MATRIX_Taj_Colorblind list(0.40, 0.20, 0.40, 0.40, 0.60, 0, 0.20, 0.20, 0.60) + +// Tool substitution defines +#define IS_SCREWDRIVER "screwdriver" +#define IS_CROWBAR "crowbar" +#define IS_WIRECUTTER "wirecutter" +#define IS_WRENCH "wrench" \ No newline at end of file diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index c73ebf4d41..679962b210 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -168,18 +168,19 @@ #define MODIFIER_GENETIC 1 // Modifiers with this flag will be copied to mobs who get cloned. // Bodyparts and organs. -#define O_MOUTH "mouth" #define O_EYES "eyes" #define O_HEART "heart" -#define O_CELL "cell" #define O_LUNGS "lungs" #define O_BRAIN "brain" #define O_LIVER "liver" #define O_KIDNEYS "kidneys" #define O_APPENDIX "appendix" #define O_VOICE "voicebox" +#define O_STANDARD list(O_EYES, O_HEART, O_LUNGS, O_BRAIN, O_LIVER, O_KIDNEYS, O_APPENDIX, O_VOICE) // Non-Standard organs +#define O_MOUTH "mouth" +#define O_CELL "cell" #define O_PLASMA "plasma vessel" #define O_HIVE "hive node" #define O_NUTRIENT "nutrient vessel" @@ -191,7 +192,9 @@ #define O_ACID "acid gland" #define O_EGG "egg sac" #define O_RESIN "resin spinner" +#define O_ALL list(O_STANDARD, O_MOUTH, O_CELL, O_PLASMA, O_HIVE, O_NUTRIENT, O_STRATA, O_RESPONSE, O_GBLADDER, O_POLYP, O_ANCHOR, O_ACID, O_EGG, O_RESIN) +// External organs, aka limbs #define BP_L_FOOT "l_foot" #define BP_R_FOOT "r_foot" #define BP_L_LEG "l_leg" diff --git a/code/__defines/planets.dm b/code/__defines/planets.dm index 98b10b328a..3c2a1abcfc 100644 --- a/code/__defines/planets.dm +++ b/code/__defines/planets.dm @@ -10,5 +10,16 @@ #define WEATHER_HOT "hot" #define WEATHER_BLOOD_MOON "blood moon" // For admin fun or cult later on. +#define MOON_PHASE_NEW_MOON "new moon" +#define MOON_PHASE_WAXING_CRESCENT "waxing crescent" +#define MOON_PHASE_FIRST_QUARTER "first quarter" +#define MOON_PHASE_WAXING_GIBBOUS "waxing gibbous" +#define MOON_PHASE_FULL_MOON "full moon" // ware-shantaks sold seperately. +#define MOON_PHASE_WANING_GIBBOUS "waning gibbous" +#define MOON_PHASE_LAST_QUARTER "last quarter" +#define MOON_PHASE_WANING_CRESCENT "waning crescent" + #define PLANET_PROCESS_SUN 0x1 -#define PLANET_PROCESS_TEMP 0x2 \ No newline at end of file +#define PLANET_PROCESS_TEMP 0x2 + +#define PLANET_TIME_MODIFIER 1 // If you want planet time to go faster than realtime, increase this number. \ No newline at end of file diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm index 6fae2fadcb..0995f0e071 100644 --- a/code/__defines/sound.dm +++ b/code/__defines/sound.dm @@ -4,7 +4,7 @@ #define CHANNEL_VOX 1022 #define CHANNEL_JUKEBOX 1021 #define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats -#define CHANNEL_AMBIENCE_FORCED 1019 +#define CHANNEL_AMBIENCE_FORCED 1019 #define CHANNEL_AMBIENCE 1018 #define CHANNEL_BUZZ 1017 #define CHANNEL_BICYCLE 1016 @@ -54,3 +54,125 @@ #define SMALL_SOFTFLOOR ROOM #define ASTEROID CAVE #define SPACE UNDERWATER + +// Ambience presets. +// All you need to do to make an area play one of these is set their ambience var to one of these lists. +// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization. + +// For weird alien places like the crashed UFO. +#define AMBIENCE_OTHERWORLDLY list(\ + 'sound/ambience/otherworldly/otherworldly1.ogg',\ + 'sound/ambience/otherworldly/otherworldly2.ogg',\ + 'sound/ambience/otherworldly/otherworldly3.ogg'\ + ) + +// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc. +#define AMBIENCE_HIGHSEC list(\ + 'sound/ambience/highsec/highsec1.ogg',\ + 'sound/ambience/highsec/highsec2.ogg'\ + ) + +// Ruined structures found on the surface or in the caves. +#define AMBIENCE_RUINS list(\ + 'sound/ambience/ruins/ruins1.ogg',\ + 'sound/ambience/ruins/ruins2.ogg',\ + 'sound/ambience/ruins/ruins3.ogg',\ + 'sound/ambience/ruins/ruins4.ogg',\ + 'sound/ambience/ruins/ruins5.ogg',\ + 'sound/ambience/ruins/ruins6.ogg'\ + ) + +// Similar to the above, but for more technology/signaling based ruins. +#define AMBIENCE_TECH_RUINS list(\ + 'sound/ambience/tech_ruins/tech_ruins1.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins2.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins3.ogg'\ + ) + +// The actual chapel room, and maybe some other places of worship. +#define AMBIENCE_CHAPEL list(\ + 'sound/ambience/chapel/chapel1.ogg',\ + 'sound/ambience/chapel/chapel2.ogg',\ + 'sound/ambience/chapel/chapel3.ogg',\ + 'sound/ambience/chapel/chapel4.ogg'\ + ) + +// For peaceful, serene areas, distinct from the Chapel. +#define AMBIENCE_HOLY list(\ + 'sound/ambience/holy/holy1.ogg',\ + 'sound/ambience/holy/holy2.ogg'\ + ) + +// Generic sounds for less special rooms. +#define AMBIENCE_GENERIC list(\ + 'sound/ambience/generic/generic1.ogg',\ + 'sound/ambience/generic/generic2.ogg',\ + 'sound/ambience/generic/generic3.ogg',\ + 'sound/ambience/generic/generic4.ogg'\ + ) + +// Sounds of PA announcements, presumably involving shuttles? +#define AMBIENCE_ARRIVALS list(\ + 'sound/ambience/arrivals/arrivals1.ogg',\ + 'sound/ambience/arrivals/arrivals2.ogg'\ + ) + +// Sounds suitable for being inside dark, tight corridors in the underbelly of the station. +#define AMBIENCE_MAINTENANCE list(\ + 'sound/ambience/maintenance/maintenance1.ogg',\ + 'sound/ambience/maintenance/maintenance2.ogg',\ + 'sound/ambience/maintenance/maintenance3.ogg',\ + 'sound/ambience/maintenance/maintenance4.ogg',\ + 'sound/ambience/maintenance/maintenance5.ogg',\ + 'sound/ambience/maintenance/maintenance6.ogg'\ + ) + +// Life support machinery at work, keeping everyone breathing. +#define AMBIENCE_ENGINEERING list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg'\ + ) + +// Creepy AI/borg stuff. +#define AMBIENCE_AI list(\ + 'sound/ambience/ai/ai1.ogg'\ + ) + +// Peaceful sounds when floating in the void. +#define AMBIENCE_SPACE list(\ + 'sound/ambience/space/space_serithi.ogg',\ + 'sound/ambience/space/space1.ogg'\ + ) + +// Vaguely spooky sounds when around dead things. +#define AMBIENCE_GHOSTLY list(\ + 'sound/ambience/ghostly/ghostly1.ogg',\ + 'sound/ambience/ghostly/ghostly2.ogg'\ + ) + +// Concerning sounds, for when one discovers something horrible happened in a PoI. +#define AMBIENCE_FOREBODING list(\ + 'sound/ambience/foreboding/foreboding1.ogg',\ + 'sound/ambience/foreboding/foreboding2.ogg'\ + ) + +// Ambience heard when aboveground on Sif and not in a Point of Interest. +#define AMBIENCE_SIF list(\ + 'sound/ambience/sif/sif1.ogg'\ + ) + +// If we ever add geothermal PoIs or other places that are really hot, this will do. +#define AMBIENCE_LAVA list(\ + 'sound/ambience/lava/lava1.ogg'\ + ) + +// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual. +#define AMBIENCE_UNHOLY list(\ + 'sound/ambience/unholy/unholy1.ogg'\ + ) + +// For the memes. +#define AMBIENCE_AESTHETIC list(\ + 'sound/ambience/vaporwave.ogg'\ + ) \ No newline at end of file diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 9d34ead4df..8a52e013f4 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -1,3 +1,18 @@ +//Timing subsystem +//Don't run if there is an identical unique timer active +#define TIMER_UNIQUE 0x1 +//For unique timers: Replace the old timer rather then not start this one +#define TIMER_OVERRIDE 0x2 +//Timing should be based on how timing progresses on clients, not the sever. +// tracking this is more expensive, +// should only be used in conjuction with things that have to progress client side, such as animate() or sound() +#define TIMER_CLIENT_TIME 0x4 +//Timer can be stopped using deltimer() +#define TIMER_STOPPABLE 0x8 +//To be used with TIMER_UNIQUE +//prevents distinguishing identical timers with the wait variable +#define TIMER_NO_HASH_WAIT 0x10 +#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something #define INITIALIZATION_INSSATOMS 0 //New should not call Initialize #define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE) @@ -7,6 +22,15 @@ #define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize #define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom +//type and all subtypes should always call Initialize in New() +#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\ + ..();\ + if(!initialized) {\ + args[1] = TRUE;\ + SSatoms.InitAtom(src, args);\ + }\ +} + // SS runlevels #define RUNLEVEL_INIT 0 // "Initialize Only" - Used for subsystems that should never be fired (Should also have SS_NO_FIRE set) @@ -32,9 +56,11 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_LIGHTING 0 #define INIT_ORDER_AIR -1 #define INIT_ORDER_PLANETS -4 +#define INIT_ORDER_HOLOMAPS -5 #define INIT_ORDER_OVERLAY -6 #define INIT_ORDER_XENOARCH -20 - +#define INIT_ORDER_CIRCUIT -21 + // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) diff --git a/code/__defines/supply.dm b/code/__defines/supply.dm new file mode 100644 index 0000000000..81b32d703d --- /dev/null +++ b/code/__defines/supply.dm @@ -0,0 +1,19 @@ +// Supply shuttle status defines +#define SUP_SHUTTLE_ERROR -1 // Error state +#define SUP_SHUTTLE_DOCKED 0 +#define SUP_SHUTTLE_UNDOCKED 1 +#define SUP_SHUTTLE_DOCKING 2 +#define SUP_SHUTTLE_UNDOCKING 3 +#define SUP_SHUTTLE_TRANSIT 4 +#define SUP_SHUTTLE_AWAY 5 + +// Supply computer access levels +#define SUP_SEND_SHUTTLE 0x1 // Send the shuttle back and forth +#define SUP_ACCEPT_ORDERS 0x2 // Accept orders +#define SUP_CONTRABAND 0x4 // Able to order contraband supply packs + +// Supply_order status values +#define SUP_ORDER_REQUESTED "Requested" +#define SUP_ORDER_APPROVED "Approved" +#define SUP_ORDER_DENIED "Denied" +#define SUP_ORDER_SHIPPED "Shipped" \ No newline at end of file diff --git a/code/_global_vars/lists/mapping.dm b/code/_global_vars/lists/mapping.dm new file mode 100644 index 0000000000..42e6f1baf3 --- /dev/null +++ b/code/_global_vars/lists/mapping.dm @@ -0,0 +1,32 @@ +GLOBAL_LIST_INIT(cardinal, list(NORTH, SOUTH, EAST, WEST)) +GLOBAL_LIST_INIT(cardinalz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN)) +GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN)) +GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir + 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, + 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, + 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, + 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 +)) + +GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. + 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, + 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16 + 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32 + 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48 +)) + +GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. + 4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15, + 16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16 + 32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32 + 48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48 +)) + +GLOBAL_LIST_INIT(cww_dir, list( // cww_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. + 8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15, + 16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16 + 32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32 + 48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48 +)) diff --git a/code/_global_vars/misc.dm b/code/_global_vars/misc.dm new file mode 100644 index 0000000000..de2779c45b --- /dev/null +++ b/code/_global_vars/misc.dm @@ -0,0 +1 @@ +GLOBAL_LIST_EMPTY(all_observable_events) \ No newline at end of file diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm new file mode 100644 index 0000000000..7fa2b5d162 --- /dev/null +++ b/code/_global_vars/mobs.dm @@ -0,0 +1,2 @@ +GLOBAL_LIST_EMPTY(admins) //all clients whom are admins +GLOBAL_PROTECT(admins) \ No newline at end of file diff --git a/code/_global_vars/sensitive.dm b/code/_global_vars/sensitive.dm new file mode 100644 index 0000000000..d4eda095ad --- /dev/null +++ b/code/_global_vars/sensitive.dm @@ -0,0 +1,11 @@ +// MySQL configuration +GLOBAL_REAL_VAR(sqladdress) = "localhost" +GLOBAL_REAL_VAR(sqlport) = "3306" +GLOBAL_REAL_VAR(sqldb) = "tgstation" +GLOBAL_REAL_VAR(sqllogin) = "root" +GLOBAL_REAL_VAR(sqlpass) = "" +// Feedback gathering sql connection +GLOBAL_REAL_VAR(sqlfdbkdb) = "test" +GLOBAL_REAL_VAR(sqlfdbklogin) = "root" +GLOBAL_REAL_VAR(sqlfdbkpass) = "" +GLOBAL_REAL_VAR(sqllogging) = 0 // Should we log deaths, population stats, etc.? \ No newline at end of file diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index e6f6383b87..dc3fdc005c 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -546,7 +546,7 @@ datum/projectile_data /proc/getOPressureDifferential(var/turf/loc) var/minp=16777216; var/maxp=0; - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) var/turf/simulated/T=get_turf(get_step(loc,dir)) var/cp=0 if(T && istype(T) && T.zone) @@ -567,7 +567,7 @@ datum/projectile_data /proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature")) var/list/temps = new/list(4) - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) var/direction switch(dir) if(NORTH) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 3b59d9600b..32af8ac846 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -634,7 +634,6 @@ as a single icon. Useful for when you want to manipulate an icon via the above a The _flatIcons list is a cache for generated icon files. */ -// Creates a single icon from a given /atom or /image. Only the first argument is required. /proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) // We start with a blank canvas, otherwise some icon procs crash silently var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon @@ -677,7 +676,7 @@ The _flatIcons list is a cache for generated icon files. var/curdir var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have - + //These should use the parent's direction (most likely) if(!A.dir || A.dir == SOUTH) curdir = defdir @@ -686,7 +685,7 @@ The _flatIcons list is a cache for generated icon files. //Let's check if the icon actually contains any diagonals, just skip if it's south to save (lot of) time if(curdir != SOUTH) - var/icon/test_icon + var/icon/test_icon var/directionals_exist = FALSE var/list/dirs_to_check = cardinal - SOUTH outer: @@ -824,6 +823,9 @@ The _flatIcons list is a cache for generated icon files. else return icon(flat, "", SOUTH) + + + /proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. @@ -874,10 +876,13 @@ The _flatIcons list is a cache for generated icon files. if(4) I.pixel_y++ overlays += I//And finally add the overlay. -/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created. +/proc/getHologramIcon(icon/A, safety=1, no_color = FALSE)//If safety is on, a new icon is not created. var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. - //flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. //VOREStation Removal for AI Vore effects - //flat_icon.ChangeOpacity(0.5)//Make it half transparent. //VOREStation Removal for AI Vore effects + /* VOREStation Removal - For AI Vore effects + if(!no_color) + flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. + flat_icon.ChangeOpacity(0.5)//Make it half transparent. + */ //VOREStation Removal End var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect. flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. return flat_icon diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 58348761f8..f75802eb45 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -135,6 +135,6 @@ var/round_start_time = 0 . += CEILING(i*DELTA_CALC, 1) sleep(i*world.tick_lag*DELTA_CALC) i *= 2 - while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit)) + while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, GLOB.CURRENT_TICKLIMIT)) #undef DELTA_CALC \ No newline at end of file diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 866a8b8a14..1377ce2adf 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1054,62 +1054,21 @@ proc/get_mob_with_client_list() //Quick type checks for some tools var/global/list/common_tools = list( /obj/item/stack/cable_coil, -/obj/item/weapon/wrench, +/obj/item/weapon/tool/wrench, /obj/item/weapon/weldingtool, -/obj/item/weapon/screwdriver, -/obj/item/weapon/wirecutters, +/obj/item/weapon/tool/screwdriver, +/obj/item/weapon/tool/wirecutters, /obj/item/device/multitool, -/obj/item/weapon/crowbar) +/obj/item/weapon/tool/crowbar) /proc/istool(O) if(O && is_type_in_list(O, common_tools)) return 1 return 0 -/proc/iswrench(O) - if(istype(O, /obj/item/weapon/wrench)) - return 1 - return 0 - -/proc/iswelder(O) - if(istype(O, /obj/item/weapon/weldingtool)) - return 1 - return 0 - -/proc/iscoil(O) - if(istype(O, /obj/item/stack/cable_coil)) - return 1 - return 0 - -/proc/iswirecutter(O) - if(istype(O, /obj/item/weapon/wirecutters)) - return 1 - return 0 - -/proc/isscrewdriver(O) - if(istype(O, /obj/item/weapon/screwdriver)) - return 1 - return 0 - -/proc/ismultitool(O) - if(istype(O, /obj/item/device/multitool)) - return 1 - return 0 - -/proc/iscrowbar(O) - if(istype(O, /obj/item/weapon/crowbar)) - return 1 - return 0 - -/proc/iswire(O) - if(istype(O, /obj/item/stack/cable_coil)) - return 1 - return 0 /proc/is_wire_tool(obj/item/I) - if(istype(I, /obj/item/device/multitool)) - return TRUE - if(istype(I, /obj/item/weapon/wirecutters)) + if(istype(I, /obj/item/device/multitool) || I.is_wirecutter()) return TRUE if(istype(I, /obj/item/device/assembly/signaler)) return TRUE @@ -1149,24 +1108,30 @@ proc/is_hot(obj/item/W as obj) //Whether or not the given item counts as sharp in terms of dealing damage /proc/is_sharp(obj/O as obj) - if (!O) return 0 - if (O.sharp) return 1 - if (O.edge) return 1 - return 0 + if(!O) + return FALSE + if(O.sharp) + return TRUE + if(O.edge) + return TRUE + return FALSE //Whether or not the given item counts as cutting with an edge in terms of removing limbs /proc/has_edge(obj/O as obj) - if (!O) return 0 - if (O.edge) return 1 - return 0 + if(!O) + return FALSE + if(O.edge) + return TRUE + return FALSE //Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. /proc/can_puncture(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT? - if(!W) return 0 - if(W.sharp) return 1 + if(!W) + return FALSE + if(W.sharp) + return TRUE return ( \ - W.sharp || \ - istype(W, /obj/item/weapon/screwdriver) || \ + W.is_screwdriver() || \ istype(W, /obj/item/weapon/pen) || \ istype(W, /obj/item/weapon/weldingtool) || \ istype(W, /obj/item/weapon/flame/lighter/zippo) || \ @@ -1485,3 +1450,6 @@ var/mob/dview/dview_mob = new return var/datum/D = list_or_datum D.vars[var_name] = var_value + +/proc/pass() + return diff --git a/code/_macros.dm b/code/_macros.dm index efd1e72edd..9cd11a6c15 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -65,9 +65,9 @@ #define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) -#define qdel_null_list(x) if(x) { for(var/y in x) { qdel(y) } ; x = null } +#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) } ; x = null } -#define qdel_null(x) if(x) { qdel(x) ; x = null } +#define QDEL_NULL(x) if(x) { qdel(x) ; x = null } #define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } @@ -91,4 +91,6 @@ // Null-safe L.Cut() #define LAZYCLEARLIST(L) if(L) L.Cut() // Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. -#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) \ No newline at end of file +#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) +// Turns LAZYINITLIST(L) L[K] = V into ... for associated lists +#define LAZYSET(L, K, V) if(!L) { L = list(); } L[K] = V; \ No newline at end of file diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index e64d4f946f..1dcc2bc955 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -76,7 +76,7 @@ if(A == loc || (A in loc) || (A in contents)) // No adjacency checks - var/resolved = A.attackby(W,src) + var/resolved = A.attackby(W, src, 1) if(!resolved && A && W) W.afterattack(A,src,1,params) return @@ -88,7 +88,7 @@ if(isturf(A) || isturf(A.loc)) if(A.Adjacent(src)) // see adjacent.dm - var/resolved = A.attackby(W, src) + var/resolved = A.attackby(W, src, 1) if(!resolved && A && W) W.afterattack(A, src, 1, params) return diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 7e03151fd6..2b29fa6492 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -31,7 +31,7 @@ if(owner) Remove(owner) target = null - qdel_null(button) + QDEL_NULL(button) return ..() /datum/action/proc/Grant(mob/living/T) @@ -48,7 +48,7 @@ if(button) if(T.client) T.client.screen -= button - qdel_null(button) + QDEL_NULL(button) T.actions.Remove(src) T.update_action_buttons() owner = null diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 3a8d8696ce..8b32d1447e 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -15,7 +15,7 @@ var/list/global_huds = list( global_hud.meson, global_hud.science, global_hud.material, - global_hud.holomap // VOREStation Edit - Holomap + global_hud.holomap ) /datum/hud/var/obj/screen/grab_intent @@ -36,7 +36,7 @@ var/list/global_huds = list( var/obj/screen/meson var/obj/screen/science var/obj/screen/material - var/obj/screen/holomap // VOREStation Edit - Holomap + var/obj/screen/holomap /datum/global_hud/proc/setup_overlay(var/icon_state) var/obj/screen/screen = new /obj/screen() @@ -92,19 +92,17 @@ var/list/global_huds = list( science = setup_overlay("science_hud") material = setup_overlay("material_hud") - // VOREStation Edit Begin - Holomap // The holomap screen object is actually totally invisible. // Station maps work by setting it as an images location before sending to client, not // actually changing the icon or icon state of the screen object itself! // Why do they work this way? I don't know really, that is how /vg designed them, but since they DO - // work this way, we can take advantage of their immutability by making them part of + // work this way, we can take advantage of their immutability by making them part of // the global_hud (something we have and /vg doesn't) instead of an instance per mob. holomap = new /obj/screen() holomap.name = "holomap" holomap.icon = null holomap.screen_loc = ui_holomap holomap.mouse_opacity = 0 - // VOREStation Edit End var/obj/screen/O var/i diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d583084791..d1a61ec8f4 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -28,26 +28,29 @@ avoid code duplication. This includes items that may sometimes act as a standard return //I would prefer to rename this to attack(), but that would involve touching hundreds of files. -/obj/item/proc/resolve_attackby(atom/A, mob/user) +/obj/item/proc/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1) pre_attack(A, user) add_fingerprint(user) - return A.attackby(src, user) + return A.attackby(src, user, attack_modifier) // No comment -/atom/proc/attackby(obj/item/W, mob/user) +/atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier) return -/atom/movable/attackby(obj/item/W, mob/user) +/atom/movable/attackby(obj/item/W, mob/user, var/attack_modifier) if(!(W.flags & NOBLUDGEON)) visible_message("[src] has been hit by [user] with [W].") -/mob/living/attackby(obj/item/I, mob/user) +/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier) if(!ismob(user)) return 0 - if(can_operate(src) && I.do_surgery(src,user)) //Surgery - return 1 - if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Code - return I.attack(src, user, user.zone_sel.selecting) + if(can_operate(src) && I.do_surgery(src,user)) + if(I.can_do_surgery(src,user)) + return 1 + else + return 0 + if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course. + return I.attack(src, user, user.zone_sel.selecting, attack_modifier) // Used to get how fast a mob should attack, and influences click delay. // This is just for inheritence. @@ -71,7 +74,7 @@ avoid code duplication. This includes items that may sometimes act as a standard return //I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files. -/obj/item/proc/attack(mob/living/M, mob/living/user, var/target_zone) +/obj/item/proc/attack(mob/living/M, mob/living/user, var/target_zone, var/attack_modifier) if(!force || (flags & NOBLUDGEON)) return 0 if(M == user && user.a_intent != I_HURT) @@ -90,12 +93,12 @@ avoid code duplication. This includes items that may sometimes act as a standard var/hit_zone = M.resolve_item_attack(src, user, target_zone) if(hit_zone) - apply_hit_effect(M, user, hit_zone) + apply_hit_effect(M, user, hit_zone, attack_modifier) return 1 //Called when a weapon is used to make a successful melee attack on a mob. Returns the blocked result -/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) +/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone, var/attack_modifier) user.break_cloak() if(hitsound) playsound(loc, hitsound, 50, 1, -1) @@ -104,7 +107,10 @@ avoid code duplication. This includes items that may sometimes act as a standard for(var/datum/modifier/M in user.modifiers) if(!isnull(M.outgoing_melee_damage_percent)) power *= M.outgoing_melee_damage_percent + if(HULK in user.mutations) power *= 2 - return target.hit_with_weapon(src, user, power, hit_zone) + power *= attack_modifier + + return target.hit_with_weapon(src, user, power, hit_zone) \ No newline at end of file diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 26c1680421..229e717e45 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -154,7 +154,7 @@ var/const/tk_maxrange = 15 O.anchored = 1 O.density = 0 O.layer = FLY_LAYER - O.set_dir(pick(cardinal)) + O.set_dir(pick(GLOB.cardinal)) O.icon = 'icons/effects/effects.dmi' O.icon_state = "nothing" flick("empdisable",O) diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm index 21d2f8e5f0..0f720600bc 100644 --- a/code/controllers/Processes/nanoui.dm +++ b/code/controllers/Processes/nanoui.dm @@ -4,10 +4,10 @@ /datum/controller/process/nanoui/statProcess() ..() - stat(null, "[nanomanager.processing_uis.len] UIs") + stat(null, "[GLOB.nanomanager.processing_uis.len] UIs") /datum/controller/process/nanoui/doWork() - for(last_object in nanomanager.processing_uis) + for(last_object in GLOB.nanomanager.processing_uis) var/datum/nanoui/NUI = last_object if(istype(NUI) && !QDELETED(NUI)) try @@ -16,4 +16,4 @@ catchException(e, NUI) else catchBadType(NUI) - nanomanager.processing_uis -= NUI \ No newline at end of file + GLOB.nanomanager.processing_uis -= NUI \ No newline at end of file diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm index 5b3e4f6f2b..2234b7a9ac 100644 --- a/code/controllers/Processes/supply.dm +++ b/code/controllers/Processes/supply.dm @@ -8,15 +8,22 @@ //Computers are in /code/game/machinery/computer/supply.dm /datum/supply_order - var/ordernum - var/datum/supply_packs/object = null - var/orderedby = null - var/comment = null + var/ordernum // Unfabricatable index + var/index // Fabricatable index + var/datum/supply_pack/object = null + var/cost // Cost of the supply pack (Fabricatable) (Changes not reflected when purchasing supply packs, this is cosmetic only) + var/name // Name of the supply pack datum (Fabricatable) + var/ordered_by = null // Who requested the order + var/comment = null // What reason was given for the order + var/approved_by = null // Who approved the order + var/ordered_at // Date and time the order was requested at + var/approved_at // Date and time the order was approved at + var/status // [Requested, Accepted, Denied, Shipped] /datum/exported_crate var/name var/value - + var/list/contents var/datum/controller/supply/supply_controller = new() @@ -25,25 +32,29 @@ var/datum/controller/supply/supply_controller = new() var/points = 50 var/points_per_process = 1.5 var/points_per_slip = 2 - var/points_per_platinum = 5 // 5 points per sheet - var/points_per_phoron = 5 var/points_per_money = 0.02 // 1 point for $50 //control var/ordernum - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/supply_packs = list() - var/list/exported_crates = list() + var/list/shoppinglist = list() // Approved orders + var/list/supply_pack = list() // All supply packs + var/list/exported_crates = list() // Crates sent from the station + var/list/order_history = list() // History of orders, showing edits made by users + var/list/adm_order_history = list() // Complete history of all orders, for admin use + var/list/adm_export_history = list() // Complete history of all crates sent back on the shuttle, for admin use //shuttle movement var/movetime = 1200 var/datum/shuttle/ferry/supply/shuttle + var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points + "phoron" = 5, + "platinum" = 5 + ) /datum/controller/supply/New() ordernum = rand(1,9000) - for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) - var/datum/supply_packs/P = new typepath() - supply_packs[P.name] = P + for(var/typepath in subtypesof(/datum/supply_pack)) + var/datum/supply_pack/P = new typepath() + supply_pack[P.name] = P /datum/controller/process/supply/setup() name = "supply controller" @@ -80,23 +91,17 @@ var/datum/controller/supply/supply_controller = new() callHook("sell_shuttle", list(area_shuttle)); - var/phoron_count = 0 - var/plat_count = 0 - var/money_count = 0 - - exported_crates = list() - for(var/atom/movable/MA in area_shuttle) if(MA.anchored) continue + var/datum/exported_crate/EC = new /datum/exported_crate() + EC.name = "\proper[MA.name]" + EC.value = 0 + EC.contents = list() + // Must be in a crate! if(istype(MA,/obj/structure/closet/crate)) - var/oldpoints = points - var/oldphoron = phoron_count - var/oldplatinum = plat_count - var/oldmoney = money_count - var/obj/structure/closet/crate/CR = MA callHook("sell_crate", list(CR, area_shuttle)) @@ -104,44 +109,63 @@ var/datum/controller/supply/supply_controller = new() var/find_slip = 1 for(var/atom/A in CR) + EC.contents[++EC.contents.len] = list( + "object" = "\proper[A.name]", + "value" = 0, + "quantity" = 1 + ) + // Sell manifests if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) var/obj/item/weapon/paper/manifest/slip = A if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense points += points_per_slip + EC.contents[EC.contents.len]["value"] = points_per_slip find_slip = 0 continue // Sell phoron and platinum if(istype(A, /obj/item/stack)) var/obj/item/stack/P = A - switch(P.get_material_name()) - if("phoron") - phoron_count += P.get_amount() - if("platinum") - plat_count += P.get_amount() + if(material_points_conversion[P.get_material_name()]) + EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.get_material_name()] + EC.contents[EC.contents.len]["quantity"] = P.get_amount() + EC.value += EC.contents[EC.contents.len]["value"] //Sell spacebucks if(istype(A, /obj/item/weapon/spacecash)) var/obj/item/weapon/spacecash/cashmoney = A - money_count += cashmoney.worth + EC.contents[EC.contents.len]["value"] = cashmoney.worth * points_per_money + EC.contents[EC.contents.len]["quantity"] = cashmoney.worth + EC.value += EC.contents[EC.contents.len]["value"] - var/datum/exported_crate/EC = new /datum/exported_crate() - EC.name = CR.name - EC.value = points - oldpoints - EC.value += (phoron_count - oldphoron) * points_per_phoron - EC.value += (plat_count - oldplatinum) * points_per_platinum - EC.value += (money_count - oldmoney) * points_per_money - exported_crates += EC + + + // Make a log of it, but it wasn't shipped properly, and so isn't worth anything + else + EC.contents = list( + "error" = "Error: Product was improperly packaged. Payment rendered null under terms of agreement." + ) + + exported_crates += EC + points += EC.value + + // Duplicate the receipt for the admin-side log + var/datum/exported_crate/adm = new() + adm.name = EC.name + adm.value = EC.value + adm.contents = deepCopyList(EC.contents) + adm_export_history += adm qdel(MA) - points += phoron_count * points_per_phoron - points += plat_count * points_per_platinum - points += money_count * points_per_money - //Buying /datum/controller/supply/proc/buy() + var/list/shoppinglist = list() + for(var/datum/supply_order/SO in order_history) + if(SO.status == SUP_ORDER_APPROVED) + shoppinglist += SO + if(!shoppinglist.len) return @@ -165,17 +189,16 @@ var/datum/controller/supply/supply_controller = new() continue clear_turfs += T - for(var/S in shoppinglist) + for(var/datum/supply_order/SO in shoppinglist) if(!clear_turfs.len) break var/i = rand(1,clear_turfs.len) var/turf/pickedloc = clear_turfs[i] clear_turfs.Cut(i,i+1) - shoppinglist -= S - var/datum/supply_order/SO = S - var/datum/supply_packs/SP = SO.object + SO.status = SUP_ORDER_SHIPPED + var/datum/supply_pack/SP = SO.object var/obj/A = new SP.containertype(pickedloc) A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" @@ -202,8 +225,8 @@ var/datum/controller/supply/supply_controller = new() log_debug("Supply pack with invalid access restriction [SP.access] encountered!") var/list/contains - if(istype(SP,/datum/supply_packs/randomised)) - var/datum/supply_packs/randomised/SPR = SP + if(istype(SP,/datum/supply_pack/randomised)) + var/datum/supply_pack/randomised/SPR = SP contains = list() if(SPR.contains.len) for(var/j=1,j<=SPR.num_contained,j++) @@ -227,3 +250,141 @@ var/datum/controller/supply/supply_controller = new() slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" return + +// Will attempt to purchase the specified order, returning TRUE on success, FALSE on failure +/datum/controller/supply/proc/approve_order(var/datum/supply_order/O, var/mob/user) + // Not enough points to purchase the crate + if(supply_controller.points <= O.object.cost) + return FALSE + + // Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history + var/datum/supply_order/adm_order + for(var/datum/supply_order/temp in adm_order_history) + if(temp.ordernum == O.ordernum) + adm_order = temp + break + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + // Update order status + O.status = SUP_ORDER_APPROVED + O.approved_by = idname + O.approved_at = stationdate2text() + " - " + stationtime2text() + // Update admin-side mirror + adm_order.status = SUP_ORDER_APPROVED + adm_order.approved_by = idname + adm_order.approved_at = stationdate2text() + " - " + stationtime2text() + + // Deduct cost + supply_controller.points -= O.object.cost + return TRUE + +// Will deny the specified order. Only useful if the order is currently requested, but available at any status +/datum/controller/supply/proc/deny_order(var/datum/supply_order/O, var/mob/user) + // Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history + var/datum/supply_order/adm_order + for(var/datum/supply_order/temp in adm_order_history) + if(temp.ordernum == O.ordernum) + adm_order = temp + break + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + // Update order status + O.status = SUP_ORDER_DENIED + O.approved_by = idname + O.approved_at = stationdate2text() + " - " + stationtime2text() + // Update admin-side mirror + adm_order.status = SUP_ORDER_DENIED + adm_order.approved_by = idname + adm_order.approved_at = stationdate2text() + " - " + stationtime2text() + return + +// Will deny all requested orders +/datum/controller/supply/proc/deny_all_pending(var/mob/user) + for(var/datum/supply_order/O in order_history) + if(O.status == SUP_ORDER_REQUESTED) + deny_order(O, user) + +// Will delete the specified order from the user-side list +/datum/controller/supply/proc/delete_order(var/datum/supply_order/O, var/mob/user) + // Making sure they know what they're doing + if(alert(user, "Are you sure you want to delete this record? If it has been approved, cargo points will NOT be refunded!", "Delete Record","No","Yes") == "Yes") + if(alert(user, "Are you really sure? There is no way to recover the order once deleted.", "Delete Record", "No", "Yes") == "Yes") + log_admin("[key_name(user)] has deleted supply order \ref[O] [O] from the user-side order history.") + supply_controller.order_history -= O + return + +// Will generate a new, requested order, for the given supply pack type +/datum/controller/supply/proc/create_order(var/datum/supply_pack/S, var/mob/user, var/reason) + var/datum/supply_order/new_order = new() + var/datum/supply_order/adm_order = new() // Admin-recorded order must be a separate copy in memory, or user-made edits will corrupt it + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + new_order.ordernum = ++ordernum // Ordernum is used to track the order between the playerside list of orders and the adminside list + new_order.index = new_order.ordernum // Index can be fabricated, or falsified. Ordernum is a permanent marker used to track the order + new_order.object = S + new_order.name = S.name + new_order.cost = S.cost + new_order.ordered_by = idname + new_order.comment = reason + new_order.ordered_at = stationdate2text() + " - " + stationtime2text() + new_order.status = SUP_ORDER_REQUESTED + + adm_order.ordernum = new_order.ordernum + adm_order.index = new_order.index + adm_order.object = new_order.object + adm_order.name = new_order.name + adm_order.cost = new_order.cost + adm_order.ordered_by = new_order.ordered_by + adm_order.comment = new_order.comment + adm_order.ordered_at = new_order.ordered_at + adm_order.status = new_order.status + + order_history += new_order + adm_order_history += adm_order + +// Will delete the specified export receipt from the user-side list +/datum/controller/supply/proc/delete_export(var/datum/exported_crate/E, var/mob/user) + // Making sure they know what they're doing + if(alert(user, "Are you sure you want to delete this record?", "Delete Record","No","Yes") == "Yes") + if(alert(user, "Are you really sure? There is no way to recover the receipt once deleted.", "Delete Record", "No", "Yes") == "Yes") + log_admin("[key_name(user)] has deleted export receipt \ref[E] [E] from the user-side export history.") + supply_controller.exported_crates -= E + return + +// Will add an item entry to the specified export receipt on the user-side list +/datum/controller/supply/proc/add_export_item(var/datum/exported_crate/E, var/mob/user) + var/new_name = input(user, "Name", "Please enter the name of the item.") as null|text + if(!new_name) + return + + var/new_quantity = input(user, "Name", "Please enter the quantity of the item.") as null|num + if(!new_quantity) + return + + var/new_value = input(user, "Name", "Please enter the value of the item.") as null|num + if(!new_value) + return + + E.contents[++E.contents.len] = list( + "object" = new_name, + "quantity" = new_quantity, + "value" = new_value + ) diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm new file mode 100644 index 0000000000..fa7b917194 --- /dev/null +++ b/code/controllers/globals.dm @@ -0,0 +1,59 @@ +GLOBAL_REAL(GLOB, /datum/controller/global_vars) + +/datum/controller/global_vars + name = "Global Variables" + + var/list/gvars_datum_protected_varlist + var/list/gvars_datum_in_built_vars + var/list/gvars_datum_init_order + +/datum/controller/global_vars/New() + if(GLOB) + CRASH("Multiple instances of global variable controller created") + GLOB = src + + var/datum/controller/exclude_these = new + gvars_datum_in_built_vars = exclude_these.vars + list("gvars_datum_protected_varlist", "gvars_datum_in_built_vars", "gvars_datum_init_order") + + log_world("[vars.len - gvars_datum_in_built_vars.len] global variables") + + Initialize(exclude_these) + +/datum/controller/global_vars/Destroy(force) + crash_with("There was an attempt to qdel the global vars holder!") + if(!force) + return QDEL_HINT_LETMELIVE + + QDEL_NULL(statclick) + gvars_datum_protected_varlist.Cut() + gvars_datum_in_built_vars.Cut() + + GLOB = null + + return ..() + +/datum/controller/global_vars/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + stat("Globals:", statclick.update("Edit")) + +/datum/controller/global_vars/VV_hidden() + return ..() + gvars_datum_protected_varlist + +/datum/controller/global_vars/Initialize(var/exclude_these) + gvars_datum_init_order = list() + gvars_datum_protected_varlist = list("gvars_datum_protected_varlist") + + //See https://github.com/tgstation/tgstation/issues/26954 + for(var/I in typesof(/datum/controller/global_vars/proc)) + var/CLEANBOT_RETURNS = "[I]" + pass(CLEANBOT_RETURNS) + + for(var/I in (vars - gvars_datum_in_built_vars)) + var/start_tick = world.time + call(src, "InitGlobal[I]")() + var/end_tick = world.time + if(end_tick - start_tick) + warning("Global [I] slept during initialization!") + QDEL_NULL(exclude_these) \ No newline at end of file diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 997e0fd3e0..050251fb0d 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -6,7 +6,21 @@ * Odds are, there is a reason * **/ -var/datum/controller/master/Master = new() + +//This is the ABSOLUTE ONLY THING that should init globally like this +GLOBAL_REAL(Master, /datum/controller/master) = new + +//THIS IS THE INIT ORDER +//Master -> SSPreInit -> GLOB -> world -> config -> SSInit -> Failsafe +//GOT IT MEMORIZED? +GLOBAL_VAR_INIT(MC_restart_clear, 0) +GLOBAL_VAR_INIT(MC_restart_timeout, 0) +GLOBAL_VAR_INIT(MC_restart_count, 0) + +//current tick limit, assigned by the queue controller before running a subsystem. +//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits +GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) + /datum/controller/master name = "Master" @@ -48,10 +62,6 @@ var/datum/controller/master/Master = new() var/static/restart_timeout = 0 var/static/restart_count = 0 - //current tick limit, assigned before running a subsystem. - //used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits - var/static/current_ticklimit = TICK_LIMIT_RUNNING - /datum/controller/master/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. var/list/_subsystems = list() @@ -67,6 +77,9 @@ var/datum/controller/master/Master = new() _subsystems += new I Master = src + if(!GLOB) + new /datum/controller/global_vars + /datum/controller/master/Destroy() ..() // Tell qdel() to Del() this object. @@ -85,14 +98,14 @@ var/datum/controller/master/Master = new() // -1 if we encountered a runtime trying to recreate it /proc/Recreate_MC() . = -1 //so if we runtime, things know we failed - if (world.time < Master.restart_timeout) + if (world.time < GLOB.MC_restart_timeout) return 0 - if (world.time < Master.restart_clear) - Master.restart_count *= 0.5 + if (world.time < GLOB.MC_restart_clear) + GLOB.MC_restart_count *= 0.5 - var/delay = 50 * ++Master.restart_count - Master.restart_timeout = world.time + delay - Master.restart_clear = world.time + (delay * 2) + var/delay = 50 * ++GLOB.MC_restart_count + GLOB.MC_restart_timeout = world.time + delay + GLOB.MC_restart_clear = world.time + (delay * 2) Master.processing = FALSE //stop ticking this one try new/datum/controller/master() @@ -136,6 +149,7 @@ var/datum/controller/master/Master = new() if (istype(Master.subsystems)) if(FireHim) Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one + subsystems = Master.subsystems current_runlevel = Master.current_runlevel StartProcessing(10) @@ -162,13 +176,13 @@ var/datum/controller/master/Master = new() var/start_timeofday = REALTIMEOFDAY // Initialize subsystems. - current_ticklimit = config.tick_limit_mc_init + GLOB.CURRENT_TICKLIMIT = config.tick_limit_mc_init for (var/datum/controller/subsystem/SS in subsystems) if (SS.flags & SS_NO_INIT) continue SS.Initialize(REALTIMEOFDAY) CHECK_TICK - current_ticklimit = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/time = (REALTIMEOFDAY - start_timeofday) / 10 var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" @@ -277,7 +291,7 @@ var/datum/controller/master/Master = new() tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) var/starting_tick_usage = TICK_USAGE if (processing <= 0) - current_ticklimit = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue @@ -286,7 +300,7 @@ var/datum/controller/master/Master = new() // (because sleeps are processed in the order received, longer sleeps are more likely to run first) if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit. sleep_delta *= 2 - current_ticklimit = TICK_LIMIT_RUNNING * 0.5 + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING * 0.5 sleep(world.tick_lag * (processing * sleep_delta)) continue @@ -332,7 +346,7 @@ var/datum/controller/master/Master = new() if (!error_level) iteration++ error_level++ - current_ticklimit = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue @@ -344,7 +358,7 @@ var/datum/controller/master/Master = new() if (!error_level) iteration++ error_level++ - current_ticklimit = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue error_level-- @@ -355,9 +369,9 @@ var/datum/controller/master/Master = new() iteration++ last_run = world.time src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) - current_ticklimit = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (processing * sleep_delta <= world.tick_lag) - current_ticklimit -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick + GLOB.CURRENT_TICKLIMIT -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick sleep(world.tick_lag * (processing * sleep_delta)) @@ -449,7 +463,7 @@ var/datum/controller/master/Master = new() // Reduce tick allocation for subsystems that overran on their last tick. tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun) - current_ticklimit = round(TICK_USAGE + tick_precentage) + GLOB.CURRENT_TICKLIMIT = round(TICK_USAGE + tick_precentage) if (!(queue_node_flags & SS_TICKER)) ran_non_ticker = TRUE diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index e203650066..2695a39373 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -53,4 +53,4 @@ datum/controller/game_controller/proc/setup_objects() populate_antag_type_list() //Set up spawn points. - populate_spawn_points() + populate_spawn_points() \ No newline at end of file diff --git a/code/controllers/subsystems/circuits.dm b/code/controllers/subsystems/circuits.dm new file mode 100644 index 0000000000..8fda048c60 --- /dev/null +++ b/code/controllers/subsystems/circuits.dm @@ -0,0 +1,96 @@ +// +// This is for custom circuits, mostly the initialization of global properties about them. +// Might make this also process them in the future if its better to do that than using the obj ticker. +// +SUBSYSTEM_DEF(circuit) + name = "Circuit" + init_order = INIT_ORDER_CIRCUIT + flags = SS_NO_FIRE + var/list/all_components = list() // Associative list of [component_name]:[component_path] pairs + var/list/cached_components = list() // Associative list of [component_path]:[component] pairs + var/list/all_assemblies = list() // Associative list of [assembly_name]:[assembly_path] pairs + var/list/cached_assemblies = list() // Associative list of [assembly_path]:[assembly] pairs + var/list/all_circuits = list() // Associative list of [circuit_name]:[circuit_path] pairs + var/list/circuit_fabricator_recipe_list = list() // Associative list of [category_name]:[list_of_circuit_paths] pairs +// var/cost_multiplier = MINERAL_MATERIAL_AMOUNT / 10 // Each circuit cost unit is 200cm3 + +/datum/controller/subsystem/circuit/Recover() + flags |= SS_NO_INIT // Make extra sure we don't initialize twice. + +/datum/controller/subsystem/circuit/Initialize(timeofday) + circuits_init() + return ..() + +/datum/controller/subsystem/circuit/proc/circuits_init() + //Cached lists for free performance + for(var/path in typesof(/obj/item/integrated_circuit)) + var/obj/item/integrated_circuit/IC = path + var/name = initial(IC.name) + all_components[name] = path // Populating the component lists + cached_components[IC] = new path + + if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH))) + continue + + var/category = initial(IC.category_text) + if(!circuit_fabricator_recipe_list[category]) + circuit_fabricator_recipe_list[category] = list() + var/list/category_list = circuit_fabricator_recipe_list[category] + category_list += IC // Populating the fabricator categories + + for(var/path in typesof(/obj/item/device/electronic_assembly)) + var/obj/item/device/electronic_assembly/A = path + var/name = initial(A.name) + all_assemblies[name] = path + cached_assemblies[A] = new path + + + circuit_fabricator_recipe_list["Assemblies"] = list( + /obj/item/device/electronic_assembly/default, + /obj/item/device/electronic_assembly/calc, + /obj/item/device/electronic_assembly/clam, + /obj/item/device/electronic_assembly/simple, + /obj/item/device/electronic_assembly/hook, + /obj/item/device/electronic_assembly/pda, + /obj/item/device/electronic_assembly/tiny/default, + /obj/item/device/electronic_assembly/tiny/cylinder, + /obj/item/device/electronic_assembly/tiny/scanner, + /obj/item/device/electronic_assembly/tiny/hook, + /obj/item/device/electronic_assembly/tiny/box, + /obj/item/device/electronic_assembly/medium/default, + /obj/item/device/electronic_assembly/medium/box, + /obj/item/device/electronic_assembly/medium/clam, + /obj/item/device/electronic_assembly/medium/medical, + /obj/item/device/electronic_assembly/medium/gun, + /obj/item/device/electronic_assembly/medium/radio, + /obj/item/device/electronic_assembly/large/default, + /obj/item/device/electronic_assembly/large/scope, + /obj/item/device/electronic_assembly/large/terminal, + /obj/item/device/electronic_assembly/large/arm, + /obj/item/device/electronic_assembly/large/tall, + /obj/item/device/electronic_assembly/large/industrial, + /obj/item/device/electronic_assembly/drone/default, + /obj/item/device/electronic_assembly/drone/arms, + /obj/item/device/electronic_assembly/drone/secbot, + /obj/item/device/electronic_assembly/drone/medbot, + /obj/item/device/electronic_assembly/drone/genbot, + /obj/item/device/electronic_assembly/drone/android, + /obj/item/device/electronic_assembly/wallmount/tiny, + /obj/item/device/electronic_assembly/wallmount/light, + /obj/item/device/electronic_assembly/wallmount, + /obj/item/device/electronic_assembly/wallmount/heavy, + /obj/item/weapon/implant/integrated_circuit, + /obj/item/clothing/under/circuitry, + /obj/item/clothing/gloves/circuitry, + /obj/item/clothing/glasses/circuitry, + /obj/item/clothing/shoes/circuitry, + /obj/item/clothing/head/circuitry, + /obj/item/clothing/ears/circuitry, + /obj/item/clothing/suit/circuitry + ) + + circuit_fabricator_recipe_list["Tools"] = list( + /obj/item/device/integrated_electronics/wirer, + /obj/item/device/integrated_electronics/debugger, + /obj/item/device/integrated_electronics/detailer + ) diff --git a/code/controllers/subsystems/holomaps_vr.dm b/code/controllers/subsystems/holomaps.dm similarity index 100% rename from code/controllers/subsystems/holomaps_vr.dm rename to code/controllers/subsystems/holomaps.dm diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index a163a3b1e7..f7fc49b661 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -57,6 +57,7 @@ SUBSYSTEM_DEF(planets) else P.planet_walls -= T T.vis_contents -= P.weather_holder.visuals + T.vis_contents -= P.weather_holder.special_visuals /datum/controller/subsystem/planets/proc/allocateTurfs(var/initial = FALSE) var/list/currentlist = new_outdoor_turfs @@ -67,6 +68,7 @@ SUBSYSTEM_DEF(planets) var/datum/planet/P = z_to_planet[OT.z] P.planet_floors |= OT OT.vis_contents |= P.weather_holder.visuals + OT.vis_contents |= P.weather_holder.special_visuals if(!initial && MC_TICK_CHECK) return @@ -85,6 +87,7 @@ SUBSYSTEM_DEF(planets) var/datum/planet/P = z_to_planet[T.z] P.planet_floors -= T T.vis_contents -= P.weather_holder.visuals + T.vis_contents -= P.weather_holder.special_visuals /datum/controller/subsystem/planets/fire(resumed = 0) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 363acf0d69..af465b3e5e 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -125,7 +125,7 @@ debug_variables(alarm_manager) feedback_add_details("admin_verb", "DAlarm") if("Nano") - debug_variables(nanomanager) + debug_variables(GLOB.nanomanager) feedback_add_details("admin_verb", "DNano") if("Chemistry") debug_variables(chemistryProcess) diff --git a/code/datums/autolathe/tools.dm b/code/datums/autolathe/tools.dm index 70ea299ec8..d0aa2aa196 100644 --- a/code/datums/autolathe/tools.dm +++ b/code/datums/autolathe/tools.dm @@ -1,6 +1,6 @@ /datum/category_item/autolathe/tools/crowbar name = "crowbar" - path =/obj/item/weapon/crowbar + path =/obj/item/weapon/tool/crowbar /datum/category_item/autolathe/tools/multitool name = "multitool" @@ -21,15 +21,15 @@ /datum/category_item/autolathe/tools/screwdriver name = "screwdriver" - path =/obj/item/weapon/screwdriver + path =/obj/item/weapon/tool/screwdriver /datum/category_item/autolathe/tools/wirecutters name = "wirecutters" - path =/obj/item/weapon/wirecutters + path =/obj/item/weapon/tool/wirecutters /datum/category_item/autolathe/tools/wrench name = "wrench" - path =/obj/item/weapon/wrench + path =/obj/item/weapon/tool/wrench /datum/category_item/autolathe/tools/hatchet name = "hatchet" diff --git a/code/datums/datum.dm b/code/datums/datum.dm index a9fea93f9d..fd58220657 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -19,5 +19,5 @@ /datum/proc/Destroy(force=FALSE) weakref = null // Clear this reference to ensure it's kept for as brief duration as possible. tag = null - nanomanager.close_uis(src) + GLOB.nanomanager.close_uis(src) return QDEL_HINT_QUEUE diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 0bda144e8a..e2d3dbdfd4 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,105 +1,152 @@ #define FORWARD -1 #define BACKWARD 1 + +// As of August 4th, 2018, these datums are only used in Mech construction. /datum/construction var/list/steps var/atom/holder var/result var/list/steps_desc - New(atom) - ..() - holder = atom - if(!holder) //don't want this without a holder - spawn - qdel(src) +/datum/construction/New(atom) + ..() + holder = atom + if(!holder) //don't want this without a holder + spawn + qdel(src) + set_desc(steps.len) + return + +/datum/construction/proc/next_step() + steps.len-- + if(!steps.len) + spawn_result() + else set_desc(steps.len) - return + return - proc/next_step() - steps.len-- - if(!steps.len) - spawn_result() - else - set_desc(steps.len) - return +/datum/construction/proc/action(var/obj/item/I,mob/user as mob) + return - proc/action(atom/used_atom,mob/user as mob) - return +/datum/construction/proc/check_step(var/obj/item/I,mob/user as mob) //check last step only + var/valid_step = is_right_key(I) + if(valid_step) + if(custom_action(valid_step, I, user)) + next_step() + return 1 + return 0 - proc/check_step(atom/used_atom,mob/user as mob) //check last step only - var/valid_step = is_right_key(used_atom) - if(valid_step) - if(custom_action(valid_step, used_atom, user)) - next_step() +/datum/construction/proc/is_right_key(var/obj/item/I) // returns current step num if I is of the right type. + var/list/L = steps[steps.len] + switch(L["key"]) + if(IS_SCREWDRIVER) + if(I.is_screwdriver()) + return steps.len + if(IS_CROWBAR) + if(I.is_crowbar()) + return steps.len + if(IS_WIRECUTTER) + if(I.is_wirecutter()) + return steps.len + if(IS_WRENCH) + if(I.is_wrench()) + return steps.len + + if(istype(I, L["key"])) + return steps.len + return 0 + +/datum/construction/proc/custom_action(step, I, user) + return 1 + +/datum/construction/proc/check_all_steps(var/obj/item/I,mob/user as mob) //check all steps, remove matching one. + for(var/i=1;i<=steps.len;i++) + var/list/L = steps[i]; + if(istype(I, L["key"])) + if(custom_action(i, I, user)) + steps[i]=null;//stupid byond list from list removal... + listclearnulls(steps); + if(!steps.len) + spawn_result() return 1 - return 0 - - proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. - var/list/L = steps[steps.len] - if(istype(used_atom, L["key"])) - return steps.len - return 0 - - proc/custom_action(step, used_atom, user) - return 1 - - proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) - var/list/L = steps[i]; - if(istype(used_atom, L["key"])) - if(custom_action(i, used_atom, user)) - steps[i]=null;//stupid byond list from list removal... - listclearnulls(steps); - if(!steps.len) - spawn_result() - return 1 - return 0 + return 0 - proc/spawn_result() - if(result) - new result(get_turf(holder)) - spawn() - qdel(holder) - return +/datum/construction/proc/spawn_result() + if(result) + new result(get_turf(holder)) + spawn() + qdel(holder) + return - proc/set_desc(index as num) - var/list/step = steps[index] - holder.desc = step["desc"] - return +/datum/construction/proc/set_desc(index as num) + var/list/step = steps[index] + holder.desc = step["desc"] + return + +// Reversible /datum/construction/reversible var/index - New(atom) - ..() - index = steps.len - return +/datum/construction/reversible/New(atom) + ..() + index = steps.len + return - proc/update_index(diff as num) - index+=diff - if(index==0) - spawn_result() - else - set_desc(index) - return +/datum/construction/reversible/proc/update_index(diff as num) + index+=diff + if(index==0) + spawn_result() + else + set_desc(index) + return - is_right_key(atom/used_atom) // returns index step - var/list/L = steps[index] - if(istype(used_atom, L["key"])) - return FORWARD //to the first step -> forward - else if(L["backkey"] && istype(used_atom, L["backkey"])) - return BACKWARD //to the last step -> backwards - return 0 +/datum/construction/reversible/is_right_key(var/obj/item/I) // returns index step + var/list/L = steps[index] - check_step(atom/used_atom,mob/user as mob) - var/diff = is_right_key(used_atom) - if(diff) - if(custom_action(index, diff, used_atom, user)) - update_index(diff) - return 1 - return 0 + switch(L["key"]) + if(IS_SCREWDRIVER) + if(I.is_screwdriver()) + return FORWARD + if(IS_CROWBAR) + if(I.is_crowbar()) + return FORWARD + if(IS_WIRECUTTER) + if(I.is_wirecutter()) + return FORWARD + if(IS_WRENCH) + if(I.is_wrench()) + return FORWARD - custom_action(index, diff, used_atom, user) - return 1 \ No newline at end of file + switch(L["backkey"]) + if(IS_SCREWDRIVER) + if(I.is_screwdriver()) + return BACKWARD + if(IS_CROWBAR) + if(I.is_crowbar()) + return BACKWARD + if(IS_WIRECUTTER) + if(I.is_wirecutter()) + return BACKWARD + if(IS_WRENCH) + if(I.is_wrench()) + return BACKWARD + + if(istype(I, L["key"])) + return FORWARD //to the first step -> forward + else if(L["backkey"] && istype(I, L["backkey"])) + return BACKWARD //to the last step -> backwards + return 0 + +/datum/construction/reversible/check_step(var/obj/item/I,mob/user as mob) + var/diff = is_right_key(I) + if(diff) + if(custom_action(index, diff, I, user)) + update_index(diff) + return 1 + return 0 + +/datum/construction/reversible/custom_action(index, diff, I, user) + return 1 \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 31e7ff290c..5204964bda 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -85,7 +85,7 @@ current.verbs -= /datum/changeling/proc/EvolutionMenu current.mind = null - nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user + GLOB.nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user if(new_character.mind) //remove any mind currently in our new body's mind variable new_character.mind.current = null diff --git a/code/datums/observation/dir_set.dm b/code/datums/observation/dir_set.dm index 1f4c8e251e..a626a07c4b 100644 --- a/code/datums/observation/dir_set.dm +++ b/code/datums/observation/dir_set.dm @@ -8,7 +8,7 @@ // /old_dir: The dir before the change. // /new_dir: The dir after the change. -var/decl/observ/dir_set/dir_set_event = new() +GLOBAL_DATUM_INIT(dir_set_event, /decl/observ/dir_set, new) /decl/observ/dir_set name = "Direction Set" @@ -27,9 +27,9 @@ var/decl/observ/dir_set/dir_set_event = new() /atom/movable/Entered(var/atom/movable/am, atom/old_loc) . = ..() - if(. != CANCEL_MOVE_EVENT && dir_set_event.has_listeners(am)) - dir_set_event.register(src, am, /atom/proc/recursive_dir_set) + if(. != CANCEL_MOVE_EVENT && GLOB.dir_set_event.has_listeners(am)) + GLOB.dir_set_event.register(src, am, /atom/proc/recursive_dir_set) /atom/movable/Exited(var/atom/movable/am, atom/old_loc) . = ..() - dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set) + GLOB.dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set) diff --git a/code/datums/observation/equipped.dm b/code/datums/observation/equipped.dm index de07a74355..4142050a35 100644 --- a/code/datums/observation/equipped.dm +++ b/code/datums/observation/equipped.dm @@ -7,7 +7,7 @@ // /mob/equipper: The mob that equipped the item. // /obj/item/item: The equipped item. // slot: The slot equipped to. -var/decl/observ/mob_equipped/mob_equipped_event = new() +GLOBAL_DATUM_INIT(mob_equipped_event, /decl/observ/mob_equipped, new) /decl/observ/mob_equipped name = "Mob Equipped" @@ -22,7 +22,7 @@ var/decl/observ/mob_equipped/mob_equipped_event = new() // /obj/item/item: The equipped item. // /mob/equipper: The mob that equipped the item. // slot: The slot equipped to. -var/decl/observ/item_equipped/item_equipped_event = new() +GLOBAL_DATUM_INIT(item_equipped_event, /decl/observ/item_equipped, new) /decl/observ/item_equipped name = "Item Equipped" @@ -34,5 +34,5 @@ var/decl/observ/item_equipped/item_equipped_event = new() /obj/item/equipped(var/mob/user, var/slot) . = ..() - mob_equipped_event.raise_event(user, src, slot) - item_equipped_event.raise_event(src, user, slot) + GLOB.mob_equipped_event.raise_event(user, src, slot) + GLOB.item_equipped_event.raise_event(src, user, slot) diff --git a/code/datums/observation/helpers.dm b/code/datums/observation/helpers.dm index 79ee8eb08d..9116026700 100644 --- a/code/datums/observation/helpers.dm +++ b/code/datums/observation/helpers.dm @@ -1,5 +1,5 @@ /atom/movable/proc/recursive_move(var/atom/movable/am, var/old_loc, var/new_loc) - moved_event.raise_event(src, old_loc, new_loc) + GLOB.moved_event.raise_event(src, old_loc, new_loc) /atom/movable/proc/move_to_destination(var/atom/movable/am, var/old_loc, var/new_loc) var/turf/T = get_turf(new_loc) @@ -10,9 +10,9 @@ set_dir(new_dir) /proc/register_all_movement(var/event_source, var/listener) - moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) - dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set) + GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) + GLOB.dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set) /proc/unregister_all_movement(var/event_source, var/listener) - moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move) - dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set) + GLOB.moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move) + GLOB.dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set) diff --git a/code/datums/observation/logged_in.dm b/code/datums/observation/logged_in.dm index 311ff8acb6..c59e146a48 100644 --- a/code/datums/observation/logged_in.dm +++ b/code/datums/observation/logged_in.dm @@ -6,7 +6,7 @@ // Arguments that the called proc should expect: // /mob/joiner: The mob that has logged in -var/decl/observ/logged_in/logged_in_event = new() +GLOBAL_DATUM_INIT(logged_in_event, /decl/observ/logged_in, new) /decl/observ/logged_in name = "Logged In" @@ -18,4 +18,4 @@ var/decl/observ/logged_in/logged_in_event = new() /mob/Login() ..() - logged_in_event.raise_event(src) + GLOB.logged_in_event.raise_event(src) diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm index 86a6b793ac..311f9673f6 100644 --- a/code/datums/observation/moved.dm +++ b/code/datums/observation/moved.dm @@ -8,7 +8,8 @@ // /atom/old_loc: The loc before the move. // /atom/new_loc: The loc after the move. -var/decl/observ/moved/moved_event = new() + +GLOBAL_DATUM_INIT(moved_event, /decl/observ/moved, new) /decl/observ/moved name = "Moved" @@ -27,26 +28,26 @@ var/decl/observ/moved/moved_event = new() /atom/Entered(var/atom/movable/am, var/atom/old_loc) . = ..() - moved_event.raise_event(am, old_loc, am.loc) + GLOB.moved_event.raise_event(am, old_loc, am.loc) /atom/movable/Entered(var/atom/movable/am, atom/old_loc) . = ..() - if(moved_event.has_listeners(am)) - moved_event.register(src, am, /atom/movable/proc/recursive_move) + if(GLOB.moved_event.has_listeners(am)) + GLOB.moved_event.register(src, am, /atom/movable/proc/recursive_move) /atom/movable/Exited(var/atom/movable/am, atom/old_loc) . = ..() - moved_event.unregister(src, am, /atom/movable/proc/recursive_move) + GLOB.moved_event.unregister(src, am, /atom/movable/proc/recursive_move) // Entered() typically lifts the moved event, but in the case of null-space we'll have to handle it. /atom/movable/Move() var/old_loc = loc . = ..() if(. && !loc) - moved_event.raise_event(src, old_loc, null) + GLOB.moved_event.raise_event(src, old_loc, null) /atom/movable/forceMove(atom/destination) var/old_loc = loc . = ..() if(. && !loc) - moved_event.raise_event(src, old_loc, null) + GLOB.moved_event.raise_event(src, old_loc, null) diff --git a/code/datums/observation/unequipped.dm b/code/datums/observation/unequipped.dm index 3287c0a3b5..6ad8d8eca0 100644 --- a/code/datums/observation/unequipped.dm +++ b/code/datums/observation/unequipped.dm @@ -7,7 +7,7 @@ // /mob/equipped: The mob that unequipped/dropped the item. // /obj/item/item: The unequipped item. -var/decl/observ/mob_unequipped/mob_unequipped_event = new() +GLOBAL_DATUM_INIT(mob_unequipped_event, /decl/observ/mob_unequipped, new) /decl/observ/mob_unequipped name = "Mob Unequipped" @@ -22,7 +22,7 @@ var/decl/observ/mob_unequipped/mob_unequipped_event = new() // /obj/item/item: The unequipped item. // /mob/equipped: The mob that unequipped/dropped the item. -var/decl/observ/item_unequipped/item_unequipped_event = new() +GLOBAL_DATUM_INIT(item_unequipped_event, /decl/observ/item_unequipped, new) /decl/observ/item_unequipped name = "Item Unequipped" @@ -34,5 +34,5 @@ var/decl/observ/item_unequipped/item_unequipped_event = new() /obj/item/dropped(var/mob/user) ..() - mob_unequipped_event.raise_event(user, src) - item_unequipped_event.raise_event(src, user) + GLOB.mob_unequipped_event.raise_event(user, src) + GLOB.item_unequipped_event.raise_event(src, user) diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm index bbfe6f59f5..3423efcf33 100644 --- a/code/datums/outfits/jobs/cargo.dm +++ b/code/datums/outfits/jobs/cargo.dm @@ -25,5 +25,5 @@ satchel_one = /obj/item/weapon/storage/backpack/satchel/eng id_type = /obj/item/weapon/card/id/cargo/mining pda_type = /obj/item/device/pda/shaftminer - backpack_contents = list(/obj/item/weapon/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1) + backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1) flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index afcb65a8c1..8d2edbeeb9 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -22,7 +22,7 @@ /datum/progressbar/Destroy() if (client) client.images -= bar - qdel_null(bar) + QDEL_NULL(bar) user = null client = null return ..() diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 23af6093ef..9cddd506b6 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -32,7 +32,7 @@ /datum/recipe var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice - var/list/items // example: = list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo + var/list/items // example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo var/list/fruit // example: = list("fruit" = 3) var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal var/time = 100 // 1/10 part of second diff --git a/code/datums/repositories/ammomaterial.dm b/code/datums/repositories/ammomaterial.dm new file mode 100644 index 0000000000..7186adbd00 --- /dev/null +++ b/code/datums/repositories/ammomaterial.dm @@ -0,0 +1,18 @@ +var/global/datum/repository/ammomaterial/ammo_repository = new() + +/datum/repository/ammomaterial + var/list/ammotypes + +/datum/repository/ammomaterial/New() + ammotypes = list() + ..() + +/datum/repository/ammomaterial/proc/get_materials_from_object(obj/item/ammo_casing/I) + + if(!(I in ammotypes)) + ammotypes += I + var/obj/item/ammo_casing/temp = new I + ammotypes[I] = temp.matter + qdel(temp) + + return ammotypes[I] \ No newline at end of file diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index bdf363ce6e..bbc1e01632 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -122,7 +122,7 @@ var/global/repository/radiation/radiation_repository = new() /turf/simulated/wall/calc_rad_resistance() radiation_repository.resistance_cache[src] = (length(contents) + 1) - cached_rad_resistance = (density ? material.weight : 0) + cached_rad_resistance = (density ? material.weight + material.radiation_resistance : 0) /obj var/rad_resistance = 0 // Allow overriding rad resistance diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm index ee53af377c..cf102f129d 100644 --- a/code/datums/supplypacks/atmospherics.dm +++ b/code/datums/supplypacks/atmospherics.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/atmos +/datum/supply_pack/atmos group = "Atmospherics" -/datum/supply_packs/atmos/inflatable +/datum/supply_pack/atmos/inflatable name = "Inflatable barriers" contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3) cost = 20 containertype = /obj/structure/closet/crate/engineering containername = "Inflatable Barrier Crate" -/datum/supply_packs/atmos/canister_empty +/datum/supply_pack/atmos/canister_empty name = "Empty gas canister" cost = 7 containername = "Empty gas canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister) -/datum/supply_packs/atmos/canister_air +/datum/supply_pack/atmos/canister_air name = "Air canister" cost = 10 containername = "Air canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/air) -/datum/supply_packs/atmos/canister_oxygen +/datum/supply_pack/atmos/canister_oxygen name = "Oxygen canister" cost = 15 containername = "Oxygen canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) -/datum/supply_packs/atmos/canister_nitrogen +/datum/supply_pack/atmos/canister_nitrogen name = "Nitrogen canister" cost = 10 containername = "Nitrogen canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) -/datum/supply_packs/atmos/canister_phoron +/datum/supply_pack/atmos/canister_phoron name = "Phoron gas canister" cost = 60 containername = "Phoron gas canister crate" @@ -50,7 +50,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/phoron) -/datum/supply_packs/atmos/canister_sleeping_agent +/datum/supply_pack/atmos/canister_sleeping_agent name = "N2O gas canister" cost = 15 containername = "N2O gas canister crate" @@ -58,7 +58,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent) -/datum/supply_packs/atmos/canister_carbon_dioxide +/datum/supply_pack/atmos/canister_carbon_dioxide name = "Carbon dioxide gas canister" cost = 15 containername = "CO2 canister crate" @@ -66,7 +66,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) -/datum/supply_packs/atmos/air_dispenser +/datum/supply_pack/atmos/air_dispenser contains = list(/obj/machinery/pipedispenser/orderable) name = "Pipe Dispenser" cost = 25 @@ -74,7 +74,7 @@ containername = "Pipe Dispenser Crate" access = access_atmospherics -/datum/supply_packs/atmos/disposals_dispenser +/datum/supply_pack/atmos/disposals_dispenser contains = list(/obj/machinery/pipedispenser/disposal/orderable) name = "Disposals Pipe Dispenser" cost = 25 @@ -82,7 +82,7 @@ containername = "Disposal Dispenser Crate" access = access_atmospherics -/datum/supply_packs/atmos/internals +/datum/supply_pack/atmos/internals name = "Internals crate" contains = list( /obj/item/clothing/mask/gas = 3, @@ -92,7 +92,7 @@ containertype = /obj/structure/closet/crate/internals containername = "Internals crate" -/datum/supply_packs/atmos/evacuation +/datum/supply_pack/atmos/evacuation name = "Emergency equipment" contains = list( /obj/item/weapon/storage/toolbox/emergency = 2, diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm index 1c54c3908d..339aae9a7c 100644 --- a/code/datums/supplypacks/contraband.dm +++ b/code/datums/supplypacks/contraband.dm @@ -4,7 +4,7 @@ */ -/datum/supply_packs/randomised/contraband +/datum/supply_pack/randomised/contraband num_contained = 5 contains = list( /obj/item/seeds/bloodtomatoseed, @@ -20,7 +20,7 @@ contraband = 1 group = "Supplies" -/datum/supply_packs/security/specialops +/datum/supply_pack/security/specialops name = "Special Ops supplies" contains = list( /obj/item/weapon/storage/box/emps, @@ -32,7 +32,7 @@ containername = "Special Ops crate" contraband = 1 -/datum/supply_packs/supply/moghes +/datum/supply_pack/supply/moghes name = "Moghes imports" contains = list( /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew = 2, @@ -43,7 +43,7 @@ containername = "Moghes imports crate" contraband = 1 -/datum/supply_packs/munitions/bolt_rifles_militia +/datum/supply_pack/munitions/bolt_rifles_militia name = "Weapon - Surplus militia rifles" contains = list( /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3, @@ -54,7 +54,7 @@ containertype = /obj/structure/closet/crate/secure/weapon containername = "Ballistic weapons crate" -/datum/supply_packs/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things +/datum/supply_pack/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell, num_contained = 1 contains = list( diff --git a/code/datums/supplypacks/contraband_vr.dm b/code/datums/supplypacks/contraband_vr.dm index 32a809b7a4..3d13903d47 100644 --- a/code/datums/supplypacks/contraband_vr.dm +++ b/code/datums/supplypacks/contraband_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/supply/stolen +/datum/supply_pack/supply/stolen name = "Stolen supply crate" contains = list(/obj/item/stolenpackage = 1) cost = 150 @@ -6,14 +6,14 @@ containername = "Stolen crate" contraband = 1 -/datum/supply_packs/supply/wolfgirl +/datum/supply_pack/supply/wolfgirl name = "Wolfgirl Crate" cost = 200 //I mean, it's a whole wolfgirl containertype = /obj/structure/largecrate/animal/wolfgirl containername = "Wolfgirl crate" contraband = 1 -/datum/supply_packs/supply/catgirl +/datum/supply_pack/supply/catgirl name = "Catgirl Crate" cost = 200 //I mean, it's a whole catgirl containertype = /obj/structure/largecrate/animal/catgirl diff --git a/code/datums/supplypacks/costumes.dm b/code/datums/supplypacks/costumes.dm index 1ea6aa1bd2..879d5accd0 100644 --- a/code/datums/supplypacks/costumes.dm +++ b/code/datums/supplypacks/costumes.dm @@ -4,13 +4,13 @@ */ -/datum/supply_packs/costumes +/datum/supply_pack/costumes group = "Costumes" -/datum/supply_packs/randomised/costumes +/datum/supply_pack/randomised/costumes group = "Costumes" -/datum/supply_packs/costumes/wizard +/datum/supply_pack/costumes/wizard name = "Wizard costume" contains = list( /obj/item/weapon/staff, @@ -22,7 +22,7 @@ containertype = /obj/structure/closet/crate containername = "Wizard costume crate" -/datum/supply_packs/randomised/costumes/hats +/datum/supply_pack/randomised/costumes/hats num_contained = 4 contains = list( /obj/item/clothing/head/collectable/chef, @@ -51,7 +51,7 @@ containertype = /obj/structure/closet/crate containername = "Collectable hats crate! Brought to you by Bass.inc!" -/datum/supply_packs/randomised/costumes/costume +/datum/supply_pack/randomised/costumes/costume num_contained = 3 contains = list( /obj/item/clothing/suit/pirate, @@ -87,7 +87,7 @@ containertype = /obj/structure/closet/crate containername = "Actor Costumes" -/datum/supply_packs/costumes/formal_wear +/datum/supply_pack/costumes/formal_wear contains = list( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that, @@ -109,7 +109,7 @@ containertype = /obj/structure/closet containername = "Formalwear for the best occasions." -datum/supply_packs/costumes/witch +datum/supply_pack/costumes/witch name = "Witch costume" containername = "Witch costume" containertype = /obj/structure/closet @@ -121,7 +121,7 @@ datum/supply_packs/costumes/witch /obj/item/weapon/staff/broom ) -/datum/supply_packs/randomised/costumes/costume_hats +/datum/supply_pack/randomised/costumes/costume_hats name = "Costume hats" containername = "Actor hats crate" containertype = /obj/structure/closet/crate @@ -146,7 +146,7 @@ datum/supply_packs/costumes/witch /obj/item/clothing/head/ushanka ) -/datum/supply_packs/randomised/costumes/dresses +/datum/supply_pack/randomised/costumes/dresses name = "Womens formal dress locker" containername = "Pretty dress locker" containertype = /obj/structure/closet diff --git a/code/datums/supplypacks/costumes_vr.dm b/code/datums/supplypacks/costumes_vr.dm index fd8921ba77..080ebb5457 100644 --- a/code/datums/supplypacks/costumes_vr.dm +++ b/code/datums/supplypacks/costumes_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/costumes/xenowear_vr +/datum/supply_pack/costumes/xenowear_vr name = "Xenowear crate" contains = list( /obj/item/clothing/shoes/footwraps, @@ -19,7 +19,7 @@ containertype = /obj/structure/closet/crate containername = "Xenowear crate" -/datum/supply_packs/costumes/tesh_smocks_vr +/datum/supply_pack/costumes/tesh_smocks_vr name = "Teshari smocks" contains = list( /obj/item/clothing/under/seromi/smock, @@ -32,93 +32,93 @@ containertype = /obj/structure/closet/crate containername = "Teshari smocks crate" -/datum/supply_packs/randomised/costumes/tesh_coats_vr +/datum/supply_pack/randomised/costumes/tesh_coats_vr name = "Teshari undercoats" num_contained = 4 contains = list( - /obj/item/clothing/under/seromi/undercoat/blue_grey, - /obj/item/clothing/under/seromi/undercoat/brown_grey, - /obj/item/clothing/under/seromi/undercoat/green_grey, - /obj/item/clothing/under/seromi/undercoat/lightgrey_grey, - /obj/item/clothing/under/seromi/undercoat/orange, - /obj/item/clothing/under/seromi/undercoat/orange_grey, - /obj/item/clothing/under/seromi/undercoat/pink_grey, - /obj/item/clothing/under/seromi/undercoat/purple_grey, - /obj/item/clothing/under/seromi/undercoat/rainbow, - /obj/item/clothing/under/seromi/undercoat/red_grey, - /obj/item/clothing/under/seromi/undercoat/white_grey, - /obj/item/clothing/under/seromi/undercoat/yellow_grey + /obj/item/clothing/under/seromi/undercoat/standard/blue_grey, + /obj/item/clothing/under/seromi/undercoat/standard/brown_grey, + /obj/item/clothing/under/seromi/undercoat/standard/green_grey, + /obj/item/clothing/under/seromi/undercoat/standard/lightgrey_grey, + /obj/item/clothing/under/seromi/undercoat/standard/orange, + /obj/item/clothing/under/seromi/undercoat/standard/orange_grey, + /obj/item/clothing/under/seromi/undercoat/standard/pink_grey, + /obj/item/clothing/under/seromi/undercoat/standard/purple_grey, + /obj/item/clothing/under/seromi/undercoat/standard/rainbow, + /obj/item/clothing/under/seromi/undercoat/standard/red_grey, + /obj/item/clothing/under/seromi/undercoat/standard/white_grey, + /obj/item/clothing/under/seromi/undercoat/standard/yellow_grey ) cost = 20 containertype = /obj/structure/closet/crate containername = "Teshari undercoats crate" -/datum/supply_packs/randomised/costumes/tesh_coats_b_vr +/datum/supply_pack/randomised/costumes/tesh_coats_b_vr name = "Teshari undercoats (black)" num_contained = 4 contains = list( - /obj/item/clothing/under/seromi/undercoat/black, - /obj/item/clothing/under/seromi/undercoat/black_blue, - /obj/item/clothing/under/seromi/undercoat/black_brown, - /obj/item/clothing/under/seromi/undercoat/black_green, - /obj/item/clothing/under/seromi/undercoat/black_grey, - /obj/item/clothing/under/seromi/undercoat/black_lightgrey, - /obj/item/clothing/under/seromi/undercoat/black_midgrey, - /obj/item/clothing/under/seromi/undercoat/black_orange, - /obj/item/clothing/under/seromi/undercoat/black_pink, - /obj/item/clothing/under/seromi/undercoat/black_purple, - /obj/item/clothing/under/seromi/undercoat/black_red, - /obj/item/clothing/under/seromi/undercoat/black_white, - /obj/item/clothing/under/seromi/undercoat/black_yellow + /obj/item/clothing/under/seromi/undercoat/standard/black, + /obj/item/clothing/under/seromi/undercoat/standard/black_blue, + /obj/item/clothing/under/seromi/undercoat/standard/black_brown, + /obj/item/clothing/under/seromi/undercoat/standard/black_green, + /obj/item/clothing/under/seromi/undercoat/standard/black_grey, + /obj/item/clothing/under/seromi/undercoat/standard/black_lightgrey, + /obj/item/clothing/under/seromi/undercoat/standard/black_midgrey, + /obj/item/clothing/under/seromi/undercoat/standard/black_orange, + /obj/item/clothing/under/seromi/undercoat/standard/black_pink, + /obj/item/clothing/under/seromi/undercoat/standard/black_purple, + /obj/item/clothing/under/seromi/undercoat/standard/black_red, + /obj/item/clothing/under/seromi/undercoat/standard/black_white, + /obj/item/clothing/under/seromi/undercoat/standard/black_yellow ) cost = 20 containertype = /obj/structure/closet/crate containername = "Teshari undercoats crate" -/datum/supply_packs/randomised/costumes/tesh_cloaks_vr +/datum/supply_pack/randomised/costumes/tesh_cloaks_vr name = "Teshari cloaks" num_contained = 4 contains = list( - /obj/item/clothing/suit/storage/seromi/cloak/blue_grey, - /obj/item/clothing/suit/storage/seromi/cloak/brown_grey, - /obj/item/clothing/suit/storage/seromi/cloak/green_grey, - /obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey, - /obj/item/clothing/suit/storage/seromi/cloak/orange, - /obj/item/clothing/suit/storage/seromi/cloak/orange_grey, - /obj/item/clothing/suit/storage/seromi/cloak/pink_grey, - /obj/item/clothing/suit/storage/seromi/cloak/purple_grey, - /obj/item/clothing/suit/storage/seromi/cloak/rainbow, - /obj/item/clothing/suit/storage/seromi/cloak/red_grey, - /obj/item/clothing/suit/storage/seromi/cloak/white_grey, - /obj/item/clothing/suit/storage/seromi/cloak/yellow_grey + /obj/item/clothing/suit/storage/seromi/cloak/standard/blue_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/brown_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/green_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/lightgrey_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/orange, + /obj/item/clothing/suit/storage/seromi/cloak/standard/orange_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/pink_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/purple_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/rainbow, + /obj/item/clothing/suit/storage/seromi/cloak/standard/red_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/white_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/yellow_grey ) cost = 40 containertype = /obj/structure/closet/crate containername = "Teshari cloaks crate" -/datum/supply_packs/randomised/costumes/tesh_cloaks_b_vr +/datum/supply_pack/randomised/costumes/tesh_cloaks_b_vr name = "Teshari cloaks (black)" num_contained = 4 contains = list( - /obj/item/clothing/suit/storage/seromi/cloak/black, - /obj/item/clothing/suit/storage/seromi/cloak/black_blue, - /obj/item/clothing/suit/storage/seromi/cloak/black_brown, - /obj/item/clothing/suit/storage/seromi/cloak/black_green, - /obj/item/clothing/suit/storage/seromi/cloak/black_grey, - /obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey, - /obj/item/clothing/suit/storage/seromi/cloak/black_midgrey, - /obj/item/clothing/suit/storage/seromi/cloak/black_orange, - /obj/item/clothing/suit/storage/seromi/cloak/black_pink, - /obj/item/clothing/suit/storage/seromi/cloak/black_purple, - /obj/item/clothing/suit/storage/seromi/cloak/black_red, - /obj/item/clothing/suit/storage/seromi/cloak/black_white, - /obj/item/clothing/suit/storage/seromi/cloak/black_yellow + /obj/item/clothing/suit/storage/seromi/cloak/standard/black, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_blue, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_brown, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_green, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_grey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_lightgrey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_midgrey, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_orange, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_pink, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_purple, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_red, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_white, + /obj/item/clothing/suit/storage/seromi/cloak/standard/black_yellow ) cost = 40 containertype = /obj/structure/closet/crate containername = "Teshari cloaks crate" -/datum/supply_packs/costumes/utility_vr +/datum/supply_pack/costumes/utility_vr name = "Utility uniforms" contains = list( /obj/item/clothing/under/utility, @@ -129,7 +129,7 @@ containertype = /obj/structure/closet/crate containername = "Utility uniforms crate" -/datum/supply_packs/costumes/skirts_vr +/datum/supply_pack/costumes/skirts_vr name = "Skirts crate" contains = list( /obj/item/clothing/under/skirt, @@ -147,7 +147,7 @@ containertype = /obj/structure/closet/crate containername = "Skirts crate" -/datum/supply_packs/costumes/varsity_vr +/datum/supply_pack/costumes/varsity_vr name = "Varsity jackets" contains = list( /obj/item/clothing/suit/varsity, @@ -161,7 +161,7 @@ containertype = /obj/structure/closet/crate containername = "Varsity jackets crate" -/datum/supply_packs/randomised/costumes/leathergear_vr +/datum/supply_pack/randomised/costumes/leathergear_vr name = "Leather gear" num_contained = 5 contains = list( @@ -192,7 +192,7 @@ containertype = /obj/structure/closet/crate containername = "Leather gear crate" -/datum/supply_packs/costumes/eyewear_vr +/datum/supply_pack/costumes/eyewear_vr name = "Eyewear crate" contains = list( /obj/item/clothing/glasses/eyepatch, @@ -211,7 +211,7 @@ containertype = /obj/structure/closet/crate containername = "Eyewear crate" -/datum/supply_packs/randomised/costumes/gloves_vr +/datum/supply_pack/randomised/costumes/gloves_vr name = "Gloves crate" num_contained = 4 contains = list( @@ -235,7 +235,7 @@ containertype = /obj/structure/closet/crate containername = "Gloves crate" -/datum/supply_packs/randomised/costumes/boots_vr +/datum/supply_pack/randomised/costumes/boots_vr name = "Boots crate" num_contained = 3 contains = list( @@ -252,7 +252,7 @@ containertype = /obj/structure/closet/crate containername = "Boots crate" -/datum/supply_packs/costumes/taurbags +/datum/supply_pack/costumes/taurbags name = "Saddlebags crate" contains = list( /obj/item/weapon/storage/backpack/saddlebag_common, diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index efa5c454f2..e3b9a148cc 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -4,66 +4,66 @@ */ -/datum/supply_packs/eng +/datum/supply_pack/eng group = "Engineering" -/datum/supply_packs/eng/lightbulbs +/datum/supply_pack/eng/lightbulbs name = "Replacement lights" contains = list(/obj/item/weapon/storage/box/lights/mixed = 3) cost = 10 containertype = /obj/structure/closet/crate containername = "Replacement lights" -/datum/supply_packs/eng/smescoil +/datum/supply_pack/eng/smescoil name = "Superconducting Magnetic Coil" contains = list(/obj/item/weapon/smes_coil) cost = 75 containertype = /obj/structure/closet/crate/engineering containername = "Superconducting Magnetic Coil crate" -/datum/supply_packs/eng/shield_capacitor +/datum/supply_pack/eng/shield_capacitor name = "Shield Capacitor" contains = list(/obj/machinery/shield_capacitor) cost = 20 containertype = /obj/structure/closet/crate/engineering containername = "shield capacitor crate" -/datum/supply_packs/eng/shield_capacitor/advanced +/datum/supply_pack/eng/shield_capacitor/advanced name = "Advanced Shield Capacitor" contains = list(/obj/machinery/shield_capacitor/advanced) cost = 30 containertype = /obj/structure/closet/crate/engineering containername = "advanced shield capacitor crate" -/datum/supply_packs/eng/bubble_shield +/datum/supply_pack/eng/bubble_shield name = "Bubble Shield Generator" contains = list(/obj/machinery/shield_gen) cost = 40 containertype = /obj/structure/closet/crate/engineering containername = "shield bubble generator crate" -/datum/supply_packs/eng/bubble_shield/advanced +/datum/supply_pack/eng/bubble_shield/advanced name = "Advanced Bubble Shield Generator" contains = list(/obj/machinery/shield_gen/advanced) cost = 60 containertype = /obj/structure/closet/crate/engineering containername = "advanced bubble shield generator crate" -/datum/supply_packs/eng/hull_shield +/datum/supply_pack/eng/hull_shield name = "Hull Shield Generator" contains = list(/obj/machinery/shield_gen/external) cost = 80 containertype = /obj/structure/closet/crate/engineering containername = "shield hull generator crate" -/datum/supply_packs/eng/hull_shield/advanced +/datum/supply_pack/eng/hull_shield/advanced name = "Advanced Hull Shield Generator" contains = list(/obj/machinery/shield_gen/external/advanced) cost = 120 containertype = /obj/structure/closet/crate/engineering containername = "advanced hull shield generator crate" -/datum/supply_packs/eng/electrical +/datum/supply_pack/eng/electrical name = "Electrical maintenance crate" contains = list( /obj/item/weapon/storage/toolbox/electrical = 2, @@ -75,7 +75,7 @@ containertype = /obj/structure/closet/crate/engineering/electrical containername = "Electrical maintenance crate" -/datum/supply_packs/eng/e_welders +/datum/supply_pack/eng/e_welders name = "Electric welder crate" contains = list( /obj/item/weapon/weldingtool/electric = 3 @@ -84,7 +84,7 @@ containertype = /obj/structure/closet/crate/engineering/electrical containername = "Electric welder crate" -/datum/supply_packs/eng/mechanical +/datum/supply_pack/eng/mechanical name = "Mechanical maintenance crate" contains = list( /obj/item/weapon/storage/belt/utility/full = 3, @@ -96,14 +96,14 @@ containertype = /obj/structure/closet/crate/engineering containername = "Mechanical maintenance crate" -/datum/supply_packs/eng/fueltank +/datum/supply_pack/eng/fueltank name = "Fuel tank crate" contains = list(/obj/structure/reagent_dispensers/fueltank) cost = 10 containertype = /obj/structure/largecrate containername = "fuel tank crate" -/datum/supply_packs/eng/solar +/datum/supply_pack/eng/solar name = "Solar Pack crate" contains = list( /obj/item/solar_assembly = 21, @@ -115,7 +115,7 @@ containertype = /obj/structure/closet/crate/engineering containername = "Solar pack crate" -/datum/supply_packs/eng/engine +/datum/supply_pack/eng/engine name = "Emitter crate" contains = list(/obj/machinery/power/emitter = 2) cost = 10 @@ -123,27 +123,27 @@ containername = "Emitter crate" access = access_ce -/datum/supply_packs/eng/engine/field_gen +/datum/supply_pack/eng/engine/field_gen name = "Field Generator crate" contains = list(/obj/machinery/field_generator = 2) containertype = /obj/structure/closet/crate/secure/engineering containername = "Field Generator crate" access = access_ce -/datum/supply_packs/eng/engine/sing_gen +/datum/supply_pack/eng/engine/sing_gen name = "Singularity Generator crate" contains = list(/obj/machinery/the_singularitygen) containertype = /obj/structure/closet/crate/secure/engineering containername = "Singularity Generator crate" access = access_ce -/datum/supply_packs/eng/engine/collector +/datum/supply_pack/eng/engine/collector name = "Collector crate" contains = list(/obj/machinery/power/rad_collector = 3) containertype = /obj/structure/closet/crate/secure/engineering containername = "Collector crate" -/datum/supply_packs/eng/engine/PA +/datum/supply_pack/eng/engine/PA name = "Particle Accelerator crate" cost = 40 contains = list( @@ -159,7 +159,7 @@ containername = "Particle Accelerator crate" access = access_ce -/datum/supply_packs/eng/shield_gen +/datum/supply_pack/eng/shield_gen contains = list(/obj/item/weapon/circuitboard/shield_gen) name = "Bubble shield generator circuitry" cost = 30 @@ -167,7 +167,7 @@ containername = "bubble shield generator circuitry crate" access = access_ce -/datum/supply_packs/eng/shield_gen_ex +/datum/supply_pack/eng/shield_gen_ex contains = list(/obj/item/weapon/circuitboard/shield_gen_ex) name = "Hull shield generator circuitry" cost = 30 @@ -175,7 +175,7 @@ containername = "hull shield generator circuitry crate" access = access_ce -/datum/supply_packs/eng/shield_cap +/datum/supply_pack/eng/shield_cap contains = list(/obj/item/weapon/circuitboard/shield_cap) name = "Bubble shield capacitor circuitry" cost = 30 @@ -183,7 +183,7 @@ containername = "shield capacitor circuitry crate" access = access_ce -/datum/supply_packs/eng/smbig +/datum/supply_pack/eng/smbig name = "Supermatter Core" contains = list(/obj/machinery/power/supermatter) cost = 150 @@ -191,7 +191,7 @@ containername = "Supermatter crate (CAUTION)" access = access_ce -/datum/supply_packs/eng/teg +/datum/supply_pack/eng/teg contains = list(/obj/machinery/power/generator) name = "Mark I Thermoelectric Generator" cost = 40 @@ -199,7 +199,7 @@ containername = "Mk1 TEG crate" access = access_engine -/datum/supply_packs/eng/circulator +/datum/supply_pack/eng/circulator contains = list(/obj/machinery/atmospherics/binary/circulator) name = "Binary atmospheric circulator" cost = 20 @@ -207,7 +207,7 @@ containername = "Atmospheric circulator crate" access = access_engine -/datum/supply_packs/eng/radsuit +/datum/supply_pack/eng/radsuit contains = list( /obj/item/clothing/suit/radiation = 3, /obj/item/clothing/head/radiation = 3 @@ -217,7 +217,7 @@ containertype = /obj/structure/closet/radiation containername = "Radiation suit locker" -/datum/supply_packs/eng/pacman_parts +/datum/supply_pack/eng/pacman_parts name = "P.A.C.M.A.N. portable generator parts" cost = 25 containername = "P.A.C.M.A.N. Portable Generator Construction Kit" @@ -230,7 +230,7 @@ /obj/item/weapon/circuitboard/pacman ) -/datum/supply_packs/eng/super_pacman_parts +/datum/supply_pack/eng/super_pacman_parts name = "Super P.A.C.M.A.N. portable generator parts" cost = 35 containername = "Super P.A.C.M.A.N. portable generator construction kit" @@ -243,7 +243,7 @@ /obj/item/weapon/circuitboard/pacman/super ) -/datum/supply_packs/eng/fusion_core +/datum/supply_pack/eng/fusion_core name = "R-UST Mk. 8 Tokamak fusion core crate" cost = 50 containername = "R-UST Mk. 8 Tokamak Fusion Core crate" @@ -255,7 +255,7 @@ /obj/item/weapon/circuitboard/fusion_core ) -/datum/supply_packs/eng/fusion_fuel_injector +/datum/supply_pack/eng/fusion_fuel_injector name = "R-UST Mk. 8 fuel injector crate" cost = 30 containername = "R-UST Mk. 8 fuel injector crate" @@ -267,7 +267,7 @@ /obj/item/weapon/circuitboard/fusion_injector ) -/datum/supply_packs/eng/gyrotron +/datum/supply_pack/eng/gyrotron name = "Gyrotron crate" cost = 15 containername = "Gyrotron Crate" @@ -278,14 +278,14 @@ /obj/item/weapon/circuitboard/gyrotron ) -/datum/supply_packs/eng/fusion_fuel_compressor +/datum/supply_pack/eng/fusion_fuel_compressor name = "Fusion Fuel Compressor circuitry crate" cost = 10 containername = "Fusion Fuel Compressor circuitry crate" containertype = /obj/structure/closet/crate/engineering contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor) -/datum/supply_packs/eng/tritium +/datum/supply_pack/eng/tritium name = "Tritium crate" cost = 75 containername = "Tritium crate" diff --git a/code/datums/supplypacks/engineering_vr.dm b/code/datums/supplypacks/engineering_vr.dm index 28faf96434..e334268426 100644 --- a/code/datums/supplypacks/engineering_vr.dm +++ b/code/datums/supplypacks/engineering_vr.dm @@ -1,24 +1,24 @@ -/datum/supply_packs/eng/thermoregulator +/datum/supply_pack/eng/thermoregulator contains = list(/obj/machinery/power/thermoregulator) name = "Thermal Regulator" cost = 30 containertype = /obj/structure/closet/crate/large containername = "thermal regulator crate" -/datum/supply_packs/eng/radsuit +/datum/supply_pack/eng/radsuit contains = list( /obj/item/clothing/suit/radiation = 3, /obj/item/clothing/head/radiation = 3 ) -/datum/supply_packs/eng/algae +/datum/supply_pack/eng/algae contains = list(/obj/item/stack/material/algae/ten) name = "Algae Sheets (10)" cost = 20 containertype = /obj/structure/closet/crate containername = "algae sheets crate" -/datum/supply_packs/eng/engine/tesla_gen +/datum/supply_pack/eng/engine/tesla_gen name = "Tesla Generator crate" contains = list(/obj/machinery/the_singularitygen/tesla) containertype = /obj/structure/closet/crate/secure/engineering diff --git a/code/datums/supplypacks/hospitality.dm b/code/datums/supplypacks/hospitality.dm index f3de751f23..5d663d05db 100644 --- a/code/datums/supplypacks/hospitality.dm +++ b/code/datums/supplypacks/hospitality.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/hospitality +/datum/supply_pack/hospitality group = "Hospitality" -/datum/supply_packs/hospitality/party +/datum/supply_pack/hospitality/party name = "Party equipment" contains = list( /obj/item/weapon/storage/box/mixedglasses = 2, @@ -26,7 +26,7 @@ containertype = /obj/structure/closet/crate containername = "Party equipment" -/datum/supply_packs/hospitality/barsupplies +/datum/supply_pack/hospitality/barsupplies name = "Bar supplies" contains = list( /obj/item/weapon/storage/box/glasses/cocktail, @@ -46,10 +46,10 @@ containertype = /obj/structure/closet/crate containername = "crate of bar supplies" -/datum/supply_packs/randomised/hospitality/ +/datum/supply_pack/randomised/hospitality/ group = "Hospitality" -/datum/supply_packs/randomised/hospitality/pizza +/datum/supply_pack/randomised/hospitality/pizza num_contained = 5 contains = list( /obj/item/pizzabox/margherita, @@ -62,7 +62,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Pizza crate" -/datum/supply_packs/hospitality/gifts +/datum/supply_pack/hospitality/gifts name = "Gift crate" contains = list( /obj/item/toy/bouquet = 3, diff --git a/code/datums/supplypacks/hospitality_vr.dm b/code/datums/supplypacks/hospitality_vr.dm index a8fb518233..642032d46f 100644 --- a/code/datums/supplypacks/hospitality_vr.dm +++ b/code/datums/supplypacks/hospitality_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/randomised/hospitality/burgers_vr +/datum/supply_pack/randomised/hospitality/burgers_vr num_contained = 5 contains = list( /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, @@ -12,7 +12,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Burger crate" /* -/datum/supply_packs/randomised/hospitality/bakery_vr +/datum/supply_pack/randomised/hospitality/bakery_vr num_contained = 5 contains = list( /obj/item/weapon/reagent_containers/food/snacks/baguette, @@ -38,7 +38,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Bakery products crate" -/datum/supply_packs/randomised/hospitality/cakes_vr +/datum/supply_pack/randomised/hospitality/cakes_vr num_contained = 2 contains = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake, @@ -56,7 +56,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Cake crate" -/datum/supply_packs/randomised/hospitality/mexican_vr +/datum/supply_pack/randomised/hospitality/mexican_vr num_contained = 5 contains = list( /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito, @@ -69,7 +69,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Mexican takeout crate" */ -/datum/supply_packs/randomised/hospitality/asian_vr +/datum/supply_pack/randomised/hospitality/asian_vr num_contained = 5 contains = list( /obj/item/weapon/reagent_containers/food/snacks/generalschicken, @@ -80,5 +80,5 @@ containertype = /obj/structure/closet/crate/freezer containername = "Chinese takeout crate" -/datum/supply_packs/randomised/hospitality/pizza +/datum/supply_pack/randomised/hospitality/pizza cost = 50 \ No newline at end of file diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm index af9f513a95..9ee6a80532 100644 --- a/code/datums/supplypacks/hydroponics.dm +++ b/code/datums/supplypacks/hydroponics.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/hydro +/datum/supply_pack/hydro group = "Hydroponics" -/datum/supply_packs/hydro/monkey +/datum/supply_pack/hydro/monkey name = "Monkey crate" contains = list (/obj/item/weapon/storage/box/monkeycubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Monkey crate" -/datum/supply_packs/hydro/farwa +/datum/supply_pack/hydro/farwa name = "Farwa crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Farwa crate" -/datum/supply_packs/hydro/neara +/datum/supply_pack/hydro/neara name = "Neaera crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Neaera crate" -/datum/supply_packs/hydro/stok +/datum/supply_pack/hydro/stok name = "Stok crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Stok crate" -/datum/supply_packs/hydro/lisa +/datum/supply_pack/hydro/lisa name = "Corgi Crate" contains = list() cost = 50 containertype = /obj/structure/largecrate/animal/corgi containername = "Corgi Crate" -/datum/supply_packs/hydro/hydroponics +/datum/supply_pack/hydro/hydroponics name = "Hydroponics Supply Crate" contains = list( /obj/item/weapon/reagent_containers/spray/plantbgone = 4, @@ -60,28 +60,28 @@ containername = "Hydroponics crate" access = access_hydroponics -/datum/supply_packs/hydro/cow +/datum/supply_pack/hydro/cow name = "Cow crate" cost = 25 containertype = /obj/structure/largecrate/animal/cow containername = "Cow crate" access = access_hydroponics -/datum/supply_packs/hydro/goat +/datum/supply_pack/hydro/goat name = "Goat crate" cost = 25 containertype = /obj/structure/largecrate/animal/goat containername = "Goat crate" access = access_hydroponics -/datum/supply_packs/hydro/chicken +/datum/supply_pack/hydro/chicken name = "Chicken crate" cost = 25 containertype = /obj/structure/largecrate/animal/chick containername = "Chicken crate" access = access_hydroponics -/datum/supply_packs/hydro/seeds +/datum/supply_pack/hydro/seeds name = "Seeds crate" contains = list( /obj/item/seeds/chiliseed, @@ -107,7 +107,7 @@ containername = "Seeds crate" access = access_hydroponics -/datum/supply_packs/hydro/weedcontrol +/datum/supply_pack/hydro/weedcontrol name = "Weed control crate" contains = list( /obj/item/weapon/material/knife/machete/hatchet = 2, @@ -121,14 +121,14 @@ containername = "Weed control crate" access = access_hydroponics -/datum/supply_packs/hydro/watertank +/datum/supply_pack/hydro/watertank name = "Water tank crate" contains = list(/obj/structure/reagent_dispensers/watertank) cost = 10 containertype = /obj/structure/largecrate containername = "water tank crate" -/datum/supply_packs/hydro/bee_keeper +/datum/supply_pack/hydro/bee_keeper name = "Beekeeping crate" contains = list( /obj/item/beehive_assembly, @@ -141,7 +141,7 @@ containername = "Beekeeping crate" access = access_hydroponics -/datum/supply_packs/hydro/tray +/datum/supply_pack/hydro/tray name = "Empty hydroponics trays" cost = 50 containertype = /obj/structure/closet/crate/hydroponics diff --git a/code/datums/supplypacks/hydroponics_vr.dm b/code/datums/supplypacks/hydroponics_vr.dm index 541fd1721d..9ccbdf2d9e 100644 --- a/code/datums/supplypacks/hydroponics_vr.dm +++ b/code/datums/supplypacks/hydroponics_vr.dm @@ -1,39 +1,39 @@ -/datum/supply_packs/hydro/birds +/datum/supply_pack/hydro/birds name = "Birds Crate" cost = 200 //You're getting 22 birds. Of course it's going to be a lot! containertype = /obj/structure/largecrate/birds containername = "Bird crate" access = access_hydroponics -/datum/supply_packs/hydro/sobaka +/datum/supply_pack/hydro/sobaka name = "Sobaka crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/sobakacubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Sobaka crate" -/datum/supply_packs/hydro/saru +/datum/supply_pack/hydro/saru name = "Saru crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/sarucubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Saru crate" -/datum/supply_packs/hydro/sparra +/datum/supply_pack/hydro/sparra name = "Sparra crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/sparracubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Sparra crate" -/datum/supply_packs/hydro/wolpin +/datum/supply_pack/hydro/wolpin name = "Wolpin crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/wolpincubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Wolpin crate" - -/datum/supply_packs/hydro/fennec + +/datum/supply_pack/hydro/fennec name = "Fennec crate" cost = 60 //considering a corgi crate is 50, and you get two fennecs containertype = /obj/structure/largecrate/animal/fennec diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm index 4c5ddedf47..cd799a235b 100644 --- a/code/datums/supplypacks/materials.dm +++ b/code/datums/supplypacks/materials.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/materials +/datum/supply_pack/materials group = "Materials" -/datum/supply_packs/materials/metal50 +/datum/supply_pack/materials/metal50 name = "50 metal sheets" contains = list(/obj/fiftyspawner/steel) cost = 10 containertype = /obj/structure/closet/crate containername = "Metal sheets crate" -/datum/supply_packs/materials/glass50 +/datum/supply_pack/materials/glass50 name = "50 glass sheets" contains = list(/obj/fiftyspawner/glass) cost = 10 containertype = /obj/structure/closet/crate containername = "Glass sheets crate" -/datum/supply_packs/materials/wood50 +/datum/supply_pack/materials/wood50 name = "50 wooden planks" contains = list(/obj/fiftyspawner/wood) cost = 10 containertype = /obj/structure/closet/crate containername = "Wooden planks crate" -/datum/supply_packs/materials/plastic50 +/datum/supply_pack/materials/plastic50 name = "50 plastic sheets" contains = list(/obj/fiftyspawner/plastic) cost = 10 containertype = /obj/structure/closet/crate containername = "Plastic sheets crate" -/datum/supply_packs/materials/cardboard_sheets +/datum/supply_pack/materials/cardboard_sheets contains = list(/obj/fiftyspawner/cardboard) name = "50 cardboard sheets" cost = 10 containertype = /obj/structure/closet/crate containername = "Cardboard sheets crate" -/datum/supply_packs/materials/carpet +/datum/supply_pack/materials/carpet name = "Imported carpet" containertype = /obj/structure/closet/crate containername = "Imported carpet crate" @@ -53,7 +53,7 @@ ) -/datum/supply_packs/misc/linoleum +/datum/supply_pack/misc/linoleum name = "Linoleum" containertype = /obj/structure/closet/crate containername = "Linoleum crate" diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 2c2e26d97d..555df731c4 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/med +/datum/supply_pack/med group = "Medical" -/datum/supply_packs/med/medical +/datum/supply_pack/med/medical name = "Medical crate" contains = list( /obj/item/weapon/storage/firstaid/regular, @@ -25,28 +25,28 @@ containertype = /obj/structure/closet/crate/medical containername = "Medical crate" -/datum/supply_packs/med/bloodpack +/datum/supply_pack/med/bloodpack name = "BloodPack crate" contains = list(/obj/item/weapon/storage/box/bloodpacks = 3) cost = 10 containertype = /obj/structure/closet/crate/medical containername = "BloodPack crate" -/datum/supply_packs/med/bodybag +/datum/supply_pack/med/bodybag name = "Body bag crate" contains = list(/obj/item/weapon/storage/box/bodybags = 3) cost = 10 containertype = /obj/structure/closet/crate/medical containername = "Body bag crate" -/datum/supply_packs/med/cryobag +/datum/supply_pack/med/cryobag name = "Stasis bag crate" contains = list(/obj/item/bodybag/cryobag = 3) cost = 40 containertype = /obj/structure/closet/crate/medical containername = "Stasis bag crate" -/datum/supply_packs/med/surgery +/datum/supply_pack/med/surgery name = "Surgery crate" contains = list( /obj/item/weapon/surgical/cautery, @@ -66,7 +66,7 @@ containername = "Surgery crate" access = access_medical -/datum/supply_packs/med/deathalarm +/datum/supply_pack/med/deathalarm name = "Death Alarm crate" contains = list( /obj/item/weapon/storage/box/cdeathalarm_kit, @@ -77,7 +77,7 @@ containername = "Death Alarm crate" access = access_medical -/datum/supply_packs/med/clotting +/datum/supply_pack/med/clotting name = "Clotting Medicine crate" contains = list( /obj/item/weapon/storage/firstaid/clotting @@ -87,7 +87,7 @@ containername = "Clotting Medicine crate" access = access_medical -/datum/supply_packs/med/sterile +/datum/supply_pack/med/sterile name = "Sterile equipment crate" contains = list( /obj/item/clothing/under/rank/medical/scrubs/green = 2, @@ -100,7 +100,7 @@ containertype = "/obj/structure/closet/crate" containername = "Sterile equipment crate" -/datum/supply_packs/med/extragear +/datum/supply_pack/med/extragear name = "Medical surplus equipment" contains = list( /obj/item/weapon/storage/belt/medical = 3, @@ -113,7 +113,7 @@ containername = "Medical surplus equipment" access = access_medical -/datum/supply_packs/med/cmogear +/datum/supply_pack/med/cmogear name = "Chief medical officer equipment" contains = list( /obj/item/weapon/storage/belt/medical, @@ -137,7 +137,7 @@ containername = "Chief medical officer equipment" access = access_cmo -/datum/supply_packs/med/doctorgear +/datum/supply_pack/med/doctorgear name = "Medical Doctor equipment" contains = list( /obj/item/weapon/storage/belt/medical, @@ -160,7 +160,7 @@ containername = "Medical Doctor equipment" access = access_medical_equip -/datum/supply_packs/med/chemistgear +/datum/supply_pack/med/chemistgear name = "Chemist equipment" contains = list( /obj/item/weapon/storage/box/beakers, @@ -183,7 +183,7 @@ containername = "Chemist equipment" access = access_chemistry -/datum/supply_packs/med/paramedicgear +/datum/supply_pack/med/paramedicgear name = "Paramedic equipment" contains = list( /obj/item/weapon/storage/belt/medical/emt, @@ -211,7 +211,7 @@ containername = "Paramedic equipment" access = access_medical_equip -/datum/supply_packs/med/psychiatristgear +/datum/supply_pack/med/psychiatristgear name = "Psychiatrist equipment" contains = list( /obj/item/clothing/under/rank/psych, @@ -230,7 +230,7 @@ containername = "Psychiatrist equipment" access = access_psychiatrist -/datum/supply_packs/med/medicalscrubs +/datum/supply_pack/med/medicalscrubs name = "Medical scrubs" contains = list( /obj/item/clothing/shoes/white = 3,, @@ -251,7 +251,7 @@ containername = "Medical scrubs crate" access = access_medical_equip -/datum/supply_packs/med/autopsy +/datum/supply_pack/med/autopsy name = "Autopsy equipment" contains = list( /obj/item/weapon/folder/white, @@ -268,7 +268,7 @@ containername = "Autopsy equipment crate" access = access_morgue -/datum/supply_packs/med/medicaluniforms +/datum/supply_pack/med/medicaluniforms name = "Medical uniforms" contains = list( /obj/item/clothing/shoes/white = 3, @@ -295,7 +295,7 @@ containername = "Medical uniform crate" access = access_medical_equip -/datum/supply_packs/med/medicalbiosuits +/datum/supply_pack/med/medicalbiosuits name = "Medical biohazard gear" contains = list( /obj/item/clothing/head/bio_hood = 3, @@ -313,7 +313,7 @@ containername = "Medical biohazard equipment" access = access_medical_equip -/datum/supply_packs/med/portablefreezers +/datum/supply_pack/med/portablefreezers name = "Portable freezers crate" contains = list(/obj/item/weapon/storage/box/freezer = 7) cost = 25 @@ -321,7 +321,7 @@ containername = "Portable freezers" access = access_medical_equip -/datum/supply_packs/med/virus +/datum/supply_pack/med/virus name = "Virus sample crate" contains = list(/obj/item/weapon/virusdish/random = 4) cost = 25 @@ -329,7 +329,7 @@ containername = "Virus sample crate" access = access_cmo -/datum/supply_packs/med/defib +/datum/supply_pack/med/defib name = "Defibrillator crate" contains = list(/obj/item/device/defib_kit = 2) cost = 30 diff --git a/code/datums/supplypacks/medical_vr.dm b/code/datums/supplypacks/medical_vr.dm index 989e89297b..2cc35ad600 100644 --- a/code/datums/supplypacks/medical_vr.dm +++ b/code/datums/supplypacks/medical_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/med/medicalbiosuits +/datum/supply_pack/med/medicalbiosuits contains = list( /obj/item/clothing/head/bio_hood/scientist = 3, /obj/item/clothing/suit/bio_suit/scientist = 3, @@ -14,7 +14,7 @@ ) cost = 40 -/datum/supply_packs/med/virologybiosuits +/datum/supply_pack/med/virologybiosuits name = "Virology biohazard gear" contains = list( /obj/item/clothing/suit/bio_suit/virology = 3, diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 225e29335f..bc7687ab78 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/misc +/datum/supply_pack/misc group = "Miscellaneous" -/datum/supply_packs/randomised/misc +/datum/supply_pack/randomised/misc group = "Miscellaneous" -/datum/supply_packs/randomised/misc/card_packs +/datum/supply_pack/randomised/misc/card_packs num_contained = 5 contains = list( /obj/item/weapon/pack/cardemon, @@ -23,14 +23,14 @@ containertype = /obj/structure/closet/crate containername = "cards crate" -/datum/supply_packs/misc/eftpos +/datum/supply_pack/misc/eftpos contains = list(/obj/item/device/eftpos) name = "EFTPOS scanner" cost = 10 containertype = /obj/structure/closet/crate containername = "EFTPOS crate" -/datum/supply_packs/misc/chaplaingear +/datum/supply_pack/misc/chaplaingear name = "Chaplain equipment" contains = list( /obj/item/clothing/under/rank/chaplain, @@ -48,14 +48,14 @@ containertype = "/obj/structure/closet/crate" containername = "Chaplain equipment crate" -/datum/supply_packs/misc/hoverpod +/datum/supply_pack/misc/hoverpod name = "Hoverpod Shipment" contains = list() cost = 80 containertype = /obj/structure/largecrate/hoverpod containername = "Hoverpod Crate" -/datum/supply_packs/randomised/misc/webbing +/datum/supply_pack/randomised/misc/webbing name = "Webbing crate" num_contained = 4 contains = list( @@ -71,7 +71,7 @@ containertype = "/obj/structure/closet/crate" containername = "Webbing crate" -/datum/supply_packs/misc/holoplant +/datum/supply_pack/misc/holoplant name = "Holoplant Pot" contains = list(/obj/machinery/holoplant/shipped) cost = 15 diff --git a/code/datums/supplypacks/misc_vr.dm b/code/datums/supplypacks/misc_vr.dm index 6ff285ef99..072c4001fa 100644 --- a/code/datums/supplypacks/misc_vr.dm +++ b/code/datums/supplypacks/misc_vr.dm @@ -1,5 +1,5 @@ -/datum/supply_packs/misc/beltminer +/datum/supply_pack/misc/beltminer name = "Belt-miner gear crate" contains = list( /obj/item/weapon/gun/energy/particle = 2, @@ -13,7 +13,7 @@ containername = "Belt-miner gear crate" access = access_mining -/datum/supply_packs/misc/eva_rig +/datum/supply_pack/misc/eva_rig name = "eva hardsuit (empty)" contains = list( /obj/item/weapon/rig/eva = 1 @@ -23,7 +23,7 @@ containername = "eva hardsuit crate" access = access_mining -/datum/supply_packs/misc/mining_rig +/datum/supply_pack/misc/mining_rig name = "industrial hardsuit (empty)" contains = list( /obj/item/weapon/rig/industrial = 1 diff --git a/code/datums/supplypacks/munitions.dm b/code/datums/supplypacks/munitions.dm index eed77bbf2f..1e5bbb4d45 100644 --- a/code/datums/supplypacks/munitions.dm +++ b/code/datums/supplypacks/munitions.dm @@ -3,13 +3,13 @@ * related to weapons live. */ -/datum/supply_packs/munitions +/datum/supply_pack/munitions group = "Munitions" -/datum/supply_packs/randomised/munitions +/datum/supply_pack/randomised/munitions group = "Munitions" /* VOREStation Removal - What? This crate costs 40... the crate with just two eguns costs 50... what??? This crate is also like "the armory" and has OFFICER access? -/datum/supply_packs/munitions/weapons +/datum/supply_pack/munitions/weapons name = "Weapons - Security basic equipment" contains = list( /obj/item/device/flash = 2, @@ -24,7 +24,7 @@ containername = "Security equipment crate" access = access_security*/ -/datum/supply_packs/munitions/egunpistol +/datum/supply_pack/munitions/egunpistol name = "Weapons - Energy sidearms" contains = list(/obj/item/weapon/gun/energy/gun = 2) cost = 50 @@ -32,7 +32,7 @@ containername = "Energy sidearms crate" access = access_armory //VOREStation Edit - Guns are for the armory. -/datum/supply_packs/munitions/flareguns +/datum/supply_pack/munitions/flareguns name = "Weapons - Flare guns" contains = list( /obj/item/weapon/gun/projectile/sec/flash, @@ -45,7 +45,7 @@ containername = "Flare gun crate" access = access_armory //VOREStation Edit - Guns are for the armory. -/datum/supply_packs/munitions/eweapons +/datum/supply_pack/munitions/eweapons name = "Weapons - Experimental weapons crate" contains = list( /obj/item/weapon/gun/energy/xray = 2, @@ -55,7 +55,7 @@ containername = "Experimental weapons crate" access = access_armory -/datum/supply_packs/munitions/energyweapons +/datum/supply_pack/munitions/energyweapons name = "Weapons - Laser rifle crate" contains = list(/obj/item/weapon/gun/energy/laser = 2) //VOREStation Edit - Made to be consistent with the energy guns crate. cost = 50 @@ -63,7 +63,7 @@ containername = "Energy weapons crate" access = access_armory -/datum/supply_packs/munitions/shotgun +/datum/supply_pack/munitions/shotgun name = "Weapons - Shotgun crate" contains = list( /obj/item/weapon/storage/box/shotgunammo, @@ -75,7 +75,7 @@ containername = "Shotgun crate" access = access_armory /* VOREStation edit -- This is a bad idea. -- So is this. -/datum/supply_packs/munitions/erifle +/datum/supply_pack/munitions/erifle name = "Weapons - Energy marksman" contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2) cost = 100 @@ -83,7 +83,7 @@ containername = "Energy marksman crate" access = access_armory -/datum/supply_packs/munitions/burstlaser +/datum/supply_pack/munitions/burstlaser name = "Weapons - Burst laser" contains = list(/obj/item/weapon/gun/energy/gun/burst = 2) cost = 50 @@ -91,7 +91,7 @@ containername = "Burst laser crate" access = access_armory */ -/datum/supply_packs/munitions/ionweapons +/datum/supply_pack/munitions/ionweapons name = "Weapons - Electromagnetic Rifles" contains = list( /obj/item/weapon/gun/energy/ionrifle = 2, @@ -102,7 +102,7 @@ containername = "Electromagnetic weapons crate" access = access_armory -/datum/supply_packs/munitions/ionpistols +/datum/supply_pack/munitions/ionpistols name = "Weapons - Electromagnetic pistols" contains = list( /obj/item/weapon/gun/energy/ionrifle/pistol = 2, @@ -113,7 +113,7 @@ containername = "Electromagnetic weapons crate" access = access_armory -/datum/supply_packs/munitions/bsmg +/datum/supply_pack/munitions/bsmg name = "Weapons - Ballistic SMGs" contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 2) cost = 50 @@ -121,7 +121,7 @@ containername = "Ballistic weapon crate" access = access_armory -/datum/supply_packs/munitions/brifle +/datum/supply_pack/munitions/brifle name = "Weapons - Ballistic Rifles" contains = list(/obj/item/weapon/gun/projectile/automatic/z8 = 2) cost = 80 @@ -129,7 +129,7 @@ containername = "Ballistic weapon crate" access = access_armory -/datum/supply_packs/munitions/bolt_rifles_competitive +/datum/supply_pack/munitions/bolt_rifles_competitive name = "Weapons - Competitive shooting rifles" contains = list( /obj/item/device/assembly/timer, @@ -144,7 +144,7 @@ containername = "Ballistic Weapons crate" access = access_armory //VOREStation Edit - Guns are for the armory. -/datum/supply_packs/munitions/shotgunammo +/datum/supply_pack/munitions/shotgunammo name = "Ammunition - Shotgun shells" contains = list( /obj/item/weapon/storage/box/shotgunammo = 2, @@ -155,7 +155,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/beanbagammo +/datum/supply_pack/munitions/beanbagammo name = "Ammunition - Beanbag shells" contains = list(/obj/item/weapon/storage/box/beanbags = 3) cost = 25 @@ -163,7 +163,7 @@ containername = "Ballistic ammunition crate" access = access_armory //VOREStation Edit - Guns are for the armory. -/datum/supply_packs/munitions/bsmgammo +/datum/supply_pack/munitions/bsmgammo name = "Ammunition - 9mm top mounted lethal" contains = list(/obj/item/ammo_magazine/m9mmt = 6) cost = 25 @@ -171,7 +171,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/bsmgammorubber +/datum/supply_pack/munitions/bsmgammorubber name = "Ammunition - 9mm top mounted rubber" contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6) cost = 25 @@ -179,7 +179,7 @@ containername = "Ballistic ammunition crate" access = access_security -/datum/supply_packs/munitions/brifleammo +/datum/supply_pack/munitions/brifleammo name = "Ammunition - 7.62mm lethal" contains = list(/obj/item/ammo_magazine/m762 = 6) cost = 25 @@ -187,7 +187,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/pcellammo +/datum/supply_pack/munitions/pcellammo name = "Ammunition - Power cell" contains = list(/obj/item/weapon/cell/device/weapon = 3) cost = 50 diff --git a/code/datums/supplypacks/munitions_vr.dm b/code/datums/supplypacks/munitions_vr.dm index 01a5becdf9..e6629435bf 100644 --- a/code/datums/supplypacks/munitions_vr.dm +++ b/code/datums/supplypacks/munitions_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/munitions/expeditionguns +/datum/supply_pack/munitions/expeditionguns name = "Frontier phaser (station-locked) crate" contains = list( /obj/item/weapon/gun/energy/frontier/locked = 2, diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 7f801ea1b3..684ef962f4 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/recreation +/datum/supply_pack/recreation group = "Recreation" -/datum/supply_packs/randomised/recreation +/datum/supply_pack/randomised/recreation group = "Recreation" access = access_security -/datum/supply_packs/recreation/foam_weapons +/datum/supply_pack/recreation/foam_weapons name = "Foam Weapon Crate" contains = list( /obj/item/weapon/material/sword/foam = 2, @@ -23,7 +23,7 @@ containertype = /obj/structure/closet/crate containername = "foam weapon crate" -/datum/supply_packs/recreation/lasertag +/datum/supply_pack/recreation/lasertag name = "Lasertag equipment" contains = list( /obj/item/weapon/gun/energy/lasertag/red, @@ -35,7 +35,7 @@ containername = "Lasertag Closet" cost = 10 -/datum/supply_packs/recreation/artscrafts +/datum/supply_pack/recreation/artscrafts name = "Arts and Crafts supplies" contains = list( /obj/item/weapon/storage/fancy/crayons, @@ -58,7 +58,7 @@ containertype = "/obj/structure/closet/crate" containername = "Arts and Crafts crate" -/datum/supply_packs/recreation/painters +/datum/supply_pack/recreation/painters name = "Station Painting Supplies" cost = 10 containername = "station painting supplies crate" diff --git a/code/datums/supplypacks/recreation_vr.dm b/code/datums/supplypacks/recreation_vr.dm index cf12b4815b..007f3d2d88 100644 --- a/code/datums/supplypacks/recreation_vr.dm +++ b/code/datums/supplypacks/recreation_vr.dm @@ -1,5 +1,5 @@ /* -/datum/supply_packs/recreation/rover +/datum/supply_pack/recreation/rover name = "NT Humvee" contains = list( /obj/vehicle/train/rover/engine @@ -8,7 +8,7 @@ containername = "NT Humvee Crate" cost = 100 */ -/datum/supply_packs/recreation/restraints +/datum/supply_pack/recreation/restraints name = "Recreational Restraints" contains = list( /obj/item/clothing/mask/muzzle, @@ -27,7 +27,7 @@ containername = "Restraints crate" cost = 30 -/datum/supply_packs/recreation/wolfgirl_cosplay_crate +/datum/supply_pack/recreation/wolfgirl_cosplay_crate name = "Wolfgirl Cosplay Crate" contains = list( /obj/item/clothing/head/fluff/awoo = 1, @@ -40,7 +40,7 @@ containertype = /obj/structure/closet/crate containername = "wolfgirl cosplay crate" -/datum/supply_packs/randomised/recreation/figures_vr +/datum/supply_pack/randomised/recreation/figures_vr name = "Action figures crate" num_contained = 5 contains = list( @@ -50,7 +50,7 @@ containertype = /obj/structure/closet/crate containername = "Action figures crate" -/datum/supply_packs/recreation/characters_vr +/datum/supply_pack/recreation/characters_vr name = "Tabletop miniatures" contains = list( /obj/item/weapon/storage/box/characters @@ -59,7 +59,7 @@ containername = "Tabletop miniatures crate" cost = 50 -/datum/supply_packs/randomised/recreation/plushies_vr +/datum/supply_pack/randomised/recreation/plushies_vr name = "Plushies crate" num_contained = 3 contains = list( diff --git a/code/datums/supplypacks/robotics.dm b/code/datums/supplypacks/robotics.dm index d9f20c5aa6..1c1eb7f2bb 100644 --- a/code/datums/supplypacks/robotics.dm +++ b/code/datums/supplypacks/robotics.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/robotics +/datum/supply_pack/robotics group = "Robotics" -/datum/supply_packs/randomised/robotics +/datum/supply_pack/randomised/robotics group = "Robotics" access = access_robotics -/datum/supply_packs/robotics/robotics_assembly +/datum/supply_pack/robotics/robotics_assembly name = "Robotics assembly crate" contains = list( /obj/item/device/assembly/prox_sensor = 3, @@ -24,7 +24,7 @@ containername = "Robotics assembly" access = access_robotics -/*/datum/supply_packs/robotics/robolimbs_basic +/*/datum/supply_pack/robotics/robolimbs_basic name = "Basic robolimb blueprints" contains = list( /obj/item/weapon/disk/limb/morpheus, @@ -35,7 +35,7 @@ containername = "Robolimb blueprints (basic)" access = access_robotics -/datum/supply_packs/robotics/robolimbs_adv +/datum/supply_pack/robotics/robolimbs_adv name = "All robolimb blueprints" contains = list( /obj/item/weapon/disk/limb/bishop, @@ -52,7 +52,7 @@ access = access_robotics */ -/datum/supply_packs/robotics/robolimbs/morpheus +/datum/supply_pack/robotics/robolimbs/morpheus name = "Morpheus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/morpheus) cost = 20 @@ -60,7 +60,7 @@ containername = "Robolimb blueprints (Morpheus)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/cybersolutions +/datum/supply_pack/robotics/robolimbs/cybersolutions name = "Cyber Solutions robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/cybersolutions) cost = 20 @@ -68,7 +68,7 @@ containername = "Robolimb blueprints (Cyber Solutions)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/xion +/datum/supply_pack/robotics/robolimbs/xion name = "Xion robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/xion) cost = 20 @@ -76,7 +76,7 @@ containername = "Robolimb blueprints (Xion)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/grayson +/datum/supply_pack/robotics/robolimbs/grayson name = "Grayson robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/grayson) cost = 30 @@ -84,7 +84,7 @@ containername = "Robolimb blueprints (Grayson)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/hephaestus +/datum/supply_pack/robotics/robolimbs/hephaestus name = "Hephaestus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/hephaestus) cost = 35 @@ -92,7 +92,7 @@ containername = "Robolimb blueprints (Hephaestus)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/wardtakahashi +/datum/supply_pack/robotics/robolimbs/wardtakahashi name = "Ward-Takahashi robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/wardtakahashi) cost = 35 @@ -100,7 +100,7 @@ containername = "Robolimb blueprints (Ward-Takahashi)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/zenghu +/datum/supply_pack/robotics/robolimbs/zenghu name = "Zeng Hu robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/zenghu) cost = 35 @@ -108,7 +108,7 @@ containername = "Robolimb blueprints (Zeng Hu)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/bishop +/datum/supply_pack/robotics/robolimbs/bishop name = "Bishop robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/bishop) cost = 70 @@ -116,7 +116,7 @@ containername = "Robolimb blueprints (Bishop)" access = access_robotics -/datum/supply_packs/robotics/mecha_ripley +/datum/supply_pack/robotics/mecha_ripley name = "Circuit Crate (\"Ripley\" APLU)" contains = list( /obj/item/weapon/book/manual/ripley_build_and_repair, @@ -128,7 +128,7 @@ containername = "APLU \"Ripley\" Circuit Crate" access = access_robotics -/datum/supply_packs/robotics/mecha_odysseus +/datum/supply_pack/robotics/mecha_odysseus name = "Circuit Crate (\"Odysseus\")" contains = list( /obj/item/weapon/circuitboard/mecha/odysseus/peripherals, @@ -139,7 +139,7 @@ containername = "\"Odysseus\" Circuit Crate" access = access_robotics -/datum/supply_packs/randomised/robotics/exosuit_mod +/datum/supply_pack/randomised/robotics/exosuit_mod num_contained = 1 contains = list( /obj/item/device/kit/paint/ripley, @@ -152,7 +152,7 @@ containertype = /obj/structure/closet/crate/science containername = "heavy crate" -/datum/supply_packs/randomised/robotics/exosuit_mod/durand +/datum/supply_pack/randomised/robotics/exosuit_mod/durand contains = list( /obj/item/device/kit/paint/durand, /obj/item/device/kit/paint/durand/seraph, @@ -160,7 +160,7 @@ ) name = "Random Durand exosuit modkit" -/datum/supply_packs/randomised/robotics/exosuit_mod/gygax +/datum/supply_pack/randomised/robotics/exosuit_mod/gygax contains = list( /obj/item/device/kit/paint/gygax, /obj/item/device/kit/paint/gygax/darkgygax, @@ -168,7 +168,7 @@ ) name = "Random Gygax exosuit modkit" -/datum/supply_packs/robotics/jumper_cables +/datum/supply_pack/robotics/jumper_cables name = "Jumper kit crate" contains = list( /obj/item/device/defib_kit/jumper_kit = 2 @@ -176,4 +176,25 @@ cost = 30 containertype = /obj/structure/closet/crate/secure/science containername = "Jumper kit crate" - access = access_robotics \ No newline at end of file + access = access_robotics + +/datum/supply_pack/robotics/bike + name = "Spacebike Crate" + contains = list() + cost = 350 + containertype = /obj/structure/largecrate/vehicle/bike + containername = "Spacebike Crate" + +/datum/supply_pack/robotics/quadbike + name = "ATV Crate" + contains = list() + cost = 300 + containertype = /obj/structure/largecrate/vehicle/quadbike + containername = "ATV Crate" + +/datum/supply_pack/robotics/quadtrailer + name = "ATV Trailer Crate" + contains = list() + cost = 250 + containertype = /obj/structure/largecrate/vehicle/quadtrailer + containername = "ATV Trailer Crate" diff --git a/code/datums/supplypacks/robotics_vr.dm b/code/datums/supplypacks/robotics_vr.dm index 9ee67ebb9d..5e06210079 100644 --- a/code/datums/supplypacks/robotics_vr.dm +++ b/code/datums/supplypacks/robotics_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/robotics/mecha_gopher +/datum/supply_pack/robotics/mecha_gopher name = "Circuit Crate (\"Gopher\" APLU)" contains = list( /obj/item/weapon/circuitboard/mecha/gopher/main, @@ -8,8 +8,8 @@ containertype = /obj/structure/closet/crate/secure/science containername = "APLU \"Gopher\" Circuit Crate" access = access_robotics - -/datum/supply_packs/robotics/mecha_polecat + +/datum/supply_pack/robotics/mecha_polecat name = "Circuit Crate (\"Polecat\" APLU)" contains = list( /obj/item/weapon/circuitboard/mecha/polecat/main, @@ -21,7 +21,7 @@ containername = "APLU \"Polecat\" Circuit Crate" access = access_robotics -/datum/supply_packs/robotics/mecha_weasel +/datum/supply_pack/robotics/mecha_weasel name = "Circuit Crate (\"Weasel\" APLU)" contains = list( /obj/item/weapon/circuitboard/mecha/weasel/main, @@ -33,7 +33,7 @@ containername = "APLU \"Weasel\" Circuit Crate" access = access_robotics -/datum/supply_packs/robotics/some_robolimbs +/datum/supply_pack/robotics/some_robolimbs name = "Basic Robolimb Blueprints" contains = list( /obj/item/weapon/disk/limb/morpheus, @@ -45,7 +45,7 @@ containername = "Basic Robolimb Blueprint Crate" access = access_robotics -/datum/supply_packs/robotics/all_robolimbs +/datum/supply_pack/robotics/all_robolimbs name = "Advanced Robolimb Blueprints" contains = list( /obj/item/weapon/disk/limb/bishop, diff --git a/code/datums/supplypacks/science.dm b/code/datums/supplypacks/science.dm index d88718555a..83407c2866 100644 --- a/code/datums/supplypacks/science.dm +++ b/code/datums/supplypacks/science.dm @@ -2,25 +2,17 @@ * Here is where any supply packs * related to security tasks live */ -/datum/supply_packs/sci +/datum/supply_pack/sci group = "Science" -/datum/supply_packs/sci/virus - name = "Virus sample crate" - contains = list(/obj/item/weapon/virusdish/random = 4) - cost = 25 - containertype = "/obj/structure/closet/crate/secure" - containername = "Virus sample crate" - access = access_cmo - -/datum/supply_packs/sci/coolanttank +/datum/supply_pack/sci/coolanttank name = "Coolant tank crate" contains = list(/obj/structure/reagent_dispensers/coolanttank) cost = 15 containertype = /obj/structure/largecrate containername = "coolant tank crate" -/datum/supply_packs/sci/phoron +/datum/supply_pack/sci/phoron name = "Phoron research crate" contains = list( /obj/item/weapon/tank/phoron = 3, @@ -36,7 +28,7 @@ containername = "Phoron assembly crate" access = access_tox_storage -/datum/supply_packs/sci/exoticseeds +/datum/supply_pack/sci/exoticseeds name = "Exotic seeds crate" contains = list( /obj/item/seeds/replicapod = 2, @@ -51,14 +43,14 @@ containername = "Exotic Seeds crate" access = access_hydroponics -/datum/supply_packs/sci/integrated_circuit_printer +/datum/supply_pack/sci/integrated_circuit_printer name = "Integrated circuit printer" contains = list(/obj/item/device/integrated_circuit_printer = 2) cost = 15 containertype = /obj/structure/closet/crate containername = "Integrated circuit crate" -/datum/supply_packs/sci/integrated_circuit_printer_upgrade +/datum/supply_pack/sci/integrated_circuit_printer_upgrade name = "Integrated circuit printer upgrade - advanced designs" contains = list(/obj/item/weapon/disk/integrated_circuit/upgrade/advanced) cost = 30 diff --git a/code/datums/supplypacks/science_vr.dm b/code/datums/supplypacks/science_vr.dm index 4dbb5b847e..0f507ce8e0 100644 --- a/code/datums/supplypacks/science_vr.dm +++ b/code/datums/supplypacks/science_vr.dm @@ -1,5 +1,5 @@ /* -/datum/supply_packs/sci/dune_buggy +/datum/supply_pack/sci/dune_buggy name = "Exploration Dune Buggy" contains = list( /obj/vehicle/train/rover/engine/dunebuggy @@ -8,14 +8,14 @@ containertype = /obj/structure/largecrate containername = "Exploration Dune Buggy Crate" */ -/datum/supply_packs/sci/pred +/datum/supply_pack/sci/pred name = "Dangerous Predator crate" cost = 40 containertype = /obj/structure/largecrate/animal/pred containername = "Dangerous Predator crate" access = access_xenobiology -/datum/supply_packs/sci/pred_doom +/datum/supply_pack/sci/pred_doom name = "EXTREMELY Dangerous Predator crate" cost = 200 containertype = /obj/structure/largecrate/animal/dangerous @@ -23,14 +23,14 @@ access = access_xenobiology contraband = 1 -/datum/supply_packs/sci/otie +/datum/supply_pack/sci/otie name = "VARMAcorp adoptable reject (Dangerous!)" cost = 100 containertype = /obj/structure/largecrate/animal/otie containername = "VARMAcorp adoptable reject (Dangerous!)" access = access_xenobiology -/datum/supply_packs/sci/phoronotie +/datum/supply_pack/sci/phoronotie name = "VARMAcorp adaptive beta subject (Experimental)" cost = 200 containertype = /obj/structure/largecrate/animal/otie/phoron diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 4472ef4005..40698def5d 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -4,15 +4,15 @@ */ -/datum/supply_packs/security +/datum/supply_pack/security group = "Security" access = access_security -/datum/supply_packs/randomised/security +/datum/supply_pack/randomised/security group = "Security" access = access_security -/datum/supply_packs/randomised/security/armor +/datum/supply_pack/randomised/security/armor name = "Armor - Security armor" num_contained = 5 contains = list( @@ -33,7 +33,7 @@ containername = "Armor crate" access_armory //VOREStation Add - Armor is for the armory. -/datum/supply_packs/security/riot_gear +/datum/supply_pack/security/riot_gear name = "Gear - Riot" contains = list( /obj/item/weapon/melee/baton = 3, @@ -48,7 +48,7 @@ containername = "Riot gear crate" access = access_armory -/datum/supply_packs/security/riot_armor +/datum/supply_pack/security/riot_armor name = "Armor - Riot" contains = list( /obj/item/clothing/head/helmet/riot, @@ -61,7 +61,7 @@ containername = "Riot armor crate" access = access_armory -/datum/supply_packs/security/ablative_armor +/datum/supply_pack/security/ablative_armor name = "Armor - Ablative" contains = list( /obj/item/clothing/head/helmet/laserproof, @@ -74,7 +74,7 @@ containername = "Ablative armor crate" access = access_armory -/datum/supply_packs/security/bullet_resistant_armor +/datum/supply_pack/security/bullet_resistant_armor name = "Armor - Ballistic" contains = list( /obj/item/clothing/head/helmet/bulletproof, @@ -87,7 +87,7 @@ containername = "Ballistic armor crate" access = access_armory /* VOREStation Removal - Howabout no ERT armor being orderable? -/datum/supply_packs/security/combat_armor +/datum/supply_pack/security/combat_armor name = "Armor - Combat" contains = list( /obj/item/clothing/head/helmet/combat, @@ -100,7 +100,7 @@ containername = "Combat armor crate" access = access_armory -/datum/supply_packs/security/tactical +/datum/supply_pack/security/tactical name = "Armor - Tactical" containertype = /obj/structure/closet/crate/secure/gear containername = "Tactical armor crate" @@ -125,7 +125,7 @@ /obj/item/clothing/gloves/black ) */ -/datum/supply_packs/security/securitybarriers +/datum/supply_pack/security/securitybarriers name = "Misc - Security Barriers" contains = list(/obj/machinery/deployable/barrier = 4) cost = 20 @@ -133,7 +133,7 @@ containername = "Security barrier crate" access = null -/datum/supply_packs/security/securityshieldgen +/datum/supply_pack/security/securityshieldgen name = "Misc - Wall shield generators" contains = list(/obj/machinery/shieldwallgen = 4) cost = 20 @@ -141,7 +141,7 @@ containername = "Wall shield generators crate" access = access_teleporter -/datum/supply_packs/randomised/security/holster +/datum/supply_pack/randomised/security/holster name = "Gear - Holsters" num_contained = 4 contains = list( @@ -154,7 +154,7 @@ containertype = /obj/structure/closet/crate containername = "Holster crate" -/datum/supply_packs/security/extragear +/datum/supply_pack/security/extragear name = "Gear - Security surplus equipment" contains = list( /obj/item/weapon/storage/belt/security = 3, @@ -166,7 +166,7 @@ containertype = /obj/structure/closet/crate containername = "Security surplus equipment" -/datum/supply_packs/security/detectivegear +/datum/supply_pack/security/detectivegear name = "Forensic - Investigation equipment" contains = list( /obj/item/weapon/storage/box/evidence = 2, @@ -193,7 +193,7 @@ containername = "Forensic equipment" access = access_forensics_lockers -/datum/supply_packs/security/detectiveclothes +/datum/supply_pack/security/detectiveclothes name = "Forensic - Investigation apparel" contains = list( /obj/item/clothing/under/det/black = 2, @@ -215,7 +215,7 @@ containername = "Investigation clothing" access = access_forensics_lockers -/datum/supply_packs/security/officergear +/datum/supply_pack/security/officergear name = "Gear - Officer equipment" contains = list( /obj/item/clothing/suit/storage/vest/officer, @@ -245,7 +245,7 @@ containername = "Officer equipment" access = access_brig -/datum/supply_packs/security/wardengear +/datum/supply_pack/security/wardengear name = "Gear - Warden equipment" contains = list( /obj/item/clothing/suit/storage/vest/warden, @@ -273,7 +273,7 @@ containername = "Warden equipment" access = access_armory -/datum/supply_packs/security/headofsecgear +/datum/supply_pack/security/headofsecgear name = "Gear - Head of security equipment" contains = list( /obj/item/clothing/head/helmet/HoS, @@ -299,7 +299,7 @@ containername = "Head of security equipment" access = access_hos -/datum/supply_packs/security/securityclothing +/datum/supply_pack/security/securityclothing name = "Misc - Security uniform red" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -317,7 +317,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Security uniform crate" -/datum/supply_packs/security/navybluesecurityclothing +/datum/supply_pack/security/navybluesecurityclothing name = "Misc - Security uniform navy blue" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -338,7 +338,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Navy blue security uniform crate" -/datum/supply_packs/security/corporatesecurityclothing +/datum/supply_pack/security/corporatesecurityclothing name = "Misc - Security uniform corporate" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -358,7 +358,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Corporate security uniform crate" -/datum/supply_packs/security/biosuit +/datum/supply_pack/security/biosuit name = "Gear - Security biohazard gear" contains = list( /obj/item/clothing/head/bio_hood/security = 3, diff --git a/code/datums/supplypacks/security_vr.dm b/code/datums/supplypacks/security_vr.dm index 4c77b42e06..9c1ea33d43 100644 --- a/code/datums/supplypacks/security_vr.dm +++ b/code/datums/supplypacks/security_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/security/guardbeast +/datum/supply_pack/security/guardbeast name = "VARMAcorp autoNOMous security solution" cost = 150 containertype = /obj/structure/largecrate/animal/guardbeast @@ -7,7 +7,7 @@ access_security, access_xenobiology) -/datum/supply_packs/security/guardmutant +/datum/supply_pack/security/guardmutant name = "VARMAcorp autoNOMous security solution for hostile environments" cost = 250 containertype = /obj/structure/largecrate/animal/guardmutant @@ -16,7 +16,7 @@ access_security, access_xenobiology) -/datum/supply_packs/security/biosuit +/datum/supply_pack/security/biosuit contains = list( /obj/item/clothing/head/bio_hood/security = 3, /obj/item/clothing/under/rank/security = 3, diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index 47763854d2..e8f26993ff 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -3,10 +3,10 @@ * related to civilian tasks live */ -/datum/supply_packs/supply +/datum/supply_pack/supply group = "Supplies" -/datum/supply_packs/supply/food +/datum/supply_pack/supply/food name = "Kitchen supply crate" contains = list( /obj/item/weapon/reagent_containers/food/condiment/flour = 6, @@ -20,14 +20,14 @@ containertype = /obj/structure/closet/crate/freezer containername = "Food crate" -/datum/supply_packs/supply/toner +/datum/supply_pack/supply/toner name = "Toner cartridges" contains = list(/obj/item/device/toner = 6) cost = 10 containertype = /obj/structure/closet/crate containername = "Toner cartridges" -/datum/supply_packs/supply/janitor +/datum/supply_pack/supply/janitor name = "Janitorial supplies" contains = list( /obj/item/weapon/reagent_containers/glass/bucket, @@ -50,7 +50,7 @@ containertype = /obj/structure/closet/crate containername = "Janitorial supplies" -/datum/supply_packs/supply/shipping +/datum/supply_pack/supply/shipping name = "Shipping supplies" contains = list( /obj/fiftyspawner/cardboard, @@ -58,13 +58,13 @@ /obj/item/weapon/wrapping_paper = 2, /obj/item/device/destTagger, /obj/item/weapon/hand_labeler, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tape_roll = 2) cost = 10 containertype = "/obj/structure/closet/crate" containername = "Shipping supplies crate" -/datum/supply_packs/supply/bureaucracy +/datum/supply_pack/supply/bureaucracy contains = list( /obj/item/weapon/clipboard = 2, /obj/item/weapon/pen/red, @@ -84,14 +84,14 @@ containertype = /obj/structure/closet/crate containername = "Office supplies crate" -/datum/supply_packs/supply/spare_pda +/datum/supply_pack/supply/spare_pda name = "Spare PDAs" cost = 10 containertype = /obj/structure/closet/crate containername = "Spare PDA crate" contains = list(/obj/item/device/pda = 3) -/datum/supply_packs/supply/minergear +/datum/supply_pack/supply/minergear name = "Shaft miner equipment" contains = list( /obj/item/weapon/storage/backpack/industrial, @@ -114,24 +114,24 @@ containertype = "/obj/structure/closet/crate/secure" containername = "Shaft miner equipment" access = access_mining -/* //VOREStation Edit -/datum/supply_packs/supply/mule +/* //VOREStation Edit - Pointless on Tether. +/datum/supply_pack/supply/mule name = "Mulebot Crate" contains = list() cost = 20 containertype = /obj/structure/largecrate/animal/mulebot containername = "Mulebot Crate" */ //VOREStation Edit -/datum/supply_packs/supply/cargotrain +/datum/supply_pack/supply/cargotrain name = "Cargo Train Tug" - contains = list(/obj/vehicle/train/cargo/engine) + contains = list(/obj/vehicle/train/engine) cost = 35 containertype = /obj/structure/largecrate containername = "Cargo Train Tug Crate" -/datum/supply_packs/supply/cargotrailer +/datum/supply_pack/supply/cargotrailer name = "Cargo Train Trolley" - contains = list(/obj/vehicle/train/cargo/trolley) + contains = list(/obj/vehicle/train/trolley) cost = 15 containertype = /obj/structure/largecrate containername = "Cargo Train Trolley Crate" diff --git a/code/datums/supplypacks/supplypacks.dm b/code/datums/supplypacks/supplypacks.dm index 3d2d4807fd..d29f03be6f 100644 --- a/code/datums/supplypacks/supplypacks.dm +++ b/code/datums/supplypacks/supplypacks.dm @@ -4,6 +4,7 @@ //ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards. //BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle. //NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points. +//NOTE NOTE: Hidden var is now deprecated, whoever removed support for it should've removed the var altogether //var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Reagents","Reagent Cartridges","Science","Hydroponics", "Supply", "Miscellaneous") var/list/all_supply_groups = list("Atmospherics", @@ -24,30 +25,35 @@ var/list/all_supply_groups = list("Atmospherics", "Supplies", "Voidsuits") -/datum/supply_packs +/datum/supply_pack var/name = null - var/list/contains = list() - var/manifest = "" + var/list/contains = list() // Typepaths, used to actually spawn the contents + var/list/manifest = list() // Object names, used to compile manifests var/cost = null var/containertype = null var/containername = null var/access = null - var/hidden = 0 var/contraband = 0 + var/num_contained = 0 //number of items picked to be contained in a /randomised crate var/group = "Miscellaneous" -/datum/supply_packs/New() - manifest += "" + manifest += "\proper[initial(O.name)]" -/datum/supply_packs/randomised - var/num_contained //number of items picked to be contained in a randomised crate +/datum/supply_pack/proc/get_html_manifest() + var/dat = "" + if(num_contained) + dat +="Contains any [num_contained] of:" + dat += "" + return dat -/datum/supply_packs/randomised/New() - manifest += "Contains any [num_contained] of:" - ..() \ No newline at end of file +// Keeping this subtype here for posterity, so it's more apparent that this is the subtype to use if making new randomised packs +/datum/supply_pack/randomised + num_contained = 1 \ No newline at end of file diff --git a/code/datums/supplypacks/voidsuits.dm b/code/datums/supplypacks/voidsuits.dm index 699c8ce9ee..e24403e03e 100644 --- a/code/datums/supplypacks/voidsuits.dm +++ b/code/datums/supplypacks/voidsuits.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/voidsuits +/datum/supply_pack/voidsuits group = "Voidsuits" -/datum/supply_packs/voidsuits/atmos +/datum/supply_pack/voidsuits/atmos name = "Atmospheric voidsuits" contains = list( /obj/item/clothing/suit/space/void/atmos = 2, @@ -21,7 +21,7 @@ containername = "Atmospheric voidsuit crate" access = access_atmospherics -/datum/supply_packs/voidsuits/atmos/alt +/datum/supply_pack/voidsuits/atmos/alt name = "Heavy Duty Atmospheric voidsuits" contains = list( /obj/item/clothing/suit/space/void/atmos/alt = 2, @@ -35,7 +35,7 @@ containername = "Heavy Duty Atmospheric voidsuit crate" access = access_atmospherics -/datum/supply_packs/voidsuits/engineering +/datum/supply_pack/voidsuits/engineering name = "Engineering voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering = 2, @@ -49,7 +49,7 @@ containername = "Engineering voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/construction +/datum/supply_pack/voidsuits/engineering/construction name = "Engineering Construction voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/construction = 2, @@ -63,7 +63,7 @@ containername = "Engineering Construction voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/hazmat +/datum/supply_pack/voidsuits/engineering/hazmat name = "Engineering Hazmat voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/hazmat = 2, @@ -77,7 +77,7 @@ containername = "Engineering Hazmat voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/alt +/datum/supply_pack/voidsuits/engineering/alt name = "Reinforced Engineering voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/alt = 2, @@ -91,7 +91,7 @@ containername = "Reinforced Engineering voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/medical +/datum/supply_pack/voidsuits/medical name = "Medical voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical = 2, @@ -105,7 +105,7 @@ containername = "Medical voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/emt +/datum/supply_pack/voidsuits/medical/emt name = "Medical EMT voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/emt = 2, @@ -119,7 +119,7 @@ containername = "Medical EMT voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/bio +/datum/supply_pack/voidsuits/medical/bio name = "Medical Biohazard voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/bio = 2, @@ -133,7 +133,7 @@ containername = "Medical Biohazard voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/alt +/datum/supply_pack/voidsuits/medical/alt name = "Vey-Med Medical voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/alt = 2, @@ -147,7 +147,7 @@ containername = "Vey-Med Medical voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/security +/datum/supply_pack/voidsuits/security name = "Security voidsuits" contains = list( /obj/item/clothing/suit/space/void/security = 2, @@ -160,7 +160,7 @@ containertype = "/obj/structure/closet/crate/secure" containername = "Security voidsuit crate" -/datum/supply_packs/voidsuits/security/crowd +/datum/supply_pack/voidsuits/security/crowd name = "Security Crowd Control voidsuits" contains = list( /obj/item/clothing/suit/space/void/security/riot = 2, @@ -174,7 +174,7 @@ containername = "Security Crowd Control voidsuit crate" access = access_armory -/datum/supply_packs/voidsuits/security/alt +/datum/supply_pack/voidsuits/security/alt name = "Security EVA Riot voidsuits" contains = list( /obj/item/clothing/suit/space/void/security/alt = 2, @@ -188,7 +188,7 @@ containername = "Security EVA Riot voidsuit crate" access = access_armory -/datum/supply_packs/voidsuits/supply +/datum/supply_pack/voidsuits/supply name = "Mining voidsuits" contains = list( /obj/item/clothing/suit/space/void/mining = 2, @@ -201,7 +201,7 @@ containername = "Mining voidsuit crate" access = access_mining -/datum/supply_packs/voidsuits/supply/alt +/datum/supply_pack/voidsuits/supply/alt name = "Frontier Mining voidsuits" contains = list( /obj/item/clothing/suit/space/void/mining/alt = 2, diff --git a/code/datums/supplypacks/voidsuits_vr.dm b/code/datums/supplypacks/voidsuits_vr.dm index 60765435f3..ccf296a10a 100644 --- a/code/datums/supplypacks/voidsuits_vr.dm +++ b/code/datums/supplypacks/voidsuits_vr.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/voidsuits/atmos +/datum/supply_pack/voidsuits/atmos contains = list( /obj/item/clothing/suit/space/void/atmos = 3, /obj/item/clothing/head/helmet/space/void/atmos = 3, @@ -7,7 +7,7 @@ /obj/item/weapon/tank/oxygen = 3, ) -/datum/supply_packs/voidsuits/engineering +/datum/supply_pack/voidsuits/engineering contains = list( /obj/item/clothing/suit/space/void/engineering = 3, /obj/item/clothing/head/helmet/space/void/engineering = 3, @@ -16,7 +16,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/medical +/datum/supply_pack/voidsuits/medical contains = list( /obj/item/clothing/suit/space/void/medical = 3, /obj/item/clothing/head/helmet/space/void/medical = 3, @@ -25,7 +25,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/medical/alt +/datum/supply_pack/voidsuits/medical/alt contains = list( /obj/item/clothing/suit/space/void/medical/alt = 3, /obj/item/clothing/head/helmet/space/void/medical/alt = 3, @@ -34,7 +34,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/security +/datum/supply_pack/voidsuits/security contains = list( /obj/item/clothing/suit/space/void/security = 3, /obj/item/clothing/head/helmet/space/void/security = 3, @@ -43,7 +43,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/security/crowd +/datum/supply_pack/voidsuits/security/crowd contains = list( /obj/item/clothing/suit/space/void/security/riot = 3, /obj/item/clothing/head/helmet/space/void/security/riot = 3, @@ -52,7 +52,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/security/alt +/datum/supply_pack/voidsuits/security/alt contains = list( /obj/item/clothing/suit/space/void/security/alt = 3, /obj/item/clothing/head/helmet/space/void/security/alt = 3, @@ -61,7 +61,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/supply +/datum/supply_pack/voidsuits/supply name = "Mining voidsuits" contains = list( /obj/item/clothing/suit/space/void/mining = 3, @@ -70,7 +70,7 @@ /obj/item/weapon/tank/oxygen = 3 ) -/datum/supply_packs/voidsuits/explorer +/datum/supply_pack/voidsuits/explorer name = "Exploration voidsuits" contains = list( /obj/item/clothing/suit/space/void/exploration = 3, @@ -84,7 +84,7 @@ containername = "Exploration voidsuit crate" access = access_explorer -/datum/supply_packs/voidsuits/pilot +/datum/supply_pack/voidsuits/pilot name = "Pilot voidsuits" contains = list( /obj/item/clothing/suit/space/void/pilot = 1, diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index ab6053da83..dcd708c5f6 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -24,7 +24,7 @@ var/const/WIRE_TRANSMIT = 4 if(WIRE_TRANSMIT) R.broadcasting = !R.broadcasting && !IsIndexCut(WIRE_SIGNAL) - nanomanager.update_uis(holder) + GLOB.nanomanager.update_uis(holder) /datum/wires/radio/UpdateCut(var/index, var/mended) var/obj/item/device/radio/R = holder @@ -38,4 +38,4 @@ var/const/WIRE_TRANSMIT = 4 if(WIRE_TRANSMIT) R.broadcasting = mended && !IsIndexCut(WIRE_SIGNAL) - nanomanager.update_uis(holder) + GLOB.nanomanager.update_uis(holder) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 435ca82fdc..0a83f542db 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -117,7 +117,7 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown" var/obj/item/I = L.get_active_hand() holder.add_hiddenprint(L) if(href_list["cut"]) // Toggles the cut/mend status - if(istype(I, /obj/item/weapon/wirecutters)) + if(I.is_wirecutter()) var/colour = href_list["cut"] CutWireColour(colour) playsound(holder, I.usesound, 20, 1) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index e855a35868..66dbaa6e2e 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -28,8 +28,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station power_light = 0 power_equip = 0 power_environ = 0 - ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/serspaceamb1.ogg') base_turf = /turf/space + ambience = AMBIENCE_SPACE /area/space/atmosalert() return @@ -74,6 +74,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/shuttle/arrival name = "\improper Arrival Shuttle" + ambience = AMBIENCE_ARRIVALS /area/shuttle/arrival/pre_game icon_state = "shuttle2" @@ -81,6 +82,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/shuttle/arrival/station icon_state = "shuttle" dynamic_lighting = 0 + ambience = AMBIENCE_ARRIVALS /area/shuttle/escape name = "\improper Emergency Shuttle" @@ -384,9 +386,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/centcom/terminal name = "\improper Docking Terminal" icon_state = "centcom_dock" + ambience = AMBIENCE_ARRIVALS /area/centcom/tram name = "\improper Tram Station" + ambience = AMBIENCE_ARRIVALS /area/centcom/security name = "\improper CentCom Security" @@ -399,6 +403,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/centcom/command name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action. icon_state = "centcom_command" + ambience = AMBIENCE_HIGHSEC /area/centcom/main_hall name = "\improper Main Hallway" @@ -423,6 +428,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "syndie-ship" requires_power = 0 dynamic_lighting = 0 + ambience = AMBIENCE_HIGHSEC /area/syndicate_mothership/control name = "\improper Mercenary Control Room" @@ -488,6 +494,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 0 flags = RAD_SHIELDED base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC /area/syndicate_station/start name = "\improper Mercenary Forward Operating Base" @@ -542,12 +549,14 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "yellow" requires_power = 0 dynamic_lighting = 0 + ambience = AMBIENCE_OTHERWORLDLY /area/skipjack_station name = "\improper Skipjack" icon_state = "yellow" requires_power = 0 base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC /area/skipjack_station/start name = "\improper Skipjack" @@ -581,6 +590,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/prison name = "\improper Prison Station" icon_state = "brig" + ambience = AMBIENCE_HIGHSEC /area/prison/arrival_airlock name = "\improper Prison Station Airlock" @@ -664,12 +674,16 @@ NOTE: there are two lists of areas in the end of this file: centcom and station //SPACE STATION 13// //////////////////// +/area + ambience = AMBIENCE_GENERIC + //Maintenance /area/maintenance flags = RAD_SHIELDED sound_env = TUNNEL_ENCLOSED turf_initializer = new /datum/turf_initializer/maintenance() + ambience = AMBIENCE_MAINTENANCE /area/maintenance/aft name = "Aft Maintenance" @@ -896,6 +910,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/hallway/primary/ sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_GENERIC /area/hallway/primary/fore name = "\improper Fore Primary Hallway" @@ -1104,6 +1119,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Dormitories" icon_state = "Sleep" flags = RAD_SHIELDED + ambience = AMBIENCE_GENERIC /area/crew_quarters/toilet name = "\improper Dormitory Toilets" @@ -1363,10 +1379,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Library Conference Room" icon_state = "library_conference_room" +/area/chapel + ambience = AMBIENCE_CHAPEL + /area/chapel/main name = "\improper Chapel" icon_state = "chapel" - ambience = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg') sound_env = LARGE_ENCLOSED /area/chapel/office @@ -1470,7 +1488,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/engineering/ name = "\improper Engineering" icon_state = "engineering" - ambience = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg') + ambience = AMBIENCE_ENGINEERING /area/engineering/atmos name = "\improper Atmospherics" @@ -1554,6 +1572,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 1 always_unpowered = 1 dynamic_lighting = 0 + ambience = AMBIENCE_SPACE auxport name = "\improper Fore Port Solar Array" @@ -1639,7 +1658,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper AI Satellite Teleporter Room" icon_state = "teleporter" music = "signal" - ambience = list('sound/ambience/ambimalf.ogg') //MedBay @@ -1749,7 +1767,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical/morgue name = "\improper Morgue" icon_state = "morgue" - ambience = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg','sound/music/main.ogg') /area/medical/chemistry name = "\improper Chemistry" @@ -1850,6 +1867,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/armoury name = "\improper Security - Armory" icon_state = "armory" + ambience = AMBIENCE_HIGHSEC /area/security/briefing_room name = "\improper Security - Briefing Room" @@ -1907,6 +1925,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/tactical name = "\improper Security - Tactical Equipment" icon_state = "Tactical" + ambience = AMBIENCE_HIGHSEC /* @@ -1929,6 +1948,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/nuke_storage name = "\improper Vault" icon_state = "nuke_storage" + ambience = AMBIENCE_HIGHSEC /area/security/checkpoint name = "\improper Security Checkpoint" @@ -1937,6 +1957,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/checkpoint2 name = "\improper Security - Arrival Checkpoint" icon_state = "security" + ambience = AMBIENCE_ARRIVALS /area/security/checkpoint/supply name = "Security Post - Cargo Bay" @@ -2167,16 +2188,19 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/djstation name = "\improper Listening Post" icon_state = "LP" + ambience = AMBIENCE_TECH_RUINS /area/djstation/solars name = "\improper Listening Post Solars" icon_state = "LPS" + ambience = AMBIENCE_TECH_RUINS //DERELICT /area/derelict name = "\improper Derelict Station" icon_state = "storage" + ambience = AMBIENCE_RUINS /area/derelict/hallway/primary name = "\improper Derelict Primary Hallway" @@ -2375,6 +2399,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/ai_monitored/storage/secure name = "Secure Storage" icon_state = "storage" + ambience = AMBIENCE_HIGHSEC /area/ai_monitored/storage/emergency name = "Emergency Storage" @@ -2387,74 +2412,85 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/ai_upload name = "\improper AI Upload Chamber" icon_state = "ai_upload" - ambience = list('sound/ambience/ambimalf.ogg') + ambience = AMBIENCE_AI /area/ai_upload_foyer name = "AI Upload Access" icon_state = "ai_foyer" - ambience = list('sound/ambience/ambimalf.ogg') sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI /area/ai_server_room name = "Messaging Server Room" icon_state = "ai_server" sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI /area/ai name = "\improper AI Chamber" icon_state = "ai_chamber" - ambience = list('sound/ambience/ambimalf.ogg') + ambience = AMBIENCE_AI /area/ai_cyborg_station name = "\improper Cyborg Station" icon_state = "ai_cyborg" sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI /area/aisat name = "\improper AI Satellite" icon_state = "ai" + ambience = AMBIENCE_AI /area/aisat_interior name = "\improper AI Satellite" icon_state = "ai" + ambience = AMBIENCE_AI // The lack of inheritence hurts my soul. /area/AIsatextFP name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 dynamic_lighting = 0 + ambience = AMBIENCE_AI /area/AIsatextFS name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 dynamic_lighting = 0 + ambience = AMBIENCE_AI /area/AIsatextAS name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 dynamic_lighting = 0 + ambience = AMBIENCE_AI /area/AIsatextAP name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 dynamic_lighting = 0 + ambience = AMBIENCE_AI /area/NewAIMain name = "\improper AI Main New" icon_state = "storage" + ambience = AMBIENCE_AI //Misc - +/area/wreck + ambience = AMBIENCE_RUINS /area/wreck/ai name = "\improper AI Chamber" icon_state = "ai" + ambience = AMBIENCE_TECH_RUINS /area/wreck/main name = "\improper Wreck" @@ -2463,10 +2499,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/wreck/engineering name = "\improper Power Room" icon_state = "engine" + ambience = AMBIENCE_TECH_RUINS /area/wreck/bridge name = "\improper Bridge" icon_state = "bridge" + ambience = AMBIENCE_TECH_RUINS /area/generic name = "Unknown" @@ -2476,7 +2514,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station // Telecommunications Satellite /area/tcommsat/ - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = AMBIENCE_ENGINEERING /area/tcommsat/entrance name = "\improper Telecomms Teleporter" @@ -2489,22 +2527,22 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/tcomsat name = "\improper Telecomms Satellite" icon_state = "tcomsatlob" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = AMBIENCE_ENGINEERING /area/tcomfoyer name = "\improper Telecomms Foyer" icon_state = "tcomsatfoyer" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = AMBIENCE_ENGINEERING /area/tcomwest name = "\improper Telecommunications Satellite West Wing" icon_state = "tcomsatwest" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = AMBIENCE_ENGINEERING /area/tcomeast name = "\improper Telecommunications Satellite East Wing" icon_state = "tcomsateast" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = AMBIENCE_ENGINEERING /area/tcommsat/computer name = "\improper Telecomms Control Room" @@ -2523,6 +2561,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/awaymission name = "\improper Strange Location" icon_state = "away" + ambience = AMBIENCE_FOREBODING /area/awaymission/gateway name = "\improper Gateway" @@ -2621,57 +2660,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station luminosity = 1 dynamic_lighting = 0 requires_power = 0 - ambience = list() -// Vorestation Removal - This is very broken. Sounds do not stop when you leave the area. -/* var/sound/mysound = null - - New() - ..() - var/sound/S = new/sound() - mysound = S - S.file = 'sound/ambience/shore.ogg' - S.repeat = 1 - S.wait = 0 - S.channel = 123 - S.volume = 100 - S.priority = 255 - S.status = SOUND_UPDATE - process() - - Entered(atom/movable/Obj,atom/OldLoc) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_UPDATE - Obj << mysound - return - - Exited(atom/movable/Obj) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_PAUSED | SOUND_UPDATE - Obj << mysound - - proc/process() - set background = 1 - - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) - - for(var/mob/living/carbon/human/H in src) - if(H.s_tone > -55) - H.s_tone-- - H.update_icons_body() - if(H.client) - mysound.status = SOUND_UPDATE - H << mysound - if(S) - spawn(sound_delay) - H << S - - spawn(60) .()*/ ///////////////////////////////////////////////////////////////////// /* @@ -2744,53 +2732,3 @@ var/list/the_station_areas = list ( luminosity = 1 dynamic_lighting = 0 requires_power = 0 - var/sound/mysound = null -/* - New() - ..() - var/sound/S = new/sound() - mysound = S - S.file = 'sound/ambience/shore.ogg' - S.repeat = 1 - S.wait = 0 - S.channel = 123 - S.volume = 100 - S.priority = 255 - S.status = SOUND_UPDATE - process() - - Entered(atom/movable/Obj,atom/OldLoc) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_UPDATE - Obj << mysound - return - - Exited(atom/movable/Obj) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_PAUSED | SOUND_UPDATE - Obj << mysound - - proc/process() - set background = 1 - - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) - - for(var/mob/living/carbon/human/H in src) -// if(H.s_tone > -55) //ugh...nice/novel idea but please no. -// H.s_tone-- -// H.update_icons_body() - if(H.client) - mysound.status = SOUND_UPDATE - H << mysound - if(S) - spawn(sound_delay) - H << S - - spawn(60) .() -*/ diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 02c1ef391f..b9ba97b65a 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -35,7 +35,7 @@ // var/list/lights // list of all lights on this area var/list/all_doors = null //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area var/firedoors_closed = 0 - var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') + var/list/ambience = list() var/list/forced_ambience = null var/sound_env = STANDARD_STATION var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf @@ -297,10 +297,6 @@ var/list/mob/living/forced_ambiance_list = new L << sound(null, channel = CHANNEL_AMBIENCE_FORCED) forced_ambiance_list -= L - if(!L.client.ambience_playing) - L.client.ambience_playing = 1 - L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_AMBIENCE) - if(forced_ambience) if(forced_ambience.len) forced_ambiance_list |= L @@ -311,10 +307,10 @@ var/list/mob/living/forced_ambiance_list = new else L << sound(null, channel = CHANNEL_AMBIENCE_FORCED) else if(src.ambience.len && prob(35)) - if((world.time >= L.client.played + 600)) + if((world.time >= L.client.time_last_ambience_played + 1 MINUTE)) var/sound = pick(ambience) - L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE) - L.client.played = world.time + L << sound(sound, repeat = 0, wait = 0, volume = 50, channel = CHANNEL_AMBIENCE) + L.client.time_last_ambience_played = world.time /area/proc/gravitychange(var/gravitystate = 0, var/area/A) A.has_gravity = gravitystate diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index 66a7e86913..e5f22a77d7 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -2,28 +2,23 @@ /area/mine icon_state = "mining" - music = 'sound/ambience/song_game.ogg' sound_env = ASTEROID /area/mine/explored name = "Mine" icon_state = "explored" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') /area/mine/unexplored name = "Mine" icon_state = "unexplored" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') /area/mine/explored/upper_level name = "Upper Level Mine" icon_state = "explored" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') /area/mine/unexplored/upper_level name = "Upper Level Mine" icon_state = "unexplored" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') // OUTPOSTS diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 48ffacb335..f287a23f75 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -16,9 +16,11 @@ var/mob/pulledby = null var/item_state = null // Used to specify the item state for the on-mob overlays. var/icon_scale = 1 // Used to scale icons up or down in update_transform(). + var/icon_rotation = 0 // Used to rotate icons in update_transform() var/old_x = 0 var/old_y = 0 var/datum/riding/riding_datum //VOREStation Add - Moved from /obj/vehicle + var/does_spin = TRUE // Does the atom spin when thrown (of course it does :P) /atom/movable/Destroy() . = ..() @@ -38,7 +40,7 @@ if (pulledby.pulling == src) pulledby.pulling = null pulledby = null - qdel_null(riding_datum) //VOREStation Add + QDEL_NULL(riding_datum) //VOREStation Add /atom/movable/Bump(var/atom/A, yes) if(src.throwing) @@ -127,17 +129,23 @@ src.throw_impact(A,speed) /atom/movable/proc/throw_at(atom/target, range, speed, thrower) - if(!target || !src) return 0 + if(!target || !src) + return 0 + if(target.z != src.z) + return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target - src.throwing = 1 src.thrower = thrower src.throw_source = get_turf(src) //store the origin turf - + src.pixel_z = 0 if(usr) if(HULK in usr.mutations) src.throwing = 2 // really strong throw! + var/dist_travelled = 0 + var/dist_since_sleep = 0 + var/area/a = get_area(src.loc) + var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) @@ -152,77 +160,57 @@ dy = NORTH else dy = SOUTH - var/dist_travelled = 0 - var/dist_since_sleep = 0 - var/area/a = get_area(src.loc) + + var/error + var/major_dir + var/major_dist + var/minor_dir + var/minor_dist if(dist_x > dist_y) - var/error = dist_x/2 - dist_y - - - - while(src && target &&((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a && a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf)) - // only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up - if(error < 0) - var/atom/step = get_step(src, dy) - if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge - break - src.Move(step) - hit_check(speed) - error += dist_x - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) - else - var/atom/step = get_step(src, dx) - if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge - break - src.Move(step) - hit_check(speed) - error -= dist_y - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) - a = get_area(src.loc) + error = dist_x/2 - dist_y + major_dir = dx + major_dist = dist_x + minor_dir = dy + minor_dist = dist_y else - var/error = dist_y/2 - dist_x - while(src && target &&((((src.y < target.y && dy == NORTH) || (src.y > target.y && dy == SOUTH)) && dist_travelled < range) || (a && a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf)) - // only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up - if(error < 0) - var/atom/step = get_step(src, dx) - if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge - break - src.Move(step) - hit_check(speed) - error += dist_y - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) - else - var/atom/step = get_step(src, dy) - if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge - break - src.Move(step) - hit_check(speed) - error -= dist_x - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) + error = dist_y/2 - dist_x + major_dir = dy + major_dist = dist_y + minor_dir = dx + minor_dist = dist_x - a = get_area(src.loc) + while(src && target && src.throwing && istype(src.loc, /turf) \ + && ((abs(target.x - src.x)+abs(target.y - src.y) > 0 && dist_travelled < range) \ + || (a && a.has_gravity == 0) \ + || istype(src.loc, /turf/space))) + // only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up + var/atom/step + if(error >= 0) + step = get_step(src, major_dir) + error -= minor_dist + else + step = get_step(src, minor_dir) + error += major_dist + if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge + break + src.Move(step) + hit_check(speed) + dist_travelled++ + dist_since_sleep++ + if(dist_since_sleep >= speed) + dist_since_sleep = 0 + sleep(1) + a = get_area(src.loc) + // and yet it moves + if(src.does_spin) + src.SpinAnimation(speed = 4, loops = 1) //done throwing, either because it hit something or it finished moving if(isobj(src)) src.throw_impact(get_turf(src),speed) src.throwing = 0 src.thrower = null src.throw_source = null + fall() //Overlays @@ -292,9 +280,14 @@ /atom/movable/proc/update_transform() var/matrix/M = matrix() M.Scale(icon_scale) + M.Turn(icon_rotation) src.transform = M // Use this to set the object's scale. /atom/movable/proc/adjust_scale(new_scale) icon_scale = new_scale update_transform() + +/atom/movable/proc/adjust_rotation(new_rotation) + icon_rotation = new_rotation + update_transform() \ No newline at end of file diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index dfb9d37147..623ccc11a3 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -270,7 +270,7 @@ I.loc = src src.disk = I user << "You insert [I]." - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src return else ..() @@ -428,7 +428,7 @@ data["beakerVolume"] += R.volume // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -465,7 +465,7 @@ irradiating = src.radiation_duration var/lock_state = src.connected.locked src.connected.locked = 1//lock it - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src sleep(10*src.radiation_duration) // sleep for radiation_duration seconds @@ -566,7 +566,7 @@ irradiating = src.radiation_duration var/lock_state = src.connected.locked src.connected.locked = 1//lock it - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src sleep(10*src.radiation_duration) // sleep for radiation_duration seconds @@ -624,7 +624,7 @@ irradiating = src.radiation_duration var/lock_state = src.connected.locked src.connected.locked = 1 //lock it - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src sleep(10*src.radiation_duration) // sleep for radiation_duration seconds @@ -751,7 +751,7 @@ irradiating = 2 var/lock_state = src.connected.locked src.connected.locked = 1//lock it - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src sleep(10*2) // sleep for 2 seconds diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 6e9f040f5c..e919be9527 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -121,7 +121,7 @@ datum/hSB var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox/mechanical for(var/obj/item/device/radio/T in hsb) qdel(T) - new/obj/item/weapon/crowbar (hsb) + new/obj/item/weapon/tool/crowbar (hsb) hsb.loc = usr.loc if("hsbmedkit") var/obj/item/weapon/storage/firstaid/hsb = new/obj/item/weapon/storage/firstaid/regular diff --git a/code/game/gamemodes/technomancer/spells/flame_tongue.dm b/code/game/gamemodes/technomancer/spells/flame_tongue.dm index ffc12344e8..9e2c7b88b3 100644 --- a/code/game/gamemodes/technomancer/spells/flame_tongue.dm +++ b/code/game/gamemodes/technomancer/spells/flame_tongue.dm @@ -22,7 +22,7 @@ welder.setWelding(1) /obj/item/weapon/spell/flame_tongue/Destroy() - qdel_null(welder) + QDEL_NULL(welder) return ..() /obj/item/weapon/weldingtool/spell diff --git a/code/game/gamemodes/technomancer/spells/illusion.dm b/code/game/gamemodes/technomancer/spells/illusion.dm index 3e6d2dd8ab..418df75539 100644 --- a/code/game/gamemodes/technomancer/spells/illusion.dm +++ b/code/game/gamemodes/technomancer/spells/illusion.dm @@ -62,7 +62,7 @@ illusion.emote(what_to_emote) /obj/item/weapon/spell/illusion/Destroy() - qdel_null(illusion) + QDEL_NULL(illusion) copied = null return ..() diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index a6c161982d..659377281e 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -35,7 +35,7 @@ user << "You load [result] lengths of cable into [src]." return - if(istype(O, /obj/item/weapon/wirecutters)) + if(O.is_wirecutter()) if(cable && cable.amount) var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) m = min(m, cable.amount) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 002999d623..de673cec37 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -109,7 +109,7 @@ break data["stasis"] = stasis_level_name - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state) ui.set_initial_data(data) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 121082c008..2fb2d48a82 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -391,7 +391,7 @@ occupantData = attempt_vr(scanner,"get_occupant_data_vr",list(occupantData,H)) //VOREStation Insert data["occupant"] = occupantData - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "adv_med.tmpl", "Body Scanner", 690, 800) ui.set_initial_data(data) diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm index 7edb0697b4..75b93fe90f 100644 --- a/code/game/machinery/airconditioner_vr.dm +++ b/code/game/machinery/airconditioner_vr.dm @@ -29,13 +29,13 @@ to_chat(user, "There is a small display that reads \"[convert_k2c(target_temp)]C\".") /obj/machinery/power/thermoregulator/attackby(obj/item/I, mob/user) - if(isscrewdriver(I)) + if(I.is_screwdriver()) if(default_deconstruction_screwdriver(user,I)) return - if(iscrowbar(I)) + if(I.is_crowbar()) if(default_deconstruction_crowbar(user,I)) return - if(iswrench(I)) + if(I.is_wrench()) anchored = !anchored visible_message("\The [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") playsound(src, I.usesound, 75, 1) @@ -45,7 +45,7 @@ disconnect_from_network() turn_off() return - if(ismultitool(I)) + if(I.is_multitool()) var/new_temp = input("Input a new target temperature, in degrees C.","Target Temperature", 20) as num if(!Adjacent(user) || user.incapacitated()) return diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 8e6acea643..6b4013b820 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -497,7 +497,7 @@ if(!(locked && !remote_connection) || remote_access || issilicon(user)) populate_controls(data) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "air_alarm.tmpl", name, 325, 625, master_ui = master_ui, state = state) ui.set_initial_data(data) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index cb73da0c32..59e9670d1f 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -117,7 +117,7 @@ obj/machinery/computer/general_air_control/Destroy() data["sensors"] = sensors_ui - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmo_control.tmpl", name, 525, 600) ui.set_initial_data(data) @@ -174,7 +174,7 @@ obj/machinery/computer/general_air_control/Destroy() data["input_flow_setting"] = round(input_flow_setting, 0.1) data["pressure_setting"] = pressure_setting - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmo_control.tmpl", name, 660, 500) ui.set_initial_data(data) @@ -284,7 +284,7 @@ obj/machinery/computer/general_air_control/Destroy() data["input_flow_setting"] = round(input_flow_setting, 0.1) data["pressure_setting"] = pressure_setting - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmo_control.tmpl", name, 650, 500) ui.set_initial_data(data) @@ -416,7 +416,7 @@ obj/machinery/computer/general_air_control/Destroy() else data["device_info"] = null - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmo_control.tmpl", name, 650, 500) ui.set_initial_data(data) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index a070ae9161..1749b68ac9 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -240,7 +240,7 @@ update_flag ..() /obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(!istype(W, /obj/item/weapon/wrench) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda)) + if(!W.is_wrench() && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda)) visible_message("\The [user] hits \the [src] with \a [W]!") src.health -= W.force src.add_fingerprint(user) @@ -261,7 +261,7 @@ update_flag ..() - nanomanager.update_uis(src) // Update all NanoUIs attached to src + GLOB.nanomanager.update_uis(src) // Update all NanoUIs attached to src /obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob) return src.attack_hand(user) @@ -289,7 +289,7 @@ update_flag data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 8133cd48fb..c96837265d 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -107,7 +107,7 @@ return ..() /obj/machinery/meter/attackby(var/obj/item/W, var/mob/user) - if(iswrench(W)) + if(W.is_wrench()) playsound(src, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src]...") if(do_after(user, 40 * W.toolspeed)) @@ -119,7 +119,7 @@ qdel(src) return - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) for(var/obj/machinery/atmospherics/pipe/P in loc) pipes_on_turf |= P if(!pipes_on_turf.len) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 84d00eff04..73f5abce4b 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -22,8 +22,8 @@ return 1 /obj/machinery/portable_atmospherics/Destroy() - qdel_null(air_contents) - qdel_null(holding) + QDEL_NULL(air_contents) + QDEL_NULL(holding) . = ..() /obj/machinery/portable_atmospherics/initialize() @@ -113,10 +113,10 @@ update_icon() return - else if (istype(W, /obj/item/weapon/wrench)) + else if (W.is_wrench()) if(connected_port) disconnect() - user << "You disconnect \the [src] from the port." + to_chat(user, "You disconnect \the [src] from the port.") update_icon() playsound(src, W.usesound, 50, 1) return @@ -124,15 +124,15 @@ var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc if(possible_port) if(connect(possible_port)) - user << "You connect \the [src] to the port." + to_chat(user, "You connect \the [src] to the port.") update_icon() playsound(src, W.usesound, 50, 1) return else - user << "\The [src] failed to connect to the port." + to_chat(user, "\The [src] failed to connect to the port.") return else - user << "Nothing happens." + to_chat(user, "Nothing happens.") return else if ((istype(W, /obj/item/device/analyzer)) && Adjacent(user)) @@ -160,7 +160,7 @@ /obj/machinery/portable_atmospherics/powered/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/cell)) if(cell) - user << "There is already a power cell installed." + to_chat(user, "There is already a power cell installed.") return var/obj/item/weapon/cell/C = I @@ -173,9 +173,9 @@ power_change() return - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(!cell) - user << "There is no power cell installed." + to_chat(user, "There is no power cell installed.") return user.visible_message("[user] opens the panel on [src] and removes [cell].", "You open the panel on [src] and remove [cell].") diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 9f31a9ba1a..7e2c786734 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -138,7 +138,7 @@ if (holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 410, state = physical_state) ui.set_initial_data(data) diff --git a/code/game/machinery/atmoalter/pump_vr.dm b/code/game/machinery/atmoalter/pump_vr.dm index d75ba77dc9..e58a81003a 100644 --- a/code/game/machinery/atmoalter/pump_vr.dm +++ b/code/game/machinery/atmoalter/pump_vr.dm @@ -83,7 +83,7 @@ update_connected_network() /obj/machinery/portable_atmospherics/powered/pump/huge/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) if(on) user << "Turn \the [src] off first!" return @@ -97,7 +97,7 @@ //doesn't use power cells if(istype(I, /obj/item/weapon/cell)) return - if (istype(I, /obj/item/weapon/screwdriver)) + if (I.is_screwdriver()) return //doesn't hold tanks @@ -111,7 +111,7 @@ name = "Stationary Air Pump" /obj/machinery/portable_atmospherics/powered/pump/huge/stationary/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) user << "The bolts are too tight for you to unscrew!" return diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 322c13242b..f249d7a8e7 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -114,7 +114,7 @@ if (holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "portscrubber.tmpl", "Portable Scrubber", 480, 400, state = physical_state) ui.set_initial_data(data) @@ -168,7 +168,7 @@ name = "[name] (ID [id])" /obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(var/mob/user as mob) - usr << "You can't directly interact with this machine. Use the scrubber control console." + to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") /obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() src.overlays = 0 @@ -212,21 +212,21 @@ update_connected_network() /obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) if(on) - user << "Turn \the [src] off first!" + to_chat(user, "Turn \the [src] off first!") return anchored = !anchored playsound(src.loc, I.usesound, 50, 1) - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") return //doesn't use power cells if(istype(I, /obj/item/weapon/cell)) return - if (istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) return //doesn't hold tanks @@ -240,8 +240,8 @@ name = "Stationary Air Scrubber" /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/wrench)) - user << "The bolts are too tight for you to unscrew!" + if(I.is_wrench()) + to_chat(user, "The bolts are too tight for you to unscrew!") return ..() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 5669981f77..0ce85959ef 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -51,7 +51,7 @@ update_recipe_list() if(..() || (disabled && !panel_open)) - user << "\The [src] is disabled!" + to_chat(user, "\The [src] is disabled!") return if(shocked) @@ -119,7 +119,7 @@ /obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) if(busy) - user << "\The [src] is busy. Please wait for completion of previous operation." + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return if(default_deconstruction_screwdriver(user, O)) @@ -135,7 +135,7 @@ if(panel_open) //Don't eat multitools or wirecutters used on an open lathe. - if(istype(O, /obj/item/device/multitool) || istype(O, /obj/item/weapon/wirecutters)) + if(istype(O, /obj/item/device/multitool) || O.is_wirecutter()) attack_hand(user) return @@ -146,25 +146,25 @@ return 0 if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/s357) || istype(O,/obj/item/ammo_magazine/s38) || istype (O,/obj/item/ammo_magazine/s44)/* VOREstation Edit*/) // Prevents ammo recycling exploit with speedloaders. - user << "\The [O] is too hazardous to recycle with the autolathe!" + to_chat(user, "\The [O] is too hazardous to recycle with the autolathe!") return /* ToDo: Make this actually check for ammo and change the value of the magazine if it's empty. -Spades var/obj/item/ammo_magazine/speedloader = O if(speedloader.stored_ammo) - user << "\The [speedloader] is too hazardous to put back into the autolathe while there's ammunition inside of it!" + to_chat(user, "\The [speedloader] is too hazardous to put back into the autolathe while there's ammunition inside of it!") return else speedloader.matter = list(DEFAULT_WALL_MATERIAL = 75) // It's just a hunk of scrap metal now. if(istype(O,/obj/item/ammo_magazine)) // This was just for immersion consistency with above. var/obj/item/ammo_magazine/mag = O if(mag.stored_ammo) - user << "\The [mag] is too hazardous to put back into the autolathe while there's ammunition inside of it!" + to_chat(user, "\The [mag] is too hazardous to put back into the autolathe while there's ammunition inside of it!") return*/ //Resources are being loaded. var/obj/item/eating = O if(!eating.matter) - user << "\The [eating] does not contain significant amounts of useful materials and cannot be accepted." + to_chat(user, "\The [eating] does not contain significant amounts of useful materials and cannot be accepted.") return var/filltype = 0 // Used to determine message. @@ -197,12 +197,12 @@ mass_per_sheet += eating.matter[material] if(!filltype) - user << "\The [src] is full. Please remove material from the autolathe in order to insert more." + to_chat(user, "\The [src] is full. Please remove material from the autolathe in order to insert more.") return else if(filltype == 1) - user << "You fill \the [src] to capacity with \the [eating]." + to_chat(user, "You fill \the [src] to capacity with \the [eating].") else - user << "You fill \the [src] with \the [eating]." + to_chat(user, "You fill \the [src] with \the [eating].") flick("autolathe_o", src) // Plays metal insertion animation. Work out a good way to work out a fitting animation. ~Z @@ -228,7 +228,7 @@ add_fingerprint(usr) if(busy) - usr << "The autolathe is busy. Please wait for completion of previous operation." + to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.") return if(href_list["change_category"]) diff --git a/code/game/machinery/autolathe_vr.dm b/code/game/machinery/autolathe_vr.dm index 252a31e6af..489c97f2f5 100644 --- a/code/game/machinery/autolathe_vr.dm +++ b/code/game/machinery/autolathe_vr.dm @@ -2,7 +2,7 @@ name = "SMG magazine (9mm)" path = /obj/item/ammo_magazine/m9mml hidden = 1 - +/* De-coded? /datum/category_item/autolathe/arms/classic_smg_9mmr name = "SMG magazine (9mm rubber)" path = /obj/item/ammo_magazine/m9mml/rubber @@ -14,3 +14,4 @@ /datum/category_item/autolathe/arms/classic_smg_9mmf name = "SMG magazine (9mm flash)" path = /obj/item/ammo_magazine/m9mml/flash +*/ \ No newline at end of file diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 829c819faf..cd8320b571 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -50,43 +50,43 @@ return if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(beaker) - user << "]The [src] is already loaded." + to_chat(user, "]The [src] is already loaded.") else user.remove_from_mob(O) O.loc = src beaker = O updateUsrDialog() else if(processing) - user << "\The [src] is currently processing." + to_chat(user, "\The [src] is currently processing.") else if(istype(O, /obj/item/weapon/storage/bag/plants)) var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= 10) - user << "\The [src] is already full! Activate it." + to_chat(user, "\The [src] is already full! Activate it.") else for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents) G.loc = src i++ if(i >= 10) - user << "You fill \the [src] to its capacity." + to_chat(user, "You fill \the [src] to its capacity.") break if(i < 10) - user << "You empty \the [O] into \the [src]." + to_chat(user, "You empty \the [O] into \the [src].") else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - user << "You cannot put this in \the [src]." + to_chat(user, "You cannot put this in \the [src].") else var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= 10) - user << "\The [src] is full! Activate it." + to_chat(user, "\The [src] is full! Activate it.") else user.remove_from_mob(O) O.loc = src - user << "You put \the [O] in \the [src]" + to_chat(user, "You put \the [O] in \the [src]") update_icon() return @@ -152,7 +152,7 @@ if(stat) //NOPOWER etc return if(processing) - usr << "The biogenerator is in the process of working." + to_chat(usr, "The biogenerator is in the process of working.") return var/S = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index ad898fff62..4d061899e8 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -156,7 +156,7 @@ /obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) update_coverage() // DECONSTRUCTION - if(isscrewdriver(W)) + if(W.is_screwdriver()) //user << "You start to [panel_open ? "close" : "open"] the camera's panel." //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown panel_open = !panel_open @@ -164,10 +164,10 @@ "You screw the camera's panel [panel_open ? "open" : "closed"].") playsound(src.loc, W.usesound, 50, 1) - else if((iswirecutter(W) || ismultitool(W)) && panel_open) + else if((W.is_wirecutter() || istype(W, /obj/item/device/multitool)) && panel_open) interact(user) - else if(iswelder(W) && (wires.CanDeconstruct() || (stat & BROKEN))) + else if(istype(W, /obj/item/weapon/weldingtool) && (wires.CanDeconstruct() || (stat & BROKEN))) if(weld(W, user)) if(assembly) assembly.loc = src.loc diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 67755f24e9..ac876d9632 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -29,7 +29,7 @@ if(0) // State 0 - if(iswrench(W) && isturf(src.loc)) + if(W.is_wrench() && isturf(src.loc)) playsound(src, W.usesound, 50, 1) user << "You wrench the assembly into place." anchored = 1 @@ -40,14 +40,14 @@ if(1) // State 1 - if(iswelder(W)) + if(istype(W, /obj/item/weapon/weldingtool)) if(weld(W, user)) user << "You weld the assembly securely into place." anchored = 1 state = 2 return - else if(iswrench(W)) + else if(W.is_wrench()) playsound(src, W.usesound, 50, 1) user << "You unattach the assembly from its place." anchored = 0 @@ -57,7 +57,7 @@ if(2) // State 2 - if(iscoil(W)) + if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if(C.use(2)) user << "You add wires to the assembly." @@ -66,7 +66,7 @@ user << "You need 2 coils of wire to wire the assembly." return - else if(iswelder(W)) + else if(istype(W, /obj/item/weapon/weldingtool)) if(weld(W, user)) user << "You unweld the assembly from its place." @@ -77,7 +77,7 @@ if(3) // State 3 - if(isscrewdriver(W)) + if(W.is_screwdriver()) playsound(src.loc, W.usesound, 50, 1) var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: "+using_map.station_short+",Security,Secret ", "Set Network", camera_network ? camera_network : NETWORK_DEFAULT)) @@ -115,7 +115,7 @@ break return - else if(iswirecutter(W)) + else if(W.is_wirecutter()) new/obj/item/stack/cable_coil(get_turf(src), 2) playsound(src.loc, W.usesound, 50, 1) @@ -132,7 +132,7 @@ return // Taking out upgrades - else if(iscrowbar(W) && upgrades.len) + else if(W.is_crowbar() && upgrades.len) var/obj/U = locate(/obj) in upgrades if(U) user << "You unattach an upgrade from the assembly." diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 6cb9e63eb5..bad819a985 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -61,7 +61,7 @@ user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") chargelevel = -1 update_icon() - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(charging) user << "Remove the cell first!" return diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a1ef2a8a83..6b5926042f 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -252,7 +252,7 @@ user.drop_item() W.forceMove(src) return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(locked && (anchored || occupant)) to_chat(user, "Can not do that while [src] is in use.") else diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 12fafff5ff..ef1beeaac0 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -55,7 +55,7 @@ data["table"] = table data["victim"] = victim_ui - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "operating.tmpl", src.name, 380, 400) ui.set_initial_data(data) @@ -69,4 +69,4 @@ usr.set_machine(src) src.add_fingerprint(usr) - nanomanager.update_uis(src) \ No newline at end of file + GLOB.nanomanager.update_uis(src) \ No newline at end of file diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 0e68f1e7a3..bc6da68332 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -14,75 +14,75 @@ switch(state) if(0) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) - user << "You wrench the frame into place." + to_chat(user, "You wrench the frame into place.") anchored = 1 state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.isOn()) - user << "The welder must be on for this task." + to_chat(user, "The welder must be on for this task.") return playsound(loc, WT.usesound, 50, 1) if(do_after(user, 20 * WT.toolspeed)) if(!src || !WT.remove_fuel(0, user)) return - user << "You deconstruct the frame." + to_chat(user, "You deconstruct the frame.") new /obj/item/stack/material/plasteel( loc, 4) qdel(src) if(1) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) - user << "You unfasten the frame." + to_chat(user, "You unfasten the frame.") anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You place the circuit board inside the frame." + to_chat(user, "You place the circuit board inside the frame.") icon_state = "1" circuit = P user.drop_item() P.loc = src - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + if(P.is_screwdriver() && circuit) playsound(loc, P.usesound, 50, 1) - user << "You screw the circuit board into place." + to_chat(user, "You screw the circuit board into place.") state = 2 icon_state = "2" - if(istype(P, /obj/item/weapon/crowbar) && circuit) + if(P.is_crowbar() && circuit) playsound(loc, P.usesound, 50, 1) - user << "You remove the circuit board." + to_chat(user, "You remove the circuit board.") state = 1 icon_state = "0" circuit.loc = loc circuit = null if(2) - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + if(P.is_screwdriver() && circuit) playsound(loc, P.usesound, 50, 1) - user << "You unfasten the circuit board." + to_chat(user, "You unfasten the circuit board.") state = 1 icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if (C.get_amount() < 5) - user << "You need five coils of wire to add them to the frame." + to_chat(user, "You need five coils of wire to add them to the frame.") return - user << "You start to add cables to the frame." + to_chat(user, "You start to add cables to the frame.") playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) if (do_after(user, 20) && state == 2) if (C.use(5)) state = 3 icon_state = "3" - user << "You add cables to the frame." + to_chat(user, "You add cables to the frame.") return if(3) - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) if (brain) - user << "Get that brain out of there first" + to_chat(user, "Get that brain out of there first") else playsound(loc, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = 2 icon_state = "2" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) @@ -91,13 +91,13 @@ if(istype(P, /obj/item/stack/material) && P.get_material_name() == "rglass") var/obj/item/stack/RG = P if (RG.get_amount() < 2) - user << "You need two sheets of glass to put in the glass panel." + to_chat(user, "You need two sheets of glass to put in the glass panel.") return - user << "You start to put in the glass panel." + to_chat(user, "You start to put in the glass panel.") playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) if (do_after(user, 20) && state == 3) if(RG.use(2)) - user << "You put in the glass panel." + to_chat(user, "You put in the glass panel.") state = 4 icon_state = "4" @@ -126,14 +126,14 @@ if(istype(P, /obj/item/device/mmi)) var/obj/item/device/mmi/M = P if(!M.brainmob) - user << "Sticking an empty [P] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking an empty [P] into the frame would sort of defeat the purpose.") return if(M.brainmob.stat == 2) - user << "Sticking a dead [P] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking a dead [P] into the frame would sort of defeat the purpose.") return if(jobban_isbanned(M.brainmob, "AI")) - user << "This [P] does not seem to fit." + to_chat(user, "This [P] does not seem to fit.") return if(M.brainmob.mind) @@ -145,17 +145,17 @@ usr << "Added [P]." icon_state = "3b" - if(istype(P, /obj/item/weapon/crowbar) && brain) + if(P.is_crowbar() && brain) playsound(loc, P.usesound, 50, 1) - user << "You remove the brain." + to_chat(user, "You remove the brain.") brain.loc = loc brain = null icon_state = "3" if(4) - if(istype(P, /obj/item/weapon/crowbar)) + if(P.is_crowbar()) playsound(loc, P.usesound, 50, 1) - user << "You remove the glass panel." + to_chat(user, "You remove the glass panel.") state = 3 if (brain) icon_state = "3b" @@ -164,9 +164,9 @@ new /obj/item/stack/material/glass/reinforced( loc, 2 ) return - if(istype(P, /obj/item/weapon/screwdriver)) + if(P.is_screwdriver()) playsound(loc, P.usesound, 50, 1) - user << "You connect the monitor." + to_chat(user, "You connect the monitor.") if(!brain) var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes" var/obj/structure/AIcore/deactivated/D = new(loc) @@ -230,9 +230,9 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva if(transfer) load_ai(transfer,card,user) else - user << "ERROR: Unable to locate artificial intelligence." + to_chat(user, "ERROR: Unable to locate artificial intelligence.") return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(anchored) user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") playsound(src, W.usesound, 50, 1) @@ -270,7 +270,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva if(D in empty_playable_ai_cores) empty_playable_ai_cores -= D - src << "\The [id] is now not available for latejoining AIs." + to_chat(src, "\The [id] is now not available for latejoining AIs.") else empty_playable_ai_cores += D - src << "\The [id] is now available for latejoining AIs." + to_chat(src, "\The [id] is now available for latejoining AIs.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 0724cd15be..dbd96823c1 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -139,7 +139,7 @@ data["enemyHP"] = enemy_hp data["gameOver"] = gameover - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "arcade_battle.tmpl", src.name, 400, 300) ui.set_initial_data(data) @@ -201,7 +201,7 @@ emagged = 0 src.add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return /obj/machinery/computer/arcade/battle/proc/arcade_action() diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index eef148a830..d757ae777d 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -37,7 +37,7 @@ var/global/list/minor_air_alarms = list() data["priority_alarms"] = major_alarms data["minor_alarms"] = minor_alarms - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_alert.tmpl", src.name, 500, 500) ui.set_initial_data(data) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 6d7243c36c..960ce3dc35 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -13,75 +13,75 @@ /obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob) switch(state) if(0) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) - user << "You wrench the frame into place." + to_chat(user, "You wrench the frame into place.") src.anchored = 1 src.state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.remove_fuel(0, user)) - user << "The welding tool must be on to complete this task." + to_chat(user, "The welding tool must be on to complete this task.") return playsound(src.loc, WT.usesound, 50, 1) if(do_after(user, 20 * WT.toolspeed)) if(!src || !WT.isOn()) return - user << "You deconstruct the frame." + to_chat(user, "You deconstruct the frame.") new /obj/item/stack/material/steel( src.loc, 5 ) qdel(src) if(1) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) - user << "You unfasten the frame." + to_chat(user, "You unfasten the frame.") src.anchored = 0 src.state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You place the circuit board inside the frame." + to_chat(user, "You place the circuit board inside the frame.") src.icon_state = "1" src.circuit = P user.drop_item() P.loc = src else - user << "This frame does not accept circuit boards of this type!" - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + to_chat(user, "This frame does not accept circuit boards of this type!") + if(P.is_screwdriver() && circuit) playsound(src.loc, P.usesound, 50, 1) - user << "You screw the circuit board into place." + to_chat(user, "You screw the circuit board into place.") src.state = 2 src.icon_state = "2" - if(istype(P, /obj/item/weapon/crowbar) && circuit) + if(P.is_crowbar()) && circuit) playsound(src.loc, P.usesound, 50, 1) - user << "You remove the circuit board." + to_chat(user, "You remove the circuit board.") src.state = 1 src.icon_state = "0" circuit.loc = src.loc src.circuit = null if(2) - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + if(P.is_screwdriver() && circuit) playsound(src.loc, P.usesound, 50, 1) - user << "You unfasten the circuit board." + to_chat(user, "You unfasten the circuit board.") src.state = 1 src.icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if (C.get_amount() < 5) - user << "You need five coils of wire to add them to the frame." + to_chat(user, "You need five coils of wire to add them to the frame.") return - user << "You start to add cables to the frame." + to_chat(user, "You start to add cables to the frame.") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20) && state == 2) if (C.use(5)) - user << "You add cables to the frame." + to_chat(user, "You add cables to the frame.") state = 3 icon_state = "3" if(3) - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) playsound(src.loc, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") src.state = 2 src.icon_state = "2" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) @@ -90,25 +90,25 @@ if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") var/obj/item/stack/G = P if (G.get_amount() < 2) - user << "You need two sheets of glass to put in the glass panel." + to_chat(user, "You need two sheets of glass to put in the glass panel.") return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You start to put in the glass panel." + to_chat(user, "You start to put in the glass panel.") if(do_after(user, 20) && state == 3) if (G.use(2)) - user << "You put in the glass panel." + to_chat(user, "You put in the glass panel.") src.state = 4 src.icon_state = "4" if(4) - if(istype(P, /obj/item/weapon/crowbar)) + if(P.is_crowbar()) playsound(src.loc, P.usesound, 50, 1) - user << "You remove the glass panel." + to_chat(user, "You remove the glass panel.") src.state = 3 src.icon_state = "3" new /obj/item/stack/material/glass( src.loc, 2 ) - if(istype(P, /obj/item/weapon/screwdriver)) + if(P.is_screwdriver()) playsound(src.loc, P.usesound, 50, 1) - user << "You connect the monitor." + to_chat(user, "You connect the monitor.") var/B = new src.circuit.build_path ( src.loc ) src.circuit.construct(B) qdel(src) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 7c16309ec0..745bdc0694 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -49,7 +49,7 @@ switch_to_camera(user, current_camera) data["map_levels"] = using_map.get_map_levels(src.z) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) @@ -152,7 +152,7 @@ /obj/machinery/computer/security/process() if(cache_id != camera_repository.camera_cache_id) cache_id = camera_repository.camera_cache_id - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/computer/security/proc/can_access_camera(var/obj/machinery/camera/C) var/list/shared_networks = src.network & C.network diff --git a/code/game/machinery/computer/camera_circuit.dm b/code/game/machinery/computer/camera_circuit.dm index 436703f724..347eb145c4 100644 --- a/code/game/machinery/computer/camera_circuit.dm +++ b/code/game/machinery/computer/camera_circuit.dm @@ -38,7 +38,7 @@ attackby(var/obj/item/I, var/mob/user)//if(health > 50) ..() - else if(istype(I,/obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) secured = !secured user.visible_message("The [src] can [secured ? "no longer" : "now"] be modified.") playsound(src, I.usesound, 50, 1) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 8bf00b4ace..d23c199db0 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -68,7 +68,7 @@ id_card.forceMove(src) modify = id_card - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) attack_hand(user) /obj/machinery/computer/card/attack_ai(var/mob/user as mob) @@ -139,7 +139,7 @@ data["regions"] = regions - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 600, 700) ui.set_initial_data(data) @@ -235,7 +235,7 @@ modify.registered_name = temp_name else src.visible_message("[src] buzzes rudely.") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if ("account") if (is_authenticated()) @@ -243,7 +243,7 @@ if ((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) var/account_num = text2num(href_list["account"]) modify.associated_account_number = account_num - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if ("mode") mode = text2num(href_list["mode_target"]) @@ -253,7 +253,7 @@ printing = 1 spawn(50) printing = null - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) var/obj/item/weapon/paper/P = new(loc) if (mode) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 9660eca8bc..cbf0041025 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -146,7 +146,7 @@ data["diskette"] = diskette data["temp"] = temp - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "cloning.tmpl", src.name, 400, 450) ui.set_initial_data(data) @@ -284,7 +284,7 @@ temp = "" scantemp = "" - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) add_fingerprint(usr) /obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 7dd31da9a8..6c5817c036 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -106,11 +106,11 @@ if(istype(I,/obj/item/weapon/gripper)) //Behold, Grippers and their horribleness. If ..() is called by any computers' attackby() now or in the future, this should let grippers work with them appropriately. var/obj/item/weapon/gripper/B = I //B, for Borg. if(!B.wrapped) - user << "\The [B] is not holding anything." + to_chat(user, "\The [B] is not holding anything.") return else var/B_held = B.wrapped - user << "You use \the [B] to use \the [B_held] with \the [src]." + to_chat(user, "You use \the [B] to use \the [B_held] with \the [src].") playsound(src, "keyboard", 100, 1, 0) return attack_hand(user) diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 3345e30ab7..91a4a76bb8 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -55,7 +55,7 @@ return ..() /obj/item/weapon/card/id/guest/initialize() - . = ..() + . = ..() processing_objects.Add(src) update_icon() @@ -104,7 +104,7 @@ if(!giver && user.unEquip(I)) I.forceMove(src) giver = I - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) else if(giver) user << "There is already ID card inside." return @@ -150,7 +150,7 @@ data["log"] = internal_log data["uid"] = uid - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "guest_pass.tmpl", src.name, 400, 520) ui.set_initial_data(data) @@ -242,4 +242,4 @@ usr << "Cannot issue pass without issuing ID." src.add_fingerprint(usr) - nanomanager.update_uis(src) \ No newline at end of file + GLOB.nanomanager.update_uis(src) \ No newline at end of file diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index fd82940b6d..670b637152 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -36,7 +36,7 @@ return if(!istype(user)) return - if(isscrewdriver(O) && emag) + if(O.is_screwdriver() && emag) //Stops people from just unscrewing the monitor and putting it back to get the console working again. user << "It is too hot to mess with!" return diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index ee42ed18bd..1d210787de 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -52,11 +52,11 @@ /* /obj/machinery/computer/pod/attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) playsound(src.loc, W.usesound, 50, 1) if(do_after(user, 20)) if(stat & BROKEN) - user << "The broken glass falls out." + to_chat(user, "The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc ) new /obj/item/weapon/material/shard( loc ) @@ -80,7 +80,7 @@ A.anchored = 1 qdel(src) else - user << "You disconnect the monitor." + to_chat(user << "You disconnect the monitor.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc ) //generate appropriate circuitboard. Accounts for /pod/old computer types @@ -210,7 +210,7 @@ /obj/machinery/computer/pod/old/syndicate/attack_hand(var/mob/user as mob) if(!allowed(user)) - user << "Access Denied" + to_chat(user, "Access Denied") return else ..() diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index f91ac2b677..c6c2c94a9e 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -19,7 +19,7 @@ data["is_ai"] = issilicon(user) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "robot_control.tmpl", "Robotic Control Console", 400, 500) ui.set_initial_data(data) diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm index e76f4db468..fcaa2b4d8a 100644 --- a/code/game/machinery/computer/supply.dm +++ b/code/game/machinery/computer/supply.dm @@ -1,226 +1,196 @@ +// While it initially feels like the ordering console should be a subtype of the main console, +// their function is similar enough that the ordering console emerges as the less specialized, +// and therefore more deserving of parent-class status -- Ater + +// Supply requests console /obj/machinery/computer/supplycomp + name = "supply ordering console" + icon_screen = "request" + circuit = /obj/item/weapon/circuitboard/supplycomp + var/authorization = 0 + var/temp = null + var/reqtime = 0 //Cooldown for requisitions - Quarxink + var/can_order_contraband = 0 + var/active_category = null + var/menu_tab = 0 + var/list/expanded_packs = list() + +// Supply control console +/obj/machinery/computer/supplycomp/control name = "supply control console" icon_keyboard = "tech_key" icon_screen = "supply" light_color = "#b88b2e" req_access = list(access_cargo) - circuit = /obj/item/weapon/circuitboard/supplycomp - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/can_order_contraband = 0 - var/last_viewed_group = "categories" - -/obj/machinery/computer/ordercomp - name = "supply ordering console" - icon_screen = "request" - circuit = /obj/item/weapon/circuitboard/ordercomp - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/last_viewed_group = "categories" - -/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob) - return attack_hand(user) + circuit = /obj/item/weapon/circuitboard/supplycomp/control + authorization = SUP_SEND_SHUTTLE | SUP_ACCEPT_ORDERS /obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob) return attack_hand(user) -/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat - if(temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += {"
Supply shuttle
- Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_controller.points]
-
\nRequest items

- View approved orders

- View requests

- \nView export report

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


" - temp += "Select a category

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


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

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

[station_name()] Supply Requisition Form


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

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

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" - temp += "
OK" - - else if (href_list["mainmenu"]) - temp = null - - add_fingerprint(usr) - updateUsrDialog() - return - /obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob) - if(!allowed(user)) - user << "Access Denied." - return - if(..()) return user.set_machine(src) - post_signal("supply") - var/dat - if (temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += "
Supply shuttle
" - dat += "\nLocation: " - if (shuttle.has_arrive_time()) - dat += "In transit ([shuttle.eta_minutes()] Mins.)
" - else - if (shuttle.at_station()) - if (shuttle.docking_controller) - switch(shuttle.docking_controller.get_docking_status()) - if ("docked") dat += "Docked at station
" - if ("undocked") dat += "Undocked from station
" - if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch" : ""]
" - if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" - else - dat += "Station
" - - if (shuttle.can_launch()) - dat += "Send away" - else if (shuttle.can_cancel()) - dat += "Cancel launch" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - else - dat += "Away
" - if (shuttle.can_launch()) - dat += "Request supply shuttle" - else if (shuttle.can_cancel()) - dat += "Cancel request" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - - - dat += {"
\nSupply points: [supply_controller.points]
\n
- \nOrder items
\n
- \nView requests
\n
- \nView orders
\n
- \nView export report
\n
- \nClose"} - - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") + ui_interact(user) return /obj/machinery/computer/supplycomp/emag_act(var/remaining_charges, var/mob/user) if(!can_order_contraband) - user << "Special supplies unlocked." - can_order_contraband = 1 + to_chat(user, "Special supplies unlocked.") + authorization |= SUP_CONTRABAND req_access = list() return 1 + + + +/obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "supply_records", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) + var/data[0] + var/shuttle_status[0] // Supply shuttle status + var/pack_list[0] // List of supply packs within the active_category + var/orders[0] + var/receipts[0] + + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if(shuttle) + if(shuttle.has_arrive_time()) + shuttle_status["location"] = "In transit" + shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT + shuttle_status["time"] = shuttle.eta_minutes() + + else + shuttle_status["time"] = 0 + if(shuttle.at_station()) + if(shuttle.docking_controller) + switch(shuttle.docking_controller.get_docking_status()) + if("docked") + shuttle_status["location"] = "Docked" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + if("undocked") + shuttle_status["location"] = "Undocked" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED + if("docking") + shuttle_status["location"] = "Docking" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKING + shuttle_status["force"] = shuttle.can_force() + if("undocking") + shuttle_status["location"] = "Undocking" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING + shuttle_status["force"] = shuttle.can_force() + + else + shuttle_status["location"] = "Station" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + + else + shuttle_status["location"] = "Away" + shuttle_status["mode"] = SUP_SHUTTLE_AWAY + + if(shuttle.can_launch()) + shuttle_status["launch"] = 1 + else if(shuttle.can_cancel()) + shuttle_status["launch"] = 2 + else + shuttle_status["launch"] = 0 + + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) + shuttle_status["engine"] = "Idle" + if(SHUTTLE_WARMUP) + shuttle_status["engine"] = "Warming up" + if(SHUTTLE_INTRANSIT) + shuttle_status["engine"] = "Engaged" + + else + shuttle["mode"] = SUP_SHUTTLE_ERROR + + for(var/pack_name in supply_controller.supply_pack) + var/datum/supply_pack/P = supply_controller.supply_pack[pack_name] + if(P.group == active_category) + var/list/pack = list( + "name" = P.name, + "cost" = P.cost, + "contraband" = P.contraband, + "manifest" = uniquelist(P.manifest), + "random" = P.num_contained, + "expand" = 0, + "ref" = "\ref[P]" + ) + + if(P in expanded_packs) + pack["expand"] = 1 + + pack_list[++pack_list.len] = pack + + // Compile user-side orders + // Status determines which menus the entry will display in + // Organized in field-entry list for iterative display + // List is nested so both the list of orders, and the list of elements in each order, can be iterated over + for(var/datum/supply_order/S in supply_controller.order_history) + orders[++orders.len] = list( + "ref" = "\ref[S]", + "status" = S.status, + "entries" = list( + list("field" = "Supply Pack", "entry" = S.name), + list("field" = "Cost", "entry" = S.cost), + list("field" = "Index", "entry" = S.index), + list("field" = "Reason", "entry" = S.comment), + list("field" = "Ordered by", "entry" = S.ordered_by), + list("field" = "Ordered at", "entry" = S.ordered_at), + list("field" = "Approved by", "entry" = S.approved_by), + list("field" = "Approved at", "entry" = S.approved_at) + ) + ) + + // Compile exported crates + for(var/datum/exported_crate/E in supply_controller.exported_crates) + receipts[++receipts.len] = list( + "ref" = "\ref[E]", + "contents" = E.contents, + "error" = E.contents["error"], + "title" = list( + list("field" = "Name", "entry" = E.name), + list("field" = "Value", "entry" = E.value) + ) + ) + + data["user"] = "\ref[user]" + data["currentTab"] = menu_tab // Communicator compatibility, controls which menu is in use + data["shuttle_auth"] = (authorization & SUP_SEND_SHUTTLE) // Whether this ui is permitted to control the supply shuttle + data["order_auth"] = (authorization & SUP_ACCEPT_ORDERS) // Whether this ui is permitted to accept/deny requested orders + data["shuttle"] = shuttle_status + data["supply_points"] = supply_controller.points + data["categories"] = all_supply_groups + data["active_category"] = active_category + data["supply_packs"] = pack_list + data["orders"] = orders + data["receipts"] = receipts + data["contraband"] = can_order_contraband || (authorization & SUP_CONTRABAND) + + // update the ui if it exists, returns null if no ui is passed/found + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "supply_records.tmpl", "Supply Console", 475, 700, state = key_state) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every 20 Master Controller tick + ui.set_auto_update(20) // Longer term to reduce the rate of data collection and processing + + + + /obj/machinery/computer/supplycomp/Topic(href, href_list) if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + world.log << "## ERROR: The supply_controller datum is missing." return var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle if (!shuttle) - world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." + world.log << "## ERROR: The supply shuttle datum is missing." return if(..()) return 1 @@ -228,177 +198,212 @@ if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) ) usr.set_machine(src) - //Calling the shuttle - if(href_list["send"]) - if(shuttle.at_station()) - if (shuttle.forbidden_atoms_check()) - temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.

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

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

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


" - temp += "Select a category

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


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

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

[station_name()] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)]
" - reqform.info += "CONTENTS:
" - reqform.info += P.manifest - reqform.info += "
" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" + var/timeout = world.time + 600 + var/reason = sanitize(input(user, "Reason:","Why do you require this item?","") as null|text) + if(world.time > timeout) + to_chat(user, "Error. Request timed out.") + return + if(!reason) + return - reqform.update_icon() //Fix for appearing blank when printed. - reqtime = (world.time + 5) % 1e5 + supply_controller.create_order(S, user, reason) - //make our supply_order datum - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = P - O.orderedby = idname - supply_controller.requestlist += O + var/idname = "*None Provided*" + var/idrank = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + idrank = H.get_assignment() + else if(issilicon(user)) + idname = user.real_name + idrank = "Stationbound synthetic" - temp = "Order request placed.
" - temp += "
Back | Main Menu | Authorize Order" + var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) + reqform.name = "Requisition Form - [S.name]" + reqform.info += "

[station_name()] Supply Requisition Form


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

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


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

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove
" + // Invalid ref + if(!istype(O)) + return - temp += "
Clear list" - temp += "
OK" + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return - else if (href_list["viewexport"]) - temp = "Previous shuttle export report:

" - var/cratecount = 0 - var/totalvalue = 0 - for(var/S in supply_controller.exported_crates) - var/datum/exported_crate/EC = S - cratecount += 1 - totalvalue += EC.value - temp += "[EC.name] exported for [EC.value] supply points
" - temp += "
Shipment of [cratecount] crates exported for [totalvalue] supply points.
" - temp += "
OK" + if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return - else if (href_list["rreq"]) - var/ordernum = text2num(href_list["rreq"]) - temp = "Invalid Request.
" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] - if(SO.ordernum == ordernum) - supply_controller.requestlist.Cut(i,i+1) - temp = "Request removed.
" - break - temp += "
Back Main Menu" + switch(href_list["edit"]) + if("Supply Pack") + O.name = new_val - else if (href_list["clearreq"]) - supply_controller.requestlist.Cut() - temp = "List cleared.
" - temp += "
OK" + if("Cost") + var/num = text2num(new_val) + if(num) + O.cost = num - else if (href_list["mainmenu"]) - temp = null + if("Index") + var/num = text2num(new_val) + if(num) + O.index = num + + if("Reason") + O.comment = new_val + + if("Ordered by") + O.ordered_by = new_val + + if("Ordered at") + O.ordered_at = new_val + + if("Approved by") + O.approved_by = new_val + + if("Approved at") + O.approved_at = new_val + + if(href_list["approve"]) + supply_controller.approve_order(O, user) + + if(href_list["deny"]) + supply_controller.deny_order(O, user) + + if(href_list["delete"]) + supply_controller.delete_order(O, user) + + if(href_list["clear_all_requests"]) + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + supply_controller.deny_all_pending(user) + + if(href_list["export_ref"]) + var/datum/exported_crate/E = locate(href_list["export_ref"]) + + // Invalid ref + if(!istype(E)) + return + + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + if(href_list["index"]) + var/list/L = E.contents[href_list["index"]] + + if(href_list["edit"]) + var/field = alert(user, "Select which field to edit", , "Name", "Quantity", "Value") + + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(field) + if("Name") + L["object"] = new_val + + if("Quantity") + var/num = text2num(new_val) + if(num) + L["quantity"] = num + + if("Value") + var/num = text2num(new_val) + if(num) + L["value"] = num + + if(href_list["delete"]) + E.contents.Cut(href_list["index"], href_list["index"] + 1) + + // Else clause means they're editing/deleting the whole export report, rather than a specific item in it + else if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(href_list["edit"]) + if("Name") + E.name = new_val + + if("Value") + var/num = text2num(new_val) + if(num) + E.value = num + + else if(href_list["delete"]) + supply_controller.delete_export(E, user) + + else if(href_list["add_item"]) + supply_controller.add_export_item(E, user) + + + + switch(href_list["send_shuttle"]) + if("send_away") + if (shuttle.forbidden_atoms_check()) + to_chat(usr, "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") + else + shuttle.launch(src) + to_chat(usr, "Initiating launch sequence.") + + if("send_to_station") + shuttle.launch(src) + to_chat(usr, "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.") + + if("cancel_shuttle") + shuttle.cancel_launch(src) + + if("force_shuttle") + shuttle.force_launch(src) add_fingerprint(usr) updateUsrDialog() diff --git a/code/game/machinery/computer/timeclock_vr.dm b/code/game/machinery/computer/timeclock_vr.dm index d0557cd1f3..98dc8e635d 100644 --- a/code/game/machinery/computer/timeclock_vr.dm +++ b/code/game/machinery/computer/timeclock_vr.dm @@ -47,7 +47,7 @@ if(!card && user.unEquip(I)) I.forceMove(src) card = I - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) update_icon() else if(card) to_chat(user, "There is already ID card inside.") @@ -87,7 +87,7 @@ // if(job && job.timeoff_factor < 0) // Currently are Off Duty, so gotta lookup what on-duty jobs are open // data["job_choices"] = getOpenOnDutyJobs(user, job.department) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "timeclock_vr.tmpl", capitalize(src.name), 500, 520) ui.set_initial_data(data) diff --git a/code/game/machinery/computer3/buildandrepair.dm b/code/game/machinery/computer3/buildandrepair.dm index 14270bf144..928675769c 100644 --- a/code/game/machinery/computer3/buildandrepair.dm +++ b/code/game/machinery/computer3/buildandrepair.dm @@ -78,7 +78,7 @@ /obj/structure/computer3frame/attackby(obj/item/P as obj, mob/user as mob) switch(state) if(0) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) to_chat(user, "You wrench the frame into place.") @@ -96,7 +96,7 @@ new /obj/item/stack/material/steel( src.loc, 5 ) qdel(src) if(1) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) to_chat(user, "You unfasten the frame.") @@ -113,12 +113,12 @@ P.loc = src else to_chat(user, "This frame does not accept circuit boards of this type!") - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + if(P.is_screwdriver() && circuit) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You screw the circuit board into place.") src.state = 2 src.icon_state = "2" - if(istype(P, /obj/item/weapon/crowbar) && circuit) + if(P.is_crowbar() && circuit) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You remove the circuit board.") src.state = 1 @@ -126,13 +126,13 @@ circuit.loc = src.loc src.circuit = null if(2) - if(istype(P, /obj/item/weapon/screwdriver) && circuit) + if(P.is_screwdriver() && circuit) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You unfasten the circuit board.") src.state = 1 src.icon_state = "1" - if(istype(P, /obj/item/weapon/crowbar)) + if(P.is_crowbar()) if(battery) playsound(src.loc, P.usesound, 50, 1) if(do_after(10 * P.toolspeed)) @@ -164,7 +164,7 @@ src.state = 3 src.icon_state = "3" if(3) - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) if(components.len) to_chat(user, "There are parts in the way!") return @@ -175,7 +175,7 @@ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) A.amount = 5 - if(istype(P, /obj/item/weapon/crowbar)) // complicated check + if(P.is_crowbar()) remove_peripheral() if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") @@ -189,13 +189,13 @@ src.state = 4 src.icon_state = "4" if(4) - if(istype(P, /obj/item/weapon/crowbar)) + if(P.is_crowbar()) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You remove the glass panel.") src.state = 3 src.icon_state = "3" new /obj/item/stack/material/glass( src.loc, 2 ) - if(istype(P, /obj/item/weapon/screwdriver)) + if(P.is_screwdriver()) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 ) diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 930ee6adcd..c9d8eb22de 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -309,8 +309,8 @@ if(os) os.error = BUSTED_ASS_COMPUTER -/obj/machinery/computer3/attackby(I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/screwdriver) && allow_disassemble) +/obj/machinery/computer3/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_screwdriver() && allow_disassemble) disassemble(user) return diff --git a/code/game/machinery/computer3/lapvend.dm b/code/game/machinery/computer3/lapvend.dm index 147dbdaa44..79f297157c 100644 --- a/code/game/machinery/computer3/lapvend.dm +++ b/code/game/machinery/computer3/lapvend.dm @@ -34,11 +34,11 @@ if(vendmode == 1 && I) scan_id(I, W) vendmode = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(vendmode == 2 && I) if(reimburse_id(I, W)) vendmode = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(vendmode == 0) if(istype(W, /obj/item/device/laptop)) var/obj/item/device/laptop/L = W @@ -48,7 +48,7 @@ L.loc = src vendmode = 2 to_chat(user, "You slot your [L.name] into \The [src.name]") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) else ..() @@ -77,7 +77,7 @@ data["power"] = power data["total"] = total() - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "laptop_vendor.tmpl", src.name, 480, 425) ui.set_initial_data(data) @@ -136,7 +136,7 @@ vendmode = 0 src.add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/lapvend/proc/vend() if(cardreader > 0) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index c3b6e010d6..e74ffb7cf9 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -31,19 +31,19 @@ if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if (C.get_amount() < 5) - user << "You need five lengths of cable to add them to the frame." + to_chat(user, "You need five lengths of cable to add them to the frame.") return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You start to add cables to the frame." + to_chat(user, "You start to add cables to the frame.") if(do_after(user, 20) && state == 1) if(C.use(5)) - user << "You add cables to the frame." + to_chat(user, "You add cables to the frame.") state = 2 icon_state = "box_1" else - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) playsound(src, W.usesound, 75, 1) - user << "You dismantle the frame" + to_chat(user, "You dismantle the frame") new /obj/item/stack/material/steel(src.loc, 5) qdel(src) if(2) @@ -51,7 +51,7 @@ var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You add the circuit board to the frame." + to_chat(user, "You add the circuit board to the frame.") circuit = P user.drop_item() P.loc = src @@ -67,28 +67,28 @@ var/obj/ct = new cp() // have to quickly instantiate it get name req_component_names[A] = ct.name update_desc() - user << desc + to_chat(user, desc) else - user << "This frame does not accept circuit boards of this type!" + to_chat(user, "This frame does not accept circuit boards of this type!") else - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) playsound(src.loc, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = 1 icon_state = "box_0" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) A.amount = 5 if(3) - if(istype(P, /obj/item/weapon/crowbar)) + if(P.is_crowbar()) playsound(src, P.usesound, 50, 1) state = 2 circuit.loc = src.loc circuit = null if(components.len == 0) - user << "You remove the circuit board." + to_chat(user, "You remove the circuit board.") else - user << "You remove the circuit board and other components." + to_chat(user, "You remove the circuit board and other components.") for(var/obj/item/weapon/W in components) W.loc = src.loc desc = initial(desc) @@ -96,7 +96,7 @@ components = null icon_state = "box_1" else - if(istype(P, /obj/item/weapon/screwdriver)) + if(P.is_screwdriver()) var/component_check = 1 for(var/R in req_components) if(req_components[R] > 0) @@ -132,7 +132,7 @@ for(var/I in req_components) if(istype(P, text2path(I)) && (req_components[I] > 0)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(istype(P, /obj/item/stack/cable_coil)) + if(P.is_cable_coil)) var/obj/item/stack/cable_coil/CP = P if(CP.get_amount() > 1) var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided @@ -150,6 +150,6 @@ req_components[I]-- update_desc() break - user << desc + to_chat(user, desc) if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil)) - user << "You cannot add that component to the machine!" + to_chat(user, "You cannot add that component to the machine!") diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 6c68620644..20a54046a6 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -141,7 +141,7 @@ data["beakerVolume"] += R.volume // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -185,7 +185,7 @@ /obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) if(istype(G, /obj/item/weapon/reagent_containers/glass)) if(beaker) - user << "A beaker is already loaded into the machine." + to_chat(user, "A beaker is already loaded into the machine.") return beaker = G @@ -201,12 +201,12 @@ to_chat(user,"\The [src] is already occupied by [occupant].") for(var/mob/living/simple_animal/slime/M in range(1,grab.affecting)) if(M.victim == grab.affecting) - usr << "[grab.affecting.name] will not fit into the cryo because they have a slime latched onto their head." + to_chat(usr, "[grab.affecting.name] will not fit into the cryo because they have a slime latched onto their head.") return var/mob/M = grab.affecting qdel(grab) put_mob(M) - + return /obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance @@ -293,19 +293,19 @@ return /obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) if(stat & (NOPOWER|BROKEN)) - usr << "The cryo cell is not functioning." + to_chat(usr, "The cryo cell is not functioning.") return if(!istype(M)) - usr << "The cryo cell cannot handle such a lifeform!" + to_chat(usr, "The cryo cell cannot handle such a lifeform!") return if(occupant) - usr << "The cryo cell is already occupied!" + to_chat(usr, "The cryo cell is already occupied!") return if(M.abiotic()) - usr << "Subject may not have abiotic items on." + to_chat(usr, "Subject may not have abiotic items on.") return if(!node) - usr << "The cell is not correctly connected to its pipe network!" + to_chat(usr, "The cell is not correctly connected to its pipe network!") return if(M.client) M.client.perspective = EYE_PERSPECTIVE @@ -314,7 +314,7 @@ M.loc = src M.ExtinguishMob() if(M.health > -100 && (M.health < 0 || M.sleeping)) - M << "You feel a cold liquid surround you. Your skin starts to freeze up." + to_chat(M, "You feel a cold liquid surround you. Your skin starts to freeze up.") occupant = M buckle_mob(occupant, forced = TRUE, check_loc = FALSE) vis_contents |= occupant @@ -333,7 +333,7 @@ if(usr == occupant)//If the user is inside the tube... if(usr.stat == 2)//and he's not dead.... return - usr << "Release sequence activated. This will take two minutes." + to_chat(usr, "Release sequence activated. This will take two minutes.") sleep(1200) if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already return @@ -351,7 +351,7 @@ set src in oview(1) for(var/mob/living/simple_animal/slime/M in range(1,usr)) if(M.victim == usr) - usr << "You're too busy getting your life sucked out of you." + to_chat(usr, "You're too busy getting your life sucked out of you.") return if(usr.stat != 0) return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index e5ebbc7d17..ffda46f7cf 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -97,7 +97,7 @@ //dat += "Recover object.
" //VOREStation Removal - Just log them. //dat += "Recover all objects.
" //VOREStation Removal - user << browse(dat, "window=cryopod_console") + to_chat(user, browse(dat, "window=cryopod_console")) onclose(user, "cryopod_console") /obj/machinery/computer/cryopod/Topic(href, href_list) @@ -116,7 +116,7 @@ dat += "[person]
" dat += "
" - user << browse(dat, "window=cryolog") + to_chat(user, browse(dat, "window=cryolog")) if(href_list["view"]) if(!allow_items) return @@ -128,13 +128,13 @@ //VOREStation Edit End dat += "
" - user << browse(dat, "window=cryoitems") + to_chat(user, browse(dat, "window=cryoitems")) else if(href_list["item"]) if(!allow_items) return if(frozen_items.len == 0) - user << "There is nothing to recover from storage." + to_chat(user, "There is nothing to recover from storage.") return var/obj/item/I = input(usr, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items @@ -142,7 +142,7 @@ return if(!(I in frozen_items)) - user << "\The [I] is no longer in storage." + to_chat(user, "\The [I] is no longer in storage.") return visible_message("The console beeps happily as it disgorges \the [I].", 3) @@ -154,7 +154,7 @@ if(!allow_items) return if(frozen_items.len == 0) - user << "There is nothing to recover from storage." + to_chat(user, "There is nothing to recover from storage.") return visible_message("The console beeps happily as it disgorges the desired objects.", 3) @@ -519,7 +519,7 @@ var/obj/item/weapon/grab/grab = G if(occupant) - user << "\The [src] is in use." + to_chat(user, "\The [src] is in use.") return if(!ismob(grab.affecting)) @@ -564,12 +564,12 @@ return if(occupant) - usr << "\The [src] is in use." + to_chat(usr, "\The [src] is in use.") return for(var/mob/living/simple_animal/slime/M in range(1,usr)) if(M.victim == usr) - usr << "You're too busy getting your life sucked out of you." + to_chat(usr, "You're too busy getting your life sucked out of you.") return visible_message("[usr] [on_enter_visible_message] [src].", 3) @@ -580,7 +580,7 @@ return if(occupant) - usr << "\The [src] is in use." + to_chat(usr, "\The [src] is in use.") return usr.stop_pulling() @@ -596,8 +596,8 @@ icon_state = occupied_icon_state - usr << "[on_enter_occupant_message]" - usr << "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round." + to_chat(usr, "[on_enter_occupant_message]") + to_chat(usr, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.") time_entered = world.time diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 2ed722e129..c50503f3c5 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -86,7 +86,7 @@ for reference: return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to. if(health < maxhealth) if(D.get_amount() < 1) - user << "You need one sheet of [material.display_name] to repair \the [src]." + to_chat(user, "You need one sheet of [material.display_name] to repair \the [src].") return visible_message("[user] begins to repair \the [src].") if(do_after(user,20) && health < maxhealth) @@ -168,10 +168,10 @@ for reference: anchored = !anchored icon_state = "barrier[locked]" if((locked == 1.0) && (emagged < 2.0)) - user << "Barrier lock toggled on." + to_chat(user, "Barrier lock toggled on.") return else if((locked == 0.0) && (emagged < 2.0)) - user << "Barrier lock toggled off." + to_chat(user, "Barrier lock toggled off.") return else var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread @@ -180,7 +180,7 @@ for reference: visible_message("BZZzZZzZZzZT") return return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(health < maxhealth) health = maxhealth emagged = 0 @@ -252,7 +252,7 @@ for reference: emagged = 1 req_access.Cut() req_one_access.Cut() - user << "You break the ID authentication lock on \the [src]." + to_chat(user, "You break the ID authentication lock on \the [src].") var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 1, src) s.start() @@ -260,7 +260,7 @@ for reference: return 1 else if(emagged == 1) emagged = 2 - user << "You short out the anchoring mechanism on \the [src]." + to_chat(user, "You short out the anchoring mechanism on \the [src].") var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 1, src) s.start() diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index bc3a27fed7..e10e3bda3f 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -21,7 +21,7 @@ if(wires & 2) return attack_hand(user) else - user << "Error, no route to host." + to_chat(user, "Error, no route to host.") /obj/machinery/button/remote/attackby(obj/item/weapon/W, mob/user as mob) return attack_hand(user) @@ -42,7 +42,7 @@ return if(!allowed(user) && (wires & 1)) - user << "Access Denied" + to_chat(user, "Access Denied") flick("doorctrl-denied",src) return diff --git a/code/game/machinery/doorbell_vr.dm b/code/game/machinery/doorbell_vr.dm index b23e490928..46dec472a6 100644 --- a/code/game/machinery/doorbell_vr.dm +++ b/code/game/machinery/doorbell_vr.dm @@ -136,7 +136,7 @@ var/obj/item/device/multitool/M = W M.connectable = src to_chat(user, "You save the data in \the [M]'s buffer.") - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) to_chat(user, "You start to unwrench \the [src].") playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 15) && !QDELETED(src)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ed68528861..327b1e11cd 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -728,7 +728,7 @@ About the new airlock wires panel: data["commands"] = commands - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls", 450, 350, state = state) ui.set_initial_data(data) @@ -903,7 +903,7 @@ About the new airlock wires panel: if(istype(C, /mob/living)) ..() return - if(!repairing && (istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density)) + if(!repairing && istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0,user)) if(!src.welded) @@ -915,7 +915,7 @@ About the new airlock wires panel: return else return - else if(istype(C, /obj/item/weapon/screwdriver)) + else if(C.is_screwdriver()) if (src.p_open) if (stat & BROKEN) to_chat(usr,"The panel is broken and cannot be closed.") @@ -926,7 +926,7 @@ About the new airlock wires panel: src.p_open = 1 playsound(src, C.usesound, 50, 1) src.update_icon() - else if(istype(C, /obj/item/weapon/wirecutters)) + else if(C.is_wirecutter()) return src.attack_hand(user) else if(istype(C, /obj/item/device/multitool)) return src.attack_hand(user) @@ -935,7 +935,7 @@ About the new airlock wires panel: else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) - else if(!repairing && istype(C, /obj/item/weapon/crowbar)) + else if(!repairing && C.is_crowbar()) if(can_remove_electronics()) playsound(src, C.usesound, 75, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 58ce8b282c..f4926c2aa8 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -125,7 +125,7 @@ if(istype(C,/obj/item/weapon/material/twohanded/fireaxe)) // Fireaxes need to be in both hands to pry. var/obj/item/weapon/material/twohanded/fireaxe/F = C if(!F.wielded) - user << "You need to be wielding \the [F] to do that." + to_chat(user, "You need to be wielding \the [F] to do that.") return // If we're at this point, it's a fireaxe in both hands or something else that doesn't care for twohanding. @@ -133,7 +133,7 @@ force_toggle(1, user) else - usr << "[src]'s motors resist your effort." + to_chat(user, "[src]'s motors resist your effort.") return @@ -153,19 +153,19 @@ else if(istype(C, /obj/item/stack/material) && C.get_material_name() == "plasteel") // Repairing. var/amt = Ceiling((maxhealth - health)/150) if(!amt) - usr << "\The [src] is already fully repaired." + to_chat(user, "\The [src] is already fully repaired.") return var/obj/item/stack/P = C if(P.amount < amt) - usr << "You don't have enough sheets to repair this! You need at least [amt] sheets." + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") return - usr << "You begin repairing [src]..." + to_chat(user, "You begin repairing [src]...") if(do_after(usr, 30)) if(P.use(amt)) - usr << "You have repaired \The [src]" + to_chat(user, "You have repaired \The [src]") src.repair() else - usr << "You don't have enough sheets to repair this! You need at least [amt] sheets." + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") else if(src.density && (user.a_intent == I_HURT)) //If we can't pry it open and it's not a weapon.... Eh, let's attack it anyway. var/obj/item/weapon/W = C diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index d8252fe4a9..ddb2001639 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -207,80 +207,83 @@ if (attempt_vr(src,"attackby_vr",list(I, user))) return - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) - if(stat & BROKEN) - user << "It looks like \the [src] is pretty busted. It's going to need more than just patching up now." - return - if(health >= maxhealth) - user << "Nothing to fix!" - return - if(!density) - user << "\The [src] must be closed before you can repair it." - return + if(istype(I)) + if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) + if(stat & BROKEN) + user << "It looks like \the [src] is pretty busted. It's going to need more than just patching up now." + return + if(health >= maxhealth) + user << "Nothing to fix!" + return + if(!density) + user << "\The [src] must be closed before you can repair it." + return - //figure out how much metal we need - var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT - amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? + //figure out how much metal we need + var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT + amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? - var/obj/item/stack/stack = I - var/transfer - if (repairing) - transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) - if (!transfer) - user << "You must weld or remove \the [repairing] from \the [src] before you can add anything else." - else - repairing = stack.split(amount_needed) + var/obj/item/stack/stack = I + var/transfer if (repairing) - repairing.loc = src - transfer = repairing.amount + transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) + if (!transfer) + user << "You must weld or remove \the [repairing] from \the [src] before you can add anything else." + else + repairing = stack.split(amount_needed) + if (repairing) + repairing.loc = src + transfer = repairing.amount - if (transfer) - user << "You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src]." + if (transfer) + user << "You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src]." - return - - if(repairing && istype(I, /obj/item/weapon/weldingtool)) - if(!density) - user << "\The [src] must be closed before you can repair it." return - var/obj/item/weapon/weldingtool/welder = I - if(welder.remove_fuel(0,user)) - user << "You start to fix dents and weld \the [repairing] into place." - playsound(src, welder.usesound, 50, 1) - if(do_after(user, (5 * repairing.amount) * welder.toolspeed) && welder && welder.isOn()) - user << "You finish repairing the damage to \the [src]." - health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth) - update_icon() - qdel(repairing) - repairing = null + if(repairing && istype(I, /obj/item/weapon/weldingtool)) + if(!density) + user << "\The [src] must be closed before you can repair it." + return + + var/obj/item/weapon/weldingtool/welder = I + if(welder.remove_fuel(0,user)) + user << "You start to fix dents and weld \the [repairing] into place." + playsound(src, welder.usesound, 50, 1) + if(do_after(user, (5 * repairing.amount) * welder.toolspeed) && welder && welder.isOn()) + user << "You finish repairing the damage to \the [src]." + health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth) + update_icon() + qdel(repairing) + repairing = null + return + + if(repairing && I.is_crowbar()) + user << "You remove \the [repairing]." + playsound(src, I.usesound, 100, 1) + repairing.loc = user.loc + repairing = null + return + + //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them. + if(src.density && istype(I, /obj/item/weapon) && user.a_intent == I_HURT && !istype(I, /obj/item/weapon/card)) + var/obj/item/weapon/W = I + user.setClickCooldown(user.get_attack_speed(W)) + if(W.damtype == BRUTE || W.damtype == BURN) + user.do_attack_animation(src) + if(W.force < min_force) + user.visible_message("\The [user] hits \the [src] with \the [W] with no visible effect.") + else + user.visible_message("\The [user] forcefully strikes \the [src] with \the [W]!") + playsound(src.loc, hitsound, 100, 1) + take_damage(W.force) + return + + if(src.operating > 0 || isrobot(user)) + return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. + + if(src.operating) return - if(repairing && istype(I, /obj/item/weapon/crowbar)) - user << "You remove \the [repairing]." - playsound(src, I.usesound, 100, 1) - repairing.loc = user.loc - repairing = null - return - - //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them. - if(src.density && istype(I, /obj/item/weapon) && user.a_intent == I_HURT && !istype(I, /obj/item/weapon/card)) - var/obj/item/weapon/W = I - user.setClickCooldown(user.get_attack_speed(W)) - if(W.damtype == BRUTE || W.damtype == BURN) - user.do_attack_animation(src) - if(W.force < min_force) - user.visible_message("\The [user] hits \the [src] with \the [W] with no visible effect.") - else - user.visible_message("\The [user] forcefully strikes \the [src] with \the [W]!") - playsound(src.loc, hitsound, 100, 1) - take_damage(W.force) - return - - if(src.operating > 0 || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. - - if(src.operating) return - if(src.allowed(user) && operable()) if(src.density) open() diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm index 1e0dd1d470..58d84e2d7c 100644 --- a/code/game/machinery/doors/door_vr.dm +++ b/code/game/machinery/doors/door_vr.dm @@ -133,7 +133,7 @@ repairing = null return 1 - if(reinforcing && istype(I, /obj/item/weapon/crowbar)) + if(reinforcing && I.is_crowbar()) user << "You remove \the [reinforcing]." playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) reinforcing.loc = user.loc diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 504d65c306..fb7609ee05 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -4,8 +4,8 @@ #define FIREDOOR_MIN_TEMP 0 // Bitflags -#define FIREDOOR_ALERT_HOT 1 -#define FIREDOOR_ALERT_COLD 2 +#define FIREDOOR_ALERT_HOT 1 +#define FIREDOOR_ALERT_COLD 2 // Not used #define FIREDOOR_ALERT_LOWPRESS 4 /obj/machinery/door/firedoor @@ -83,9 +83,9 @@ return if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) - user << "WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!" + to_chat(user, "WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!") - user << "Sensor readings:" + to_chat(user, "Sensor readings:") for(var/index = 1; index <= tile_info.len; index++) var/o = "  " switch(index) @@ -99,7 +99,7 @@ o += "WEST: " if(tile_info[index] == null) o += "DATA UNAVAILABLE" - user << o + to_chat(user, o) continue var/celsius = convert_k2c(tile_info[index][1]) var/pressure = tile_info[index][2] @@ -107,14 +107,14 @@ o += "[celsius]°C " o += "" o += "[pressure]kPa" - user << o + to_chat(user, o) if(islist(users_to_open) && users_to_open.len) var/users_to_open_string = users_to_open[1] if(users_to_open.len >= 2) for(var/i = 2 to users_to_open.len) users_to_open_string += ", [users_to_open[i]]" - user << "These people have opened \the [src] during an alert: [users_to_open_string]." + to_chat(user, "These people have opened \the [src] during an alert: [users_to_open_string].") /obj/machinery/door/firedoor/Bumped(atom/AM) if(p_open || operating) @@ -142,7 +142,7 @@ return if(blocked) - user << "\The [src] is welded solid!" + to_chat(user, "\The [src] is welded solid!") return var/alarmed = lockdown @@ -154,15 +154,15 @@ "\The [src]", "Yes, [density ? "open" : "close"]", "No") if(answer == "No") return - if(user.incapacitated() || (get_dist(src, user) > 1 && !issilicon(user))) - user << "Sorry, you must remain able bodied and close to \the [src] in order to use it." + if(user.incapacitated() || (get_dist(src, user) > 1 && !issilicon(user))) + to_chat(user, "Sorry, you must remain able bodied and close to \the [src] in order to use it.") return if(density && (stat & (BROKEN|NOPOWER))) //can still close without power - user << "\The [src] is not functioning, you'll have to force it open manually." + to_chat(user, "\The [src] is not functioning, you'll have to force it open manually.") return if(alarmed && density && lockdown && !allowed(user)) - user << "Access denied. Please wait for authorities to arrive, or for the alert to clear." + to_chat(user, "Access denied. Please wait for authorities to arrive, or for the alert to clear.") return else user.visible_message("\The [src] [density ? "open" : "close"]s for \the [user].",\ @@ -245,7 +245,7 @@ return//Already doing something. if(istype(C, /obj/item/weapon/weldingtool) && !repairing) if(prying) - to_chat(user,"Someone's busy prying that [density ? "open" : "closed"]!") + to_chat(user, "Someone's busy prying that [density ? "open" : "closed"]!") var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0, user)) blocked = !blocked @@ -256,7 +256,7 @@ update_icon() return - if(density && istype(C, /obj/item/weapon/screwdriver)) + if(density && C.is_screwdriver()) hatch_open = !hatch_open playsound(src, C.usesound, 50, 1) user.visible_message("[user] has [hatch_open ? "opened" : "closed"] \the [src] maintenance hatch.", @@ -264,9 +264,9 @@ update_icon() return - if(blocked && istype(C, /obj/item/weapon/crowbar) && !repairing) + if(blocked && C.is_crowbar() && !repairing) if(!hatch_open) - user << "You must open the maintenance hatch first!" + to_chat(user, "You must open the maintenance hatch first!") else user.visible_message("[user] is removing the electronics from \the [src].", "You start to remove the electronics from [src].") @@ -290,14 +290,14 @@ return if(blocked) - user << "\The [src] is welded shut!" + to_chat(user, "\The [src] is welded shut!") return if(C.pry == 1) if(operating) return - if(blocked && istype(C, /obj/item/weapon/crowbar)) + if(blocked && C.is_crowbar()) user.visible_message("\The [user] pries at \the [src] with \a [C], but \the [src] is welded in place!",\ "You try to pry \the [src] [density ? "open" : "closed"], but it is welded in place!",\ "You hear someone struggle and metal straining.") @@ -309,7 +309,7 @@ return if(prying) - to_chat(user,"Someone's already prying that [density ? "open" : "closed"].") + to_chat(user, "Someone's already prying that [density ? "open" : "closed"].") return user.visible_message("\The [user] starts to force \the [src] [density ? "open" : "closed"] with \a [C]!",\ @@ -319,7 +319,7 @@ update_icon() playsound(src, C.usesound, 100, 1) if(do_after(user,30 * C.toolspeed)) - if(istype(C, /obj/item/weapon/crowbar)) + if(C.is_crowbar()) if(stat & (BROKEN|NOPOWER) || !density) user.visible_message("\The [user] forces \the [src] [density ? "open" : "closed"] with \a [C]!",\ "You force \the [src] [density ? "open" : "closed"] with \the [C]!",\ @@ -504,7 +504,7 @@ /obj/machinery/door/firedoor/glass name = "\improper Emergency Glass Shutter" - desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a resilient glass window, allowing you to see the danger." + desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a resilient glass window, allowing you to see the danger." icon = 'icons/obj/doors/DoorHazardGlass.dmi' icon_state = "door_open" glass = 1 diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index f30c2e6146..cebafdbb40 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -26,7 +26,7 @@ obj/structure/firedoor_assembly/attackby(obj/item/C, mob/user as mob) wired = 1 user << "You wire \the [src]." - else if(istype(C, /obj/item/weapon/wirecutters) && wired ) + else if(C.is_wirecutter() && wired ) playsound(src.loc, C.usesound, 100, 1) user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].") @@ -46,7 +46,7 @@ obj/structure/firedoor_assembly/attackby(obj/item/C, mob/user as mob) qdel(src) else user << "You must secure \the [src] first!" - else if(istype(C, /obj/item/weapon/wrench)) + else if(C.is_wrench()) anchored = !anchored playsound(src.loc, C.usesound, 50, 1) user.visible_message("[user] has [anchored ? "" : "un" ]secured \the [src]!", diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 8fb012f870..608e02b9a0 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -12,8 +12,8 @@ create_fillers() /obj/machinery/door/airlock/multi_tile/Destroy() - qdel_null(filler1) - qdel_null(filler2) + QDEL_NULL(filler1) + QDEL_NULL(filler2) return ..() /obj/machinery/door/airlock/multi_tile/Move() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index d25473e709..fe21197dc5 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -154,6 +154,7 @@ return src.attack_hand(user) /obj/machinery/door/window/attack_hand(mob/user as mob) + src.add_fingerprint(user) if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -164,7 +165,17 @@ user.setClickCooldown(user.get_attack_speed()) take_damage(25) return - return src.attackby(user, user) + + if (src.allowed(user)) + if (src.density) + open() + else + close() + + else if (src.density) + flick(text("[]deny", src.base_state), src) + + return /obj/machinery/door/window/emag_act(var/remaining_charges, var/mob/user) if (density && operable()) @@ -174,85 +185,86 @@ open() return 1 -/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob) +/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob) //If it's in the process of opening/closing, ignore the click if (src.operating == 1) return - // Fixing. - if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP) - var/obj/item/weapon/weldingtool/WT = I - if(health < maxhealth) - if(WT.remove_fuel(1 ,user)) - to_chat(user, "You begin repairing [src]...") - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 40 * WT.toolspeed, target = src)) - health = maxhealth - update_icon() - to_chat(user, "You repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - - //Emags and ninja swords? You may pass. - if (istype(I, /obj/item/weapon/melee/energy/blade)) - if(emag_act(10, user)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, "sparks", 50, 1) - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - visible_message("The glass door was sliced open by [user]!") - return 1 - - //If it's opened/emagged, crowbar can pry it out of its frame. - if (!density && istype(I, /obj/item/weapon/crowbar)) - playsound(src, I.usesound, 50, 1) - user.visible_message("[user] begins prying the windoor out of the frame.", "You start to pry the windoor out of the frame.") - if (do_after(user,40 * I.toolspeed)) - to_chat(user,"You pried the windoor out of the frame!") - - var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) - if (istype(src, /obj/machinery/door/window/brigdoor)) - wa.secure = "secure_" - if (src.base_state == "right" || src.base_state == "rightsecure") - wa.facing = "r" - wa.set_dir(src.dir) - wa.anchored = 1 - wa.created_name = name - wa.state = "02" - wa.step = 2 - wa.update_state() - - if(operating == -1) - wa.electronics = new/obj/item/weapon/circuitboard/broken() + if(istype(I)) + // Fixing. + if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP) + var/obj/item/weapon/weldingtool/WT = I + if(health < maxhealth) + if(WT.remove_fuel(1 ,user)) + to_chat(user, "You begin repairing [src]...") + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 40 * WT.toolspeed, target = src)) + health = maxhealth + update_icon() + to_chat(user, "You repair [src].") else - if(!electronics) - wa.electronics = new/obj/item/weapon/airlock_electronics() - if(!src.req_access) - src.check_access() - if(src.req_access.len) - wa.electronics.conf_access = src.req_access - else if (src.req_one_access.len) - wa.electronics.conf_access = src.req_one_access - wa.electronics.one_access = 1 - else - wa.electronics = electronics - electronics = null - operating = 0 - qdel(src) + to_chat(user, "[src] is already in good condition!") return - //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) - user.setClickCooldown(user.get_attack_speed(I)) - var/aforce = I.force - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[src] was hit by [I].") - if(I.damtype == BRUTE || I.damtype == BURN) - take_damage(aforce) - return + //Emags and ninja swords? You may pass. + if (istype(I, /obj/item/weapon/melee/energy/blade)) + if(emag_act(10, user)) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, "sparks", 50, 1) + playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) + visible_message("The glass door was sliced open by [user]!") + return 1 + + //If it's opened/emagged, crowbar can pry it out of its frame. + if (!density && I.is_crowbar()) + playsound(src, I.usesound, 50, 1) + user.visible_message("[user] begins prying the windoor out of the frame.", "You start to pry the windoor out of the frame.") + if (do_after(user,40 * I.toolspeed)) + to_chat(user,"You pried the windoor out of the frame!") + + var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) + if (istype(src, /obj/machinery/door/window/brigdoor)) + wa.secure = "secure_" + if (src.base_state == "right" || src.base_state == "rightsecure") + wa.facing = "r" + wa.set_dir(src.dir) + wa.anchored = 1 + wa.created_name = name + wa.state = "02" + wa.step = 2 + wa.update_state() + + if(operating == -1) + wa.electronics = new/obj/item/weapon/circuitboard/broken() + else + if(!electronics) + wa.electronics = new/obj/item/weapon/airlock_electronics() + if(!src.req_access) + src.check_access() + if(src.req_access.len) + wa.electronics.conf_access = src.req_access + else if (src.req_one_access.len) + wa.electronics.conf_access = src.req_one_access + wa.electronics.one_access = 1 + else + wa.electronics = electronics + electronics = null + operating = 0 + qdel(src) + return + + //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) + if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) + user.setClickCooldown(user.get_attack_speed(I)) + var/aforce = I.force + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + visible_message("[src] was hit by [I].") + if(I.damtype == BRUTE || I.damtype == BURN) + take_damage(aforce) + return src.add_fingerprint(user) @@ -268,8 +280,6 @@ return - - /obj/machinery/door/window/brigdoor name = "secure door" icon = 'icons/obj/doors/windoor.dmi' @@ -284,7 +294,6 @@ new /obj/item/stack/rods(src.loc, 2) ..() - /obj/machinery/door/window/northleft dir = NORTH diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index b5895cd300..6bf5fe0553 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -33,7 +33,7 @@ "secure" = program.memory["secure"] ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) @@ -89,7 +89,7 @@ "processing" = program.memory["processing"], ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) @@ -153,7 +153,7 @@ "processing" = program.memory["processing"] ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index a63874235f..86885ebd53 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -24,7 +24,7 @@ "override_enabled" = docking_program.override_enabled, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index 9fb1b34900..7c35568e51 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -35,7 +35,7 @@ "airlocks" = airlocks, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290) @@ -73,7 +73,7 @@ "override_enabled" = airlock_program.override_enabled, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index ed8b435fb6..9242afd762 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -19,7 +19,7 @@ "door_lock" = docking_program.memory["door_status"]["lock"], ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290) diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index 87eba96324..fee3fbd0ec 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -88,9 +88,9 @@ // Parameters: 2 (I - the item being whacked against the machine, user - the person doing the whacking) // Description: Handles deconstruction. /obj/machinery/exonet_node/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) default_deconstruction_screwdriver(user, I) - else if(istype(I, /obj/item/weapon/crowbar)) + else if(I.is_crowbar()) default_deconstruction_crowbar(user, I) else ..() @@ -123,7 +123,7 @@ // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -167,7 +167,7 @@ log_game(msg) update_icon() - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) add_fingerprint(usr) // Proc: get_exonet_node() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 18844dcd73..169bc8c6d7 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -35,7 +35,7 @@ //Don't want to render prison breaks impossible /obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) add_fingerprint(user) disable = !disable if(disable) @@ -102,7 +102,7 @@ flash() /obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) add_fingerprint(user) anchored = !anchored diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 88b36f6b5c..729d99f419 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -65,7 +65,7 @@ turn_off(1) else if(!turn_on(1)) - user << "You try to turn on \the [src] but it does not work." + to_chat(user, "You try to turn on \the [src] but it does not work.") /obj/machinery/floodlight/attack_hand(mob/user as mob) if(open && cell) @@ -82,7 +82,7 @@ cell = null on = 0 set_light(0) - user << "You remove the power cell" + to_chat(user, "You remove the power cell") update_icon() return @@ -90,38 +90,38 @@ turn_off(1) else if(!turn_on(1)) - user << "You try to turn on \the [src] but it does not work." + to_chat(user, "You try to turn on \the [src] but it does not work.") update_icon() /obj/machinery/floodlight/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(!open) if(unlocked) unlocked = 0 - user << "You screw the battery panel in place." + to_chat(user, "You screw the battery panel in place.") else unlocked = 1 - user << "You unscrew the battery panel." + to_chat(user, "You unscrew the battery panel.") - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) if(unlocked) if(open) open = 0 overlays = null - user << "You crowbar the battery panel in place." + to_chat(user, "You crowbar the battery panel in place.") else if(unlocked) open = 1 - user << "You remove the battery panel." + to_chat(user, "You remove the battery panel.") if(istype(W, /obj/item/weapon/cell)) if(open) if(cell) - user << "There is a power cell already installed." + to_chat(user, "There is a power cell already installed.") else user.drop_item() W.loc = src cell = W - user << "You insert the power cell." + to_chat(user, "You insert the power cell.") update_icon() diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index ced1ffa864..59dca1966e 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -23,13 +23,13 @@ var/list/floor_light_cache = list() anchored = 1 /obj/machinery/floor_light/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) anchored = !anchored visible_message("\The [user] has [anchored ? "attached" : "detached"] \the [src].") else if(istype(W, /obj/item/weapon/weldingtool) && (damaged || (stat & BROKEN))) var/obj/item/weapon/weldingtool/WT = W if(!WT.remove_fuel(0, user)) - user << "\The [src] must be on to complete this task." + to_chat(user, "\The [src] must be on to complete this task.") return playsound(src.loc, WT.usesound, 50, 1) if(!do_after(user, 20 * WT.toolspeed)) @@ -60,15 +60,15 @@ var/list/floor_light_cache = list() else if(!anchored) - user << "\The [src] must be screwed down first." + to_chat(user, "\The [src] must be screwed down first.") return if(stat & BROKEN) - user << "\The [src] is too damaged to be functional." + to_chat(user, "\The [src] is too damaged to be functional.") return if(stat & NOPOWER) - user << "\The [src] is unpowered." + to_chat(user, "\The [src] is unpowered.") return on = !on diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index 1cbccc195c..94f61981ea 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -34,7 +34,7 @@ return /obj/machinery/floorlayer/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) var/m = input("Choose work mode", "Mode") as null|anything in mode mode[m] = !mode[m] var/O = mode[m] @@ -42,23 +42,23 @@ return if(istype(W, /obj/item/stack/tile)) - user << "\The [W] successfully loaded." + to_chat(user, "\The [W] successfully loaded.") user.drop_item(T) TakeTile(T) return - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) if(!length(contents)) - user << "\The [src] is empty." + to_chat(user, "\The [src] is empty.") else var/obj/item/stack/tile/E = input("Choose remove tile type.", "Tiles") as null|anything in contents if(E) - user << "You remove the [E] from /the [src]." + to_chat(user, "You remove the [E] from /the [src].") E.loc = src.loc T = null return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) T = input("Choose tile type.", "Tiles") as null|anything in contents return ..() diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index f1f2ec0834..2c16d3771e 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -260,9 +260,9 @@ update_icon() /obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/weapon/wrench)) + if(P.is_wrench()) if(state == FRAME_PLACED && !anchored) - user << "You start to wrench the frame into place." + to_chat(user, "You start to wrench the frame into place.") playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) anchored = 1 @@ -270,14 +270,14 @@ state = FRAME_FASTENED check_components() update_desc() - user << "You wrench the frame into place and set the outer cover." + to_chat(user, "You wrench the frame into place and set the outer cover.") else - user << "You wrench the frame into place." + to_chat(user, "You wrench the frame into place.") else if(state == FRAME_PLACED && anchored) playsound(src, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) - user << "You unfasten the frame." + to_chat(user, "You unfasten the frame.") anchored = 0 else if(istype(P, /obj/item/weapon/weldingtool)) @@ -287,12 +287,12 @@ playsound(src.loc, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) if(src && WT.isOn()) - user << "You deconstruct the frame." + to_chat(user, "You deconstruct the frame.") new /obj/item/stack/material/steel(src.loc, frame_type.frame_size) qdel(src) return else if(!WT.remove_fuel(0, user)) - user << "The welding tool must be on to complete this task." + to_chat(user, "The welding tool must be on to complete this task.") return else if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit) @@ -301,7 +301,7 @@ var/datum/frame/frame_types/board_type = B.board_type if(board_type.name == frame_type.name) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You place the circuit board inside the frame." + to_chat(user, "You place the circuit board inside the frame.") circuit = P user.drop_item() P.loc = src @@ -310,25 +310,25 @@ check_components() update_desc() else - user << "This frame does not accept circuit boards of this type!" + to_chat(user, "This frame does not accept circuit boards of this type!") return - else if(istype(P, /obj/item/weapon/screwdriver)) + else if(P.is_screwdriver()) if(state == FRAME_UNFASTENED) if(need_circuit && circuit) playsound(src, P.usesound, 50, 1) - user << "You screw the circuit board into place." + to_chat(user, "You screw the circuit board into place.") state = FRAME_FASTENED else if(state == FRAME_FASTENED) if(need_circuit && circuit) playsound(src, P.usesound, 50, 1) - user << "You unfasten the circuit board." + to_chat(user, "You unfasten the circuit board.") state = FRAME_UNFASTENED else if(!need_circuit && circuit) playsound(src, P.usesound, 50, 1) - user << "You unfasten the outer cover." + to_chat(user, "You unfasten the outer cover.") state = FRAME_PLACED else if(state == FRAME_WIRED) @@ -370,7 +370,7 @@ else if(frame_type.frame_class == FRAME_CLASS_ALARM) playsound(src, P.usesound, 50, 1) - user << "You fasten the cover." + to_chat(user, "You fasten the cover.") var/obj/machinery/B = new circuit.build_path(src.loc) B.pixel_x = pixel_x B.pixel_y = pixel_y @@ -384,7 +384,7 @@ else if(state == FRAME_PANELED) if(frame_type.frame_class == FRAME_CLASS_COMPUTER) playsound(src, P.usesound, 50, 1) - user << "You connect the monitor." + to_chat(user, "You connect the monitor.") var/obj/machinery/B = new circuit.build_path(src.loc) B.pixel_x = pixel_x B.pixel_y = pixel_y @@ -397,7 +397,7 @@ else if(frame_type.frame_class == FRAME_CLASS_DISPLAY) playsound(src, P.usesound, 50, 1) - user << "You connect the monitor." + to_chat(user, "You connect the monitor.") var/obj/machinery/B = new circuit.build_path(src.loc) B.pixel_x = pixel_x B.pixel_y = pixel_y @@ -408,11 +408,11 @@ qdel(src) return - else if(istype(P, /obj/item/weapon/crowbar)) + else if(P.is_crowbar()) if(state == FRAME_UNFASTENED) if(need_circuit && circuit) playsound(src, P.usesound, 50, 1) - user << "You remove the circuit board." + to_chat(user, "You remove the circuit board.") state = FRAME_PLACED circuit.forceMove(src.loc) circuit = null @@ -423,25 +423,25 @@ if(frame_type.frame_class == FRAME_CLASS_MACHINE) playsound(src, P.usesound, 50, 1) if(components.len == 0) - user << "There are no components to remove." + to_chat(user, "There are no components to remove.") else - user << "You remove the components." + to_chat(user, "You remove the components.") for(var/obj/item/weapon/W in components) W.forceMove(src.loc) check_components() update_desc() - user << desc + to_chat(user, desc) else if(state == FRAME_PANELED) if(frame_type.frame_class == FRAME_CLASS_COMPUTER) playsound(src, P.usesound, 50, 1) - user << "You remove the glass panel." + to_chat(user, "You remove the glass panel.") state = FRAME_WIRED new /obj/item/stack/material/glass(src.loc, 2) else if(frame_type.frame_class == FRAME_CLASS_DISPLAY) playsound(src, P.usesound, 50, 1) - user << "You remove the glass panel." + to_chat(user, "You remove the glass panel.") state = FRAME_WIRED new /obj/item/stack/material/glass(src.loc, 2) @@ -449,16 +449,16 @@ if(state == FRAME_FASTENED) var/obj/item/stack/cable_coil/C = P if(C.get_amount() < 5) - user << "You need five coils of wire to add them to the frame." + to_chat(user, "You need five coils of wire to add them to the frame.") return - user << "You start to add cables to the frame." + to_chat(user, "You start to add cables to the frame.") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20) && state == FRAME_FASTENED) if(C.use(5)) - user << "You add cables to the frame." + to_chat(user, "You add cables to the frame.") state = FRAME_WIRED if(frame_type.frame_class == FRAME_CLASS_MACHINE) - user << desc + to_chat(user, desc) else if(state == FRAME_WIRED) if(frame_type.frame_class == FRAME_CLASS_MACHINE) for(var/I in req_components) @@ -483,31 +483,31 @@ req_components[I]-- update_desc() break - user << desc + to_chat(user, desc) - else if(istype(P, /obj/item/weapon/wirecutters)) + else if(P.is_wirecutter()) if(state == FRAME_WIRED) if(frame_type.frame_class == FRAME_CLASS_COMPUTER) playsound(src, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = FRAME_FASTENED new /obj/item/stack/cable_coil(src.loc, 5) else if(frame_type.frame_class == FRAME_CLASS_DISPLAY) playsound(src, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = FRAME_FASTENED new /obj/item/stack/cable_coil(src.loc, 5) else if(frame_type.frame_class == FRAME_CLASS_ALARM) playsound(src, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = FRAME_FASTENED new /obj/item/stack/cable_coil(src.loc, 5) else if(frame_type.frame_class == FRAME_CLASS_MACHINE) playsound(src, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") state = FRAME_FASTENED new /obj/item/stack/cable_coil(src.loc, 5) @@ -516,25 +516,25 @@ if(frame_type.frame_class == FRAME_CLASS_COMPUTER) var/obj/item/stack/G = P if(G.get_amount() < 2) - user << "You need two sheets of glass to put in the glass panel." + to_chat(user, "You need two sheets of glass to put in the glass panel.") return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You start to put in the glass panel." + to_chat(user, "You start to put in the glass panel.") if(do_after(user, 20) && state == FRAME_WIRED) if(G.use(2)) - user << "You put in the glass panel." + to_chat(user, "You put in the glass panel.") state = FRAME_PANELED else if(frame_type.frame_class == FRAME_CLASS_DISPLAY) var/obj/item/stack/G = P if(G.get_amount() < 2) - user << "You need two sheets of glass to put in the glass panel." + to_chat(user, "You need two sheets of glass to put in the glass panel.") return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You start to put in the glass panel." + to_chat(user, "You start to put in the glass panel.") if(do_after(user, 20) && state == FRAME_WIRED) if(G.use(2)) - user << "You put in the glass panel." + to_chat(user, "You put in the glass panel.") state = FRAME_PANELED else if(istype(P, /obj/item)) @@ -562,9 +562,9 @@ req_components[I]-- update_desc() break - user << desc + to_chat(user, desc) if(P && P.loc != src && !istype(P, /obj/item/stack/material)) - user << "You cannot add that component to the machine!" + to_chat(user, "You cannot add that component to the machine!") return update_icon() @@ -578,12 +578,12 @@ return 0 if(anchored) - usr << "It is fastened to the floor therefore you can't rotate it!" + to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") return 0 set_dir(turn(dir, 90)) - usr << "You rotate the [src] to face [dir2text(dir)]!" + to_chat(usr, "You rotate the [src] to face [dir2text(dir)]!") return @@ -597,11 +597,11 @@ return 0 if(anchored) - usr << "It is fastened to the floor therefore you can't rotate it!" + to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") return 0 set_dir(turn(dir, 270)) - usr << "You rotate the [src] to face [dir2text(dir)]!" + to_chat(usr, "You rotate the [src] to face [dir2text(dir)]!") return \ No newline at end of file diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 1e67fb8b4f..5cb521d423 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -71,7 +71,7 @@ // sd_SetLuminosity(0) /obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) add_fingerprint(user) disable = !disable playsound(src, W.usesound, 50, 1) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 306a098638..36ec27f4ac 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -55,21 +55,21 @@ /obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/reagent_containers)) if(!isnull(beaker)) - user << "There is already a reagent container loaded!" + to_chat(user, "There is already a reagent container loaded!") return user.drop_item() W.loc = src beaker = W - user << "You attach \the [W] to \the [src]." + to_chat(user, "You attach \the [W] to \the [src].") update_icon() return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) playsound(src, W.usesound, 50, 1) - user << "You start to dismantle the IV drip." + to_chat(user, "You start to dismantle the IV drip.") if(do_after(user, 15)) - user << "You dismantle the IV drip." + to_chat(user, "You dismantle the IV drip.") var/obj/item/stack/rods/A = new /obj/item/stack/rods(src.loc) A.amount = 6 if(beaker) @@ -110,12 +110,14 @@ amount = min(amount, 4) // If the beaker is full, ping if(amount == 0) - if(prob(5)) visible_message("\The [src] pings.") + if(prob(5)) + visible_message("\The [src] pings.") return var/mob/living/carbon/human/T = attached - if(!istype(T)) return + if(!istype(T)) + return if(!T.dna) return if(NOCLONE in T.mutations) @@ -152,30 +154,31 @@ set src in view(1) if(!istype(usr, /mob/living)) - usr << "You can't do that." + to_chat(usr, "You can't do that.") return if(usr.stat) return mode = !mode - usr << "The IV drip is now [mode ? "injecting" : "taking blood"]." + to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") /obj/machinery/iv_drip/examine(mob/user) ..(user) - if(!(user in view(2)) && user != src.loc) return + if(!(user in view(2)) && user != src.loc) + return - user << "The IV drip is [mode ? "injecting" : "taking blood"]." + to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].") if(beaker) if(beaker.reagents && beaker.reagents.reagent_list.len) - usr << "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." + to_chat(user, "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.") else - usr << "Attached is an empty [beaker]." + to_chat(user, "Attached is an empty [beaker].") else - usr << "No chemicals are attached." + to_chat(user, "No chemicals are attached.") - usr << "[attached ? attached : "No one"] is attached." + to_chat(user, "[attached ? attached : "No one"] is attached.") /obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through. diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 8ffcb5cec4..5c94d8a114 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -25,13 +25,32 @@ var/datum/wires/jukebox/wires = null var/hacked = 0 // Whether to show the hidden songs or not var/freq = 0 // Currently no effect, will return in phase II of mediamanager. - + //VOREStation Add var/loop_mode = JUKEMODE_PLAY_ONCE // Behavior when finished playing a song var/max_queue_len = 3 // How many songs are we allowed to queue up? - var/datum/track/current_track // Currently playing song - var/list/datum/track/queue = list() // Queued songs - var/list/datum/track/tracks = list() // Available tracks - var/list/datum/track/secret_tracks = list() // Only visible if hacked + var/list/queue = list() + //VOREStation Add End + var/datum/track/current_track + var/list/datum/track/tracks = list( + new/datum/track("Beyond", 'sound/ambience/ambispace.ogg'), + new/datum/track("Clouds of Fire", 'sound/music/clouds.s3m'), + new/datum/track("D`Bert", 'sound/music/title2.ogg'), + new/datum/track("D`Fort", 'sound/ambience/song_game.ogg'), + new/datum/track("Floating", 'sound/music/main.ogg'), + new/datum/track("Endless Space", 'sound/music/space.ogg'), + new/datum/track("Part A", 'sound/misc/TestLoop1.ogg'), + new/datum/track("Scratch", 'sound/music/title1.ogg'), + new/datum/track("Trai`Tor", 'sound/music/traitor.ogg'), + new/datum/track("Stellar Transit", 'sound/ambience/space/space_serithi.ogg'), + ) + + // Only visible if hacked + var/list/datum/track/secret_tracks = list( + new/datum/track("Clown", 'sound/music/clown.ogg'), + new/datum/track("Space Asshole", 'sound/music/space_asshole.ogg'), + new/datum/track("Thunderdome", 'sound/music/THUNDERDOME.ogg'), + new/datum/track("Russkiy rep Diskoteka", 'sound/music/russianrapdisco.ogg') + ) /obj/machinery/media/jukebox/New() ..() @@ -47,16 +66,16 @@ // On initialization, copy our tracks from the global list /obj/machinery/media/jukebox/initialize() . = ..() - if(all_jukebox_tracks.len < 1) + if(LAZYLEN(all_jukebox_tracks)) //Global list has tracks + tracks.Cut() + secret_tracks.Cut() + for(var/datum/track/T in all_jukebox_tracks) //Load them + if(T.secret) + secret_tracks |= T + else + tracks |= T + else if(!LAZYLEN(tracks)) //We don't even have default tracks stat |= BROKEN // No tracks configured this round! - return - // Ootherwise load from the global list! - for(var/datum/track/T in all_jukebox_tracks) - if(T.secret) - secret_tracks |= T - else - tracks |= T - return /obj/machinery/media/jukebox/process() if(!playing) @@ -120,11 +139,13 @@ return if(default_deconstruction_crowbar(user, W)) return - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) return wires.Interact(user) if(istype(W, /obj/item/device/multitool)) return wires.Interact(user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) + if(playing) + StopPlaying() user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].") anchored = !anchored playsound(src, W.usesound, 50, 1) @@ -170,11 +191,11 @@ return if(!anchored) - usr << "You must secure \the [src] first." + to_chat(usr, "You must secure \the [src] first.") return if(inoperable()) - usr << "\The [src] doesn't appear to function." + to_chat(usr, "\The [src] doesn't appear to function.") return if(href_list["change_track"]) @@ -210,7 +231,7 @@ spawn(15) explode() else if(current_track == null) - usr << "No track selected." + to_chat(usr, "No track selected.") else StartPlaying() @@ -218,7 +239,7 @@ /obj/machinery/media/jukebox/interact(mob/user) if(inoperable()) - usr << "\The [src] doesn't appear to function." + to_chat(usr, "\The [src] doesn't appear to function.") return ui_interact(user) @@ -244,7 +265,7 @@ data["tracks"] = nano_tracks // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "jukebox.tmpl", title, 450, 600) ui.set_initial_data(data) @@ -277,7 +298,7 @@ return if(default_deconstruction_crowbar(user, W)) return - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) if(playing) StopPlaying() user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].") diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 3da253e682..1ece9225b1 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -61,7 +61,7 @@ /obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob) if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver user.visible_message( \ "\The [user] starts to fix part of the microwave.", \ "You start to fix part of the microwave." \ @@ -73,7 +73,7 @@ "You have fixed part of the microwave." \ ) src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench user.visible_message( \ "\The [user] starts to fix part of the microwave.", \ "You start to fix part of the microwave." \ @@ -88,7 +88,7 @@ src.dirty = 0 // just to be sure src.flags = OPENCONTAINER | NOREACT else - user << "It's broken!" + to_chat(user, "It's broken!") return 1 else if(default_deconstruction_screwdriver(user, O)) return @@ -113,11 +113,11 @@ src.icon_state = "mw" src.flags = OPENCONTAINER | NOREACT else //Otherwise bad luck!! - user << "It's dirty!" + to_chat(user, "It's dirty!") return 1 else if(is_type_in_list(O,acceptable_items)) if (contents.len>=(max_n_of_items + component_parts.len + 1)) //Adds component_parts to the maximum number of items. The 1 is from the circuit - user << "This [src] is full of ingredients, you cannot put more." + to_chat(user, "This [src] is full of ingredients, you cannot put more.") return 1 if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it var/obj/item/stack/S = O @@ -143,15 +143,15 @@ return 1 for (var/datum/reagent/R in O.reagents.reagent_list) if (!(R.id in acceptable_reagents)) - user << "Your [O] contains components unsuitable for cookery." + to_chat(user, "Your [O] contains components unsuitable for cookery.") return 1 return else if(istype(O,/obj/item/weapon/grab)) var/obj/item/weapon/grab/G = O - user << "This is ridiculous. You can not fit \the [G.affecting] in this [src]." + to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].") return 1 else - user << "You have no idea what you can cook with this [O]." + to_chat(user, "You have no idea what you can cook with this [O].") ..() src.updateUsrDialog() @@ -225,7 +225,7 @@ Eject ingredients!
\ "} - user << browse("Microwave Controls[dat]", "window=microwave") + to_chat(user, browse("Microwave Controls[dat]", "window=microwave")) onclose(user, "microwave") return diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 21ba5f25d0..005f7749b6 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -208,26 +208,26 @@ ********************/ /obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/screwdriver)) + if(O.is_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].") playsound(src, O.usesound, 50, 1) overlays.Cut() if(panel_open) overlays += image(icon, icon_panel) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return if(wrenchable && default_unfasten_wrench(user, O, 20)) return - if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters)) + if(istype(O, /obj/item/device/multitool) || O.is_wirecutter()) if(panel_open) attack_hand(user) return if(stat & NOPOWER) - user << "\The [src] is unpowered and useless." + to_chat(user, "\The [src] is unpowered and useless.") return if(accept_check(O)) @@ -241,32 +241,33 @@ var/plants_loaded = 0 for(var/obj/G in P.contents) if(accept_check(G)) + P.remove_from_storage(G) //fixes ui bug - Pull Request 5515 stock(G) plants_loaded = 1 if(plants_loaded) 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." + to_chat(user, "Some items are refused.") else if(istype(O, /obj/item/weapon/gripper)) // Grippers. ~Mechoid. var/obj/item/weapon/gripper/B = O //B, for Borg. if(!B.wrapped) - user << "\The [B] is not holding anything." + to_chat(user, "\The [B] is not holding anything.") return else var/B_held = B.wrapped - user << "You use \the [B] to put \the [B_held] into \the [src]." + to_chat(user, "You use \the [B] to put \the [B_held] into \the [src].") return else - user << "\The [src] smartly refuses [O]." + to_chat(user, "\The [src] smartly refuses [O].") return 1 /obj/machinery/smartfridge/secure/emag_act(var/remaining_charges, var/mob/user) if(!emagged) emagged = 1 locked = -1 - user << "You short out the product lock on [src]." + to_chat(user, "You short out the product lock on [src].") return 1 /obj/machinery/smartfridge/proc/stock(obj/item/O) @@ -280,11 +281,11 @@ var/datum/stored_item/item = new/datum/stored_item(src, O.type, O.name) item.add_product(O) item_records.Add(item) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/smartfridge/proc/vend(datum/stored_item/I) I.get_product(get_turf(src)) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/smartfridge/attack_ai(mob/user as mob) attack_hand(user) @@ -319,7 +320,7 @@ if(items.len > 0) data["contents"] = items - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) ui.set_initial_data(data) @@ -329,7 +330,7 @@ if(..()) return 0 var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) @@ -378,9 +379,10 @@ *************************/ /obj/machinery/smartfridge/secure/Topic(href, href_list) - if(stat & (NOPOWER|BROKEN)) return 0 + 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." + to_chat(usr, "Access denied.") return 0 return ..() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 8f77ac90d9..2a1a7f6e89 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -46,7 +46,7 @@ /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) - user << "A light switch. It is [on? "on" : "off"]." + to_chat(user, "A light switch. It is [on? "on" : "off"].") /obj/machinery/light_switch/attack_hand(mob/user) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f68bc4cc8a..c103f1f39e 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -232,8 +232,8 @@ Class Procs: return 1 if(user.lying || user.stat) return 1 - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/living/silicon))) - usr << "You don't have the dexterity to do this!" + if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))) + to_chat(user, "You don't have the dexterity to do this!") return 1 if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -241,7 +241,7 @@ Class Procs: visible_message("[H] stares cluelessly at [src].") return 1 else if(prob(H.getBrainLoss())) - user << "You momentarily forget how to use [src]." + to_chat(user, "You momentarily forget how to use [src].") return 1 add_fingerprint(user) @@ -313,23 +313,23 @@ Class Procs: component_parts -= A component_parts += B B.loc = null - user << "[A.name] replaced with [B.name]." + to_chat(user, "[A.name] replaced with [B.name].") break update_icon() RefreshParts() else - user << "Following parts detected in the machine:" + to_chat(user, "Following parts detected in the machine:") for(var/var/obj/item/C in component_parts) //var/var/obj/item/C? - user << " [C.name]" + to_chat(user, " [C.name]") return 1 // Default behavior for wrenching down machines. Supports both delay and instant modes. -/obj/machinery/proc/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/wrench/W, var/time = 0) - if(!istype(W)) +/obj/machinery/proc/default_unfasten_wrench(var/mob/user, var/obj/item/W, var/time = 0) + if(!W.is_wrench()) return FALSE if(panel_open) return FALSE // Close panel first! - playsound(loc, W.usesound, 50, 1) + playsound(loc, W.usesound, 50, 1) var/actual_time = W.toolspeed * time if(actual_time != 0) user.visible_message( \ @@ -344,48 +344,48 @@ Class Procs: update_icon() return TRUE -/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) - if(!istype(C)) +/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/C) + if(!C.is_crowbar()) return 0 if(!panel_open) return 0 . = dismantle() -/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.is_screwdriver()) return 0 playsound(src, S.usesound, 50, 1) panel_open = !panel_open - user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].") update_icon() return 1 -/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) +/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.is_screwdriver()) return 0 if(!circuit) return 0 - user << "You start disconnecting the monitor." + to_chat(user, "You start disconnecting the monitor.") playsound(src, S.usesound, 50, 1) if(do_after(user, 20 * S.toolspeed)) if(stat & BROKEN) - user << "The broken glass falls out." + to_chat(user, "The broken glass falls out.") new /obj/item/weapon/material/shard(src.loc) else - user << "You disconnect the monitor." + to_chat(user, "You disconnect the monitor.") . = dismantle() -/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) +/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.is_screwdriver()) return 0 playsound(src, S.usesound, 50, 1) panel_open = !panel_open - user << "The wires have been [panel_open ? "exposed" : "unexposed"]" + to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]") update_icon() return 1 -/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/weapon/wirecutters/W) - if(!istype(W)) +/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/W) + if(!W.is_wirecutter()) return 0 if(!panel_open) return 0 diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 4d1affb3a0..1d13a36c3a 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -38,7 +38,7 @@ if(panel_open) var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) if(!input) - usr << "No input found please hang up and try your call again." + to_chat(usr, "No input found please hang up and try your call again.") return id = input return @@ -55,7 +55,7 @@ O_limit++ if(O_limit >= 20) for(var/mob/M in hearers(src, null)) - M << "The mass driver lets out a screech, it mustn't be able to handle any more items." + to_chat(M, "The mass driver lets out a screech, it mustn't be able to handle any more items.") break use_power(500) spawn(0) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 7e472c8eca..6d4453d1f2 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -72,7 +72,7 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w if(!T.is_plating()) return // prevent intraction when T-scanner revealed - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) open = !open playsound(src, I.usesound, 50, 1) user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.") @@ -83,12 +83,12 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w if(open) if(allowed(user)) locked = !locked - user << "Controls are now [locked ? "locked." : "unlocked."]" + to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") else - user << "Access denied." + to_chat(user, "Access denied.") updateDialog() else - user << "You must open the cover first!" + to_chat(user, "You must open the cover first!") return /obj/machinery/navbeacon/attack_ai(var/mob/user) @@ -107,7 +107,7 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w return // prevent intraction when T-scanner revealed if(!open && !ai) // can't alter controls if not open, unless you're an AI - user << "The beacon's control cover is closed." + to_chat(user, "The beacon's control cover is closed.") return diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 018cf75f53..53c4dcdd28 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -55,30 +55,30 @@ var/bomb_set return /obj/machinery/nuclearbomb/attackby(obj/item/weapon/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/screwdriver)) + if(O.is_screwdriver()) playsound(src, O.usesound, 50, 1) add_fingerprint(user) if(auth) if(opened == 0) opened = 1 overlays += image(icon, "npanel_open") - user << "You unscrew the control panel of [src]." + to_chat(user, "You unscrew the control panel of [src].") else opened = 0 overlays -= image(icon, "npanel_open") - user << "You screw the control panel of [src] back on." + to_chat(user, "You screw the control panel of [src] back on.") else if(opened == 0) - user << "The [src] emits a buzzing noise, the panel staying locked in." + to_chat(user, "The [src] emits a buzzing noise, the panel staying locked in.") if(opened == 1) opened = 0 overlays -= image(icon, "npanel_open") - user << "You screw the control panel of [src] back on." + to_chat(user, "You screw the control panel of [src] back on.") flick("nuclearbombc", src) return - if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/device/multitool)) + if(O.is_wirecutter() || istype(O, /obj/item/device/multitool)) if(opened == 1) nukehack_win(user) return @@ -99,7 +99,7 @@ var/bomb_set var/obj/item/weapon/weldingtool/WT = O if(!WT.isOn()) return if(WT.get_fuel() < 5) // uses up 5 fuel. - user << "You need more fuel to complete this task." + to_chat(user, "You need more fuel to complete this task.") return user.visible_message("[user] starts cutting loose the anchoring bolt covers on [src].", "You start cutting loose the anchoring bolt covers with [O]...") @@ -111,7 +111,7 @@ var/bomb_set return if(1) - if(istype(O,/obj/item/weapon/crowbar)) + if(O.is_crowbar()) user.visible_message("[user] starts forcing open the bolt covers on [src].", "You start forcing open the anchoring bolt covers with [O]...") playsound(src, O.usesound, 50, 1) @@ -127,7 +127,7 @@ var/bomb_set var/obj/item/weapon/weldingtool/WT = O if(!WT.isOn()) return if(WT.get_fuel() < 5) // uses up 5 fuel. - user << "You need more fuel to complete this task." + to_chat(user, "You need more fuel to complete this task.") return user.visible_message("[user] starts cutting apart the anchoring system sealant on [src].", "You start cutting apart the anchoring system's sealant with [O]...") @@ -139,7 +139,7 @@ var/bomb_set return if(3) - if(istype(O,/obj/item/weapon/wrench)) + if(O.is_wrench()) user.visible_message("[user] begins unwrenching the anchoring bolts on [src].", "You begin unwrenching the anchoring bolts...") playsound(src, O.usesound, 50, 1) @@ -150,7 +150,7 @@ var/bomb_set return if(4) - if(istype(O,/obj/item/weapon/crowbar)) + if(O.is_crowbar()) user.visible_message("[user] begins lifting [src] off of the anchors.", "You begin lifting the device off the anchors...") playsound(src, O.usesound, 50, 1) @@ -165,7 +165,7 @@ var/bomb_set /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if(extended) if(!ishuman(user)) - usr << "You don't have the dexterity to do this!" + to_chat(user, "You don't have the dexterity to do this!") return 1 user.set_machine(src) @@ -219,14 +219,14 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) if(!usr.canmove || usr.stat || usr.restrained()) return if(!ishuman(usr)) - usr << "You don't have the dexterity to do this!" + to_chat(usr, "You don't have the dexterity to do this!") return 1 if(deployable) - usr << "You close several panels to make [src] undeployable." + to_chat(usr, "You close several panels to make [src] undeployable.") deployable = 0 else - usr << "You adjust some panels to make [src] deployable." + to_chat(usr, "You adjust some panels to make [src] deployable.") deployable = 1 return @@ -240,10 +240,10 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) var/temp_wire = href_list["wire"] if(href_list["act"] == "pulse") if(!istype(usr.get_active_hand(), /obj/item/device/multitool)) - usr << "You need a multitool!" + to_chat(usr, "You need a multitool!") else if(wires[temp_wire]) - usr << "You can't pulse a cut wire." + to_chat(usr, "You can't pulse a cut wire.") else if(light_wire == temp_wire) lighthack = !lighthack @@ -262,8 +262,9 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) else visible_message("The [src] emits a quiet whirling noise!") if(href_list["act"] == "wire") - if(!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters)) - usr << "You need wirecutters!" + var/obj/item/I = usr.get_active_hand() + if(!I.is_wirecutter()) + to_chat(usr, "You need wirecutters!") else wires[temp_wire] = !wires[temp_wire] if(safety_wire == temp_wire) @@ -314,7 +315,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) if(timing == -1.0) return if(safety) - usr << "The safety is still on." + to_chat(usr, "The safety is still on.") return timing = !(timing) if(timing) diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 36db3f83f3..fd6a1048c7 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -36,8 +36,8 @@ visible_message("The mask rapidly retracts just before /the [src] is destroyed!") breather = null - qdel_null(tank) - qdel_null(contained) + QDEL_NULL(tank) + QDEL_NULL(contained) return ..() /obj/machinery/oxygen_pump/MouseDrop(var/mob/living/carbon/human/target, src_location, over_location) @@ -128,7 +128,7 @@ return 1 /obj/machinery/oxygen_pump/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) stat ^= MAINT user.visible_message("\The [user] [stat & MAINT ? "opens" : "closes"] \the [src].", "You [stat & MAINT ? "open" : "close"] \the [src].") if(stat & MAINT) @@ -205,7 +205,7 @@ // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 42fa5b32ae..fc594606d1 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -1,6 +1,6 @@ /* ** The Parts Lathe! Able to produce all tech level 1 stock parts for building machines! -** +** ** The idea is that engineering etc should be able to build/repair basic technology machines ** without having to use a protolathe to print what are not prototype technologies. ** Some felt having an autolathe do this might be OP, so its a separate machine. @@ -12,7 +12,7 @@ ** Leshana says: ** - Phase 1 of this project adds the machine and basic operation. ** - Phase 2 will enhance usability by making & labeling boxes with a set of parts. -** +** ** TODO - Implement phase 2 by adding cardboard boxes */ @@ -280,7 +280,7 @@ recipies_ui[++recipies_ui.len] = list("name" = R.name, "type" = "[T]") data["recipies"] = recipies_ui - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "partslathe.tmpl", "Parts Lathe UI", 500, 450) ui.set_initial_data(data) diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm index fde455ae51..3388de0c31 100644 --- a/code/game/machinery/pda_multicaster.dm +++ b/code/game/machinery/pda_multicaster.dm @@ -46,9 +46,9 @@ icon_state = "[initial(icon_state)]-p" /obj/machinery/pda_multicaster/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) default_deconstruction_screwdriver(user, I) - else if(istype(I, /obj/item/weapon/crowbar)) + else if(I.is_crowbar()) default_deconstruction_crowbar(user, I) else ..() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index ca09d3de58..0482e2f242 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -166,11 +166,11 @@ Buildable meters return ..() /obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(iswrench(W)) + if(W.is_wrench()) return wrench_act(user, W) return ..() -/obj/item/pipe/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/wrench/W) +/obj/item/pipe/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/tool/wrench/W) if(!isturf(loc)) return TRUE @@ -255,11 +255,11 @@ Buildable meters var/piping_layer = PIPING_LAYER_DEFAULT /obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(iswrench(W)) + if(W.is_wrench()) return wrench_act(user, W) return ..() -/obj/item/pipe_meter/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/wrench/W) +/obj/item/pipe_meter/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/tool/wrench/W) var/obj/machinery/atmospherics/pipe/pipe for(var/obj/machinery/atmospherics/pipe/P in loc) if(P.piping_layer == piping_layer) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 6675a5ca15..d863e57b90 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -74,7 +74,7 @@ user.drop_item() qdel(W) return - else if (istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if (unwrenched==0) playsound(src, W.usesound, 50, 1) user << "You begin to unfasten \the [src] from the floor..." diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 65656929de..366a351d6b 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -13,7 +13,7 @@ var/max_metal = 50 // Max capacity for internal metal storage var/metal = 0 // Current amount in internal metal storage var/pipe_cost = 0.25 // Cost in steel for each pipe. - var/obj/item/weapon/wrench/W // Internal wrench used for wrenching down the pipes + var/obj/item/weapon/tool/wrench/W // Internal wrench used for wrenching down the pipes var/list/Pipes = list( "regular pipes" = /obj/machinery/atmospherics/pipe/simple, "scrubbers pipes" = /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28,7 +28,7 @@ update_icon() /obj/machinery/pipelayer/Destroy() - qdel_null(W) + QDEL_NULL(W) . = ..() /obj/machinery/pipelayer/RefreshParts() @@ -57,7 +57,7 @@ return if(panel_open) if(metal < 1) - user << "\The [src] is empty." + to_chat(user, "\The [src] is empty.") return var/answer = alert(user, "Do you want to eject all the metal in \the [src]?", , "Yes","No") if(answer == "Yes") @@ -66,7 +66,7 @@ "You remove [amount_ejected] sheet\s of [DEFAULT_WALL_MATERIAL] from \the [src].") return if(!metal && !on) - user << "\The [src] doesn't work without metal." + to_chat(user, "\The [src] doesn't work without metal.") return on = !on old_turf = get_turf(src) @@ -81,33 +81,33 @@ return if(default_part_replacement(user, W)) return - if (!panel_open && iswrench(W)) + if (!panel_open && W.is_wrench()) P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes P_type = Pipes[P_type_t] user.visible_message("[user] has set \the [src] to manufacture [P_type_t].", "You set \the [src] to manufacture [P_type_t].") return - if(!panel_open && iscrowbar(W)) + if(!panel_open && W.is_crowbar()) a_dis = !a_dis user.visible_message("[user] has [!a_dis?"de":""]activated auto-dismantling.", "You [!a_dis?"de":""]activate auto-dismantling.") return if(istype(W, /obj/item/pipe)) // NOTE - We must check for matter, otherwise the (free) pipe dispenser can be used to get infinite steel. if(!W.matter || W.matter[DEFAULT_WALL_MATERIAL] < pipe_cost * SHEET_MATERIAL_AMOUNT) - user << "\The [W] doesn't contain enough [DEFAULT_WALL_MATERIAL] to recycle." + to_chat(user, "\The [W] doesn't contain enough [DEFAULT_WALL_MATERIAL] to recycle.") else if(metal + pipe_cost > max_metal) - user << "\The [src] is full." + to_chat(user, "\The [src] is full.") else user.drop_from_inventory(W) metal += pipe_cost - usr << "You recycle \the [W]." + to_chat(user, "You recycle \the [W].") qdel(W) return if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL) var/result = load_metal(W) if(isnull(result)) - user << "Unable to load [W] - no metal found." + to_chat(user, "Unable to load [W] - no metal found.") else if(!result) - user << "\The [src] is full." + to_chat(user, "\The [src] is full.") else user.visible_message("[user] has loaded metal into \the [src].", "You load metal into \the [src]") return @@ -116,7 +116,7 @@ /obj/machinery/pipelayer/examine(mob/user) ..() - user << "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated." + to_chat(user, "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated.") /obj/machinery/pipelayer/proc/reset() on = 0 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 2b59a24bd1..07357ceb7b 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -231,11 +231,11 @@ var/list/turret_icons /obj/machinery/porta_turret/proc/isLocked(mob/user) if(ailock && issilicon(user)) - user << "There seems to be a firewall preventing you from accessing this device." + to_chat(user, "There seems to be a firewall preventing you from accessing this device.") return 1 if(locked && !issilicon(user)) - user << "Access denied." + to_chat(user, "Access denied.") return 1 return 0 @@ -271,7 +271,7 @@ var/list/turret_icons settings[++settings.len] = list("category" = "Neutralize All Entities", "setting" = "check_all", "value" = check_all) data["settings"] = settings - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) ui.set_initial_data(data) @@ -284,14 +284,14 @@ var/list/turret_icons /obj/machinery/porta_turret/CanUseTopic(var/mob/user) if(HasController()) - user << "Turrets can only be controlled using the assigned turret controller." + to_chat(user, "Turrets can only be controlled using the assigned turret controller.") return STATUS_CLOSE if(isLocked(user)) return STATUS_CLOSE if(!anchored) - usr << "\The [src] has to be secured first!" + to_chat(user, "\The [src] has to be secured first!") return STATUS_CLOSE return ..() @@ -335,13 +335,13 @@ var/list/turret_icons /obj/machinery/porta_turret/attackby(obj/item/I, mob/user) if(stat & BROKEN) - if(istype(I, /obj/item/weapon/crowbar)) + if(I.is_crowbar()) //If the turret is destroyed, you can remove it with a crowbar to //try and salvage its components - user << "You begin prying the metal coverings off." + to_chat(user, "You begin prying the metal coverings off.") if(do_after(user, 20)) if(can_salvage && prob(70)) - user << "You remove the turret and salvage some components." + to_chat(user, "You remove the turret and salvage some components.") if(installation) var/obj/item/weapon/gun/energy/Gun = new installation(loc) Gun.power_supply.charge = gun_charge @@ -351,18 +351,18 @@ var/list/turret_icons if(prob(50)) new /obj/item/device/assembly/prox_sensor(loc) else - user << "You remove the turret but did not manage to salvage anything." + to_chat(user, "You remove the turret but did not manage to salvage anything.") qdel(src) // qdel - else if((istype(I, /obj/item/weapon/wrench))) + else if(I.is_wrench()) if(enabled || raised) - user << "You cannot unsecure an active turret!" + to_chat(user, "You cannot unsecure an active turret!") return if(wrenching) - user << "Someone is already [anchored ? "un" : ""]securing the turret!" + to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret!") return if(!anchored && isinspace()) - user << "Cannot secure turrets in space!" + to_chat(user, "Cannot secure turrets in space!") return user.visible_message(\ @@ -377,11 +377,11 @@ var/list/turret_icons playsound(loc, I.usesound, 100, 1) anchored = 1 update_icon() - user << "You secure the exterior bolts on the turret." + to_chat(user, "You secure the exterior bolts on the turret.") else if(anchored) playsound(loc, I.usesound, 100, 1) anchored = 0 - user << "You unsecure the exterior bolts on the turret." + to_chat(user, "You unsecure the exterior bolts on the turret.") update_icon() wrenching = 0 @@ -389,10 +389,10 @@ var/list/turret_icons //Behavior lock/unlock mangement if(allowed(user)) locked = !locked - user << "Controls are now [locked ? "locked" : "unlocked"]." + to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") updateUsrDialog() else - user << "Access denied." + to_chat(user, "Access denied.") else //if the turret was attacked with the intention of harming it: @@ -422,7 +422,7 @@ var/list/turret_icons if(!emagged) //Emagging the turret makes it go bonkers and stun everyone. It also makes //the turret shoot much, much faster. - user << "You short out [src]'s threat assessment circuits." + to_chat(user, "You short out [src]'s threat assessment circuits.") visible_message("[src] hums oddly...") emagged = 1 iconholder = 1 @@ -777,16 +777,16 @@ var/list/turret_icons //this is a bit unwieldy but self-explanatory switch(build_step) if(0) //first step - if(istype(I, /obj/item/weapon/wrench) && !anchored) + if(I.is_wrench() && !anchored) playsound(loc, I.usesound, 100, 1) - user << "You secure the external bolts." + to_chat(user, "You secure the external bolts.") anchored = 1 build_step = 1 return - else if(istype(I, /obj/item/weapon/crowbar) && !anchored) + else if(I.is_crowbar() && !anchored) playsound(loc, I.usesound, 75, 1) - user << "You dismantle the turret construction." + to_chat(user, "You dismantle the turret construction.") new /obj/item/stack/material/steel(loc, 5) qdel(src) return @@ -795,24 +795,24 @@ var/list/turret_icons if(istype(I, /obj/item/stack/material) && I.get_material_name() == DEFAULT_WALL_MATERIAL) var/obj/item/stack/M = I if(M.use(2)) - user << "You add some metal armor to the interior frame." + to_chat(user, "You add some metal armor to the interior frame.") build_step = 2 icon_state = "turret_frame2" else - user << "You need two sheets of metal to continue construction." + to_chat(user, "You need two sheets of metal to continue construction.") return - else if(istype(I, /obj/item/weapon/wrench)) + else if(I.is_wrench()) playsound(loc, I.usesound, 75, 1) - user << "You unfasten the external bolts." + to_chat(user, "You unfasten the external bolts.") anchored = 0 build_step = 0 return if(2) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) playsound(loc, I.usesound, 100, 1) - user << "You bolt the metal armor into place." + to_chat(user, "You bolt the metal armor into place.") build_step = 3 return @@ -821,14 +821,14 @@ var/list/turret_icons if(!WT.isOn()) return if(WT.get_fuel() < 5) //uses up 5 fuel. - user << "You need more fuel to complete this task." + to_chat(user, "You need more fuel to complete this task.") return playsound(loc, I.usesound, 50, 1) if(do_after(user, 20 * I.toolspeed)) if(!src || !WT.remove_fuel(5, user)) return build_step = 1 - user << "You remove the turret's interior metal armor." + to_chat(user, "You remove the turret's interior metal armor.") new /obj/item/stack/material/steel(loc, 2) return @@ -839,20 +839,20 @@ var/list/turret_icons return var/obj/item/weapon/gun/energy/E = I //typecasts the item to an energy gun if(!user.unEquip(I)) - user << "\the [I] is stuck to your hand, you cannot put it in \the [src]" + to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") return installation = I.type //installation becomes I.type gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge - user << "You add [I] to the turret." + to_chat(user, "You add [I] to the turret.") target_type = /obj/machinery/porta_turret build_step = 4 qdel(I) //delete the gun :( return - else if(istype(I, /obj/item/weapon/wrench)) + else if(I.is_wrench()) playsound(loc, I.usesound, 100, 1) - user << "You remove the turret's metal armor bolts." + to_chat(user, "You remove the turret's metal armor bolts.") build_step = 2 return @@ -860,19 +860,19 @@ var/list/turret_icons if(isprox(I)) build_step = 5 if(!user.unEquip(I)) - user << "\the [I] is stuck to your hand, you cannot put it in \the [src]" + to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") return - user << "You add the prox sensor to the turret." + to_chat(user, "You add the prox sensor to the turret.") qdel(I) return //attack_hand() removes the gun if(5) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) playsound(loc, I.usesound, 100, 1) build_step = 6 - user << "You close the internal access hatch." + to_chat(user, "You close the internal access hatch.") return //attack_hand() removes the prox sensor @@ -881,16 +881,16 @@ var/list/turret_icons if(istype(I, /obj/item/stack/material) && I.get_material_name() == DEFAULT_WALL_MATERIAL) var/obj/item/stack/M = I if(M.use(2)) - user << "You add some metal armor to the exterior frame." + to_chat(user, "You add some metal armor to the exterior frame.") build_step = 7 else - user << "You need two sheets of metal to continue construction." + to_chat(user, "You need two sheets of metal to continue construction.") return - else if(istype(I, /obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) playsound(loc, I.usesound, 100, 1) build_step = 5 - user << "You open the internal access hatch." + to_chat(user, "You open the internal access hatch.") return if(7) @@ -898,14 +898,14 @@ var/list/turret_icons var/obj/item/weapon/weldingtool/WT = I if(!WT.isOn()) return if(WT.get_fuel() < 5) - user << "You need more fuel to complete this task." + to_chat(user, "You need more fuel to complete this task.") playsound(loc, WT.usesound, 50, 1) if(do_after(user, 30 * WT.toolspeed)) if(!src || !WT.remove_fuel(5, user)) return build_step = 8 - user << "You weld the turret's armor down." + to_chat(user, "You weld the turret's armor down.") //The final step: create a full turret var/obj/machinery/porta_turret/Turret = new target_type(loc) @@ -917,9 +917,9 @@ var/list/turret_icons qdel(src) // qdel - else if(istype(I, /obj/item/weapon/crowbar)) + else if(I.is_crowbar()) playsound(loc, I.usesound, 75, 1) - user << "You pry off the turret's exterior armor." + to_chat(user, "You pry off the turret's exterior armor.") new /obj/item/stack/material/steel(loc, 2) build_step = 6 return @@ -948,10 +948,10 @@ var/list/turret_icons Gun.update_icon() installation = null gun_charge = 0 - user << "You remove [Gun] from the turret frame." + to_chat(user, "You remove [Gun] from the turret frame.") if(5) - user << "You remove the prox sensor from the turret frame." + to_chat(user, "You remove the prox sensor from the turret frame.") new /obj/item/device/assembly/prox_sensor(loc) build_step = 4 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index c6bb798279..bf10bf2ca1 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -8,7 +8,7 @@ obj/machinery/recharger idle_power_usage = 4 active_power_usage = 40000 //40 kW var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_casing/nsfw_batt) //VOREStation Add - NSFW Batteries + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/ammo_casing/nsfw_batt) //VOREStation Add - NSFW Batteries var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered @@ -52,7 +52,7 @@ obj/machinery/recharger G.loc = src charging = G update_icon() - else if(portable && istype(G, /obj/item/weapon/wrench)) + else if(portable && G.is_wrench()) if(charging) to_chat(user, "Remove [charging] first!") return diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 692e76bf5a..f702f3cf25 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -126,7 +126,7 @@ /obj/machinery/recharge_station/examine(mob/user) ..(user) - user << "The charge meter reads: [round(chargepercentage())]%" + to_chat(user, "The charge meter reads: [round(chargepercentage())]%") /obj/machinery/recharge_station/proc/chargepercentage() if(!cell) @@ -292,7 +292,7 @@ if(usr.incapacitated() || !isliving(usr)) return - + go_in(usr) /obj/machinery/recharge_station/ghost_pod_recharger diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 2ad81624a3..5c81cfe31f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -127,7 +127,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() data["msgVerified"] = msgVerified data["announceAuth"] = announceAuth - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410) ui.set_initial_data(data) @@ -247,7 +247,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name else reset_message() - user << "You are not authorized to send announcements." + to_chat(user, "You are not authorized to send announcements.") updateUsrDialog() if(istype(O, /obj/item/weapon/stamp)) if(inoperable(MAINT)) return diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index ec0af28d58..4c447e91f3 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -30,11 +30,11 @@ /obj/machinery/space_heater/examine(mob/user) ..(user) - user << "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"]." + to_chat(user, "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") if(panel_open) - user << "The power cell is [cell ? "installed" : "missing"]." + to_chat(user, "The power cell is [cell ? "installed" : "missing"].") else - user << "The charge meter reads [cell ? round(cell.percent(),1) : 0]%" + to_chat(user, "The charge meter reads [cell ? round(cell.percent(),1) : 0]%") return /obj/machinery/space_heater/powered() @@ -54,7 +54,7 @@ if(istype(I, /obj/item/weapon/cell)) if(panel_open) if(cell) - user << "There is already a power cell inside." + to_chat(user, "There is already a power cell inside.") return else // insert cell @@ -68,9 +68,9 @@ user.visible_message("[user] inserts a power cell into [src].", "You insert the power cell into [src].") power_change() else - user << "The hatch must be open to insert a power cell." + to_chat(user, "The hatch must be open to insert a power cell.") return - else if(istype(I, /obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) panel_open = !panel_open playsound(src, I.usesound, 50, 1) user.visible_message("[user] [panel_open ? "opens" : "closes"] the hatch on the [src].", "You [panel_open ? "open" : "close"] the hatch on the [src].") diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index d55dc0bb3e..41130ad5b9 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -207,14 +207,14 @@ if(!protected) playsound(src.loc, "sparks", 75, 1, -1) - user << "You try to touch the controls but you get zapped. There must be a short circuit somewhere." + to_chat(user, "You try to touch the controls but you get zapped. There must be a short circuit somewhere.") return*/ else //welp, the guy is protected, we can continue if(issuperUV) - user << "You slide the dial back towards \"185nm\"." + to_chat(user, "You slide the dial back towards \"185nm\".") issuperUV = 0 else - user << "You crank the dial all the way up to \"15nm\"." + to_chat(user, "You crank the dial all the way up to \"15nm\".") issuperUV = 1 return @@ -233,10 +233,10 @@ if(!protected) playsound(src.loc, "sparks", 75, 1, -1) - user << "You try to touch the controls but you get zapped. There must be a short circuit somewhere." + to_chat(user, "You try to touch the controls but you get zapped. There must be a short circuit somewhere.") return*/ else - user << "You push the button. The coloured LED next to it changes." + to_chat(user, "You push the button. The coloured LED next to it changes.") safetieson = !safetieson @@ -285,7 +285,7 @@ /obj/machinery/suit_storage_unit/proc/toggle_open(mob/user as mob) if(islocked || isUV) - user << "Unable to open unit." + to_chat(user, "Unable to open unit.") return if(OCCUPANT) eject_occupant(user) @@ -296,7 +296,7 @@ /obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user as mob) if(OCCUPANT && safetieson) - user << "The Unit's safety protocols disallow locking when a biological form is detected inside its compartments." + to_chat(user, "The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.") return if(isopen) return @@ -308,12 +308,12 @@ if(isUV || isopen) //I'm bored of all these sanity checks return if(OCCUPANT && safetieson) - user << "WARNING: Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle." + to_chat(user, "WARNING: Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.") return if(!HELMET && !MASK && !SUIT && !OCCUPANT) //shit's empty yo - user << "Unit storage bays empty. Nothing to disinfect -- Aborting." + to_chat(user, "Unit storage bays empty. Nothing to disinfect -- Aborting.") return - user << "You start the Unit's cauterisation cycle." + to_chat(user, "You start the Unit's cauterisation cycle.") cycletime_left = 20 isUV = 1 if(OCCUPANT && !islocked) @@ -378,10 +378,10 @@ if(OCCUPANT) if(issuperUV) OCCUPANT.take_organ_damage(0,40) - user << "Test. You gave him 40 damage" + to_chat(user, "Test. You gave him 40 damage") else OCCUPANT.take_organ_damage(0,8) - user << "Test. You gave him 8 damage" + to_chat(user, "Test. You gave him 8 damage") return*/ @@ -438,13 +438,13 @@ if(usr.stat != 0) return if(!isopen) - usr << "The unit's doors are shut." + to_chat(usr, "The unit's doors are shut.") return if(!ispowered || isbroken) - usr << "The unit is not operational." + to_chat(usr, "The unit is not operational.") return if((OCCUPANT) || (HELMET) || (SUIT)) - usr << "It's too cluttered inside for you to fit in!" + to_chat(usr, "It's too cluttered inside for you to fit in!") return visible_message("[usr] starts squeezing into the suit storage unit!", 3) if(do_after(usr, 10)) @@ -471,10 +471,10 @@ /obj/machinery/suit_storage_unit/attackby(obj/item/I as obj, mob/user as mob) if(!ispowered) return - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) panelopen = !panelopen playsound(src, I.usesound, 100, 1) - user << text("You [] the unit's maintenance panel.",(panelopen ? "open up" : "close")) + to_chat(user, "You [panelopen ? "open up" : "close"] the unit's maintenance panel.") updateUsrDialog() return if(istype(I, /obj/item/weapon/grab)) @@ -482,13 +482,13 @@ if(!(ismob(G.affecting))) return if(!isopen) - usr << "The unit's doors are shut." + to_chat(user, "The unit's doors are shut.") return if(!ispowered || isbroken) - usr << "The unit is not operational." + to_chat(user, "The unit is not operational.") return if((OCCUPANT) || (HELMET) || (SUIT)) //Unit needs to be absolutely empty - user << "The unit's storage area is too cluttered." + to_chat(user, "The unit's storage area is too cluttered.") return visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3) if(do_after(user, 20)) @@ -514,9 +514,9 @@ return var/obj/item/clothing/suit/space/S = I if(SUIT) - user << "The unit already contains a suit." + to_chat(user, "The unit already contains a suit.") return - user << "You load the [S.name] into the storage compartment." + to_chat(user, "You load the [S.name] into the storage compartment.") user.drop_item() S.loc = src SUIT = S @@ -528,9 +528,9 @@ return var/obj/item/clothing/head/helmet/H = I if(HELMET) - user << "The unit already contains a helmet." + to_chat(user, "The unit already contains a helmet.") return - user << "You load the [H.name] into the storage compartment." + to_chat(user, "You load the [H.name] into the storage compartment.") user.drop_item() H.loc = src HELMET = H @@ -542,9 +542,9 @@ return var/obj/item/clothing/mask/M = I if(MASK) - user << "The unit already contains a mask." + to_chat(user, "The unit already contains a mask.") return - user << "You load the [M.name] into the storage compartment." + to_chat(user, "You load the [M.name] into the storage compartment.") user.drop_item() M.loc = src MASK = M @@ -643,6 +643,20 @@ departments = list("Mercenary", "Charring") can_repair = 1 +/obj/machinery/suit_cycler/exploration + name = "Explorer suit cycler" + model_text = "Exploration" + departments = list("Exploration","Old Exploration") + +/obj/machinery/suit_cycler/exploreration/initialize() + species -= SPECIES_TESHARI + return ..() + +/obj/machinery/suit_cycler/pilot + name = "Pilot suit cycler" + model_text = "Pilot" + departments = list("Pilot Blue","Pilot") + /obj/machinery/suit_cycler/attack_ai(mob/user as mob) return attack_hand(user) @@ -653,7 +667,7 @@ return //Hacking init. - if(istype(I, /obj/item/device/multitool) || istype(I, /obj/item/weapon/wirecutters)) + if(istype(I, /obj/item/device/multitool) || I.is_wirecutter()) if(panel_open) attack_hand(user) return @@ -665,11 +679,11 @@ return if(locked) - user << "The suit cycler is locked." + to_chat(user, "The suit cycler is locked.") return if(contents.len > 0) - user << "There is no room inside the cycler for [G.affecting.name]." + to_chat(user, "There is no room inside the cycler for [G.affecting.name].") return visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", 3) @@ -689,29 +703,29 @@ updateUsrDialog() return - else if(istype(I,/obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) panel_open = !panel_open playsound(src, I.usesound, 50, 1) - user << "You [panel_open ? "open" : "close"] the maintenance panel." + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") updateUsrDialog() return else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig)) if(locked) - user << "The suit cycler is locked." + to_chat(user, "The suit cycler is locked.") return if(helmet) - user << "The cycler already contains a helmet." + to_chat(user, "The cycler already contains a helmet.") return if(I.icon_override == CUSTOM_ITEM_MOB) - user << "You cannot refit a customised voidsuit." + to_chat(user, "You cannot refit a customised voidsuit.") return - user << "You fit \the [I] into the suit cycler." + to_chat(user, "You fit \the [I] into the suit cycler.") user.drop_item() I.loc = src helmet = I @@ -723,18 +737,18 @@ else if(istype(I,/obj/item/clothing/suit/space/void)) if(locked) - user << "The suit cycler is locked." + to_chat(user, "The suit cycler is locked.") return if(suit) - user << "The cycler already contains a voidsuit." + to_chat(user, "The cycler already contains a voidsuit.") return if(I.icon_override == CUSTOM_ITEM_MOB) - user << "You cannot refit a customised voidsuit." + to_chat(user, "You cannot refit a customised voidsuit.") return - user << "You fit \the [I] into the suit cycler." + to_chat(user, "You fit \the [I] into the suit cycler.") user.drop_item() I.loc = src suit = I @@ -747,11 +761,11 @@ /obj/machinery/suit_cycler/emag_act(var/remaining_charges, var/mob/user) if(emagged) - user << "The cycler has already been subverted." + to_chat(user, "The cycler has already been subverted.") return //Clear the access reqs, disable the safeties, and open up all paintjobs. - user << "You run the sequencer across the interface, corrupting the operating protocols." + to_chat(user, "You run the sequencer across the interface, corrupting the operating protocols.") departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Crowd Control","Emergency Medical Response","^%###^%$", "Charring") species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_TAJ, SPECIES_TESHARI, "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Vasilissan", "Rapala") //VORESTATION EDIT @@ -855,14 +869,14 @@ if(allowed(usr)) locked = !locked - usr << "You [locked ? "" : "un"]lock \the [src]." + to_chat(usr, "You [locked ? "" : "un"]lock \the [src].") else - usr << "Access denied." + to_chat(usr, "Access denied.") else if(href_list["begin_decontamination"]) if(safeties && occupant) - usr << "The cycler has detected an occupant. Please remove the occupant before commencing the decontamination cycle." + to_chat(usr, "The cycler has detected an occupant. Please remove the occupant before commencing the decontamination cycle.") return active = 1 @@ -1106,6 +1120,51 @@ suit.icon_state = "rig-firebug" suit.item_state_slots[slot_r_hand_str] = "rig-firebug" suit.item_state_slots[slot_l_hand_str] = "rig-firebug" + if("Exploration") + if(helmet) + helmet.name = "exploration voidsuit helmet" + helmet.icon_state = "helm_explorer" + helmet.item_state = "helm_explorer" + if(suit) + suit.name = "exploration voidsuit" + suit.icon_state = "void_explorer" + suit.item_state = "void_explorer" + suit.item_state_slots[slot_r_hand_str] = "wiz_voidsuit" + suit.item_state_slots[slot_l_hand_str] = "wiz_voidsuit" + if("Old Exploration") + if(helmet) + helmet.name = "exploration voidsuit helmet" + helmet.icon_state = "helm_explorer2" + helmet.item_state = "helm_explorer2" + if(suit) + suit.name = "exploration voidsuit" + suit.icon_state = "void_explorer2" + suit.item_state = "void_explorer2" + suit.item_state_slots[slot_r_hand_str] = "wiz_voidsuit" + suit.item_state_slots[slot_l_hand_str] = "wiz_voidsuit" + if("Pilot") + if(helmet) + helmet.name = "pilot voidsuit helmet" + helmet.icon_state = "rig0_pilot" + helmet.item_state = "pilot_helm" + if(suit) + suit.name = "pilot voidsuit" + suit.icon_state = "rig-pilot" + suit.item_state = "rig-pilot" + suit.item_state_slots[slot_r_hand_str] = "sec_voidsuitTG" + suit.item_state_slots[slot_l_hand_str] = "sec_voidsuitTG" + if("Pilot Blue") + if(helmet) + helmet.name = "pilot voidsuit helmet" + helmet.icon_state = "rig0_pilot2" + helmet.item_state = "pilot_helm2" + if(suit) + suit.name = "pilot voidsuit" + suit.icon_state = "rig-pilot2" + suit.item_state = "rig-pilot2" + suit.item_state_slots[slot_r_hand_str] = "sec_voidsuitTG" + suit.item_state_slots[slot_l_hand_str] = "sec_voidsuitTG" + if(helmet) helmet.name = "refitted [helmet.name]" if(suit) suit.name = "refitted [suit.name]" diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 0f58bd9a48..9f228be5d4 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -45,7 +45,7 @@ drop_type = "supermatter" /obj/machinery/power/supply_beacon/attackby(var/obj/item/weapon/W, var/mob/user) - if(!use_power && istype(W, /obj/item/weapon/wrench)) + if(!use_power && W.is_wrench()) if(!anchored && !connect_to_network()) to_chat(user, "This device must be placed over an exposed cable.") return diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 5befc59495..2c59ec8b20 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -56,7 +56,7 @@ return if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M - M << "You have joined the ranks of the Syndicate and become a traitor to the station!" + to_chat(N, "You have joined the ranks of the Syndicate and become a traitor to the station!") traitors.add_antagonist(N.mind) traitors.equip(N) message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") @@ -87,7 +87,8 @@ /obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null) if(surplus() < 1500) - if(user) user << "The connected wire doesn't have enough current." + if(user) + to_chat(user, "The connected wire doesn't have enough current.") return for(var/obj/singularity/singulo in all_singularities) if(singulo.z == z) @@ -96,7 +97,7 @@ active = 1 START_MACHINE_PROCESSING(src) if(user) - user << "You activate the beacon." + to_chat(user, "You activate the beacon.") /obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) for(var/obj/singularity/singulo in all_singularities) @@ -105,7 +106,7 @@ icon_state = "[icontype]0" active = 0 if(user) - user << "You deactivate the beacon." + to_chat(user, "You deactivate the beacon.") /obj/machinery/power/singularity_beacon/attack_ai(mob/user as mob) return @@ -114,27 +115,27 @@ if(anchored) return active ? Deactivate(user) : Activate(user) else - user << "You need to screw the beacon to the floor first!" + to_chat(user, "You need to screw the beacon to the floor first!") return /obj/machinery/power/singularity_beacon/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(active) - user << "You need to deactivate the beacon first!" + to_chat(user, "You need to deactivate the beacon first!") return if(anchored) anchored = 0 - user << "You unscrew the beacon from the floor." + to_chat(user, "You unscrew the beacon from the floor.") playsound(src, W.usesound, 50, 1) disconnect_from_network() return else if(!connect_to_network()) - user << "This device must be placed over an exposed cable." + to_chat(user, "This device must be placed over an exposed cable.") return anchored = 1 - user << "You screw the beacon to the floor and attach the cable." + to_chat(user, "You screw the beacon to the floor and attach the cable.") playsound(src, W.usesound, 50, 1) return ..() diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 208b9d51e8..331f5644d9 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -28,35 +28,35 @@ if (integrity < 100) //Damaged, let's repair! if (T.use(1)) integrity = between(0, integrity + rand(10,20), 100) - usr << "You apply the Nanopaste to [src], repairing some of the damage." + to_chat(usr, "You apply the Nanopaste to [src], repairing some of the damage.") else - usr << "This machine is already in perfect condition." + to_chat(usr, "This machine is already in perfect condition.") return switch(construct_op) if(0) - if(istype(P, /obj/item/weapon/screwdriver)) - user << "You unfasten the bolts." + if(P.is_screwdriver()) + to_chat(user, "You unfasten the bolts.") playsound(src.loc, P.usesound, 50, 1) construct_op ++ if(1) - if(istype(P, /obj/item/weapon/screwdriver)) - user << "You fasten the bolts." + if(P.is_screwdriver()) + to_chat(user, "You fasten the bolts.") playsound(src.loc, P.usesound, 50, 1) construct_op -- - if(istype(P, /obj/item/weapon/wrench)) - user << "You dislodge the external plating." + if(P.is_wrench()) + to_chat(user, "You dislodge the external plating.") playsound(src.loc, P.usesound, 75, 1) construct_op ++ if(2) - if(istype(P, /obj/item/weapon/wrench)) - user << "You secure the external plating." + if(P.is_wrench()) + to_chat(user, "You secure the external plating.") playsound(src.loc, P.usesound, 75, 1) construct_op -- - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) playsound(src.loc, P.usesound, 50, 1) - user << "You remove the cables." + to_chat(user, "You remove the cables.") construct_op ++ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc ) A.amount = 5 @@ -65,16 +65,16 @@ if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/A = P if (A.use(5)) - user << "You insert the cables." + to_chat(user, "You insert the cables.") construct_op-- stat &= ~BROKEN // the machine's not borked anymore! else - user << "You need five coils of wire for this." - if(istype(P, /obj/item/weapon/crowbar)) - user << "You begin prying out the circuit board other components..." + to_chat(user, "You need five coils of wire for this.") + if(P.is_crowbar()) + to_chat(user, "You begin prying out the circuit board other components...") playsound(src.loc, P.usesound, 50, 1) if(do_after(user,60 * P.toolspeed)) - user << "You finish prying out the components." + to_chat(user, "You finish prying out the components.") // Drop all the component stuff if(contents.len > 0) @@ -172,7 +172,7 @@ dat += "" temp = "" - user << browse(dat, "window=tcommachine;size=520x500;can_resize=0") + to_chat(user, browse(dat, "window=tcommachine;size=520x500;can_resize=0")) onclose(user, "dormitory") diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index fa75864b01..d99795e6b3 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -137,7 +137,7 @@ data["settings"] = settings - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) ui.set_initial_data(data) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 87fbc4dcfd..66cd186fc4 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -173,13 +173,13 @@ vend(currently_vending, usr) return else if(handled) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return // don't smack that machine with your 2 thalers if(I || istype(W, /obj/item/weapon/spacecash)) attack_hand(user) return - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") playsound(src, W.usesound, 50, 1) @@ -187,9 +187,9 @@ if(panel_open) overlays += image(icon, "[initial(icon_state)]-panel") - nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI + GLOB.nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI return - else if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters)) + else if(istype(W, /obj/item/device/multitool) || W.is_wirecutter()) if(panel_open) attack_hand(user) return @@ -199,9 +199,9 @@ coin = W categories |= CAT_COIN to_chat(user, "You insert \the [W] into \the [src].") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) playsound(src, W.usesound, 100, 1) if(anchored) user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") @@ -403,7 +403,7 @@ else data["panel"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "vending_machine.tmpl", name, 440, 600) ui.set_initial_data(data) @@ -463,7 +463,7 @@ shut_up = !shut_up add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user) if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH @@ -474,7 +474,7 @@ vend_ready = 0 //One thing at a time!! status_message = "Vending..." status_error = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(R.category & CAT_COIN) if(!coin) @@ -516,7 +516,8 @@ status_error = 0 vend_ready = 1 currently_vending = null - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) + return 1 /obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) @@ -566,12 +567,12 @@ if(!user.unEquip(W)) return - user << "You insert \the [W] in the product receptor." + to_chat(user, "You insert \the [W] in the product receptor.") R.add_product(W) if(has_logs) do_logging(R, user) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/vending/process() if(stat & (BROKEN|NOPOWER)) @@ -736,7 +737,7 @@ /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, - /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) + /obj/item/weapon/tool/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" @@ -1025,8 +1026,8 @@ icon_state = "tool" icon_deny = "tool-deny" //req_access = list(access_maint_tunnels) //Maintenance access - products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5, - /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5, + products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/tool/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/tool/wirecutters = 5, + /obj/item/weapon/tool/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/tool/screwdriver = 5, /obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3, /obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3) contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2,) @@ -1064,8 +1065,8 @@ icon_deny = "engi-deny" req_access = list(access_engine_equip) products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4, - /obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/screwdriver = 12, - /obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12, + /obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/tool/screwdriver = 12, + /obj/item/weapon/tool/crowbar = 12,/obj/item/weapon/tool/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/tool/wrench = 12,/obj/item/device/t_scanner = 12, /obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8, /obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5, /obj/item/weapon/stock_parts/matter_bin = 5,/obj/item/weapon/stock_parts/manipulator = 5,/obj/item/weapon/stock_parts/console_screen = 5) @@ -1084,7 +1085,7 @@ products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/flash = 4, /obj/item/weapon/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3, /obj/item/weapon/surgical/scalpel = 2,/obj/item/weapon/surgical/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5, - /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) + /obj/item/weapon/tool/screwdriver = 5,/obj/item/weapon/tool/crowbar = 5) //everything after the power cell had no amounts, I improvised. -Sayu req_log_access = access_rd has_logs = 1 diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index 0d3c3bcd2c..dd75e2d8e9 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -18,7 +18,7 @@ frame_types_wall = construction_frame_wall /obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) new refund_type(get_turf(src.loc), refund_amt) qdel(src) return diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 309c9cf2a4..672b0a2c4e 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -90,7 +90,7 @@ return if(default_unfasten_wrench(user, W, 40)) return - /*if(istype(W,/obj/item/weapon/screwdriver)) + /*if(W.is_screwdriver()) panel = !panel user << "You [panel ? "open" : "close"] the [src]'s maintenance panel"*/ if(istype(W,/obj/item/weapon/pen/crayon) || istype(W,/obj/item/weapon/stamp)) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 5d692b39b9..54e2b9c87b 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -10,6 +10,13 @@ damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8) var/am = "d3c2fbcadca903a41161ccc9df9cf948" + max_hull_equip = 2 + max_weapon_equip = 2 + max_utility_equip = 1 + max_universal_equip = 1 + max_special_equip = 1 + cargo_capacity = 1 + /* /obj/mecha/combat/range_action(target as obj|mob|turf) if(internal_damage&MECHA_INT_CONTROL_LOST) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 2d3034573a..7b9eb67691 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -6,6 +6,7 @@ step_in = 4 dir_in = 1 //Facing North. health = 400 + maxhealth = 400 deflect_chance = 20 damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8) max_temperature = 30000 @@ -15,6 +16,12 @@ var/defence_deflect = 35 wreckage = /obj/effect/decal/mecha_wreckage/durand + max_hull_equip = 2 + max_weapon_equip = 1 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + /* /obj/mecha/combat/durand/New() ..() diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm index cc5dacebc3..100bae9f19 100644 --- a/code/game/mecha/combat/gorilla.dm +++ b/code/game/mecha/combat/gorilla.dm @@ -64,6 +64,7 @@ pixel_x = -16 step_in = 10 health = 5000 + maxhealth = 5000 opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1. deflect_chance = 50 damage_absorption = list("brute"=0.1,"fire"=0.8,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed. @@ -79,6 +80,12 @@ internal_damage_threshold = 25 force = 60 max_equip = 5 +//This will (Should) never be in the hands of players. If it is, the one who inflicted this monster upon the server can edit these vars to not be insane. + max_hull_equip = 5 + max_weapon_equip = 5 + max_utility_equip = 5 + max_universal_equip = 5 + max_special_equip = 2 /obj/mecha/combat/gorilla/New() ..() diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index eadc96aadd..591351032b 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -6,6 +6,7 @@ step_in = 3 dir_in = 1 //Facing North. health = 300 + maxhealth = 300 deflect_chance = 15 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) max_temperature = 25000 @@ -16,12 +17,19 @@ internal_damage_threshold = 35 max_equip = 3 + max_hull_equip = 1 + max_weapon_equip = 2 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + /obj/mecha/combat/gygax/dark desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech." name = "Dark Gygax" icon_state = "darkgygax" initial_icon = "darkgygax" health = 400 + maxhealth = 400 deflect_chance = 25 damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8) max_temperature = 45000 @@ -30,11 +38,17 @@ max_equip = 4 step_energy_drain = 5 + max_hull_equip = 1 + max_weapon_equip = 2 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 2 + /obj/mecha/combat/gygax/dark/New() ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/teleporter ME.attach(src) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 5b456e0900..3236600309 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -5,6 +5,7 @@ initial_icon = "marauder" step_in = 5 health = 500 + maxhealth = 500 deflect_chance = 25 damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7) max_temperature = 60000 @@ -22,6 +23,12 @@ force = 45 max_equip = 4 + max_hull_equip = 3 + max_weapon_equip = 3 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 + /obj/mecha/combat/marauder/seraph desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." name = "Seraph" @@ -62,7 +69,7 @@ var/obj/item/mecha_parts/mecha_equipment/ME if(equipment.len)//Now to remove it and equip anew. for(ME in equipment) - equipment -= ME + ME.detach() qdel(ME) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index b98f4697e5..77ce768fc8 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -7,6 +7,7 @@ dir_in = 1 //Facing North. step_energy_drain = 3 health = 200 + maxhealth = 200 deflect_chance = 30 damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) max_temperature = 25000 @@ -20,6 +21,11 @@ var/phasing_energy_drain = 200 max_equip = 4 + max_hull_equip = 3 + max_weapon_equip = 3 + max_utility_equip = 3 + max_universal_equip = 3 + max_special_equip = 4 /obj/mecha/combat/phazon/New() ..() diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index db1cb3d004..fec8c18e1d 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -1,5 +1,9 @@ //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. +#define EQUIP_HULL 1 +#define EQUIP_WEAPON 2 +#define EQUIP_UTILITY 3 +#define EQUIP_SPECIAL 4 /obj/item/mecha_parts/mecha_equipment name = "mecha equipment" @@ -14,7 +18,8 @@ var/range = MELEE //bitflags var/salvageable = 1 var/required_type = /obj/mecha //may be either a type or a list of allowed types - + var/equip_type = null //mechaequip2 + var/allow_duplicate = FALSE /obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1) sleep(equip_cooldown) @@ -43,6 +48,20 @@ /obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity? if(chassis) + if(equip_type) + if(equip_type == EQUIP_HULL) + chassis.hull_equipment -= src + listclearnulls(chassis.hull_equipment) + if(equip_type == EQUIP_WEAPON) + chassis.weapon_equipment -= src + listclearnulls(chassis.weapon_equipment) + if(equip_type == EQUIP_UTILITY) + chassis.utility_equipment -= src + listclearnulls(chassis.utility_equipment) + if(equip_type == EQUIP_SPECIAL) + chassis.special_equipment -= src + listclearnulls(chassis.special_equipment) + chassis.universal_equipment -= src chassis.equipment -= src listclearnulls(chassis.equipment) if(chassis.selected == src) @@ -85,23 +104,57 @@ return 0 return 1 +/obj/item/mecha_parts/mecha_equipment/proc/handle_movement_action() //Any modules that have special effects or needs when taking a step or floating through space. + return + /obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) return /obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj) - if(M.equipment.len >= M.max_equip) - return 0 - - if (ispath(required_type)) + //if(M.equipment.len >= M.max_equip) + // return 0 + if(!allow_duplicate) + for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment) //Exact duplicate components aren't allowed. + if(ME.type == src.type) + return 0 + if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip) + return 1 + if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip) + return 1 + if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip) + return 1 + if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip) + return 1 + if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip) //The exosuit needs to be military grade to actually have a universal slot capable of accepting a true weapon. + if(equip_type == EQUIP_WEAPON && !istype(M, /obj/mecha/combat)) + return 0 + return 1 + /*if (ispath(required_type)) return istype(M, required_type) for (var/path in required_type) if (istype(M, path)) return 1 - + */ return 0 /obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj) + //M.equipment += src + var/has_equipped = 0 + if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip && !has_equipped) + M.hull_equipment += src + has_equipped = 1 + if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip && !has_equipped) + M.weapon_equipment += src + has_equipped = 1 + if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip && !has_equipped) + M.utility_equipment += src + has_equipped = 1 + if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip && !has_equipped) + M.special_equipment += src + has_equipped = 1 + if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip && !has_equipped) + M.universal_equipment += src M.equipment += src chassis = M src.loc = M @@ -115,6 +168,17 @@ moveto = moveto || get_turf(chassis) if(src.Move(moveto)) chassis.equipment -= src + chassis.universal_equipment -= src + if(equip_type) + switch(equip_type) + if(EQUIP_HULL) + chassis.hull_equipment -= src + if(EQUIP_WEAPON) + chassis.weapon_equipment -= src + if(EQUIP_UTILITY) + chassis.utility_equipment -= src + if(EQUIP_SPECIAL) + chassis.special_equipment -= src if(chassis.selected == src) chassis.selected = null update_chassis_page() diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index d33570cd9c..2fb2538cfb 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -12,197 +12,198 @@ var/inject_amount = 5 required_type = /obj/mecha/medical salvageable = 0 + allow_duplicate = TRUE - New() - ..() - pr_mech_sleeper = new /datum/global_iterator/mech_sleeper(list(src),0) - pr_mech_sleeper.set_delay(equip_cooldown) +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/New() + ..() + pr_mech_sleeper = new /datum/global_iterator/mech_sleeper(list(src),0) + pr_mech_sleeper.set_delay(equip_cooldown) + return + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Destroy() + qdel(pr_mech_sleeper) + for(var/atom/movable/AM in src) + AM.forceMove(get_turf(src)) + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Exit(atom/movable/O) + return 0 + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/action(var/mob/living/carbon/human/target) + if(!action_checks(target)) return - - Destroy() - qdel(pr_mech_sleeper) - for(var/atom/movable/AM in src) - AM.forceMove(get_turf(src)) - return ..() - - Exit(atom/movable/O) - return 0 - - action(var/mob/living/carbon/human/target) - if(!action_checks(target)) + if(!istype(target)) + return + if(target.buckled) + occupant_message("[target] will not fit into the sleeper because they are buckled to [target.buckled].") + return + if(occupant) + occupant_message("The sleeper is already occupied") + return + for(var/mob/living/simple_animal/slime/M in range(1,target)) + if(M.victim == target) + occupant_message("[target] will not fit into the sleeper because they have a slime latched onto their head.") return - if(!istype(target)) - return - if(target.buckled) - occupant_message("[target] will not fit into the sleeper because they are buckled to [target.buckled].") + occupant_message("You start putting [target] into [src].") + chassis.visible_message("[chassis] starts putting [target] into the [src].") + var/C = chassis.loc + var/T = target.loc + if(do_after_cooldown(target)) + if(chassis.loc!=C || target.loc!=T) return if(occupant) - occupant_message("The sleeper is already occupied") + occupant_message("The sleeper is already occupied!") return - for(var/mob/living/simple_animal/slime/M in range(1,target)) - if(M.victim == target) - occupant_message("[target] will not fit into the sleeper because they have a slime latched onto their head.") - return - occupant_message("You start putting [target] into [src].") - chassis.visible_message("[chassis] starts putting [target] into the [src].") - var/C = chassis.loc - var/T = target.loc - if(do_after_cooldown(target)) - if(chassis.loc!=C || target.loc!=T) - return - if(occupant) - occupant_message("The sleeper is already occupied!") - return - target.forceMove(src) - occupant = target - target.reset_view(src) - occupant.Stasis(3) - /* - if(target.client) - target.client.perspective = EYE_PERSPECTIVE - target.client.eye = chassis - */ - set_ready_state(0) - pr_mech_sleeper.start() - occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") - chassis.visible_message("[chassis] loads [target] into [src].") - log_message("[target] loaded. Life support functions engaged.") - return - - proc/go_out() - if(!occupant) - return - occupant.forceMove(get_turf(src)) - occupant_message("[occupant] ejected. Life support functions disabled.") - log_message("[occupant] ejected. Life support functions disabled.") - occupant.reset_view() + target.forceMove(src) + occupant = target + target.reset_view(src) + occupant.Stasis(3) /* - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE + if(target.client) + target.client.perspective = EYE_PERSPECTIVE + target.client.eye = chassis */ - occupant.Stasis(0) - occupant = null - pr_mech_sleeper.stop() - set_ready_state(1) - return + set_ready_state(0) + pr_mech_sleeper.start() + occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") + chassis.visible_message("[chassis] loads [target] into [src].") + log_message("[target] loaded. Life support functions engaged.") + return - detach() +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/go_out() + if(!occupant) + return + occupant.forceMove(get_turf(src)) + occupant_message("[occupant] ejected. Life support functions disabled.") + log_message("[occupant] ejected. Life support functions disabled.") + occupant.reset_view() + /* + if(occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + */ + occupant.Stasis(0) + occupant = null + pr_mech_sleeper.stop() + set_ready_state(1) + return + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/detach() + if(occupant) + occupant_message("Unable to detach [src] - equipment occupied.") + return + pr_mech_sleeper.stop() + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/get_equip_info() + var/output = ..() + if(output) + var/temp = "" if(occupant) - occupant_message("Unable to detach [src] - equipment occupied.") - return - pr_mech_sleeper.stop() - return ..() + temp = "
\[Occupant: [occupant] (Health: [occupant.health]%)\]
View stats|Eject" + return "[output] [temp]" + return - get_equip_info() - var/output = ..() - if(output) - var/temp = "" - if(occupant) - temp = "
\[Occupant: [occupant] (Health: [occupant.health]%)\]
View stats|Eject" - return "[output] [temp]" +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Topic(href,href_list) + ..() + var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list) + if(top_filter.get("eject")) + go_out() + if(top_filter.get("view_stats")) + chassis.occupant << browse(get_occupant_stats(),"window=msleeper") + onclose(chassis.occupant, "msleeper") return + if(top_filter.get("inject")) + inject_reagent(top_filter.getType("inject",/datum/reagent),top_filter.getObj("source")) + return - Topic(href,href_list) - ..() - var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list) - if(top_filter.get("eject")) - go_out() - if(top_filter.get("view_stats")) - chassis.occupant << browse(get_occupant_stats(),"window=msleeper") - onclose(chassis.occupant, "msleeper") - return - if(top_filter.get("inject")) - inject_reagent(top_filter.getType("inject",/datum/reagent),top_filter.getObj("source")) +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_stats() + if(!occupant) return + return {" + + [occupant] statistics + + + + +

Health statistics

+
+ [get_occupant_dam()] +
+

Reagents in bloodstream

+
+ [get_occupant_reagents()] +
+
+ [get_available_reagents()] +
+ + "} - proc/get_occupant_stats() - if(!occupant) - return - return {" - - [occupant] statistics - - - - -

Health statistics

-
- [get_occupant_dam()] -
-

Reagents in bloodstream

-
- [get_occupant_reagents()] -
-
- [get_available_reagents()] -
- - "} - - proc/get_occupant_dam() - var/t1 - switch(occupant.stat) - if(0) - t1 = "Conscious" - if(1) - t1 = "Unconscious" - if(2) - t1 = "*dead*" - else - t1 = "Unknown" - return {"Health: [occupant.health]% ([t1])
- Core Temperature: [src.occupant.bodytemperature-T0C]°C ([src.occupant.bodytemperature*1.8-459.67]°F)
- Brute Damage: [occupant.getBruteLoss()]%
- Respiratory Damage: [occupant.getOxyLoss()]%
- Toxin Content: [occupant.getToxLoss()]%
- Burn Severity: [occupant.getFireLoss()]%
- "} - - proc/get_occupant_reagents() - if(occupant.reagents) - for(var/datum/reagent/R in occupant.reagents.reagent_list) - if(R.volume > 0) - . += "[R]: [round(R.volume,0.01)]
" - return . || "None" - - proc/get_available_reagents() - var/output - var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun) in chassis - if(SG && SG.reagents && islist(SG.reagents.reagent_list)) - for(var/datum/reagent/R in SG.reagents.reagent_list) - if(R.volume > 0) - output += "Inject [R.name]
" - return output - - - proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG) - if(!R || !occupant || !SG || !(SG in chassis.equipment)) - return 0 - var/to_inject = min(R.volume, inject_amount) - if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject > inject_amount*4) - occupant_message("Sleeper safeties prohibit you from injecting more than [inject_amount*4] units of [R.name].") +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_dam() + var/t1 + switch(occupant.stat) + if(0) + t1 = "Conscious" + if(1) + t1 = "Unconscious" + if(2) + t1 = "*dead*" else - occupant_message("Injecting [occupant] with [to_inject] units of [R.name].") - log_message("Injecting [occupant] with [to_inject] units of [R.name].") - //SG.reagents.trans_id_to(occupant,R.id,to_inject) - SG.reagents.remove_reagent(R.id,to_inject) - occupant.reagents.add_reagent(R.id,to_inject) - update_equip_info() - return + t1 = "Unknown" + return {"Health: [occupant.health]% ([t1])
+ Core Temperature: [src.occupant.bodytemperature-T0C]°C ([src.occupant.bodytemperature*1.8-459.67]°F)
+ Brute Damage: [occupant.getBruteLoss()]%
+ Respiratory Damage: [occupant.getOxyLoss()]%
+ Toxin Content: [occupant.getToxLoss()]%
+ Burn Severity: [occupant.getFireLoss()]%
+ "} - update_equip_info() - if(..()) - send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_occupant_dam()) - send_byjax(chassis.occupant,"msleeper.browser","reagents",get_occupant_reagents()) - send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) - return 1 - return +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_reagents() + if(occupant.reagents) + for(var/datum/reagent/R in occupant.reagents.reagent_list) + if(R.volume > 0) + . += "[R]: [round(R.volume,0.01)]
" + return . || "None" + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_available_reagents() + var/output + var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun) in chassis + if(SG && SG.reagents && islist(SG.reagents.reagent_list)) + for(var/datum/reagent/R in SG.reagents.reagent_list) + if(R.volume > 0) + output += "Inject [R.name]
" + return output + + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG) + if(!R || !occupant || !SG || !(SG in chassis.equipment)) + return 0 + var/to_inject = min(R.volume, inject_amount) + if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject > inject_amount*4) + occupant_message("Sleeper safeties prohibit you from injecting more than [inject_amount*4] units of [R.name].") + else + occupant_message("Injecting [occupant] with [to_inject] units of [R.name].") + log_message("Injecting [occupant] with [to_inject] units of [R.name].") + //SG.reagents.trans_id_to(occupant,R.id,to_inject) + SG.reagents.remove_reagent(R.id,to_inject) + occupant.reagents.add_reagent(R.id,to_inject) + update_equip_info() + return + +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/update_equip_info() + if(..()) + send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_occupant_dam()) + send_byjax(chassis.occupant,"msleeper.browser","reagents",get_occupant_reagents()) + send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) + return 1 + return /obj/item/mecha_parts/mecha_equipment/tool/sleeper/verb/eject() set name = "Sleeper Eject" @@ -219,32 +220,32 @@ /datum/global_iterator/mech_sleeper - process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S) - if(!S.chassis) - S.set_ready_state(1) - return stop() - if(!S.chassis.has_charge(S.energy_drain)) - S.set_ready_state(1) - S.log_message("Deactivated.") - S.occupant_message("[src] deactivated - no power.") - return stop() - var/mob/living/carbon/M = S.occupant - if(!M) - return - if(M.health > 0) - M.adjustOxyLoss(-1) - M.updatehealth() - M.AdjustStunned(-4) - M.AdjustWeakened(-4) - M.AdjustStunned(-4) - M.Paralyse(2) - M.Weaken(2) - M.Stun(2) - if(M.reagents.get_reagent_amount("inaprovaline") < 5) - M.reagents.add_reagent("inaprovaline", 5) - S.chassis.use_power(S.energy_drain) - S.update_equip_info() +/datum/global_iterator/mech_sleeper/process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S) + if(!S.chassis) + S.set_ready_state(1) + return stop() + if(!S.chassis.has_charge(S.energy_drain)) + S.set_ready_state(1) + S.log_message("Deactivated.") + S.occupant_message("[src] deactivated - no power.") + return stop() + var/mob/living/carbon/M = S.occupant + if(!M) return + if(M.health > 0) + M.adjustOxyLoss(-1) + M.updatehealth() + M.AdjustStunned(-4) + M.AdjustWeakened(-4) + M.AdjustStunned(-4) + M.Paralyse(2) + M.Weaken(2) + M.Stun(2) + if(M.reagents.get_reagent_amount("inaprovaline") < 5) + M.reagents.add_reagent("inaprovaline", 5) + S.chassis.use_power(S.energy_drain) + S.update_equip_info() + return /obj/item/mecha_parts/mecha_equipment/tool/cable_layer @@ -257,133 +258,133 @@ var/max_cable = 1000 required_type = /obj/mecha/working - New() - cable = new(src) - cable.amount = 0 - ..() +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() + cable = new(src) + cable.amount = 0 + ..() - attach() - ..() - event = chassis.events.addEvent("onMove",src,"layCable") +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach() + ..() + event = chassis.events.addEvent("onMove",src,"layCable") + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target) + if(!action_checks(target)) return + var/result = load_cable(target) + var/message + if(isnull(result)) + message = "Unable to load [target] - no cable found." + else if(!result) + message = "Reel is full." + else + message = "[result] meters of cable successfully loaded." + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + occupant_message(message) + return - detach() - chassis.events.clearEvent("onMove",event) - return ..() - - destroy() - chassis.events.clearEvent("onMove",event) - return ..() - - action(var/obj/item/stack/cable_coil/target) - if(!action_checks(target)) - return - var/result = load_cable(target) - var/message - if(isnull(result)) - message = "Unable to load [target] - no cable found." - else if(!result) - message = "Reel is full." +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list) + ..() + if(href_list["toggle"]) + set_ready_state(!equip_ready) + occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") + log_message("[equip_ready?"Dea":"A"]ctivated.") + return + if(href_list["cut"]) + if(cable && cable.amount) + var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + if(m) + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) + CC.amount = m else - message = "[result] meters of cable successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) + occupant_message("There's no more cable on the reel.") + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() + var/output = ..() + if(output) + return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) + if(istype(CC) && CC.amount) + var/cur_amount = cable? cable.amount : 0 + var/to_load = max(max_cable - cur_amount,0) + if(to_load) + to_load = min(CC.amount, to_load) + if(!cable) + cable = new(src) + cable.amount = 0 + cable.amount += to_load + CC.use(to_load) + return to_load + else + return 0 + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) + if(!cable || cable.amount<1) + set_ready_state(1) + occupant_message("Cable depleted, [src] deactivated.") + log_message("Cable depleted, [src] deactivated.") return - - Topic(href,href_list) - ..() - if(href_list["toggle"]) - set_ready_state(!equip_ready) - occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") - log_message("[equip_ready?"Dea":"A"]ctivated.") - return - if(href_list["cut"]) - if(cable && cable.amount) - var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - if(m) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) - CC.amount = m - else - occupant_message("There's no more cable on the reel.") + if(cable.amount < amount) + occupant_message("No enough cable to finish the task.") return + cable.use(amount) + update_equip_info() + return 1 - get_equip_info() - var/output = ..() - if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" - return +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset() + last_piece = null - proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 - var/to_load = max(max_cable - cur_amount,0) - if(to_load) - to_load = min(CC.amount, to_load) - if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load - CC.use(to_load) - return to_load - else - return 0 - return +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!T.is_plating()) + T.make_plating(!(T.broken || T.burnt)) + return new_turf.is_plating() - proc/use_cable(amount) - if(!cable || cable.amount<1) - set_ready_state(1) - occupant_message("Cable depleted, [src] deactivated.") - log_message("Cable depleted, [src] deactivated.") - return - if(cable.amount < amount) - occupant_message("No enough cable to finish the task.") - return - cable.use(amount) - update_equip_info() - return 1 - - proc/reset() - last_piece = null - - proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!T.is_plating()) - T.make_plating(!(T.broken || T.burnt)) - return new_turf.is_plating() - - proc/layCable(var/turf/new_turf) - if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf) + if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) + return reset() + var/fdirn = turn(chassis.dir,180) + for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) return reset() - var/fdirn = turn(chassis.dir,180) - for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - return reset() - if(!use_cable(1)) - return reset() - var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") - NC.d1 = 0 - NC.d2 = fdirn - NC.update_icon() + if(!use_cable(1)) + return reset() + var/obj/structure/cable/NC = new(new_turf) + NC.cableColor("red") + NC.d1 = 0 + NC.d2 = fdirn + NC.update_icon() - var/datum/powernet/PN - if(last_piece && last_piece.d2 != chassis.dir) - last_piece.d1 = min(last_piece.d2, chassis.dir) - last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.update_icon() - PN = last_piece.powernet + var/datum/powernet/PN + if(last_piece && last_piece.d2 != chassis.dir) + last_piece.d1 = min(last_piece.d2, chassis.dir) + last_piece.d2 = max(last_piece.d2, chassis.dir) + last_piece.update_icon() + PN = last_piece.powernet - if(!PN) - PN = new() - PN.add_cable(NC) - NC.mergeConnectedNetworks(NC.d2) + if(!PN) + PN = new() + PN.add_cable(NC) + NC.mergeConnectedNetworks(NC.d2) - //NC.mergeConnectedNetworksOnTurf() - last_piece = NC - return 1 + //NC.mergeConnectedNetworksOnTurf() + last_piece = NC + return 1 /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun name = "syringe gun" @@ -697,16 +698,16 @@ /datum/global_iterator/mech_synth delay = 100 - process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S) - if(!S.chassis) - return stop() - var/energy_drain = S.energy_drain*10 - if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume || !S.chassis.has_charge(energy_drain)) - S.occupant_message("Reagent processing stopped.") - S.log_message("Reagent processing stopped.") - return stop() - var/amount = S.synth_speed / S.processed_reagents.len - for(var/reagent in S.processed_reagents) - S.reagents.add_reagent(reagent,amount) - S.chassis.use_power(energy_drain) - return 1 +/datum/global_iterator/mech_synth/process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S) + if(!S.chassis) + return stop() + var/energy_drain = S.energy_drain*10 + if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume || !S.chassis.has_charge(energy_drain)) + S.occupant_message("Reagent processing stopped.") + S.log_message("Reagent processing stopped.") + return stop() + var/amount = S.synth_speed / S.processed_reagents.len + for(var/reagent in S.processed_reagents) + S.reagents.add_reagent(reagent,amount) + S.chassis.use_power(energy_drain) + return 1 diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 164140583f..dd4472282c 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1,3 +1,6 @@ +/obj/item/mecha_parts/mecha_equipment/tool + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp name = "hydraulic clamp" icon_state = "mecha_clamp" @@ -7,66 +10,66 @@ var/obj/mecha/working/ripley/cargo_holder required_type = /obj/mecha/working - attach(obj/mecha/M as obj) - ..() - cargo_holder = M - return +/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/attach(obj/mecha/M as obj) + ..() + cargo_holder = M + return - action(atom/target) - if(!action_checks(target)) return - if(!cargo_holder) return +/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/action(atom/target) + if(!action_checks(target)) return + if(!cargo_holder) return - //loading - if(istype(target,/obj)) - var/obj/O = target - if(O.has_buckled_mobs()) - return - if(locate(/mob/living) in O) - occupant_message("You can't load living things into the cargo compartment.") - return - if(O.anchored) - occupant_message("[target] is firmly secured.") - return - if(cargo_holder.cargo.len >= cargo_holder.cargo_capacity) - occupant_message("Not enough room in cargo compartment.") - return + //loading + if(istype(target,/obj)) + var/obj/O = target + if(O.has_buckled_mobs()) + return + if(locate(/mob/living) in O) + occupant_message("You can't load living things into the cargo compartment.") + return + if(O.anchored) + occupant_message("[target] is firmly secured.") + return + if(cargo_holder.cargo.len >= cargo_holder.cargo_capacity) + occupant_message("Not enough room in cargo compartment.") + return - occupant_message("You lift [target] and start to load it into cargo compartment.") - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - set_ready_state(0) - chassis.use_power(energy_drain) - O.anchored = 1 - var/T = chassis.loc - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - cargo_holder.cargo += O - O.loc = chassis - O.anchored = 0 - occupant_message("[target] succesfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - occupant_message("You must hold still while handling objects.") - O.anchored = initial(O.anchored) - - //attacking - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == I_HURT || istype(chassis.occupant,/mob/living/carbon/brain)) //No tactile feedback for brains - M.take_overall_damage(dam_force) - M.adjustOxyLoss(round(dam_force/2)) - M.updatehealth() - occupant_message("You squeeze [target] with [src.name]. Something cracks.") - playsound(src.loc, "fracture", 5, 1, -2) //CRACK - chassis.visible_message("[chassis] squeezes [target].") + occupant_message("You lift [target] and start to load it into cargo compartment.") + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + set_ready_state(0) + chassis.use_power(energy_drain) + O.anchored = 1 + var/T = chassis.loc + if(do_after_cooldown(target)) + if(T == chassis.loc && src == chassis.selected) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + occupant_message("[target] succesfully loaded.") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") else - step_away(M,chassis) - occupant_message("You push [target] out of the way.") - chassis.visible_message("[chassis] pushes [target] out of the way.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 + occupant_message("You must hold still while handling objects.") + O.anchored = initial(O.anchored) + + //attacking + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat>1) return + if(chassis.occupant.a_intent == I_HURT || istype(chassis.occupant,/mob/living/carbon/brain)) //No tactile feedback for brains + M.take_overall_damage(dam_force) + M.adjustOxyLoss(round(dam_force/2)) + M.updatehealth() + occupant_message("You squeeze [target] with [src.name]. Something cracks.") + playsound(src.loc, "fracture", 5, 1, -2) //CRACK + chassis.visible_message("[chassis] squeezes [target].") + else + step_away(M,chassis) + occupant_message("You push [target] out of the way.") + chassis.visible_message("[chassis] pushes [target] out of the way.") + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return 1 /obj/item/mecha_parts/mecha_equipment/tool/drill name = "drill" @@ -77,48 +80,48 @@ force = 15 required_type = list(/obj/mecha/working/ripley, /obj/mecha/combat) - action(atom/target) - if(!action_checks(target)) return - if(isobj(target)) - var/obj/target_obj = target - if(!target_obj.vars.Find("unacidable") || target_obj.unacidable) return - set_ready_state(0) - chassis.use_power(energy_drain) - chassis.visible_message("[chassis] starts to drill [target]", "You hear the drill.") - occupant_message("You start to drill [target]") - var/T = chassis.loc - var/C = target.loc //why are these backwards? we may never know -Pete - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - if(istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - if(W.reinf_material) - occupant_message("[target] is too durable to drill through.") - else - log_message("Drilled through [target]") - target.ex_act(2) - else if(istype(target, /turf/simulated/mineral)) - for(var/turf/simulated/mineral/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.GetDrilled() - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(target.loc == C) +/obj/item/mecha_parts/mecha_equipment/tool/drill/action(atom/target) + if(!action_checks(target)) return + if(isobj(target)) + var/obj/target_obj = target + if(!target_obj.vars.Find("unacidable") || target_obj.unacidable) return + set_ready_state(0) + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] starts to drill [target]", "You hear the drill.") + occupant_message("You start to drill [target]") + var/T = chassis.loc + var/C = target.loc //why are these backwards? we may never know -Pete + if(do_after_cooldown(target)) + if(T == chassis.loc && src == chassis.selected) + if(istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + if(W.reinf_material) + occupant_message("[target] is too durable to drill through.") + else log_message("Drilled through [target]") target.ex_act(2) - return 1 + else if(istype(target, /turf/simulated/mineral)) + for(var/turf/simulated/mineral/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.GetDrilled() + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else if(target.loc == C) + log_message("Drilled through [target]") + target.ex_act(2) + return 1 /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill name = "diamond drill" @@ -128,39 +131,39 @@ equip_cooldown = 20 force = 15 - action(atom/target) - if(!action_checks(target)) return - if(isobj(target)) - var/obj/target_obj = target - if(target_obj.unacidable) return - set_ready_state(0) - chassis.use_power(energy_drain) - chassis.visible_message("[chassis] starts to drill [target]", "You hear the drill.") - occupant_message("You start to drill [target]") - var/T = chassis.loc - var/C = target.loc //why are these backwards? we may never know -Pete - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - if(istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - if(!W.reinf_material || do_after_cooldown(target))//To slow down how fast mechs can drill through the station - log_message("Drilled through [target]") - target.ex_act(3) - else if(istype(target, /turf/simulated/mineral)) - for(var/turf/simulated/mineral/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.GetDrilled() +/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/action(atom/target) + if(!action_checks(target)) return + if(isobj(target)) + var/obj/target_obj = target + if(target_obj.unacidable) return + set_ready_state(0) + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] starts to drill [target]", "You hear the drill.") + occupant_message("You start to drill [target]") + var/T = chassis.loc + var/C = target.loc //why are these backwards? we may never know -Pete + if(do_after_cooldown(target)) + if(T == chassis.loc && src == chassis.selected) + if(istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + if(!W.reinf_material || do_after_cooldown(target))//To slow down how fast mechs can drill through the station log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(target.loc == C) - log_message("Drilled through [target]") - target.ex_act(2) - return 1 + target.ex_act(3) + else if(istype(target, /turf/simulated/mineral)) + for(var/turf/simulated/mineral/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.GetDrilled() + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else if(target.loc == C) + log_message("Drilled through [target]") + target.ex_act(2) + return 1 /obj/item/mecha_parts/mecha_equipment/tool/extinguisher name = "extinguisher" @@ -174,65 +177,64 @@ var/spray_amount = 5 //units of liquid per particle. 5 is enough to wet the floor - it's a big fire extinguisher, so should be fine var/max_water = 1000 - New() - reagents = new/datum/reagents(max_water) - reagents.my_atom = src - reagents.add_reagent("water", max_water) - ..() - return +/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New() + reagents = new/datum/reagents(max_water) + reagents.my_atom = src + reagents.add_reagent("water", max_water) + ..() + return - action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target) || get_dist(chassis, target)>3) return - if(get_dist(chassis, target)>2) return - set_ready_state(0) - if(do_after_cooldown(target)) - if( istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) - var/obj/o = target - var/amount = o.reagents.trans_to_obj(src, 200) - occupant_message("[amount] units transferred into internal tank.") - playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) - return +/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. + if(!action_checks(target) || get_dist(chassis, target)>3) return + if(get_dist(chassis, target)>2) return + set_ready_state(0) + if(do_after_cooldown(target)) + if( istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) + var/obj/o = target + var/amount = o.reagents.trans_to_obj(src, 200) + occupant_message("[amount] units transferred into internal tank.") + playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) + return - if (src.reagents.total_volume < 1) - occupant_message("\The [src] is empty.") - return + if (src.reagents.total_volume < 1) + occupant_message("\The [src] is empty.") + return - playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) + playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) - var/direction = get_dir(chassis,target) + var/direction = get_dir(chassis,target) - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) + var/turf/T = get_turf(target) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) + var/list/the_targets = list(T,T1,T2) - for(var/a = 1 to 5) - spawn(0) - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis)) - var/turf/my_target - if(a == 1) - my_target = T - else if(a == 2) - my_target = T1 - else if(a == 3) - my_target = T2 - else - my_target = pick(the_targets) - W.create_reagents(5) - if(!W || !src) - return - reagents.trans_to_obj(W, spray_amount) - W.set_color() - W.set_up(my_target) - return 1 + for(var/a = 1 to 5) + spawn(0) + var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis)) + var/turf/my_target + if(a == 1) + my_target = T + else if(a == 2) + my_target = T1 + else if(a == 3) + my_target = T2 + else + my_target = pick(the_targets) + W.create_reagents(5) + if(!W || !src) + return + reagents.trans_to_obj(W, spray_amount) + W.set_color() + W.set_up(my_target) + return 1 - get_equip_info() - return "[..()] \[[src.reagents.total_volume]\]" - - on_reagent_change() - return +/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/get_equip_info() + return "[..()] \[[src.reagents.total_volume]\]" +/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/on_reagent_change() + return /obj/item/mecha_parts/mecha_equipment/tool/rcd name = "mounted RCD" @@ -245,94 +247,95 @@ var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. var/disabled = 0 //malf - action(atom/target) - if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve - disabled = 1 - else - disabled = 0 - if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) - target = get_turf(target) - if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return - playsound(chassis, 'sound/machines/click.ogg', 50, 1) - //meh + equip_type = EQUIP_SPECIAL + +/obj/item/mecha_parts/mecha_equipment/tool/rcd/action(atom/target) + if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve + disabled = 1 + else + disabled = 0 + if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) + target = get_turf(target) + if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return + playsound(chassis, 'sound/machines/click.ogg', 50, 1) + //meh + switch(mode) + if(0) + if (istype(target, /turf/simulated/wall)) + occupant_message("Deconstructing [target]...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + chassis.spark_system.start() + target:ChangeTurf(/turf/simulated/floor/plating) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.use_power(energy_drain) + else if (istype(target, /turf/simulated/floor)) + occupant_message("Deconstructing [target]...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + chassis.spark_system.start() + target:ChangeTurf(get_base_turf_by_area(target)) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.use_power(energy_drain) + else if (istype(target, /obj/machinery/door/airlock)) + occupant_message("Deconstructing [target]...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + chassis.spark_system.start() + qdel(target) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.use_power(energy_drain) + if(1) + if(istype(target, /turf/space) || istype(target,get_base_turf_by_area(target))) + occupant_message("Building Floor...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + target:ChangeTurf(/turf/simulated/floor/plating) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + chassis.use_power(energy_drain*2) + else if(istype(target, /turf/simulated/floor)) + occupant_message("Building Wall...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + target:ChangeTurf(/turf/simulated/wall) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + chassis.use_power(energy_drain*2) + if(2) + if(istype(target, /turf/simulated/floor)) + occupant_message("Building Airlock...") + set_ready_state(0) + if(do_after_cooldown(target)) + if(disabled) return + chassis.spark_system.start() + var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) + T.autoclose = 1 + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(target, 'sound/effects/sparks2.ogg', 50, 1) + chassis.use_power(energy_drain*2) + return + +/obj/item/mecha_parts/mecha_equipment/tool/rcd/Topic(href,href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) switch(mode) if(0) - if (istype(target, /turf/simulated/wall)) - occupant_message("Deconstructing [target]...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - target:ChangeTurf(/turf/simulated/floor/plating) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /turf/simulated/floor)) - occupant_message("Deconstructing [target]...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - target:ChangeTurf(get_base_turf_by_area(target)) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /obj/machinery/door/airlock)) - occupant_message("Deconstructing [target]...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - qdel(target) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) + occupant_message("Switched RCD to Deconstruct.") if(1) - if(istype(target, /turf/space) || istype(target,get_base_turf_by_area(target))) - occupant_message("Building Floor...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - target:ChangeTurf(/turf/simulated/floor/plating) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) - else if(istype(target, /turf/simulated/floor)) - occupant_message("Building Wall...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - target:ChangeTurf(/turf/simulated/wall) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) + occupant_message("Switched RCD to Construct.") if(2) - if(istype(target, /turf/simulated/floor)) - occupant_message("Building Airlock...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) - T.autoclose = 1 - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - playsound(target, 'sound/effects/sparks2.ogg', 50, 1) - chassis.use_power(energy_drain*2) - return + occupant_message("Switched RCD to Construct Airlock.") + return - - Topic(href,href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - switch(mode) - if(0) - occupant_message("Switched RCD to Deconstruct.") - if(1) - occupant_message("Switched RCD to Construct.") - if(2) - occupant_message("Switched RCD to Construct Airlock.") - return - - get_equip_info() - return "[..()] \[D|C|A\]" +/obj/item/mecha_parts/mecha_equipment/tool/rcd/get_equip_info() + return "[..()] \[D|C|A\]" @@ -346,15 +349,17 @@ energy_drain = 1000 range = RANGED - action(atom/target) - if(!action_checks(target) || src.loc.z == 2) return - var/turf/T = get_turf(target) - if(T) - set_ready_state(0) - chassis.use_power(energy_drain) - do_teleport(chassis, T, 4) - do_after_cooldown() - return + equip_type = EQUIP_SPECIAL + +/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) + if(!action_checks(target) || src.loc.z == 2) return + var/turf/T = get_turf(target) + if(T) + set_ready_state(0) + chassis.use_power(energy_drain) + do_teleport(chassis, T, 4) + do_after_cooldown() + return /obj/item/mecha_parts/mecha_equipment/wormhole_generator @@ -366,46 +371,47 @@ energy_drain = 300 range = RANGED + equip_type = EQUIP_SPECIAL - action(atom/target) - if(!action_checks(target) || src.loc.z == 2) return - var/list/theareas = list() - for(var/area/AR in orange(100, chassis)) - if(AR in theareas) continue - theareas += AR - if(!theareas.len) - return - var/area/thearea = pick(theareas) - var/list/L = list() - var/turf/pos = get_turf(src) - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density && pos.z == T.z) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - if(!L.len) - return - var/turf/target_turf = pick(L) - if(!target_turf) - return - chassis.use_power(energy_drain) - set_ready_state(0) - var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) - P.target = target_turf - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - do_after_cooldown() - src = null - spawn(rand(150,300)) - qdel(P) +/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) + if(!action_checks(target) || src.loc.z == 2) return + var/list/theareas = list() + for(var/area/AR in orange(100, chassis)) + if(AR in theareas) continue + theareas += AR + if(!theareas.len) return + var/area/thearea = pick(theareas) + var/list/L = list() + var/turf/pos = get_turf(src) + for(var/turf/T in get_area_turfs(thearea.type)) + if(!T.density && pos.z == T.z) + var/clear = 1 + for(var/obj/O in T) + if(O.density) + clear = 0 + break + if(clear) + L+=T + if(!L.len) + return + var/turf/target_turf = pick(L) + if(!target_turf) + return + chassis.use_power(energy_drain) + set_ready_state(0) + var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) + P.target = target_turf + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.failchance = 0 + P.icon_state = "anom" + P.name = "wormhole" + do_after_cooldown() + src = null + spawn(rand(150,300)) + qdel(P) + return /obj/item/mecha_parts/mecha_equipment/gravcatapult name = "gravitational catapult" @@ -421,66 +427,68 @@ var/last_fired = 0 //Concept stolen from guns. var/fire_delay = 10 //Used to prevent spam-brute against humans. - action(atom/movable/target) + equip_type = EQUIP_UTILITY - if(world.time >= last_fired + fire_delay) - last_fired = world.time - else - if (world.time % 3) - occupant_message("[src] is not ready to fire again!") - return 0 +/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) - switch(mode) - if(1) - if(!action_checks(target) && !locked) return - if(!locked) - if(!istype(target) || target.anchored) - occupant_message("Unable to lock on [target]") - return - locked = target - occupant_message("Locked on [target]") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + if(world.time >= last_fired + fire_delay) + last_fired = world.time + else + if (world.time % 3) + occupant_message("[src] is not ready to fire again!") + return 0 + + switch(mode) + if(1) + if(!action_checks(target) && !locked) return + if(!locked) + if(!istype(target) || target.anchored) + occupant_message("Unable to lock on [target]") return - else if(target!=locked) - if(locked in view(chassis)) - locked.throw_at(target, 14, 1.5, chassis) - locked = null - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - else - locked = null - occupant_message("Lock on [locked] disengaged.") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - if(2) - if(!action_checks(target)) return - var/list/atoms = list() - if(isturf(target)) - atoms = range(target,3) + locked = target + occupant_message("Locked on [target]") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return + else if(target!=locked) + if(locked in view(chassis)) + locked.throw_at(target, 14, 1.5, chassis) + locked = null + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() else - atoms = orange(target,3) - for(var/atom/movable/A in atoms) - if(A.anchored) continue - spawn(0) - var/iter = 5-get_dist(A,target) - for(var/i=0 to iter) - step_away(A,target) - sleep(2) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return + locked = null + occupant_message("Lock on [locked] disengaged.") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + if(2) + if(!action_checks(target)) return + var/list/atoms = list() + if(isturf(target)) + atoms = range(target,3) + else + atoms = orange(target,3) + for(var/atom/movable/A in atoms) + if(A.anchored) continue + spawn(0) + var/iter = 5-get_dist(A,target) + for(var/i=0 to iter) + step_away(A,target) + sleep(2) + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return - get_equip_info() - return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" +/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() + return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" - Topic(href, href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return +/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. @@ -494,42 +502,44 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 - can_attach(obj/mecha/M as obj) - if(..()) - if(!M.proc_res["dynattackby"]) - return 1 - return 0 + equip_type = EQUIP_HULL - attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynattackby"] = src - return +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/M as obj) + if(..()) + if(!M.proc_res["dynattackby"]) + return 1 + return 0 - detach() - chassis.proc_res["dynattackby"] = null - ..() - return +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/attach(obj/mecha/M as obj) + ..() + chassis.proc_res["dynattackby"] = src + return - get_equip_info() - if(!chassis) return - return "* [src.name]" +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/detach() + chassis.proc_res["dynattackby"] = null + ..() + return - proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) - if(!action_checks(user)) - return chassis.dynattackby(W,user) - chassis.log_message("Attacked by [W]. Attacker - [user]") - if(prob(chassis.deflect_chance*deflect_coeff)) - user << "\The [W] bounces off [chassis] armor." - chassis.log_append_to_last("Armor saved.") - else - chassis.occupant_message("\The [user] hits [chassis] with [W].") - user.visible_message("\The [user] hits [chassis] with [W].", "You hit [src] with [W].") - chassis.take_damage(round(W.force*damage_coeff),W.damtype) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) + if(!action_checks(user)) + return chassis.dynattackby(W,user) + chassis.log_message("Attacked by [W]. Attacker - [user]") + if(prob(chassis.deflect_chance*deflect_coeff)) + user << "\The [W] bounces off [chassis] armor." + chassis.log_append_to_last("Armor saved.") + else + chassis.occupant_message("\The [user] hits [chassis] with [W].") + user.visible_message("\The [user] hits [chassis] with [W].", "You hit [src] with [W].") + chassis.take_damage(round(W.force*damage_coeff),W.damtype) + chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster @@ -543,63 +553,65 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 - can_attach(obj/mecha/M as obj) - if(..()) - if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) - return 1 - return 0 + equip_type = EQUIP_HULL - attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynbulletdamage"] = src - chassis.proc_res["dynhitby"] = src - return +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/M as obj) + if(..()) + if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) + return 1 + return 0 - detach() - chassis.proc_res["dynbulletdamage"] = null - chassis.proc_res["dynhitby"] = null - ..() - return +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/attach(obj/mecha/M as obj) + ..() + chassis.proc_res["dynbulletdamage"] = src + chassis.proc_res["dynhitby"] = src + return - get_equip_info() - if(!chassis) return - return "* [src.name]" +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/detach() + chassis.proc_res["dynbulletdamage"] = null + chassis.proc_res["dynhitby"] = null + ..() + return - proc/dynbulletdamage(var/obj/item/projectile/Proj) - if(!action_checks(src)) - return chassis.dynbulletdamage(Proj) - if(prob(chassis.deflect_chance*deflect_coeff)) - chassis.occupant_message("The armor deflects incoming projectile.") - chassis.visible_message("The [chassis.name] armor deflects the projectile") - chassis.log_append_to_last("Armor saved.") - else - chassis.take_damage(round(Proj.damage*src.damage_coeff),Proj.check_armour) - chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - Proj.on_hit(chassis) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" - proc/dynhitby(atom/movable/A) - if(!action_checks(A)) - return chassis.dynhitby(A) - if(prob(chassis.deflect_chance*deflect_coeff) || istype(A, /mob/living) || istype(A, /obj/item/mecha_parts/mecha_tracking)) - chassis.occupant_message("The [A] bounces off the armor.") - chassis.visible_message("The [A] bounces off the [chassis] armor") - chassis.log_append_to_last("Armor saved.") - if(istype(A, /mob/living)) - var/mob/living/M = A - M.take_organ_damage(10) - else if(istype(A, /obj)) - var/obj/O = A - if(O.throwforce) - chassis.take_damage(round(O.throwforce*damage_coeff)) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynbulletdamage(var/obj/item/projectile/Proj) + if(!action_checks(src)) + return chassis.dynbulletdamage(Proj) + if(prob(chassis.deflect_chance*deflect_coeff)) + chassis.occupant_message("The armor deflects incoming projectile.") + chassis.visible_message("The [chassis.name] armor deflects the projectile") + chassis.log_append_to_last("Armor saved.") + else + chassis.take_damage(round(Proj.damage*src.damage_coeff),Proj.check_armour) + chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + Proj.on_hit(chassis) + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynhitby(atom/movable/A) + if(!action_checks(A)) + return chassis.dynhitby(A) + if(prob(chassis.deflect_chance*deflect_coeff) || istype(A, /mob/living) || istype(A, /obj/item/mecha_parts/mecha_tracking)) + chassis.occupant_message("The [A] bounces off the armor.") + chassis.visible_message("The [A] bounces off the [chassis] armor") + chassis.log_append_to_last("Armor saved.") + if(istype(A, /mob/living)) + var/mob/living/M = A + M.take_organ_damage(10) + else if(istype(A, /obj)) + var/obj/O = A + if(O.throwforce) + chassis.take_damage(round(O.throwforce*damage_coeff)) + chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return /obj/item/mecha_parts/mecha_equipment/repair_droid @@ -615,85 +627,87 @@ var/icon/droid_overlay var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) - New() - ..() - pr_repair_droid = new /datum/global_iterator/mecha_repair_droid(list(src),0) - pr_repair_droid.set_delay(equip_cooldown) - return + equip_type = EQUIP_HULL - Destroy() - qdel(pr_repair_droid) - pr_repair_droid = null - ..() +/obj/item/mecha_parts/mecha_equipment/repair_droid/New() + ..() + pr_repair_droid = new /datum/global_iterator/mecha_repair_droid(list(src),0) + pr_repair_droid.set_delay(equip_cooldown) + return - attach(obj/mecha/M as obj) - ..() - droid_overlay = new(src.icon, icon_state = "repair_droid") - M.overlays += droid_overlay - return +/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() + qdel(pr_repair_droid) + pr_repair_droid = null + ..() - destroy() +/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) + ..() + droid_overlay = new(src.icon, icon_state = "repair_droid") + M.overlays += droid_overlay + return + +/obj/item/mecha_parts/mecha_equipment/repair_droid/destroy() + chassis.overlays -= droid_overlay + ..() + return + +/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() + chassis.overlays -= droid_overlay + pr_repair_droid.stop() + ..() + return + +/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() + if(!chassis) return + return "* [src.name] - [pr_repair_droid.active()?"Dea":"A"]ctivate" + + +/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) + ..() + if(href_list["toggle_repairs"]) chassis.overlays -= droid_overlay - ..() - return - - detach() - chassis.overlays -= droid_overlay - pr_repair_droid.stop() - ..() - return - - get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_repair_droid.active()?"Dea":"A"]ctivate" - - - Topic(href, href_list) - ..() - if(href_list["toggle_repairs"]) - chassis.overlays -= droid_overlay - if(pr_repair_droid.toggle()) - droid_overlay = new(src.icon, icon_state = "repair_droid_a") - log_message("Activated.") - else - droid_overlay = new(src.icon, icon_state = "repair_droid") - log_message("Deactivated.") - set_ready_state(1) - chassis.overlays += droid_overlay - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return + if(pr_repair_droid.toggle()) + droid_overlay = new(src.icon, icon_state = "repair_droid_a") + log_message("Activated.") + else + droid_overlay = new(src.icon, icon_state = "repair_droid") + log_message("Deactivated.") + set_ready_state(1) + chassis.overlays += droid_overlay + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return /datum/global_iterator/mecha_repair_droid - process(var/obj/item/mecha_parts/mecha_equipment/repair_droid/RD as obj) - if(!RD.chassis) +/datum/global_iterator/mecha_repair_droid/process(var/obj/item/mecha_parts/mecha_equipment/repair_droid/RD as obj) + if(!RD.chassis) + stop() + RD.set_ready_state(1) + return + var/health_boost = RD.health_boost + var/repaired = 0 + if(RD.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) + health_boost *= -2 + else if(RD.chassis.hasInternalDamage() && prob(15)) + for(var/int_dam_flag in RD.repairable_damage) + if(RD.chassis.hasInternalDamage(int_dam_flag)) + RD.chassis.clearInternalDamage(int_dam_flag) + repaired = 1 + break + if(health_boost<0 || RD.chassis.health < initial(RD.chassis.health)) + RD.chassis.health += min(health_boost, initial(RD.chassis.health)-RD.chassis.health) + repaired = 1 + if(repaired) + if(RD.chassis.use_power(RD.energy_drain)) + RD.set_ready_state(0) + else stop() RD.set_ready_state(1) return - var/health_boost = RD.health_boost - var/repaired = 0 - if(RD.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - health_boost *= -2 - else if(RD.chassis.hasInternalDamage() && prob(15)) - for(var/int_dam_flag in RD.repairable_damage) - if(RD.chassis.hasInternalDamage(int_dam_flag)) - RD.chassis.clearInternalDamage(int_dam_flag) - repaired = 1 - break - if(health_boost<0 || RD.chassis.health < initial(RD.chassis.health)) - RD.chassis.health += min(health_boost, initial(RD.chassis.health)-RD.chassis.health) - repaired = 1 - if(repaired) - if(RD.chassis.use_power(RD.energy_drain)) - RD.set_ready_state(0) - else - stop() - RD.set_ready_state(1) - return - else - RD.set_ready_state(1) - return + else + RD.set_ready_state(1) + return /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay @@ -708,71 +722,73 @@ var/coeff = 100 var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) - New() - ..() - pr_energy_relay = new /datum/global_iterator/mecha_energy_relay(list(src),0) - pr_energy_relay.set_delay(equip_cooldown) - return + equip_type = EQUIP_UTILITY - Destroy() - qdel(pr_energy_relay) - pr_energy_relay = null - ..() +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/New() + ..() + pr_energy_relay = new /datum/global_iterator/mecha_energy_relay(list(src),0) + pr_energy_relay.set_delay(equip_cooldown) + return - detach() - pr_energy_relay.stop() -// chassis.proc_res["dynusepower"] = null - chassis.proc_res["dyngetcharge"] = null - ..() - return +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() + qdel(pr_energy_relay) + pr_energy_relay = null + ..() - attach(obj/mecha/M) - ..() - chassis.proc_res["dyngetcharge"] = src -// chassis.proc_res["dynusepower"] = src - return +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() + pr_energy_relay.stop() +// chassis.proc_res["dynusepower"] = null + chassis.proc_res["dyngetcharge"] = null + ..() + return - can_attach(obj/mecha/M) - if(..()) - if(!M.proc_res["dyngetcharge"])// && !M.proc_res["dynusepower"]) - return 1 - return 0 +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/attach(obj/mecha/M) + ..() + chassis.proc_res["dyngetcharge"] = src +// chassis.proc_res["dynusepower"] = src + return - proc/dyngetcharge() - if(equip_ready) //disabled - return chassis.dyngetcharge() - var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) - var/charge = 0 - if(pow_chan) - charge = 1000 //making magic +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/can_attach(obj/mecha/M) + if(..()) + if(!M.proc_res["dyngetcharge"])// && !M.proc_res["dynusepower"]) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/dyngetcharge() + if(equip_ready) //disabled + return chassis.dyngetcharge() + var/area/A = get_area(chassis) + var/pow_chan = get_power_channel(A) + var/charge = 0 + if(pow_chan) + charge = 1000 //making magic + else + return chassis.dyngetcharge() + return charge + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) + var/pow_chan + if(A) + for(var/c in use_channels) + if(A.powered(c)) + pow_chan = c + break + return pow_chan + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) + ..() + if(href_list["toggle_relay"]) + if(pr_energy_relay.toggle()) + set_ready_state(0) + log_message("Activated.") else - return chassis.dyngetcharge() - return charge + set_ready_state(1) + log_message("Deactivated.") + return - proc/get_power_channel(var/area/A) - var/pow_chan - if(A) - for(var/c in use_channels) - if(A.powered(c)) - pow_chan = c - break - return pow_chan - - Topic(href, href_list) - ..() - if(href_list["toggle_relay"]) - if(pr_energy_relay.toggle()) - set_ready_state(0) - log_message("Activated.") - else - set_ready_state(1) - log_message("Deactivated.") - return - - get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_energy_relay.active()?"Dea":"A"]ctivate" +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() + if(!chassis) return + return "* [src.name] - [pr_energy_relay.active()?"Dea":"A"]ctivate" /* proc/dynusepower(amount) if(!equip_ready) //enabled @@ -785,31 +801,113 @@ /datum/global_iterator/mecha_energy_relay - process(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/ER) - if(!ER.chassis || ER.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - stop() - ER.set_ready_state(1) - return - var/cur_charge = ER.chassis.get_charge() - if(isnull(cur_charge) || !ER.chassis.cell) - stop() - ER.set_ready_state(1) - ER.occupant_message("No powercell detected.") - return - if(cur_charge* [src.name] - [my_shield.active?"Dea":"A"]ctivate" /obj/item/mecha_parts/mecha_equipment/generator @@ -828,125 +926,127 @@ var/fuel_per_cycle_active = 500 var/power_per_cycle = 20 - New() - ..() - init() - return + equip_type = EQUIP_UTILITY - Destroy() - qdel(pr_mech_generator) - pr_mech_generator = null - ..() +/obj/item/mecha_parts/mecha_equipment/generator/New() + ..() + init() + return - proc/init() - fuel = new /obj/item/stack/material/phoron(src) - fuel.amount = 0 - pr_mech_generator = new /datum/global_iterator/mecha_generator(list(src),0) - pr_mech_generator.set_delay(equip_cooldown) - return +/obj/item/mecha_parts/mecha_equipment/generator/Destroy() + qdel(pr_mech_generator) + pr_mech_generator = null + ..() - detach() - pr_mech_generator.stop() - ..() - return +/obj/item/mecha_parts/mecha_equipment/generator/proc/init() + fuel = new /obj/item/stack/material/phoron(src) + fuel.amount = 0 + pr_mech_generator = new /datum/global_iterator/mecha_generator(list(src),0) + pr_mech_generator.set_delay(equip_cooldown) + return + +/obj/item/mecha_parts/mecha_equipment/generator/detach() + pr_mech_generator.stop() + ..() + return - Topic(href, href_list) - ..() - if(href_list["toggle"]) - if(pr_mech_generator.toggle()) - set_ready_state(0) - log_message("Activated.") - else - set_ready_state(1) - log_message("Deactivated.") - return +/obj/item/mecha_parts/mecha_equipment/generator/Topic(href, href_list) + ..() + if(href_list["toggle"]) + if(pr_mech_generator.toggle()) + set_ready_state(0) + log_message("Activated.") + else + set_ready_state(1) + log_message("Deactivated.") + return - get_equip_info() - var/output = ..() - if(output) - return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate" - return +/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() + var/output = ..() + if(output) + return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate" + return - action(target) - if(chassis) - var/result = load_fuel(target) - var/message - if(isnull(result)) - message = "[fuel] traces in target minimal. [target] cannot be used as fuel." - else if(!result) - message = "Unit is full." - else - message = "[result] unit\s of [fuel] successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - - proc/load_fuel(var/obj/item/stack/material/P) - if(P.type == fuel.type && P.amount) - var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) - if(to_load) - var/units = min(max(round(to_load / P.perunit),1),P.amount) - if(units) - fuel.amount += units - P.use(units) - return units - else - return 0 - return - - attackby(weapon,mob/user) - var/result = load_fuel(weapon) +/obj/item/mecha_parts/mecha_equipment/generator/action(target) + if(chassis) + var/result = load_fuel(target) + var/message if(isnull(result)) - user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.") + message = "[fuel] traces in target minimal. [target] cannot be used as fuel." else if(!result) - user << "Unit is full." + message = "Unit is full." else - user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.") - return + message = "[result] unit\s of [fuel] successfully loaded." + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + occupant_message(message) + return - critfail() - ..() - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/GM = new - if(prob(10)) - T.assume_gas("phoron", 100, 1500+T0C) - T.visible_message("The [src] suddenly disgorges a cloud of heated phoron.") - destroy() +/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/material/P) + if(P.type == fuel.type && P.amount) + var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) + if(to_load) + var/units = min(max(round(to_load / P.perunit),1),P.amount) + if(units) + fuel.amount += units + P.use(units) + return units else - T.assume_gas("phoron", 5, istype(T) ? T.air.temperature : T20C) - T.visible_message("The [src] suddenly disgorges a cloud of phoron.") - T.assume_air(GM) + return 0 + return + +/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user) + var/result = load_fuel(weapon) + if(isnull(result)) + user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.") + else if(!result) + user << "Unit is full." + else + user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.") + return + +/obj/item/mecha_parts/mecha_equipment/generator/critfail() + ..() + var/turf/simulated/T = get_turf(src) + if(!T) return + var/datum/gas_mixture/GM = new + if(prob(10)) + T.assume_gas("phoron", 100, 1500+T0C) + T.visible_message("The [src] suddenly disgorges a cloud of heated phoron.") + destroy() + else + T.assume_gas("phoron", 5, istype(T) ? T.air.temperature : T20C) + T.visible_message("The [src] suddenly disgorges a cloud of phoron.") + T.assume_air(GM) + return /datum/global_iterator/mecha_generator - process(var/obj/item/mecha_parts/mecha_equipment/generator/EG) - if(!EG.chassis) - stop() - EG.set_ready_state(1) - return 0 - if(EG.fuel.amount<=0) - stop() - EG.log_message("Deactivated - no fuel.") - EG.set_ready_state(1) - return 0 - var/cur_charge = EG.chassis.get_charge() - if(isnull(cur_charge)) - EG.set_ready_state(1) - EG.occupant_message("No powercell detected.") - EG.log_message("Deactivated.") - stop() - return 0 - var/use_fuel = EG.fuel_per_cycle_idle - if(cur_charge[target] succesfully loaded.") - chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - chassis.occupant_message("You must hold still while handling objects.") - O.anchored = initial(O.anchored) - else - chassis.occupant_message("Not enough room in cargo compartment.") - else - chassis.occupant_message("[target] is firmly secured.") +/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp/attach(obj/mecha/M as obj) + ..() + cargo_holder = M + return - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == I_HURT) - chassis.occupant_message("You obliterate [target] with [src.name], leaving blood and guts everywhere.") - chassis.visible_message("[chassis] destroys [target] in an unholy fury.") - if(chassis.occupant.a_intent == I_DISARM) - chassis.occupant_message("You tear [target]'s limbs off with [src.name].") - chassis.visible_message("[chassis] rips [target]'s arms off.") +/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp/action(atom/target) + if(!action_checks(target)) return + if(!cargo_holder) return + if(istype(target,/obj)) + var/obj/O = target + if(!O.anchored) + if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + chassis.occupant_message("You lift [target] and start to load it into cargo compartment.") + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + set_ready_state(0) + chassis.use_power(energy_drain) + O.anchored = 1 + var/T = chassis.loc + if(do_after_cooldown(target)) + if(T == chassis.loc && src == chassis.selected) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + chassis.occupant_message("[target] succesfully loaded.") + chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + else + chassis.occupant_message("You must hold still while handling objects.") + O.anchored = initial(O.anchored) else - step_away(M,chassis) - chassis.occupant_message("You smash into [target], sending them flying.") - chassis.visible_message("[chassis] tosses [target] like a piece of paper.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 + chassis.occupant_message("Not enough room in cargo compartment.") + else + chassis.occupant_message("[target] is firmly secured.") + + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat>1) return + if(chassis.occupant.a_intent == I_HURT) + chassis.occupant_message("You obliterate [target] with [src.name], leaving blood and guts everywhere.") + chassis.visible_message("[chassis] destroys [target] in an unholy fury.") + if(chassis.occupant.a_intent == I_DISARM) + chassis.occupant_message("You tear [target]'s limbs off with [src.name].") + chassis.visible_message("[chassis] rips [target]'s arms off.") + else + step_away(M,chassis) + chassis.occupant_message("You smash into [target], sending them flying.") + chassis.visible_message("[chassis] tosses [target] like a piece of paper.") + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return 1 /obj/item/mecha_parts/mecha_equipment/tool/passenger name = "passenger compartment" @@ -1051,6 +1153,9 @@ var/mob/living/carbon/occupant = null var/door_locked = 1 salvageable = 0 + allow_duplicate = TRUE + + equip_type = EQUIP_HULL /obj/item/mecha_parts/mecha_equipment/tool/passenger/destroy() for(var/atom/movable/AM in src) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index e980c8261c..a53c471eb3 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -12,6 +12,8 @@ var/auto_rearm = 0 //Does the weapon reload itself after each shot? required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod) + equip_type = EQUIP_WEAPON + /obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target) if(projectiles <= 0) return 0 @@ -45,13 +47,39 @@ if(auto_rearm) projectiles = projectiles_per_shot // set_ready_state(0) + + var/target_for_log + if(ismob(target)) + target_for_log = target + else + target_for_log = "[target.name]" + + add_attack_logs(chassis.occupant,target_for_log,"Fired exosuit weapon [src.name] (MANUAL)") + do_after_cooldown() + return /obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target) var/obj/item/projectile/P = A + P.dispersion = deviation + process_accuracy(P, chassis.occupant, target) P.launch(target) +/obj/item/mecha_parts/mecha_equipment/weapon/proc/process_accuracy(obj/projectile, mob/living/user, atom/target) + var/obj/item/projectile/P = projectile + if(!istype(P)) + return + + P.accuracy -= user.get_accuracy_penalty() + + // Some modifiers make it harder or easier to hit things. + for(var/datum/modifier/M in user.modifiers) + if(!isnull(M.accuracy)) + P.accuracy += M.accuracy + if(!isnull(M.accuracy_dispersion)) + P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) + /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "general energy weapon" auto_rearm = 1 @@ -59,40 +87,111 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 name = "\improper CH-PS \"Immolator\" laser" + desc = "A laser carbine's firing system mounted on a high-powered exosuit weapon socket." icon_state = "mecha_laser" energy_drain = 30 projectile = /obj/item/projectile/beam fire_sound = 'sound/weapons/Laser.ogg' + origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 3, TECH_MAGNET = 3) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray + equip_cooldown = 6 + name = "\improper CH-XS \"Penetrator\" laser" + desc = "A large, mounted variant of the anti-armor xray rifle." + icon_state = "mecha_xray" + energy_drain = 150 + projectile = /obj/item/projectile/beam/xray + fire_sound = 'sound/weapons/eluger.ogg' + + origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_POWER = 3) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray/rigged + equip_cooldown = 12 + name = "jury-rigged xray rifle" + desc = "A modified wormhole modulation array and meson-scanning control system allow this abomination to produce concentrated blasts of xrays." + energy_drain = 175 + icon_state = "mecha_xray-rig" + + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser - equip_cooldown = 30 + equip_cooldown = 15 name = "jury-rigged welder-laser" desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times." - icon_state = "mecha_laser" - energy_drain = 80 + icon_state = "mecha_laser-rig" + energy_drain = 60 projectile = /obj/item/projectile/beam fire_sound = 'sound/weapons/Laser.ogg' required_type = list(/obj/mecha/combat, /obj/mecha/working) + equip_type = EQUIP_UTILITY + + origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2, TECH_MAGNET = 2) + /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy equip_cooldown = 15 name = "\improper CH-LC \"Solaris\" laser cannon" + desc = "In the Solaris, the lasing medium is enclosed in a tube lined with plutonium-239 and subjected to extreme neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with massive laser volumes!" icon_state = "mecha_laser" energy_drain = 60 projectile = /obj/item/projectile/beam/heavylaser fire_sound = 'sound/weapons/lasercannonfire.ogg' + origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 4, TECH_MAGNET = 4) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged + equip_cooldown = 25 + name = "jury-rigged emitter cannon" + desc = "While not regulation, this mining tool can be used as an inefficient weapon on working exo-suits in desperate, or malicious, times." + icon_state = "mecha_emitter" + energy_drain = 80 + projectile = /obj/item/projectile/beam/heavylaser/fakeemitter + fire_sound = 'sound/weapons/emitter.ogg' + + equip_type = EQUIP_UTILITY + + origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4, TECH_PHORON = 3, TECH_ILLEGAL = 1) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/phase + equip_cooldown = 6 + name = "\improper NT-PE \"Scorpio\" phase-emitter" + desc = "A specialist energy weapon intended for use against hostile wildlife." + description_fluff = "Essentially an Orion mounted inside a modified Gaia case." + icon_state = "mecha_phase" + energy_drain = 25 + projectile = /obj/item/projectile/energy/phase/heavy + fire_sound = 'sound/weapons/Taser.ogg' + + equip_type = EQUIP_UTILITY + + origin_tech = list(TECH_MATERIAL = 1, TECH_COMBAT = 2, TECH_MAGNET = 2) + /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion equip_cooldown = 40 name = "mkIV ion heavy cannon" + desc = "An upscaled variant of anti-mechanical weaponry constructed by NT, such as the EW Halicon." icon_state = "mecha_ion" energy_drain = 120 projectile = /obj/item/projectile/ion fire_sound = 'sound/weapons/Laser.ogg' + origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 4, TECH_MAGNET = 4) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged + equip_cooldown = 30 + name = "jury-rigged ion cannon" + desc = "A tesla coil modified to amplify an ionic wave, and use it as a projectile." + icon_state = "mecha_ion-rig" + energy_drain = 100 + projectile = /obj/item/projectile/ion/pistol + + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse equip_cooldown = 30 name = "eZ-13 mk2 heavy pulse rifle" + desc = "An experimental Anti-Everything weapon." icon_state = "mecha_pulse" energy_drain = 120 origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 6, TECH_POWER = 4) @@ -104,30 +203,42 @@ icon_state = "pulse1_bl" var/life = 20 - Bump(atom/A) - A.bullet_act(src, def_zone) - src.life -= 10 - if(life <= 0) - qdel(src) - return +/obj/item/projectile/beam/pulse/heavy/Bump(atom/A) + A.bullet_act(src, def_zone) + src.life -= 10 + if(life <= 0) + qdel(src) + return /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser name = "\improper PBT \"Pacifier\" mounted taser" + desc = "A large taser of similar design as those used in standard NT turrets, for use on an Exosuit." icon_state = "mecha_taser" energy_drain = 20 equip_cooldown = 8 projectile = /obj/item/projectile/beam/stun fire_sound = 'sound/weapons/Taser.ogg' +/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged + name = "jury-rigged static rifle" + desc = "A vaguely functional taser analog, inside an extinguisher casing." + icon_state = "mecha_taser-rig" + energy_drain = 30 + projectile = /obj/item/projectile/beam/stun/weak + + equip_type = EQUIP_UTILITY /obj/item/mecha_parts/mecha_equipment/weapon/honker name = "sound emission device" + desc = "A perfectly normal bike-horn, for your exosuit." icon_state = "mecha_honker" energy_drain = 300 equip_cooldown = 150 origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 4, TECH_ILLEGAL = 1) -/obj/item/mecha_parts/mecha_equipment/honker/action(target) + equip_type = EQUIP_SPECIAL + +/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target) if(!chassis) return 0 if(energy_drain && chassis.get_charge() < energy_drain) @@ -159,51 +270,98 @@ name = "general ballisic weapon" var/projectile_energy_cost - get_equip_info() - return "[..()]\[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() + return "[..()]\[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" - proc/rearm() - if(projectiles < initial(projectiles)) - var/projectiles_to_add = initial(projectiles) - projectiles - while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add) - projectiles++ - projectiles_to_add-- - chassis.use_power(projectile_energy_cost) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - log_message("Rearmed [src.name].") - return +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/proc/rearm() + if(projectiles < initial(projectiles)) + var/projectiles_to_add = initial(projectiles) - projectiles + while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add) + projectiles++ + projectiles_to_add-- + chassis.use_power(projectile_energy_cost) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + log_message("Rearmed [src.name].") + return - Topic(href, href_list) - ..() - if (href_list["rearm"]) - src.rearm() - return +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list) + ..() + if (href_list["rearm"]) + src.rearm() + return +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar + name = "\improper HEP RC 4 \"Skyfall\"" + desc = "A Hephaestus exosuit-mounted mortar for use on planetary-or-similar bodies." + description_info = "This weapon cannot be fired indoors, underground, or on-station." + icon_state = "mecha_mortar" + equip_cooldown = 30 + fire_sound = 'sound/weapons/cannon.ogg' + fire_volume = 100 + projectiles = 3 + deviation = 0.6 + projectile = /obj/item/projectile/arc/fragmentation/mortar + projectile_energy_cost = 600 + + origin_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 5, TECH_ILLEGAL = 3) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar/action_checks(atom/target) + var/turf/MT = get_turf(chassis) + var/turf/TT = get_turf(target) + if(!MT.outdoors || !TT.outdoors) + to_chat(chassis.occupant, "\The [src]'s control system prevents you from firing due to a blocked firing arc.") + return 0 + return ..() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot name = "\improper LBX AC 10 \"Scattershot\"" + desc = "A massive shotgun designed to fill a large area with pellets." icon_state = "mecha_scatter" equip_cooldown = 20 - projectile = /obj/item/projectile/bullet/pistol/medium - fire_sound = 'sound/weapons/Gunshot.ogg' + projectile = /obj/item/projectile/bullet/pellet/shotgun/flak + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' fire_volume = 80 projectiles = 40 projectiles_per_shot = 4 deviation = 0.7 projectile_energy_cost = 25 + origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 4) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot/rigged + name = "jury-rigged shrapnel cannon" + desc = "The remains of some unfortunate RCD now doomed to kill, rather than construct." + icon_state = "mecha_scatter-rig" + equip_cooldown = 30 + fire_volume = 100 + projectiles = 20 + deviation = 1 + + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg name = "\improper Ultra AC 2" + desc = "A superior version of the standard Solgov Autocannon MK2 design." icon_state = "mecha_uac2" equip_cooldown = 10 projectile = /obj/item/projectile/bullet/pistol/medium fire_sound = 'sound/weapons/machinegun.ogg' - projectiles = 300 + projectiles = 30 //10 bursts, matching the Scattershot's 10. Also, conveniently, doesn't eat your powercell when reloading like 300 bullets does. projectiles_per_shot = 3 deviation = 0.3 projectile_energy_cost = 20 fire_cooldown = 2 +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged + name = "jury-rigged machinegun" + desc = "The cross between a jackhammer and a whole lot of zipguns." + icon_state = "mecha_uac2-rig" + equip_cooldown = 12 + projectile = /obj/item/projectile/bullet/pistol + deviation = 0.5 + + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack var/missile_speed = 2 var/missile_range = 30 @@ -213,6 +371,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare name = "\improper BNI Flare Launcher" + desc = "A flare-gun, but bigger." icon_state = "mecha_flaregun" projectile = /obj/item/device/flashlight/flare fire_sound = 'sound/weapons/tablehit1.ogg' @@ -224,6 +383,8 @@ missile_range = 15 required_type = /obj/mecha //Why restrict it to just mining or combat mechs? + equip_type = EQUIP_UTILITY + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc) var/obj/item/device/flashlight/flare/fired = AM fired.ignite() @@ -231,6 +392,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive name = "\improper SRM-8 missile rack" + desc = "A missile battery that holds eight missiles." icon_state = "mecha_missilerack" projectile = /obj/item/missile fire_sound = 'sound/weapons/rpg.ogg' @@ -248,17 +410,40 @@ icon_state = "missile" var/primed = null throwforce = 15 + var/devastation = 0 + var/heavy_blast = 1 + var/light_blast = 2 + var/flash_blast = 4 - throw_impact(atom/hit_atom) - if(primed) - explosion(hit_atom, 0, 1, 2, 4) - qdel(src) - else - ..() - return +/obj/item/missile/proc/warhead_special(var/target) + explosion(target, devastation, heavy_blast, light_blast, flash_blast) + return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang +/obj/item/missile/throw_impact(atom/hit_atom) + if(primed) + warhead_special(hit_atom) + qdel(src) + else + ..() + return + +/obj/item/missile/light + throwforce = 10 + heavy_blast = 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/rigged + name = "jury-rigged rocket pod" + desc = "A series of pipes, tubes, and cables that resembles a rocket pod." + icon_state = "mecha_missilerack-rig" + projectile = /obj/item/missile/light + projectiles = 3 + projectile_energy_cost = 800 + + equip_type = EQUIP_UTILITY + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade name = "\improper SGL-6 grenade launcher" + desc = "A grenade launcher produced for SWAT use; fires flashbangs." icon_state = "mecha_grenadelnchr" projectile = /obj/item/weapon/grenade/flashbang fire_sound = 'sound/effects/bang.ogg' @@ -268,22 +453,65 @@ equip_cooldown = 60 var/det_time = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/Fire(atom/movable/AM, atom/target, turf/aimloc) - ..() - var/obj/item/weapon/grenade/flashbang/F = AM - spawn(det_time) - F.prime() +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged + name = "jury-rigged pneumatic flashlauncher" + desc = "A grenade launcher constructed out of estranged blueprints; fires flashbangs." + icon_state = "mecha_grenadelnchr-rig" + projectiles = 3 + missile_speed = 1 + det_time = 25 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/Fire(atom/movable/AM, atom/target, turf/aimloc) + var/obj/item/weapon/grenade/G = AM + if(istype(G)) + G.det_time = det_time + G.activate(chassis.occupant) //Grenades actually look primed and dangerous, handle their own stuff. + AM.throw_at(target,missile_range, missile_speed, chassis) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang//Because I am a heartless bastard -Sieve name = "\improper SOP-6 grenade launcher" + desc = "A grenade launcher produced for use by government uprising subjugation forces, or that's what you might guess; fires matryoshka flashbangs." projectile = /obj/item/weapon/grenade/flashbang/clusterbang -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload + origin_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload return "* [chassis.selected==src?"":""][src.name][chassis.selected==src?"":""]\[[src.projectiles]\]" -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/rearm() +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang/limited/rearm() return//Extra bit of security +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/concussion + name = "\improper SGL-9 grenade launcher" + desc = "A military-grade grenade launcher that fires disorienting concussion grenades." + icon_state = "mecha_grenadelnchr" + projectile = /obj/item/weapon/grenade/concussion + missile_speed = 1 + projectile_energy_cost = 900 + equip_cooldown = 50 + det_time = 25 + + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_ILLEGAL = 1) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag + name = "\improper HEP-I 5 grenade launcher" + desc = "A military-grade grenade launcher that fires anti-personnel fragmentation grenades." + icon_state = "mecha_fraglnchr" + projectile = /obj/item/weapon/grenade/explosive + projectiles = 4 + missile_speed = 1 + + origin_tech = list(TECH_COMBAT = 5, TECH_ENGINEERING = 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag/mini + name = "\improper HEP-MI 6 grenade launcher" + desc = "A military-grade grenade launcher that fires miniaturized anti-personnel fragmentation grenades." + projectile = /obj/item/weapon/grenade/explosive/mini + projectile_energy_cost = 500 + equip_cooldown = 25 + + origin_tech = list(TECH_COMBAT = 4, TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_ILLEGAL = 2) + ////////////// //Fire-based// ////////////// @@ -320,6 +548,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged name = "\improper AA-CR-1 Mark 4" description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged." + icon_state = "mecha_cremate-rig" energy_drain = 50 required_type = list(/obj/mecha/combat, /obj/mecha/working) @@ -328,6 +557,8 @@ origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2) + equip_type = EQUIP_UTILITY + ////////////// //Defensive// ////////////// @@ -343,6 +574,8 @@ var/shock_damage = 15 var/active + equip_type = EQUIP_HULL + /obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"]) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 958f31bbd2..c289d79c69 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -103,7 +103,7 @@ if(current) data["builtperc"] = round((progress / current.time) * 100) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "mechfab.tmpl", "Exosuit Fabricator UI", 800, 600) ui.set_initial_data(data) diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index c8e1d61179..f6872478e0 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -113,7 +113,7 @@ if(current) data["builtperc"] = round((progress / current.time) * 100) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "mechfab.tmpl", "Prosthetics Fab UI", 800, 600) ui.set_initial_data(data) @@ -150,7 +150,7 @@ /obj/machinery/pros_fabricator/attackby(var/obj/item/I, var/mob/user) if(busy) - user << "\The [src] is busy. Please wait for completion of previous operation." + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return 1 if(default_deconstruction_screwdriver(user, I)) return @@ -162,20 +162,20 @@ if(istype(I,/obj/item/weapon/disk/limb)) var/obj/item/weapon/disk/limb/D = I if(!D.company || !(D.company in all_robolimbs)) - user << "This disk seems to be corrupted!" + to_chat(user, "This disk seems to be corrupted!") else - user << "Installing blueprint files for [D.company]..." + to_chat(user, "Installing blueprint files for [D.company]...") if(do_after(user,50,src)) var/datum/robolimb/R = all_robolimbs[D.company] R.unavailable_to_build = 0 - user << "Installed [D.company] blueprints!" + to_chat(user, "Installed [D.company] blueprints!") qdel(I) return if(istype(I,/obj/item/stack/material)) var/obj/item/stack/material/S = I if(!(S.material.name in materials)) - user << "The [src] doesn't accept [S.material]!" + to_chat(user, "The [src] doesn't accept [S.material]!") return var/sname = "[S.name]" @@ -190,10 +190,10 @@ materials[S.material.name] += amnt S.use(1) count++ - user << "You insert [count] [sname] into the fabricator." + to_chat(user, "You insert [count] [sname] into the fabricator.") update_busy() else - user << "The fabricator cannot hold more [sname]." + to_chat(user, "The fabricator cannot hold more [sname].") return diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index 5173f182ce..eee1ecefdb 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -45,8 +45,8 @@ var/obj/mecha/R = O if(R && R.occupant) R.occupant << block_message - else if(istype(O, /obj/vehicle/train/cargo/engine)) - var/obj/vehicle/train/cargo/engine/E = O + else if(istype(O, /obj/vehicle/train/engine)) + var/obj/vehicle/train/engine/E = O if(E && E.load && E.is_train_head()) E.load << block_message diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 360c9e1bbf..d3bdbb4158 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -24,6 +24,7 @@ var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/step_energy_drain = 10 var/health = 300 //health is health + var/maxhealth = 300 //maxhealth is maxhealth. var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. //the values in this list show how much damage will pass through, not how much will be absorbed. var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) @@ -66,8 +67,23 @@ var/list/equipment = new var/obj/item/mecha_parts/mecha_equipment/selected - var/max_equip = 3 + var/max_equip = 2 var/datum/events/events +//mechaequipt2 stuffs + var/list/hull_equipment = new + var/list/weapon_equipment = new + var/list/utility_equipment = new + var/list/universal_equipment = new + var/list/special_equipment = new + var/max_hull_equip = 2 + var/max_weapon_equip = 2 + var/max_utility_equip = 2 + var/max_universal_equip = 2 + var/max_special_equip = 1 +//Working exosuit vars + var/list/cargo = list() + var/cargo_capacity = 3 + /obj/mecha/drain_power(var/drain_check) @@ -99,10 +115,24 @@ mechas_list += src //global mech list return +/obj/mecha/Exit(atom/movable/O) + if(O in cargo) + return 0 + return ..() + /obj/mecha/Destroy() src.go_out() - for(var/mob/M in src) //Let's just be ultra sure - M.Move(loc) + for(var/mob/M in src) //Be Extra Sure + M.forceMove(get_turf(src)) + M.loc.Entered(M) + if(M != src.occupant) + step_rand(M) + for(var/atom/movable/A in src.cargo) + A.forceMove(get_turf(src)) + var/turf/T = get_turf(A) + if(T) + T.Entered(A) + step_rand(A) if(loc) loc.Exited(src) @@ -112,6 +142,11 @@ if(wreckage) var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc) + hull_equipment.Cut() + weapon_equipment.Cut() + utility_equipment.Cut() + universal_equipment.Cut() + special_equipment.Cut() for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) if(E.salvageable && prob(30)) WR.crowbar_salvage += E @@ -139,11 +174,11 @@ cell = null internal_tank = null - qdel_null(pr_int_temp_processor) - qdel_null(pr_inertial_movement) - qdel_null(pr_give_air) - qdel_null(pr_internal_damage) - qdel_null(spark_system) + QDEL_NULL(pr_int_temp_processor) + QDEL_NULL(pr_inertial_movement) + QDEL_NULL(pr_give_air) + QDEL_NULL(pr_internal_damage) + QDEL_NULL(spark_system) mechas_list -= src //global mech list . = ..() @@ -360,6 +395,7 @@ return domove(direction) /obj/mecha/proc/domove(direction) + return call((proc_res["dyndomove"]||src), "dyndomove")(direction) /obj/mecha/proc/dyndomove(direction) @@ -388,6 +424,12 @@ return 1 return 0 +/obj/mecha/proc/handle_equipment_movement() + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + if(ME.chassis == src) //Sanity + ME.handle_movement_action() + return + /obj/mecha/proc/mechturn(direction) set_dir(direction) playsound(src,'sound/mecha/mechturn.ogg',40,1) @@ -397,6 +439,7 @@ var/result = step(src,direction) if(result) playsound(src,"mechstep",40,1) + handle_equipment_movement() return result @@ -404,6 +447,7 @@ var/result = step_rand(src) if(result) playsound(src,"mechstep",40,1) + handle_equipment_movement() return result /obj/mecha/Bump(var/atom/obstacle) @@ -719,7 +763,7 @@ user << "Invalid ID: Access denied." else user << "Maintenance protocols disabled by operator." - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(state==1) state = 2 user << "You undo the securing bolts." @@ -727,7 +771,7 @@ state = 1 user << "You tighten the securing bolts." return - else if(istype(W, /obj/item/weapon/crowbar)) + else if(W.is_crowbar()) if(state==2) state = 3 user << "You open the hatch to the power unit" @@ -744,7 +788,7 @@ else user << "There's not enough wire to finish the task." return - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(hasInternalDamage(MECHA_INT_TEMP_CONTROL)) clearInternalDamage(MECHA_INT_TEMP_CONTROL) user << "You repair the damaged temperature controller." @@ -1348,6 +1392,14 @@ Lights: [lights?"on":"off"]
[src.dna?"DNA-locked:
[src.dna] \[Reset\]
":null] "} +//Cargo components. + output += "Cargo Compartment Contents:
" + if(src.cargo.len) + for(var/obj/O in src.cargo) + output += "Unload : [O]
" + else + output += "Nothing" + output += "
" return output /obj/mecha/proc/get_commands() @@ -1396,10 +1448,23 @@ output += {"
Equipment
" + for(var/obj/item/mecha_parts/mecha_equipment/W in hull_equipment) + output += "Hull Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in weapon_equipment) + output += "Weapon Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in utility_equipment) + output += "Utility Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in universal_equipment) + output += "Universal Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in special_equipment) + output += "Special Module: [W.name] Detach
" + output += {"Available hull slots: [max_hull_equip-hull_equipment.len]
+ Available weapon slots: [max_weapon_equip-weapon_equipment.len]
+ Available utility slots: [max_utility_equip-utility_equipment.len]
+ Available universal slots: [max_universal_equip-universal_equipment.len]
+ Available special slots: [max_special_equip-special_equipment.len]
+ + "} return output /obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html @@ -1673,6 +1738,17 @@ else src.occupant_message("Recalibration failed.") src.log_message("Recalibration of coordination system failed with 1 error.",1) + if(href_list["drop_from_cargo"]) + var/obj/O = locate(href_list["drop_from_cargo"]) + if(O && O in src.cargo) + src.occupant_message("You unload [O].") + O.forceMove(get_turf(src)) + src.cargo -= O + var/turf/T = get_turf(O) + if(T) + T.Entered(O) + src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") + return //debug /* @@ -1810,81 +1886,82 @@ /datum/global_iterator/mecha_tank_give_air delay = 15 - process(var/obj/mecha/mecha) - if(mecha.internal_tank) - var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/cabin_air = mecha.cabin_air +/datum/global_iterator/mecha_tank_give_air/process(var/obj/mecha/mecha) + if(mecha.internal_tank) + var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air() + var/datum/gas_mixture/cabin_air = mecha.cabin_air - var/release_pressure = mecha.internal_tank_valve - var/cabin_pressure = cabin_air.return_pressure() - var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) - var/transfer_moles = 0 - if(pressure_delta > 0) //cabin pressure lower than release pressure - if(tank_air.temperature > 0) - transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) - cabin_air.merge(removed) - else if(pressure_delta < 0) //cabin pressure higher than release pressure - var/datum/gas_mixture/t_air = mecha.get_turf_air() - pressure_delta = cabin_pressure - release_pressure + var/release_pressure = mecha.internal_tank_valve + var/cabin_pressure = cabin_air.return_pressure() + var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) + var/transfer_moles = 0 + if(pressure_delta > 0) //cabin pressure lower than release pressure + if(tank_air.temperature > 0) + transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) + cabin_air.merge(removed) + else if(pressure_delta < 0) //cabin pressure higher than release pressure + var/datum/gas_mixture/t_air = mecha.get_turf_air() + pressure_delta = cabin_pressure - release_pressure + if(t_air) + pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) + if(pressure_delta > 0) //if location pressure is lower than cabin pressure + transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) if(t_air) - pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //if location pressure is lower than cabin pressure - transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we're in space or some shit - qdel(removed) - else - return stop() - return + t_air.merge(removed) + else //just delete the cabin gas, we're in space or some shit + qdel(removed) + else + return stop() + return /datum/global_iterator/mecha_intertial_movement //inertial movement in space delay = 7 - process(var/obj/mecha/mecha as obj,direction) - if(direction) - if(!step(mecha, direction)||mecha.check_for_support()) - src.stop() - else +/datum/global_iterator/mecha_intertial_movement/process(var/obj/mecha/mecha as obj,direction) + if(direction) + if(!step(mecha, direction)||mecha.check_for_support()) src.stop() - return + mecha.handle_equipment_movement() + else + src.stop() + return /datum/global_iterator/mecha_internal_damage // processing internal damage - process(var/obj/mecha/mecha) - if(!mecha.hasInternalDamage()) - return stop() - if(mecha.hasInternalDamage(MECHA_INT_FIRE)) - if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5)) - mecha.clearInternalDamage(MECHA_INT_FIRE) - if(mecha.internal_tank) - if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) - mecha.setInternalDamage(MECHA_INT_TANK_BREACH) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - if(int_tank_air && int_tank_air.volume>0) //heat the air_contents - int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) - if(mecha.cabin_air && mecha.cabin_air.volume>0) - mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.temperature+rand(10,15)) - if(mecha.cabin_air.temperature>mecha.max_temperature/2) - mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.temperature,0.1),"fire") - if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum - mecha.pr_int_temp_processor.stop() - if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank - if(mecha.internal_tank) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) - if(mecha.loc && hascall(mecha.loc,"assume_air")) - mecha.loc.assume_air(leaked_gas) - else - qdel(leaked_gas) - if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - if(mecha.get_charge()) - mecha.spark_system.start() - mecha.cell.charge -= min(20,mecha.cell.charge) - mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge) - return +/datum/global_iterator/mecha_internal_damage/process(var/obj/mecha/mecha) + if(!mecha.hasInternalDamage()) + return stop() + if(mecha.hasInternalDamage(MECHA_INT_FIRE)) + if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5)) + mecha.clearInternalDamage(MECHA_INT_FIRE) + if(mecha.internal_tank) + if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) + mecha.setInternalDamage(MECHA_INT_TANK_BREACH) + var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() + if(int_tank_air && int_tank_air.volume>0) //heat the air_contents + int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) + if(mecha.cabin_air && mecha.cabin_air.volume>0) + mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.temperature+rand(10,15)) + if(mecha.cabin_air.temperature>mecha.max_temperature/2) + mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.temperature,0.1),"fire") + if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum + mecha.pr_int_temp_processor.stop() + if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank + if(mecha.internal_tank) + var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() + var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) + if(mecha.loc && hascall(mecha.loc,"assume_air")) + mecha.loc.assume_air(leaked_gas) + else + qdel(leaked_gas) + if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) + if(mecha.get_charge()) + mecha.spark_system.start() + mecha.cell.charge -= min(20,mecha.cell.charge) + mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge) + return ///////////// diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 98e81cb83f..ce5b751e55 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -2,71 +2,73 @@ ///// Construction datums ////// //////////////////////////////// -/datum/construction/mecha/custom_action(step, atom/used_atom, mob/user) - if(istype(used_atom, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = used_atom +/datum/construction/mecha/custom_action(step, obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = I if (W.remove_fuel(0, user)) playsound(holder, 'sound/items/Welder2.ogg', 50, 1) else return 0 - else if(istype(used_atom, /obj/item/weapon/wrench)) + else if(I.is_wrench()) playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - else if(istype(used_atom, /obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - else if(istype(used_atom, /obj/item/weapon/wirecutters)) + else if(I.is_wirecutter()) playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - else if(istype(used_atom, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = used_atom + else if(istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = I if(C.use(4)) playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) else - user << ("There's not enough cable to finish the task.") + to_chat(user, "There's not enough cable to finish the task.") return 0 - else if(istype(used_atom, /obj/item/stack)) - var/obj/item/stack/S = used_atom + else if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I if(S.get_amount() < 5) - user << ("There's not enough material in this stack.") + to_chat(user, "There's not enough material in this stack.") return 0 else S.use(5) return 1 -/datum/construction/reversible/mecha/custom_action(index as num, diff as num, atom/used_atom, mob/user as mob) - if(istype(used_atom, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = used_atom +/datum/construction/reversible/mecha/custom_action(index as num, diff as num, obj/item/I, mob/user as mob) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = I if (W.remove_fuel(0, user)) playsound(holder, 'sound/items/Welder2.ogg', 50, 1) else return 0 - else if(istype(used_atom, /obj/item/weapon/wrench)) + else if(I.is_wrench()) playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - else if(istype(used_atom, /obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - else if(istype(used_atom, /obj/item/weapon/wirecutters)) + else if(I.is_wirecutter()) playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - else if(istype(used_atom, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = used_atom + else if(istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = I if(C.use(4)) playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) else - user << ("There's not enough cable to finish the task.") + to_chat(user, "There's not enough cable to finish the task.") return 0 - else if(istype(used_atom, /obj/item/stack)) - var/obj/item/stack/S = used_atom + else if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I if(S.get_amount() < 5) - user << ("There's not enough material in this stack.") + to_chat(user, "There's not enough material in this stack.") return 0 else S.use(5) return 1 - +////////////////////// +// Ripley +////////////////////// /datum/construction/mecha/ripley_chassis steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 @@ -75,25 +77,25 @@ list("key"=/obj/item/mecha_parts/part/ripley_right_leg)//5 ) - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - qdel(used_atom) - return 1 +/datum/construction/mecha/ripley_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) +/datum/construction/mecha/ripley_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) - spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "ripley0" - const_holder.density = 1 - const_holder.overlays.len = 0 - spawn() - qdel(src) - return +/datum/construction/mecha/ripley_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "ripley0" + const_holder.density = 1 + const_holder.overlays.len = 0 + spawn() + qdel(src) + return /datum/construction/reversible/mecha/ripley @@ -101,11 +103,11 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/stack/material/plasteel, @@ -113,170 +115,171 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //8 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //10 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //11 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //12 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //14 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) - action(atom/used_atom,mob/user as mob) - return check_step(used_atom,user) +/datum/construction/reversible/mecha/ripley/action(obj/item/I,mob/user as mob) + return check_step(I,user) - custom_action(index, diff, atom/used_atom, mob/user) - if(!..()) - return 0 +/datum/construction/reversible/mecha/ripley/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 - //TODO: better messages. - switch(index) - if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + //TODO: better messages. + switch(index) + if(14) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "ripley1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "ripley2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "ripley0" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "ripley3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") holder.icon_state = "ripley1" - if(13) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "ripley2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "ripley0" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "ripley3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "ripley1" - if(11) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "ripley4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "ripley2" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(used_atom) - holder.icon_state = "ripley5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "ripley3" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "ripley6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "ripley4" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(used_atom) - holder.icon_state = "ripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "ripley5" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "ripley8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "ripley6" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "ripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "ripley7" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "ripley10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "ripley8" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "ripley11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "ripley9" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") - holder.icon_state = "ripley12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "ripley10" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "ripley13" - else - user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "ripley11" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "ripley12" - return 1 - - spawn_result() - ..() - feedback_inc("mecha_ripley_created",1) - return - + if(11) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "ripley4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "ripley2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "ripley5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "ripley3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "ripley6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) + holder.icon_state = "ripley4" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "ripley7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "ripley5" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "ripley8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) + holder.icon_state = "ripley6" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "ripley9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "ripley7" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "ripley10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "ripley8" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "ripley11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "ripley9" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "ripley12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "ripley10" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "ripley13" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "ripley11" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "ripley12" + return 1 +/datum/construction/reversible/mecha/ripley/spawn_result() + ..() + feedback_inc("mecha_ripley_created",1) + return +////////////////////// +// Gygax +////////////////////// /datum/construction/mecha/gygax_chassis steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1 list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2 @@ -286,24 +289,24 @@ list("key"=/obj/item/mecha_parts/part/gygax_head) ) - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - qdel(used_atom) - return 1 +/datum/construction/mecha/gygax_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) +/datum/construction/mecha/gygax_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) - spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "gygax0" - const_holder.density = 1 - spawn() - qdel(src) - return +/datum/construction/mecha/gygax_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "gygax0" + const_holder.density = 1 + spawn() + qdel(src) + return /datum/construction/reversible/mecha/gygax @@ -311,11 +314,11 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/mecha_parts/part/gygax_armour, @@ -323,240 +326,243 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced capacitor is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced capacitor is installed"), //8 list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced scanner module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced scanner module is installed"), //10 list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Targeting module is secured"), //11 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Targeting module is installed"), //12 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/targeting, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //14 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //15 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //16 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //17 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //18 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //19 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //20 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) - action(atom/used_atom,mob/user as mob) - return check_step(used_atom,user) +/datum/construction/reversible/mecha/gygax/action(obj/item/I,mob/user as mob) + return check_step(I,user) - custom_action(index, diff, atom/used_atom, mob/user) - if(!..()) - return 0 +/datum/construction/reversible/mecha/gygax/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 - //TODO: better messages. - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "gygax1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "gygax2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "gygax0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "gygax3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") holder.icon_state = "gygax1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "gygax2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "gygax0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "gygax3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "gygax4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "gygax2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(used_atom) - holder.icon_state = "gygax5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "gygax3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "gygax6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) - holder.icon_state = "gygax4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(used_atom) - holder.icon_state = "gygax7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "gygax5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "gygax8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) - holder.icon_state = "gygax6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(used_atom) - holder.icon_state = "gygax9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "gygax7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "gygax10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder)) - holder.icon_state = "gygax8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(used_atom) - holder.icon_state = "gygax11" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "gygax9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "gygax12" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "gygax10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(used_atom) - holder.icon_state = "gygax13" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "gygax11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "gygax14" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "gygax12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "gygax15" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "gygax13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "gygax16" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "gygax14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "gygax17" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "gygax15" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].") - qdel(used_atom) - holder.icon_state = "gygax18" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "gygax16" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.") - holder.icon_state = "gygax19" - else - user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].") - new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder)) - holder.icon_state = "gygax17" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].") - else - user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.") - holder.icon_state = "gygax18" - return 1 + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "gygax4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "gygax2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "gygax5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "gygax3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "gygax6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) + holder.icon_state = "gygax4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "gygax7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "gygax5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "gygax8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) + holder.icon_state = "gygax6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "gygax9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "gygax7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "gygax10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder)) + holder.icon_state = "gygax8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "gygax11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "gygax9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "gygax12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "gygax10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "gygax13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "gygax11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "gygax14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "gygax12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "gygax15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "gygax13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "gygax16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "gygax14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "gygax17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "gygax15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].") + qdel(I) + holder.icon_state = "gygax18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "gygax16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.") + holder.icon_state = "gygax19" + else + user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].") + new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder)) + holder.icon_state = "gygax17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].") + else + user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.") + holder.icon_state = "gygax18" + return 1 - spawn_result() - ..() - feedback_inc("mecha_gygax_created",1) - return +/datum/construction/reversible/mecha/gygax/spawn_result() + ..() + feedback_inc("mecha_gygax_created",1) + return +//////////////////////// +// Firfighter +//////////////////////// /datum/construction/mecha/firefighter_chassis steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 @@ -566,25 +572,25 @@ list("key"=/obj/item/clothing/suit/fire)//6 ) - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - user.drop_item() - qdel(used_atom) - return 1 +/datum/construction/mecha/firefighter_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + user.drop_item() + qdel(I) + return 1 - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) +/datum/construction/mecha/firefighter_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) - spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/firefighter(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "fireripley0" - const_holder.density = 1 - spawn() - qdel(src) - return +/datum/construction/mecha/firefighter_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/firefighter(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "fireripley0" + const_holder.density = 1 + spawn() + qdel(src) + return /datum/construction/reversible/mecha/firefighter @@ -592,15 +598,15 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/stack/material/plasteel, - "backkey"=/obj/item/weapon/crowbar, + "backkey"=IS_CROWBAR, "desc"="External armor is being installed."), //4 list("key"=/obj/item/stack/material/plasteel, @@ -608,179 +614,180 @@ "desc"="Internal armor is welded."), //5 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //6 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), - //7 list("key"=/obj/item/stack/material/plasteel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //8 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //9 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //10 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //11 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //12 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //13 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //14 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //15 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) - action(atom/used_atom,mob/user as mob) - return check_step(used_atom,user) +/datum/construction/reversible/mecha/firefighter/action(obj/item/I,mob/user as mob) + return check_step(I,user) - custom_action(index, diff, atom/used_atom, mob/user) - if(!..()) - return 0 +/datum/construction/reversible/mecha/firefighter/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 - //TODO: better messages. - switch(index) - if(15) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + //TODO: better messages. + switch(index) + if(15) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "fireripley1" + if(14) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "fireripley2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "fireripley0" + if(13) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "fireripley3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") holder.icon_state = "fireripley1" - if(14) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "fireripley2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "fireripley0" - if(13) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "fireripley3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "fireripley1" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "fireripley4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "fireripley2" - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(used_atom) - holder.icon_state = "fireripley5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "fireripley3" - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "fireripley6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "fireripley4" - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(used_atom) - holder.icon_state = "fireripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "fireripley5" - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "fireripley8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "fireripley6" - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "fireripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "fireripley7" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "fireripley4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "fireripley2" + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "fireripley5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "fireripley3" + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "fireripley6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) + holder.icon_state = "fireripley4" + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "fireripley7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "fireripley5" + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "fireripley8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) + holder.icon_state = "fireripley6" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "fireripley9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "fireripley7" + if(6) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "fireripley10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "fireripley8" + if(5) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "fireripley11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "fireripley9" + if(4) + if(diff==FORWARD) + user.visible_message("[user] starts to install the external armor layer to [holder].", "You start to install the external armor layer to [holder].") + holder.icon_state = "fireripley12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "fireripley10" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "fireripley13" + else + user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "fireripley11" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "fireripley14" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "fireripley12" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "fireripley13" + return 1 - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "fireripley10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley8" - if(5) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "fireripley11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "fireripley9" - if(4) - if(diff==FORWARD) - user.visible_message("[user] starts to install the external armor layer to [holder].", "You start to install the external armor layer to [holder].") - holder.icon_state = "fireripley12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "fireripley10" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") - holder.icon_state = "fireripley13" - else - user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley11" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "fireripley14" - else - user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley12" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "fireripley13" - return 1 - - spawn_result() - ..() - feedback_inc("mecha_firefighter_created",1) - return +/datum/construction/reversible/mecha/firefighter/spawn_result() + ..() + feedback_inc("mecha_firefighter_created",1) + return +////////////////////// +// Durand +////////////////////// /datum/construction/mecha/durand_chassis steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso),//1 list("key"=/obj/item/mecha_parts/part/durand_left_arm),//2 @@ -790,35 +797,36 @@ list("key"=/obj/item/mecha_parts/part/durand_head) ) - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - qdel(used_atom) - return 1 +/datum/construction/mecha/durand_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) +/datum/construction/mecha/durand_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/durand_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/durand(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "durand0" + const_holder.density = 1 + spawn() + qdel(src) + return - spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/durand(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "durand0" - const_holder.density = 1 - spawn() - qdel(src) - return /datum/construction/reversible/mecha/durand result = "/obj/mecha/combat/durand" steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/mecha_parts/part/durand_armour, @@ -826,242 +834,456 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced capacitor is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced capacitor is installed"), //8 list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced scanner module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced scanner module is installed"), //10 list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Targeting module is secured"), //11 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Targeting module is installed"), //12 list("key"=/obj/item/weapon/circuitboard/mecha/durand/targeting, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //14 list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //15 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //16 list("key"=/obj/item/weapon/circuitboard/mecha/durand/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //17 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //18 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //19 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //20 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) - action(atom/used_atom,mob/user as mob) - return check_step(used_atom,user) +/datum/construction/reversible/mecha/durand/action(obj/item/I,mob/user as mob) + return check_step(I,user) - custom_action(index, diff, atom/used_atom, mob/user) - if(!..()) - return 0 +/datum/construction/reversible/mecha/durand/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 - //TODO: better messages. - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "durand1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "durand2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "durand0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "durand3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") holder.icon_state = "durand1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "durand2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "durand0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "durand3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "durand1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "durand4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "durand2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(used_atom) - holder.icon_state = "durand5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "durand3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "durand6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/main(get_turf(holder)) - holder.icon_state = "durand4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(used_atom) - holder.icon_state = "durand7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "durand5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "durand8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) - holder.icon_state = "durand6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(used_atom) - holder.icon_state = "durand9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "durand7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "durand10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/targeting(get_turf(holder)) - holder.icon_state = "durand8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(used_atom) - holder.icon_state = "durand11" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "durand9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "durand12" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "durand10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(used_atom) - holder.icon_state = "durand13" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "durand11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "durand14" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "durand12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "durand15" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "durand13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "durand16" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "durand14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "durand17" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "durand15" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].") - qdel(used_atom) - holder.icon_state = "durand18" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "durand16" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.") - holder.icon_state = "durand19" - else - user.visible_message("[user] pries Durand Armour Plates from [holder].", "You prie Durand Armour Plates from [holder].") - new /obj/item/mecha_parts/part/durand_armour(get_turf(holder)) - holder.icon_state = "durand17" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].") - else - user.visible_message("[user] unfastens Durand Armour Plates.", "You unfasten Durand Armour Plates.") - holder.icon_state = "durand18" - return 1 + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "durand4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "durand2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "durand5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "durand3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "durand6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/main(get_turf(holder)) + holder.icon_state = "durand4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "durand7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "durand5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "durand8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) + holder.icon_state = "durand6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "durand9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "durand7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "durand10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/targeting(get_turf(holder)) + holder.icon_state = "durand8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "durand11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "durand9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "durand12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "durand10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "durand13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "durand11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "durand14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "durand12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "durand15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "durand13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "durand16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "durand14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "durand17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "durand15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].") + qdel(I) + holder.icon_state = "durand18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "durand16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.") + holder.icon_state = "durand19" + else + user.visible_message("[user] pries Durand Armour Plates from [holder].", "You prie Durand Armour Plates from [holder].") + new /obj/item/mecha_parts/part/durand_armour(get_turf(holder)) + holder.icon_state = "durand17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].") + else + user.visible_message("[user] unfastens Durand Armour Plates.", "You unfasten Durand Armour Plates.") + holder.icon_state = "durand18" + return 1 - spawn_result() - ..() - feedback_inc("mecha_durand_created",1) - return +/datum/construction/reversible/mecha/durand/spawn_result() + ..() + feedback_inc("mecha_durand_created",1) + return + +//////////////////////// +// Odysseus +//////////////////////// +/datum/construction/mecha/odysseus_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1 + list("key"=/obj/item/mecha_parts/part/odysseus_head),//2 + list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3 + list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4 + list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5 + list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 + ) + +/datum/construction/mecha/odysseus_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 + +/datum/construction/mecha/odysseus_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/odysseus_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "odysseus0" + const_holder.density = 1 + spawn() + qdel(src) + return +/datum/construction/reversible/mecha/odysseus + result = "/obj/mecha/medical/odysseus" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //10 + list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //11 + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //12 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //14 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/odysseus/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/odysseus/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(14) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "odysseus1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "odysseus2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "odysseus0" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "odysseus3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "odysseus1" + if(11) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "odysseus4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "odysseus2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "odysseus5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "odysseus3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "odysseus6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder)) + holder.icon_state = "odysseus4" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "odysseus7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "odysseus5" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "odysseus8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) + holder.icon_state = "odysseus6" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "odysseus9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "odysseus7" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "odysseus10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "odysseus8" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "odysseus11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "odysseus9" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs [I] layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "odysseus12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "odysseus10" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "odysseus13" + else + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].") + holder.icon_state = "odysseus11" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + holder.icon_state = "odysseus14" + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "odysseus12" + return 1 + +/datum/construction/reversible/mecha/odysseus/spawn_result() + ..() + feedback_inc("mecha_odysseus_created",1) + return + +////////////////////// +// Phazon +////////////////////// /datum/construction/mecha/phazon_chassis result = "/obj/mecha/combat/phazon" steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso),//1 @@ -1072,224 +1294,11 @@ list("key"=/obj/item/mecha_parts/part/phazon_head) ) - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - qdel(used_atom) - return 1 +/datum/construction/mecha/phazon_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) - - - - -/datum/construction/mecha/odysseus_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1 - list("key"=/obj/item/mecha_parts/part/odysseus_head),//2 - list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3 - list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4 - list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5 - list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 - ) - - custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") - holder.overlays += used_atom.icon_state+"+o" - qdel(used_atom) - return 1 - - action(atom/used_atom,mob/user as mob) - return check_all_steps(used_atom,user) - - spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "odysseus0" - const_holder.density = 1 - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/odysseus - result = "/obj/mecha/medical/odysseus" - steps = list( - //1 - list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=/obj/item/weapon/weldingtool, - "desc"="Internal armor is welded."), - //4 - list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), - //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), - //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), - //8 - list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, - "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), - //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), - //10 - list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main, - "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), - //11 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), - //12 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, - "desc"="The hydraulic systems are active."), - //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, - "desc"="The hydraulic systems are connected."), - //14 - list("key"=/obj/item/weapon/wrench, - "desc"="The hydraulic systems are disconnected.") - ) - - action(atom/used_atom,mob/user as mob) - return check_step(used_atom,user) - - custom_action(index, diff, atom/used_atom, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(13) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "odysseus2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "odysseus0" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "odysseus3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(11) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "odysseus4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "odysseus2" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(used_atom) - holder.icon_state = "odysseus5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "odysseus3" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "odysseus6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder)) - holder.icon_state = "odysseus4" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(used_atom) - holder.icon_state = "odysseus7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "odysseus5" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "odysseus8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) - holder.icon_state = "odysseus6" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "odysseus9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "odysseus7" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "odysseus10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "odysseus8" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "odysseus11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "odysseus9" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs [used_atom] layer to [holder].", "You install external reinforced armor layer to [holder].") - - holder.icon_state = "odysseus12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "odysseus10" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "odysseus13" - else - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].") - holder.icon_state = "odysseus11" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - holder.icon_state = "odysseus14" - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "odysseus12" - return 1 - - spawn_result() - ..() - feedback_inc("mecha_odysseus_created",1) - return +/datum/construction/mecha/phazon_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) \ No newline at end of file diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 39620c4742..73cee1223b 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -34,7 +34,7 @@ if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(salvage_num <= 0) - user << "You don't see anything that can be cut with [W]." + to_chat(user, "You don't see anything that can be cut with [W].") return if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user)) var/type = prob(70)?pick(welder_salvage):null @@ -45,13 +45,13 @@ welder_salvage -= type salvage_num-- else - user << "You failed to salvage anything valuable from [src]." + to_chat(user, "You failed to salvage anything valuable from [src].") else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) if(salvage_num <= 0) - user << "You don't see anything that can be cut with [W]." + to_chat(user, "You don't see anything that can be cut with [W].") return else if(!isemptylist(wirecutters_salvage)) var/type = prob(70)?pick(wirecutters_salvage):null @@ -60,8 +60,8 @@ user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") salvage_num-- else - user << "You failed to salvage anything valuable from [src]." - if(istype(W, /obj/item/weapon/crowbar)) + to_chat(user, "You failed to salvage anything valuable from [src].") + if(W.is_crowbar()) if(!isemptylist(crowbar_salvage)) var/obj/S = pick(crowbar_salvage) if(S) @@ -70,7 +70,7 @@ user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") return else - user << "You don't see anything that can be pried with [W]." + to_chat(user, "You don't see anything that can be pried with [W].") else ..() return diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index e112f7a232..adb75800ea 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,3 +1,12 @@ +/obj/mecha/medical + max_hull_equip = 1 + max_weapon_equip = 0 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + + cargo_capacity = 1 + /obj/mecha/medical/initialize() . = ..() var/turf/T = get_turf(src) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 90577eaf64..8a1242d1a2 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -1,4 +1,4 @@ -/obj/mecha/medical/odysseus +/obj/mecha/medical/odysseus/ desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)." name = "Odysseus" icon_state = "odysseus" @@ -6,36 +6,37 @@ step_in = 2 max_temperature = 15000 health = 120 + maxhealth = 120 wreckage = /obj/effect/decal/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 step_energy_drain = 6 var/obj/item/clothing/glasses/hud/health/mech/hud - New() - ..() - hud = new /obj/item/clothing/glasses/hud/health/mech(src) - return +/obj/mecha/medical/odysseus/New() + ..() + hud = new /obj/item/clothing/glasses/hud/health/mech(src) + return - moved_inside(var/mob/living/carbon/human/H as mob) - if(..()) - if(H.glasses) - occupant_message("[H.glasses] prevent you from using [src] [hud]") - else - H.glasses = hud - H.recalculate_vis() - return 1 +/obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H as mob) + if(..()) + if(H.glasses) + occupant_message("[H.glasses] prevent you from using [src] [hud]") else - return 0 + H.glasses = hud + H.recalculate_vis() + return 1 + else + return 0 - go_out() - if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant - if(H.glasses == hud) - H.glasses = null - H.recalculate_vis() - ..() - return +/obj/mecha/medical/odysseus/go_out() + if(ishuman(occupant)) + var/mob/living/carbon/human/H = occupant + if(H.glasses == hud) + H.glasses = null + H.recalculate_vis() + ..() + return /* verb/set_perspective() set name = "Set client perspective." diff --git a/code/game/mecha/micro/mecha_construction_paths_vr.dm b/code/game/mecha/micro/mecha_construction_paths_vr.dm index 305cdfcf92..6857d7b1c4 100644 --- a/code/game/mecha/micro/mecha_construction_paths_vr.dm +++ b/code/game/mecha/micro/mecha_construction_paths_vr.dm @@ -33,11 +33,11 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/mecha_parts/micro/part/polecat_armour, @@ -45,70 +45,70 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced capacitor is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced capacitor is installed"), //8 list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced scanner module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced scanner module is installed"), //10 list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Targeting module is secured"), //11 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Targeting module is installed"), //12 list("key"=/obj/item/weapon/circuitboard/mecha/polecat/targeting, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //14 list("key"=/obj/item/weapon/circuitboard/mecha/polecat/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //15 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //16 list("key"=/obj/item/weapon/circuitboard/mecha/polecat/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //17 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //18 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //19 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //20 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) @@ -313,11 +313,11 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/stack/material/plasteel, @@ -325,46 +325,46 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //8 list("key"=/obj/item/weapon/circuitboard/mecha/gopher/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //10 list("key"=/obj/item/weapon/circuitboard/mecha/gopher/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //11 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //12 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //14 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) @@ -521,11 +521,11 @@ steps = list( //1 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="External armor is wrenched."), //2 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="External armor is installed."), //3 list("key"=/obj/item/stack/material/plasteel, @@ -533,70 +533,70 @@ "desc"="Internal armor is welded."), //4 list("key"=/obj/item/weapon/weldingtool, - "backkey"=/obj/item/weapon/wrench, + "backkey"=IS_WRENCH, "desc"="Internal armor is wrenched"), //5 - list("key"=/obj/item/weapon/wrench, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, "desc"="Internal armor is installed"), //6 list("key"=/obj/item/stack/material/steel, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced capacitor is secured"), //7 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced capacitor is installed"), //8 list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Advanced scanner module is secured"), //9 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Advanced scanner module is installed"), //10 list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Targeting module is secured"), //11 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Targeting module is installed"), //12 list("key"=/obj/item/weapon/circuitboard/mecha/weasel/targeting, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Peripherals control module is secured"), //13 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Peripherals control module is installed"), //14 list("key"=/obj/item/weapon/circuitboard/mecha/weasel/peripherals, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="Central control module is secured"), //15 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/crowbar, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, "desc"="Central control module is installed"), //16 list("key"=/obj/item/weapon/circuitboard/mecha/weasel/main, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is adjusted"), //17 - list("key"=/obj/item/weapon/wirecutters, - "backkey"=/obj/item/weapon/screwdriver, + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, "desc"="The wiring is added"), //18 list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/weapon/screwdriver, + "backkey"=IS_SCREWDRIVER, "desc"="The hydraulic systems are active."), //19 - list("key"=/obj/item/weapon/screwdriver, - "backkey"=/obj/item/weapon/wrench, + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, "desc"="The hydraulic systems are connected."), //20 - list("key"=/obj/item/weapon/wrench, + list("key"=IS_WRENCH, "desc"="The hydraulic systems are disconnected.") ) diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm index 940d7607e3..7a86d8d9ec 100644 --- a/code/game/mecha/micro/mechfab_designs_vr.dm +++ b/code/game/mecha/micro/mechfab_designs_vr.dm @@ -124,7 +124,7 @@ name = "\improper FP-20 mounted grenade launcher" id = "micro_flashbang_launcher" // req_tech = list(TECH_COMBAT = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/microflashbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/microflashbang /datum/design/item/mecha/weapon/scattershot/micro name = "\improper Remington C-12 \"Boomstick\"" diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm index b7892c32c7..805148512d 100644 --- a/code/game/mecha/micro/micro_equipment.dm +++ b/code/game/mecha/micro/micro_equipment.dm @@ -78,7 +78,7 @@ return "[..()] \[BS|BB|S\]" -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/microflashbang +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/microflashbang w_class = ITEMSIZE_LARGE desc = "A mounted grenade launcher for smaller mechs." name = "\improper FP-20 mounted grenade launcher" diff --git a/code/game/mecha/working/hoverpod.dm b/code/game/mecha/working/hoverpod.dm index b0448c69a0..8a79b5a8ac 100644 --- a/code/game/mecha/working/hoverpod.dm +++ b/code/game/mecha/working/hoverpod.dm @@ -8,6 +8,7 @@ step_energy_drain = 10 max_temperature = 20000 health = 150 + maxhealth = 150 infra_luminosity = 6 wreckage = /obj/effect/decal/mecha_wreckage/hoverpod cargo_capacity = 5 @@ -15,6 +16,12 @@ var/datum/effect/effect/system/ion_trail_follow/ion_trail var/stabilization_enabled = 1 + max_hull_equip = 2 + max_weapon_equip = 0 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + /obj/mecha/working/hoverpod/New() ..() ion_trail = new /datum/effect/effect/system/ion_trail_follow() @@ -51,7 +58,7 @@ ion_trail.start() if (stabilization_enabled) return 1 - + return ..() //these three procs overriden to play different sounds @@ -79,9 +86,15 @@ desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon. name = "Combat Hoverpod" health = 200 + maxhealth = 200 internal_damage_threshold = 35 cargo_capacity = 2 max_equip = 2 + max_hull_equip = 2 + max_weapon_equip = 2 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 /obj/mecha/working/hoverpod/combatpod/New() ..() diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 868429095a..c4813bb0dd 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -7,6 +7,7 @@ step_energy_drain = 5 // vorestation edit because 10 drained a significant chunk of its cell before you even got out the airlock max_temperature = 20000 health = 200 + maxhealth = 200 wreckage = /obj/effect/decal/mecha_wreckage/ripley cargo_capacity = 10 var/obj/item/weapon/mining_scanner/orescanner // vorestation addition @@ -22,7 +23,7 @@ ..() /obj/mecha/working/ripley/firefighter - desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." + desc = "Standard APLU chassis was refitted with additional thermal protection and cistern." name = "APLU \"Firefighter\"" icon_state = "firefighter" initial_icon = "firefighter" @@ -31,6 +32,11 @@ lights_power = 8 damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5) wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter + max_hull_equip = 2 + max_weapon_equip = 0 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 /obj/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" @@ -42,6 +48,11 @@ lights_power = 60 wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley step_energy_drain = 0 + max_hull_equip = 1 + max_weapon_equip = 1 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 /obj/mecha/working/ripley/deathripley/New() ..() diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index c890746e5b..dbdf68ce5b 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -1,7 +1,10 @@ /obj/mecha/working internal_damage_threshold = 60 - var/list/cargo = new - var/cargo_capacity = 5 + max_hull_equip = 1 + max_weapon_equip = 0 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 /obj/mecha/working/initialize() . = ..() @@ -9,6 +12,7 @@ if(isPlayerLevel(T.z)) new /obj/item/mecha_parts/mecha_tracking(src) +/* This stuff has been generalized! /obj/mecha/working/Destroy() for(var/mob/M in src) if(M==src.occupant) @@ -54,6 +58,6 @@ output += "Nothing" output += "" return output - +*/ /obj/mecha/working/range_action(atom/target as obj|mob|turf) return diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 0369b91d63..69d875d977 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -216,17 +216,17 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) - b.basecolor = src.basecolor - b.update_icon() + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) + b.basecolor = src.basecolor + b.update_icon() - if (step_to(src, get_step(src, direction), 0)) - break + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/mucus @@ -249,5 +249,5 @@ var/global/list/image/splatter_cache=list() //This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry /obj/effect/decal/cleanable/mucus/mapped/New() ..() - virus2 = new /datum/disease2/disease + virus2 |= new /datum/disease2/disease virus2.makerandom() diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 695f8d3b79..0d7370d269 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -122,7 +122,7 @@ icon_state = design.icon_state // poster[serial_number] /obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) playsound(src.loc, W.usesound, 100, 1) if(ruined) user << "You remove the remnants of the poster." diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index a1a6623ff1..9ea690318b 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -47,13 +47,13 @@ explode(M) /obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob) - if(isscrewdriver(W)) + if(W.is_screwdriver()) panel_open = !panel_open user.visible_message("[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].", "You very carefully screw the mine's panel [panel_open ? "open" : "closed"].") playsound(src.loc, W.usesound, 50, 1) - else if((iswirecutter(W) || ismultitool(W)) && panel_open) + else if((W.is_wirecutter() || istype(W, /obj/item/device/multitool)) && panel_open) interact(user) else ..() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index aaebab4355..d7db6f2a0c 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -46,4 +46,21 @@ /obj/effect/temporary_effect/shuttle_landing/initialize() flick("shuttle_warning", src) // flick() forces the animation to always begin at the start. + . = ..() + +// The manifestation of Zeus's might. Or just a really unlucky day. +// This is purely a visual effect, this isn't the part of the code that hurts things. +/obj/effect/temporary_effect/lightning_strike + name = "lightning" + desc = "How shocked you must be, to see this text. You must have lightning reflexes. \ + The humor in this description is just so electrifying." + icon = 'icons/effects/96x256.dmi' + icon_state = "lightning_strike" + plane = PLANE_LIGHTING_ABOVE + time_to_die = 1 SECOND + pixel_x = -32 + +/obj/effect/temporary_effect/lightning_strike/initialize() + icon_state += "[rand(1,2)]" // To have two variants of lightning sprites. + animate(src, alpha = 0, time = time_to_die - 1) . = ..() \ No newline at end of file diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 9f4f0fa118..7504b6e65f 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -94,3 +94,8 @@ icon_state = "snowwall" plane = MOB_PLANE layer = ABOVE_MOB_LAYER + +/obj/effect/overlay/holographic + mouse_opacity = FALSE + anchored = TRUE + plane = ABOVE_PLANE diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index a58241ada2..febfff6d0f 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -158,7 +158,14 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop /obj/effect/step_trigger/teleporter/planetary_fall var/datum/planet/planet = null +// First time setup, which planet are we aiming for? +/obj/effect/step_trigger/teleporter/planetary_fall/proc/find_planet() + return + /obj/effect/step_trigger/teleporter/planetary_fall/Trigger(var/atom/movable/A) + if(!planet) + find_planet() + if(planet) if(!planet.planet_floors.len) message_admins("ERROR: planetary_fall step trigger's list of outdoor floors was empty.") diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm new file mode 100644 index 0000000000..4e28a370f7 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -0,0 +1,46 @@ +/obj/effect/temp_visual/decoy + desc = "It's a decoy!" + duration = 15 + +/obj/effect/temp_visual/decoy/initialize(mapload, atom/mimiced_atom, var/customappearance) + . = ..() + alpha = initial(alpha) + if(mimiced_atom) + name = mimiced_atom.name + appearance = mimiced_atom.appearance + set_dir(mimiced_atom.dir) + mouse_opacity = 0 + if(customappearance) + appearance = customappearance + +/obj/effect/temp_visual/decoy/fading/initialize(mapload, atom/mimiced_atom) + . = ..() + animate(src, alpha = 0, time = duration) + +/obj/effect/temp_visual/decoy/fading/fivesecond + duration = 50 + +/obj/effect/temp_visual/small_smoke + icon_state = "smoke" + duration = 50 + +// VOREStation Add - Used by Kinetic Accelerator +/obj/effect/temp_visual/kinetic_blast + name = "kinetic explosion" + icon = 'icons/obj/projectiles.dmi' + icon_state = "kinetic_blast" + layer = ABOVE_MOB_LAYER + duration = 4 + +/obj/effect/temp_visual/explosion + name = "explosion" + icon = 'icons/effects/96x96.dmi' + icon_state = "explosion" + pixel_x = -32 + pixel_y = -32 + duration = 8 + +/obj/effect/temp_visual/explosion/fast + icon_state = "explosionfast" + duration = 4 +// VOREStation Add End diff --git a/code/game/objects/effects/temporary_visuals/temproary_visual.dm b/code/game/objects/effects/temporary_visuals/temproary_visual.dm new file mode 100644 index 0000000000..79a8797bae --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/temproary_visual.dm @@ -0,0 +1,36 @@ +//temporary visual effects +/obj/effect/temp_visual + icon = 'icons/effects/effects.dmi' + icon_state = "nothing" + anchored = TRUE + layer = ABOVE_MOB_LAYER + mouse_opacity = 0 + var/duration = 10 //in deciseconds + var/randomdir = TRUE + +/obj/effect/temp_visual/initialize() + . = ..() + if(randomdir) + set_dir(pick(cardinal)) + + spawn(duration) + qdel(src) + +/obj/effect/temp_visual/singularity_act() + return + +/obj/effect/temp_visual/singularity_pull() + return + +/obj/effect/temp_visual/ex_act() + return + +/* +/obj/effect/temp_visual/dir_setting + randomdir = FALSE + +/obj/effect/temp_visual/dir_setting/Initialize(mapload, set_dir) + if(set_dir) + setDir(set_dir) + . = ..() +*/ //More tg stuff that might be useful later diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f214242746..48b4ab08ee 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -207,6 +207,9 @@ /obj/item/attack_hand(mob/living/user as mob) if (!user) return + if(anchored) + to_chat(user, span("notice", "\The [src] won't budge, you can't pick it up!")) + return if (hasorgans(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] @@ -813,3 +816,27 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/apply_accessories(var/image/standing) return standing +/* + * Assorted tool procs, so any item can emulate any tool, if coded +*/ +/obj/item/proc/is_screwdriver() + return FALSE + +/obj/item/proc/is_wrench() + return FALSE + +/obj/item/proc/is_crowbar() + return FALSE + +/obj/item/proc/is_wirecutter() + return FALSE + +// These next three might bug out or runtime, unless someone goes back and finds a way to generalize their specific code +/obj/item/proc/is_cable_coil() + return FALSE + +/obj/item/proc/is_multitool() + return FALSE + +/obj/item/proc/is_welder() + return FALSE \ No newline at end of file diff --git a/code/game/objects/items/antag_spawners.dm b/code/game/objects/items/antag_spawners.dm index 100c113994..0d8e18373a 100644 --- a/code/game/objects/items/antag_spawners.dm +++ b/code/game/objects/items/antag_spawners.dm @@ -12,7 +12,7 @@ sparks.attach(loc) /obj/item/weapon/antag_spawner/Destroy() - qdel_null(sparks) + QDEL_NULL(sparks) return ..() /obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index fd2ea3e94b..fe40f772dd 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -9,7 +9,7 @@ /obj/item/frame/apc/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if (istype(W, /obj/item/weapon/wrench)) + if (W.is_wrench()) new /obj/item/stack/material/steel( get_turf(src.loc), 2 ) qdel(src) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 302c7df568..f79ac478b2 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -42,7 +42,7 @@ storage_capacity = (MOB_MEDIUM * 2) - 1 var/contains_body = 0 -/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob) +/obj/structure/closet/body_bag/attackby(var/obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/pen)) var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text if (user.get_active_hand() != W) @@ -58,7 +58,7 @@ src.name = "body bag" //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri return - else if(istype(W, /obj/item/weapon/wirecutters)) + else if(W.is_wirecutter()) to_chat(user, "You cut the tag off the bodybag") src.name = "body bag" src.overlays.Cut() @@ -149,8 +149,8 @@ ..() /obj/structure/closet/body_bag/cryobag/Destroy() - qdel_null(syringe) - qdel_null(tank) + QDEL_NULL(syringe) + QDEL_NULL(tank) return ..() /obj/structure/closet/body_bag/cryobag/open() @@ -239,7 +239,7 @@ inject_occupant(H) break - else if(istype(W,/obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(syringe) if(used) to_chat(user,"The injector cannot be removed now that the stasis bag has been used!") diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 968861f1e4..14c341ce34 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -467,7 +467,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) ui_tick++ - var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/old_ui = GLOB.nanomanager.get_open_ui(user, src, "main") var/auto_update = 1 if(mode in no_auto_update) auto_update = 0 @@ -647,7 +647,7 @@ var/global/list/obj/item/device/pda/PDAs = list() nanoUI = data // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one @@ -655,6 +655,7 @@ var/global/list/obj/item/device/pda/PDAs = list() ui = new(user, src, ui_key, "pda.tmpl", title, 520, 400, state = inventory_state) // add templates for screens in common with communicator. ui.add_template("atmosphericScan", "atmospheric_scan.tmpl") + ui.add_template("crewManifest", "crew_manifest.tmpl") // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window @@ -684,7 +685,7 @@ var/global/list/obj/item/device/pda/PDAs = list() ..() var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") var/mob/living/U = usr //Looking for master was kind of pointless since PDAs don't appear to have one. //if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) ) @@ -1129,7 +1130,7 @@ var/global/list/obj/item/device/pda/PDAs = list() ai.show_message("Intercepted message from [who]: [t]") P.new_message_from_pda(src, t) - nanomanager.update_user_uis(U, src) // Update the sending user's PDA UI so that they can see the new message + GLOB.nanomanager.update_user_uis(U, src) // Update the sending user's PDA UI so that they can see the new message else to_chat(U, "ERROR: Messaging server is not responding.") @@ -1149,7 +1150,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(L) if(reception_message) L << reception_message - nanomanager.update_user_uis(L, src) // Update the receiving user's PDA UI so that they can see the new message + GLOB.nanomanager.update_user_uis(L, src) // Update the receiving user's PDA UI so that they can see the new message /obj/item/device/pda/proc/new_news(var/message) new_info(news_silent, newstone, news_silent ? "" : "\icon[src] [message]") @@ -1195,7 +1196,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(can_use(usr)) mode = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) to_chat(usr, "You press the reset button on \the [src].") else to_chat(usr, "You cannot do this while restrained.") @@ -1296,7 +1297,7 @@ var/global/list/obj/item/device/pda/PDAs = list() user.drop_item() cartridge.loc = src to_chat(usr, "You insert [cartridge] into [src].") - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src if(cartridge.radio) cartridge.radio.hostpda = src @@ -1324,7 +1325,7 @@ var/global/list/obj/item/device/pda/PDAs = list() C.loc = src pai = C to_chat(user, "You slot \the [C] into \the [src].") - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src else if(istype(C, /obj/item/weapon/pen)) var/obj/item/weapon/pen/O = locate() in src if(O) @@ -1470,15 +1471,12 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/Destroy() PDAs -= src - // VOREStation Edit - Always destroy IDs - // if (src.id && prob(90)) //IDs are kept in 90% of the cases - // src.id.forceMove(get_turf(src.loc)) - // else - // qdel_null(src.id) - qdel_null(src.id) - // VOREStation Edit End - qdel_null(src.cartridge) - qdel_null(src.pai) + if (src.id && prob(100)) //IDs are kept in 90% of the cases //VOREStation Edit - 100% of the cases + src.id.forceMove(get_turf(src.loc)) + else + QDEL_NULL(src.id) + QDEL_NULL(src.cartridge) + QDEL_NULL(src.pai) return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index e13324a5f0..cf91bbef3b 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -79,7 +79,7 @@ var/list/civilian_cartridges = list( var/list/stored_data = list() /obj/item/weapon/cartridge/Destroy() - qdel_null(radio) + QDEL_NULL(radio) return ..() /obj/item/weapon/cartridge/engineering @@ -434,7 +434,7 @@ var/list/civilian_cartridges = list( for(var/S in supply_controller.shoppinglist) var/datum/supply_order/SO = S - supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment)) if(!supplyOrderData.len) supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null) @@ -443,10 +443,13 @@ var/list/civilian_cartridges = list( var/requestCount = 0 var/requestData[0] - for(var/S in supply_controller.requestlist) + for(var/S in supply_controller.order_history) var/datum/supply_order/SO = S + if(SO.status != SUP_ORDER_REQUESTED) + continue + requestCount++ - requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment)) if(!requestData.len) requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7e288dbadc..c2af338521 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -43,7 +43,7 @@ data["laws"] = laws data["has_laws"] = laws.len - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state) ui.set_initial_data(data) diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index fca4cf4866..d414232a80 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -14,7 +14,6 @@ var/im_list_ui[0] //List of messages. var/weather[0] - var/injection = null var/modules_ui[0] //Home screen info. //First we add other 'local' communicators. @@ -77,15 +76,19 @@ "Weather" = planet.weather_holder.current_weather.name, "Temperature" = planet.weather_holder.temperature - T0C, "High" = planet.weather_holder.current_weather.temp_high - T0C, - "Low" = planet.weather_holder.current_weather.temp_low - T0C) + "Low" = planet.weather_holder.current_weather.temp_low - T0C, + "Forecast" = english_list(planet.weather_holder.forecast, and_text = "→", comma_text = "→", final_comma_text = "→") // Unicode RIGHTWARDS ARROW. + ) weather[++weather.len] = W - injection = "
Test
" + // Update manifest + data_core.get_manifest_list() //Modules for homescreen. for(var/list/R in modules) modules_ui[++modules_ui.len] = R + data["user"] = "\ref[user]" // For receiving input() via topic, because input(usr,...) wasn't working on cartridges data["owner"] = owner ? owner : "Unset" data["occupation"] = occupation ? occupation : "Swipe ID to set." data["connectionStatus"] = get_connection_to_tcomms() @@ -109,16 +112,29 @@ data["weather"] = weather data["aircontents"] = src.analyze_air() data["flashlight"] = fon - data["injection"] = injection + data["manifest"] = PDA_Manifest + data["feeds"] = compile_news() + data["latest_news"] = get_recent_news() + if(cartridge) // If there's a cartridge, we need to grab the information from it + data["cart_devices"] = cartridge.get_device_status() + data["cart_templates"] = cartridge.ui_templates + for(var/list/L in cartridge.get_data()) + data[L["field"]] = L["value"] + // cartridge.get_data() returns a list of tuples: + // The field element is the tag used to access the information by the template + // The value element is the actual data, and can take any form necessary for the template // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700, state = key_state) + data["currentTab"] = 1 // Reset the current tab, because we're going to home page + ui = new(user, src, ui_key, "communicator_header.tmpl", "Communicator", 475, 700, state = key_state) // add templates for screens in common with communicator. ui.add_template("atmosphericScan", "atmospheric_scan.tmpl") + ui.add_template("crewManifest", "crew_manifest.tmpl") + ui.add_template("Body", "communicator.tmpl") // Main body // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window @@ -166,7 +182,7 @@ if(href_list["dial"]) if(!get_connection_to_tcomms()) - usr << "Error: Cannot connect to Exonet node." + to_chat(usr, "Error: Cannot connect to Exonet node.") return var/their_address = href_list["dial"] exonet.send_message(their_address, "voice") @@ -179,7 +195,7 @@ if(href_list["message"]) if(!get_connection_to_tcomms()) - usr << "Error: Cannot connect to Exonet node." + to_chat(usr, "Error: Cannot connect to Exonet node.") return var/their_address = href_list["message"] var/text = sanitizeSafe(input(usr,"Enter your message.","Text Message")) @@ -244,9 +260,21 @@ note = "" notehtml = note + if(href_list["switch_template"]) + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(usr, src, "main") + if(ui) + ui.add_template("Body", href_list["switch_template"]) + if(href_list["Light"]) fon = !fon set_light(fon * flum) - nanomanager.update_uis(src) + if(href_list["toggle_device"]) + var/obj/O = cartridge.internal_devices[text2num(href_list["toggle_device"])] + cartridge.active_devices ^= list(O) // Exclusive or, will toggle its presence + + if(href_list["cartridge_topic"] && cartridge) // Has to have a cartridge to perform these functions + cartridge.Topic(href, href_list) + + GLOB.nanomanager.update_uis(src) add_fingerprint(usr) diff --git a/code/game/objects/items/devices/communicator/cartridge.dm b/code/game/objects/items/devices/communicator/cartridge.dm index e69de29bb2..6b29f1121e 100644 --- a/code/game/objects/items/devices/communicator/cartridge.dm +++ b/code/game/objects/items/devices/communicator/cartridge.dm @@ -0,0 +1,952 @@ +// Communicator peripheral devices +// Internal devices that attack() can be relayed to +// Additional UI menus for added functionality +/obj/item/weapon/commcard + name = "generic commcard" + desc = "A peripheral plug-in for personal communicators." + icon = 'icons/obj/pda.dmi' + icon_state = "cart" + item_state = "electronic" + w_class = ITEMSIZE_TINY + + var/list/internal_devices = list() // Devices that can be toggled on to trigger on attack() + var/list/active_devices = list() // Devices that will be triggered on attack() + var/list/ui_templates = list() // List of ui templates the commcard can access + var/list/internal_data = list() // Data that shouldn't be updated every time nanoUI updates, or needs to persist between updates + + +/obj/item/weapon/commcard/proc/get_device_status() + var/list/L = list() + var/i = 1 + for(var/obj/I in internal_devices) + if(I in active_devices) + L[++L.len] = list("name" = "\proper[I.name]", "active" = 1, "index" = i++) + else + L[++L.len] = list("name" = I.name, "active" = 0, "index" = i++) + return L + + +// cartridge.get_data() returns a list of tuples: +// The field element is the tag used to access the information by the template +// The value element is the actual data, and can take any form necessary for the template +/obj/item/weapon/commcard/proc/get_data() + return list() + +// Handles cartridge-specific functions +// The helper.link() MUST HAVE 'cartridge_topic' passed into the href in order for cartridge functions to be processed. +// Doesn't matter what the value of it is for now, it's just a flag to say, "Hey, there's cartridge data to change!" +/obj/item/weapon/commcard/Topic(href, href_list) + + // Signalers + if(href_list["signaler_target"]) + + var/obj/item/device/assembly/signaler/S = locate(href_list["signaler_target"]) // Should locate the correct signaler + + if(!istype(S)) // Ref is no longer valid + return + + if(S.loc != src) // No longer within the cartridge + return + + switch(href_list["signaler_action"]) + if("Pulse") + S.activate() + + if("Edit") + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Ref no longer valid + return + + var/newVal = input(user, "Input a new [href_list["signaler_value"]].", href_list["signaler_value"], (href_list["signaler_value"] == "Code" ? S.code : S.frequency)) as num|null + if(newVal) + switch(href_list["signaler_value"]) + if("Code") + S.code = newVal + + if("Frequency") + S.frequency = newVal + + // Refresh list of powernet sensors + if(href_list["powernet_refresh"]) + internal_data["grid_sensors"] = find_powernet_sensors() + + // Load apc's on targeted powernet + if(href_list["powernet_target"]) + internal_data["powernet_target"] = href_list["powernet_target"] + + // GPS units + if(href_list["gps_target"]) + var/obj/item/device/gps/G = locate(href_list["gps_target"]) + + if(!istype(G)) // Ref is no longer valid + return + + if(G.loc != src) // No longer within the cartridge + return + + switch(href_list["gps_action"]) + if("Power") + G.tracking = text2num(href_list["value"]) + + if("Long_Range") + G.local_mode = text2num(href_list["value"]) + + if("Hide_Signal") + G.hide_signal = text2num(href_list["value"]) + + if("Tag") + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Ref no longer valid + return + + var/newTag = input(user, "Please enter desired tag.", G.tag) as text|null + + if(newTag) + G.tag = newTag + + if(href_list["active_category"]) + internal_data["supply_category"] = href_list["active_category"] + + // Supply topic + // Copied from /obj/machinery/computer/supplycomp/Topic() + // code\game\machinery\computer\supply.dm, line 188 + // Unfortunately, in order to support complete functionality, the whole thing is necessary + if(href_list["pack_ref"]) + var/datum/supply_pack/S = locate(href_list["pack_ref"]) + + // Invalid ref + if(!istype(S)) + return + + // Expand the supply pack's contents + if(href_list["expand"]) + internal_data["supply_pack_expanded"] ^= S + + // Make a request for the pack + if(href_list["request"]) + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + if(world.time < internal_data["supply_reqtime"]) + visible_message("[src] flashes, \"[internal_data["supply_reqtime"] - world.time] seconds remaining until another requisition form may be printed.\"") + return + + var/timeout = world.time + 600 + var/reason = sanitize(input(user, "Reason:","Why do you require this item?","") as null|text) + if(world.time > timeout) + to_chat(user, "Error. Request timed out.") + return + if(!reason) + return + + supply_controller.create_order(S, user, reason) + internal_data["supply_reqtime"] = (world.time + 5) % 1e5 + + if(href_list["order_ref"]) + var/datum/supply_order/O = locate(href_list["order_ref"]) + + // Invalid ref + if(!istype(O)) + return + + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(href_list["edit"]) + if("Supply Pack") + O.name = new_val + + if("Cost") + var/num = text2num(new_val) + if(num) + O.cost = num + + if("Index") + var/num = text2num(new_val) + if(num) + O.index = num + + if("Reason") + O.comment = new_val + + if("Ordered by") + O.ordered_by = new_val + + if("Ordered at") + O.ordered_at = new_val + + if("Approved by") + O.approved_by = new_val + + if("Approved at") + O.approved_at = new_val + + if(href_list["approve"]) + supply_controller.approve_order(O, user) + + if(href_list["deny"]) + supply_controller.deny_order(O, user) + + if(href_list["delete"]) + supply_controller.delete_order(O, user) + + if(href_list["clear_all_requests"]) + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + supply_controller.deny_all_pending(user) + + if(href_list["export_ref"]) + var/datum/exported_crate/E = locate(href_list["export_ref"]) + + // Invalid ref + if(!istype(E)) + return + + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + if(href_list["index"]) + var/list/L = E.contents[href_list["index"]] + + if(href_list["edit"]) + var/field = alert(user, "Select which field to edit", , "Name", "Quantity", "Value") + + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(field) + if("Name") + L["object"] = new_val + + if("Quantity") + var/num = text2num(new_val) + if(num) + L["quantity"] = num + + if("Value") + var/num = text2num(new_val) + if(num) + L["value"] = num + + if(href_list["delete"]) + E.contents.Cut(href_list["index"], href_list["index"] + 1) + + // Else clause means they're editing/deleting the whole export report, rather than a specific item in it + else if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(href_list["edit"]) + if("Name") + E.name = new_val + + if("Value") + var/num = text2num(new_val) + if(num) + E.value = num + + else if(href_list["delete"]) + supply_controller.delete_export(E, user) + + else if(href_list["add_item"]) + supply_controller.add_export_item(E, user) + + if(supply_controller && supply_controller.shuttle) + switch(href_list["send_shuttle"]) + if("send_away") + if(supply_controller.shuttle.forbidden_atoms_check()) + to_chat(usr, "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") + else + supply_controller.shuttle.launch(src) + to_chat(usr, "Initiating launch sequence.") + + if("send_to_station") + supply_controller.shuttle.launch(src) + to_chat(usr, "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.") + + if("cancel_shuttle") + supply_controller.shuttle.cancel_launch(src) + + if("force_shuttle") + supply_controller.shuttle.force_launch(src) + + // Status display + switch(href_list["stat_display"]) + if("message") + post_status("message", internal_data["stat_display_line1"], internal_data["stat_display_line2"]) + internal_data["stat_display_special"] = "message" + if("alert") + post_status("alert", href_list["alert"]) + internal_data["stat_display_special"] = href_list["alert"] + if("setmsg") + internal_data["stat_display_line[href_list["line"]]"] = reject_bad_text(sanitize(input("Line 1", "Enter Message Text", internal_data["stat_display_line[href_list["line"]]"]) as text|null, 40), 40) + else + post_status(href_list["stat_display"]) + internal_data["stat_display_special"] = href_list["stat_display"] + + // Merc shuttle blast door controls + switch(href_list["all_blast_doors"]) + if("open") + for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) + B.open() + if("close") + for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) + B.close() + + if(href_list["scan_blast_doors"]) + internal_data["shuttle_doors"] = find_blast_doors() + + if(href_list["toggle_blast_door"]) + var/obj/machinery/door/blast/B = locate(href_list["toggle_blast_door"]) + if(!B) + return + spawn(0) + if(B.density) + B.open() + else + B.close() + + +// Updates status displays with a new message +// Copied from /obj/item/weapon/cartridge/proc/post_status(), +// code/game/objects/items/devices/PDA/cart.dm, line 251 +/obj/item/weapon/commcard/proc/post_status(var/command, var/data1, var/data2) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + if(!frequency) + return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + internal_data["stat_display_active1"] = data1 // Update the internally stored message, we won't get receive_signal if we're the sender + internal_data["stat_display_active2"] = data2 + if(loc) + var/obj/item/PDA = loc + var/mob/user = PDA.fingerprintslast + log_admin("STATUS: [user] set status screen with [src]. Message: [data1] [data2]") + message_admins("STATUS: [user] set status screen with [src]. Message: [data1] [data2]") + + if("alert") + status_signal.data["picture_state"] = data1 + + frequency.post_signal(src, status_signal) + +// Receives updates by external devices to the status displays +/obj/item/weapon/commcard/receive_signal(var/datum/signal/signal, var/receive_method, var/receive_param) + internal_data["stat_display_special"] = signal.data["command"] + switch(signal.data["command"]) + if("message") + internal_data["stat_display_active1"] = signal.data["msg1"] + internal_data["stat_display_active2"] = signal.data["msg2"] + if("alert") + internal_data["stat_display_special"] = signal.data["picture_state"] + + +/////////////////////////// +// SUBTYPES +/////////////////////////// + + +// Engineering Cartridge: +// Devices +// *- Halogen Counter +// Templates +// *- Power Monitor +/obj/item/weapon/commcard/engineering + name = "\improper Power-ON cartridge" + icon_state = "cart-e" + ui_templates = list(list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl")) + +/obj/item/weapon/commcard/engineering/New() + ..() + internal_devices |= new /obj/item/device/halogen_counter(src) + +/obj/item/weapon/commcard/engineering/initialize() + internal_data["grid_sensors"] = find_powernet_sensors() + internal_data["powernet_target"] = "" + +/obj/item/weapon/commcard/engineering/get_data() + return list( + list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()), + list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) + ) + +// Atmospherics Cartridge: +// Devices +// *- Gas scanner +/obj/item/weapon/commcard/atmos + name = "\improper BreatheDeep cartridge" + icon_state = "cart-a" + +/obj/item/weapon/commcard/atmos/New() + ..() + internal_devices |= new /obj/item/device/analyzer(src) + + +// Medical Cartridge: +// Devices +// *- Halogen Counter +// *- Health Analyzer +// Templates +// *- Medical Records +/obj/item/weapon/commcard/medical + name = "\improper Med-U cartridge" + icon_state = "cart-m" + ui_templates = list(list("name" = "Medical Records", "template" = "med_records.tmpl")) + +/obj/item/weapon/commcard/medical/New() + ..() + internal_devices |= new /obj/item/device/healthanalyzer(src) + internal_devices |= new /obj/item/device/halogen_counter(src) + +/obj/item/weapon/commcard/medical/get_data() + return list(list("field" = "med_records", "value" = get_med_records())) + + +// Chemistry Cartridge: +// Devices +// *- Halogen Counter +// *- Health Analyzer +// *- Reagent Scanner +// Templates +// *- Medical Records +/obj/item/weapon/commcard/medical/chemistry + name = "\improper ChemWhiz cartridge" + icon_state = "cart-chem" + +/obj/item/weapon/commcard/medical/chemistry/New() + ..() + internal_devices |= new /obj/item/device/reagent_scanner(src) + + +// Detective Cartridge: +// Devices +// *- Halogen Counter +// *- Health Analyzer +// Templates +// *- Medical Records +// *- Security Records +/obj/item/weapon/commcard/medical/detective + name = "\improper D.E.T.E.C.T. cartridge" + icon_state = "cart-s" + ui_templates = list( + list("name" = "Medical Records", "template" = "med_records.tmpl"), + list("name" = "Security Records", "template" = "sec_records.tmpl") + ) + +/obj/item/weapon/commcard/medical/detective/get_data() + var/list/data = ..() + data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) + return data + + +// Internal Affairs Cartridge: +// Templates +// *- Security Records +// *- Employment Records +/obj/item/weapon/commcard/int_aff + name = "\improper P.R.O.V.E. cartridge" + icon_state = "cart-s" + ui_templates = list( + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Security Records", "template" = "sec_records.tmpl") + ) + +/obj/item/weapon/commcard/int_aff/get_data() + return list( + list("field" = "emp_records", "value" = get_emp_records()), + list("field" = "sec_records", "value" = get_sec_records()) + ) + + +// Security Cartridge: +// Templates +// *- Security Records +// *- Security Bot Access +/obj/item/weapon/commcard/security + name = "\improper R.O.B.U.S.T. cartridge" + icon_state = "cart-s" + ui_templates = list( + list("name" = "Security Records", "template" = "sec_records.tmpl"), + list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl") + ) + +/obj/item/weapon/commcard/security/get_data() + return list( + list("field" = "sec_records", "value" = get_sec_records()), + list("field" = "sec_bot_access", "value" = get_sec_bot_access()) + ) + + +// Janitor Cartridge: +// Templates +// *- Janitorial Locator Magicbox +/obj/item/weapon/commcard/janitor + name = "\improper CustodiPRO cartridge" + desc = "The ultimate in clean-room design." + ui_templates = list( + list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl") + ) + +/obj/item/weapon/commcard/janitor/get_data() + return list( + list("field" = "janidata", "value" = get_janitorial_locations()) + ) + + +// Signal Cartridge: +// Devices +// *- Signaler +// Templates +// *- Signaler Access +/obj/item/weapon/commcard/signal + name = "generic signaler cartridge" + desc = "A data cartridge with an integrated radio signaler module." + ui_templates = list( + list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") + ) + +/obj/item/weapon/commcard/signal/New() + ..() + internal_devices |= new /obj/item/device/assembly/signaler(src) + +/obj/item/weapon/commcard/signal/get_data() + return list( + list("field" = "signaler_access", "value" = get_int_signalers()) + ) + + +// Science Cartridge: +// Devices +// *- Signaler +// *- Reagent Scanner +// *- Gas Scanner +// Templates +// *- Signaler Access +/obj/item/weapon/commcard/signal/science + name = "\improper Signal Ace 2 cartridge" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + // UI templates inherited + +/obj/item/weapon/commcard/signal/science/New() + ..() + internal_devices |= new /obj/item/device/reagent_scanner(src) + internal_devices |= new /obj/item/device/analyzer(src) + + +// Supply Cartridge: +// Templates +// *- Supply Records +/obj/item/weapon/commcard/supply + name = "\improper Space Parts & Space Vendors cartridge" + desc = "Perfect for the Quartermaster on the go!" + icon_state = "cart-q" + ui_templates = list( + list("name" = "Supply Records", "template" = "supply_records.tmpl") + ) + +/obj/item/weapon/commcard/supply/New() + ..() + internal_data["supply_category"] = null + internal_data["supply_controls"] = FALSE // Cannot control the supply shuttle, cannot accept orders + internal_data["supply_pack_expanded"] = list() + internal_data["supply_reqtime"] = -1 + +/obj/item/weapon/commcard/supply/get_data() + // Supply records data + var/list/shuttle_status = get_supply_shuttle_status() + var/list/orders = get_supply_orders() + var/list/receipts = get_supply_receipts() + var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge + var/list/pack_list = list() // List of supply packs within the currently selected category + + if(internal_data["supply_category"]) + pack_list = get_supply_pack_list() + + return list( + list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]), + list("field" = "order_auth", "value" = misc_supply_data["order_auth"]), + list("field" = "supply_points", "value" = misc_supply_data["supply_points"]), + list("field" = "categories", "value" = misc_supply_data["supply_categories"]), + list("field" = "contraband", "value" = misc_supply_data["contraband"]), + list("field" = "active_category", "value" = internal_data["supply_category"]), + list("field" = "shuttle", "value" = shuttle_status), + list("field" = "orders", "value" = orders), + list("field" = "receipts", "value" = receipts), + list("field" = "supply_packs", "value" = pack_list) + ) + + +// Command Cartridge: +// Templates +// *- Status Display Access +// *- Employment Records +/obj/item/weapon/commcard/head + name = "\improper Easy-Record DELUXE" + icon_state = "cart-h" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl") + ) + +/obj/item/weapon/commcard/head/New() + ..() + internal_data["stat_display_line1"] = null + internal_data["stat_display_line2"] = null + internal_data["stat_display_active1"] = null + internal_data["stat_display_active2"] = null + internal_data["stat_display_special"] = null + +/obj/item/weapon/commcard/head/initialize() + // Have to register the commcard with the Radio controller to receive updates to the status displays + radio_controller.add_object(src, 1435) + ..() + +/obj/item/weapon/commcard/head/Destroy() + // Have to unregister the commcard for proper bookkeeping + radio_controller.remove_object(src, 1435) + ..() + +/obj/item/weapon/commcard/head/get_data() + return list( + list("field" = "emp_records", "value" = get_emp_records()), + list("field" = "stat_display", "value" = get_status_display()) + ) + +// Head of Personnel Cartridge: +// Templates +// *- Status Display Access +// *- Employment Records +// *- Security Records +// *- Supply Records +// ?- Supply Bot Access +// *- Janitorial Locator Magicbox +/obj/item/weapon/commcard/head/hop + name = "\improper HumanResources9001 cartridge" + icon_state = "cart-h" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Security Records", "template" = "sec_records.tmpl"), + list("name" = "Supply Records", "template" = "supply_records.tmpl"), + list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl") + ) + + +/obj/item/weapon/commcard/head/hop/get_data() + var/list/data = ..() + + // Sec records + data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) + + // Supply records data + var/list/shuttle_status = get_supply_shuttle_status() + var/list/orders = get_supply_orders() + var/list/receipts = get_supply_receipts() + var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge + var/list/pack_list = list() // List of supply packs within the currently selected category + + if(internal_data["supply_category"]) + pack_list = get_supply_pack_list() + + data[++data.len] = list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]) + data[++data.len] = list("field" = "order_auth", "value" = misc_supply_data["order_auth"]) + data[++data.len] = list("field" = "supply_points", "value" = misc_supply_data["supply_points"]) + data[++data.len] = list("field" = "categories", "value" = misc_supply_data["supply_categories"]) + data[++data.len] = list("field" = "contraband", "value" = misc_supply_data["contraband"]) + data[++data.len] = list("field" = "active_category", "value" = internal_data["supply_category"]) + data[++data.len] = list("field" = "shuttle", "value" = shuttle_status) + data[++data.len] = list("field" = "orders", "value" = orders) + data[++data.len] = list("field" = "receipts", "value" = receipts) + data[++data.len] = list("field" = "supply_packs", "value" = pack_list) + + // Janitorial locator magicbox + data[++data.len] = list("field" = "janidata", "value" = get_janitorial_locations()) + + return data + + +// Head of Security Cartridge: +// Templates +// *- Status Display Access +// *- Employment Records +// *- Security Records +// *- Security Bot Access +/obj/item/weapon/commcard/head/hos + name = "\improper R.O.B.U.S.T. DELUXE" + icon_state = "cart-hos" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Security Records", "template" = "sec_records.tmpl"), + list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl") + ) + +/obj/item/weapon/commcard/head/hos/get_data() + var/list/data = ..() + // Sec records + data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) + // Sec bot access + data[++data.len] = list("field" = "sec_bot_access", "value" = get_sec_bot_access()) + return data + + +// Research Director Cartridge: +// Devices +// *- Signaler +// *- Gas Scanner +// *- Reagent Scanner +// Templates +// *- Status Display Access +// *- Employment Records +// *- Signaler Access +/obj/item/weapon/commcard/head/rd + name = "\improper Signal Ace DELUXE" + icon_state = "cart-rd" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") + ) + +/obj/item/weapon/commcard/head/rd/New() + ..() + internal_devices |= new /obj/item/device/analyzer(src) + internal_devices |= new /obj/item/device/reagent_scanner(src) + internal_devices |= new /obj/item/device/assembly/signaler(src) + +/obj/item/weapon/commcard/head/rd/get_data() + var/list/data = ..() + // Signaler access + data[++data.len] = list("field" = "signaler_access", "value" = get_int_signalers()) + return data + + +// Chief Medical Officer Cartridge: +// Devices +// *- Health Analyzer +// *- Reagent Scanner +// *- Halogen Counter +// Templates +// *- Status Display Access +// *- Employment Records +// *- Medical Records +/obj/item/weapon/commcard/head/cmo + name = "\improper Med-U DELUXE" + icon_state = "cart-cmo" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Medical Records", "template" = "med_records.tmpl") + ) + +/obj/item/weapon/commcard/head/cmo/New() + ..() + internal_devices |= new /obj/item/device/healthanalyzer(src) + internal_devices |= new /obj/item/device/reagent_scanner(src) + internal_devices |= new /obj/item/device/halogen_counter(src) + +/obj/item/weapon/commcard/head/cmo/get_data() + var/list/data = ..() + // Med records + data[++data.len] = list("field" = "med_records", "value" = get_med_records()) + return data + +// Chief Engineer Cartridge: +// Devices +// *- Gas Scanner +// *- Halogen Counter +// Templates +// *- Status Display Access +// *- Employment Records +// *- Power Monitoring +/obj/item/weapon/commcard/head/ce + name = "\improper Power-On DELUXE" + icon_state = "cart-ce" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl") + ) + +/obj/item/weapon/commcard/head/ce/New() + ..() + internal_devices |= new /obj.item/device/analyzer(src) + internal_devices |= new /obj/item/device/halogen_counter(src) + +/obj/item/weapon/commcard/head/ce/initialize() + internal_data["grid_sensors"] = find_powernet_sensors() + internal_data["powernet_target"] = "" + +/obj/item/weapon/commcard/head/ce/get_data() + var/list/data = ..() + // Add power monitoring data + data[++data.len] = list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()) + data[++data.len] = list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) + return data + + +// Captain Cartridge: +// Devices +// *- Health analyzer +// *- Gas Scanner +// *- Reagent Scanner +// *- Halogen Counter +// X- GPS - Balance +// *- Signaler +// Templates +// *- Status Display Access +// *- Employment Records +// *- Medical Records +// *- Security Records +// *- Power Monitoring +// *- Supply Records +// X- Supply Bot Access - Mulebots usually break when used +// *- Security Bot Access +// *- Janitorial Locator Magicbox +// X- GPS Access - Balance +// *- Signaler Access +/obj/item/weapon/commcard/head/captain + name = "\improper Value-PAK cartridge" + desc = "Now with 200% more value!" + icon_state = "cart-c" + ui_templates = list( + list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), + list("name" = "Employment Records", "template" = "emp_records.tmpl"), + list("name" = "Medical Records", "template" = "med_records.tmpl"), + list("name" = "Security Records", "template" = "sec_records.tmpl"), + list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl"), + list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl"), + list("name" = "Supply Records", "template" = "supply_records.tmpl"), + list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl"), + list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") + ) + +/obj/item/weapon/commcard/head/captain/New() + ..() + internal_devices |= new /obj.item/device/analyzer(src) + internal_devices |= new /obj/item/device/healthanalyzer(src) + internal_devices |= new /obj/item/device/reagent_scanner(src) + internal_devices |= new /obj/item/device/halogen_counter(src) + internal_devices |= new /obj/item/device/assembly/signaler(src) + +/obj/item/weapon/commcard/head/captain/get_data() + var/list/data = ..() + //Med records + data[++data.len] = list("field" = "med_records", "value" = get_med_records()) + + // Sec records + data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) + + // Sec bot access + data[++data.len] = list("field" = "sec_bot_access", "value" = get_sec_bot_access()) + + // Power Monitoring + data[++data.len] = list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()) + data[++data.len] = list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) + + // Supply records data + var/list/shuttle_status = get_supply_shuttle_status() + var/list/orders = get_supply_orders() + var/list/receipts = get_supply_receipts() + var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge + var/list/pack_list = list() // List of supply packs within the currently selected category + + if(internal_data["supply_category"]) + pack_list = get_supply_pack_list() + + data[++data.len] = list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]) + data[++data.len] = list("field" = "order_auth", "value" = misc_supply_data["order_auth"]) + data[++data.len] = list("field" = "supply_points", "value" = misc_supply_data["supply_points"]) + data[++data.len] = list("field" = "categories", "value" = misc_supply_data["supply_categories"]) + data[++data.len] = list("field" = "contraband", "value" = misc_supply_data["contraband"]) + data[++data.len] = list("field" = "active_category", "value" = internal_data["supply_category"]) + data[++data.len] = list("field" = "shuttle", "value" = shuttle_status) + data[++data.len] = list("field" = "orders", "value" = orders) + data[++data.len] = list("field" = "receipts", "value" = receipts) + data[++data.len] = list("field" = "supply_packs", "value" = pack_list) + + // Janitorial locator magicbox + data[++data.len] = list("field" = "janidata", "value" = get_janitorial_locations()) + + // Signaler access + data[++data.len] = list("field" = "signaler_access", "value" = get_int_signalers()) + + return data + + +// Mercenary Cartridge +// Templates +// *- Merc Shuttle Door Controller +/obj/item/weapon/commcard/mercenary + name = "\improper Detomatix cartridge" + icon_state = "cart" + ui_templates = list( + list("name" = "Shuttle Blast Door Control", "template" = "merc_blast_door_control.tmpl") + ) + +/obj/item/weapon/commcard/mercenary/initialize() + internal_data["shuttle_door_code"] = "smindicate" // Copied from PDA code + internal_data["shuttle_doors"] = find_blast_doors() + +/obj/item/weapon/commcard/mercenary/get_data() + var/door_status[0] + for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) + door_status[++door_status.len] += list( + "open" = B.density, + "name" = B.name, + "ref" = "\ref[B]" + ) + + return list( + list("field" = "blast_door", "value" = door_status) + ) + + +// Explorer Cartridge +// Devices +// *- GPS +// Templates +// *- GPS Access + +// IMPORTANT: NOT MAPPED IN DUE TO BALANCE CONCERNS RE: FINDING THE VICTIMS OF ANTAGS. +// See suit sensors, specifically ease of turning them off, and variable level of settings which may or may not give location +// A GPS in your phone that is either broadcasting position or totally off, and can be hidden in pockets, coats, bags, boxes, etc, is much harder to disable +/obj/item/weapon/commcard/explorer + name = "\improper Explorator cartridge" + icon_state = "cart-tox" + ui_templates = list( + list("name" = "Integrated GPS", "template" = "gps_access.tmpl") + ) + +/obj/item/weapon/commcard/explorer/New() + ..() + internal_devices |= new /obj/item/device/gps/explorer(src) + +/obj/item/weapon/commcard/explorer/get_data() + var/list/GPS = get_GPS_lists() + + return list( + list("field" = "gps_access", "value" = GPS[1]), + list("field" = "gps_signal", "value" = GPS[2]), + list("field" = "gps_status", "value" = GPS[3]) + ) \ No newline at end of file diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 7342988916..ec9c09c161 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -4,6 +4,18 @@ var/global/list/obj/item/device/communicator/all_communicators = list() +// List of core tabs the communicator can switch to +#define HOMETAB 1 +#define PHONTAB 2 +#define CONTTAB 3 +#define MESSTAB 4 +#define NEWSTAB 5 +#define NOTETAB 6 +#define WTHRTAB 7 +#define MANITAB 8 +#define SETTTAB 9 +#define EXTRTAB 10 + /obj/item/device/communicator name = "communicator" desc = "A personal device used to enable long range dialog between two people, utilizing existing telecommunications infrastructure to allow \ @@ -31,20 +43,22 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/note = "Thank you for choosing the T-14.2 Communicator, this is your notepad!" //Current note in the notepad function var/notehtml = "" - var/obj/item/weapon/cartridge/cartridge = null //current cartridge + var/obj/item/weapon/commcard/cartridge = null //current cartridge var/fon = 0 // Internal light var/flum = 2 // Brightness var/list/modules = list( - list("module" = "Phone", "icon" = "phone64", "number" = 2), - list("module" = "Contacts", "icon" = "person64", "number" = 3), - list("module" = "Messaging", "icon" = "comment64", "number" = 4), - list("module" = "Note", "icon" = "note64", "number" = 5), - list("module" = "Weather", "icon" = "sun64", "number" = 6), - list("module" = "Settings", "icon" = "gear64", "number" = 7) + list("module" = "Phone", "icon" = "phone64", "number" = PHONTAB), + list("module" = "Contacts", "icon" = "person64", "number" = CONTTAB), + list("module" = "Messaging", "icon" = "comment64", "number" = MESSTAB), + list("module" = "News", "icon" = "note64", "number" = NEWSTAB), // Need a different icon, + list("module" = "Note", "icon" = "note64", "number" = NOTETAB), + list("module" = "Weather", "icon" = "sun64", "number" = WTHRTAB), + list("module" = "Crew Manifest", "icon" = "note64", "number" = MANITAB), // Need a different icon, + list("module" = "Settings", "icon" = "gear64", "number" = SETTTAB), ) //list("module" = "Name of Module", "icon" = "icon name64", "number" = "what tab is the module") - var/selected_tab = 1 + var/selected_tab = HOMETAB var/owner = "" var/occupation = "" var/alert_called = 0 @@ -89,7 +103,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() /obj/item/device/communicator/examine(mob/user) . = ..(user, 1) if(. && video_source) - user << "It looks like it's on a video call: \[view\]" + to_chat(user, "It looks like it's on a video call: \[view\]") // Proc: initialize_exonet() // Parameters: 1 (user - the person the communicator belongs to) @@ -130,7 +144,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() else msg += "The device doesn't appear to be transmitting any data.\n" msg += "" - user << msg + to_chat(user, msg) return // Proc: emp_act() @@ -188,10 +202,22 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!get_connection_to_tcomms()) close_connection(reason = "Connection timed out") +// Proc: attack() +// Parameters: 2 (M - what is being attacked. user - the mob that has the communicator) +// Description: When the communicator has an attached commcard with internal devices, relay the attack() through to those devices. +// Contents of the for loop are copied from gripper code, because that does approximately what we want to do. +/obj/item/device/communicator/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(cartridge && cartridge.active_devices) + for(var/obj/item/wrapped in cartridge.active_devices) + if(wrapped) //The force of the wrapped obj gets set to zero during the attack() and afterattack(). + wrapped.attack(M,user) + return 0 + // Proc: attackby() // Parameters: 2 (C - what is used on the communicator. user - the mob that has the communicator) // Description: When an ID is swiped on the communicator, the communicator reads the job and checks it against the Owner name, if success, the occupation is added. /obj/item/device/communicator/attackby(obj/item/C as obj, mob/user as mob) + ..() if(istype(C, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/idcard = C if(!idcard.registered_name || !idcard.assignment) @@ -201,12 +227,14 @@ var/global/list/obj/item/device/communicator/all_communicators = list() else if(owner == idcard.registered_name) occupation = idcard.assignment to_chat(user, "Occupation updated.") -// else if(istype(C, /obj/item/weapon/cartridge)) -// if(cartridge) -// to_chat(user, "\The [src] already has an external device attached!") -// else -// modules.Add(list("module" = "External Device", "icon = external64", "number" = 8)) -// cartridge = C + + if(istype(C, /obj/item/weapon/commcard) && !cartridge) + cartridge = C + user.drop_item() + cartridge.forceMove(src) + to_chat(usr, "You slot \the [cartridge] into \the [src].") + modules[++modules.len] = list("module" = "External Device", "icon" = "external64", "number" = EXTRTAB) + GLOB.nanomanager.update_uis(src) // update all UIs attached to src return // Proc: attack_self() @@ -298,8 +326,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list() all_communicators -= src processing_objects -= src listening_objects.Remove(src) - qdel_null(camera) - qdel_null(exonet) + QDEL_NULL(camera) + QDEL_NULL(exonet) return ..() @@ -330,6 +358,38 @@ var/global/list/obj/item/device/communicator/all_communicators = list() client_huds |= global_hud.whitense client_huds |= global_hud.darkMask +/obj/item/device/communicator/verb/verb_remove_cartridge() + set category = "Object" + set name = "Remove commcard" + set src in usr + + // Can't remove what isn't there + if(!cartridge) + to_chat(usr, "There isn't a commcard to remove!") + return + + // Can't remove if you're physically unable to + if(usr.stat || usr.restrained() || usr.paralysis || usr.stunned || usr.weakened) + to_chat(usr, "You cannot do this while restrained.") + return + + var/turf/T = get_turf(src) + cartridge.loc = T + // If it's in someone, put the cartridge in their hands + if (ismob(loc)) + var/mob/M = loc + M.put_in_hands(cartridge) + // Else just set it on the ground + else + cartridge.loc = get_turf(src) + cartridge = null + // We have to iterate through the modules to find EXTRTAB, because list procs don't play nice with a list of lists + for(var/i = 1, i <= modules.len, i++) + if(modules[i]["number"] == EXTRTAB) + modules.Cut(i, i+1) + break + to_chat(usr, "You remove \the [cartridge] from the [name].") + //It's the 26th century. We should have smart watches by now. /obj/item/device/communicator/watch name = "communicator watch" diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm index 9c121112ac..b7a3b752d9 100644 --- a/code/game/objects/items/devices/communicator/helper.dm +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -11,17 +11,532 @@ var/co2_level = environment.gas["carbon_dioxide"]/total_moles var/phoron_level = environment.gas["phoron"]/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) + + // Label is what the entry is describing + // Type identifies which unit or other special characters to use + // Val is the information reported + // Bad_high/_low are the values outside of which the entry reports as dangerous + // Poor_high/_low are the values outside of which the entry reports as unideal + // Values were extracted from the template itself results = list( - "pressure" = "[round(pressure,0.1)]", - "nitrogen" = "[round(n2_level*100,0.1)]", - "oxygen" = "[round(o2_level*100,0.1)]", - "carbon_dioxide" = "[round(co2_level*100,0.1)]", - "phoron" = "[round(phoron_level*100,0.01)]", - "other" = "[round(unknown_level, 0.01)]", - "temp" = "[round(environment.temperature-T0C,0.1)]", - "reading" = 1 + list("entry" = "Pressure", "type" = "pressure", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80), + list("entry" = "Temperature", "type" = "temp", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5), + list("entry" = "Oxygen", "type" = "pressure", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17), + list("entry" = "Nitrogen", "type" = "pressure", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40), + list("entry" = "Carbon Dioxide", "type" = "pressure", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0), + list("entry" = "Phoron", "type" = "pressure", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0), + list("entry" = "Other", "type" = "pressure", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0) ) if(isnull(results)) - results = list("reading" = 0) - return results \ No newline at end of file + results = list(list("entry" = "pressure", "val" = "0")) + return results + + +// Proc - compile_news() +// Parameters - none +// Description - Returns the list of newsfeeds, compiled for template processing +/obj/item/device/communicator/proc/compile_news() + var/list/feeds = list() + for(var/datum/feed_channel/channel in news_network.network_channels) + var/list/messages = list() + if(!channel.censored) + var/index = 0 + for(var/datum/feed_message/FM in channel.messages) + index++ + if(FM.img) + usr << browse_rsc(FM.img, "pda_news_tmp_photo_[feeds["channel"]]_[index].png") + // News stories are HTML-stripped but require newline replacement to be properly displayed in NanoUI + var/body = replacetext(FM.body, "\n", "
") + messages[++messages.len] = list( + "author" = FM.author, + "body" = body, + "message_type" = FM.message_type, + "time_stamp" = FM.time_stamp, + "has_image" = (FM.img != null), + "caption" = FM.caption, + "index" = index + ) + + feeds[++feeds.len] = list( + "name" = channel.channel_name, + "censored" = channel.censored, + "author" = channel.author, + "messages" = messages + ) + return feeds + +// Proc - get_recent_news() +// Parameters - none +// Description - Returns the latest three newscasts, compiled for template processing +/obj/item/device/communicator/proc/get_recent_news() + var/list/news = list() + + // Compile all the newscasts + for(var/datum/feed_channel/channel in news_network.network_channels) + if(!channel.censored) + for(var/datum/feed_message/FM in channel.messages) + var/body = replacetext(FM.body, "\n", "
") + news[++news.len] = list( + "channel" = channel.channel_name, + "author" = FM.author, + "body" = body, + "message_type" = FM.message_type, + "time_stamp" = FM.time_stamp, + "has_image" = (FM.img != null), + "caption" = FM.caption, + ) + + // Cut out all but the youngest three + while(news.len > 3) + var/oldest = min(news[0]["time_stamp"], news[1]["time_stamp"], news[2]["time_stamp"], news[3]["time_stamp"]) + for(var/i = 0, i < 4, i++) + if(news[i]["time_stamp"] == oldest) + news.Remove(news[i]) + + return news + + + +// Putting the commcard data harvesting helpers here +// Not ideal to put all the procs on the base type +// but it may open options for adminbus, +// And it saves duplicated code + + +// Medical records +/obj/item/weapon/commcard/proc/get_med_records() + var/med_records[0] + for(var/datum/data/record/M in sortRecord(data_core.medical)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = M.fields["name"]) + record[++record.len] = list("tab" = "ID", "val" = M.fields["id"]) + record[++record.len] = list("tab" = "Blood Type", "val" = M.fields["b_type"]) + record[++record.len] = list("tab" = "DNA #", "val" = M.fields["b_dna"]) + record[++record.len] = list("tab" = "Gender", "val" = M.fields["id_gender"]) + record[++record.len] = list("tab" = "Entity Classification", "val" = M.fields["brain_type"]) + record[++record.len] = list("tab" = "Minor Disorders", "val" = M.fields["mi_dis"]) + record[++record.len] = list("tab" = "Major Disorders", "val" = M.fields["ma_dis"]) + record[++record.len] = list("tab" = "Allergies", "val" = M.fields["alg"]) + record[++record.len] = list("tab" = "Condition", "val" = M.fields["cdi"]) + record[++record.len] = list("tab" = "Notes", "val" = M.fields["notes"]) + + med_records[++med_records.len] = list("name" = M.fields["name"], "record" = record) + return med_records + + +// Employment records +/obj/item/weapon/commcard/proc/get_emp_records() + var/emp_records[0] + for(var/datum/data/record/G in sortRecord(data_core.general)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = G.fields["name"]) + record[++record.len] = list("tab" = "ID", "val" = G.fields["id"]) + record[++record.len] = list("tab" = "Rank", "val" = G.fields["rank"]) + record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields["fingerprint"]) + record[++record.len] = list("tab" = "Entity Classification", "val" = G.fields["brain_type"]) + record[++record.len] = list("tab" = "Sex", "val" = G.fields["sex"]) + record[++record.len] = list("tab" = "Species", "val" = G.fields["species"]) + record[++record.len] = list("tab" = "Age", "val" = G.fields["age"]) + record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) + + emp_records[++emp_records.len] = list("name" = G.fields["name"], "record" = record) + return emp_records + + +// Security records +/obj/item/weapon/commcard/proc/get_sec_records() + var/sec_records[0] + for(var/datum/data/record/G in sortRecord(data_core.general)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Sex", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Species", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Age", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Rank", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Physical Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Mental Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Criminal Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Major Crimes", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Minor Crimes", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) + + sec_records[++sec_records.len] = list("name" = G.fields["name"], "record" = record) + return sec_records + + +// Status of all secbots +// Weaker than what PDAs appear to do, but as of 7/1/2018 PDA secbot access is nonfunctional +/obj/item/weapon/commcard/proc/get_sec_bot_access() + var/sec_bots[0] + for(var/mob/living/bot/secbot/S in mob_list) + // Get new bot + var/status[0] + status[++status.len] = list("tab" = "Name", "val" = sanitize(S.name)) + + // If it's turned off, then it shouldn't be broadcasting any further info + if(!S.on) + status[++status.len] = list("tab" = "Power", "val" = "Off") // Encoding the span classes here so I don't have to do complicated switches in the ui template + continue + status[++status.len] = list("tab" = "Power", "val" = "On") + + // -- What it's doing + // If it's engaged, then say who it thinks it's engaging + if(S.target) + status[++status.len] = list("tab" = "Status", "val" = "Apprehending Target") + status[++status.len] = list("tab" = "Target", "val" = S.target_name(S.target)) + // Else if it's patrolling + else if(S.will_patrol) + status[++status.len] = list("tab" = "Status", "val" = "Patrolling") + // Otherwise we don't know what it's doing + else + status[++status.len] = list("tab" = "Status", "val" = "Idle") + + // Where it is + status[++status.len] = list("tab" = "Location", "val" = sanitize("[get_area(S.loc)]")) + + // Append bot to the list + sec_bots[++sec_bots.len] = list("bot" = S.name, "status" = status) + return sec_bots + + +// Code and frequency of stored signalers +// Supports multiple signalers within the device +/obj/item/weapon/commcard/proc/get_int_signalers() + var/signalers[0] + for(var/obj/item/device/assembly/signaler/S in internal_devices) + var/unit[0] + unit[++unit.len] = list("tab" = "Code", "val" = S.code) + unit[++unit.len] = list("tab" = "Frequency", "val" = S.frequency) + + signalers[++signalers.len] = list("ref" = "\ref[S]", "status" = unit) + + return signalers + +// Returns list of all powernet sensors currently visible to the commcard +/obj/item/weapon/commcard/proc/find_powernet_sensors() + var/grid_sensors[0] + + // Find all the powernet sensors we need to pull data from + // Copied from /datum/nano_module/power_monitor/proc/refresh_sensors(), + // located in '/code/modules/nano/modules/power_monitor.dm' + // Minor tweaks for efficiency and cleanliness + var/turf/T = get_turf(src) + if(T) + var/list/levels = using_map.get_map_levels(T.z, FALSE) + for(var/obj/machinery/power/sensor/S in machines) + if((S.long_range) || (S.loc.z in levels) || (S.loc.z == T.z)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. + if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! + warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") + else + grid_sensors += S + return grid_sensors + +// List of powernets +/obj/item/weapon/commcard/proc/get_powernet_monitoring_list() + // Fetch power monitor data + var/sensors[0] + + for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) + var/list/focus = S.return_reading_data() + + sensors[++sensors.len] = list( + "name" = S.name_tag, + "alarm" = focus["alarm"] + ) + + return sensors + +// Information about the targeted powernet +/obj/item/weapon/commcard/proc/get_powernet_target(var/target_sensor) + if(!target_sensor) + return + + var/powernet_target[0] + + for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) + var/list/focus = S.return_reading_data() + + // Packages the span class here so it doesn't need to be interpreted w/in the for loop in the ui template + var/load_stat = "Optimal" + if(focus["load_percentage"] >= 95) + load_stat = "DANGER: Overload" + else if(focus["load_percentage"] >= 85) + load_stat = "WARNING: High Load" + + var/alarm_stat = focus["alarm"] ? "WARNING: Abnormal activity detected!" : "Secure" + + if(target_sensor == S.name_tag) + powernet_target = list( + "name" = S.name_tag, + "alarm" = focus["alarm"], + "error" = focus["error"], + "apc_data" = focus["apc_data"], + "status" = list( + list("field" = "Network Load Status", "statval" = load_stat), + list("field" = "Network Security Status", "statval" = alarm_stat), + list("field" = "Load Percentage", "statval" = focus["load_percentage"]), + list("field" = "Available Power", "statval" = focus["total_avail"]), + list("field" = "APC Power Usage", "statval" = focus["total_used_apc"]), + list("field" = "Other Power Usage", "statval" = focus["total_used_other"]), + list("field" = "Total Usage", "statval" = focus["total_used_all"]) + ) + ) + + return powernet_target + +// Compiles the locations of all janitorial paraphernalia, as used by janitorialLocator.tmpl +/obj/item/weapon/commcard/proc/get_janitorial_locations() + // Fetch janitorial locator + var/janidata[0] + var/list/cleaningList = list() + cleaningList += all_mops + all_mopbuckets + all_janitorial_carts + + // User's location + var/turf/userloc = get_turf(src) + if(isturf(userloc)) + janidata[++janidata.len] = list("field" = "Current Location", "val" = "[userloc.x], [userloc.y], [using_map.get_zlevel_name(userloc.z)]") + else + janidata[++janidata.len] = list("field" = "Current Location", "val" = "Unknown") + return janidata // If the user isn't on a valid turf, then it shouldn't be able to find anything anyways + + // Mops, mop buckets, janitorial carts. + for(var/obj/C in cleaningList) + var/turf/T = get_turf(C) + if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) + if(T.z == userloc.z) + janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") + else + janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") + + // Cleanbots + for(var/mob/living/bot/cleanbot/B in living_mob_list) + var/turf/T = get_turf(B) + if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) + var/textout = "" + if(B.on) + textout += "Status: Online
" + if(T.z == userloc.z) + textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" + else + textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" + else + textout += "Status: Offline" + + janidata[++janidata.len] = list("field" = "[B.name]", "val" = textout) + + return janidata + +// Compiles the three lists used by GPS_access.tmpl +// The contents of the three lists are inherently related, so separating them into different procs would be largely redundant +/obj/item/weapon/commcard/proc/get_GPS_lists() + // GPS Access + var/intgps[0] // Gps devices within the commcard -- Allow tag edits, turning on/off, etc + var/extgps[0] // Gps devices not inside the commcard -- Print locations if a gps is on + var/stagps[0] // Gps net status, location, whether it's on, if it's got long range + var/obj/item/device/gps/cumulative = new(src) + cumulative.tracking = FALSE + cumulative.local_mode = TRUE // Won't detect long-range signals automatically + cumulative.long_range = FALSE + var/list/toggled_gps = list() // List of GPS units that are turned off before display_list() is called + + for(var/obj/item/device/gps/G in internal_devices) + var/gpsdata[0] + if(G.tracking && !G.emped) + cumulative.tracking = TRUE // Turn it on + if(G.long_range) + cumulative.long_range = TRUE // It can detect long-range + if(!G.local_mode) + cumulative.local_mode = FALSE // It is detecting long-range + + gpsdata["ref"] = "\ref[G]" + gpsdata["tag"] = G.gps_tag + gpsdata["power"] = G.tracking + gpsdata["local_mode"] = G.local_mode + gpsdata["long_range"] = G.long_range + gpsdata["hide_signal"] = G.hide_signal + gpsdata["can_hide"] = G.can_hide_signal + + intgps[++intgps.len] = gpsdata // Add it to the list + + if(G.tracking) + G.tracking = FALSE // Disable the internal gps units so they don't show up in the report + toggled_gps += G + + var/list/remote_gps = cumulative.display_list() // Fetch information for all units except the ones inside of this device + + for(var/obj/item/device/gps/G in toggled_gps) // Reenable any internal GPS units + G.tracking = TRUE + + stagps["enabled"] = cumulative.tracking + stagps["long_range_en"] = (cumulative.long_range && !cumulative.local_mode) + + stagps["my_area_name"] = remote_gps["my_area_name"] + stagps["curr_x"] = remote_gps["curr_x"] + stagps["curr_y"] = remote_gps["curr_y"] + stagps["curr_z"] = remote_gps["curr_z"] + stagps["curr_z_name"] = remote_gps["curr_z_name"] + + extgps = remote_gps["gps_list"] // Compiled by the GPS + + qdel(cumulative) // Don't want spare GPS units building up in the contents + + return list( + intgps, + extgps, + stagps + ) + +// Collects the current status of the supply shuttle +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 55 +/obj/item/weapon/commcard/proc/get_supply_shuttle_status() + var/shuttle_status[0] + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if(shuttle) + if(shuttle.has_arrive_time()) + shuttle_status["location"] = "In transit" + shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT + shuttle_status["time"] = shuttle.eta_minutes() + + else + shuttle_status["time"] = 0 + if(shuttle.at_station()) + if(shuttle.docking_controller) + switch(shuttle.docking_controller.get_docking_status()) + if("docked") + shuttle_status["location"] = "Docked" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + if("undocked") + shuttle_status["location"] = "Undocked" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED + if("docking") + shuttle_status["location"] = "Docking" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKING + shuttle_status["force"] = shuttle.can_force() + if("undocking") + shuttle_status["location"] = "Undocking" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING + shuttle_status["force"] = shuttle.can_force() + + else + shuttle_status["location"] = "Station" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + + else + shuttle_status["location"] = "Away" + shuttle_status["mode"] = SUP_SHUTTLE_AWAY + + if(shuttle.can_launch()) + shuttle_status["launch"] = 1 + else if(shuttle.can_cancel()) + shuttle_status["launch"] = 2 + else + shuttle_status["launch"] = 0 + + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) + shuttle_status["engine"] = "Idle" + if(SHUTTLE_WARMUP) + shuttle_status["engine"] = "Warming up" + if(SHUTTLE_INTRANSIT) + shuttle_status["engine"] = "Engaged" + + else + shuttle["mode"] = SUP_SHUTTLE_ERROR + + return shuttle_status + +// Compiles the list of supply orders +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 130 +/obj/item/weapon/commcard/proc/get_supply_orders() + var/orders[0] + for(var/datum/supply_order/S in supply_controller.order_history) + orders[++orders.len] = list( + "ref" = "\ref[S]", + "status" = S.status, + "entries" = list( + list("field" = "Supply Pack", "entry" = S.name), + list("field" = "Cost", "entry" = S.cost), + list("field" = "Index", "entry" = S.index), + list("field" = "Reason", "entry" = S.comment), + list("field" = "Ordered by", "entry" = S.ordered_by), + list("field" = "Ordered at", "entry" = S.ordered_at), + list("field" = "Approved by", "entry" = S.approved_by), + list("field" = "Approved at", "entry" = S.approved_at) + ) + ) + + return orders + +// Compiles the list of supply export receipts +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 147 +/obj/item/weapon/commcard/proc/get_supply_receipts() + var/receipts[0] + for(var/datum/exported_crate/E in supply_controller.exported_crates) + receipts[++receipts.len] = list( + "ref" = "\ref[E]", + "contents" = E.contents, + "error" = E.contents["error"], + "title" = list( + list("field" = "Name", "entry" = E.name), + list("field" = "Value", "entry" = E.value) + ) + ) + return receipts + + +// Compiles the list of supply packs for the category currently stored in internal_data["supply_category"] +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 147 +/obj/item/weapon/commcard/proc/get_supply_pack_list() + var/supply_packs[0] + for(var/pack_name in supply_controller.supply_pack) + var/datum/supply_pack/P = supply_controller.supply_pack[pack_name] + if(P.group == internal_data["supply_category"]) + var/list/pack = list( + "name" = P.name, + "cost" = P.cost, + "contraband" = P.contraband, + "manifest" = uniquelist(P.manifest), + "random" = P.num_contained, + "expand" = 0, + "ref" = "\ref[P]" + ) + + if(P in internal_data["supply_pack_expanded"]) + pack["expand"] = 1 + + supply_packs[++supply_packs.len] = pack + + return supply_packs + + +// Compiles miscellaneous data and permissions used by the supply template +/obj/item/weapon/commcard/proc/get_misc_supply_data() + return list( + "shuttle_auth" = (internal_data["supply_controls"] & SUP_SEND_SHUTTLE), + "order_auth" = (internal_data["supply_controls"] & SUP_ACCEPT_ORDERS), + "supply_points" = supply_controller.points, + "supply_categories" = all_supply_groups + ) + +/obj/item/weapon/commcard/proc/get_status_display() + return list( + "line1" = internal_data["stat_display_line1"], + "line2" = internal_data["stat_display_line2"], + "active_line1" = internal_data["stat_display_active1"], + "active_line2" = internal_data["stat_display_active2"], + "active" = internal_data["stat_display_special"] + ) + +/obj/item/weapon/commcard/proc/find_blast_doors() + var/target_doors[0] + for(var/obj/machinery/door/blast/B in machines) + if(B.id == internal_data["shuttle_door_code"]) + target_doors += B + + return target_doors \ No newline at end of file diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index af9d697d63..1ddfa04bf0 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -32,8 +32,8 @@ /obj/item/device/defib_kit/Destroy() . = ..() - qdel_null(paddles) - qdel_null(bcell) + QDEL_NULL(paddles) + QDEL_NULL(bcell) /obj/item/device/defib_kit/loaded //starts with a cell bcell = /obj/item/weapon/cell/apc @@ -94,7 +94,7 @@ to_chat(user, "You install a cell in \the [src].") update_icon() - else if(isscrewdriver(W)) + else if(W.is_screwdriver()) if(bcell) bcell.update_icon() bcell.forceMove(get_turf(src.loc)) diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 78f385a8aa..c62cb541ce 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -68,6 +68,55 @@ var/list/GPS_list = list() /obj/item/device/gps/attack_self(mob/user) display(user) + // Compiles all the data not available directly from the GPS + // Like the positions and directions to all other GPS units +/obj/item/device/gps/proc/display_list() + var/list/dat = list() + + var/turf/curr = get_turf(src) + var/area/my_area = get_area(src) + + dat["my_area_name"] = my_area.name + dat["curr_x"] = curr.x + dat["curr_y"] = curr.y + dat["curr_z"] = curr.z + dat["curr_z_name"] = using_map.get_zlevel_name(curr.z) + dat["gps_list"] = list() + dat["z_level_detection"] = using_map.get_map_levels(curr.z, long_range) + + for(var/obj/item/device/gps/G in GPS_list - src) + if(!G.tracking || G.emped || G.hide_signal) + continue + + var/turf/T = get_turf(G) + if(local_mode && curr.z != T.z) + continue + if(!(T.z in dat["z_level_detection"])) + continue + + var/gps_data[0] + gps_data["ref"] = G + gps_data["gps_tag"] = G.gps_tag + + var/area/A = get_area(G) + gps_data["area_name"] = A.name + if(istype(A, /area/submap)) + gps_data["area_name"] = "Unknown Area" // Avoid spoilers. + + gps_data["z_name"] = using_map.get_zlevel_name(T.z) + gps_data["direction"] = get_adir(curr, T) + gps_data["degrees"] = round(Get_Angle(curr,T)) + gps_data["distX"] = T.x - curr.x + gps_data["distY"] = T.y - curr.y + gps_data["distance"] = get_dist(curr, T) + gps_data["local"] = (curr.z == T.z) + gps_data["x"] = T.x + gps_data["y"] = T.y + + dat["gps_list"][++dat["gps_list"].len] = gps_data + + return dat + /obj/item/device/gps/proc/display(mob/user) if(!tracking) to_chat(user, "The device is off. Alt-click it to turn it on.") @@ -77,48 +126,20 @@ var/list/GPS_list = list() return var/list/dat = list() + var/list/gps_data = display_list() - var/turf/curr = get_turf(src) - var/area/my_area = get_area(src) - dat += "Current location: [my_area.name] ([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])" + dat += "Current location: [gps_data["my_area_name"]] ([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])" dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. \[Change Tag\] \ \[Toggle Scan Range\] \ [can_hide_signal ? "\[Toggle Signal Visibility\]":""]" - var/list/signals = list() - - for(var/gps in GPS_list) - var/obj/item/device/gps/G = gps - if(G.emped || !G.tracking || G.hide_signal || G == src) // Their GPS isn't on or functional. - continue - var/turf/T = get_turf(G) - var/z_level_detection = using_map.get_map_levels(curr.z, long_range) - - if(local_mode && T.z != curr.z) // Only care about the current z-level. - continue - else if(!(T.z in z_level_detection)) // Too far away. - continue - - var/area/their_area = get_area(G) - var/area_name = their_area.name - if(istype(their_area, /area/submap)) - area_name = "Unknown Area" // Avoid spoilers. - var/Z_name = using_map.get_zlevel_name(T.z) - var/direction = get_adir(curr, T) - var/distX = T.x - curr.x - var/distY = T.y - curr.y - var/distance = get_dist(curr, T) - var/local = curr.z == T.z ? TRUE : FALSE - - if(istype(gps, /obj/item/device/gps/internal/poi)) - signals += " [G.gps_tag]: [area_name] - [local ? "[direction] Dist: [round(distance, 10)]m" : "in \the [Z_name]"]" - else - signals += " [G.gps_tag]: [area_name], ([T.x], [T.y]) - [local ? "[direction] Dist: [distX ? "[abs(round(distX, 1))]m [(distX > 0) ? "E" : "W"], " : ""][distY ? "[abs(round(distY, 1))]m [(distY > 0) ? "N" : "S"]" : ""]" : "in \the [Z_name]"]" - - if(signals.len) + if(gps_data["gps_list"].len) dat += "Detected signals;" - for(var/line in signals) - dat += line + for(var/gps in gps_data["gps_list"]) + if(istype(gps_data["ref"], /obj/item/device/gps/internal/poi)) + dat += " [gps["gps_tag"]]: [gps["area_name"]] - [gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "in \the [gps["z_name"]]"]" + else + dat += " [gps["gps_tag"]]: [gps["area_name"]], ([gps["x"]], [gps["y"]]) - [gps["local"] ? "[gps["direction"]] Dist: [gps["distX"] ? "[abs(round(gps["distX"], 1))]m [(gps["distX"] > 0) ? "E" : "W"], " : ""][gps["distY"] ? "[abs(round(gps["distY"], 1))]m [(gps["distY"] > 0) ? "N" : "S"]" : ""]" : "in \the [gps["z_name"]]"]" else dat += "No other signals detected." @@ -221,45 +242,17 @@ var/list/GPS_list = list() return var/list/dat = list() + var/list/gps_data = display_list() - var/turf/curr = get_turf(src) - var/area/my_area = get_area(src) - dat += "Current location: [my_area.name] ([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])" + dat += "Current location: [gps_data["my_area_name"]] ([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])" dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. \[Change Tag\] \ \[Toggle Scan Range\] \ [can_hide_signal ? "\[Toggle Signal Visibility\]":""]" - var/list/signals = list() - - for(var/gps in GPS_list) - var/obj/item/device/gps/G = gps - if(G.emped || !G.tracking || G.hide_signal || G == src) // Their GPS isn't on or functional. - continue - var/turf/T = get_turf(G) - var/z_level_detection = using_map.get_map_levels(curr.z, long_range) - - if(local_mode && T.z != curr.z) // Only care about the current z-level. - continue - else if(!(T.z in z_level_detection)) // Too far away. - continue - - var/area/their_area = get_area(G) - var/area_name = their_area.name - if(istype(their_area, /area/submap)) - area_name = "Unknown Area" // Avoid spoilers. - var/Z_name = using_map.get_zlevel_name(T.z) - var/coord = "[T.x], [T.y], [Z_name]" - var/degrees = round(Get_Angle(curr, T)) - var/direction = get_adir(curr, T) - var/distance = get_dist(curr, T) - var/local = curr.z == T.z ? TRUE : FALSE - - signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]" - - if(signals.len) + if(gps_data["gps_list"].len) dat += "Detected signals;" - for(var/line in signals) - dat += line + for(var/gps in gps_data["gps_list"]) + dat += " [gps["gps_tag"]]: [gps["area_name"]] ([gps["x"]], [gps["y"]], [gps["z_name"]]) [gps["local"] ? "Dist: [gps["distance"]]m Dir: [gps["degrees"]]° ([gps["direction"]])" :""]" else dat += "No other signals detected." diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index 9ae5f62732..fb3d8d9bcc 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -24,7 +24,7 @@ return ..() /obj/item/device/multitool/hacktool/attackby(var/obj/item/W, var/mob/user) - if(isscrewdriver(W)) + if(W.is_screwdriver()) in_hack_mode = !in_hack_mode playsound(src.loc, W.usesound, 50, 1) else @@ -62,7 +62,7 @@ if(hack_result && in_hack_mode) user << "Your hacking attempt was succesful!" - user.playsound_local(get_turf(src), 'sound/piano/A#6.ogg', 50) + user.playsound_local(get_turf(src), 'sound/instruments/piano/An6.ogg', 50) else user << "Your hacking attempt failed!" return 0 diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 69905f0cb8..343a58ce1a 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -54,7 +54,7 @@ else to_chat(user, "[src] already has a diode.") - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(diode) to_chat(user, "You remove the [diode.name] from the [src].") diode.loc = get_turf(src.loc) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index fc3c03518b..9c9f1aba59 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -91,12 +91,12 @@ to_chat(user, "You re-scramble \the [src]'s voice synthesizer.") return 1 -/obj/item/device/megaphone/super/verb/turn_volume_dial(mob/living/user) +/obj/item/device/megaphone/super/verb/turn_volume_dial() set name = "Change Volume" set desc = "Allows you to change the megaphone's volume." set category = "Object" - adjust_volume(user) + adjust_volume(usr) /obj/item/device/megaphone/super/proc/adjust_volume(var/mob/living/user) var/new_volume = input(user, "Set Volume") as null|anything in volume_options @@ -104,12 +104,12 @@ if(new_volume && Adjacent(user)) broadcast_size = new_volume -/obj/item/device/megaphone/super/verb/change_font(mob/living/user) +/obj/item/device/megaphone/super/verb/change_font() set name = "Change... Pronunciation?" set desc = "Allows you to change the megaphone's font." set category = "Object" - adjust_font(user) + adjust_font(usr) /obj/item/device/megaphone/super/proc/adjust_font(var/mob/living/user) var/new_font = input(user, "Set Volume") as null|anything in font_options @@ -117,12 +117,12 @@ if(new_font && Adjacent(user)) broadcast_font = new_font -/obj/item/device/megaphone/super/verb/change_color(mob/living/user) +/obj/item/device/megaphone/super/verb/change_color() set name = "Change... Tune?" set desc = "Allows you to change the megaphone's color." set category = "Object" - adjust_color(user) + adjust_color(usr) /obj/item/device/megaphone/super/proc/adjust_color(var/mob/living/user) var/new_color = input(user, "Set Volume") as null|anything in color_options diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 8f2827c7ab..2ffebcb81a 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) //Will stop people throwing friend pAIs into the singularity so they can respawn if(!isnull(pai)) pai.death(0) - qdel_null(radio) + QDEL_NULL(radio) return ..() /obj/item/device/paicard/attack_self(mob/user) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index f3bc620d08..6ea73e8c78 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -30,13 +30,13 @@ ..() /obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(mode == 0) var/turf/T = loc if(isturf(T) && !!T.is_plating()) attached = locate() in T if(!attached) - user << "No exposed cable here to attach to." + to_chat(user, "No exposed cable here to attach to.") return else anchored = 1 @@ -45,7 +45,7 @@ playsound(src, I.usesound, 50, 1) return else - user << "Device must be placed over an exposed cable to attach to it." + to_chat(user, "Device must be placed over an exposed cable to attach to it.") return else if (mode == 2) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 105eb3aa8f..a67a2bef7b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -40,8 +40,8 @@ if(!(..(user, 1) && radio_desc)) return - user << "The following channels are available:" - user << radio_desc + to_chat(user, "The following channels are available:") + to_chat(user, radio_desc) /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") @@ -326,10 +326,10 @@ /obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) // ..() user.set_machine(src) - if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ )))) + if(!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey))) return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(keyslot1 || keyslot2) @@ -353,15 +353,15 @@ keyslot2 = null recalculateChannels() - user << "You pop out the encryption keys in the headset!" + to_chat(user, "You pop out the encryption keys in the headset!") playsound(src, W.usesound, 50, 1) else - user << "This headset doesn't have any encryption keys! How useless..." + to_chat(user, "This headset doesn't have any encryption keys! How useless...") if(istype(W, /obj/item/device/encryptionkey/)) if(keyslot1 && keyslot2) - user << "The headset can't hold another key!" + to_chat(user, "The headset can't hold another key!") return if(!keyslot1) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 5bc75ca2a0..d462b670f9 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -119,9 +119,9 @@ /obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob) add_fingerprint(user) - if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up. + if(W.is_screwdriver()) // Opening the intercom up. wiresexposed = !wiresexposed - user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]") playsound(src, W.usesound, 50, 1) if(wiresexposed) if(!on) @@ -131,7 +131,7 @@ else icon_state = "intercom" return - if(wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + if(wiresexposed && W.is_wirecutter()) user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") playsound(src, W.usesound, 50, 1) new/obj/item/stack/cable_coil(get_turf(src), 5) diff --git a/code/game/objects/items/devices/radio/jammer.dm b/code/game/objects/items/devices/radio/jammer.dm index cc6554ea7c..b129657d19 100644 --- a/code/game/objects/items/devices/radio/jammer.dm +++ b/code/game/objects/items/devices/radio/jammer.dm @@ -35,7 +35,7 @@ var/global/list/active_radio_jammers = list() /obj/item/device/radio_jammer/Destroy() if(on) turn_off() - qdel_null(power_source) + QDEL_NULL(power_source) return ..() /obj/item/device/radio_jammer/get_cell() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 716bbff1b8..6061cbf7d5 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -119,7 +119,7 @@ var/global/list/default_medbay_channels = list( if(syndie) data["useSyndMode"] = 1 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430) ui.set_initial_data(data) @@ -230,7 +230,7 @@ var/global/list/default_medbay_channels = list( return 1 if(.) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT var/datum/radio_frequency/connection = null @@ -561,7 +561,7 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() user.set_machine(src) - if (!( istype(W, /obj/item/weapon/screwdriver) )) + if (!W.is_screwdriver()) return b_stat = !( b_stat ) if(!istype(src, /obj/item/device/radio/beacon)) @@ -613,10 +613,10 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob) // ..() user.set_machine(src) - if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ )))) + if (!(W.is_screwdriver() || istype(W, /obj/item/device/encryptionkey))) return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(keyslot) @@ -632,15 +632,15 @@ var/global/list/default_medbay_channels = list( keyslot = null recalculateChannels() - user << "You pop out the encryption key in the radio!" + to_chat(user, "You pop out the encryption key in the radio!") playsound(src, W.usesound, 50, 1) else - user << "This radio doesn't have any encryption keys!" + to_chat(user, "This radio doesn't have any encryption keys!") if(istype(W, /obj/item/device/encryptionkey/)) if(keyslot) - user << "The radio can't hold another key!" + to_chat(user, "The radio can't hold another key!") return if(!keyslot) @@ -692,9 +692,9 @@ var/global/list/default_medbay_channels = list( if(enable_subspace_transmission != subspace_transmission) subspace_transmission = !subspace_transmission if(subspace_transmission) - usr << "Subspace Transmission is enabled" + to_chat(usr, "Subspace Transmission is enabled") else - usr << "Subspace Transmission is disabled" + to_chat(usr, "Subspace Transmission is disabled") if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled channels = list() @@ -707,14 +707,14 @@ var/global/list/default_medbay_channels = list( shut_up = !shut_up if(shut_up) canhear_range = 0 - usr << "Loadspeaker disabled." + to_chat(usr, "Loadspeaker disabled.") else canhear_range = 3 - usr << "Loadspeaker enabled." + to_chat(usr, "Loadspeaker enabled.") . = 1 if(.) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/item/device/radio/borg/interact(mob/user as mob) if(!on) @@ -743,7 +743,7 @@ var/global/list/default_medbay_channels = list( data["has_subspace"] = 1 data["subspace"] = subspace_transmission - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430) ui.set_initial_data(data) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 2040f22a99..6efc045785 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -122,7 +122,7 @@ cell.add_fingerprint(user) cell.update_icon() - user << "You remove \the [src.cell]." + to_chat(user, "You remove \the [src.cell].") src.cell = null updateicon() return @@ -134,16 +134,16 @@ turn_off() else turn_on() - user << "You switch \the [src] [on ? "on" : "off"]." + to_chat(user, "You switch \the [src] [on ? "on" : "off"].") /obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/screwdriver)) + if (W.is_screwdriver()) if(cover_open) cover_open = 0 - user << "You screw the panel into place." + to_chat(user, "You screw the panel into place.") else cover_open = 1 - user << "You unscrew the panel." + to_chat(user, "You unscrew the panel.") playsound(src, W.usesound, 50, 1) updateicon() return @@ -151,12 +151,12 @@ if (istype(W, /obj/item/weapon/cell)) if(cover_open) if(cell) - user << "There is a [cell] already installed here." + to_chat(user, "There is a [cell] already installed here.") else user.drop_item() W.loc = src cell = W - user << "You insert the [cell]." + to_chat(user, "You insert the [cell].") updateicon() return @@ -177,19 +177,19 @@ if (on) if (attached_to_suit(src.loc)) - user << "It's switched on and running." + to_chat(user, "It's switched on and running.") else - user << "It's switched on, but not attached to anything." + to_chat(user, "It's switched on, but not attached to anything.") else - user << "It is switched off." + to_chat(user, "It is switched off.") if (cover_open) if(cell) - user << "The panel is open, exposing the [cell]." + to_chat(user, "The panel is open, exposing the [cell].") else - user << "The panel is open." + to_chat(user, "The panel is open.") if (cell) - user << "The charge meter reads [round(cell.percent())]%." + to_chat(user, "The charge meter reads [round(cell.percent())]%.") else - user << "It doesn't have a power cell installed." + to_chat(user, "It doesn't have a power cell installed.") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 791725c14b..841bcc18ed 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -414,7 +414,7 @@ /obj/item/device/tape/attackby(obj/item/I, mob/user, params) - if(ruined && istype(I, /obj/item/weapon/screwdriver)) + if(ruined && I.is_screwdriver()) to_chat(user, "You start winding the tape back in...") playsound(src, I.usesound, 50, 1) if(do_after(user, 120 * I.toolspeed, target = src)) diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm index bc0c9d5304..47dfc256fc 100644 --- a/code/game/objects/items/devices/text_to_speech.dm +++ b/code/game/objects/items/devices/text_to_speech.dm @@ -1,7 +1,7 @@ /obj/item/device/text_to_speech name = "TTS device" desc = "A device that speaks an inputted message. Given to crew which can not speak properly or at all." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_setups.dmi' icon_state = "setup_small" w_class = ITEMSIZE_SMALL var/named diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 35697914ee..8abc2eabc2 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -37,7 +37,7 @@ log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") update_icon() - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src //TODO: Have this take an assemblyholder else if(isassembly(item)) var/obj/item/device/assembly/A = item @@ -58,7 +58,7 @@ message_admins("[key_name_admin(user)] attached a [item] to a transfer valve. (JMP)") log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") attacher = user - nanomanager.update_uis(src) // update all UIs attached to src + GLOB.nanomanager.update_uis(src) // update all UIs attached to src return @@ -81,7 +81,7 @@ data["valveOpen"] = valve_open ? 1 : 0 // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -150,7 +150,7 @@ tank_two = null else return - + T.loc = get_turf(src) update_icon() @@ -166,18 +166,18 @@ /obj/item/device/transfer_valve/proc/split_gases() if(!valve_open) return - + valve_open = 0 - - if(QDELETED(tank_one) || QDELETED(tank_two)) + + if(QDELETED(tank_one) || QDELETED(tank_two)) return - + var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume var/datum/gas_mixture/temp temp = tank_two.air_contents.remove_ratio(ratio1) tank_one.air_contents.merge(temp) tank_two.air_contents.volume -= tank_one.air_contents.volume - + /* Exadv1: I know this isn't how it's going to work, but this was just to check diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index 83024e16e2..2778f46b03 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -72,7 +72,7 @@ discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1) next_offer_time = world.time + offer_time update_nano_data() - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) // Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated. /obj/item/device/uplink/hidden/proc/toggle() @@ -110,7 +110,7 @@ data += nanoui_data // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // No auto-refresh ui = new(user, src, ui_key, "uplink.tmpl", title, 450, 600, state = inventory_state) data["menu"] = 0 @@ -138,7 +138,7 @@ UI.buy(src, usr) else if(href_list["lock"]) toggle() - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") ui.close() else if(href_list["return"]) nanoui_menu = round(nanoui_menu/10) diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm index 683c74bd02..5dc215cf91 100644 --- a/code/game/objects/items/devices/violin.dm +++ b/code/game/objects/items/devices/violin.dm @@ -1,392 +1,41 @@ //copy pasta of the space piano, don't hurt me -Pete - -/obj/item/device/violin - name = "space violin" - desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"" +/obj/item/device/instrument + name = "generic instrument" + var/datum/song/handheld/song + var/instrumentId = "generic" + var/instrumentExt = "mid" icon = 'icons/obj/musician.dmi' - icon_state = "violin" force = 10 - var/datum/song/song - var/playing = 0 - var/help = 0 - var/edit = 1 - var/repeat = 0 -/obj/item/device/violin/proc/playnote(var/note as text) - //world << "Note: [note]" - var/soundfile - /*BYOND loads resource files at compile time if they are ''. This means you can't really manipulate them dynamically. - Tried doing it dynamically at first but its more trouble than its worth. Would have saved many lines tho.*/ - switch(note) - if("Cn1") soundfile = 'sound/violin/Cn1.mid' - if("C#1") soundfile = 'sound/violin/C#1.mid' - if("Db1") soundfile = 'sound/violin/Db1.mid' - if("Dn1") soundfile = 'sound/violin/Dn1.mid' - if("D#1") soundfile = 'sound/violin/D#1.mid' - if("Eb1") soundfile = 'sound/violin/Eb1.mid' - if("En1") soundfile = 'sound/violin/En1.mid' - if("E#1") soundfile = 'sound/violin/E#1.mid' - if("Fb1") soundfile = 'sound/violin/Fb1.mid' - if("Fn1") soundfile = 'sound/violin/Fn1.mid' - if("F#1") soundfile = 'sound/violin/F#1.mid' - if("Gb1") soundfile = 'sound/violin/Gb1.mid' - if("Gn1") soundfile = 'sound/violin/Gn1.mid' - if("G#1") soundfile = 'sound/violin/G#1.mid' - if("Ab1") soundfile = 'sound/violin/Ab1.mid' - if("An1") soundfile = 'sound/violin/An1.mid' - if("A#1") soundfile = 'sound/violin/A#1.mid' - if("Bb1") soundfile = 'sound/violin/Bb1.mid' - if("Bn1") soundfile = 'sound/violin/Bn1.mid' - if("B#1") soundfile = 'sound/violin/B#1.mid' - if("Cb2") soundfile = 'sound/violin/Cb2.mid' - if("Cn2") soundfile = 'sound/violin/Cn2.mid' - if("C#2") soundfile = 'sound/violin/C#2.mid' - if("Db2") soundfile = 'sound/violin/Db2.mid' - if("Dn2") soundfile = 'sound/violin/Dn2.mid' - if("D#2") soundfile = 'sound/violin/D#2.mid' - if("Eb2") soundfile = 'sound/violin/Eb2.mid' - if("En2") soundfile = 'sound/violin/En2.mid' - if("E#2") soundfile = 'sound/violin/E#2.mid' - if("Fb2") soundfile = 'sound/violin/Fb2.mid' - if("Fn2") soundfile = 'sound/violin/Fn2.mid' - if("F#2") soundfile = 'sound/violin/F#2.mid' - if("Gb2") soundfile = 'sound/violin/Gb2.mid' - if("Gn2") soundfile = 'sound/violin/Gn2.mid' - if("G#2") soundfile = 'sound/violin/G#2.mid' - if("Ab2") soundfile = 'sound/violin/Ab2.mid' - if("An2") soundfile = 'sound/violin/An2.mid' - if("A#2") soundfile = 'sound/violin/A#2.mid' - if("Bb2") soundfile = 'sound/violin/Bb2.mid' - if("Bn2") soundfile = 'sound/violin/Bn2.mid' - if("B#2") soundfile = 'sound/violin/B#2.mid' - if("Cb3") soundfile = 'sound/violin/Cb3.mid' - if("Cn3") soundfile = 'sound/violin/Cn3.mid' - if("C#3") soundfile = 'sound/violin/C#3.mid' - if("Db3") soundfile = 'sound/violin/Db3.mid' - if("Dn3") soundfile = 'sound/violin/Dn3.mid' - if("D#3") soundfile = 'sound/violin/D#3.mid' - if("Eb3") soundfile = 'sound/violin/Eb3.mid' - if("En3") soundfile = 'sound/violin/En3.mid' - if("E#3") soundfile = 'sound/violin/E#3.mid' - if("Fb3") soundfile = 'sound/violin/Fb3.mid' - if("Fn3") soundfile = 'sound/violin/Fn3.mid' - if("F#3") soundfile = 'sound/violin/F#3.mid' - if("Gb3") soundfile = 'sound/violin/Gb3.mid' - if("Gn3") soundfile = 'sound/violin/Gn3.mid' - if("G#3") soundfile = 'sound/violin/G#3.mid' - if("Ab3") soundfile = 'sound/violin/Ab3.mid' - if("An3") soundfile = 'sound/violin/An3.mid' - if("A#3") soundfile = 'sound/violin/A#3.mid' - if("Bb3") soundfile = 'sound/violin/Bb3.mid' - if("Bn3") soundfile = 'sound/violin/Bn3.mid' - if("B#3") soundfile = 'sound/violin/B#3.mid' - if("Cb4") soundfile = 'sound/violin/Cb4.mid' - if("Cn4") soundfile = 'sound/violin/Cn4.mid' - if("C#4") soundfile = 'sound/violin/C#4.mid' - if("Db4") soundfile = 'sound/violin/Db4.mid' - if("Dn4") soundfile = 'sound/violin/Dn4.mid' - if("D#4") soundfile = 'sound/violin/D#4.mid' - if("Eb4") soundfile = 'sound/violin/Eb4.mid' - if("En4") soundfile = 'sound/violin/En4.mid' - if("E#4") soundfile = 'sound/violin/E#4.mid' - if("Fb4") soundfile = 'sound/violin/Fb4.mid' - if("Fn4") soundfile = 'sound/violin/Fn4.mid' - if("F#4") soundfile = 'sound/violin/F#4.mid' - if("Gb4") soundfile = 'sound/violin/Gb4.mid' - if("Gn4") soundfile = 'sound/violin/Gn4.mid' - if("G#4") soundfile = 'sound/violin/G#4.mid' - if("Ab4") soundfile = 'sound/violin/Ab4.mid' - if("An4") soundfile = 'sound/violin/An4.mid' - if("A#4") soundfile = 'sound/violin/A#4.mid' - if("Bb4") soundfile = 'sound/violin/Bb4.mid' - if("Bn4") soundfile = 'sound/violin/Bn4.mid' - if("B#4") soundfile = 'sound/violin/B#4.mid' - if("Cb5") soundfile = 'sound/violin/Cb5.mid' - if("Cn5") soundfile = 'sound/violin/Cn5.mid' - if("C#5") soundfile = 'sound/violin/C#5.mid' - if("Db5") soundfile = 'sound/violin/Db5.mid' - if("Dn5") soundfile = 'sound/violin/Dn5.mid' - if("D#5") soundfile = 'sound/violin/D#5.mid' - if("Eb5") soundfile = 'sound/violin/Eb5.mid' - if("En5") soundfile = 'sound/violin/En5.mid' - if("E#5") soundfile = 'sound/violin/E#5.mid' - if("Fb5") soundfile = 'sound/violin/Fb5.mid' - if("Fn5") soundfile = 'sound/violin/Fn5.mid' - if("F#5") soundfile = 'sound/violin/F#5.mid' - if("Gb5") soundfile = 'sound/violin/Gb5.mid' - if("Gn5") soundfile = 'sound/violin/Gn5.mid' - if("G#5") soundfile = 'sound/violin/G#5.mid' - if("Ab5") soundfile = 'sound/violin/Ab5.mid' - if("An5") soundfile = 'sound/violin/An5.mid' - if("A#5") soundfile = 'sound/violin/A#5.mid' - if("Bb5") soundfile = 'sound/violin/Bb5.mid' - if("Bn5") soundfile = 'sound/violin/Bn5.mid' - if("B#5") soundfile = 'sound/violin/B#5.mid' - if("Cb6") soundfile = 'sound/violin/Cb6.mid' - if("Cn6") soundfile = 'sound/violin/Cn6.mid' - if("C#6") soundfile = 'sound/violin/C#6.mid' - if("Db6") soundfile = 'sound/violin/Db6.mid' - if("Dn6") soundfile = 'sound/violin/Dn6.mid' - if("D#6") soundfile = 'sound/violin/D#6.mid' - if("Eb6") soundfile = 'sound/violin/Eb6.mid' - if("En6") soundfile = 'sound/violin/En6.mid' - if("E#6") soundfile = 'sound/violin/E#6.mid' - if("Fb6") soundfile = 'sound/violin/Fb6.mid' - if("Fn6") soundfile = 'sound/violin/Fn6.mid' - if("F#6") soundfile = 'sound/violin/F#6.mid' - if("Gb6") soundfile = 'sound/violin/Gb6.mid' - if("Gn6") soundfile = 'sound/violin/Gn6.mid' - if("G#6") soundfile = 'sound/violin/G#6.mid' - if("Ab6") soundfile = 'sound/violin/Ab6.mid' - if("An6") soundfile = 'sound/violin/An6.mid' - if("A#6") soundfile = 'sound/violin/A#6.mid' - if("Bb6") soundfile = 'sound/violin/Bb6.mid' - if("Bn6") soundfile = 'sound/violin/Bn6.mid' - if("B#6") soundfile = 'sound/violin/B#6.mid' - if("Cb7") soundfile = 'sound/violin/Cb7.mid' - if("Cn7") soundfile = 'sound/violin/Cn7.mid' - if("C#7") soundfile = 'sound/violin/C#7.mid' - if("Db7") soundfile = 'sound/violin/Db7.mid' - if("Dn7") soundfile = 'sound/violin/Dn7.mid' - if("D#7") soundfile = 'sound/violin/D#7.mid' - if("Eb7") soundfile = 'sound/violin/Eb7.mid' - if("En7") soundfile = 'sound/violin/En7.mid' - if("E#7") soundfile = 'sound/violin/E#7.mid' - if("Fb7") soundfile = 'sound/violin/Fb7.mid' - if("Fn7") soundfile = 'sound/violin/Fn7.mid' - if("F#7") soundfile = 'sound/violin/F#7.mid' - if("Gb7") soundfile = 'sound/violin/Gb7.mid' - if("Gn7") soundfile = 'sound/violin/Gn7.mid' - if("G#7") soundfile = 'sound/violin/G#7.mid' - if("Ab7") soundfile = 'sound/violin/Ab7.mid' - if("An7") soundfile = 'sound/violin/An7.mid' - if("A#7") soundfile = 'sound/violin/A#7.mid' - if("Bb7") soundfile = 'sound/violin/Bb7.mid' - if("Bn7") soundfile = 'sound/violin/Bn7.mid' - if("B#7") soundfile = 'sound/violin/B#7.mid' - if("Cb8") soundfile = 'sound/violin/Cb8.mid' - if("Cn8") soundfile = 'sound/violin/Cn8.mid' - if("C#8") soundfile = 'sound/violin/C#8.mid' - if("Db8") soundfile = 'sound/violin/Db8.mid' - if("Dn8") soundfile = 'sound/violin/Dn8.mid' - if("D#8") soundfile = 'sound/violin/D#8.mid' - if("Eb8") soundfile = 'sound/violin/Eb8.mid' - if("En8") soundfile = 'sound/violin/En8.mid' - if("E#8") soundfile = 'sound/violin/E#8.mid' - if("Fb8") soundfile = 'sound/violin/Fb8.mid' - if("Fn8") soundfile = 'sound/violin/Fn8.mid' - if("F#8") soundfile = 'sound/violin/F#8.mid' - if("Gb8") soundfile = 'sound/violin/Gb8.mid' - if("Gn8") soundfile = 'sound/violin/Gn8.mid' - if("G#8") soundfile = 'sound/violin/G#8.mid' - if("Ab8") soundfile = 'sound/violin/Ab8.mid' - if("An8") soundfile = 'sound/violin/An8.mid' - if("A#8") soundfile = 'sound/violin/A#8.mid' - if("Bb8") soundfile = 'sound/violin/Bb8.mid' - if("Bn8") soundfile = 'sound/violin/Bn8.mid' - if("B#8") soundfile = 'sound/violin/B#8.mid' - if("Cb9") soundfile = 'sound/violin/Cb9.mid' - if("Cn9") soundfile = 'sound/violin/Cn9.mid' - else return +/obj/item/device/instrument/New() + ..() + song = new(instrumentId, src) + song.instrumentExt = instrumentExt - hearers(15, get_turf(src)) << sound(soundfile) +/obj/item/device/instrument/Destroy() + qdel(song) + song = null + ..() -/obj/item/device/violin/proc/playsong() - do - var/cur_oct[7] - var/cur_acc[7] - for(var/i = 1 to 7) - cur_oct[i] = "3" - cur_acc[i] = "n" +/obj/item/device/instrument/attack_self(mob/user as mob) + if(!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return 1 + interact(user) - for(var/line in song.lines) - //world << line - for(var/beat in splittext(lowertext(line), ",")) - //world << "beat: [beat]" - var/list/notes = splittext(beat, "/") - for(var/note in splittext(notes[1], "-")) - //world << "note: [note]" - if(!playing || !isliving(loc))//If the violin is playing, or isn't held by a person - playing = 0 - return - if(lentext(note) == 0) - continue - //world << "Parse: [copytext(note,1,2)]" - var/cur_note = text2ascii(note) - 96 - if(cur_note < 1 || cur_note > 7) - continue - for(var/i=2 to lentext(note)) - var/ni = copytext(note,i,i+1) - if(!text2num(ni)) - if(ni == "#" || ni == "b" || ni == "n") - cur_acc[cur_note] = ni - else if(ni == "s") - cur_acc[cur_note] = "#" // so shift is never required - else - cur_oct[cur_note] = ni - playnote(uppertext(copytext(note,1,2)) + cur_acc[cur_note] + cur_oct[cur_note]) - if(notes.len >= 2 && text2num(notes[2])) - sleep(song.tempo / text2num(notes[2])) - else - sleep(song.tempo) - if(repeat > 0) - repeat-- //Infinite loops are baaaad. - while(repeat > 0) - playing = 0 - -/obj/item/device/violin/attack_self(mob/user as mob) - if(!isliving(user) || user.stat || user.restrained() || user.lying) return - user.set_machine(src) - - var/dat = "Violin" - - if(song) - if(song.lines.len > 0 && !(playing)) - dat += "Play Song

" - dat += "Repeat Song: [repeat] times.

" - if(playing) - dat += "Stop Playing
" - dat += "Repeats left: [repeat].

" - if(!edit) - dat += "Show Editor

" - else - dat += "Hide Editor
" - dat += "Start a New Song
" - dat += "Import a Song

" - if(song) - var/calctempo = (10/song.tempo)*60 - dat += "Tempo : -- [calctempo] BPM ++

" - var/linecount = 0 - for(var/line in song.lines) - linecount += 1 - dat += "Line [linecount]: [line] Delete Line Modify Line
" - dat += "Add Line

" - if(help) - dat += "Hide Help
" - dat += {" - Lines are a series of chords, separated by commas (,), each with notes seperated by hyphens (-).
- Every note in a chord will play together, with chord timed by the tempo.
-
- Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.
- By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.
- Example: C,D,E,F,G,A,B will play a C major scale.
- After a note has an accidental placed, it will be remembered: C,C4,C,C3 is C3,C4,C4,C3
- Chords can be played simply by seperating each note with a hyphon: A-C#,Cn-E,E-G#,Gn-B
- A pause may be denoted by an empty chord: C,E,,C,G
- To make a chord be a different time, end it with /x, where the chord length will be length
- defined by tempo / x: C,G/2,E/4
- Combined, an example is: E-E4/4,/2,G#/8,B/8,E3-E4/4 -
- Lines may be up to 50 characters.
- A song may only contain up to 50 lines.
- "} - else - dat += "Show Help
" - dat += "" - user << browse(dat, "window=violin;size=700x300") - onclose(user, "violin") - -/obj/item/device/violin/Topic(href, href_list) - - if(!in_range(src, usr) || issilicon(usr) || !isliving(usr) || !usr.canmove || usr.restrained()) - usr << browse(null, "window=violin;size=700x300") - onclose(usr, "violin") +/obj/item/device/instrument/interact(mob/user as mob) + if(!user) return - if(href_list["newsong"]) - song = new() - else if(song) - if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops. - if(playing) return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing. - var/tempnum = input("How many times do you want to repeat this piece? (max:10)") as num|null - if(tempnum > 10) - tempnum = 10 - if(tempnum < 0) - tempnum = 0 - repeat = round(tempnum) + if(user.incapacitated() || user.lying) + return - else if(href_list["tempo"]) - song.tempo += round(text2num(href_list["tempo"])) - if(song.tempo < 1) - song.tempo = 1 + user.set_machine(src) + song.interact(user) - else if(href_list["play"]) - if(song) - playing = 1 - spawn() playsong() - - else if(href_list["newline"]) - var/newline = html_encode(input("Enter your line: ", "violin") as text|null) - if(!newline) - return - if(song.lines.len > 50) - return - if(lentext(newline) > 50) - newline = copytext(newline, 1, 50) - song.lines.Add(newline) - - else if(href_list["deleteline"]) - var/num = round(text2num(href_list["deleteline"])) - if(num > song.lines.len || num < 1) - return - song.lines.Cut(num, num+1) - - else if(href_list["modifyline"]) - var/num = round(text2num(href_list["modifyline"]),1) - var/content = html_encode(input("Enter your line: ", "violin", song.lines[num]) as text|null) - if(!content) - return - if(lentext(content) > 50) - content = copytext(content, 1, 50) - if(num > song.lines.len || num < 1) - return - song.lines[num] = content - - else if(href_list["stop"]) - playing = 0 - - else if(href_list["help"]) - help = text2num(href_list["help"]) - 1 - - else if(href_list["edit"]) - edit = text2num(href_list["edit"]) - 1 - - else if(href_list["import"]) - var/t = "" - do - t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message) - if(!in_range(src, usr)) - return - - if(lentext(t) >= 3072) - var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") - if(cont == "no") - break - while(lentext(t) > 3072) - - //split into lines - spawn() - var/list/lines = splittext(t, "\n") - var/tempo = 5 - if(copytext(lines[1],1,6) == "BPM: ") - tempo = 600 / text2num(copytext(lines[1],6)) - lines.Cut(1,2) - if(lines.len > 50) - usr << "Too many lines!" - lines.Cut(51) - var/linenum = 1 - for(var/l in lines) - if(lentext(l) > 50) - usr << "Line [linenum] too long!" - lines.Remove(l) - else - linenum++ - song = new() - song.lines = lines - song.tempo = tempo - - add_fingerprint(usr) - for(var/mob/M in viewers(1, loc)) - if((M.client && M.machine == src)) - attack_self(M) - return +/obj/item/device/instrument/violin + name = "space violin" + desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"" + icon_state = "violin" + attack_verb = list("smashed") + instrumentId = "violin" diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm index 394212e4c4..af1b6c9c7a 100644 --- a/code/game/objects/items/poi_items.dm +++ b/code/game/objects/items/poi_items.dm @@ -54,7 +54,7 @@ name = "SCP" /obj/structure/largecrate/animal/crashedshuttle/initialize() - starts_with = pick(/mob/living/simple_animal/hostile/statue, /obj/item/cursed_marble, /obj/item/weapon/deadringer) + starts_with = list(pick(/mob/living/simple_animal/hostile/statue, /obj/item/cursed_marble, /obj/item/weapon/deadringer)) // Starts_with has to be a list name = pick("Spicy Crust Pizzeria", "Soap and Care Products", "Sally's Computer Parts", "Steve's Chocolate Pastries", "Smith & Christian's Plastics","Standard Containers & Packaging Co.", "Sanitary Chemical Purgation (LTD)") name += " delivery crate" return ..() diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm index 71d6e2d867..c15d73036a 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -153,11 +153,6 @@ name = T_BOARD("disease splicer") build_path = /obj/machinery/computer/diseasesplicer -/obj/item/weapon/circuitboard/ordercomp - name = T_BOARD("supply ordering console") - build_path = /obj/machinery/computer/ordercomp - origin_tech = list(TECH_DATA = 2) - /obj/item/weapon/circuitboard/mining_shuttle name = T_BOARD("mining shuttle console") build_path = /obj/machinery/computer/shuttle_control/mining diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm index fa9ed16797..791cd51cdc 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -7,15 +7,15 @@ build_path = /obj/machinery/computer/rdconsole/core /obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) playsound(src, I.usesound, 50, 1) user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") if(build_path == /obj/machinery/computer/rdconsole/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/computer/rdconsole/robotics - user << "Access protocols set to robotics." + to_chat(user, "Access protocols set to robotics.") else name = T_BOARD("RD Console") build_path = /obj/machinery/computer/rdconsole/core - user << "Access protocols set to default." + to_chat(user, "Access protocols set to default.") return \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/computer/supply.dm b/code/game/objects/items/weapons/circuitboards/computer/supply.dm index 5924e19ac0..324f1c1a06 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/supply.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/supply.dm @@ -3,11 +3,16 @@ #endif /obj/item/weapon/circuitboard/supplycomp - name = T_BOARD("supply control console") + name = T_BOARD("supply ordering console") build_path = /obj/machinery/computer/supplycomp - origin_tech = list(TECH_DATA = 3) + origin_tech = list(TECH_DATA = 2) var/contraband_enabled = 0 +/obj/item/weapon/circuitboard/supplycomp/control + name = T_BOARD("supply ordering console") + build_path = /obj/machinery/computer/supplycomp/control + origin_tech = list(TECH_DATA = 3) + /obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC) if (..(SC)) SC.can_order_contraband = contraband_enabled diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 31e0d9c063..3fc0aa26ab 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -12,17 +12,17 @@ obj/item/weapon/circuitboard/rdserver /obj/item/weapon/stock_parts/scanning_module = 1) obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) playsound(src, I.usesound, 50, 1) user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") if(build_path == /obj/machinery/r_n_d/server/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/r_n_d/server/robotics - user << "Access protocols set to robotics." + to_chat(user, "Access protocols set to robotics.") else name = T_BOARD("RD Console") build_path = /obj/machinery/r_n_d/server/core - user << "Access protocols set to default." + to_chat(user, "Access protocols set to default.") return /obj/item/weapon/circuitboard/destructive_analyzer diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index b49a76c5a9..5290ac7479 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -25,11 +25,11 @@ return ..() /obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) open_panel = !open_panel user << "You [open_panel ? "open" : "close"] the wire panel." playsound(src, I.usesound, 50, 1) - else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) + else if(I.is_wirecutter() || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) wires.Interact(user) else ..() diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 649b5677ca..919f8cb016 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -27,9 +27,9 @@ /obj/item/weapon/flamethrower/Destroy() - qdel_null(weldtool) - qdel_null(igniter) - qdel_null(ptank) + QDEL_NULL(weldtool) + QDEL_NULL(igniter) + QDEL_NULL(ptank) . = ..() /obj/item/weapon/flamethrower/process() @@ -70,7 +70,7 @@ /obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob) if(user.stat || user.restrained() || user.lying) return - if(iswrench(W) && !status)//Taking this apart + if(W.is_wrench() && !status)//Taking this apart var/turf/T = get_turf(src) if(weldtool) weldtool.loc = T @@ -85,7 +85,7 @@ qdel(src) return - if(isscrewdriver(W) && igniter && !lit) + if(W.is_screwdriver() && igniter && !lit) status = !status user << "[igniter] is now [status ? "secured" : "unsecured"]!" update_icon() diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index bef0f8fcd9..db9748e6af 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -46,7 +46,7 @@ /obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if (!istype(W, /obj/item/weapon/wirecutters)) + if (!W.is_wirecutter()) user << "I need wirecutters for that." return @@ -101,7 +101,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, /obj/item/device/paicard, - /obj/item/device/violin, + /obj/item/device/instrument/violin, /obj/item/weapon/storage/belt/utility/full, /obj/item/clothing/accessory/tie/horrible) @@ -129,7 +129,8 @@ if (!( locate(/obj/structure/table, src.loc) )) user << "You MUST put the paper on a table!" if (W.w_class < ITEMSIZE_LARGE) - if (user.get_type_in_hands(/obj/item/weapon/wirecutters)) + var/obj/item/I = user.get_inactive_hand() + if(I.is_wirecutter()) var/a_used = 2 ** (src.w_class - 1) if (src.amount < a_used) user << "You need more paper!" diff --git a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm index 2e16eb4106..6646e698f9 100644 --- a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm +++ b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm @@ -6,7 +6,7 @@ det_time = 20 origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) -/obj/item/weapon/grenade/anti_photon/prime() +/obj/item/weapon/grenade/anti_photon/detonate() playsound(src.loc, 'sound/effects/phasein.ogg', 50, 1, 5) set_light(10, -10, "#FFFFFF") diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 92de17d994..442e6c3f1d 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -20,8 +20,8 @@ create_reagents(1000) Destroy() - qdel_null(detonator) - qdel_null_list(beakers) + QDEL_NULL(detonator) + QDEL_NULL_LIST(beakers) return ..() attack_self(mob/user as mob) @@ -41,7 +41,7 @@ user.put_in_hands(B) name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" if(stage > 1 && !active && clown_check(user)) - user << "You prime \the [name]!" + to_chat(user, "You prime \the [name]!") msg_admin_attack("[key_name_admin(user)] primed \a [src]") @@ -56,13 +56,13 @@ if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && path != 2) var/obj/item/device/assembly_holder/det = W if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right))) - user << "Assembly must contain one igniter." + to_chat(user, "Assembly must contain one igniter.") return if(!det.secured) - user << "Assembly must be secured with screwdriver." + to_chat(user, "Assembly must be secured with screwdriver.") return path = 1 - user << "You add [W] to the metal casing." + to_chat(user, "You add [W] to the metal casing.") playsound(src.loc, 'sound/items/Screwdriver2.ogg', 25, -3) user.remove_from_mob(det) det.loc = src @@ -76,26 +76,26 @@ icon_state = initial(icon_state) +"_ass" name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" stage = 1 - else if(istype(W,/obj/item/weapon/screwdriver) && path != 2) + else if(W.is_screwdriver() && path != 2) if(stage == 1) path = 1 if(beakers.len) - user << "You lock the assembly." + to_chat(user, "You lock the assembly.") name = "grenade" else -// user << "You need to add at least one beaker before locking the assembly." - user << "You lock the empty assembly." +// to_chat(user, "You need to add at least one beaker before locking the assembly.") + to_chat(user, "You lock the empty assembly.") name = "fake grenade" playsound(src, W.usesound, 50, 1) icon_state = initial(icon_state) +"_locked" stage = 2 else if(stage == 2) if(active && prob(95)) - user << "You trigger the assembly!" - prime() + to_chat(user, "You trigger the assembly!") + detonate() return else - user << "You unlock the assembly." + to_chat(user, "You unlock the assembly.") playsound(src.loc, W.usesound, 50, -3) name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" icon_state = initial(icon_state) + (detonator?"_ass":"") @@ -104,23 +104,23 @@ else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) path = 1 if(beakers.len == 2) - user << "The grenade can not hold more containers." + to_chat(user, "The grenade can not hold more containers.") return else if(W.reagents.total_volume) - user << "You add \the [W] to the assembly." + to_chat(user, "You add \the [W] to the assembly.") user.drop_item() W.loc = src beakers += W stage = 1 name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" else - user << "\The [W] is empty." + to_chat(user, "\The [W] is empty.") examine(mob/user) ..(user) if(detonator) - user << "With attached [detonator.name]" + to_chat(user, "With attached [detonator.name]") activate(mob/user as mob) if(active) return @@ -144,7 +144,7 @@ if(active) icon_state = initial(icon_state) + (primed?"_primed":"_active") - prime() + detonate() if(!stage || stage<2) return var/has_reagents = 0 diff --git a/code/game/objects/items/weapons/grenades/concussion.dm b/code/game/objects/items/weapons/grenades/concussion.dm new file mode 100644 index 0000000000..073b5ed9d1 --- /dev/null +++ b/code/game/objects/items/weapons/grenades/concussion.dm @@ -0,0 +1,85 @@ +//Concussion, or 'dizzyness' grenades. + +/obj/item/weapon/grenade/concussion + name = "concussion grenade" + desc = "A polymer concussion grenade, optimized for disorienting personnel without causing large amounts of injury." + icon_state = "concussion" + item_state = "grenade" + + var/blast_radius = 5 + +/obj/item/weapon/grenade/concussion/detonate() + ..() + concussion_blast(get_turf(src), blast_radius) + qdel(src) + return + +/obj/proc/concussion_blast(atom/target, var/radius = 5) + var/turf/T = get_turf(target) + if(is_below_sound_pressure(T)) + visible_message("Whump.") + return + playsound(src.loc, 'sound/effects/bang.ogg', 75, 1, -3) + if(istype(T)) + for(var/mob/living/L in orange(T, radius)) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + to_chat(H, "WHUMP.") + + var/ear_safety = 0 + + H.get_ear_protection() + + var/bang_effectiveness = H.species.sound_mod + + if((get_dist(H, T) <= round(radius * 0.3 * bang_effectiveness) || src.loc == H.loc || src.loc == H)) + if(ear_safety > 0) + H.Confuse(2) + else + H.Confuse(8) + H.Weaken(1) + if ((prob(14) || (H == src.loc && prob(70)))) + H.ear_damage += rand(1, 10) + else + H.ear_damage += rand(0, 5) + H.ear_deaf = max(H.ear_deaf,15) + if(H.client) + if(prob(50)) + H.client.spinleft() + else + H.client.spinright() + + else if(get_dist(H, T) <= round(radius * 0.5 * bang_effectiveness)) + if(!ear_safety) + H.Confuse(6) + H.ear_damage += rand(0, 3) + H.ear_deaf = max(H.ear_deaf,10) + + if(H.client) + if(prob(50)) + H.client.spinleft() + else + H.client.spinright() + + else if(!ear_safety && get_dist(H, T) <= (radius * bang_effectiveness)) + H.Confuse(4) + H.ear_damage += rand(0, 1) + H.ear_deaf = max(H.ear_deaf,5) + + if(H.ear_damage >= 15) + to_chat(H, "Your ears start to ring badly!") + + if(prob(H.ear_damage - 5)) + to_chat(H, "You can't hear anything!") + H.sdisabilities |= DEAF + else if(H.ear_damage >= 5) + to_chat(H, "Your ears start to ring!") + if(istype(L, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = L + if(L.client) + if(prob(50)) + L.client.spinleft() + else + L.client.spinright() + to_chat(R, "Gyroscopic failure.") + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index 8f4cd48e2c..26c68b0f20 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -8,11 +8,11 @@ var/emp_light = 7 var/emp_long = 10 - prime() - ..() - if(empulse(src, emp_heavy, emp_med, emp_light, emp_long)) - qdel(src) - return +/obj/item/weapon/grenade/empgrenade/detonate() + ..() + if(empulse(src, emp_heavy, emp_med, emp_light, emp_long)) + qdel(src) + return /obj/item/weapon/grenade/empgrenade/low_yield name = "low yield emp grenade" diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm index ccf8b89ee2..3b4f6a4511 100644 --- a/code/game/objects/items/weapons/grenades/explosive.dm +++ b/code/game/objects/items/weapons/grenades/explosive.dm @@ -1,35 +1,3 @@ -//obj/item/weapon/grenade/explosive - //desc = "A fragmentation grenade, optimized for harming personnel without causing massive structural damage." - //name = "frag grenade" - //icon = 'icons/obj/grenade.dmi' - //det_time = 50 - //icon_state = "frggrenade" - //origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 3) - -//obj/item/weapon/grenade/explosive/prime() -// ..() - //spawn(0) - //explosion(src.loc,-1,-1,2) //If you're within two tiles of the grenade, you get hit twice, which tends to do 50+ brute and cause fractures. - //explosion(src.loc,-1,-1,3) //This is preferable to increasing the severity, so we don't decap with frags. - //qdel(src) - //return - -//Explosive grenade projectile, borrowed from fragmentation grenade code. -/obj/item/projectile/bullet/pellet/fragment - damage = 10 - armor_penetration = 30 - range_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer. - - base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone - spread_step = 20 - - silenced = 1 //embedding messages are still produced so it's kind of weird when enabled. - no_attack_log = 1 - muzzle_type = null - -/obj/item/projectile/bullet/pellet/fragment/strong - damage = 15 - armor_penetration = 20 /obj/item/weapon/grenade/explosive name = "fragmentation grenade" @@ -45,7 +13,7 @@ var/spread_range = 7 loadable = null -/obj/item/weapon/grenade/explosive/prime() +/obj/item/weapon/grenade/explosive/detonate() ..() var/turf/O = get_turf(src) @@ -56,6 +24,21 @@ src.fragmentate(O, num_fragments, spread_range, fragment_types) qdel(src) +/obj/item/weapon/grenade/explosive/proc/on_explosion(var/turf/O) + if(explosion_size) + explosion(O, -1, -1, explosion_size, round(explosion_size/2), 0) + +// Waaaaay more pellets +/obj/item/weapon/grenade/explosive/frag + name = "fragmentation grenade" + desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments." + icon_state = "frag" + loadable = null + + fragment_types = list(/obj/item/projectile/bullet/pellet/fragment) + num_fragments = 200 //total number of fragments produced by the grenade + + /obj/proc/fragmentate(var/turf/T=get_turf(src), var/fragment_number = 30, var/spreading_range = 5, var/list/fragtypes=list(/obj/item/projectile/bullet/pellet/fragment/)) set waitfor = 0 @@ -82,19 +65,11 @@ else P.attack_mob(M, 0, 100) //otherwise, allow a decent amount of fragments to pass - -/obj/item/weapon/grenade/explosive/proc/on_explosion(var/turf/O) - if(explosion_size) - explosion(O, -1, -1, explosion_size, round(explosion_size/2), 0) - - -/obj/item/weapon/grenade/explosive/frag - name = "fragmentation grenade" - desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments." - icon_state = "frag" - loadable = null - - fragment_types = list(/obj/item/projectile/bullet/pellet/fragment) - num_fragments = 200 //total number of fragments produced by the grenade - - //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern +/obj/item/weapon/grenade/explosive/mini + name = "mini fragmentation grenade" + desc = "A miniaturized fragmentation grenade, this one poses relatively little threat on its own." + icon_state = "minifrag" + fragment_types = list(/obj/item/projectile/bullet/pellet/fragment/weak, /obj/item/projectile/bullet/pellet/fragment/weak, /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong) + num_fragments = 20 + spread_range = 3 + explosion_size = 1 diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 188262e085..8f6ce1864f 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -6,7 +6,7 @@ var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans. var/banglet = 0 -/obj/item/weapon/grenade/flashbang/prime() +/obj/item/weapon/grenade/flashbang/detonate() ..() for(var/obj/structure/closet/L in hear(max_range, get_turf(src))) if(locate(/mob/living/carbon/, L)) @@ -24,6 +24,7 @@ new/obj/effect/effect/sparks(src.loc) new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF") + qdel(src) return @@ -93,35 +94,37 @@ else if(M.ear_damage >= 5) to_chat(M, "Your ears start to ring!") - M.update_icons() //Forces matrix transform to proc if they are now laying, I guess? - /obj/item/weapon/grenade/flashbang/Destroy() walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever. return ..() + /obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve desc = "Use of this weapon may constiute a war crime in your area, consult your local Colony Director." name = "clusterbang" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang" + var/can_repeat = TRUE // Does this thing drop mini-clusterbangs? + var/min_banglets = 4 + var/max_banglets = 8 -/obj/item/weapon/grenade/flashbang/clusterbang/prime() - var/numspawned = rand(4,8) +/obj/item/weapon/grenade/flashbang/clusterbang/detonate() + var/numspawned = rand(min_banglets, max_banglets) var/again = 0 - for(var/more = numspawned,more > 0,more--) - if(prob(35)) - again++ - numspawned -- - for(,numspawned > 0, numspawned--) - spawn(0) - new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + if(can_repeat) + for(var/more = numspawned, more > 0, more--) + if(prob(35)) + again++ + numspawned-- - for(,again > 0, again--) - spawn(0) - new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + for(var/do_spawn = numspawned, do_spawn > 0, do_spawn--) + new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs + playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + + for(var/do_again = again, do_again > 0, do_again--) + new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs + playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) qdel(src) return @@ -130,41 +133,34 @@ name = "clusterbang segment" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang_segment" + can_repeat = FALSE + banglet = TRUE /obj/item/weapon/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode + ..() + icon_state = "clusterbang_segment_active" - active = 1 - banglet = 1 + var/stepdist = rand(1,4)//How far to step var/temploc = src.loc//Saves the current location to know where to step away from walk_away(src,temploc,stepdist)//I must go, my people need me + var/dettime = rand(15,60) spawn(dettime) - prime() - ..() + detonate() -/obj/item/weapon/grenade/flashbang/clusterbang/segment/prime() - var/numspawned = rand(4,8) - for(var/more = numspawned,more > 0,more--) - if(prob(35)) - numspawned -- - - for(,numspawned > 0, numspawned--) - spawn(0) - new /obj/item/weapon/grenade/flashbang/cluster(src.loc) - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - qdel(src) - return +/obj/item/weapon/grenade/flashbang/cluster + banglet = TRUE /obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang - spawn(0) - icon_state = "flashbang_active" - active = 1 - banglet = 1 - var/stepdist = rand(1,3) - var/temploc = src.loc - walk_away(src,temploc,stepdist) - var/dettime = rand(15,60) - spawn(dettime) - prime() ..() + + icon_state = "flashbang_active" + + var/stepdist = rand(1,3) + var/temploc = src.loc + walk_away(src,temploc,stepdist) + + var/dettime = rand(15,60) + spawn(dettime) + detonate() \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 5854e02cac..7b7e85cce3 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -12,7 +12,8 @@ var/active = 0 var/det_time = 50 - var/loadable = 1 + var/loadable = TRUE + var/arm_sound = 'sound/weapons/armbomb.ogg' /obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) if((CLUMSY in user.mutations) && prob(50)) @@ -21,7 +22,7 @@ activate(user) add_fingerprint(user) spawn(5) - prime() + detonate() return 0 return 1 @@ -35,7 +36,7 @@ icon_state = initial(icon_state) + "_active" playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) spawn(det_time) - prime() + detonate() return user.set_dir(get_dir(user, target)) user.drop_item() @@ -76,14 +77,14 @@ icon_state = initial(icon_state) + "_active" active = 1 - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + playsound(loc, arm_sound, 75, 1, -3) spawn(det_time) - prime() + detonate() return -/obj/item/weapon/grenade/proc/prime() +/obj/item/weapon/grenade/proc/detonate() // playsound(loc, 'sound/items/Welder2.ogg', 25, 1) var/turf/T = get_turf(src) if(T) @@ -91,7 +92,7 @@ /obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(isscrewdriver(W)) + if(W.is_screwdriver()) switch(det_time) if (1) det_time = 10 diff --git a/code/game/objects/items/weapons/grenades/projectile.dm b/code/game/objects/items/weapons/grenades/projectile.dm new file mode 100644 index 0000000000..05153df4fe --- /dev/null +++ b/code/game/objects/items/weapons/grenades/projectile.dm @@ -0,0 +1,75 @@ +/obj/item/weapon/grenade/shooter + name = "projectile grenade" // I have no idea what else to call this, but the base type should never be used + icon_state = "frggrenade" + item_state = "grenade" + + var/list/projectile_types = list(/obj/item/projectile/bullet/pistol/rubber) // What sorts of projectiles might we make? + + //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern + var/spread_range = 7 + + loadable = FALSE + +/obj/item/weapon/grenade/shooter/detonate() + ..() + + var/turf/O = get_turf(src) + if(!O) + return + + src.launch_many_projectiles(O, spread_range, projectile_types) + + qdel(src) + + + +/obj/item/weapon/grenade/shooter/rubber + name = "rubber pellet grenade" + desc = "An anti-riot grenade that fires a cloud of rubber projectiles upon detonation." + projectile_types = list(/obj/item/projectile/bullet/pistol/rubber) + +// Exists mostly so I don't have to copy+paste the sprite vars to a billion things +/obj/item/weapon/grenade/shooter/energy + icon_state = "flashbang" + item_state = "flashbang" + spread_range = 3 // Because dear god + +/obj/item/weapon/grenade/shooter/energy/laser + name = "laser grenade" + desc = "A horrifically dangerous rave in a can." + projectile_types = list(/obj/item/projectile/beam/midlaser) + +/obj/item/weapon/grenade/shooter/energy/flash + name = "flash grenade" + desc = "A grenade that creates a large number of flashes upon detonation." + projectile_types = list(/obj/item/projectile/energy/flash) + +/obj/item/weapon/grenade/shooter/energy/tesla + name = "tesla grenade" + projectile_types = list(/obj/item/projectile/beam/chain_lightning/lesser) + + +// This is just fragmentate, but less specific. Don't know how to make either of them less awful, at the moment +/obj/proc/launch_many_projectiles(var/turf/T=get_turf(src), var/spreading_range = 5, var/list/projectiletypes=list(/obj/item/projectile/bullet/pistol/rubber)) + set waitfor = 0 + var/list/target_turfs = getcircle(T, spreading_range) + + for(var/turf/O in target_turfs) + sleep(0) + var/shot_type = pick(projectiletypes) + + var/obj/item/projectile/P = new shot_type(T) + P.shot_from = src.name + + P.launch(O) + + //Make sure to hit any mobs in the source turf + for(var/mob/living/M in T) + //lying on a frag grenade while the grenade is on the ground causes you to absorb most of the shrapnel. + //you will most likely be dead, but others nearby will be spared the fragments that hit you instead. + if(M.lying && isturf(src.loc)) + P.attack_mob(M, 0, 5) + else if(!M.lying && src.loc != get_turf(src)) //if it's not on the turf, it must be in the mob! + P.attack_mob(M, 0, 25) //you're holding a grenade, dude! + else + P.attack_mob(M, 0, 100) //otherwise, allow a decent amount of fragments to pass \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 2c89be0ac7..28540b981f 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -20,7 +20,7 @@ smoke = null return ..() -/obj/item/weapon/grenade/smokebomb/prime() +/obj/item/weapon/grenade/smokebomb/detonate() playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) src.smoke.set_up(10, 0, usr.loc) spawn(0) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index f9cbc65b59..5a20c49ccd 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -9,8 +9,8 @@ var/spawner_type = null // must be an object path var/deliveryamt = 1 // amount of type to deliver -// Prime now just handles the two loops that query for people in lockers and people who can see it. -/obj/item/weapon/grenade/spawnergrenade/prime() +// Detonate now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/detonate() if(spawner_type && deliveryamt) // Make a quick flash diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm new file mode 100644 index 0000000000..1bf35d1e1c --- /dev/null +++ b/code/game/objects/items/weapons/grenades/supermatter.dm @@ -0,0 +1,36 @@ +/obj/item/weapon/grenade/supermatter + name = "supermatter grenade" + icon_state = "banana" + item_state = "emergency_engi" + origin_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 4, TECH_ENGINEERING = 5) + arm_sound = 'sound/effects/3.wav' + var/implode_at + +/obj/item/weapon/grenade/supermatter/Destroy() + if(implode_at) + processing_objects -= src + . = ..() + +/obj/item/weapon/grenade/supermatter/detonate() + ..() + processing_objects += src + implode_at = world.time + 10 SECONDS + update_icon() + playsound(src, 'sound/weapons/wave.ogg', 100) + +/obj/item/weapon/grenade/supermatter/update_icon() + overlays.Cut() + if(implode_at) + overlays += image(icon = 'icons/rust.dmi', icon_state = "emfield_s1") + +/obj/item/weapon/grenade/supermatter/process() + if(!isturf(loc)) + if(ismob(loc)) + var/mob/M = loc + M.drop_from_inventory(src) + forceMove(get_turf(src)) + playsound(src, 'sound/effects/supermatter.ogg', 100) + supermatter_pull(src, world.view, STAGE_THREE) + if(world.time > implode_at) + explosion(loc, 1, 3, 5, 4) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index e6a5fc09e4..40c074c939 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -99,6 +99,9 @@ cuffs.loc = target target.handcuffed = cuffs target.update_inv_handcuffed() + target.drop_r_hand() + target.drop_l_hand() + target.stop_pulling() return 1 /obj/item/weapon/handcuffs/equipped(var/mob/living/user,var/slot) @@ -212,50 +215,12 @@ var/last_chew = 0 elastic = 0 cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now. -/obj/item/weapon/handcuffs/legcuffs/bola - name = "bola" - desc = "Keeps prey in line." - elastic = 1 - use_time = 0 - breakouttime = 30 - cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do? - /obj/item/weapon/handcuffs/legcuffs/get_worn_icon_state(var/slot_name) if(slot_name == slot_legcuffed_str) return "legcuff1" return ..() -/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user) - if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing. - return 1 - -/obj/item/weapon/handcuffs/legcuffs/bola/dropped() - visible_message("\The [src] falls apart!") - qdel(src) - -/obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src.loc, cuff_sound, 30, 1, -2) - - var/mob/living/carbon/human/H = target - if(!istype(H)) - src.dropped() - return 0 - - if(!H.has_organ_for_slot(slot_legcuffed)) - H.visible_message("\The [src] slams into [H], but slides off!") - src.dropped() - return 0 - - H.visible_message("\The [H] has been snared by \the [src]!") - - // Apply cuffs. - var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src - lcuffs.loc = target - target.legcuffed = lcuffs - target.update_inv_legcuffed() - return 1 - /obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) if(!user.IsAdvancedToolUser()) return @@ -316,6 +281,10 @@ var/last_chew = 0 lcuffs.loc = target target.legcuffed = lcuffs target.update_inv_legcuffed() + if(target.m_intent != "walk") + target.m_intent = "walk" + if(target.hud_used && user.hud_used.move_intent) + target.hud_used.move_intent.icon_state = "walking" return 1 /obj/item/weapon/handcuffs/legcuffs/equipped(var/mob/living/user,var/slot) @@ -325,3 +294,46 @@ var/last_chew = 0 user.m_intent = "walk" if(user.hud_used && user.hud_used.move_intent) user.hud_used.move_intent.icon_state = "walking" + + +/obj/item/weapon/handcuffs/legcuffs/bola + name = "bola" + desc = "Keeps prey in line." + elastic = 1 + use_time = 0 + breakouttime = 30 + cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do? + +/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user) + if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing. + return 1 + +/obj/item/weapon/handcuffs/legcuffs/bola/dropped() + visible_message("\The [src] falls apart!") + qdel(src) + +/obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src.loc, cuff_sound, 30, 1, -2) + + var/mob/living/carbon/human/H = target + if(!istype(H)) + src.dropped() + return 0 + + if(!H.has_organ_for_slot(slot_legcuffed)) + H.visible_message("\The [src] slams into [H], but slides off!") + src.dropped() + return 0 + + H.visible_message("\The [H] has been snared by \the [src]!") + + // Apply cuffs. + var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src + lcuffs.loc = target + target.legcuffed = lcuffs + target.update_inv_legcuffed() + if(target.m_intent != "walk") + target.m_intent = "walk" + if(target.hud_used && user.hud_used.move_intent) + target.hud_used.move_intent.icon_state = "walking" + return 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm index 7536d41253..8c29680fe0 100644 --- a/code/game/objects/items/weapons/id cards/station_ids.dm +++ b/code/game/objects/items/weapons/id cards/station_ids.dm @@ -8,7 +8,6 @@ SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi' ) - var/mining_points = 0 // VOREStation Edit - For redeeming at mining equipment lockers var/access = list() var/registered_name = "Unknown" // The name registered_name on the card slot_flags = SLOT_ID | SLOT_EARS @@ -31,6 +30,8 @@ var/rank = null //actual job var/dorm = 0 // determines if this ID has claimed a dorm already + var/mining_points = 0 // For redeeming at mining equipment vendors + /obj/item/weapon/card/id/examine(mob/user) set src in oview(1) if(in_range(usr, src)) diff --git a/code/game/objects/items/weapons/id cards/syndicate_ids.dm b/code/game/objects/items/weapons/id cards/syndicate_ids.dm index 1cd5e9d712..05528ca19b 100644 --- a/code/game/objects/items/weapons/id cards/syndicate_ids.dm +++ b/code/game/objects/items/weapons/id cards/syndicate_ids.dm @@ -58,7 +58,7 @@ data["electronic_warfare"] = electronic_warfare data["entries"] = entries - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "agent_id_card.tmpl", "Fake ID", 600, 400) ui.set_initial_data(data) @@ -185,7 +185,7 @@ . = 1 // Always update the UI, or buttons will spin indefinitely - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /var/global/list/id_card_states /proc/id_card_states() diff --git a/code/game/objects/items/weapons/implants/implantcircuits.dm b/code/game/objects/items/weapons/implants/implantcircuits.dm index 7dd29055f3..7c9391c631 100644 --- a/code/game/objects/items/weapons/implants/implantcircuits.dm +++ b/code/game/objects/items/weapons/implants/implantcircuits.dm @@ -1,7 +1,7 @@ /obj/item/weapon/implant/integrated_circuit name = "electronic implant" desc = "It's a case, for building very tiny electronics with." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_setups.dmi' icon_state = "setup_implant" var/obj/item/device/electronic_assembly/implant/IC = null @@ -39,7 +39,7 @@ IC.examine(user) /obj/item/weapon/implant/integrated_circuit/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/weapon/crowbar) || istype(O, /obj/item/device/integrated_electronics) || istype(O, /obj/item/integrated_circuit) || istype(O, /obj/item/weapon/screwdriver) || istype(O, /obj/item/weapon/cell/device) ) + if(O.is_crowbar() || istype(O, /obj/item/device/integrated_electronics) || istype(O, /obj/item/integrated_circuit) || O.is_screwdriver() || istype(O, /obj/item/weapon/cell/device) ) IC.attackby(O, user) else ..() diff --git a/code/game/objects/items/weapons/implants/implantlanguage.dm b/code/game/objects/items/weapons/implants/implantlanguage.dm index 7c6e33508b..6a0f2baea8 100644 --- a/code/game/objects/items/weapons/implants/implantlanguage.dm +++ b/code/game/objects/items/weapons/implants/implantlanguage.dm @@ -23,7 +23,7 @@ V.mechassist() for(var/L in need_amend) V.add_assistable_langs(L) - qdel_null(src) + QDEL_NULL(src) /obj/item/weapon/implant/language/get_data() var/dat = {" diff --git a/code/game/objects/items/weapons/implants/neuralbasic.dm b/code/game/objects/items/weapons/implants/neuralbasic.dm new file mode 100644 index 0000000000..a42778f58e --- /dev/null +++ b/code/game/objects/items/weapons/implants/neuralbasic.dm @@ -0,0 +1,106 @@ +/obj/item/weapon/implant/neural + name = "neural framework implant" + desc = "A small metal casing with numerous wires stemming off of it." + var/obj/item/organ/internal/brain/my_brain = null + var/target_state = null + var/robotic_brain = FALSE + +/obj/item/weapon/implant/neural/post_implant(var/mob/source) + if(ishuman(source)) + var/mob/living/carbon/human/H = source + if(H.species.has_organ[O_BRAIN]) + var/obj/item/organ/internal/brain/possible_brain = H.internal_organs_by_name[O_BRAIN] + my_brain = possible_brain //Organs will take damage all the same. + if(istype(possible_brain) && my_brain.can_assist()) //If the brain is infact a brain, and not something special like an MMI. + my_brain.implant_assist(target_state) + if(H.isSynthetic() && H.get_FBP_type() != FBP_CYBORG) //If this on an FBP, it's just an extra inefficient attachment to whatever their brain is. + robotic_brain = TRUE + if(my_brain && my_brain.can_assist()) + processing_objects.Add(src) + +/obj/item/weapon/implant/neural/Destroy() + if(my_brain) + if(my_brain.owner) + to_chat(my_brain.owner, "You feel a pressure in your mind as something is ripped away.") + processing_objects.Remove(src) + my_brain = null + return ..() + +/obj/item/weapon/implant/neural/process() + if(my_brain && part) + if(my_brain.loc != part.loc) + to_chat(my_brain.owner, "You feel a pressure in your mind as something is ripped away.") + meltdown() + return 1 + +/obj/item/weapon/implant/neural/get_data() + var/dat = {"Implant Specifications:
+Name: Neural Framework Implant
+Life: Duration of Brain Function
+Important Notes: None
+
+Implant Details:
+Function: Maintains some function or structure of the target's brain.
+Special Features:
+Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if +a malfunction occurs thereby attempting to secure the safety of subject.
+Integrity: Gradient creates slight risk of being overcharged and frying the +circuitry. Resulting faults can cause damage to the host's brain.
+Implant Specifics:
"} + return dat + +/obj/item/weapon/implant/neural/emp_act(severity) + if(!my_brain) + return + if(malfunction) //Don't malfunction while malfunctioning. + return + malfunction = MALFUNCTION_TEMPORARY + + var/delay = 10 //Don't let it just get emped twice in a second to kill someone. + var/brain_location = my_brain.owner.organs_by_name[my_brain.parent_organ] + var/mob/living/L = my_brain.owner + switch(severity) + if(1) + if(prob(10)) + meltdown() + else if(prob(80)) + my_brain.take_damage(5) + if(!robotic_brain) + to_chat(L, "Something in your [brain_location] burns!") + else + to_chat(L, "Severe fault detected in [brain_location].") + if(2) + if(prob(80)) + my_brain.take_damage(3) + if(!robotic_brain) + to_chat(L, "It feels like something is digging into your [brain_location]!") + else + to_chat(L, "Fault detected in [brain_location].") + if(3) + if(prob(60)) + my_brain.take_damage(2) + if(!robotic_brain) + to_chat(L, "There is a stabbing pain in your [brain_location]!") + if(4) + if(prob(40)) + my_brain.take_damage(1) + if(!robotic_brain) + to_chat(L, "Your [brain_location] aches.") + + spawn(delay) + malfunction-- + +/obj/item/weapon/implant/neural/meltdown() + ..() + processing_objects.Remove(src) + var/mob/living/carbon/human/H = null + if(my_brain && my_brain.owner) + if(ishuman(my_brain.owner)) + H = my_brain.owner + if(robotic_brain) + to_chat(H, "WARNING. Fault dete-ct-- in the \the [src].") + H.Confuse(30) + H.AdjustBlinded(5) + my_brain.take_damage(15) + my_brain = null + return diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm index 105a76473f..ded033a746 100644 --- a/code/game/objects/items/weapons/improvised_components.dm +++ b/code/game/objects/items/weapons/improvised_components.dm @@ -7,8 +7,8 @@ thrown_force_divisor = 0.1 /obj/item/weapon/material/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) - user << "You finish the concealed blade weapon." + if(W.is_screwdriver()) + to_chat(user, "You finish the concealed blade weapon.") playsound(src, W.usesound, 50, 1) new /obj/item/weapon/material/butterfly(user.loc, material.name) qdel(src) @@ -33,7 +33,7 @@ /obj/item/weapon/material/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/material/butterflyblade)) var/obj/item/weapon/material/butterflyblade/B = W - user << "You attach the two concealed blade parts." + to_chat(user, "You attach the two concealed blade parts.") new /obj/item/weapon/material/butterflyconstruction(user.loc, B.material.name) qdel(W) qdel(src) @@ -58,10 +58,10 @@ if(istype(I, /obj/item/weapon/material/shard) || istype(I, /obj/item/weapon/material/butterflyblade)) var/obj/item/weapon/material/tmp_shard = I finished = new /obj/item/weapon/material/twohanded/spear(get_turf(user), tmp_shard.material.name) - user << "You fasten \the [I] to the top of the rod with the cable." - else if(istype(I, /obj/item/weapon/wirecutters)) + to_chat(user, "You fasten \the [I] to the top of the rod with the cable.") + else if(I.is_wirecutter()) finished = new /obj/item/weapon/melee/baton/cattleprod(get_turf(user)) - user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward." + to_chat(user, "You fasten the wirecutters to the top of the rod with the cable, prongs outward.") if(finished) user.drop_from_inventory(src) user.drop_from_inventory(I) diff --git a/code/game/objects/items/weapons/material/gravemarker.dm b/code/game/objects/items/weapons/material/gravemarker.dm index f50416b05d..cad9df3c8f 100644 --- a/code/game/objects/items/weapons/material/gravemarker.dm +++ b/code/game/objects/items/weapons/material/gravemarker.dm @@ -12,7 +12,7 @@ var/epitaph = "" //A quick little blurb /obj/item/weapon/material/gravemarker/attackby(obj/item/weapon/W, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN) if(carving_1) user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].") @@ -27,7 +27,7 @@ user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].") epitaph += carving_2 update_icon() - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].") if(do_after(user, material.hardness * W.toolspeed)) material.place_dismantled_product(get_turf(src)) @@ -76,5 +76,5 @@ G.epitaph = epitaph G.add_fingerprint(usr) G.dir = user.dir - qdel_null(src) + QDEL_NULL(src) return \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 2e67445fc3..913fb6fddf 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -79,16 +79,6 @@ * Knives */ -// Identical to the tactical knife but nowhere near as stabby. -// Kind of like the toy esword compared to the real thing. -/obj/item/weapon/material/knife/boot - name = "boot knife" - desc = "A small fixed-blade knife for putting inside a boot." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife" - item_state = "knife" - applies_material_colour = 0 - /* From the time of Clowns. Commented out for posterity, and sanity. /obj/item/weapon/material/knife/attack(target as mob, mob/living/user as mob) if ((CLUMSY in user.mutations) && prob(50)) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 0658754c34..2b1f54fb09 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -74,6 +74,39 @@ "\The [user] is slitting [TU.his] stomach open with \the [src]! It looks like [TU.hes] trying to commit seppuku.") return (BRUTELOSS) +// These no longer inherit from hatchets. +/obj/item/weapon/material/knife/tacknife + name = "tactical knife" + desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife" + item_state = "knife" + force_divisor = 0.25 //15 when hardness 60 (steel) + attack_verb = list("stabbed", "chopped", "cut") + applies_material_colour = 1 + +/obj/item/weapon/material/knife/tacknife/combatknife + name = "combat knife" + desc = "If only you had a boot to put it in." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife" + item_state = "knife" + force_divisor = 0.34 // 20 with hardness 60 (steel) + thrown_force_divisor = 1.75 // 20 with weight 20 (steel) + attack_verb = list("sliced", "stabbed", "chopped", "cut") + applies_material_colour = 1 + +// Identical to the tactical knife but nowhere near as stabby. +// Kind of like the toy esword compared to the real thing. +/obj/item/weapon/material/knife/tacknife/boot + name = "boot knife" + desc = "A small fixed-blade knife for putting inside a boot." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife" + item_state = "knife" + force_divisor = 0.15 + applies_material_colour = 0 + /obj/item/weapon/material/knife/hook name = "meat hook" desc = "A sharp, metal hook what sticks into things." diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 7248950a0f..050307eb7e 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -46,28 +46,6 @@ hits = initial(hits) ..() -// These no longer inherit from hatchets. -/obj/item/weapon/material/knife/tacknife - name = "tactical knife" - desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife" - item_state = "knife" - force_divisor = 0.25 //15 when hardness 60 (steel) - attack_verb = list("stabbed", "chopped", "cut") - applies_material_colour = 1 - -/obj/item/weapon/material/knife/tacknife/combatknife - name = "combat knife" - desc = "If only you had a boot to put it in." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife" - item_state = "knife" - force_divisor = 0.34 // 20 with hardness 60 (steel) - thrown_force_divisor = 1.75 // 20 with weight 20 (steel) - attack_verb = list("sliced", "stabbed", "chopped", "cut") - applies_material_colour = 1 - /obj/item/weapon/material/minihoe // -- Numbers name = "mini hoe" desc = "It's used for removing weeds or scratching your back." diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 72ce933da3..66cdac3b63 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -43,11 +43,11 @@ icon_state = "utility" can_hold = list( ///obj/item/weapon/combitool, - /obj/item/weapon/crowbar, - /obj/item/weapon/screwdriver, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, - /obj/item/weapon/wirecutters, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, /obj/item/device/multitool, /obj/item/device/flashlight, /obj/item/weapon/cell/device, @@ -72,21 +72,21 @@ /obj/item/weapon/storage/belt/utility/full starts_with = list( - /obj/item/weapon/screwdriver, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, /obj/item/weapon/weldingtool, - /obj/item/weapon/crowbar, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, /obj/item/stack/cable_coil/random_belt ) /obj/item/weapon/storage/belt/utility/atmostech starts_with = list( - /obj/item/weapon/screwdriver, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, /obj/item/weapon/weldingtool, - /obj/item/weapon/crowbar, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, ) /obj/item/weapon/storage/belt/utility/chief @@ -97,8 +97,8 @@ /obj/item/weapon/storage/belt/utility/chief/full starts_with = list( - /obj/item/weapon/screwdriver/power, - /obj/item/weapon/crowbar/power, + /obj/item/weapon/tool/screwdriver/power, + /obj/item/weapon/tool/crowbar/power, /obj/item/weapon/weldingtool/experimental, /obj/item/device/multitool, /obj/item/stack/cable_coil/random_belt, @@ -132,7 +132,7 @@ /obj/item/clothing/gloves, /obj/item/weapon/reagent_containers/hypospray, /obj/item/clothing/glasses, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/device/flashlight, /obj/item/weapon/cell/device, /obj/item/weapon/extinguisher/mini, @@ -243,11 +243,11 @@ /obj/item/weapon/storage/belt/utility/alien/full starts_with = list( - /obj/item/weapon/screwdriver/alien, - /obj/item/weapon/wrench/alien, + /obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/tool/wrench/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/wirecutters/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/wirecutters/alien, /obj/item/device/multitool/alien, /obj/item/stack/cable_coil/alien ) @@ -280,7 +280,7 @@ /obj/item/clothing/gloves, /obj/item/weapon/reagent_containers/hypospray, /obj/item/clothing/glasses, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/device/flashlight, /obj/item/weapon/cell/device, /obj/item/weapon/extinguisher/mini, @@ -370,7 +370,7 @@ /obj/item/weapon/clipboard, /obj/item/weapon/anodevice, /obj/item/clothing/glasses, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/wrench, /obj/item/weapon/storage/excavation, /obj/item/weapon/anobattery, /obj/item/device/ano_scanner, diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 38c6e10d79..6ab26231be 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -133,8 +133,9 @@ /obj/item/weapon/surgical/bonegel, /obj/item/weapon/surgical/FixOVein, /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/nanopaste - // /obj/item/device/healthanalyzer/advanced //VOREStation Removal + /obj/item/stack/nanopaste, + ///obj/item/device/healthanalyzer/advanced, //VOREStation Removal + /obj/item/weapon/autopsy_scanner ) starts_with = list( @@ -148,7 +149,8 @@ /obj/item/weapon/surgical/bonegel, /obj/item/weapon/surgical/FixOVein, /obj/item/stack/medical/advanced/bruise_pack, - ///obj/item/device/healthanalyzer/advanced //VOREStation Removal + ///obj/item/device/healthanalyzer/advanced, //VOREStation Removal + /obj/item/weapon/autopsy_scanner ) /obj/item/weapon/storage/firstaid/clotting diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index d5b19a24ed..722d68e634 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -65,7 +65,7 @@ return ..() /obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob) - qdel_null(linked) + QDEL_NULL(linked) return ..() /obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 78a2d940ad..081dcdcb2d 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -41,13 +41,13 @@ playsound(src.loc, "sparks", 50, 1) return - if (istype(W, /obj/item/weapon/screwdriver)) + if (W.is_screwdriver()) if (do_after(user, 20 * W.toolspeed)) src.open =! src.open playsound(src, W.usesound, 50, 1) user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) return - if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) + if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking)) user.show_message("Now attempting to reset internal memory, please hold.", 1) src.l_hacking = 1 if (do_after(usr, 100)) @@ -135,7 +135,7 @@ src.overlays = null overlays += image('icons/obj/storage.dmi', icon_locking) locked = 0 - user << (feedback ? feedback : "You short out the lock of \the [src].") + to_chat(user, (feedback ? feedback : "You short out the lock of \the [src].")) return 1 // ----------------------------- @@ -156,7 +156,7 @@ attack_hand(mob/user as mob) if ((src.loc == user) && (src.locked == 1)) - usr << "[src] is locked and cannot be opened!" + to_chat(user, "[src] is locked and cannot be opened!") else if ((src.loc == user) && (!src.locked)) src.open(usr) else diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 03ad104810..8d17a1a5c7 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -40,14 +40,14 @@ /obj/item/weapon/storage/Destroy() close_all() - qdel_null(boxes) - qdel_null(src.storage_start) - qdel_null(src.storage_continue) - qdel_null(src.storage_end) - qdel_null(src.stored_start) - qdel_null(src.stored_continue) - qdel_null(src.stored_end) - qdel_null(closer) + QDEL_NULL(boxes) + QDEL_NULL(src.storage_start) + QDEL_NULL(src.storage_continue) + QDEL_NULL(src.storage_end) + QDEL_NULL(src.stored_start) + QDEL_NULL(src.stored_continue) + QDEL_NULL(src.stored_end) + QDEL_NULL(closer) . = ..() /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) @@ -354,7 +354,7 @@ //such as when picking up all the items on a tile with one click. /obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) if(!istype(W)) return 0 - + if(usr) usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() W.on_enter_storage(src) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index c4174eb4c0..7989c53f1d 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -20,7 +20,7 @@ icon_state = "red" item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") starts_with = list( - /obj/item/weapon/crowbar/red, + /obj/item/weapon/tool/crowbar/red, /obj/item/weapon/extinguisher/mini, /obj/item/device/radio ) @@ -36,12 +36,12 @@ icon_state = "blue" item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") starts_with = list( - /obj/item/weapon/screwdriver, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, /obj/item/weapon/weldingtool, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/device/analyzer, - /obj/item/weapon/wirecutters + /obj/item/weapon/tool/wirecutters ) /obj/item/weapon/storage/toolbox/electrical @@ -49,10 +49,10 @@ icon_state = "yellow" item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") starts_with = list( - /obj/item/weapon/screwdriver, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wirecutters, /obj/item/device/t_scanner, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/stack/cable_coil/random_belt, /obj/item/stack/cable_coil/random_belt ) @@ -72,20 +72,20 @@ force = 14 starts_with = list( /obj/item/clothing/gloves/yellow, - /obj/item/weapon/screwdriver, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, /obj/item/weapon/weldingtool, - /obj/item/weapon/crowbar, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, /obj/item/device/multitool ) /obj/item/weapon/storage/toolbox/syndicate/powertools starts_with = list( /obj/item/clothing/gloves/yellow, - /obj/item/weapon/screwdriver/power, + /obj/item/weapon/tool/screwdriver/power, /obj/item/weapon/weldingtool/experimental, - /obj/item/weapon/crowbar/power, + /obj/item/weapon/tool/crowbar/power, /obj/item/device/multitool, /obj/item/stack/cable_coil/random_belt, /obj/item/device/analyzer diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 937663c65c..c66da84712 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -223,19 +223,19 @@ /obj/item/weapon/storage/box/syndie_kit/demolitions starts_with = list( /obj/item/weapon/syndie/c4explosive, - /obj/item/weapon/screwdriver + /obj/item/weapon/tool/screwdriver ) /obj/item/weapon/storage/box/syndie_kit/demolitions_heavy starts_with = list( /obj/item/weapon/syndie/c4explosive/heavy, - /obj/item/weapon/screwdriver + /obj/item/weapon/tool/screwdriver ) /obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy starts_with = list( /obj/item/weapon/syndie/c4explosive/heavy/super_heavy, - /obj/item/weapon/screwdriver + /obj/item/weapon/tool/screwdriver ) /obj/item/weapon/storage/secure/briefcase/rifle @@ -253,8 +253,8 @@ description_fluff = "The container, upon opening, looks to have a few oddly shaped indentations in its packing." description_antag = "This case will likely contain a charged fuel rod gun, and a few fuel rods to go with it. It can only hold the fuel rod gun, fuel rods, batteries, a screwdriver, and stock machine parts." force = 12 //Anti-rad lined i.e. Lead, probably gonna hurt a bit if you get bashed with it. - can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/screwdriver) - cant_hold = list(/obj/item/weapon/screwdriver/power) + can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/tool/screwdriver) + cant_hold = list(/obj/item/weapon/tool/screwdriver/power) starts_with = list( /obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly/deuterium, @@ -262,5 +262,5 @@ /obj/item/weapon/fuel_assembly/tritium, /obj/item/weapon/fuel_assembly/tritium, /obj/item/weapon/fuel_assembly/phoron, - /obj/item/weapon/screwdriver + /obj/item/weapon/tool/screwdriver ) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 60a253c87c..ce1227014c 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -32,12 +32,12 @@ /obj/item/weapon/photo, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/sample, - /obj/item/weapon/screwdriver, + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/stamp, /obj/item/clothing/accessory/permit, /obj/item/clothing/accessory/badge ) - cant_hold = list(/obj/item/weapon/screwdriver/power) + cant_hold = list(/obj/item/weapon/tool/screwdriver/power) slot_flags = SLOT_ID var/obj/item/weapon/card/id/front_id = null diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index c47489272b..ee528cb6f8 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -91,7 +91,7 @@ else if(lit && detonator_mode) switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter.")) if("Press the button.") - user << "You press the button." + to_chat(user, "You press the button.") icon_state = "[base_state]click" if(src.bomb) src.bomb.detonate() @@ -106,7 +106,7 @@ /obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) detonator_mode = !detonator_mode playsound(src, W.usesound, 50, 1) - user << "You unscrew the top panel of \the [src] revealing a button." + to_chat(user, "You unscrew the top panel of \the [src] revealing a button.") diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index b021424043..736d2919ff 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -24,7 +24,7 @@ ion_trail.set_up(src) /obj/item/weapon/tank/jetpack/Destroy() - qdel_null(ion_trail) + QDEL_NULL(ion_trail) return ..() /obj/item/weapon/tank/jetpack/examine(mob/user) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 49608c649a..aab34d8f82 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -70,10 +70,10 @@ var/list/global/tank_gauge_cache = list() return /obj/item/weapon/tank/Destroy() - qdel_null(air_contents) + QDEL_NULL(air_contents) processing_objects.Remove(src) - qdel_null(src.proxyassembly) + QDEL_NULL(src.proxyassembly) if(istype(loc, /obj/item/device/transfer_valve)) var/obj/item/device/transfer_valve/TTV = loc @@ -130,7 +130,7 @@ var/list/global/tank_gauge_cache = list() to_chat(user, "You attach the wires to the tank.") src.add_bomb_overlay() - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) if(wired && src.proxyassembly.assembly) to_chat(user, "You carefully begin clipping the wires that attach to the tank.") @@ -264,7 +264,7 @@ var/list/global/tank_gauge_cache = list() data["maskConnected"] = 1 // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm @@ -674,32 +674,3 @@ var/list/global/tank_gauge_cache = list() /obj/item/device/tankassemblyproxy/HasProximity(atom/movable/AM as mob|obj) if(src.assembly) src.assembly.HasProximity(AM) - - -/obj/item/projectile/bullet/pellet/fragment/tank - name = "metal fragment" - damage = 9 //Big chunks flying off. - range_step = 2 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. - - base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone - spread_step = 20 - - armor_penetration = 20 - - silenced = 1 - no_attack_log = 1 - muzzle_type = null - pellets = 3 - -/obj/item/projectile/bullet/pellet/fragment/tank/small - name = "small metal fragment" - damage = 6 - armor_penetration = 5 - pellets = 5 - -/obj/item/projectile/bullet/pellet/fragment/tank/big - name = "large metal fragment" - damage = 17 - armor_penetration = 10 - range_step = 5 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. - pellets = 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/combitool.dm b/code/game/objects/items/weapons/tools/combitool.dm new file mode 100644 index 0000000000..96b64d18f7 --- /dev/null +++ b/code/game/objects/items/weapons/tools/combitool.dm @@ -0,0 +1,63 @@ +// File is unticked because this is entirely untested old code + + +/* + * Combitool + */ +/obj/item/weapon/combitool + name = "combi-tool" + desc = "It even has one of those nubbins for doing the thingy." + icon = 'icons/obj/items.dmi' + icon_state = "combitool" + w_class = ITEMSIZE_SMALL + + var/list/spawn_tools = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/material/knife, + /obj/item/weapon/material/kitchen/utensil/fork, + /obj/item/weapon/material/knife/machete/hatchet + ) + var/list/tools = list() + var/current_tool = 1 + +/obj/item/weapon/combitool/examine() + ..() + if(loc == usr && tools.len) + to_chat(usr, "It has the following fittings:") + for(var/obj/item/tool in tools) + to_chat(usr, "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]") + +/obj/item/weapon/combitool/New() + ..() + for(var/type in spawn_tools) + tools |= new type(src) + +/obj/item/weapon/combitool/attack_self(mob/user as mob) + if(++current_tool > tools.len) current_tool = 1 + var/obj/item/tool = tools[current_tool] + if(!tool) + to_chat(user, "You can't seem to find any fittings in \the [src].") + else + to_chat(user, "You switch \the [src] to the [tool.name] fitting.") + return 1 + +/obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!M.Adjacent(user)) + return 0 + var/obj/item/tool = tools[current_tool] + if(!tool) return 0 + return (tool ? tool.attack(M,user) : 0) + +/obj/item/weapon/combitool/afterattack(var/atom/target, var/mob/living/user, proximity, params) + if(!proximity) + return 0 + var/obj/item/tool = tools[current_tool] + if(!tool) return 0 + tool.loc = user + var/resolved = target.attackby(tool,user) + if(!resolved && tool && target) + tool.afterattack(target,user,1) + if(tool) + tool.loc = src diff --git a/code/game/objects/items/weapons/tools/crowbar.dm b/code/game/objects/items/weapons/tools/crowbar.dm new file mode 100644 index 0000000000..721f5e30c9 --- /dev/null +++ b/code/game/objects/items/weapons/tools/crowbar.dm @@ -0,0 +1,77 @@ +/* + * Crowbar + */ + +/obj/item/weapon/tool/crowbar + name = "crowbar" + desc = "Used to remove floors and to pry open doors." + icon = 'icons/obj/tools.dmi' + icon_state = "crowbar" + flags = CONDUCT + slot_flags = SLOT_BELT + force = 6 + throwforce = 7 + pry = 1 + item_state = "crowbar" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 50) + attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") + usesound = 'sound/items/crowbar.ogg' + toolspeed = 1 + +/obj/item/weapon/tool/crowbar/is_crowbar() + return TRUE + +/obj/item/weapon/tool/crowbar/red + icon = 'icons/obj/tools.dmi' + icon_state = "red_crowbar" + item_state = "crowbar_red" + +/obj/item/weapon/tool/crowbar/alien + name = "alien crowbar" + desc = "A hard-light crowbar. It appears to pry by itself, without any effort required." + icon = 'icons/obj/abductor.dmi' + usesound = 'sound/weapons/sonic_jackhammer.ogg' + icon_state = "crowbar" + toolspeed = 0.1 + origin_tech = list(TECH_COMBAT = 4, TECH_ENGINEERING = 4) + +/obj/item/weapon/tool/crowbar/cyborg + name = "hydraulic crowbar" + desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbars in industrial synthetics." + usesound = 'sound/items/jaws_pry.ogg' + force = 10 + toolspeed = 0.5 + +/obj/item/weapon/tool/crowbar/power + name = "jaws of life" + desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head." + icon_state = "jaws_pry" + item_state = "jawsoflife" + matter = list(MAT_METAL=150, MAT_SILVER=50) + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + usesound = 'sound/items/jaws_pry.ogg' + force = 15 + toolspeed = 0.25 + var/obj/item/weapon/tool/wirecutters/power/counterpart = null + +/obj/item/weapon/tool/crowbar/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/tool/crowbar/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + QDEL_NULL(counterpart) + return ..() + +/obj/item/weapon/tool/crowbar/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) + to_chat(user, "You attach the cutting jaws to [src].") \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm new file mode 100644 index 0000000000..86ac8f1267 --- /dev/null +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -0,0 +1,125 @@ +/* + * Screwdriver + */ +/obj/item/weapon/tool/screwdriver + name = "screwdriver" + desc = "You can be totally screwwy with this." + icon = 'icons/obj/tools.dmi' + icon_state = "screwdriver" + flags = CONDUCT + slot_flags = SLOT_BELT | SLOT_EARS + force = 6 + w_class = ITEMSIZE_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 5 + hitsound = 'sound/weapons/bladeslice.ogg' + usesound = 'sound/items/screwdriver.ogg' + matter = list(DEFAULT_WALL_MATERIAL = 75) + attack_verb = list("stabbed") + sharp = 1 + toolspeed = 1 + var/random_color = TRUE + +/obj/item/weapon/tool/screwdriver/suicide_act(mob/user) + var/datum/gender/TU = gender_datums[user.get_visible_gender()] + viewers(user) << pick("\The [user] is stabbing the [src.name] into [TU.his] temple! It looks like [TU.hes] trying to commit suicide.", \ + "\The [user] is stabbing the [src.name] into [TU.his] heart! It looks like [TU.hes] trying to commit suicide.") + return(BRUTELOSS) + +/obj/item/weapon/tool/screwdriver/New() + if(random_color) + switch(pick("red","blue","purple","brown","green","cyan","yellow")) + if ("red") + icon_state = "screwdriver2" + item_state = "screwdriver" + if ("blue") + icon_state = "screwdriver" + item_state = "screwdriver_blue" + if ("purple") + icon_state = "screwdriver3" + item_state = "screwdriver_purple" + if ("brown") + icon_state = "screwdriver4" + item_state = "screwdriver_brown" + if ("green") + icon_state = "screwdriver5" + item_state = "screwdriver_green" + if ("cyan") + icon_state = "screwdriver6" + item_state = "screwdriver_cyan" + if ("yellow") + icon_state = "screwdriver7" + item_state = "screwdriver_yellow" + + if (prob(75)) + src.pixel_y = rand(0, 16) + ..() + +/obj/item/weapon/tool/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M) || user.a_intent == "help") + return ..() + if(user.zone_sel.selecting != O_EYES && user.zone_sel.selecting != BP_HEAD) + return ..() + if((CLUMSY in user.mutations) && prob(50)) + M = user + return eyestab(M,user) + +/obj/item/weapon/tool/screwdriver/is_screwdriver() + return TRUE + +/obj/item/weapon/tool/screwdriver/alien + name = "alien screwdriver" + desc = "An ultrasonic screwdriver." + icon = 'icons/obj/abductor.dmi' + icon_state = "screwdriver_a" + item_state = "screwdriver_black" + usesound = 'sound/items/pshoom.ogg' + toolspeed = 0.1 + random_color = FALSE + +/obj/item/weapon/tool/screwdriver/cyborg + name = "powered screwdriver" + desc = "An electrical screwdriver, designed to be both precise and quick." + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.5 + +/obj/item/weapon/tool/screwdriver/power + name = "hand drill" + desc = "A simple powered hand drill. It's fitted with a screw bit." + icon_state = "drill_screw" + item_state = "drill" + matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50) + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + slot_flags = SLOT_BELT + force = 8 + w_class = ITEMSIZE_SMALL + throwforce = 8 + throw_speed = 2 + throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far + attack_verb = list("drilled", "screwed", "jabbed", "whacked") + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.25 + random_color = FALSE + var/obj/item/weapon/tool/wrench/power/counterpart = null + +/obj/item/weapon/tool/screwdriver/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/tool/screwdriver/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + QDEL_NULL(counterpart) + return ..() + +/obj/item/weapon/tool/screwdriver/power/attack_self(mob/user) + playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) + to_chat(user, "You attach the bolt driver bit to [src].") \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools/weldingtool.dm similarity index 56% rename from code/game/objects/items/weapons/tools.dm rename to code/game/objects/items/weapons/tools/weldingtool.dm index 53acc20f16..3a09d6611a 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -1,301 +1,4 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - #define WELDER_FUEL_BURN_INTERVAL 13 - -/* Tools! - * Note: Multitools are /obj/item/device - * - * Contains: - * Wrench - * Screwdriver - * Wirecutters - * Welding Tool - * Crowbar - */ - -/* - * Wrench - */ -/obj/item/weapon/wrench - name = "wrench" - desc = "A wrench with many common uses. Can be usually found in your hand." - icon = 'icons/obj/tools.dmi' - icon_state = "wrench" - flags = CONDUCT - slot_flags = SLOT_BELT - force = 6 - throwforce = 7 - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - matter = list(DEFAULT_WALL_MATERIAL = 150) - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - usesound = 'sound/items/ratchet.ogg' - toolspeed = 1 - -/obj/item/weapon/wrench/cyborg - name = "automatic wrench" - desc = "An advanced robotic wrench. Can be found in industrial synthetic shells." - usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.5 - -/obj/item/weapon/wrench/alien - name = "alien wrench" - desc = "A polarized wrench. It causes anything placed between the jaws to turn." - icon = 'icons/obj/abductor.dmi' - icon_state = "wrench" - usesound = 'sound/effects/empulse.ogg' - toolspeed = 0.1 - origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5) - -/obj/item/weapon/wrench/power - name = "hand drill" - desc = "A simple powered hand drill. It's fitted with a bolt bit." - icon_state = "drill_bolt" - item_state = "drill" - usesound = 'sound/items/drill_use.ogg' - matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50) - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - force = 8 - w_class = ITEMSIZE_SMALL - throwforce = 8 - attack_verb = list("drilled", "screwed", "jabbed") - toolspeed = 0.25 - var/obj/item/weapon/screwdriver/power/counterpart = null - -/obj/item/weapon/wrench/power/New(newloc, no_counterpart = TRUE) - ..(newloc) - if(!counterpart && no_counterpart) - counterpart = new(src, FALSE) - counterpart.counterpart = src - -/obj/item/weapon/wrench/power/Destroy() - if(counterpart) - counterpart.counterpart = null // So it can qdel cleanly. - qdel_null(counterpart) - return ..() - -/obj/item/weapon/wrench/power/attack_self(mob/user) - playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) - user.drop_item(src) - counterpart.forceMove(get_turf(src)) - src.forceMove(counterpart) - user.put_in_active_hand(counterpart) - to_chat(user, "You attach the screw driver bit to [src].") - -/* - * Screwdriver - */ -/obj/item/weapon/screwdriver - name = "screwdriver" - desc = "You can be totally screwwy with this." - icon = 'icons/obj/tools.dmi' - icon_state = "screwdriver" - flags = CONDUCT - slot_flags = SLOT_BELT | SLOT_EARS - force = 6 - w_class = ITEMSIZE_TINY - throwforce = 5 - throw_speed = 3 - throw_range = 5 - hitsound = 'sound/weapons/bladeslice.ogg' - usesound = 'sound/items/screwdriver.ogg' - matter = list(DEFAULT_WALL_MATERIAL = 75) - attack_verb = list("stabbed") - sharp = 1 - toolspeed = 1 - var/random_color = TRUE - - suicide_act(mob/user) - var/datum/gender/TU = gender_datums[user.get_visible_gender()] - viewers(user) << pick("\The [user] is stabbing the [src.name] into [TU.his] temple! It looks like [TU.hes] trying to commit suicide.", \ - "\The [user] is stabbing the [src.name] into [TU.his] heart! It looks like [TU.hes] trying to commit suicide.") - return(BRUTELOSS) - -/obj/item/weapon/screwdriver/New() - if(random_color) - switch(pick("red","blue","purple","brown","green","cyan","yellow")) - if ("red") - icon_state = "screwdriver2" - item_state = "screwdriver" - if ("blue") - icon_state = "screwdriver" - item_state = "screwdriver_blue" - if ("purple") - icon_state = "screwdriver3" - item_state = "screwdriver_purple" - if ("brown") - icon_state = "screwdriver4" - item_state = "screwdriver_brown" - if ("green") - icon_state = "screwdriver5" - item_state = "screwdriver_green" - if ("cyan") - icon_state = "screwdriver6" - item_state = "screwdriver_cyan" - if ("yellow") - icon_state = "screwdriver7" - item_state = "screwdriver_yellow" - - if (prob(75)) - src.pixel_y = rand(0, 16) - ..() - -/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M) || user.a_intent == "help") - return ..() - if(user.zone_sel.selecting != O_EYES && user.zone_sel.selecting != BP_HEAD) - return ..() - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - -/obj/item/weapon/screwdriver/alien - name = "alien screwdriver" - desc = "An ultrasonic screwdriver." - icon = 'icons/obj/abductor.dmi' - icon_state = "screwdriver_a" - item_state = "screwdriver_black" - usesound = 'sound/items/pshoom.ogg' - toolspeed = 0.1 - random_color = FALSE - -/obj/item/weapon/screwdriver/cyborg - name = "powered screwdriver" - desc = "An electrical screwdriver, designed to be both precise and quick." - usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.5 - -/obj/item/weapon/screwdriver/power - name = "hand drill" - desc = "A simple powered hand drill. It's fitted with a screw bit." - icon_state = "drill_screw" - item_state = "drill" - matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50) - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - slot_flags = SLOT_BELT - force = 8 - w_class = ITEMSIZE_SMALL - throwforce = 8 - throw_speed = 2 - throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far - attack_verb = list("drilled", "screwed", "jabbed", "whacked") - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.25 - random_color = FALSE - var/obj/item/weapon/wrench/power/counterpart = null - -/obj/item/weapon/screwdriver/power/New(newloc, no_counterpart = TRUE) - ..(newloc) - if(!counterpart && no_counterpart) - counterpart = new(src, FALSE) - counterpart.counterpart = src - -/obj/item/weapon/screwdriver/power/Destroy() - if(counterpart) - counterpart.counterpart = null // So it can qdel cleanly. - qdel_null(counterpart) - return ..() - -/obj/item/weapon/screwdriver/power/attack_self(mob/user) - playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) - user.drop_item(src) - counterpart.forceMove(get_turf(src)) - src.forceMove(counterpart) - user.put_in_active_hand(counterpart) - to_chat(user, "You attach the bolt driver bit to [src].") - -/* - * Wirecutters - */ -/obj/item/weapon/wirecutters - name = "wirecutters" - desc = "This cuts wires." - icon = 'icons/obj/tools.dmi' - icon_state = "cutters" - flags = CONDUCT - slot_flags = SLOT_BELT - force = 6 - throw_speed = 2 - throw_range = 9 - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - matter = list(DEFAULT_WALL_MATERIAL = 80) - attack_verb = list("pinched", "nipped") - hitsound = 'sound/items/wirecutter.ogg' - usesound = 'sound/items/wirecutter.ogg' - sharp = 1 - edge = 1 - toolspeed = 1 - var/random_color = TRUE - -/obj/item/weapon/wirecutters/New() - if(random_color && prob(50)) - icon_state = "cutters-y" - item_state = "cutters_yellow" - ..() - -/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob) - if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable))) - usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\ - "You cut \the [C]'s restraints with \the [src]!",\ - "You hear cable being cut.") - C.handcuffed = null - if(C.buckled && C.buckled.buckle_require_restraints) - C.buckled.unbuckle_mob() - C.update_inv_handcuffed() - return - else - ..() - -/obj/item/weapon/wirecutters/alien - name = "alien wirecutters" - desc = "Extremely sharp wirecutters, made out of a silvery-green metal." - icon = 'icons/obj/abductor.dmi' - icon_state = "cutters" - toolspeed = 0.1 - origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) - random_color = FALSE - -/obj/item/weapon/wirecutters/cyborg - name = "wirecutters" - desc = "This cuts wires. With science." - usesound = 'sound/items/jaws_cut.ogg' - toolspeed = 0.5 - -/obj/item/weapon/wirecutters/power - name = "jaws of life" - desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." - icon_state = "jaws_cutter" - item_state = "jawsoflife" - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - matter = list(MAT_METAL=150, MAT_SILVER=50) - usesound = 'sound/items/jaws_cut.ogg' - force = 15 - toolspeed = 0.25 - random_color = FALSE - var/obj/item/weapon/crowbar/power/counterpart = null - -/obj/item/weapon/wirecutters/power/New(newloc, no_counterpart = TRUE) - ..(newloc) - if(!counterpart && no_counterpart) - counterpart = new(src, FALSE) - counterpart.counterpart = src - -/obj/item/weapon/wirecutters/power/Destroy() - if(counterpart) - counterpart.counterpart = null // So it can qdel cleanly. - qdel_null(counterpart) - return ..() - -/obj/item/weapon/wirecutters/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) - user.drop_item(src) - counterpart.forceMove(get_turf(src)) - src.forceMove(counterpart) - user.put_in_active_hand(counterpart) - to_chat(user, "You attach the pry jaws to [src].") - /* * Welding Tool */ @@ -357,9 +60,26 @@ if(max_fuel) to_chat(user, text("\icon[] The [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )) +/obj/item/weapon/weldingtool/attack(var/atom/A, var/mob/living/user, var/def_zone) + if(ishuman(A) && user.a_intent == I_HELP) + var/mob/living/carbon/human/H = A + var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting] + + if(!S || S.robotic < ORGAN_ROBOT || S.open == 3) + return ..() + + if(!welding) + to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!") + return 1 + + if(S.robo_repair(15, BRUTE, "some dents", src, user)) + remove_fuel(1, user) + return 1 + + return ..() /obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) + if(istype(W,/obj/item/weapon/tool/screwdriver)) if(welding) to_chat(user, "Stop welding first!") return @@ -888,156 +608,5 @@ /obj/item/weapon/weldingtool/electric/mounted/cyborg toolspeed = 0.5 -/* - * Crowbar - */ - -/obj/item/weapon/crowbar - name = "crowbar" - desc = "Used to remove floors and to pry open doors." - icon = 'icons/obj/tools.dmi' - icon_state = "crowbar" - flags = CONDUCT - slot_flags = SLOT_BELT - force = 6 - throwforce = 7 - pry = 1 - item_state = "crowbar" - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_ENGINEERING = 1) - matter = list(DEFAULT_WALL_MATERIAL = 50) - attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") - usesound = 'sound/items/crowbar.ogg' - toolspeed = 1 - -/obj/item/weapon/crowbar/red - icon = 'icons/obj/tools.dmi' - icon_state = "red_crowbar" - item_state = "crowbar_red" - -/obj/item/weapon/weldingtool/attack(var/atom/A, var/mob/living/user, var/def_zone) - if(ishuman(A) && user.a_intent == I_HELP) - var/mob/living/carbon/human/H = A - var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting] - - if(!S || S.robotic < ORGAN_ROBOT || S.open == 3) - return ..() - - if(!welding) - to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!") - return 1 - - if(S.robo_repair(15, BRUTE, "some dents", src, user)) - remove_fuel(1, user) - - else - return ..() - -/obj/item/weapon/crowbar/alien - name = "alien crowbar" - desc = "A hard-light crowbar. It appears to pry by itself, without any effort required." - icon = 'icons/obj/abductor.dmi' - usesound = 'sound/weapons/sonic_jackhammer.ogg' - icon_state = "crowbar" - toolspeed = 0.1 - origin_tech = list(TECH_COMBAT = 4, TECH_ENGINEERING = 4) - -/obj/item/weapon/crowbar/cyborg - name = "hydraulic crowbar" - desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbars in industrial synthetics." - usesound = 'sound/items/jaws_pry.ogg' - force = 10 - toolspeed = 0.5 - -/obj/item/weapon/crowbar/power - name = "jaws of life" - desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head." - icon_state = "jaws_pry" - item_state = "jawsoflife" - matter = list(MAT_METAL=150, MAT_SILVER=50) - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - usesound = 'sound/items/jaws_pry.ogg' - force = 15 - toolspeed = 0.25 - var/obj/item/weapon/wirecutters/power/counterpart = null - -/obj/item/weapon/crowbar/power/New(newloc, no_counterpart = TRUE) - ..(newloc) - if(!counterpart && no_counterpart) - counterpart = new(src, FALSE) - counterpart.counterpart = src - -/obj/item/weapon/crowbar/power/Destroy() - if(counterpart) - counterpart.counterpart = null // So it can qdel cleanly. - qdel_null(counterpart) - return ..() - -/obj/item/weapon/crowbar/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) - user.drop_item(src) - counterpart.forceMove(get_turf(src)) - src.forceMove(counterpart) - user.put_in_active_hand(counterpart) - to_chat(user, "You attach the cutting jaws to [src].") - - -/*/obj/item/weapon/combitool - name = "combi-tool" - desc = "It even has one of those nubbins for doing the thingy." - icon = 'icons/obj/items.dmi' - icon_state = "combitool" - w_class = ITEMSIZE_SMALL - - var/list/spawn_tools = list( - /obj/item/weapon/screwdriver, - /obj/item/weapon/wrench, - /obj/item/weapon/wirecutters, - /obj/item/weapon/material/knife, - /obj/item/weapon/material/kitchen/utensil/fork, - /obj/item/weapon/material/knife/machete/hatchet - ) - var/list/tools = list() - var/current_tool = 1 - -/obj/item/weapon/combitool/examine() - ..() - if(loc == usr && tools.len) - to_chat(usr, "It has the following fittings:") - for(var/obj/item/tool in tools) - to_chat(usr, "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]") - -/obj/item/weapon/combitool/New() - ..() - for(var/type in spawn_tools) - tools |= new type(src) - -/obj/item/weapon/combitool/attack_self(mob/user as mob) - if(++current_tool > tools.len) current_tool = 1 - var/obj/item/tool = tools[current_tool] - if(!tool) - to_chat(user, "You can't seem to find any fittings in \the [src].") - else - to_chat(user, "You switch \the [src] to the [tool.name] fitting.") - return 1 - -/obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!M.Adjacent(user)) - return 0 - var/obj/item/tool = tools[current_tool] - if(!tool) return 0 - return (tool ? tool.attack(M,user) : 0) - -/obj/item/weapon/combitool/afterattack(var/atom/target, var/mob/living/user, proximity, params) - if(!proximity) - return 0 - var/obj/item/tool = tools[current_tool] - if(!tool) return 0 - tool.loc = user - var/resolved = target.attackby(tool,user) - if(!resolved && tool && target) - tool.afterattack(target,user,1) - if(tool) - tool.loc = src*/ #undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/weapons/tools/wirecutters.dm b/code/game/objects/items/weapons/tools/wirecutters.dm new file mode 100644 index 0000000000..eb8b940c92 --- /dev/null +++ b/code/game/objects/items/weapons/tools/wirecutters.dm @@ -0,0 +1,93 @@ +/* + * Wirecutters + */ +/obj/item/weapon/tool/wirecutters + name = "wirecutters" + desc = "This cuts wires." + icon = 'icons/obj/tools.dmi' + icon_state = "cutters" + flags = CONDUCT + slot_flags = SLOT_BELT + force = 6 + throw_speed = 2 + throw_range = 9 + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 80) + attack_verb = list("pinched", "nipped") + hitsound = 'sound/items/wirecutter.ogg' + usesound = 'sound/items/wirecutter.ogg' + sharp = 1 + edge = 1 + toolspeed = 1 + var/random_color = TRUE + +/obj/item/weapon/tool/wirecutters/New() + if(random_color && prob(50)) + icon_state = "cutters-y" + item_state = "cutters_yellow" + ..() + +/obj/item/weapon/tool/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob) + if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable))) + usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\ + "You cut \the [C]'s restraints with \the [src]!",\ + "You hear cable being cut.") + C.handcuffed = null + if(C.buckled && C.buckled.buckle_require_restraints) + C.buckled.unbuckle_mob() + C.update_inv_handcuffed() + return + else + ..() + +/obj/item/weapon/tool/wirecutters/is_wirecutter() + return TRUE + +/obj/item/weapon/tool/wirecutters/alien + name = "alien wirecutters" + desc = "Extremely sharp wirecutters, made out of a silvery-green metal." + icon = 'icons/obj/abductor.dmi' + icon_state = "cutters" + toolspeed = 0.1 + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + random_color = FALSE + +/obj/item/weapon/tool/wirecutters/cyborg + name = "wirecutters" + desc = "This cuts wires. With science." + usesound = 'sound/items/jaws_cut.ogg' + toolspeed = 0.5 + +/obj/item/weapon/tool/wirecutters/power + name = "jaws of life" + desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." + icon_state = "jaws_cutter" + item_state = "jawsoflife" + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + matter = list(MAT_METAL=150, MAT_SILVER=50) + usesound = 'sound/items/jaws_cut.ogg' + force = 15 + toolspeed = 0.25 + random_color = FALSE + var/obj/item/weapon/tool/crowbar/power/counterpart = null + +/obj/item/weapon/tool/wirecutters/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/tool/wirecutters/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + QDEL_NULL(counterpart) + return ..() + +/obj/item/weapon/tool/wirecutters/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) + to_chat(user, "You attach the pry jaws to [src].") \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm new file mode 100644 index 0000000000..e0a6957c3c --- /dev/null +++ b/code/game/objects/items/weapons/tools/wrench.dm @@ -0,0 +1,71 @@ +/* + * Wrench + */ +/obj/item/weapon/tool/wrench + name = "wrench" + desc = "A wrench with many common uses. Can be usually found in your hand." + icon = 'icons/obj/tools.dmi' + icon_state = "wrench" + flags = CONDUCT + slot_flags = SLOT_BELT + force = 6 + throwforce = 7 + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 150) + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + usesound = 'sound/items/ratchet.ogg' + toolspeed = 1 + +/obj/item/weapon/tool/wrench/is_wrench() + return TRUE + +/obj/item/weapon/tool/wrench/cyborg + name = "automatic wrench" + desc = "An advanced robotic wrench. Can be found in industrial synthetic shells." + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.5 + +/obj/item/weapon/tool/wrench/alien + name = "alien wrench" + desc = "A polarized wrench. It causes anything placed between the jaws to turn." + icon = 'icons/obj/abductor.dmi' + icon_state = "wrench" + usesound = 'sound/effects/empulse.ogg' + toolspeed = 0.1 + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5) + +/obj/item/weapon/tool/wrench/power + name = "hand drill" + desc = "A simple powered hand drill. It's fitted with a bolt bit." + icon_state = "drill_bolt" + item_state = "drill" + usesound = 'sound/items/drill_use.ogg' + matter = list(DEFAULT_WALL_MATERIAL = 150, MAT_SILVER = 50) + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + force = 8 + w_class = ITEMSIZE_SMALL + throwforce = 8 + attack_verb = list("drilled", "screwed", "jabbed") + toolspeed = 0.25 + var/obj/item/weapon/tool/screwdriver/power/counterpart = null + +/obj/item/weapon/tool/wrench/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/tool/wrench/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + QDEL_NULL(counterpart) + return ..() + +/obj/item/weapon/tool/wrench/power/attack_self(mob/user) + playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) + to_chat(user, "You attach the screw driver bit to [src].") \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0facb97eac..9c2fb60434 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -39,7 +39,7 @@ /obj/CanUseTopic(var/mob/user, var/datum/topic_state/state) if(user.CanUseObjTopic(src)) return ..() - user << "\icon[src]Access Denied!" + to_chat(user, "\icon[src]Access Denied!") return STATUS_CLOSE /mob/living/silicon/CanUseObjTopic(var/obj/O) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index c918425221..5b8fc35e3c 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -10,12 +10,12 @@ icon_state = "welder" /obj/random/tool/item_to_spawn() - return pick(/obj/item/weapon/screwdriver, - /obj/item/weapon/wirecutters, + return pick(/obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wirecutters, /obj/item/weapon/weldingtool, /obj/item/weapon/weldingtool/largetank, - /obj/item/weapon/crowbar, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wrench, /obj/item/device/flashlight, /obj/item/device/multitool) @@ -26,8 +26,8 @@ /obj/random/tool/powermaint/item_to_spawn() return pick(prob(320);/obj/random/tool, - prob(1);/obj/item/weapon/screwdriver/power, - prob(1);/obj/item/weapon/wirecutters/power, + prob(1);/obj/item/weapon/tool/screwdriver/power, + prob(1);/obj/item/weapon/tool/wirecutters/power, prob(15);/obj/item/weapon/weldingtool/electric, prob(5);/obj/item/weapon/weldingtool/experimental) @@ -37,8 +37,8 @@ icon_state = "jaws_pry" /obj/random/tool/power/item_to_spawn() - return pick(/obj/item/weapon/screwdriver/power, - /obj/item/weapon/wirecutters/power, + return pick(/obj/item/weapon/tool/screwdriver/power, + /obj/item/weapon/tool/wirecutters/power, /obj/item/weapon/weldingtool/electric, /obj/item/weapon/weldingtool/experimental) @@ -49,11 +49,11 @@ icon_state = "welder" /obj/random/tool/alien/item_to_spawn() - return pick(/obj/item/weapon/screwdriver/alien, - /obj/item/weapon/wirecutters/alien, + return pick(/obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/tool/wirecutters/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/wrench/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/wrench/alien, /obj/item/stack/cable_coil/alien, /obj/item/device/multitool/alien) @@ -487,4 +487,19 @@ /obj/item/toy/prize/seraph, /obj/item/toy/prize/mauler, /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon) \ No newline at end of file + /obj/item/toy/prize/phazon) + +/obj/random/mouseremains + name = "random mouseremains" + desc = "For use with mouse spawners." + icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon_state = "mousetrap" + +/obj/random/mouseremains/item_to_spawn() + return pick(/obj/item/device/assembly/mousetrap, + /obj/item/device/assembly/mousetrap/armed, + /obj/effect/decal/cleanable/spiderling_remains, + /obj/effect/decal/cleanable/ash, + /obj/item/weapon/cigbutt, + /obj/item/weapon/cigbutt/cigarbutt, + /obj/effect/decal/remains/mouse) \ No newline at end of file diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm index 3aefa9a84c..6daa10c0f9 100644 --- a/code/game/objects/random/mob.dm +++ b/code/game/objects/random/mob.dm @@ -186,3 +186,16 @@ prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser, prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong, prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard) + +//Mice + +/obj/random/mob/mouse + name = "Random Mouse" + desc = "This is a random boring maus." + icon_state = "mouse_gray" + +/obj/random/mob/mouse/item_to_spawn() + return pick(prob(15);/mob/living/simple_animal/mouse/white, + prob(30);/mob/living/simple_animal/mouse/brown, + prob(30);/mob/living/simple_animal/mouse/gray, + prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability. diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 19a83c8e40..196b597c79 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -50,12 +50,12 @@ icon_state = "welder" /obj/random/tool/item_to_spawn() - return pick(/obj/item/weapon/screwdriver, - /obj/item/weapon/wirecutters, + return pick(/obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wirecutters, /obj/item/weapon/weldingtool, /obj/item/weapon/weldingtool/largetank, - /obj/item/weapon/crowbar, - /obj/item/weapon/wrench, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wrench, /obj/item/device/flashlight, /obj/item/device/multitool) @@ -65,8 +65,8 @@ icon_state = "jaws_pry" /obj/random/tool/power/item_to_spawn() - return pick(/obj/item/weapon/screwdriver/power, - /obj/item/weapon/wirecutters/power, + return pick(/obj/item/weapon/tool/screwdriver/power, + /obj/item/weapon/tool/wirecutters/power, /obj/item/weapon/weldingtool/electric, /obj/item/weapon/weldingtool/experimental) @@ -77,11 +77,11 @@ icon_state = "welder" /obj/random/tool/alien/item_to_spawn() - return pick(/obj/item/weapon/screwdriver/alien, - /obj/item/weapon/wirecutters/alien, + return pick(/obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/tool/wirecutters/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/wrench/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/wrench/alien, /obj/item/stack/cable_coil/alien, /obj/item/device/multitool/alien) diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index 60cb0753b1..eda2c9346b 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -67,7 +67,7 @@ return /obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob) - if (istype(C, /obj/item/weapon/weldingtool)) + if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = C if(WT.isOn()) if(WT.remove_fuel(0, user)) @@ -76,7 +76,7 @@ new /obj/item/stack/rods(src.loc) new /obj/structure/lattice(src.loc) qdel(src) - if(istype(C, /obj/item/weapon/screwdriver)) + if(C.is_screwdriver()) if(health < maxhealth) to_chat(user, "You begin repairing \the [src.name] with \the [C.name].") if(do_after(user, 20, src)) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a6ea5804f6..18f6c88aa3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -261,7 +261,7 @@ src.update_icon() for(var/mob/M in viewers(src)) M.show_message("[src] has been [welded?"welded shut":"unwelded"] by [user.name].", 3, "You hear welding.", 2) - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(welded) if(anchored) user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index 90f91d1d8f..40b6ec68b9 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -9,6 +9,6 @@ /obj/item/clothing/mask/breath, /obj/item/clothing/head/helmet/space/void, /obj/item/clothing/suit/space/void, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/cell, /obj/item/device/multitool) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index d378c74537..2b10bdff4a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -16,7 +16,7 @@ /obj/item/clothing/head/greenbandana, /obj/item/weapon/material/minihoe, /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/weapon/wirecutters/clippers, + /obj/item/weapon/tool/wirecutters/clippers, /obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/clothing/suit/storage/hooded/wintercoat/hydro, /obj/item/clothing/shoes/boots/winter/hydro) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 7b1d7e47d9..471fa446fb 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -132,7 +132,7 @@ /obj/item/device/healthanalyzer, /obj/item/device/radio/off, /obj/random/medical, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/extinguisher/mini, /obj/item/weapon/storage/box/freezer, /obj/item/clothing/accessory/storage/white_vest, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 269e7b6fc8..994fe0eca1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -88,7 +88,7 @@ spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) playsound(src.loc, "sparks", 50, 1) - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(welded) if(anchored) user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 0534418e66..06ed1b9451 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -106,7 +106,7 @@ /obj/item/weapon/storage/box/holobadge/hos, /obj/item/clothing/accessory/badge/holo/hos, /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/crowbar/red, + /obj/item/weapon/tool/crowbar/red, /obj/item/weapon/storage/box/flashbangs, /obj/item/weapon/storage/belt/security, /obj/item/device/flash, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm index 8a066cc754..9dadb6dc89 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm @@ -45,7 +45,7 @@ /obj/item/weapon/storage/box/holobadge/hos, /obj/item/clothing/accessory/badge/holo/hos, /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/crowbar/red, + /obj/item/weapon/tool/crowbar/red, /obj/item/weapon/storage/box/flashbangs, /obj/item/device/flash, /obj/item/weapon/melee/baton/loaded, @@ -133,7 +133,7 @@ /obj/item/weapon/storage/box/holobadge/hos, /obj/item/clothing/accessory/badge/holo/hos, /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/crowbar/red, + /obj/item/weapon/tool/crowbar/red, /obj/item/weapon/storage/box/flashbangs, /obj/item/weapon/storage/belt/security, /obj/item/device/flash, diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index c247644246..1194b7f9fa 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -14,7 +14,7 @@ /obj/item/clothing/under/syndicate, /obj/item/clothing/head/helmet/space/void/merc, /obj/item/clothing/suit/space/void/merc, - /obj/item/weapon/crowbar/red, + /obj/item/weapon/tool/crowbar/red, /obj/item/weapon/cell/high, /obj/item/weapon/card/id/syndicate, /obj/item/device/multitool, @@ -24,7 +24,7 @@ /obj/structure/closet/syndicate/suit desc = "It's a storage unit for voidsuits." - + starts_with = list( /obj/item/weapon/tank/jetpack/oxygen, /obj/item/clothing/shoes/magboots, diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index a4ed511f4b..1336890b13 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -113,15 +113,15 @@ if(prob(70)) starts_with += /obj/item/device/flashlight if(prob(70)) - starts_with += /obj/item/weapon/screwdriver + starts_with += /obj/item/weapon/tool/screwdriver if(prob(70)) - starts_with += /obj/item/weapon/wrench + starts_with += /obj/item/weapon/tool/wrench if(prob(70)) starts_with += /obj/item/weapon/weldingtool if(prob(70)) - starts_with += /obj/item/weapon/crowbar + starts_with += /obj/item/weapon/tool/crowbar if(prob(70)) - starts_with += /obj/item/weapon/wirecutters + starts_with += /obj/item/weapon/tool/wirecutters if(prob(70)) starts_with += /obj/item/device/t_scanner if(prob(20)) @@ -203,7 +203,7 @@ icon_closed = "hydrant" icon_opened = "hydrant_open" plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_TURF_LAYER anchored = 1 density = 0 wall_mounted = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index 39204e3491..78572d38cd 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -16,7 +16,7 @@ /obj/structure/closet/walllocker/emerglocker name = "emergency locker" desc = "A wall mounted locker with emergency supplies." - var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar/red) + var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tool/crowbar/red) var/amount = 2 // spawns each items X times. icon_state = "emerg" diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index e108626206..e399c04d0b 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -94,7 +94,7 @@ user.drop_item() W.forceMove(src) return - else if(istype(W, /obj/item/weapon/wirecutters)) + else if(W.is_wirecutter()) if(rigged) user << "You cut away the wiring." playsound(src.loc, W.usesound, 100, 1) @@ -191,7 +191,7 @@ src.toggle(user) /obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters))) + if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/tool/wirecutters))) return ..() if(istype(W, /obj/item/weapon/melee/energy/blade)) emag_act(INFINITY, user) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index b4a0d60dcb..2c739985b2 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -15,17 +15,23 @@ if(I.density || I.anchored || I == src || !I.simulated) continue I.forceMove(src) + update_icon() /obj/structure/largecrate/attack_hand(mob/user as mob) - user << "You need a crowbar to pry this open!" + to_chat(user, "You need a crowbar to pry this open!") return /obj/structure/largecrate/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/crowbar)) + var/turf/T = get_turf(src) + if(!T) + to_chat(user, "You can't open this here!") + if(W.is_crowbar()) new /obj/item/stack/material/wood(src) - var/turf/T = get_turf(src) + for(var/atom/movable/AM in contents) - if(AM.simulated) AM.forceMove(T) + if(AM.simulated) + AM.forceMove(T) + user.visible_message("[user] pries \the [src] open.", \ "You pry open \the [src].", \ "You hear splitting wood.") @@ -42,7 +48,7 @@ icon_state = "mulecrate" /obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) var/obj/item/mecha_parts/mecha_equipment/ME var/obj/mecha/working/hoverpod/H = new (loc) @@ -52,6 +58,29 @@ ME.attach(H) ..() +/obj/structure/largecrate/vehicle + name = "vehicle crate" + desc = "It comes in a box for the consumer's sake. ..How is this lighter?" + icon_state = "vehiclecrate" + +/obj/structure/largecrate/vehicle/initialize() + ..() + spawn(1) + for(var/obj/O in contents) + O.update_icon() + +/obj/structure/largecrate/vehicle/bike + name = "spacebike crate" + starts_with = list(/obj/structure/vehiclecage/spacebike) + +/obj/structure/largecrate/vehicle/quadbike + name = "\improper ATV crate" + starts_with = list(/obj/structure/vehiclecage/quadbike) + +/obj/structure/largecrate/vehicle/quadtrailer + name = "\improper ATV trailer crate" + starts_with = list(/obj/structure/vehiclecage/quadtrailer) + /obj/structure/largecrate/animal icon_state = "mulecrate" diff --git a/code/game/objects/structures/crates_lockers/largecrate_vr.dm b/code/game/objects/structures/crates_lockers/largecrate_vr.dm index d6622e2591..7226e19208 100644 --- a/code/game/objects/structures/crates_lockers/largecrate_vr.dm +++ b/code/game/objects/structures/crates_lockers/largecrate_vr.dm @@ -3,7 +3,7 @@ desc = "You hear chirping and cawing inside the crate. It sounds like there are a lot of birds in there..." /obj/structure/largecrate/birds/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) new /obj/item/stack/material/wood(src) new /mob/living/simple_animal/bird(src) new /mob/living/simple_animal/bird/kea(src) diff --git a/code/game/objects/structures/crates_lockers/vehiclecage.dm b/code/game/objects/structures/crates_lockers/vehiclecage.dm new file mode 100644 index 0000000000..9915ca6a7b --- /dev/null +++ b/code/game/objects/structures/crates_lockers/vehiclecage.dm @@ -0,0 +1,106 @@ +/obj/structure/vehiclecage + name = "vehicle cage" + desc = "A large metal lattice that seems to exist solely to annoy consumers." + icon = 'icons/obj/storage.dmi' + icon_state = "vehicle_cage" + density = 1 + var/obj/vehicle/my_vehicle + var/my_vehicle_type + var/paint_color = "#666666" + +/obj/structure/vehiclecage/examine(mob/user) + ..() + if(my_vehicle) + to_chat(user, "It seems to contain \the [my_vehicle].") + +/obj/structure/vehiclecage/initialize() + . = ..() + if(my_vehicle_type) + my_vehicle = new my_vehicle_type(src) + for(var/obj/I in get_turf(src)) + if(I.density || I.anchored || I == src || !I.simulated || !istype(I, my_vehicle_type)) + continue + load_vehicle(I) + update_icon() + +/obj/structure/vehiclecage/attack_hand(mob/user as mob) + to_chat(user, "You need a wrench to take this apart!") + return + +/obj/structure/vehiclecage/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/turf/T = get_turf(src) + if(!T) + to_chat(user, "You can't open this here!") + if(W.is_wrench() && do_after(user, 60 * W.toolspeed, src)) + playsound(loc, W.usesound, 50, 1) + disassemble(W, user) + user.visible_message("[user] begins loosening \the [src]'s bolts.") + if(W.is_wirecutter() && do_after(user, 70 * W.toolspeed, src)) + playsound(loc, W.usesound, 50, 1) + disassemble(W, user) + user.visible_message("[user] begins cutting \the [src]'s bolts.") + else + return attack_hand(user) + +/obj/structure/vehiclecage/update_icon() + ..() + overlays.Cut() + underlays.Cut() + + var/image/framepaint = new(icon = 'icons/obj/storage.dmi', icon_state = "[initial(icon_state)]_a", layer = MOB_LAYER + 1.1) + framepaint.plane = MOB_PLANE + framepaint.color = paint_color + overlays += framepaint + + for(var/obj/vehicle/V in src.contents) + var/image/showcase = new(V) + showcase.layer = src.layer - 0.1 + underlays += showcase + +/obj/structure/vehiclecage/MouseDrop_T(var/atom/movable/C, mob/user as mob) + if(user && (user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C))) + return + + var/obj/vehicle/V + if(istype(C, /obj/vehicle)) + V = C + if(!V) + return + + if(!my_vehicle) + load_vehicle(V, user) + +/obj/structure/vehiclecage/proc/load_vehicle(var/obj/vehicle/V, mob/user as mob) + if(user) + user.visible_message("[user] loads \the [V] into \the [src].", \ + "You load \the [V] into \the [src].", \ + "You hear creaking metal.") + + V.forceMove(src) + + paint_color = V.paint_color + + update_icon() + +/obj/structure/vehiclecage/proc/disassemble(obj/item/weapon/W as obj, mob/user as mob) + var/turf/T = get_turf(src) + new /obj/item/stack/material/steel(src.loc, 5) + + for(var/atom/movable/AM in contents) + if(AM.simulated) + AM.forceMove(T) + + my_vehicle = null + user.visible_message("[user] release \the [src].", \ + "You finally release \the [src].", \ + "You hear creaking metal.") + qdel(src) + +/obj/structure/vehiclecage/spacebike + my_vehicle_type = /obj/vehicle/bike/random + +/obj/structure/vehiclecage/quadbike + my_vehicle_type = /obj/vehicle/train/engine/quadbike/random + +/obj/structure/vehiclecage/quadtrailer + my_vehicle_type = /obj/vehicle/train/trolley/trailer/random diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 39c2dc43fd..78095631de 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -37,7 +37,7 @@ layer = OBJ_LAYER /obj/structure/curtain/attackby(obj/item/P, mob/user) - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) playsound(src, P.usesound, 50, 1) user << "You start to cut the shower curtains." if(do_after(user, 10)) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 87957b4d4d..f8ea5d2f77 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -200,7 +200,7 @@ to_chat(user, "You need more welding fuel.") return - else if(istype(W, /obj/item/weapon/wrench) && state == 0) + else if(W.is_wrench() && state == 0) playsound(src, W.usesound, 100, 1) if(anchored) user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You starts unsecuring the airlock assembly from the floor.") @@ -223,7 +223,7 @@ src.state = 1 to_chat(user, "You wire the airlock.") - else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 ) + else if(W.is_wirecutter() && state == 1 ) playsound(src, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") @@ -245,7 +245,7 @@ src.state = 2 src.electronics = W - else if(istype(W, /obj/item/weapon/crowbar) && state == 2 ) + else if(W.is_crowbar() && state == 2 ) //This should never happen, but just in case I guess if (!electronics) to_chat(user, "There was nothing to remove.") @@ -287,7 +287,7 @@ to_chat(user, "You installed [material_display_name(material_name)] plating into the airlock assembly.") glass = material_name - else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 ) + else if(W.is_screwdriver() && state == 2 ) playsound(src, W.usesound, 100, 1) to_chat(user, "Now finishing the airlock.") diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index e9483386cf..1cd43b7910 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -12,7 +12,7 @@ return /obj/structure/bed/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc) playsound(src, W.usesound, 50, 1) C.set_dir(dir) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index e93afd18f3..2be63df8e7 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -35,7 +35,7 @@ user << "You place [O] in [src]." else opened = !opened - if(istype(O, /obj/item/weapon/wrench)) + if(O.is_wrench()) if(!has_extinguisher) user << "You start to unwrench the extinguisher cabinet." playsound(src.loc, O.usesound, 50, 1) diff --git a/code/game/objects/structures/fitness.dm b/code/game/objects/structures/fitness.dm index d29ad16f74..158bf5533b 100644 --- a/code/game/objects/structures/fitness.dm +++ b/code/game/objects/structures/fitness.dm @@ -33,7 +33,7 @@ var/list/qualifiers = list("with ease", "without any trouble", "with great effort") /obj/structure/fitness/weightlifter/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) weight = ((weight) % qualifiers.len) + 1 to_chat(user, "You set the machine's weight level to [weight].") diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index f0a7498390..8b7f5bf042 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -4,7 +4,7 @@ anchored = 1 density = 1 pixel_x = -16 - plane = MOB_LAYER // You know what, let's play it safe. + plane = MOB_PLANE // You know what, let's play it safe. layer = ABOVE_MOB_LAYER var/base_state = null // Used for stumps. var/health = 200 // Used for chopping down trees. @@ -52,12 +52,12 @@ animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) // Used when the tree gets hurt. -/obj/structure/flora/tree/proc/adjust_health(var/amount, var/is_ranged = FALSE) +/obj/structure/flora/tree/proc/adjust_health(var/amount, var/damage_wood = FALSE) if(is_stump) return // Bullets and lasers ruin some of the wood - if(is_ranged && product_amount > 0) + if(damage_wood && product_amount > 0) var/wood = initial(product_amount) product_amount -= round(wood * (abs(amount)/max_health)) @@ -90,12 +90,16 @@ set_light(0) /obj/structure/flora/tree/ex_act(var/severity) - adjust_health(-(max_health / severity)) + adjust_health(-(max_health / severity), TRUE) /obj/structure/flora/tree/bullet_act(var/obj/item/projectile/Proj) if(Proj.get_structure_damage()) adjust_health(-Proj.get_structure_damage(), TRUE) +/obj/structure/flora/tree/tesla_act(power, explosive) + adjust_health(-power / 100, TRUE) // Kills most trees in one lightning strike. + ..() + /obj/structure/flora/tree/get_description_interaction() var/list/results = list() diff --git a/code/game/objects/structures/ghost_pods/mysterious.dm b/code/game/objects/structures/ghost_pods/mysterious.dm new file mode 100644 index 0000000000..2e6a11a8bb --- /dev/null +++ b/code/game/objects/structures/ghost_pods/mysterious.dm @@ -0,0 +1,50 @@ +/obj/structure/ghost_pod/manual/corgi + name = "glowing rune" + desc = "This rune slowly lights up and goes dim in a repeating pattern, like a slow heartbeat. It's almost as if it's calling out to you to touch it..." + description_info = "This will summon some manner of creature through quite dubious means. The creature will be controlled by a player." + icon_state = "corgirune" + icon_state_opened = "corgirune-inert" + density = FALSE + anchored = TRUE + ghost_query_type = /datum/ghost_query/corgi_rune + confirm_before_open = TRUE + +/obj/structure/ghost_pod/manual/corgi/trigger() + ..("\The [usr] places their hand on the rune!", "is attempting to summon a corgi.") + +/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M) + lightning_strike(get_turf(src), cosmetic = TRUE) + density = FALSE + var/mob/living/simple_animal/corgi/R = new(get_turf(src)) + if(M.mind) + M.mind.transfer_to(R) + to_chat(M, "You are a Corgi! Woof!") + R.ckey = M.ckey + visible_message("With a bright flash of light, \the [src] disappears, and in its place stands a small corgi.") + log_and_message_admins("successfully touched \a [src] and summoned a corgi.") + ..() + +/obj/structure/ghost_pod/manual/cursedblade + name = "abandoned blade" + desc = "A red crystal blade that someone jammed deep into a stone. If you try hard enough, you might be able to remove it." + icon_state = "soulblade-embedded" + icon_state_opened = "soulblade-released" + density = TRUE + anchored = TRUE + ghost_query_type = /datum/ghost_query/cursedblade + confirm_before_open = TRUE + +/obj/structure/ghost_pod/manual/cursedblade/trigger() + ..("\The [usr] attempts to pull out the sword!", "is activating a cursed blade.") + +/obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M) + density = FALSE + var/obj/item/weapon/melee/cursedblade/R = new(get_turf(src)) + to_chat(M, "You are a Cursed Sword, discovered by a hapless explorer. \ + You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\ + your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \ + Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.") + R.ghost_inhabit(M) + visible_message("The blade shines brightly for a brief moment as [usr] pulls it out of the stone!") + log_and_message_admins("successfully acquired a cursed sword.") + ..() \ No newline at end of file diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm index 1e7210a1ec..8fd3fcea7c 100644 --- a/code/game/objects/structures/ghost_pods/silicon.dm +++ b/code/game/objects/structures/ghost_pods/silicon.dm @@ -58,54 +58,4 @@ R.ckey = M.ckey visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.") R.Namepick() - ..() - -/obj/structure/ghost_pod/manual/corgi - name = "glowing rune" - desc = "This rune slowly lights up and goes dim in a repeating pattern, like a slow heartbeat. It's almost as if it's calling out to you to touch it..." - description_info = "This will summon some manner of creature through quite dubious means. The creature will be controlled by a player." - icon_state = "corgirune" - icon_state_opened = "corgirune-inert" - density = FALSE - anchored = TRUE - ghost_query_type = /datum/ghost_query/corgi_rune - confirm_before_open = TRUE - -/obj/structure/ghost_pod/manual/corgi/trigger() - ..("\The [usr] places their hand on the rune!", "is attempting to summon a corgi.") - -/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M) - density = FALSE - var/mob/living/simple_animal/corgi/R = new(get_turf(src)) - if(M.mind) - M.mind.transfer_to(R) - to_chat(M, "You are a Corgi! Woof!") - R.ckey = M.ckey - visible_message("With a bright flash of light, \the [src] disappears, and in its place stands a small corgi.") - log_and_message_admins("successfully touched \a [src] and summoned a corgi.") - ..() - -/obj/structure/ghost_pod/manual/cursedblade - name = "abandoned blade" - desc = "A red crystal blade that someone jammed deep into a stone. If you try hard enough, you might be able to remove it." - icon_state = "soulblade-embedded" - icon_state_opened = "soulblade-released" - density = TRUE - anchored = TRUE - ghost_query_type = /datum/ghost_query/cursedblade - confirm_before_open = TRUE - -/obj/structure/ghost_pod/manual/cursedblade/trigger() - ..("\The [usr] attempts to pull out the sword!", "is activating a cursed blade.") - -/obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M) - density = FALSE - var/obj/item/weapon/melee/cursedblade/R = new(get_turf(src)) - to_chat(M, "You are a Cursed Sword, discovered by a hapless explorer. \ - You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\ - your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \ - Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.") - R.ghost_inhabit(M) - visible_message("The blade shines brightly for a brief moment as [usr] pulls it out of the stone!") - log_and_message_admins("successfully acquired a cursed sword.") ..() \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index a22bbae0d2..b61d01d2a4 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -144,7 +144,7 @@ reinforce_girder() /obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench) && state == 0) + if(W.is_wrench() && state == 0) if(anchored && !reinf_material) playsound(src, W.usesound, 100, 1) to_chat(user, "Now disassembling the girder...") @@ -170,7 +170,7 @@ to_chat(user, "You drill through the girder!") dismantle() - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(state == 2) playsound(src, W.usesound, 100, 1) to_chat(user, "Now unsecuring support struts...") @@ -183,7 +183,7 @@ reinforcing = !reinforcing to_chat(user, "\The [src] can now be [reinforcing? "reinforced" : "constructed"]!") - else if(istype(W, /obj/item/weapon/wirecutters) && state == 1) + else if(W.is_wirecutter() && state == 1) playsound(src, W.usesound, 100, 1) to_chat(user, "Now removing support struts...") if(do_after(user,40 * W.toolspeed)) @@ -193,7 +193,7 @@ reinf_material = null reset_girder() - else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored) + else if(W.is_crowbar() && state == 0 && anchored) playsound(src, W.usesound, 100, 1) to_chat(user, "Now dislodging the girder...") if(do_after(user, 40 * W.toolspeed)) @@ -317,19 +317,26 @@ return /obj/structure/girder/cult + name = "column" icon= 'icons/obj/cult.dmi' icon_state= "cultgirder" health = 250 cover = 70 - girder_material = DEFAULT_WALL_MATERIAL + girder_material = "cult" applies_material_colour = 0 +/obj/structure/girder/cult/update_icon() + if(anchored) + icon_state = "cultgirder" + else + icon_state = "displaced" + /obj/structure/girder/cult/dismantle() new /obj/effect/decal/remains/human(get_turf(src)) qdel(src) /obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 100, 1) to_chat(user, "Now disassembling the girder...") if(do_after(user,40 * W.toolspeed)) diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm index e20591b939..7ef0d49a51 100644 --- a/code/game/objects/structures/gravemarker.dm +++ b/code/game/objects/structures/gravemarker.dm @@ -56,7 +56,7 @@ return 1 /obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN) if(carving_1) user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].") @@ -72,7 +72,7 @@ epitaph += carving_2 update_icon() return - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) user.visible_message("[user] starts taking down \the [src.name].", "You start taking down \the [src.name].") if(do_after(user, material.hardness * W.toolspeed)) user.visible_message("[user] takes down \the [src.name].", "You take down \the [src.name].") diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index dcf283446f..f8d532688c 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -93,13 +93,15 @@ src.health -= damage*0.2 spawn(0) healthcheck() //spawn to make sure we return properly if the grille is deleted -/obj/structure/grille/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(iswirecutter(W)) +/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) + if(!istype(W)) + return + if(W.is_wirecutter()) if(!shock(user, 100)) playsound(src, W.usesound, 100, 1) new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) qdel(src) - else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) + else if((W.is_screwdriver()) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) playsound(src, W.usesound, 100, 1) anchored = !anchored @@ -107,7 +109,7 @@ "You have [anchored ? "fastened the grille to" : "unfastened the grille from"] the floor.") return -//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM + //window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM else if(istype(W,/obj/item/stack/material)) var/obj/item/stack/material/ST = W if(!ST.material.created_window) diff --git a/code/game/objects/structures/holoplant.dm b/code/game/objects/structures/holoplant.dm index 1f6473ebdc..1f762c027a 100644 --- a/code/game/objects/structures/holoplant.dm +++ b/code/game/objects/structures/holoplant.dm @@ -52,7 +52,7 @@ /obj/machinery/holoplant/proc/deactivate() overlays -= plant - qdel_null(plant) + QDEL_NULL(plant) set_light(0) use_power = 0 diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 32b1dec788..51e824c6b0 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -50,7 +50,7 @@ health -= proj_damage ..() if(health <= 0) - deflate(1) + puncture() return /obj/structure/inflatable/ex_act(severity) @@ -59,15 +59,15 @@ qdel(src) return if(2.0) - deflate(1) + puncture() return if(3.0) if(prob(50)) - deflate(1) + puncture() return /obj/structure/inflatable/blob_act() - deflate(1) + puncture() /obj/structure/inflatable/attack_hand(mob/user as mob) add_fingerprint(user) @@ -78,7 +78,7 @@ if (can_puncture(W)) visible_message("[user] pierces [src] with [W]!") - deflate(1) + puncture() if(W.damtype == BRUTE || W.damtype == BURN) hit(W.force) ..() @@ -89,7 +89,7 @@ if(sound_effect) playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) if(health <= 0) - deflate(1) + puncture() /obj/structure/inflatable/CtrlClick() hand_deflate() @@ -102,20 +102,21 @@ R.add_fingerprint(user) qdel(src) -/obj/structure/inflatable/proc/deflate(var/violent=0) +/obj/structure/inflatable/proc/deflate() playsound(loc, 'sound/machines/hiss.ogg', 75, 1) - if(violent) - visible_message("[src] rapidly deflates!") - var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc) + //user << "You slowly deflate the inflatable wall." + visible_message("[src] slowly deflates.") + spawn(50) + var/obj/item/inflatable/R = new /obj/item/inflatable(loc) src.transfer_fingerprints_to(R) qdel(src) - else - //user << "You slowly deflate the inflatable wall." - visible_message("[src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/R = new /obj/item/inflatable(loc) - src.transfer_fingerprints_to(R) - qdel(src) + +/obj/structure/inflatable/proc/puncture() + playsound(loc, 'sound/machines/hiss.ogg', 75, 1) + visible_message("[src] rapidly deflates!") + var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc) + src.transfer_fingerprints_to(R) + qdel(src) /obj/structure/inflatable/verb/hand_deflate() set name = "Deflate" @@ -133,7 +134,7 @@ user.do_attack_animation(src) if(health <= 0) user.visible_message("[user] [attack_verb] open the [src]!") - spawn(1) deflate(1) + spawn(1) puncture() else user.visible_message("[user] [attack_verb] at [src]!") return 1 @@ -221,19 +222,20 @@ else icon_state = "door_closed" -/obj/structure/inflatable/door/deflate(var/violent=0) +/obj/structure/inflatable/door/deflate() playsound(loc, 'sound/machines/hiss.ogg', 75, 1) - if(violent) - visible_message("[src] rapidly deflates!") - var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc) + visible_message("[src] slowly deflates.") + spawn(50) + var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc) src.transfer_fingerprints_to(R) qdel(src) - else - visible_message("[src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc) - src.transfer_fingerprints_to(R) - qdel(src) + +/obj/structure/inflatable/door/puncture() + playsound(loc, 'sound/machines/hiss.ogg', 75, 1) + visible_message("[src] rapidly deflates!") + var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc) + src.transfer_fingerprints_to(R) + qdel(src) /obj/item/inflatable/torn name = "torn inflatable wall" diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 4c1bc63618..5f051a4e78 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -102,7 +102,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) data["replacer"] = myreplacer ? capitalize(myreplacer.name) : null data["signs"] = signs ? "[signs] sign\s" : null - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "janitorcart.tmpl", "Janitorial cart", 240, 160) ui.set_initial_data(data) diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index 96416e0229..f8d9977823 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -365,9 +365,9 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/device/gps, /obj/item/device/geiger, /obj/item/device/mass_spectrometer, - /obj/item/weapon/wrench, - /obj/item/weapon/screwdriver, - /obj/item/weapon/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wirecutters, /obj/item/device/multitool, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/tool/cable_layer, @@ -450,11 +450,11 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh uncommon_loot = list( /obj/item/device/multitool/alien, /obj/item/stack/cable_coil/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/screwdriver/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/screwdriver/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/wirecutters/alien, - /obj/item/weapon/wrench/alien + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/weapon/tool/wrench/alien ) rare_loot = list( /obj/item/weapon/storage/belt/utility/alien/full @@ -496,11 +496,11 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh common_loot = list( /obj/item/device/multitool/alien, /obj/item/stack/cable_coil/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/screwdriver/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/screwdriver/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/wirecutters/alien, - /obj/item/weapon/wrench/alien, + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/weapon/tool/wrench/alien, /obj/item/weapon/surgical/FixOVein/alien, /obj/item/weapon/surgical/bone_clamp/alien, /obj/item/weapon/surgical/cautery/alien, @@ -744,7 +744,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh uncommon_loot = list( /obj/item/mecha_parts/mecha_equipment/shocker, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade, /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser, /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, /obj/item/device/kit/paint/gygax, @@ -784,7 +784,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh uncommon_loot = list( /obj/item/mecha_parts/mecha_equipment/shocker, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade, /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser, /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, /obj/item/device/kit/paint/durand, diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 1e8237cdfd..3011d2c61d 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -49,24 +49,24 @@ ..() /obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) if(!glass) playsound(src.loc, I.usesound, 50, 1) if(do_after(user, 20 * I.toolspeed)) - user << "You unfasten the frame." + to_chat(user, "You unfasten the frame.") new /obj/item/frame/mirror( src.loc ) qdel(src) return - if(istype(I, /obj/item/weapon/crowbar)) + if(I.is_wrench()) if(shattered && glass) - user << "The broken glass falls out." + to_chat(user, "The broken glass falls out.") icon_state = "mirror_frame" glass = !glass new /obj/item/weapon/material/shard( src.loc ) return if(!shattered && glass) playsound(src.loc, I.usesound, 50, 1) - user << "You remove the glass." + to_chat(user, "You remove the glass.") glass = !glass icon_state = "mirror_frame" new /obj/item/stack/material/glass( src.loc, 2 ) @@ -76,15 +76,15 @@ if(!glass) var/obj/item/stack/material/glass/G = I if (G.get_amount() < 2) - user << "You need two sheets of glass to add them to the frame." + to_chat(user, "You need two sheets of glass to add them to the frame.") return - user << "You start to add the glass to the frame." + to_chat(user, "You start to add the glass to the frame.") if(do_after(user, 20)) if (G.use(2)) shattered = 0 glass = 1 icon_state = "mirror" - user << "You add the glass to the frame." + to_chat(user, "You add the glass to the frame.") return if(shattered && glass) diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 3b36cb0087..95d2656ed5 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -1,23 +1,307 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 +#define MUSICIAN_HEARCHECK_MINDELAY 4 +#define INSTRUMENT_MAX_LINE_LENGTH 300 +#define INSTRUMENT_MAX_LINE_NUMBER 50 + /datum/song var/name = "Untitled" var/list/lines = new() - var/tempo = 5 + var/tempo = 5 // delay between notes + var/playing = 0 // if we're playing + var/help = 0 // if help is open + var/edit = 1 // if we're in editing mode + var/repeat = 0 // number of times remaining to repeat + var/max_repeats = 10 // maximum times we can repeat + + var/instrumentDir = "piano" // the folder with the sounds + var/instrumentExt = "ogg" // the file extension + var/obj/instrumentObj = null // the associated obj playing the sound + var/last_hearcheck = 0 + var/list/hearing_mobs + +/datum/song/New(dir, obj, ext = "ogg") + instrumentDir = dir + instrumentObj = obj + instrumentExt = ext + +/datum/song/Destroy() + instrumentObj = null + return ..() + + +// note is a number from 1-7 for A-G +// acc is either "b", "n", or "#" +// oct is 1-8 (or 9 for C) +/datum/song/proc/playnote(note, acc as text, oct) + // handle accidental -> B<>C of E<>F + if(acc == "b" && (note == 3 || note == 6)) // C or F + if(note == 3) + oct-- + note-- + acc = "n" + else if(acc == "#" && (note == 2 || note == 5)) // B or E + if(note == 2) + oct++ + note++ + acc = "n" + else if(acc == "#" && (note == 7)) //G# + note = 1 + acc = "b" + else if(acc == "#") // mass convert all sharps to flats, octave jump already handled + acc = "b" + note++ + + // check octave, C is allowed to go to 9 + if(oct < 1 || (note == 3 ? oct > 9 : oct > 8)) + return + + // now generate name + var/soundfile = "sound/instruments/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]" + soundfile = file(soundfile) + // make sure the note exists + if(!fexists(soundfile)) + return + // and play + var/turf/source = get_turf(instrumentObj) + if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck) + LAZYCLEARLIST(hearing_mobs) + for(var/mob/M in hearers(15, source)) + if(!M.client || !(M.is_preference_enabled(/datum/client_preference/instrument_toggle))) + continue + LAZYSET(hearing_mobs, M, TRUE) + last_hearcheck = world.time + var/sound/music_played = sound(soundfile) + for(var/i in hearing_mobs) + var/mob/M = i + M.playsound_local(source, null, 100, falloff = 5, S = music_played) + +/datum/song/proc/updateDialog(mob/user) + instrumentObj.updateDialog() // assumes it's an object in world, override if otherwise + +/datum/song/proc/shouldStopPlaying(mob/user) + if(instrumentObj) + if(!instrumentObj.Adjacent(user) || user.stat) + return 1 + return !instrumentObj.anchored // add special cases to stop in subclasses + else + return 1 + +/datum/song/proc/playsong(mob/user) + while(repeat >= 0) + var/cur_oct[7] + var/cur_acc[7] + for(var/i = 1 to 7) + cur_oct[i] = 3 + cur_acc[i] = "n" + + for(var/line in lines) + for(var/beat in splittext(lowertext(line), ",")) + var/list/notes = splittext(beat, "/") + for(var/note in splittext(notes[1], "-")) + if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case + playing = 0 + return + if(lentext(note) == 0) + continue + var/cur_note = text2ascii(note) - 96 + if(cur_note < 1 || cur_note > 7) + continue + for(var/i=2 to lentext(note)) + var/ni = copytext(note,i,i+1) + if(!text2num(ni)) + if(ni == "#" || ni == "b" || ni == "n") + cur_acc[cur_note] = ni + else if(ni == "s") + cur_acc[cur_note] = "#" // so shift is never required + else + cur_oct[cur_note] = text2num(ni) + playnote(cur_note, cur_acc[cur_note], cur_oct[cur_note]) + if(notes.len >= 2 && text2num(notes[2])) + sleep(sanitize_tempo(tempo / text2num(notes[2]))) + else + sleep(tempo) + repeat-- + playing = 0 + repeat = 0 + updateDialog(user) + +/datum/song/proc/interact(mob/user) + var/dat = "" + if(lines.len > 0) + dat += "

Playback

" + if(!playing) + dat += {"Play Stop

+ Repeat Song: + [repeat > 0 ? "--" : "--"] + [repeat] times + [repeat < max_repeats ? "++" : "++"] +
"} + else + dat += {"Play Stop
+ Repeats left: [repeat]
"} + if(!edit) + dat += "
Show Editor
" + else + var/bpm = round(600 / tempo) + dat += {"

Editing

+ Hide Editor + Start a New Song + Import a Song

+ Tempo: - [bpm] BPM +

"} + var/linecount = 0 + for(var/line in lines) + linecount += 1 + dat += "Line [linecount]: Edit X [line]
" + dat += "Add Line

" + if(help) + dat += {"Hide Help
+ Lines are a series of chords, separated by commas (,), each with notes seperated by hyphens (-).
+ Every note in a chord will play together, with chord timed by the tempo.
+
+ Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.
+ By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.
+ Example: C,D,E,F,G,A,B will play a C major scale.
+ After a note has an accidental placed, it will be remembered: C,C4,C,C3 is C3,C4,C4,C3
+ Chords can be played simply by seperating each note with a hyphon: A-C#,Cn-E,E-G#,Gn-B
+ A pause may be denoted by an empty chord: C,E,,C,G
+ To make a chord be a different time, end it with /x, where the chord length will be length
+ defined by tempo / x: C,G/2,E/4
+ Combined, an example is: E-E4/4,F#/2,G#/8,B/8,E3-E4/4 +
+ Lines may be up to 50 characters.
+ A song may only contain up to 50 lines.
+ "} + else + dat += "Show Help
" + var/datum/browser/popup = new(user, "instrument", instrumentObj.name, 700, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state)) + popup.open() + +/datum/song/Topic(href, href_list) + if(!instrumentObj.Adjacent(usr) || usr.stat) + usr << browse(null, "window=instrument") + usr.unset_machine() + return + instrumentObj.add_fingerprint(usr) + if(href_list["newsong"]) + lines = new() + tempo = sanitize_tempo(5) // default 120 BPM + name = "" + else if(href_list["import"]) + var/t = "" + do + t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message) + if(!in_range(instrumentObj, usr)) + return + if(lentext(t) >= INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) + var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") + if(cont == "no") + break + while(lentext(t) > INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) + //split into lines + spawn() + lines = splittext(t, "\n") + if(copytext(lines[1],1,6) == "BPM: ") + tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6))) + lines.Cut(1,2) + else + tempo = sanitize_tempo(5) // default 120 BPM + if(lines.len > INSTRUMENT_MAX_LINE_NUMBER) + usr << "Too many lines!" + lines.Cut(INSTRUMENT_MAX_LINE_NUMBER+1) + var/linenum = 1 + for(var/l in lines) + if(lentext(l) > INSTRUMENT_MAX_LINE_LENGTH) + usr << "Line [linenum] too long!" + lines.Remove(l) + else + linenum++ + updateDialog(usr) // make sure updates when complete + else if(href_list["help"]) + help = text2num(href_list["help"]) - 1 + else if(href_list["edit"]) + edit = text2num(href_list["edit"]) - 1 + if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops. + if(playing) + return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing. + repeat += round(text2num(href_list["repeat"])) + if(repeat < 0) + repeat = 0 + if(repeat > max_repeats) + repeat = max_repeats + else if(href_list["tempo"]) + tempo = sanitize_tempo(tempo + text2num(href_list["tempo"])) + else if(href_list["play"]) + playing = 1 + spawn() + playsong(usr) + else if(href_list["newline"]) + var/newline = html_encode(input("Enter your line: ", instrumentObj.name) as text|null) + if(!newline || !in_range(instrumentObj, usr)) + return + if(lines.len > INSTRUMENT_MAX_LINE_NUMBER) + return + if(lentext(newline) > INSTRUMENT_MAX_LINE_LENGTH) + newline = copytext(newline, 1, INSTRUMENT_MAX_LINE_LENGTH) + lines.Add(newline) + else if(href_list["deleteline"]) + var/num = round(text2num(href_list["deleteline"])) + if(num > lines.len || num < 1) + return + lines.Cut(num, num+1) + else if(href_list["modifyline"]) + var/num = round(text2num(href_list["modifyline"]),1) + var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null) + if(!content || !in_range(instrumentObj, usr)) + return + if(lentext(content) > INSTRUMENT_MAX_LINE_LENGTH) + content = copytext(content, 1, INSTRUMENT_MAX_LINE_LENGTH) + if(num > lines.len || num < 1) + return + lines[num] = content + else if(href_list["stop"]) + playing = 0 + updateDialog(usr) + return + +/datum/song/proc/sanitize_tempo(new_tempo) + new_tempo = abs(new_tempo) + return max(round(new_tempo, world.tick_lag), world.tick_lag) + +// subclass for handheld instruments, like violin +/datum/song/handheld + +/datum/song/handheld/updateDialog(mob/user) + instrumentObj.interact(user) + +/datum/song/handheld/shouldStopPlaying() + if(instrumentObj) + return !isliving(instrumentObj.loc) + else + return 1 + +////////////////////////////////////////////////////////////////////////// /obj/structure/device/piano - name = "space minimoog" + name = "space piano" + desc = "This is a space piano; just like a regular piano, but always in tune! Even if the musician isn't." icon = 'icons/obj/musician.dmi' - icon_state = "minimoog" + icon_state = "piano" anchored = 1 density = 1 var/datum/song/song - var/playing = 0 - var/help = 0 - var/edit = 1 - var/repeat = 0 + +/obj/structure/device/piano/minimoog + name = "space minimoog" + icon_state = "minimoog" + desc = "This is a minimoog; just like a space piano, but more spacey!" /obj/structure/device/piano/New() + ..() + song = new("piano", src) + if(prob(50)) name = "space minimoog" desc = "This is a minimoog, like a space piano, but more spacey!" @@ -27,6 +311,11 @@ desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't." icon_state = "piano" +/obj/structure/device/piano/Destroy() + qdel(song) + song = null + ..() + /obj/structure/device/piano/verb/rotate() set name = "Rotate Piano" set category = "Object" @@ -44,393 +333,22 @@ src.set_dir(turn(src.dir, 90)) return -/obj/structure/device/piano/proc/playnote(var/note as text) - //world << "Note: [note]" - var/soundfile - /*BYOND loads resource files at compile time if they are ''. This means you can't really manipulate them dynamically. - Tried doing it dynamically at first but its more trouble than its worth. Would have saved many lines tho.*/ - switch(note) - if("Cn1") soundfile = 'sound/piano/Cn1.ogg' - if("C#1") soundfile = 'sound/piano/C#1.ogg' - if("Db1") soundfile = 'sound/piano/Db1.ogg' - if("Dn1") soundfile = 'sound/piano/Dn1.ogg' - if("D#1") soundfile = 'sound/piano/D#1.ogg' - if("Eb1") soundfile = 'sound/piano/Eb1.ogg' - if("En1") soundfile = 'sound/piano/En1.ogg' - if("E#1") soundfile = 'sound/piano/E#1.ogg' - if("Fb1") soundfile = 'sound/piano/Fb1.ogg' - if("Fn1") soundfile = 'sound/piano/Fn1.ogg' - if("F#1") soundfile = 'sound/piano/F#1.ogg' - if("Gb1") soundfile = 'sound/piano/Gb1.ogg' - if("Gn1") soundfile = 'sound/piano/Gn1.ogg' - if("G#1") soundfile = 'sound/piano/G#1.ogg' - if("Ab1") soundfile = 'sound/piano/Ab1.ogg' - if("An1") soundfile = 'sound/piano/An1.ogg' - if("A#1") soundfile = 'sound/piano/A#1.ogg' - if("Bb1") soundfile = 'sound/piano/Bb1.ogg' - if("Bn1") soundfile = 'sound/piano/Bn1.ogg' - if("B#1") soundfile = 'sound/piano/B#1.ogg' - if("Cb2") soundfile = 'sound/piano/Cb2.ogg' - if("Cn2") soundfile = 'sound/piano/Cn2.ogg' - if("C#2") soundfile = 'sound/piano/C#2.ogg' - if("Db2") soundfile = 'sound/piano/Db2.ogg' - if("Dn2") soundfile = 'sound/piano/Dn2.ogg' - if("D#2") soundfile = 'sound/piano/D#2.ogg' - if("Eb2") soundfile = 'sound/piano/Eb2.ogg' - if("En2") soundfile = 'sound/piano/En2.ogg' - if("E#2") soundfile = 'sound/piano/E#2.ogg' - if("Fb2") soundfile = 'sound/piano/Fb2.ogg' - if("Fn2") soundfile = 'sound/piano/Fn2.ogg' - if("F#2") soundfile = 'sound/piano/F#2.ogg' - if("Gb2") soundfile = 'sound/piano/Gb2.ogg' - if("Gn2") soundfile = 'sound/piano/Gn2.ogg' - if("G#2") soundfile = 'sound/piano/G#2.ogg' - if("Ab2") soundfile = 'sound/piano/Ab2.ogg' - if("An2") soundfile = 'sound/piano/An2.ogg' - if("A#2") soundfile = 'sound/piano/A#2.ogg' - if("Bb2") soundfile = 'sound/piano/Bb2.ogg' - if("Bn2") soundfile = 'sound/piano/Bn2.ogg' - if("B#2") soundfile = 'sound/piano/B#2.ogg' - if("Cb3") soundfile = 'sound/piano/Cb3.ogg' - if("Cn3") soundfile = 'sound/piano/Cn3.ogg' - if("C#3") soundfile = 'sound/piano/C#3.ogg' - if("Db3") soundfile = 'sound/piano/Db3.ogg' - if("Dn3") soundfile = 'sound/piano/Dn3.ogg' - if("D#3") soundfile = 'sound/piano/D#3.ogg' - if("Eb3") soundfile = 'sound/piano/Eb3.ogg' - if("En3") soundfile = 'sound/piano/En3.ogg' - if("E#3") soundfile = 'sound/piano/E#3.ogg' - if("Fb3") soundfile = 'sound/piano/Fb3.ogg' - if("Fn3") soundfile = 'sound/piano/Fn3.ogg' - if("F#3") soundfile = 'sound/piano/F#3.ogg' - if("Gb3") soundfile = 'sound/piano/Gb3.ogg' - if("Gn3") soundfile = 'sound/piano/Gn3.ogg' - if("G#3") soundfile = 'sound/piano/G#3.ogg' - if("Ab3") soundfile = 'sound/piano/Ab3.ogg' - if("An3") soundfile = 'sound/piano/An3.ogg' - if("A#3") soundfile = 'sound/piano/A#3.ogg' - if("Bb3") soundfile = 'sound/piano/Bb3.ogg' - if("Bn3") soundfile = 'sound/piano/Bn3.ogg' - if("B#3") soundfile = 'sound/piano/B#3.ogg' - if("Cb4") soundfile = 'sound/piano/Cb4.ogg' - if("Cn4") soundfile = 'sound/piano/Cn4.ogg' - if("C#4") soundfile = 'sound/piano/C#4.ogg' - if("Db4") soundfile = 'sound/piano/Db4.ogg' - if("Dn4") soundfile = 'sound/piano/Dn4.ogg' - if("D#4") soundfile = 'sound/piano/D#4.ogg' - if("Eb4") soundfile = 'sound/piano/Eb4.ogg' - if("En4") soundfile = 'sound/piano/En4.ogg' - if("E#4") soundfile = 'sound/piano/E#4.ogg' - if("Fb4") soundfile = 'sound/piano/Fb4.ogg' - if("Fn4") soundfile = 'sound/piano/Fn4.ogg' - if("F#4") soundfile = 'sound/piano/F#4.ogg' - if("Gb4") soundfile = 'sound/piano/Gb4.ogg' - if("Gn4") soundfile = 'sound/piano/Gn4.ogg' - if("G#4") soundfile = 'sound/piano/G#4.ogg' - if("Ab4") soundfile = 'sound/piano/Ab4.ogg' - if("An4") soundfile = 'sound/piano/An4.ogg' - if("A#4") soundfile = 'sound/piano/A#4.ogg' - if("Bb4") soundfile = 'sound/piano/Bb4.ogg' - if("Bn4") soundfile = 'sound/piano/Bn4.ogg' - if("B#4") soundfile = 'sound/piano/B#4.ogg' - if("Cb5") soundfile = 'sound/piano/Cb5.ogg' - if("Cn5") soundfile = 'sound/piano/Cn5.ogg' - if("C#5") soundfile = 'sound/piano/C#5.ogg' - if("Db5") soundfile = 'sound/piano/Db5.ogg' - if("Dn5") soundfile = 'sound/piano/Dn5.ogg' - if("D#5") soundfile = 'sound/piano/D#5.ogg' - if("Eb5") soundfile = 'sound/piano/Eb5.ogg' - if("En5") soundfile = 'sound/piano/En5.ogg' - if("E#5") soundfile = 'sound/piano/E#5.ogg' - if("Fb5") soundfile = 'sound/piano/Fb5.ogg' - if("Fn5") soundfile = 'sound/piano/Fn5.ogg' - if("F#5") soundfile = 'sound/piano/F#5.ogg' - if("Gb5") soundfile = 'sound/piano/Gb5.ogg' - if("Gn5") soundfile = 'sound/piano/Gn5.ogg' - if("G#5") soundfile = 'sound/piano/G#5.ogg' - if("Ab5") soundfile = 'sound/piano/Ab5.ogg' - if("An5") soundfile = 'sound/piano/An5.ogg' - if("A#5") soundfile = 'sound/piano/A#5.ogg' - if("Bb5") soundfile = 'sound/piano/Bb5.ogg' - if("Bn5") soundfile = 'sound/piano/Bn5.ogg' - if("B#5") soundfile = 'sound/piano/B#5.ogg' - if("Cb6") soundfile = 'sound/piano/Cb6.ogg' - if("Cn6") soundfile = 'sound/piano/Cn6.ogg' - if("C#6") soundfile = 'sound/piano/C#6.ogg' - if("Db6") soundfile = 'sound/piano/Db6.ogg' - if("Dn6") soundfile = 'sound/piano/Dn6.ogg' - if("D#6") soundfile = 'sound/piano/D#6.ogg' - if("Eb6") soundfile = 'sound/piano/Eb6.ogg' - if("En6") soundfile = 'sound/piano/En6.ogg' - if("E#6") soundfile = 'sound/piano/E#6.ogg' - if("Fb6") soundfile = 'sound/piano/Fb6.ogg' - if("Fn6") soundfile = 'sound/piano/Fn6.ogg' - if("F#6") soundfile = 'sound/piano/F#6.ogg' - if("Gb6") soundfile = 'sound/piano/Gb6.ogg' - if("Gn6") soundfile = 'sound/piano/Gn6.ogg' - if("G#6") soundfile = 'sound/piano/G#6.ogg' - if("Ab6") soundfile = 'sound/piano/Ab6.ogg' - if("An6") soundfile = 'sound/piano/An6.ogg' - if("A#6") soundfile = 'sound/piano/A#6.ogg' - if("Bb6") soundfile = 'sound/piano/Bb6.ogg' - if("Bn6") soundfile = 'sound/piano/Bn6.ogg' - if("B#6") soundfile = 'sound/piano/B#6.ogg' - if("Cb7") soundfile = 'sound/piano/Cb7.ogg' - if("Cn7") soundfile = 'sound/piano/Cn7.ogg' - if("C#7") soundfile = 'sound/piano/C#7.ogg' - if("Db7") soundfile = 'sound/piano/Db7.ogg' - if("Dn7") soundfile = 'sound/piano/Dn7.ogg' - if("D#7") soundfile = 'sound/piano/D#7.ogg' - if("Eb7") soundfile = 'sound/piano/Eb7.ogg' - if("En7") soundfile = 'sound/piano/En7.ogg' - if("E#7") soundfile = 'sound/piano/E#7.ogg' - if("Fb7") soundfile = 'sound/piano/Fb7.ogg' - if("Fn7") soundfile = 'sound/piano/Fn7.ogg' - if("F#7") soundfile = 'sound/piano/F#7.ogg' - if("Gb7") soundfile = 'sound/piano/Gb7.ogg' - if("Gn7") soundfile = 'sound/piano/Gn7.ogg' - if("G#7") soundfile = 'sound/piano/G#7.ogg' - if("Ab7") soundfile = 'sound/piano/Ab7.ogg' - if("An7") soundfile = 'sound/piano/An7.ogg' - if("A#7") soundfile = 'sound/piano/A#7.ogg' - if("Bb7") soundfile = 'sound/piano/Bb7.ogg' - if("Bn7") soundfile = 'sound/piano/Bn7.ogg' - if("B#7") soundfile = 'sound/piano/B#7.ogg' - if("Cb8") soundfile = 'sound/piano/Cb8.ogg' - if("Cn8") soundfile = 'sound/piano/Cn8.ogg' - if("C#8") soundfile = 'sound/piano/C#8.ogg' - if("Db8") soundfile = 'sound/piano/Db8.ogg' - if("Dn8") soundfile = 'sound/piano/Dn8.ogg' - if("D#8") soundfile = 'sound/piano/D#8.ogg' - if("Eb8") soundfile = 'sound/piano/Eb8.ogg' - if("En8") soundfile = 'sound/piano/En8.ogg' - if("E#8") soundfile = 'sound/piano/E#8.ogg' - if("Fb8") soundfile = 'sound/piano/Fb8.ogg' - if("Fn8") soundfile = 'sound/piano/Fn8.ogg' - if("F#8") soundfile = 'sound/piano/F#8.ogg' - if("Gb8") soundfile = 'sound/piano/Gb8.ogg' - if("Gn8") soundfile = 'sound/piano/Gn8.ogg' - if("G#8") soundfile = 'sound/piano/G#8.ogg' - if("Ab8") soundfile = 'sound/piano/Ab8.ogg' - if("An8") soundfile = 'sound/piano/An8.ogg' - if("A#8") soundfile = 'sound/piano/A#8.ogg' - if("Bb8") soundfile = 'sound/piano/Bb8.ogg' - if("Bn8") soundfile = 'sound/piano/Bn8.ogg' - if("B#8") soundfile = 'sound/piano/B#8.ogg' - if("Cb9") soundfile = 'sound/piano/Cb9.ogg' - if("Cn9") soundfile = 'sound/piano/Cn9.ogg' - else return +/obj/structure/device/piano/attack_hand(mob/user) + if(!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return 1 + interact(user) - //hearers(15, src) << sound(soundfile) - var/turf/source = get_turf(src) - for(var/mob/M in hearers(15, source)) - M.playsound_local(source, file(soundfile), 100, falloff = 5) - - -/obj/structure/device/piano/proc/playsong() - do - var/cur_oct[7] - var/cur_acc[7] - for(var/i = 1 to 7) - cur_oct[i] = "3" - cur_acc[i] = "n" - - for(var/line in song.lines) - //world << line - for(var/beat in splittext(lowertext(line), ",")) - //world << "beat: [beat]" - var/list/notes = splittext(beat, "/") - for(var/note in splittext(notes[1], "-")) - //world << "note: [note]" - if(!playing || !anchored)//If the piano is playing, or is loose - playing = 0 - return - if(lentext(note) == 0) - continue - //world << "Parse: [copytext(note,1,2)]" - var/cur_note = text2ascii(note) - 96 - if(cur_note < 1 || cur_note > 7) - continue - for(var/i=2 to lentext(note)) - var/ni = copytext(note,i,i+1) - if(!text2num(ni)) - if(ni == "#" || ni == "b" || ni == "n") - cur_acc[cur_note] = ni - else if(ni == "s") - cur_acc[cur_note] = "#" // so shift is never required - else - cur_oct[cur_note] = ni - playnote(uppertext(copytext(note,1,2)) + cur_acc[cur_note] + cur_oct[cur_note]) - if(notes.len >= 2 && text2num(notes[2])) - sleep(song.tempo / text2num(notes[2])) - else - sleep(song.tempo) - if(repeat > 0) - repeat-- //Infinite loops are baaaad. - while(repeat > 0) - playing = 0 - updateUsrDialog() - -/obj/structure/device/piano/attack_hand(var/mob/user as mob) - if(!anchored) +/obj/structure/device/piano/interact(mob/user) + if(!user || !anchored) return - usr.machine = src - var/dat = "Piano" - - if(song) - if(song.lines.len > 0 && !(playing)) - dat += "Play Song

" - dat += "Repeat Song: [repeat] times.

" - if(playing) - dat += "Stop Playing
" - dat += "Repeats left: [repeat].

" - if(!edit) - dat += "Show Editor

" - else - dat += "Hide Editor
" - dat += "Start a New Song
" - dat += "Import a Song

" - if(song) - var/calctempo = (10/song.tempo)*60 - dat += "Tempo : -- [calctempo] BPM ++

" - var/linecount = 0 - for(var/line in song.lines) - linecount += 1 - dat += "Line [linecount]: [line] Delete Line Modify Line
" - dat += "Add Line

" - if(help) - dat += "Hide Help
" - dat += {" - Lines are a series of chords, separated by commas (,), each with notes seperated by hyphens (-).
- Every note in a chord will play together, with chord timed by the tempo.
-
- Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.
- By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.
- Example: C,D,E,F,G,A,B will play a C major scale.
- After a note has an accidental placed, it will be remembered: C,C4,C,C3 is C3,C4,C4,C3
- Chords can be played simply by seperating each note with a hyphon: A-C#,Cn-E,E-G#,Gn-B
- A pause may be denoted by an empty chord: C,E,,C,G
- To make a chord be a different time, end it with /x, where the chord length will be length
- defined by tempo / x: C,G/2,E/4
- Combined, an example is: E-E4/4,/2,G#/8,B/8,E3-E4/4 -
- Lines may be up to 50 characters.
- A song may only contain up to 50 lines.
- "} - else - dat += "Show Help
" - dat += "" - user << browse(dat, "window=piano;size=700x300") - onclose(user, "piano") - -/obj/structure/device/piano/Topic(href, href_list) - - if(!in_range(src, usr) || issilicon(usr) || !anchored || !usr.canmove || usr.restrained()) - usr << browse(null, "window=piano;size=700x300") - onclose(usr, "piano") - return - - if(href_list["newsong"]) - song = new() - else if(song) - if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops. - if(playing) return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing. - var/tempnum = input("How many times do you want to repeat this piece? (max:10)") as num|null - if(tempnum > 10) - tempnum = 10 - if(tempnum < 0) - tempnum = 0 - repeat = round(tempnum) - - else if(href_list["tempo"]) - song.tempo += round(text2num(href_list["tempo"])) - if(song.tempo < 1) - song.tempo = 1 - - else if(href_list["play"]) - if(song) - playing = 1 - spawn() playsong() - - else if(href_list["newline"]) - var/newline = html_encode(input("Enter your line: ", "Piano") as text|null) - if(!newline) - return - if(song.lines.len > 50) - return - if(lentext(newline) > 50) - newline = copytext(newline, 1, 50) - song.lines.Add(newline) - - else if(href_list["deleteline"]) - var/num = round(text2num(href_list["deleteline"])) - if(num > song.lines.len || num < 1) - return - song.lines.Cut(num, num+1) - - else if(href_list["modifyline"]) - var/num = round(text2num(href_list["modifyline"]),1) - var/content = html_encode(input("Enter your line: ", "Piano", song.lines[num]) as text|null) - if(!content) - return - if(lentext(content) > 50) - content = copytext(content, 1, 50) - if(num > song.lines.len || num < 1) - return - song.lines[num] = content - - else if(href_list["stop"]) - playing = 0 - - else if(href_list["help"]) - help = text2num(href_list["help"]) - 1 - - else if(href_list["edit"]) - edit = text2num(href_list["edit"]) - 1 - - else if(href_list["import"]) - var/t = "" - do - t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", src.name), t) as message) - if (!in_range(src, usr)) - return - - if(lentext(t) >= 3072) - var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") - if(cont == "no") - break - while(lentext(t) > 3072) - - //split into lines - spawn() - var/list/lines = splittext(t, "\n") - var/tempo = 5 - if(copytext(lines[1],1,6) == "BPM: ") - tempo = 600 / text2num(copytext(lines[1],6)) - lines.Cut(1,2) - if(lines.len > 50) - usr << "Too many lines!" - lines.Cut(51) - var/linenum = 1 - for(var/l in lines) - if(lentext(l) > 50) - usr << "Line [linenum] too long!" - lines.Remove(l) - else - linenum++ - song = new() - song.lines = lines - song.tempo = tempo - updateUsrDialog() - - add_fingerprint(usr) - updateUsrDialog() - return + user.set_machine(src) + song.interact(user) /obj/structure/device/piano/attackby(obj/item/O as obj, mob/user as mob) - if (istype(O, /obj/item/weapon/wrench)) - if (anchored) + if(O.is_wrench()) + if(anchored) playsound(src.loc, O.usesound, 50, 1) user << "You begin to loosen \the [src]'s casters..." if (do_after(user, 40 * O.toolspeed)) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 0a26e568ec..64ef2f926b 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -41,7 +41,7 @@ user << "You pin the paper to the noticeboard." else user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached." - if(istype(O, /obj/item/weapon/wrench)) + if(O.is_wrench()) user << "You start to unwrench the noticeboard." playsound(src.loc, O.usesound, 50, 1) if(do_after(user, 15 * O.toolspeed)) diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index cab9822323..0340356e37 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -16,7 +16,7 @@ ) /obj/structure/plasticflaps/attackby(obj/item/P, mob/user) - if(istype(P, /obj/item/weapon/wirecutters)) + if(P.is_wirecutter()) playsound(src, P.usesound, 50, 1) user << "You start to cut the plastic flaps." if(do_after(user, 10 * P.toolspeed)) diff --git a/code/game/objects/structures/props/nest.dm b/code/game/objects/structures/props/nest.dm new file mode 100644 index 0000000000..b6a4677f12 --- /dev/null +++ b/code/game/objects/structures/props/nest.dm @@ -0,0 +1,67 @@ +/obj/structure/prop/nest + name = "diyaab den" + desc = "A den of some creature." + icon = 'icons/obj/structures.dmi' + icon_state = "bonfire" + density = TRUE + anchored = TRUE + interaction_message = "You feel like you shouldn't be sticking your nose into a wild animal's den." + + var/disturbance_spawn_chance = 20 + var/last_spawn + var/spawn_delay = 150 + var/randomize_spawning = FALSE + var/creature_types = list(/mob/living/simple_animal/retaliate/diyaab) + var/list/den_mobs + var/den_faction //The faction of any spawned creatures. + var/max_creatures = 3 //Maximum number of living creatures this nest can have at one time. + + var/tally = 0 //The counter referenced against total_creature_max, or just to see how many mobs it has spawned. + var/total_creature_max //If set, it can spawn this many creatures, total, ever. + +/obj/structure/prop/nest/initialize() + ..() + den_mobs = list() + processing_objects |= src + last_spawn = world.time + if(randomize_spawning) //Not the biggest shift in spawntime, but it's here. + var/delayshift_clamp = spawn_delay / 10 + var/delayshift = rand(delayshift_clamp, -1 * delayshift_clamp) + spawn_delay += delayshift + +/obj/structure/prop/nest/Destroy() + den_mobs = null + processing_objects -= src + ..() + +/obj/structure/prop/nest/attack_hand(mob/living/user) // Used to tell the player that this isn't useful for anything. + ..() + if(user && prob(disturbance_spawn_chance)) + spawn_creature(get_turf(src)) + +/obj/structure/prop/nest/process() + update_creatures() + if(world.time > last_spawn + spawn_delay) + spawn_creature(get_turf(src)) + +/obj/structure/prop/nest/proc/spawn_creature(var/turf/spawnpoint) + update_creatures() //Paranoia. + if(total_creature_max && tally >= total_creature_max) + return + if(istype(spawnpoint) && den_mobs.len < max_creatures) + last_spawn = world.time + var/spawn_choice = pick(creature_types) + var/mob/living/L = new spawn_choice(spawnpoint) + if(den_faction) + L.faction = den_faction + visible_message("\The [L] crawls out of \the [src].") + den_mobs += L + tally++ + +/obj/structure/prop/nest/proc/remove_creature(var/mob/target) + den_mobs -= target + +/obj/structure/prop/nest/proc/update_creatures() + for(var/mob/living/L in den_mobs) + if(L.stat == 2) + remove_creature(L) diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index e67750b8f3..18e45af166 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -198,7 +198,7 @@ /obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob) // Dismantle - if(istype(W, /obj/item/weapon/wrench) && !anchored) + if(W.is_wrench() && !anchored) playsound(src.loc, W.usesound, 50, 1) if(do_after(user, 20, src)) user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") @@ -217,7 +217,7 @@ return // Install - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) user.visible_message(anchored ? "\The [user] begins unscrewing \the [src]." : "\The [user] begins fasten \the [src]." ) playsound(loc, W.usesound, 75, 1) if(do_after(user, 10, src)) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 195ab0ce91..bd868bcc91 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -22,9 +22,9 @@ return /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction - if(istype(tool, /obj/item/weapon/screwdriver) && !istype(src, /obj/structure/sign/double)) + if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/double)) playsound(src, tool.usesound, 50, 1) - user << "You unfasten the sign with your [tool]." + to_chat(user, "You unfasten the sign with your [tool].") var/obj/item/sign/S = new(src.loc) S.name = name S.desc = desc @@ -43,7 +43,7 @@ var/sign_state = "" /obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(istype(tool, /obj/item/weapon/screwdriver) && isturf(user.loc)) + if(tool.is_screwdriver() && isturf(user.loc)) var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") if(direction == "Cancel") return var/obj/structure/sign/S = new(user.loc) @@ -60,7 +60,7 @@ S.name = name S.desc = desc S.icon_state = sign_state - user << "You fasten \the [S] with your [tool]." + to_chat(user, "You fasten \the [S] with your [tool].") qdel(src) else ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 5079795489..c2f29d8afd 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -90,7 +90,7 @@ return /obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 50, 1) dismantle() qdel(src) @@ -121,7 +121,7 @@ add_padding(padding_type) return - else if (istype(W, /obj/item/weapon/wirecutters)) + else if(W.is_wirecutter()) if(!padding_material) to_chat(user, "\The [src] has no padding to remove.") return @@ -214,7 +214,7 @@ return /obj/structure/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wrench() || istype(W,/obj/item/stack) || W.is_wirecutter()) return else if(istype(W,/obj/item/roller_holder)) if(has_buckled_mobs()) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 8d391f14ff..3e76682b19 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -135,7 +135,7 @@ return /obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + if(istype(W,/obj/item/stack) || W.is_wirecutter()) return ..() @@ -199,7 +199,7 @@ return /obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + if(istype(W,/obj/item/stack) || W.is_wirecutter()) return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index 33ef80b4bd..d86c9d4606 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -108,7 +108,7 @@ var/global/list/stool_cache = list() //haha stool qdel(src) /obj/item/weapon/stool/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 50, 1) dismantle() qdel(src) @@ -138,7 +138,7 @@ var/global/list/stool_cache = list() //haha stool user << "You add padding to \the [src]." add_padding(padding_type) return - else if (istype(W, /obj/item/weapon/wirecutters)) + else if (W.is_wirecutter()) if(!padding_material) user << "\The [src] has no padding to remove." return diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index bb1a62e40b..e5eba3f20a 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -23,7 +23,7 @@ L.set_dir(dir) /obj/structure/bed/chair/wheelchair/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wrench() || W.is_wirecutter() || istype(W,/obj/item/stack)) return ..() diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index c13ae10e64..d9d31dfb55 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -74,7 +74,7 @@ user << "[src] is full." updateUsrDialog() return - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) if(anchored) user << "You lean down and unwrench [src]." anchored = 0 diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 98e0f1a41e..ff95dd44d8 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -44,7 +44,7 @@ icon_state = "toilet[open][cistern]" /obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob) - if(istype(I, /obj/item/weapon/crowbar)) + if(I.is_crowbar()) to_chat(user, "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].") playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) if(do_after(user, 30)) @@ -160,7 +160,7 @@ /obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob) if(I.type == /obj/item/device/analyzer) to_chat(user, "The water temperature seems to be [watertemp].") - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) var/newtemp = input(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve") in temperature_settings to_chat(user, "You begin to adjust the temperature valve with \the [I].") playsound(src.loc, I.usesound, 50, 1) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 1d1be70694..47f08399f0 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -108,7 +108,7 @@ obj/structure/windoor_assembly/Destroy() return //Wrenching an unsecure assembly anchors it in place. Step 4 complete - if(istype(W, /obj/item/weapon/wrench) && !anchored) + if(W.is_wrench() && !anchored) playsound(src, W.usesound, 100, 1) user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.") @@ -119,7 +119,7 @@ obj/structure/windoor_assembly/Destroy() step = 0 //Unwrenching an unsecure assembly un-anchors it. Step 4 undone - else if(istype(W, /obj/item/weapon/wrench) && anchored) + else if(W.is_wrench() && anchored) playsound(src, W.usesound, 100, 1) user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.") @@ -145,7 +145,7 @@ obj/structure/windoor_assembly/Destroy() if("02") //Removing wire from the assembly. Step 5 undone. - if(istype(W, /obj/item/weapon/wirecutters) && !src.electronics) + if(W.is_wirecutter() && !src.electronics) playsound(src, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") @@ -174,7 +174,7 @@ obj/structure/windoor_assembly/Destroy() W.loc = src.loc //Screwdriver to remove airlock electronics. Step 6 undone. - else if(istype(W, /obj/item/weapon/screwdriver) && src.electronics) + else if(W.is_screwdriver() && src.electronics) playsound(src, W.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.") @@ -187,7 +187,7 @@ obj/structure/windoor_assembly/Destroy() ae.loc = src.loc //Crowbar to complete the assembly, Step 7 complete. - else if(istype(W, /obj/item/weapon/crowbar)) + else if(W.is_crowbar()) if(!src.electronics) to_chat(usr,"The assembly is missing electronics.") return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 3186e26e0e..5ada656156 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -262,7 +262,7 @@ if(W.flags & NOBLUDGEON) return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(reinf && state >= 1) state = 3 - state update_nearby_icons() @@ -280,11 +280,11 @@ update_verbs() playsound(src, W.usesound, 75, 1) user << (anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") - else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) + else if(W.is_crowbar() && reinf && state <= 1) state = 1 - state playsound(src, W.usesound, 75, 1) user << (state ? "You have pried the window into the frame." : "You have pried the window out of the frame.") - else if(istype(W, /obj/item/weapon/wrench) && !anchored && (!state || !reinf)) + else if(W.is_wrench() && !anchored && (!state || !reinf)) if(!glasstype) user << "You're not sure how to dismantle \the [src] properly." else @@ -294,7 +294,7 @@ if(is_fulltile()) mats.amount = 4 qdel(src) - else if(iscoil(W) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized)) + else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized)) var/obj/item/stack/cable_coil/C = W if (C.use(1)) playsound(src.loc, 'sound/effects/sparks1.ogg', 75, 1) @@ -572,7 +572,7 @@ maxhealth = 80 /obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob) - if(ismultitool(W) && !anchored) // Only allow programming if unanchored! + if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored! var/obj/item/device/multitool/MT = W // First check if they have a windowtint button buffered if(istype(MT.connectable, /obj/machinery/button/windowtint)) @@ -632,7 +632,7 @@ icon_state = "light[active]" /obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob) - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/obj/item/device/multitool/MT = W if(!id) // If no ID is set yet (newly built button?) let them select an ID for first-time use! diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index c9a4babd9e..6cb93ab530 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -34,11 +34,9 @@ continue if(SA == target) // We (presumably) already hit the target before cleave() was called. orange() should prevent this but just to be safe... continue - if(user.faction == SA.faction) // Avoid friendly fire. - continue if(!SA.Adjacent(user) || !SA.Adjacent(target)) // Cleaving only hits mobs near the target mob and user. continue - if(resolve_attackby(SA, user)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true. + if(resolve_attackby(SA, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true. hit_mobs++ cleave_visual(user, target) diff --git a/code/game/sound.dm b/code/game/sound.dm index 12d0e5ed8c..99a6a5efe8 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -132,6 +132,9 @@ if ("mechstep") soundin = pick('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg') if ("geiger") soundin = pick('sound/items/geiger1.ogg', 'sound/items/geiger2.ogg', 'sound/items/geiger3.ogg', 'sound/items/geiger4.ogg', 'sound/items/geiger5.ogg') if ("geiger_weak") soundin = pick('sound/items/geiger_weak1.ogg', 'sound/items/geiger_weak2.ogg', 'sound/items/geiger_weak3.ogg', 'sound/items/geiger_weak4.ogg') + if ("thunder") soundin = pick('sound/effects/thunder/thunder1.ogg', 'sound/effects/thunder/thunder2.ogg', 'sound/effects/thunder/thunder3.ogg', 'sound/effects/thunder/thunder4.ogg', + 'sound/effects/thunder/thunder5.ogg', 'sound/effects/thunder/thunder6.ogg', 'sound/effects/thunder/thunder7.ogg', 'sound/effects/thunder/thunder8.ogg', 'sound/effects/thunder/thunder9.ogg', + 'sound/effects/thunder/thunder10.ogg') return soundin //Are these even used? diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 57d51dbaea..83d2444f96 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -115,7 +115,7 @@ to_chat(user, "You need more welding fuel to complete this task.") /turf/simulated/floor/proc/try_deconstruct_tile(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) if(broken || burnt) to_chat(user, "You remove the broken [flooring.descriptor].") make_plating() @@ -129,14 +129,14 @@ return 0 playsound(src, W.usesound, 80, 1) return 1 - else if(istype(W, /obj/item/weapon/screwdriver) && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) + else if(W.is_screwdriver() && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) if(broken || burnt) return 0 to_chat(user, "You unscrew and remove the [flooring.descriptor].") make_plating(1) playsound(src, W.usesound, 80, 1) return 1 - else if(istype(W, /obj/item/weapon/wrench) && (flooring.flags & TURF_REMOVE_WRENCH)) + else if(W.is_wrench() && (flooring.flags & TURF_REMOVE_WRENCH)) to_chat(user, "You unwrench and remove the [flooring.descriptor].") make_plating(1) playsound(src, W.usesound, 80, 1) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 05ff395716..fc373c0577 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -14,6 +14,8 @@ var/list/turf_edge_cache = list() icon_state = null edge_blending_priority = 1 outdoors = TRUE // This variable is used for weather effects. + can_dirty = FALSE // Looks hideous with dirt on it. + // When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works. var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 73a56e8949..02c6d0d8dc 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -150,6 +150,11 @@ if(is_hot(W)) burn(is_hot(W)) + if(istype(W, /obj/item/device/electronic_assembly/wallmount)) + var/obj/item/device/electronic_assembly/wallmount/IC = W + IC.mount_assembly(src, user) + return + if(istype(W, /obj/item/stack/tile/roofing)) var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather var/turf/T = GetAbove(src) @@ -284,7 +289,7 @@ else switch(construction_stage) if(6) - if (istype(W, /obj/item/weapon/wirecutters)) + if (W.is_wirecutter()) playsound(src, W.usesound, 100, 1) construction_stage = 5 user.update_examine_panel(src) @@ -292,7 +297,7 @@ update_icon() return if(5) - if (istype(W, /obj/item/weapon/screwdriver)) + if (W.is_screwdriver()) to_chat(user, "You begin removing the support lines.") playsound(src, W.usesound, 100, 1) if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 5) @@ -302,7 +307,7 @@ update_icon() to_chat(user, "You unscrew the support lines.") return - else if (istype(W, /obj/item/weapon/wirecutters)) + else if (W.is_wirecutter()) construction_stage = 6 user.update_examine_panel(src) to_chat(user, "You mend the outer grille.") @@ -332,7 +337,7 @@ update_icon() to_chat(user, "You press firmly on the cover, dislodging it.") return - else if (istype(W, /obj/item/weapon/screwdriver)) + else if (W.is_screwdriver()) to_chat(user, "You begin screwing down the support lines.") playsound(src, W.usesound, 100, 1) if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) @@ -343,7 +348,7 @@ to_chat(user, "You screw down the support lines.") return if(3) - if (istype(W, /obj/item/weapon/crowbar)) + if (W.is_crowbar()) to_chat(user, "You struggle to pry off the cover.") playsound(src, W.usesound, 100, 1) if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 3) @@ -354,7 +359,7 @@ to_chat(user, "You pry off the cover.") return if(2) - if (istype(W, /obj/item/weapon/wrench)) + if (W.is_wrench()) to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") playsound(src, W.usesound, 100, 1) if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 2) @@ -386,7 +391,7 @@ to_chat(user, "The slice through the support rods.") return if(0) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) to_chat(user, "You struggle to pry off the outer sheath.") playsound(src, W.usesound, 100, 1) if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index bef279fc77..9048bb5a49 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -23,7 +23,7 @@ /turf/simulated/wall/cult icon_state = "cult" /turf/simulated/wall/cult/New(var/newloc) - ..(newloc,"cult","cult2") + ..(newloc,"cult","cult2","cult") /turf/unsimulated/wall/cult name = "cult wall" desc = "Hideous images dance beneath the surface." diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index b7f4299f02..6539348e5d 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -9,6 +9,8 @@ edge_blending_priority = -1 movement_cost = 4 outdoors = TRUE + can_dirty = FALSE // It's water + var/depth = 1 // Higher numbers indicates deeper water. /turf/simulated/floor/water/initialize() diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 3b5a797c0a..decd0f2eb3 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -26,7 +26,6 @@ if (!N) return - // This makes sure that turfs are not changed to space when one side is part of a zone if(N == /turf/space) var/turf/below = GetBelow(src) if(istype(below) && (air_master.has_valid_zone(below) || air_master.has_valid_zone(src))) diff --git a/code/global.dm b/code/global.dm index 4d66286679..0dff5cd610 100644 --- a/code/global.dm +++ b/code/global.dm @@ -109,26 +109,12 @@ var/gravity_is_on = 1 var/join_motd = null -var/datum/nanomanager/nanomanager = new() // NanoManager, the manager for Nano UIs. var/datum/event_manager/event_manager = new() // Event Manager, the manager for events. var/datum/game_master/game_master = new() // Game Master, an AI for choosing events. var/datum/metric/metric = new() // Metric datum, used to keep track of the round. var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to. -// MySQL configuration -var/sqladdress = "localhost" -var/sqlport = "3306" -var/sqldb = "tgstation" -var/sqllogin = "root" -var/sqlpass = "" - -// Feedback gathering sql connection -var/sqlfdbkdb = "test" -var/sqlfdbklogin = "root" -var/sqlfdbkpass = "" -var/sqllogging = 0 // Should we log deaths, population stats, etc.? - // Forum MySQL configuration. (for use with forum account/key authentication) // These are all default values that will load should the forumdbconfig.txt file fail to read for whatever reason. var/forumsqladdress = "localhost" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index fc3fba6c7c..9f4ddbe3ad 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -136,7 +136,8 @@ var/list/admin_verbs_fun = list( /datum/admins/proc/call_supply_drop, /datum/admins/proc/call_drop_pod, /client/proc/smite_vr, //VOREStation Add, - /client/proc/smite + /client/proc/smite, + /client/proc/admin_lightning_strike ) var/list/admin_verbs_spawn = list( diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c2167b4b4a..482c9d8360 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -641,6 +641,7 @@ var/datum/weather/new_weather = input(usr, "What weather do you want to change to?", "Change Weather") as null|anything in planet.weather_holder.allowed_weather_types if(new_weather) planet.weather_holder.change_weather(new_weather) + planet.weather_holder.rebuild_forecast() var/log = "[key_name(src)] changed [planet.name]'s weather to [new_weather]." message_admins(log) log_admin(log) diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm new file mode 100644 index 0000000000..16cb6b06dd --- /dev/null +++ b/code/modules/admin/verbs/lightning_strike.dm @@ -0,0 +1,115 @@ +/client/proc/admin_lightning_strike() + set name = "Lightning Strike" + set desc = "Causes lightning to strike on your tile. This will hurt things on or nearby it severely." + set category = "Fun" + + if(!check_rights(R_FUN)) + return + + var/result = alert(src, "Really strike your tile with lightning?", "Confirm Badmin" , "No", "Yes (Cosmetic)", "Yes (Real)") + + if(result == "No") + return + var/fake_lightning = result == "Yes (Cosmetic)" + + lightning_strike(get_turf(usr), fake_lightning) + log_and_message_admins("[key_name(src)] has caused [fake_lightning ? "cosmetic":"harmful"] lightning to strike at their position ([src.mob.x], [src.mob.y], [src.mob.z]). \ + (JMP)") + +#define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from. +#define LIGHTNING_ZAP_RANGE 3 // How far the tesla effect zaps, as well as the bad effects from a direct strike. +#define LIGHTNING_POWER 20000 // How much 'zap' is in a strike, used for tesla_zap(). + +// The real lightning proc. +// This is global until I can figure out a better place for it. +// T is the turf that is being struck. If cosmetic is true, the lightning won't actually hurt anything. +/proc/lightning_strike(turf/T, cosmetic = FALSE) + // First, visuals. + + // Do a lightning flash for the whole planet, if the turf belongs to a planet. + var/datum/planet/P = null + P = SSplanets.z_to_planet[T.z] + if(P) + var/datum/weather_holder/holder = P.weather_holder + flick("lightning_flash", holder.special_visuals) + + // Before we do the other visuals, we need to see if something is going to hijack our intended target. + var/obj/machinery/power/grounding_rod/ground = null // Most of the bad effects of lightning will get negated if a grounding rod is nearby. + var/obj/machinery/power/tesla_coil/coil = null // However a tesla coil has higher priority and the strike will bounce. + + for(var/obj/machinery/power/thing in range(LIGHTNING_REDIRECT_RANGE, T)) + if(istype(thing, /obj/machinery/power/tesla_coil)) + var/turf/simulated/coil_turf = get_turf(thing) + if(istype(coil_turf) && thing.anchored && coil_turf.outdoors) + coil = thing + break + + if(istype(thing, /obj/machinery/power/grounding_rod)) + var/turf/simulated/rod_turf = get_turf(thing) + if(istype(rod_turf) && thing.anchored && rod_turf.outdoors) + ground = thing + + if(coil) // Coil gets highest priority. + T = coil.loc + else if(ground) + T = ground.loc + + // Now make the lightning strike sprite. It will fade and delete itself in a second. + new /obj/effect/temporary_effect/lightning_strike(T) + + // For those close up. + playsound(T, 'sound/effects/lightningbolt.ogg', 100, 1) + + // And for those far away. If the strike happens on a planet, everyone on the planet will hear it. + // Otherwise only those on the current z-level will hear it. + var/sound = get_sfx("thunder") + for(var/mob/M in player_list) + if((P && M.z in P.expected_z_levels) || M.z == T.z) + M.playsound_local(get_turf(M), soundin = sound, vol = 70, vary = FALSE, is_global = TRUE) + + if(cosmetic) // Everything beyond here involves potentially damaging things. If we don't want to do that, stop now. + return + + if(ground) // All is well. + ground.tesla_act(LIGHTNING_POWER, FALSE) + return + + else if(coil) // Otherwise lets bounce off the tesla coil. + coil.tesla_act(LIGHTNING_POWER, TRUE) + + else // Striking the turf directly. + tesla_zap(T, zap_range = LIGHTNING_ZAP_RANGE, power = LIGHTNING_POWER, explosive = FALSE, stun_mobs = TRUE) + + // Some extra effects. + // Some apply to those within zap range, others if they were a bit farther away. + for(var/mob/living/L in view(5, T)) + if(get_dist(L, T) <= LIGHTNING_ZAP_RANGE) // They probably got zapped. + // The actual damage/electrocution is handled by tesla_zap(). + L.Paralyse(5) + L.stuttering += 20 + L.make_jittery(20) + L.emp_act(1) + to_chat(L, span("critical", "You've been struck by lightning!")) + + // If a non-player simplemob was struck, inflict huge damage. + // If the damage is fatal, the SA is turned to ash. + if(istype(L, /mob/living/simple_animal) && !L.key) + var/mob/living/simple_animal/SA = L + SA.adjustFireLoss(200) + SA.updatehealth() + if(SA.health <= 0) // Might be best to check/give simple_mobs siemens when this gets ported to new mobs. + SA.visible_message(span("critical", "\The [SA] disintegrates into ash!")) + SA.ash() + continue // No point deafening something that wont exist. + + // Deafen them. + if(L.get_ear_protection() < 2) + L.AdjustSleeping(-100) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.ear_deaf += 10 + to_chat(L, span("danger", "Lightning struck nearby, and the thunderclap is deafening!")) + +#undef GROUNDING_ROD_RANGE +#undef LIGHTNING_ZAP_RANGE +#undef LIGHTNING_POWER \ No newline at end of file diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 7fde6c58e1..d0504e0223 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -10,13 +10,17 @@ return template = map_templates[map] + var/orientation = text2dir(input(usr, "Choose an orientation for this Map Template.", "Orientation") as null|anything in list("North", "South", "East", "West")) + if(!orientation) + return + var/turf/T = get_turf(mob) if(!T) return var/list/preview = list() - template.preload_size(template.mappath) - for(var/S in template.get_affected_turfs(T,centered = TRUE)) + template.preload_size(template.mappath, orientation) + for(var/S in template.get_affected_turfs(T,centered = TRUE, orientation=orientation)) preview += image('icons/misc/debug_group.dmi',S ,"red") usr.client.images += preview if(alert(usr,"Confirm location.", "Template Confirm","No","Yes") == "Yes") @@ -25,7 +29,7 @@ usr.client.images -= preview return - if(template.load(T, centered = TRUE)) + if(template.load(T, centered = TRUE, orientation=orientation)) message_admins("[key_name_admin(usr)] has placed a map template ([template.name]).") else to_chat(usr, "Failed to place map") @@ -41,14 +45,18 @@ if(!map) return template = map_templates[map] - - if(template.width > world.maxx || template.height > world.maxy) + + var/orientation = text2dir(input(usr, "Choose an orientation for this Map Template.", "Orientation") as null|anything in list("North", "South", "East", "West")) + if(!orientation) + return + + if(((orientation & (NORTH|SOUTH) && template.width > world.maxx || template.height > world.maxy) || ((orientation & (EAST|WEST)) && template.width > world.maxy || template.height > world.maxx))) if(alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!","Cancel","Yes") == "Cancel") to_chat(usr,"Template placement aborted.") return - + if(alert(usr,"Confirm map load.", "Template Confirm","No","Yes") == "Yes") - if(template.load_new_z()) + if(template.load_new_z(orientation=orientation)) message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) on Z level [world.maxz].") else to_chat(usr, "Failed to place map") diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 1e160d253c..2776458e06 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -84,3 +84,111 @@ "} + +/datum/proc/get_variables() + . = vars - VV_hidden() + if(!usr || !check_rights(R_ADMIN|R_DEBUG, FALSE)) + . -= VV_secluded() + +/datum/proc/get_variable_value(varname) + return vars[varname] + +/datum/proc/set_variable_value(varname, value) + vars[varname] = value + +/datum/proc/get_initial_variable_value(varname) + return initial(vars[varname]) + +/datum/proc/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0) + return {" + (E) + (C) + (M) + [hide_watch ? "" : "(W)"] + "} + +// No mass editing of clients +/client/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0) + return {" + (E) + (C) + [hide_watch ? "" : "(W)"] + "} + +// These methods are all procs and don't use stored lists to avoid VV exploits + +// The following vars cannot be viewed by anyone +/datum/proc/VV_hidden() + return list() + +// The following vars can only be viewed by R_ADMIN|R_DEBUG +/datum/proc/VV_secluded() + return list() + +/datum/configuration/VV_secluded() + return vars + +// The following vars cannot be edited by anyone +/datum/proc/VV_static() + return list("parent_type") + +/atom/VV_static() + return ..() + list("bound_x", "bound_y", "bound_height", "bound_width", "bounds", "step_x", "step_y", "step_size") + +/client/VV_static() + return ..() + list("holder", "prefs") + +/datum/admins/VV_static() + return vars + +// The following vars require R_DEBUG to edit +/datum/proc/VV_locked() + return list("vars", "virus", "viruses", "cuffed") + +/client/VV_locked() + return list("vars", "mob") + +/mob/VV_locked() + return ..() + list("client") + +// The following vars require R_FUN|R_DEBUG to edit +/datum/proc/VV_icon_edit_lock() + return list() + +/atom/VV_icon_edit_lock() + return ..() + list("icon", "icon_state", "overlays", "underlays") + +// The following vars require R_SPAWN|R_DEBUG to edit +/datum/proc/VV_ckey_edit() + return list() + +/mob/VV_ckey_edit() + return list("key", "ckey") + +/client/VV_ckey_edit() + return list("key", "ckey") + +/datum/proc/may_edit_var(var/user, var/var_to_edit) + if(!user) + return FALSE + if(!(var_to_edit in vars)) + to_chat(user, "\The [src] does not have a var '[var_to_edit]'") + return FALSE + if(var_to_edit in VV_static()) + return FALSE + if((var_to_edit in VV_secluded()) && !check_rights(R_ADMIN|R_DEBUG, FALSE, C = user)) + return FALSE + if((var_to_edit in VV_locked()) && !check_rights(R_DEBUG, C = user)) + return FALSE + if((var_to_edit in VV_ckey_edit()) && !check_rights(R_SPAWN|R_DEBUG, C = user)) + return FALSE + if((var_to_edit in VV_icon_edit_lock()) && !check_rights(R_FUN|R_DEBUG, C = user)) + return FALSE + return TRUE + +/proc/forbidden_varedit_object_types() + return list( + /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea., + /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering, + /datum/feedback_variable //Prevents people messing with feedback gathering + ) \ No newline at end of file diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 7c68737490..16550f6712 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -474,7 +474,7 @@ usr << "This can only be done on mobs with clients" return - nanomanager.send_resources(H.client) + GLOB.nanomanager.send_resources(H.client) usr << "Resource files sent" H << "Your NanoUI Resource files have been refreshed" diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 747b0d442b..8c965f0deb 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -102,7 +102,7 @@ if((!A.secured) && (!secured)) attach_assembly(A,user) return - if(isscrewdriver(W)) + if(W.is_screwdriver()) if(toggle_secure()) to_chat(user, "\The [src] is ready!") else diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 1bbf0597e6..0cc5f49682 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -144,7 +144,7 @@ /obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(isscrewdriver(W)) + if(W.is_screwdriver()) if(!a_left || !a_right) to_chat(user, " BUG:Assembly part missing, please report this!") return diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 4c23f988cd..88845d0651 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -13,7 +13,7 @@ if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc - grenade.prime() + grenade.detonate() else var/turf/location = get_turf(loc) if(location) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 9e9eaeb868..849729f332 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -254,4 +254,4 @@ if(master.first == src) master.first = null if(next && !next.gc_destroyed) - qdel_null(next) + QDEL_NULL(next) diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 0fbefc88d8..fd5c35bbfb 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -15,7 +15,7 @@ return /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench) && !status) + if(W.is_wrench() && !status) var/turf/T = loc if(ismob(T)) T = T.loc @@ -27,7 +27,7 @@ part2 = null qdel(src) return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) status = !status to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") playsound(src, W.usesound, 50, 1) diff --git a/code/modules/blob2/blobs/base_blob.dm b/code/modules/blob2/blobs/base_blob.dm index 19461e68c8..e70587c5a3 100644 --- a/code/modules/blob2/blobs/base_blob.dm +++ b/code/modules/blob2/blobs/base_blob.dm @@ -51,6 +51,15 @@ var/list/blobs = list() return TRUE if(istype(mover) && mover.checkpass(PASSBLOB)) return TRUE + else if(istype(mover, /mob/living)) + var/mob/living/L = mover + if(L.faction == "blob") + return TRUE + else if(istype(mover, /obj/item/projectile)) + var/obj/item/projectile/P = mover + if(P.firer && P.firer.faction == "blob") + return TRUE + return FALSE else return FALSE // return ..() @@ -248,6 +257,9 @@ var/list/blobs = list() if(!P) return + if(P.firer && P.firer.faction == "blob") + return + var/damage = P.get_structure_damage() // So tasers don't hurt the blob. if(!damage) return diff --git a/code/modules/blob2/blobs/core.dm b/code/modules/blob2/blobs/core.dm index 7e2fe741cf..fc4cbc7967 100644 --- a/code/modules/blob2/blobs/core.dm +++ b/code/modules/blob2/blobs/core.dm @@ -38,6 +38,9 @@ var/list/blob_cores = list() /obj/structure/blob/core/grey_goo desired_blob_type = /datum/blob_type/grey_goo +/obj/structure/blob/core/fabrication_swarm + desired_blob_type = /datum/blob_type/fabrication_swarm + /obj/structure/blob/core/electromagnetic_web desired_blob_type = /datum/blob_type/electromagnetic_web @@ -71,6 +74,9 @@ var/list/blob_cores = list() /obj/structure/blob/core/radioactive_ooze desired_blob_type = /datum/blob_type/radioactive_ooze +/obj/structure/blob/core/volatile_alluvium + desired_blob_type = /datum/blob_type/volatile_alluvium + /obj/structure/blob/core/classic desired_blob_type = /datum/blob_type/classic diff --git a/code/modules/blob2/blobs/factory.dm b/code/modules/blob2/blobs/factory.dm index 6cd8bfa0f2..9577f3c14e 100644 --- a/code/modules/blob2/blobs/factory.dm +++ b/code/modules/blob2/blobs/factory.dm @@ -16,8 +16,10 @@ /obj/structure/blob/factory/Destroy() for(var/mob/living/simple_animal/hostile/blob/spore/spore in spores) - if(spore.factory == src) + if(istype(spore) && spore.factory == src) spore.factory = null + else + spore.nest = null spores = null return ..() @@ -32,6 +34,21 @@ var/mob/living/simple_animal/hostile/blob/spore/S = null if(overmind) S = new overmind.blob_type.spore_type(src.loc, src) - S.overmind = overmind + S.faction = "blob" + if(istype(S)) + S.overmind = overmind + overmind.blob_mobs.Add(S) + if(overmind.blob_type.ranged_spores) + S.ranged = TRUE + S.projectiletype = overmind.blob_type.spore_projectile + S.projectilesound = overmind.blob_type.spore_firesound + S.shoot_range = overmind.blob_type.spore_range + else //Other mobs don't add themselves in New. Ew. + S.nest = src + spores += S S.update_icons() - overmind.blob_mobs.Add(S) \ No newline at end of file + +/obj/structure/blob/factory/sluggish // Capable of producing MORE spores, but quite a bit slower than normal. + name = "sluggish factory blob" + max_spores = 4 + spore_cooldown = 16 SECONDS diff --git a/code/modules/blob2/blobs/resource.dm b/code/modules/blob2/blobs/resource.dm index f8ff4e48e4..189abfd520 100644 --- a/code/modules/blob2/blobs/resource.dm +++ b/code/modules/blob2/blobs/resource.dm @@ -7,6 +7,7 @@ max_integrity = 40 point_return = 15 var/resource_delay = 0 + var/resource_cooldown = 4 SECONDS /obj/structure/blob/resource/New(var/newloc, var/new_overmind) ..(newloc, new_overmind) @@ -25,6 +26,12 @@ flick("blob_resource_glow", src) if(overmind) overmind.add_points(1) - resource_delay = world.time + 4 SECONDS + (overmind.resource_blobs.len * 2.5) //4 seconds plus a quarter second for each resource blob the overmind has + resource_delay = world.time + resource_cooldown + (overmind.resource_blobs.len * 2.5) //4 seconds plus a quarter second for each resource blob the overmind has else - resource_delay = world.time + 4 SECONDS \ No newline at end of file + resource_delay = world.time + resource_cooldown + +/obj/structure/blob/resource/sluggish // Tankier, but really slow. + name = "sluggish resource blob" + desc = "A thin spire of occasionally convulsing tendrils." + max_integrity = 80 + resource_cooldown = 8 SECONDS diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm index 9b12c4c873..8ba73eb1e6 100644 --- a/code/modules/blob2/overmind/overmind.dm +++ b/code/modules/blob2/overmind/overmind.dm @@ -94,4 +94,4 @@ var/list/overminds = list() if(blob_points >= 100) if(!auto_factory() && !auto_resource()) - auto_node() \ No newline at end of file + auto_node() diff --git a/code/modules/blob2/overmind/powers.dm b/code/modules/blob2/overmind/powers.dm index 35a6a9e9c7..360bfbb10b 100644 --- a/code/modules/blob2/overmind/powers.dm +++ b/code/modules/blob2/overmind/powers.dm @@ -45,7 +45,7 @@ create_shield() /mob/observer/blob/proc/create_shield(turf/T) - createSpecial(15, /obj/structure/blob/shield, 0, 0, T) + createSpecial(15, blob_type.shield_type, 0, 0, T) /mob/observer/blob/verb/create_resource() set category = "Blob" @@ -55,7 +55,7 @@ if(!blob_type.can_build_resources) return FALSE - createSpecial(40, /obj/structure/blob/resource, 4, 1) + createSpecial(40, blob_type.resource_type, 4, 1) /mob/observer/blob/verb/auto_resource() set category = "Blob" @@ -85,7 +85,7 @@ if(B) forceMove(B.loc) - return createSpecial(40, /obj/structure/blob/resource, 4, 1, B.loc) + return createSpecial(40, blob_type.resource_type, 4, 1, B.loc) /mob/observer/blob/verb/create_factory() @@ -96,7 +96,7 @@ if(!blob_type.can_build_factories) return FALSE - createSpecial(60, /obj/structure/blob/factory, 7, 1) + createSpecial(60, blob_type.factory_type, 7, 1) /mob/observer/blob/verb/auto_factory() set category = "Blob" @@ -126,7 +126,7 @@ if(B) forceMove(B.loc) - return createSpecial(60, /obj/structure/blob/factory, 7, 1, B.loc) + return createSpecial(60, blob_type.factory_type, 7, 1, B.loc) @@ -138,7 +138,7 @@ if(!blob_type.can_build_nodes) return FALSE - createSpecial(100, /obj/structure/blob/node, 5, 0) + createSpecial(100, blob_type.node_type, 5, 0) /mob/observer/blob/verb/auto_node() set category = "Blob" @@ -166,7 +166,7 @@ if(B) forceMove(B.loc) - return createSpecial(100, /obj/structure/blob/node, 5, 0, B.loc) + return createSpecial(100, blob_type.node_type, 5, 0, B.loc) diff --git a/code/modules/blob2/overmind/types.dm b/code/modules/blob2/overmind/types.dm index 0cc3683489..c8aca03cf6 100644 --- a/code/modules/blob2/overmind/types.dm +++ b/code/modules/blob2/overmind/types.dm @@ -33,6 +33,15 @@ var/can_build_nodes = TRUE // Ditto, for nodes. var/spore_type = /mob/living/simple_animal/hostile/blob/spore + var/ranged_spores = FALSE // For proper spores of the type above. + var/spore_firesound = 'sound/effects/slime_squish.ogg' + var/spore_range = 7 // The range the spore can fire. + var/spore_projectile = /obj/item/projectile/energy/blob + + var/factory_type = /obj/structure/blob/factory + var/resource_type = /obj/structure/blob/resource + var/node_type = /obj/structure/blob/node + var/shield_type = /obj/structure/blob/shield // Called when a blob receives damage. This needs to return the final damage or blobs will be immortal. /datum/blob_type/proc/on_received_damage(var/obj/structure/blob/B, damage, damage_type) @@ -82,13 +91,49 @@ slow_spread_with_size = FALSE ai_aggressiveness = 80 can_build_resources = TRUE - attack_message = "The tide tries to shallow you" + attack_message = "The tide tries to swallow you" attack_message_living = ", and you feel your skin dissolve" attack_message_synth = ", and your external plating dissolves" /datum/blob_type/grey_goo/on_emp(obj/structure/blob/B, severity) B.adjust_integrity(-(20 / severity)) +// Slow, tanky blobtype which uses not spores, but hivebots, as its soldiers. +/datum/blob_type/fabrication_swarm + name = "iron tide" + desc = "A swarm of self replicating construction nanites. Incredibly illegal, but only mildly dangerous." + effect_desc = "Slow-spreading, but incredibly resiliant. It has a chance to harden itself against attacks automatically for no resource cost, and uses cheaply-constructed hivebots as soldiers." + ai_desc = "defensive" + difficulty = BLOB_DIFFICULTY_MEDIUM // Emitters are okay, EMP is great. + color = "#666666" + complementary_color = "#B7410E" + spread_modifier = 0.2 + can_build_factories = TRUE + can_build_resources = TRUE + attack_message = "The tide tries to shove you away" + attack_message_living = ", and your skin itches" + attack_message_synth = ", and your external plating dulls" + attack_verb = "shoves" + armor_pen = 40 + damage_lower = 10 + damage_upper = 25 + brute_multiplier = 0.25 + burn_multiplier = 0.6 + ai_aggressiveness = 50 //Really doesn't like you near it. + spore_type = /mob/living/simple_animal/hostile/hivebot/swarm + +/datum/blob_type/fabrication_swarm/on_received_damage(var/obj/structure/blob/B, damage, damage_type, mob/living/attacker) + if(istype(B, /obj/structure/blob/normal)) + if(damage > 0) + var/reinforce_probability = min(damage, 70) + if(prob(reinforce_probability)) + B.visible_message("The [name] quakes, before rapidly hardening!") + new/obj/structure/blob/shield(get_turf(B), B.overmind) + qdel(B) + return ..() + +/datum/blob_type/fabrication_swarm/on_emp(obj/structure/blob/B, severity) + B.adjust_integrity(-(30 / severity)) // A blob meant to be fought like a fire. /datum/blob_type/blazing_oil @@ -218,17 +263,23 @@ /datum/blob_type/fulminant_organism/on_expand(var/obj/structure/blob/B, var/obj/structure/blob/new_B, var/turf/T, var/mob/observer/blob/O) if(prob(10)) // 10% chance to make a weak spore when expanding. var/mob/living/simple_animal/hostile/blob/S = new spore_type(T) - S.overmind = O + if(istype(S)) + S.overmind = O + O.blob_mobs.Add(S) + else + S.faction = "blob" S.update_icons() - O.blob_mobs.Add(S) /datum/blob_type/fulminant_organism/on_death(obj/structure/blob/B) if(prob(33)) // 33% chance to make a spore when dying. var/mob/living/simple_animal/hostile/blob/S = new spore_type(get_turf(B)) - B.visible_message("A spore floats free from the [name]!") - S.overmind = B.overmind + B.visible_message("\The [S] floats free from the [name]!") + if(istype(S)) + S.overmind = B.overmind + B.overmind.blob_mobs.Add(S) + else + S.faction = "blob" S.update_icons() - B.overmind.blob_mobs.Add(S) // Auto-retaliates against melee attacks. Weak to projectiles. @@ -542,4 +593,52 @@ attack_verb = "splashes" /datum/blob_type/radioactive_ooze/on_pulse(var/obj/structure/blob/B) - radiation_repository.radiate(B, 200) \ No newline at end of file + radiation_repository.radiate(B, 200) + +/datum/blob_type/volatile_alluvium + name = "volatile alluvium" + desc = "A churning, earthy mass that moves in waves." + ai_desc = "earthen" + effect_desc = "Moves slowly, producing weak ranged spores to defend itself, and inflicts brute attacks. Attempts to disarm nearby attackers. Weak to water." + difficulty = BLOB_DIFFICULTY_HARD //Slow-starting, but can be overwhelming if left alone. + color = "#6B481E" + complementary_color = "#7F471F" + damage_lower = 10 + damage_upper = 20 + armor_pen = 40 + brute_multiplier = 0.7 + burn_multiplier = 0.5 + spread_modifier = 0.5 + ai_aggressiveness = 50 + attack_message = "The alluvium crashes against you" + attack_verb = "crashes against" + can_build_factories = TRUE + can_build_resources = TRUE + spore_type = /mob/living/simple_animal/hostile/blob/spore/weak + ranged_spores = TRUE + spore_range = 3 + spore_projectile = /obj/item/projectile/energy/blob/splattering + factory_type = /obj/structure/blob/factory/sluggish + resource_type = /obj/structure/blob/resource/sluggish + +/datum/blob_type/volatile_alluvium/on_received_damage(var/obj/structure/blob/B, damage, damage_type, mob/living/attacker) + if(damage > 0 && attacker && get_dist(B, attacker) <= 2 && prob(min(damage, 70)) && istype(attacker, /mob/living/carbon/human)) // Melee weapons of any type carried by a human will have a high chance of being stolen. + var/mob/living/carbon/human/H = attacker + var/obj/item/I = H.get_active_hand() + H.drop_item() + if(I) + if((I.sharp || I.edge) && !istype(I, /obj/item/weapon/gun)) + I.forceMove(get_turf(B)) // Disarmed entirely. + B.visible_message("The [name] heaves, \the [attacker]'s weapon becoming stuck in the churning mass!") + else + I.throw_at(B, 2, 4) // Just yoinked. + B.visible_message("The [name] heaves, pulling \the [attacker]'s weapon from their hands!") + B.blob_attack_animation(attacker, B.overmind) + return ..() + +/datum/blob_type/volatile_alluvium/on_water(obj/structure/blob/B, amount) + spawn(1) + var/damage = amount * 2 + B.adjust_integrity(-(damage)) + if(B && prob(damage)) + B.visible_message("The [name] begins to crumble!") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 6856809604..11ad7e7ecd 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -29,8 +29,7 @@ /////////////// //SOUND STUFF// /////////////// - var/ambience_playing= null - var/played = 0 + var/time_last_ambience_played = 0 // world.time when ambience was played to this client, to space out ambience sounds. //////////// //SECURITY// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index daa8ce5281..db2e2790a8 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -150,7 +150,7 @@ log_client_to_db() send_resources() - nanomanager.send_resources(src) + GLOB.nanomanager.send_resources(src) if(!void) void = new() diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index c11315e614..c6184c41a0 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -39,6 +39,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_markings"] >> pref.synth_markings pref.preview_icon = null S["bgstate"] >> pref.bgstate + S["body_descriptors"] >> pref.body_descriptors /datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) S["species"] << pref.species @@ -68,6 +69,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_blue"] << pref.b_synth S["synth_markings"] << pref.synth_markings S["bgstate"] << pref.bgstate + S["body_descriptors"] << pref.body_descriptors /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) if(!pref.species || !(pref.species in playable_species)) @@ -142,6 +144,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(!status) continue var/obj/item/organ/I = character.internal_organs_by_name[name] + if(istype(I, /obj/item/organ/internal/brain)) + var/obj/item/organ/external/E = character.get_organ(I.parent_organ) + if(E.robotic < ORGAN_ASSISTED) + continue if(I) if(status == "assisted") I.mechassist() @@ -163,6 +169,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(O) O.markings[M] = list("color" = mark_color, "datum" = mark_datum) + var/list/last_descriptors = list() + if(islist(pref.body_descriptors)) + last_descriptors = pref.body_descriptors.Copy() + pref.body_descriptors = list() + + var/datum/species/mob_species = all_species[pref.species] + if(LAZYLEN(mob_species.descriptors)) + for(var/entry in mob_species.descriptors) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] + if(istype(descriptor)) + if(isnull(last_descriptors[entry])) + pref.body_descriptors[entry] = descriptor.default_value // Species datums have initial default value. + else + pref.body_descriptors[entry] = Clamp(last_descriptors[entry], 1, LAZYLEN(descriptor.standalone_value_descriptors)) + return /datum/category_item/player_setup_item/general/body/content(var/mob/user) @@ -171,7 +192,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.update_preview_icon() user << browse_rsc(pref.preview_icon, "previewicon.png") - var/mob_species = all_species[pref.species] + var/datum/species/mob_species = all_species[pref.species] . += "
Body " . += "(®)" . += "
" @@ -188,8 +209,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O for(var/name in pref.organ_data) var/status = pref.organ_data[name] var/organ_name = null - switch(name) + switch(name) if(BP_TORSO) organ_name = "torso" if(BP_GROIN) @@ -276,6 +297,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else . += "

" + if(LAZYLEN(pref.body_descriptors)) + . += "" + for(var/entry in pref.body_descriptors) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] + . += "" + . += "
[capitalize(descriptor.chargen_label)]:[descriptor.get_standalone_value_descriptor(pref.body_descriptors[entry])]Change

" + . += "
Preview
" . += "
" . += "
Cycle background" @@ -325,6 +353,16 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.randomize_appearance_and_body_for() return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["change_descriptor"]) + if(mob_species.descriptors) + var/desc_id = href_list["change_descriptor"] + if(pref.body_descriptors[desc_id]) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] + var/choice = input("Please select a descriptor.", "Descriptor") as null|anything in descriptor.chargen_value_descriptors + if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. + pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] + return TOPIC_REFRESH + else if(href_list["blood_type"]) var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in valid_bloodtypes if(new_b_type && CanUseTopic(user)) @@ -585,6 +623,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O choice_options = list("Prosthesis") if("Full Body") limb = BP_TORSO + second_limb = BP_HEAD third_limb = BP_GROIN choice_options = list("Normal","Prosthesis") @@ -593,12 +632,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O switch(new_state) if("Normal") + pref.organ_data[limb] = null + pref.rlimb_data[limb] = null if(limb == BP_TORSO) for(var/other_limb in BP_ALL - BP_TORSO) pref.organ_data[other_limb] = null pref.rlimb_data[other_limb] = null - pref.organ_data[limb] = null - pref.rlimb_data[limb] = null + for(var/internal in O_STANDARD) + pref.organ_data[internal] = null + pref.rlimb_data[internal] = null if(third_limb) pref.organ_data[third_limb] = null pref.rlimb_data[third_limb] = null diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 393ac5841c..66b57f67f3 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -126,7 +126,7 @@ var/list/_client_preferences_by_type description ="Mob tooltips" key = "MOB_TOOLTIPS" enabled_description = "Show" - disabled_description = "Hide" + disabled_description = "Hide" /datum/client_preference/attack_icons description ="Attack icons" @@ -207,6 +207,10 @@ var/list/_client_preferences_by_type PH.set_ao(VIS_OBJS, enabled) PH.set_ao(VIS_MOBS, enabled) +/datum/client_preference/instrument_toggle + description ="Hear In-game Instruments" + key = "SOUND_INSTRUMENT" + /******************** * Staff Preferences * ********************/ diff --git a/code/modules/client/preference_setup/loadout/loadout_ears.dm b/code/modules/client/preference_setup/loadout/loadout_ears.dm index 23e7c8e33b..d92b2358b4 100644 --- a/code/modules/client/preference_setup/loadout/loadout_ears.dm +++ b/code/modules/client/preference_setup/loadout/loadout_ears.dm @@ -7,4 +7,8 @@ /datum/gear/ears/headphones display_name = "headphones" - path = /obj/item/clothing/ears/earmuffs/headphones \ No newline at end of file + path = /obj/item/clothing/ears/earmuffs/headphones + +/datum/gear/ears/circuitry + display_name = "earwear, circuitry (empty)" + path = /obj/item/clothing/ears/circuitry \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm index 7a17b782ef..5981424753 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -121,3 +121,7 @@ /datum/gear/eyes/sun/prescriptionsun display_name = "sunglasses, presciption (Security/Command)" path = /obj/item/clothing/glasses/sunglasses/prescription + +/datum/gear/eyes/circuitry + display_name = "goggles, circuitry (empty)" + path = /obj/item/clothing/glasses/circuitry \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm index 18eb05f882..74fb11fcaa 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm @@ -98,4 +98,8 @@ ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic - gear_tweaks += new/datum/gear_tweak/path(ringtype) \ No newline at end of file + gear_tweaks += new/datum/gear_tweak/path(ringtype) + +/datum/gear/gloves/circuitry + display_name = "gloves, circuitry (empty)" + path = /obj/item/clothing/gloves/circuitry \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index e05ed22e10..80d596bcdc 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -372,3 +372,7 @@ /datum/gear/head/surgical/purple display_name = "surgical cap, purple" path = /obj/item/clothing/head/surgery/purple + +/datum/gear/head/circuitry + display_name = "headwear, circuitry (empty)" + path = /obj/item/clothing/head/circuitry \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm index 6cca1946fd..d3ad2b05d8 100644 --- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -227,3 +227,7 @@ display_name = "hydroponics winter boots" path = /obj/item/clothing/shoes/boots/winter/hydro allowed_roles = list("Botanist", "Xenobiologist") + +/datum/gear/shoes/circuitry + display_name = "boots, circuitry (empty)" + path = /obj/item/clothing/shoes/circuitry diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 591269f418..14fd22711b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -456,4 +456,8 @@ /datum/gear/uniform/westernbustle display_name = "western bustle" - path = /obj/item/clothing/under/dress/westernbustle \ No newline at end of file + path = /obj/item/clothing/under/dress/westernbustle + +/datum/gear/uniform/circuitry + display_name = "jumpsuit, circuitry (empty)" + path = /obj/item/clothing/under/circuitry \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index c7d93294ac..e053f3b8ef 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -107,29 +107,29 @@ /datum/gear/uniform/undercoat display_name = "undercoat selection (Teshari)" - path = /obj/item/clothing/under/seromi/undercoat + path = /obj/item/clothing/under/seromi/undercoat/standard whitelisted = SPECIES_TESHARI sort_category = "Xenowear" /datum/gear/uniform/undercoat/New() ..() var/list/undercoats = list() - for(var/undercoat in typesof(/obj/item/clothing/under/seromi/undercoat)) - var/obj/item/clothing/under/seromi/undercoat/undercoat_type = undercoat + for(var/undercoat in typesof(/obj/item/clothing/under/seromi/undercoat/standard)) + var/obj/item/clothing/under/seromi/undercoat/standard/undercoat_type = undercoat undercoats[initial(undercoat_type.name)] = undercoat_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(undercoats)) /datum/gear/suit/cloak display_name = "cloak selection (Teshari)" - path = /obj/item/clothing/suit/storage/seromi/cloak + path = /obj/item/clothing/suit/storage/seromi/cloak/standard whitelisted = SPECIES_TESHARI sort_category = "Xenowear" /datum/gear/suit/cloak/New() ..() var/list/cloaks = list() - for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak)) - var/obj/item/clothing/suit/storage/seromi/cloak/cloak_type = cloak + for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/standard)) + var/obj/item/clothing/suit/storage/seromi/cloak/standard/cloak_type = cloak cloaks[initial(cloak_type.name)] = cloak_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks)) @@ -160,4 +160,203 @@ for(var/cohesionsuit in (typesof(/obj/item/clothing/under/cohesion))) var/obj/item/clothing/under/cohesion/cohesion_type = cohesionsuit cohesionsuits[initial(cohesion_type.name)] = cohesion_type - gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cohesionsuits)) \ No newline at end of file + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cohesionsuits)) + +/datum/gear/uniform/dept + whitelisted = SPECIES_TESHARI + sort_category = "Xenowear" + +/datum/gear/uniform/dept/undercoat/ce + display_name = "Teshari Chief Engineer Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/ce + allowed_roles = list("Chief Engineer") + +/datum/gear/uniform/dept/undercoat/ce_w + display_name = "Teshari Chief Engineer Undercoat (White)" + path = /obj/item/clothing/under/seromi/undercoat/jobs/ce_w + allowed_roles = list("Chief Engineer") +/* +/datum/gear/uniform/undercoat/rd + display_name = "cloak, research director" + path = /obj/item/clothing/accessory/poncho/roles/cloak/rd + allowed_roles = list("Research Director") +*/ +/datum/gear/uniform/dept/undercoat/qm + display_name = "Teshari Quarter Master Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/qm + allowed_roles = list("Quartermaster") + +/datum/gear/uniform/dept/undercoat/command + display_name = "Teshari Command Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/command + allowed_roles = list("Colony Director","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer") + +/datum/gear/uniform/dept/undercoat/command_g + display_name = "Teshari Command Undercoat (gold buttons)" + path = /obj/item/clothing/under/seromi/undercoat/jobs/command_g + allowed_roles = list("Colony Director","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer") + +/datum/gear/uniform/dept/undercoat/cmo + display_name = "Teshari Chief Medical Officer Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/cmo + allowed_roles = list("Chief Medical Officer") + +/datum/gear/uniform/dept/undercoat/cargo + display_name = "Teshari Cargo Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/cargo + allowed_roles = list("Cargo Technician","Quartermaster","Shaft Miner") + +/datum/gear/uniform/dept/undercoat/mining + display_name = "Teshari Mining Undercoat" + path = /obj/item/clothing/accessory/poncho/roles/cloak/mining + allowed_roles = list("Quartermaster","Shaft Miner") + +/datum/gear/uniform/dept/undercoat/security + display_name = "Teshari Security Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/sec + allowed_roles = list("Head of Security","Detective","Warden","Security Officer",) + +/datum/gear/uniform/dept/undercoat/service + display_name = "Teshari Service Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/service + allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian") + +/datum/gear/uniform/dept/undercoat/engineer + display_name = "Teshari Engineer Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/engineer + allowed_roles = list("Chief Engineer","Station Engineer") + +/datum/gear/uniform/dept/undercoat/atmos + display_name = "Teshari Atmos Tech Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/atmos + allowed_roles = list("Chief Engineer","Atmospheric Technician") + +/datum/gear/uniform/dept/undercoat/research + display_name = "Teshari Science Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/sci + allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist") + +/datum/gear/uniform/dept/undercoat/robo + display_name = "Teshari Roboticist Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/robo + allowed_roles = list("Roboticist") + +/datum/gear/uniform/dept/undercoat/medical + display_name = "Teshari Medical Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/medical + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") + +/datum/gear/uniform/dept/undercoat/chemistry + display_name = "Teshari Chemistry Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/chemistry + allowed_roles = list("Chemist") + +/datum/gear/uniform/dept/undercoat/virology + display_name = "Teshari Medical Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/viro + allowed_roles = list("Medical Doctor") + +/datum/gear/uniform/dept/undercoat/paramedic + display_name = "Teshari Paramedic Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/para + allowed_roles = list("Paramedic") + +/datum/gear/uniform/dept/undercoat/iaa + display_name = "Teshari IAA Undercoat" + path = /obj/item/clothing/under/seromi/undercoat/jobs/iaa + allowed_roles = list("Internal Affairs Agent") + +/datum/gear/suit/dept/cloak/ + whitelisted = SPECIES_TESHARI + sort_category = "Xenowear" + +/datum/gear/suit/cloak/dept/ce + display_name = "Teshari Chief Engineer Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/ce + allowed_roles = list("Chief Engineer") +/* +/datum/gear/suit/cloak/rd + display_name = "cloak, research director" + path = /obj/item/clothing/accessory/poncho/roles/cloak/rd + allowed_roles = list("Research Director") +*/ + +/datum/gear/suit/dept/cloak/qm + display_name = "Teshari Quarter Master Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/qm + allowed_roles = list("Quartermaster") + +/datum/gear/suit/dept/cloak/command + display_name = "Teshari Command Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/command + allowed_roles = list("Colony Director","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer") + +/datum/gear/suit/dept/cloak/cmo + display_name = "Teshari Chief Medical Officer Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/cmo + allowed_roles = list("Chief Medical Officer") + +/datum/gear/suit/dept/cloak/cargo + display_name = "Teshari Cargo Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/cargo + allowed_roles = list("Cargo Technician","Quartermaster","Shaft Miner") + +/datum/gear/suit/dept/cloak/mining + display_name = "Teshari Mining Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/mining + allowed_roles = list("Quartermaster","Shaft Miner") + +/datum/gear/suit/dept/cloak/security + display_name = "Teshari Security Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/sec + allowed_roles = list("Head of Security","Detective","Warden","Security Officer",) + +/datum/gear/suit/dept/cloak/service + display_name = "Teshari Service Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/service + allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian") + +/datum/gear/suit/dept/cloak/engineer + display_name = "Teshari Engineer Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/eningeer + allowed_roles = list("Chief Engineer","Station Engineer") + +/datum/gear/suit/dept/cloak/atmos + display_name = "Teshari Atmos Tech Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/atmos + allowed_roles = list("Chief Engineer","Atmospheric Technician") + +/datum/gear/suit/dept/cloak/research + display_name = "Teshari Science Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/sci + allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist") + +/datum/gear/suit/dept/cloak/robo + display_name = "Teshari Roboticist Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/robo + allowed_roles = list("Roboticist") + +/datum/gear/suit/dept/cloak/medical + display_name = "Teshari Medical Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/medical + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") + +/datum/gear/suit/dept/cloak/chemistry + display_name = "Teshari Chemistry Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/chemistry + allowed_roles = list("Chemist") + +/datum/gear/suit/dept/cloak/virology + display_name = "Teshari Medical Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/viro + allowed_roles = list("Medical Doctor") + +/datum/gear/suit/dept/cloak/paramedic + display_name = "Teshari Paramedic Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/para + allowed_roles = list("Paramedic") + +/datum/gear/suit/dept/cloak/iaa + display_name = "Teshari IAA Cloak" + path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/iaa + allowed_roles = list("Internal Affairs Agent") diff --git a/code/modules/client/preference_setup/traits/trait_defines.dm b/code/modules/client/preference_setup/traits/trait_defines.dm index 51692cc194..aa53392f2c 100644 --- a/code/modules/client/preference_setup/traits/trait_defines.dm +++ b/code/modules/client/preference_setup/traits/trait_defines.dm @@ -92,6 +92,30 @@ modifier_type = /datum/modifier/trait/larger mutually_exclusive = list(/datum/trait/modifier/physical/smaller, /datum/trait/modifier/physical/small, /datum/trait/modifier/physical/large) +/datum/trait/modifier/physical/colorblind_protanopia + name = "Protanopia" + desc = "You have a form of red-green colorblindness. You cannot see reds, and have trouble distinguishing them from yellows and greens." + modifier_type = /datum/modifier/trait/colorblind_protanopia + mutually_exclusive = list(/datum/trait/modifier/physical/colorblind_deuteranopia, /datum/trait/modifier/physical/colorblind_tritanopia, /datum/trait/modifier/physical/colorblind_monochrome) + +/datum/trait/modifier/physical/colorblind_deuteranopia + name = "Deuteranopia" + desc = "You have a form of red-green colorblindness. You cannot see greens, and have trouble distinguishing them from yellows and reds." + modifier_type = /datum/modifier/trait/colorblind_deuteranopia + mutually_exclusive = list(/datum/trait/modifier/physical/colorblind_protanopia, /datum/trait/modifier/physical/colorblind_tritanopia, /datum/trait/modifier/physical/colorblind_monochrome) + +/datum/trait/modifier/physical/colorblind_tritanopia + name = "Tritanopia" + desc = "You have a form of blue-yellow colorblindness. You have trouble distinguishing between blues, greens, and yellows, and see blues and violets as dim." + modifier_type = /datum/modifier/trait/colorblind_tritanopia + mutually_exclusive = list(/datum/trait/modifier/physical/colorblind_protanopia, /datum/trait/modifier/physical/colorblind_deuteranopia, /datum/trait/modifier/physical/colorblind_monochrome) + +/datum/trait/modifier/physical/colorblind_monochrome + name = "Monochromacy" + desc = "You are fully colorblind. Your condition is rare, but you can see no colors at all." + modifier_type = /datum/modifier/trait/colorblind_monochrome + mutually_exclusive = list(/datum/trait/modifier/physical/colorblind_protanopia, /datum/trait/modifier/physical/colorblind_deuteranopia, /datum/trait/modifier/physical/colorblind_tritanopia) + // These two traits might be borderline, feel free to remove if they get abused. /datum/trait/modifier/physical/high_metabolism name = "High Metabolism" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 34826e24d9..3e42d8c6de 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -60,7 +60,7 @@ datum/preferences var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. var/g_synth //Same as above var/b_synth //Same as above - var/synth_markings = 1 //VOREStation edit. Enable/disable markings on synth parts. + var/synth_markings = 1 //Enable/disable markings on synth parts. //VOREStation Edit - 1 by default //Some faction information. var/home_system = "Unset" //System of birth. @@ -104,6 +104,8 @@ datum/preferences var/list/flavor_texts = list() var/list/flavour_texts_robot = list() + var/list/body_descriptors = list() + var/med_record = "" var/sec_record = "" var/gen_record = "" @@ -300,6 +302,10 @@ datum/preferences character.update_underwear() character.update_hair() + if(LAZYLEN(character.descriptors)) + for(var/entry in body_descriptors) + character.descriptors[entry] = body_descriptors[entry] + /datum/preferences/proc/open_load_dialog(mob/user) var/dat = "" dat += "
" diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm index fe36d096c7..4e5e5fb51e 100644 --- a/code/modules/client/preferences_toggle_procs.dm +++ b/code/modules/client/preferences_toggle_procs.dm @@ -8,7 +8,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all mob speech as a ghost." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all mob speech as a ghost.") prefs.save_preferences() @@ -23,7 +23,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see all emotes as a ghost." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see all emotes as a ghost.") prefs.save_preferences() @@ -38,7 +38,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost.") prefs.save_preferences() @@ -53,7 +53,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost.") prefs.save_preferences() @@ -68,7 +68,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat." + to_chat(src,"You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat.") prefs.save_preferences() @@ -83,7 +83,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat.") prefs.save_preferences() @@ -98,7 +98,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] have the speech indicator." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] have the speech indicator.") prefs.save_preferences() @@ -113,7 +113,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages.") prefs.save_preferences() @@ -128,7 +128,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby.") prefs.save_preferences() @@ -143,7 +143,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear MIDIs from admins." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear MIDIs from admins.") prefs.save_preferences() @@ -158,7 +158,7 @@ toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear ambient noise." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear ambient noise.") prefs.save_preferences() @@ -190,7 +190,7 @@ prefs.be_special ^= role_flag prefs.save_preferences() - src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)." + to_chat(src,"You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible).") feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -203,7 +203,7 @@ toggle_preference(pref_path) prefs.save_preferences() - src << "You will now use [(is_preference_enabled(/datum/client_preference/safefiring)) ? "safe" : "dangerous"] firearms firing." + to_chat(src,"You will now use [(is_preference_enabled(/datum/client_preference/safefiring)) ? "safe" : "dangerous"] firearms firing.") feedback_add_details("admin_verb","TFiringMode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -216,10 +216,23 @@ toggle_preference(pref_path) prefs.save_preferences() - src << "You will now [(is_preference_enabled(/datum/client_preference/mob_tooltips)) ? "see" : "not see"] mob tooltips." + to_chat(src,"You will now [(is_preference_enabled(/datum/client_preference/mob_tooltips)) ? "see" : "not see"] mob tooltips.") feedback_add_details("admin_verb","TMobTooltips") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/verb/toggle_hear_instruments() + set name = "Toggle Hear/Ignore Instruments" + set category = "Preferences" + set desc = "Hear In-game Instruments" + + var/pref_path = /datum/client_preference/instrument_toggle + toggle_preference(pref_path) + prefs.save_preferences() + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/instrument_toggle)) ? "hear" : "not hear"] instruments being played.") + + feedback_add_details("admin_verb","THInstm") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + //Toggles for Staff //Developers @@ -232,7 +245,7 @@ if(check_rights(R_ADMIN|R_DEBUG)) toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs.") prefs.save_preferences() feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -247,7 +260,7 @@ if(check_rights(R_ADMIN|R_MOD)) toggle_preference(pref_path) - src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs." + to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs.") prefs.save_preferences() feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ea616226ba..84a331a77b 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -231,7 +231,7 @@ return 0 // return 1 to cancel attack_hand() /*/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) + if(W.is_wirecutter() || istype(W, /obj/item/weapon/scalpel)) if (clipped) user << "The [src] have already been clipped!" update_icon() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 87aef44851..fed3119830 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -60,6 +60,7 @@ BLIND // can't see anything to_chat(usr, "You activate the optical matrix on the [src].") user.update_action_buttons() user.recalculate_vis() + ..() /obj/item/clothing/glasses/meson name = "optical meson scanner" @@ -145,7 +146,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/night/vox name = "Alien Optics" species_restricted = list("Vox") - phoronproof = 1 + flags = PHORONGUARD /obj/item/clothing/glasses/night/New() ..() diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index c2b198bc70..7d93b0b1ee 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -18,12 +18,12 @@ arscreen = new arscreen_path(src) /obj/item/clothing/glasses/omnihud/Destroy() - qdel_null(arscreen) + QDEL_NULL(arscreen) . = ..() /obj/item/clothing/glasses/omnihud/dropped() if(arscreen) - nanomanager.close_uis(src) + GLOB.nanomanager.close_uis(src) ..() /obj/item/clothing/glasses/omnihud/emp_act(var/severity) diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 2de7c06aeb..739f3e3977 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -4,11 +4,13 @@ icon_state = "boxing" item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") +/* /obj/item/clothing/gloves/boxing/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/surgical/scalpel)) + if(W.is_wirecutter() || istype(W, /obj/item/weapon/surgical/scalpel)) user << "That won't work." //Nope return ..() +*/ /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 7546d81651..78e335377f 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -105,9 +105,8 @@ name = "insulated gauntlets" icon_state = "gloves-vox" item_state = "gloves-vox" - item_flags = PHORONGUARD + flags = PHORONGUARD siemens_coefficient = 0 - phoronproof = 1 permeability_coefficient = 0.05 species_restricted = list("Vox") diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8e7b10052d..70c19a1260 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,7 +6,7 @@ restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C) flags = THICKMATERIAL armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - flags_inv = HIDEEARS|HIDEEYES + flags_inv = HIDEEARS|BLOCKHEADHAIR cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE heat_protection = HEAD @@ -62,7 +62,6 @@ icon_state = "riot" item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) - flags_inv = HIDEEARS siemens_coefficient = 0.7 valid_accessory_slots = null action_button_name = "Toggle Visor" @@ -82,7 +81,6 @@ icon_state = "helmet_reflec" item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0) - flags_inv = HIDEEARS siemens_coefficient = 0.1 valid_accessory_slots = null @@ -92,7 +90,6 @@ icon_state = "helmet_bulletproof" item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0) - flags_inv = HIDEEARS siemens_coefficient = 0.7 valid_accessory_slots = null @@ -102,7 +99,7 @@ icon_state = "helmet_combat" item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0) - flags_inv = HIDEEARS + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR siemens_coefficient = 0.6 valid_accessory_slots = null @@ -111,7 +108,7 @@ desc = "They're often used by highly trained SWAT Officers." icon_state = "swat" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) - flags_inv = HIDEEARS|HIDEEYES + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.5 @@ -142,8 +139,7 @@ desc = "Ave, Imperator, morituri te salutant." icon_state = "gladiator" item_state_slots = list(slot_r_hand_str = "vhelmet", slot_l_hand_str = "vhelmet") - flags = BLOCKHAIR - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR siemens_coefficient = 1 valid_accessory_slots = null @@ -158,7 +154,7 @@ ) armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) - flags_inv = HIDEEARS + flags_inv = HIDEEARS|BLOCKHAIR siemens_coefficient = 0.7 valid_accessory_slots = null @@ -168,7 +164,7 @@ icon_state = "v62" item_state_slots = list(slot_r_hand_str = "head_m", slot_l_hand_str = "head_m") armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) - flags_inv = HIDEEARS|HIDEEYES + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.5 diff --git a/code/modules/clothing/head/hood.dm b/code/modules/clothing/head/hood.dm new file mode 100644 index 0000000000..c66589eb6a --- /dev/null +++ b/code/modules/clothing/head/hood.dm @@ -0,0 +1,71 @@ +/obj/item/clothing/head/hood + name = "hood" + desc = "A generic hood." + icon_state = "generic_hood" + body_parts_covered = HEAD + cold_protection = HEAD + flags_inv = HIDEEARS | BLOCKHAIR + +// Winter coats +/obj/item/clothing/head/hood/winter + name = "winter hood" + desc = "A hood attached to a heavy winter jacket." + icon_state = "generic_hood" + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + +/obj/item/clothing/head/hood/winter/captain + name = "colony director's winter hood" + armor = list(melee = 20, bullet = 15, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) + +/obj/item/clothing/head/hood/winter/security + name = "security winter hood" + armor = list(melee = 25, bullet = 20, laser = 20, energy = 15, bomb = 20, bio = 0, rad = 0) + +/obj/item/clothing/head/hood/winter/medical + name = "medical winter hood" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + +/obj/item/clothing/head/hood/winter/science + name = "science winter hood" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/head/hood/winter/engineering + name = "engineering winter hood" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) + +/obj/item/clothing/head/hood/winter/engineering/atmos + name = "atmospherics winter hood" + +/obj/item/clothing/head/hood/winter/hydro + name = "hydroponics winter hood" + +/obj/item/clothing/head/hood/winter/cargo + name = "cargo winter hood" + +/obj/item/clothing/head/hood/winter/miner + name = "mining winter hood" + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + +// Explorer gear +/obj/item/clothing/head/hood/explorer + name = "explorer hood" + desc = "An armoured hood for exploring harsh environments." + icon_state = "explorer" + flags = THICKMATERIAL + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.9 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) + +// Costumes +/obj/item/clothing/head/hood/carp_hood + name = "carp hood" + desc = "A hood attached to a carp costume." + icon_state = "carp_casual" + item_state_slots = list(slot_r_hand_str = "carp_casual", slot_l_hand_str = "carp_casual") //Does not exist -S2- + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE //Space carp like space, so you should too + +/obj/item/clothing/head/hood/ian_hood + name = "corgi hood" + desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits." + icon_state = "ian" + item_state_slots = list(slot_r_hand_str = "ian", slot_l_hand_str = "ian") //Does not exist -S2- \ No newline at end of file diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index abd87c5d89..f3dd101058 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -59,14 +59,31 @@ siemens_coefficient = 0.7 body_parts_covered = FACE|EYES +// Vox mask, has special code for eating /obj/item/clothing/mask/gas/swat/vox name = "\improper alien mask" desc = "Clearly not designed for a human face." - body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask. - item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD - phoronproof = 1 + flags = PHORONGUARD + item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT species_restricted = list(SPECIES_VOX) filtered_gases = list("oxygen", "sleeping_agent") + var/mask_open = FALSE // Controls if the Vox can eat through this mask + action_button_name = "Toggle Feeding Port" + +/obj/item/clothing/mask/gas/swat/vox/proc/feeding_port(mob/user) + if(user.canmove && !user.stat) + mask_open = !mask_open + if(mask_open) + body_parts_covered = EYES + to_chat(user, "Your mask moves to allow you to eat.") + else + body_parts_covered = FACE|EYES + to_chat(user, "Your mask moves to cover your mouth.") + return + +/obj/item/clothing/mask/gas/swat/vox/attack_self(mob/user) + feeding_port(user) + ..() /obj/item/clothing/mask/gas/syndicate name = "tactical mask" diff --git a/code/modules/clothing/rings/rings.dm b/code/modules/clothing/rings/rings.dm index 852ccfdb82..699be51454 100644 --- a/code/modules/clothing/rings/rings.dm +++ b/code/modules/clothing/rings/rings.dm @@ -51,7 +51,7 @@ /obj/item/clothing/gloves/ring/reagent/sleepy/New() ..() - reagents.add_reagent(/datum/reagent/chloralhydrate, 15) // Less than a sleepy-pen, but still enough to knock someone out + reagents.add_reagent("chloralhydrate", 15) // Less than a sleepy-pen, but still enough to knock someone out ///////////////////////////////////////// //Seals and Signet Rings diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 4bd3f59e29..17a44db61d 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -86,8 +86,7 @@ name = "vox magclaws" item_state = "boots-vox" icon_state = "boots-vox" - item_flags = PHORONGUARD - phoronproof = 1 + flags = PHORONGUARD species_restricted = list(SPECIES_VOX) action_button_name = "Toggle the magclaws" diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 5b42e77294..a5e0b31451 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -31,10 +31,9 @@ // Can't be equipped by any other species due to bone structure and vox cybernetics. /obj/item/clothing/suit/space/vox w_class = ITEMSIZE_NORMAL - item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | PHORONGUARD + flags = PHORONGUARD + item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank) - phoronproof = 1 - slowdown = 0.5 armor = list(melee = 60, bullet = 50, laser = 40,energy = 15, bomb = 30, bio = 100, rad = 50) siemens_coefficient = 0.2 heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -44,9 +43,9 @@ /obj/item/clothing/head/helmet/space/vox armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50) siemens_coefficient = 0.2 - item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD + flags = PHORONGUARD + item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT flags_inv = 0 - phoronproof = 1 species_restricted = list(SPECIES_VOX) /obj/item/clothing/head/helmet/space/vox/pressure diff --git a/code/modules/clothing/spacesuits/rig/modules/utility_vr.dm b/code/modules/clothing/spacesuits/rig/modules/utility_vr.dm index 21fe6fb9cf..0d397db71a 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility_vr.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility_vr.dm @@ -38,7 +38,7 @@ var/mob/living/carbon/human/H = holder.wearer to_chat(H,"You activate the P.A.T. module.") - moved_event.register(H, src, /obj/item/rig_module/pat_module/proc/boop) + GLOB.moved_event.register(H, src, /obj/item/rig_module/pat_module/proc/boop) /obj/item/rig_module/pat_module/deactivate() if(!..()) @@ -46,7 +46,7 @@ var/mob/living/carbon/human/H = holder.wearer to_chat(H,"Your disable the P.A.T. module.") - moved_event.unregister(H, src) + GLOB.moved_event.unregister(H, src) /obj/item/rig_module/pat_module/proc/boop(var/mob/living/carbon/human/user,var/turf/To,var/turf/Tn) if(!istype(user) || !istype(To) || !istype(Tn)) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index df610f3407..b176ba2ff7 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -590,7 +590,7 @@ if(module_list.len) data["modules"] = module_list - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) ui.set_initial_data(data) @@ -988,15 +988,10 @@ // AIs are a bit slower than regular and ignore move intent. wearer_move_delay = world.time + ai_controlled_move_delay - var/tickcomp = 0 - if(config.Tickcomp) - tickcomp = ((1/(world.tick_lag))*1.3) - 1.3 - wearer_move_delay += tickcomp - if(istype(wearer.buckled, /obj/vehicle)) //manually set move_delay for vehicles so we don't inherit any mob movement penalties //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm - wearer_move_delay = world.time + tickcomp + wearer_move_delay = world.time return wearer.buckled.relaymove(wearer, direction) if(istype(wearer.machine, /obj/machinery)) diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index cda9d51796..39b23827d8 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -1,6 +1,6 @@ /obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob) - - if(!istype(user)) return 0 + if(!istype(user)) + return 0 if(electrified != 0) if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. @@ -14,78 +14,79 @@ if(W.GetID()) if(subverted) locked = 0 - user << "It looks like the locking system has been shorted out." + to_chat(user, "It looks like the locking system has been shorted out.") return if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len)) locked = 0 - user << "\The [src] doesn't seem to have a locking mechanism." + to_chat(user, "\The [src] doesn't seem to have a locking mechanism.") return if(security_check_enabled && !src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return locked = !locked - user << "You [locked ? "lock" : "unlock"] \the [src] access panel." + to_chat(user, "You [locked ? "lock" : "unlock"] \the [src] access panel.") return - else if(istype(W,/obj/item/weapon/crowbar)) - + else if(W.is_crowbar()) if(!open && locked) - user << "The access panel is locked shut." + to_chat(user, "The access panel is locked shut.") return open = !open - user << "You [open ? "open" : "close"] the access panel." + to_chat(user, "You [open ? "open" : "close"] the access panel.") return if(open) - // Hacking. - if(istype(W,/obj/item/weapon/wirecutters) || istype(W,/obj/item/device/multitool)) + if(W.is_wirecutter() || istype(W, /obj/item/device/multitool)) if(open) wires.Interact(user) else - user << "You can't reach the wiring." + to_chat(user, "You can't reach the wiring.") return // Air tank. if(istype(W,/obj/item/weapon/tank)) //Todo, some kind of check for suits without integrated air supplies. if(air_supply) - user << "\The [src] already has a tank installed." + to_chat(user, "\The [src] already has a tank installed.") + return + + if(!user.unEquip(W)) return - if(!user.unEquip(W)) return air_supply = W W.forceMove(src) - user << "You slot [W] into [src] and tighten the connecting valve." + to_chat(user, "You slot [W] into [src] and tighten the connecting valve.") return // Check if this is a hardsuit upgrade or a modification. else if(istype(W,/obj/item/rig_module)) - if(istype(src.loc,/mob/living/carbon/human)) var/mob/living/carbon/human/H = src.loc if(H.back == src) - user << "You can't install a hardsuit module while the suit is being worn." + to_chat(user, "You can't install a hardsuit module while the suit is being worn.") return 1 - if(!installed_modules) installed_modules = list() + if(!installed_modules) + installed_modules = list() if(installed_modules.len) for(var/obj/item/rig_module/installed_mod in installed_modules) if(!installed_mod.redundant && istype(installed_mod,W)) - user << "The hardsuit already has a module of that class installed." + to_chat(user, "The hardsuit already has a module of that class installed.") return 1 var/obj/item/rig_module/mod = W - user << "You begin installing \the [mod] into \the [src]." + to_chat(user, "You begin installing \the [mod] into \the [src].") if(!do_after(user,40)) return if(!user || !W) return - if(!user.unEquip(mod)) return - user << "You install \the [mod] into \the [src]." + if(!user.unEquip(mod)) + return + to_chat(user, "You install \the [mod] into \the [src].") installed_modules |= mod mod.forceMove(src) mod.installed(src) @@ -94,27 +95,28 @@ else if(!cell && istype(W,/obj/item/weapon/cell)) - if(!user.unEquip(W)) return - user << "You jack \the [W] into \the [src]'s battery mount." + if(!user.unEquip(W)) + return + to_chat(user, "You jack \the [W] into \the [src]'s battery mount.") W.forceMove(src) src.cell = W return - else if(istype(W,/obj/item/weapon/wrench)) + else if(W.is_wrench()) if(!air_supply) - user << "There is not tank to remove." + to_chat(user, "There is not tank to remove.") return if(user.r_hand && user.l_hand) air_supply.forceMove(get_turf(user)) else user.put_in_hands(air_supply) - user << "You detach and remove \the [air_supply]." + to_chat(user, "You detach and remove \the [air_supply].") air_supply = null return - else if(istype(W,/obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) var/list/current_mounts = list() if(cell) current_mounts += "cell" @@ -127,7 +129,7 @@ if(istype(src.loc,/mob/living/carbon/human) && to_remove != "cell") var/mob/living/carbon/human/H = src.loc if(H.back == src) - user << "You can't remove an installed device while the hardsuit is being worn." + to_chat(user, "You can't remove an installed device while the hardsuit is being worn.") return switch(to_remove) @@ -135,7 +137,7 @@ if("cell") if(cell) - user << "You detatch \the [cell] from \the [src]'s battery mount." + to_chat(user, "You detatch \the [cell] from \the [src]'s battery mount.") for(var/obj/item/rig_module/module in installed_modules) module.deactivate() if(user.r_hand && user.l_hand) @@ -144,7 +146,7 @@ cell.forceMove(user.put_in_hands(cell)) cell = null else - user << "There is nothing loaded in that mount." + to_chat(user, "There is nothing loaded in that mount.") if("system module") @@ -155,7 +157,7 @@ possible_removals[module.name] = module if(!possible_removals.len) - user << "There are no installed modules to remove." + to_chat(user, "There are no installed modules to remove.") return var/removal_choice = input("Which module would you like to remove?") as null|anything in possible_removals @@ -163,7 +165,7 @@ return var/obj/item/rig_module/removed = possible_removals[removal_choice] - user << "You detatch \the [removed] from \the [src]." + to_chat(user, "You detatch \the [removed] from \the [src].") removed.forceMove(get_turf(src)) removed.removed() installed_modules -= removed @@ -192,5 +194,5 @@ req_one_access.Cut() locked = 0 subverted = 1 - user << "You short out the access protocol for the suit." + to_chat(user, "You short out the access protocol for the suit.") return 1 diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm index d71d7cd6fa..a9b0f34d73 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm @@ -32,11 +32,3 @@ SPECIES_VOX = 'icons/mob/species/vox/suit.dmi' ) -/obj/item/clothing/head/helmet/space/rig - phoronproof = 1 -/obj/item/clothing/gloves/gauntlets/rig - phoronproof = 1 -/obj/item/clothing/shoes/magboots/rig - phoronproof = 1 -/obj/item/clothing/suit/space/rig - phoronproof = 1 diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm index efdbea6476..27b97df92b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm @@ -47,11 +47,9 @@ suit_type = "alien" icon_state = "vox_rig" armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50) - item_flags = THICKMATERIAL + item_flags = THICKMATERIAL|PHORONGUARD siemens_coefficient = 0.2 - phoronproof = 1 offline_slowdown = 5 - slowdown = 2 allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) air_type = /obj/item/weapon/tank/vox @@ -64,7 +62,6 @@ /obj/item/clothing/head/helmet/space/rig/vox species_restricted = list(SPECIES_VOX) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - phoronproof = 1 /obj/item/clothing/shoes/magboots/rig/vox name = "talons" @@ -72,11 +69,9 @@ sprite_sheets = list( SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi' ) - phoronproof = 1 /obj/item/clothing/suit/space/rig/vox species_restricted = list(SPECIES_VOX) - phoronproof = 1 /obj/item/clothing/gloves/gauntlets/rig/vox siemens_coefficient = 0 @@ -84,14 +79,12 @@ sprite_sheets = list( SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi' ) - phoronproof = 1 /obj/item/weapon/rig/vox/carapace name = "dense alien control module" suit_type = "dense alien" armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50) emp_protection = 40 //change this to 30 if too high. - phoronproof = 1 req_access = list(access_syndicate) @@ -112,7 +105,6 @@ icon_state = "voxstealth_rig" armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 30, bio = 100, rad = 50) emp_protection = 40 //change this to 30 if too high. - phoronproof = 1 req_access = list(access_syndicate) diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 3965d57d4a..f88f057907 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -17,7 +17,6 @@ /obj/item/weapon/rig/combat/equipped - initial_modules = list( /obj/item/rig_module/mounted, /obj/item/rig_module/vision/thermal, @@ -26,4 +25,59 @@ /obj/item/rig_module/power_sink, /obj/item/rig_module/electrowarfare_suite, /obj/item/rig_module/chem_dispenser/combat - ) \ No newline at end of file + ) + +/obj/item/weapon/rig/combat/empty + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/electrowarfare_suite, + ) + +/obj/item/weapon/rig/military + name = "military hardsuit control module" + desc = "An austere hardsuit used by paramilitary groups and real soldiers alike." + icon_state = "military_rig" + suit_type = "military hardsuit" + armor = list(melee = 80, bullet = 70, laser = 55, energy = 15, bomb = 80, bio = 100, rad = 30) + slowdown = 1 + offline_slowdown = 3 + offline_vision_restriction = 1 + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \ + /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \ + /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit) + + chest_type = /obj/item/clothing/suit/space/rig/military + helm_type = /obj/item/clothing/head/helmet/space/rig/military + boot_type = /obj/item/clothing/shoes/magboots/rig/military + glove_type = /obj/item/clothing/gloves/gauntlets/rig/military + +/obj/item/clothing/head/helmet/space/rig/military + light_overlay = "helmet_light_dual_green" + species_restricted = list(SPECIES_HUMAN,SPECIES_PROMETHEAN) + +/obj/item/clothing/suit/space/rig/military + species_restricted = list(SPECIES_HUMAN,SPECIES_PROMETHEAN) + +/obj/item/clothing/shoes/magboots/rig/military + species_restricted = list(SPECIES_HUMAN,SPECIES_PROMETHEAN) + +/obj/item/clothing/gloves/gauntlets/rig/military + species_restricted = list(SPECIES_HUMAN,SPECIES_PROMETHEAN) + +/obj/item/weapon/rig/military/equipped + initial_modules = list( + /obj/item/rig_module/mounted/egun, + /obj/item/rig_module/vision/multi, + /obj/item/rig_module/grenade_launcher, + /obj/item/rig_module/ai_container, + /obj/item/rig_module/power_sink, + /obj/item/rig_module/electrowarfare_suite, + /obj/item/rig_module/chem_dispenser/combat, + ) + +/obj/item/weapon/rig/military/empty + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/electrowarfare_suite, + ) diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index 915c2bc698..33b4e07351 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -14,8 +14,8 @@ siemens_coefficient= 0.5 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) - allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \ - /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller) diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 85c2004058..918e5a3290 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -39,12 +39,12 @@ req_access = list(access_syndicate) - airtight = 0 - seal_delay = 5 //not being vaccum-proof has an upside I guess + airtight = 1 + seal_delay = 5 //Being straight out of a cyberpunk space movie has its perks. - helm_type = /obj/item/clothing/head/lightrig/hacker - chest_type = /obj/item/clothing/suit/lightrig/hacker - glove_type = /obj/item/clothing/gloves/gauntlets/lightrig/hacker + helm_type = /obj/item/clothing/head/helmet/space/rig/light/hacker + chest_type = /obj/item/clothing/suit/space/rig/light/hacker + glove_type = /obj/item/clothing/gloves/gauntlets/rig/light/hacker boot_type = /obj/item/clothing/shoes/lightrig/hacker initial_modules = list( @@ -57,19 +57,20 @@ ) //The cybersuit is not space-proof. It does however, have good siemens_coefficient values -/obj/item/clothing/head/lightrig/hacker - name = "HUD" +/obj/item/clothing/head/helmet/space/rig/light/hacker + name = "headgear" siemens_coefficient = 0.4 - flags = 0 + flags_inv = HIDEEARS -/obj/item/clothing/suit/lightrig/hacker +/obj/item/clothing/suit/space/rig/light/hacker siemens_coefficient = 0.4 /obj/item/clothing/shoes/lightrig/hacker siemens_coefficient = 0.4 - flags = NOSLIP //All the other rigs have magboots anyways, hopefully gives the hacker suit something more going for it. + step_volume_mod = 0.3 //Special sneaky cyber-soles, for infiltration. + flags = NOSLIP //They're not magboots, so they're not super good for exterior hull walking, BUT for interior infiltration they'll do swell. -/obj/item/clothing/gloves/gauntlets/lightrig/hacker +/obj/item/clothing/gloves/gauntlets/rig/light/hacker siemens_coefficient = 0 /obj/item/weapon/rig/light/ninja diff --git a/code/modules/clothing/spacesuits/rig/suits/pmc.dm b/code/modules/clothing/spacesuits/rig/suits/pmc.dm new file mode 100644 index 0000000000..7b609be4e8 --- /dev/null +++ b/code/modules/clothing/spacesuits/rig/suits/pmc.dm @@ -0,0 +1,124 @@ +/obj/item/clothing/head/helmet/space/rig/pmc + light_overlay = "helmet_light_dual" + +/obj/item/weapon/rig/pmc + name = "PMC hardsuit control module" + desc = "A suit worn by private military contractors. Armoured and space ready." + suit_type = "PMC" + icon_state = "pmc_commandergrey_rig" + + helm_type = /obj/item/clothing/head/helmet/space/rig/pmc + + req_access = list(access_cent_specops) + + armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 95) + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ + /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller) + +/obj/item/weapon/rig/pmc/commander + name = "PMC-C hardsuit control module" + desc = "A suit worn by private military contractors. Armoured and space ready." + suit_type = "PMC commander" + icon_state = "pmc_commandergrey_rig" + +/obj/item/weapon/rig/pmc/commander/grey/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/datajack, + ) + +/obj/item/weapon/rig/pmc/commander/green + icon_state = "pmc_commandergreen_rig" + +/obj/item/weapon/rig/pmc/commander/green/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/datajack, + ) + +/obj/item/weapon/rig/pmc/engineer + name = "PMC-E suit control module" + desc = "A suit worn by private military contractors. This one is setup for engineering. Armoured and space ready." + suit_type = "PMC engineer" + icon_state = "pmc_engineergrey_rig" + armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 100) + siemens_coefficient = 0 + +/obj/item/weapon/rig/pmc/engineer/grey/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/device/rcd + ) + +/obj/item/weapon/rig/pmc/engineer/green + icon_state = "pmc_engineergreen_rig" + +/obj/item/weapon/rig/pmc/engineer/green/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/device/rcd + ) + +/obj/item/weapon/rig/pmc/medical + name = "PMC-M suit control module" + desc = "A suit worn by private military contractors. This one is setup for medical. Armoured and space ready." + suit_type = "PMC medic" + icon_state = "pmc_medicalgrey_rig" + +/obj/item/weapon/rig/pmc/medical/grey/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/healthscanner, + /obj/item/rig_module/chem_dispenser/injector/advanced + ) + +/obj/item/weapon/rig/pmc/medical/green + icon_state = "pmc_medicalgreen_rig" + +/obj/item/weapon/rig/pmc/medical/green/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/healthscanner, + /obj/item/rig_module/chem_dispenser/injector/advanced + ) + +/obj/item/weapon/rig/pmc/security + name = "ERT-S suit control module" + desc = "A suit worn by private military contractors. This one is setup for security. Armoured and space ready." + suit_type = "PMC security" + icon_state = "pmc_securitygrey_rig" + +/obj/item/weapon/rig/pmc/security/grey/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/mounted/egun, + ) + +/obj/item/weapon/rig/pmc/security/green + icon_state = "pmc_securitygreen_rig" + +/obj/item/weapon/rig/pmc/security/green/equipped + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/mounted/egun, + ) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm index 58376d36a6..3b51d13053 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm @@ -30,8 +30,8 @@ /obj/item/weapon/rig/combat allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack) /obj/item/weapon/rig/ert - allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \ - /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack) /obj/item/weapon/rig/light/ninja diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index b5a9900081..400bd96b4b 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -6,6 +6,7 @@ name = "Space helmet" icon_state = "space" desc = "A special helmet designed for work in a hazardous, low-pressure environment." + flags = PHORONGUARD item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) @@ -16,7 +17,6 @@ siemens_coefficient = 0.9 species_restricted = list("exclude",SPECIES_DIONA) preserve_item = 1 - phoronproof = 1 flash_protection = FLASH_PROTECTION_MAJOR valid_accessory_slots = null @@ -55,7 +55,8 @@ w_class = ITEMSIZE_HUGE // So you can't fit this in your bag and be prepared at all times. gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 - item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL + flags = PHORONGUARD + item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | PHORONGUARD body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit) slowdown = 3 @@ -66,7 +67,6 @@ siemens_coefficient = 0.9 species_restricted = list("exclude",SPECIES_DIONA) preserve_item = 1 - phoronproof = 1 var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit. diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index 0fb184ad49..7a0af9c9d8 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -244,3 +244,62 @@ name = "heavy duty atmos voidsuit" armor = list(melee = 20, bullet = 5, laser = 20,energy = 15, bomb = 45, bio = 100, rad = 50) max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE + +//Exploration +/obj/item/clothing/head/helmet/space/void/exploration + name = "exploration voidsuit helmet" + desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments." + icon_state = "helm_explorer" + item_state = "helm_explorer" + item_state_slots = list(slot_r_hand_str = "syndicate-helm-black", slot_l_hand_str = "syndicate-helm-black") + armor = list(melee = 40, bullet = 15, laser = 25,energy = 35, bomb = 30, bio = 100, rad = 70) + light_overlay = "helmet_light_dual" //explorer_light + +/obj/item/clothing/suit/space/void/exploration + name = "exploration voidsuit" + desc = "A lightweight, radiation-resistant voidsuit, featuring the Explorer emblem on its chest plate. Designed for exploring unknown planetary environments." + icon_state = "void_explorer" + item_state_slots = list(slot_r_hand_str = "skrell_suit_black", slot_l_hand_str = "skrell_suit_black") + armor = list(melee = 40, bullet = 15, laser = 25,energy = 35, bomb = 30, bio = 100, rad = 70) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/healthanalyzer,/obj/item/device/gps,/obj/item/device/radio/beacon, \ + /obj/item/weapon/shovel,/obj/item/ammo_magazine,/obj/item/weapon/gun) + +/obj/item/clothing/head/helmet/space/void/exploration/alt + desc = "A radiation-resistant helmet retrofitted for exploring unknown planetary environments." + icon_state = "helm_explorer2" + item_state = "helm_explorer2" + item_state_slots = list(slot_r_hand_str = "mining_helm", slot_l_hand_str = "mining_helm") + +/obj/item/clothing/suit/space/void/exploration/alt + desc = "A lightweight, radiation-resistant voidsuit. Retrofitted for exploring unknown planetary environments." + icon_state = "void_explorer2" + item_state_slots = list(slot_r_hand_str = "skrell_suit_white", slot_l_hand_str = "skrell_suit_white") + +//Pilot +/obj/item/clothing/head/helmet/space/void/pilot + desc = "An atmos resistant helmet for space and planet exploration." + name = "pilot voidsuit helmet" + icon_state = "rig0_pilot" + item_state = "pilot_helm" + item_state_slots = list(slot_r_hand_str = "atmos_helm", slot_l_hand_str = "atmos_helm") + armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 50) + max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + light_overlay = "helmet_light_dual" + +/obj/item/clothing/suit/space/void/pilot + desc = "An atmos resistant voidsuit for space and planet exploration." + icon_state = "rig-pilot" + item_state_slots = list(slot_r_hand_str = "atmos_voidsuit", slot_l_hand_str = "atmos_voidsuit") + name = "pilot voidsuit" + armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 50) + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/briefcase/inflatable) + +/obj/item/clothing/head/helmet/space/void/pilot/alt + icon_state = "rig0_pilot2" + item_state = "pilot_helm2" + +/obj/item/clothing/suit/space/void/pilot/alt + desc = "An atmos resistant voidsuit for space." + icon_state = "rig-pilot2" + item_state = "rig-pilot2" \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index ef78d32f03..d755540b91 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -68,9 +68,9 @@ var/list/part_list = new for(var/obj/item/I in list(helmet,boots,tank,cooler)) part_list += "\a [I]" - user << "\The [src] has [english_list(part_list)] installed." + to_chat(user, "\The [src] has [english_list(part_list)] installed.") if(tank && in_range(src,user)) - user << "The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank]." + to_chat(user, "The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].") /obj/item/clothing/suit/space/void/refit_for_species(var/target_species) ..() @@ -95,23 +95,23 @@ if(helmet) if(H.head) - M << "You are unable to deploy your suit's helmet as \the [H.head] is in the way." + to_chat(M, "You are unable to deploy your suit's helmet as \the [H.head] is in the way.") else if (H.equip_to_slot_if_possible(helmet, slot_head)) - M << "Your suit's helmet deploys with a hiss." + to_chat(M, "Your suit's helmet deploys with a hiss.") helmet.canremove = 0 if(tank) if(H.s_store) //In case someone finds a way. - M << "Alarmingly, the valve on your suit's installed tank fails to engage." + to_chat(M, "Alarmingly, the valve on your suit's installed tank fails to engage.") else if (H.equip_to_slot_if_possible(tank, slot_s_store)) - M << "The valve on your suit's installed tank safely engages." + to_chat(M, "The valve on your suit's installed tank safely engages.") tank.canremove = 0 if(cooler) if(H.s_store) //Ditto - M << "Alarmingly, the cooling unit installed into your suit fails to deploy." + to_chat(M, "Alarmingly, the cooling unit installed into your suit fails to deploy.") else if (H.equip_to_slot_if_possible(cooler, slot_s_store)) - M << "Your suit's cooling unit deploys." + to_chat(M, "Your suit's cooling unit deploys.") cooler.canremove = 0 @@ -153,28 +153,31 @@ if(!istype(src.loc,/mob/living)) return if(!helmet) - usr << "There is no helmet installed." + to_chat(usr, "There is no helmet installed.") return var/mob/living/carbon/human/H = usr - if(!istype(H)) return - if(H.stat) return - if(H.wear_suit != src) return + if(!istype(H)) + return + if(H.stat) + return + if(H.wear_suit != src) + return if(H.head == helmet) - H << "You retract your suit helmet." + to_chat(H, "You retract your suit helmet.") helmet.canremove = 1 H.drop_from_inventory(helmet) helmet.forceMove(src) else if(H.head) - H << "You cannot deploy your helmet while wearing \the [H.head]." + to_chat(H, "You cannot deploy your helmet while wearing \the [H.head].") return if(H.equip_to_slot_if_possible(helmet, slot_head)) helmet.pickup(H) helmet.canremove = 0 - H << "You deploy your suit helmet, sealing you off from the world." + to_chat(H, "You deploy your suit helmet, sealing you off from the world.") helmet.update_light(H) /obj/item/clothing/suit/space/void/verb/eject_tank() @@ -186,7 +189,7 @@ if(!istype(src.loc,/mob/living)) return if(!tank && !cooler) - usr << "There is no tank or cooling unit inserted." + to_chat(usr, "There is no tank or cooling unit inserted.") return var/mob/living/carbon/human/H = usr @@ -202,7 +205,7 @@ else removing = cooler cooler = null - H << "You press the emergency release, ejecting \the [removing] from your suit." + to_chat(H, "You press the emergency release, ejecting \the [removing] from your suit.") removing.canremove = 1 H.drop_from_inventory(removing) @@ -214,75 +217,75 @@ return ..() if(istype(src.loc,/mob/living)) - user << "You cannot modify \the [src] while it is being worn." + to_chat(user, "You cannot modify \the [src] while it is being worn.") return - if(istype(W,/obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(helmet || boots || tank) var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank,cooler) if(!choice) return if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead - user << "You pop \the [tank] out of \the [src]'s storage compartment." + to_chat(user, "You pop \the [tank] out of \the [src]'s storage compartment.") tank.forceMove(get_turf(src)) playsound(src, W.usesound, 50, 1) src.tank = null else if(choice == cooler) - user << "You pop \the [cooler] out of \the [src]'s storage compartment." + to_chat(user, "You pop \the [cooler] out of \the [src]'s storage compartment.") cooler.forceMove(get_turf(src)) playsound(src, W.usesound, 50, 1) src.cooler = null else if(choice == helmet) - user << "You detatch \the [helmet] from \the [src]'s helmet mount." + to_chat(user, "You detatch \the [helmet] from \the [src]'s helmet mount.") helmet.forceMove(get_turf(src)) playsound(src, W.usesound, 50, 1) src.helmet = null else if(choice == boots) - user << "You detatch \the [boots] from \the [src]'s boot mounts." + to_chat(user, "You detatch \the [boots] from \the [src]'s boot mounts.") boots.forceMove(get_turf(src)) playsound(src, W.usesound, 50, 1) src.boots = null else - user << "\The [src] does not have anything installed." + to_chat(user, "\The [src] does not have anything installed.") return else if(istype(W,/obj/item/clothing/head/helmet/space)) if(helmet) - user << "\The [src] already has a helmet installed." + to_chat(user, "\The [src] already has a helmet installed.") else - user << "You attach \the [W] to \the [src]'s helmet mount." + to_chat(user, "You attach \the [W] to \the [src]'s helmet mount.") user.drop_item() W.forceMove(src) src.helmet = W return else if(istype(W,/obj/item/clothing/shoes/magboots)) if(boots) - user << "\The [src] already has magboots installed." + to_chat(user, "\The [src] already has magboots installed.") else - user << "You attach \the [W] to \the [src]'s boot mounts." + to_chat(user, "You attach \the [W] to \the [src]'s boot mounts.") user.drop_item() W.forceMove(src) boots = W return else if(istype(W,/obj/item/weapon/tank)) if(tank) - user << "\The [src] already has an airtank installed." + to_chat(user, "\The [src] already has an airtank installed.") else if(cooler) - user << "\The [src]'s suit cooling unit is in the way. Remove it first." + to_chat(user, "\The [src]'s suit cooling unit is in the way. Remove it first.") else if(istype(W,/obj/item/weapon/tank/phoron)) - user << "\The [W] cannot be inserted into \the [src]'s storage compartment." + to_chat(user, "\The [W] cannot be inserted into \the [src]'s storage compartment.") else - user << "You insert \the [W] into \the [src]'s storage compartment." + to_chat(user, "You insert \the [W] into \the [src]'s storage compartment.") user.drop_item() W.forceMove(src) tank = W return else if(istype(W,/obj/item/device/suit_cooling_unit)) if(cooler) - user << "\The [src] already has a suit cooling unit installed." + to_chat(user, "\The [src] already has a suit cooling unit installed.") else if(tank) - user << "\The [src]'s airtank is in the way. Remove it first." + to_chat(user, "\The [src]'s airtank is in the way. Remove it first.") else - user << "You insert \the [W] into \the [src]'s storage compartment." + to_chat(user, "You insert \the [W] into \the [src]'s storage compartment.") user.drop_item() W.forceMove(src) cooler = W diff --git a/code/modules/clothing/suits/aliens/seromi.dm b/code/modules/clothing/suits/aliens/seromi.dm index 62a013644f..4e3e081a7b 100644 --- a/code/modules/clothing/suits/aliens/seromi.dm +++ b/code/modules/clothing/suits/aliens/seromi.dm @@ -1,5 +1,5 @@ /obj/item/clothing/suit/storage/seromi/cloak - name = "black and orange cloak " + name = "broken cloak" desc = "It drapes over a Teshari's shoulders and closes at the neck with pockets convienently placed inside." icon = 'icons/mob/species/seromi/teshari_cloak.dmi' icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi' @@ -8,127 +8,232 @@ species_restricted = list(SPECIES_TESHARI) body_parts_covered = UPPER_TORSO|ARMS -/obj/item/clothing/suit/storage/seromi/cloak/black_orange +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_orange name = "black and orange cloak" icon_state = "tesh_cloak_bo" item_state = "tesh_cloak_bo" -/obj/item/clothing/suit/storage/seromi/cloak/black_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_grey name = "black and grey cloak" icon_state = "tesh_cloak_bg" item_state = "tesh_cloak_bg" -/obj/item/clothing/suit/storage/seromi/cloak/black_midgrey +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_midgrey name = "black and medium grey cloak" icon_state = "tesh_cloak_bmg" item_state = "tesh_cloak_bmg" -/obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_lightgrey name = "black and light grey cloak" icon_state = "tesh_cloak_blg" item_state = "tesh_cloak_blg" -/obj/item/clothing/suit/storage/seromi/cloak/black_white +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_white name = "black and white cloak" icon_state = "tesh_cloak_bw" item_state = "tesh_cloak_bw" -/obj/item/clothing/suit/storage/seromi/cloak/black_red +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_red name = "black and red cloak" icon_state = "tesh_cloak_br" item_state = "tesh_cloak_br" -/obj/item/clothing/suit/storage/seromi/cloak/black +/obj/item/clothing/suit/storage/seromi/cloak/standard/black name = "black cloak" icon_state = "tesh_cloak_bn" item_state = "tesh_cloak_bn" -/obj/item/clothing/suit/storage/seromi/cloak/black_yellow +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_yellow name = "black and yellow cloak" icon_state = "tesh_cloak_by" item_state = "tesh_cloak_by" -/obj/item/clothing/suit/storage/seromi/cloak/black_green +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_green name = "black and green cloak" icon_state = "tesh_cloak_bgr" item_state = "tesh_cloak_bgr" -/obj/item/clothing/suit/storage/seromi/cloak/black_blue +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_blue name = "black and blue cloak" icon_state = "tesh_cloak_bbl" item_state = "tesh_cloak_bbl" -/obj/item/clothing/suit/storage/seromi/cloak/black_purple +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_purple name = "black and purple cloak" icon_state = "tesh_cloak_bp" item_state = "tesh_cloak_bp" -/obj/item/clothing/suit/storage/seromi/cloak/black_pink +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_pink name = "black and pink cloak" icon_state = "tesh_cloak_bpi" item_state = "tesh_cloak_bpi" -/obj/item/clothing/suit/storage/seromi/cloak/black_brown +/obj/item/clothing/suit/storage/seromi/cloak/standard/black_brown name = "black and brown cloak" icon_state = "tesh_cloak_bbr" item_state = "tesh_cloak_bbr" -/obj/item/clothing/suit/storage/seromi/cloak/orange_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/orange_grey name = "orange and grey cloak" icon_state = "tesh_cloak_og" item_state = "tesh_cloak_og" -/obj/item/clothing/suit/storage/seromi/cloak/rainbow +/obj/item/clothing/suit/storage/seromi/cloak/standard/rainbow name = "rainbow cloak" icon_state = "tesh_cloak_rainbow" item_state = "tesh_cloak_rainbow" -/obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/lightgrey_grey name = "light grey and grey cloak" icon_state = "tesh_cloak_lgg" item_state = "tesh_cloak_lgg" -/obj/item/clothing/suit/storage/seromi/cloak/white_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/white_grey name = "white and grey cloak" icon_state = "tesh_cloak_wg" item_state = "tesh_cloak_wg" -/obj/item/clothing/suit/storage/seromi/cloak/red_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/red_grey name = "red and grey cloak" icon_state = "tesh_cloak_rg" item_state = "tesh_cloak_rg" -/obj/item/clothing/suit/storage/seromi/cloak/orange +/obj/item/clothing/suit/storage/seromi/cloak/standard/orange name = "orange cloak" icon_state = "tesh_cloak_on" item_state = "tesh_cloak_on" -/obj/item/clothing/suit/storage/seromi/cloak/yellow_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/yellow_grey name = "yellow and grey cloak" icon_state = "tesh_cloak_yg" item_state = "tesh_cloak_yg" -/obj/item/clothing/suit/storage/seromi/cloak/green_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/green_grey name = "green and grey cloak" icon_state = "tesh_cloak_gg" item_state = "tesh_cloak_gg" -/obj/item/clothing/suit/storage/seromi/cloak/blue_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/blue_grey name = "blue and grey cloak" icon_state = "tesh_cloak_blug" item_state = "tesh_cloak_blug" -/obj/item/clothing/suit/storage/seromi/cloak/purple_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/purple_grey name = "purple and grey cloak" icon_state = "tesh_cloak_pg" item_state = "tesh_cloak_pg" -/obj/item/clothing/suit/storage/seromi/cloak/pink_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/pink_grey name = "pink and grey cloak" icon_state = "tesh_cloak_pig" item_state = "tesh_cloak_pig" -/obj/item/clothing/suit/storage/seromi/cloak/brown_grey +/obj/item/clothing/suit/storage/seromi/cloak/standard/brown_grey name = "brown and grey cloak" icon_state = "tesh_cloak_brg" - item_state = "tesh_cloak_brg" \ No newline at end of file + item_state = "tesh_cloak_brg" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs + icon_override = 'icons/mob/species/seromi/deptcloak.dmi' + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/cargo + name = "Cargo cloak" + desc = "A soft Teshari cloak made for the Cargo department" + icon_state = "tesh_cloak_car" + item_state = "tesh_cloak_car" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/mining + name = "Mining cloak" + desc = "A soft Teshari cloak made for Mining" + icon_state = "tesh_cloak_mine" + item_state = "tesh_cloak_mine" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/command + name = "Command cloak" + desc = "A soft Teshari cloak made for the Command department" + icon_state = "tesh_cloak_comm" + item_state = "tesh_cloak_comm" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/ce + name = "Cheif Engineer's cloak" + desc = "A soft Teshari cloak made the Chief Engineer" + icon_state = "tesh_cloak_ce" + item_state = "tesh_cloak_ce" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/eningeer + name = "Engineering cloak" + desc = "A soft Teshari cloak made for the Engineering department" + icon_state = "tesh_cloak_engie" + item_state = "tesh_cloak_engie" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/atmos + name = "Atmos Tech cloak" + desc = "A soft Teshari cloak made for the Atmos Tech" + icon_state = "tesh_cloak_atmos" + item_state = "tesh_cloak_atmos" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/cmo + name = "Chief Medical Officer cloak" + desc = "A soft Teshari cloak made the Cheif Medical Officer" + icon_state = "tesh_cloak_cmo" + item_state = "tesh_cloak_cmo" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/medical + name = "Medical cloak" + desc = "A soft Teshari cloak made for the Medical department" + icon_state = "tesh_cloak_doc" + item_state = "tesh_cloak_doc" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/chemistry + name = "Chemistry cloak" + desc = "A soft Teshari cloak made for the Chemist" + icon_state = "tesh_cloak_chem" + item_state = "tesh_cloak_chem" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/viro + name = "Virologist cloak" + desc = "A soft Teshari cloak made for the Virologist" + icon_state = "tesh_cloak_viro" + item_state = "tesh_cloak_viro" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/para + name = "Paramedic cloak" + desc = "A soft Teshari cloak made for the Paramedic" + icon_state = "tesh_cloak_para" + item_state = "tesh_cloak_para" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/sci + name = "Scientist cloak" + desc = "A soft Teshari cloak made for the Science department" + icon_state = "tesh_cloak_sci" + item_state = "tesh_cloak_sci" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/robo + name = "Roboticist cloak" + desc = "A soft Teshari cloak made for the Roboticist" + icon_state = "tesh_cloak_robo" + item_state = "tesh_cloak_robo" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/sec + name = "Security cloak" + desc = "A soft Teshari cloak made for the Security department" + icon_state = "tesh_cloak_sec" + item_state = "tesh_cloak_sec" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/qm + name = "Quarter master's cloak" + desc = "A soft Teshari cloak made for the Quarter Master (Who is a real head btw)" + icon_state = "tesh_cloak_qm" + item_state = "tesh_cloak_qm" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/service + name = "Service cloak" + desc = "A soft Teshari cloak made for the Service department" + icon_state = "tesh_uniform_serv" + item_state = "tesh_uniform_serv" + +/obj/item/clothing/suit/storage/seromi/cloak/jobs/iaa + name = "Iaa cloak" + desc = "A soft Teshari cloak made for the Internal Affairs Agent" + icon_state = "tesh_uniform_iaa" + item_state = "tesh_uniform_iaa" \ No newline at end of file diff --git a/code/modules/clothing/suits/aliens/vox.dm b/code/modules/clothing/suits/aliens/vox.dm index b17939950c..b658aa0586 100644 --- a/code/modules/clothing/suits/aliens/vox.dm +++ b/code/modules/clothing/suits/aliens/vox.dm @@ -2,7 +2,7 @@ name = "rusted metal armor" desc = "A hodgepodge of various pieces of metal scrapped together into a rudimentary vox-shaped piece of armor." allowed = list(/obj/item/weapon/gun, /obj/item/weapon/tank) - armor = list(melee = 70, bullet = 30, laser = 20,energy = 5, bomb = 40, bio = 0, rad = 0) //Higher melee armor versus lower everything else. + armor = list(melee = 60, bullet = 30, laser = 30,energy = 5, bomb = 40, bio = 0, rad = 0) //Higher melee armor versus lower everything else. icon_state = "vox-scrap" icon_state = "vox-scrap" body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 32cb6551fe..4ac233529e 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -8,8 +8,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EYES siemens_coefficient = 0.9 - item_flags = THICKMATERIAL - phoronproof = 1 + item_flags = THICKMATERIAL | PHORONGUARD /obj/item/clothing/suit/bio_suit name = "bio suit" @@ -24,8 +23,7 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER siemens_coefficient = 0.9 - item_flags = THICKMATERIAL - phoronproof = 1 + item_flags = THICKMATERIAL | PHORONGUARD //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm new file mode 100644 index 0000000000..5c861da38d --- /dev/null +++ b/code/modules/clothing/suits/hooded.dm @@ -0,0 +1,182 @@ +// Hooded suits + +//Hoods for winter coats and chaplain hoodie etc + +/obj/item/clothing/suit/storage/hooded + var/obj/item/clothing/head/hood + var/hoodtype = null //so the chaplain hoodie or other hoodies can override this + var/hood_up = FALSE + var/toggleicon + action_button_name = "Toggle Hood" + +/obj/item/clothing/suit/storage/hooded/New() + toggleicon = "[initial(icon_state)]" + MakeHood() + ..() + +/obj/item/clothing/suit/storage/hooded/Destroy() + qdel(hood) + return ..() + +/obj/item/clothing/suit/storage/hooded/proc/MakeHood() + if(!hood) + var/obj/item/clothing/head/hood/H = new hoodtype(src) + hood = H + +/obj/item/clothing/suit/storage/hooded/ui_action_click() + ToggleHood() + +/obj/item/clothing/suit/storage/hooded/equipped(mob/user, slot) + if(slot != slot_wear_suit) + RemoveHood() + ..() + +/obj/item/clothing/suit/storage/hooded/proc/RemoveHood() + icon_state = toggleicon + hood_up = FALSE + hood.canremove = TRUE // This shouldn't matter anyways but just incase. + if(ishuman(hood.loc)) + var/mob/living/carbon/H = hood.loc + H.unEquip(hood, 1) + H.update_inv_wear_suit() + hood.forceMove(src) + +/obj/item/clothing/suit/storage/hooded/dropped() + RemoveHood() + +/obj/item/clothing/suit/storage/hooded/proc/ToggleHood() + if(!hood_up) + if(ishuman(loc)) + var/mob/living/carbon/human/H = src.loc + if(H.wear_suit != src) + to_chat(H, "You must be wearing [src] to put up the hood!") + return + if(H.head) + to_chat(H, "You're already wearing something on your head!") + return + else + H.equip_to_slot_if_possible(hood,slot_head,0,0,1) + hood_up = TRUE + hood.canremove = FALSE + icon_state = "[toggleicon]_t" + H.update_inv_wear_suit() + else + RemoveHood() + +/obj/item/clothing/suit/storage/hooded/carp_costume + name = "carp costume" + desc = "A costume made from 'synthetic' carp scales, it smells." + icon_state = "carp_casual" + item_state_slots = list(slot_r_hand_str = "carp_casual", slot_l_hand_str = "carp_casual") //Does not exist -S2- + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE //Space carp like space, so you should too + action_button_name = "Toggle Carp Hood" + hoodtype = /obj/item/clothing/head/hood/carp_hood + +/obj/item/clothing/suit/storage/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? + name = "corgi costume" + desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs." + icon_state = "ian" + item_state_slots = list(slot_r_hand_str = "ian", slot_l_hand_str = "ian") //Does not exist -S2- + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + action_button_name = "Toggle Ian Hood" + hoodtype = /obj/item/clothing/head/hood/ian_hood + +/obj/item/clothing/suit/storage/hooded/wintercoat + name = "winter coat" + desc = "A heavy jacket made from 'synthetic' animal furs." + icon_state = "coatwinter" + item_state_slots = list(slot_r_hand_str = "coatwinter", slot_l_hand_str = "coatwinter") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + +/obj/item/clothing/suit/storage/hooded/wintercoat/captain + name = "colony director's winter coat" + icon_state = "coatcaptain" + item_state_slots = list(slot_r_hand_str = "coatcaptain", slot_l_hand_str = "coatcaptain") + armor = list(melee = 20, bullet = 15, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter/captain + +/obj/item/clothing/suit/storage/hooded/wintercoat/security + name = "security winter coat" + icon_state = "coatsecurity" + item_state_slots = list(slot_r_hand_str = "coatsecurity", slot_l_hand_str = "coatsecurity") + armor = list(melee = 25, bullet = 20, laser = 20, energy = 15, bomb = 20, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter/security + +/obj/item/clothing/suit/storage/hooded/wintercoat/medical + name = "medical winter coat" + icon_state = "coatmedical" + item_state_slots = list(slot_r_hand_str = "coatmedical", slot_l_hand_str = "coatmedical") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter/medical + +/obj/item/clothing/suit/storage/hooded/wintercoat/science + name = "science winter coat" + icon_state = "coatscience" + item_state_slots = list(slot_r_hand_str = "coatscience", slot_l_hand_str = "coatscience") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter/science + +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering + name = "engineering winter coat" + icon_state = "coatengineer" + item_state_slots = list(slot_r_hand_str = "coatengineer", slot_l_hand_str = "coatengineer") + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) + hoodtype = /obj/item/clothing/head/hood/winter/engineering + +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos + name = "atmospherics winter coat" + icon_state = "coatatmos" + item_state_slots = list(slot_r_hand_str = "coatatmos", slot_l_hand_str = "coatatmos") + hoodtype = /obj/item/clothing/head/hood/winter/engineering/atmos + +/obj/item/clothing/suit/storage/hooded/wintercoat/hydro + name = "hydroponics winter coat" + icon_state = "coathydro" + item_state_slots = list(slot_r_hand_str = "coathydro", slot_l_hand_str = "coathydro") + hoodtype = /obj/item/clothing/head/hood/winter/hydro + +/obj/item/clothing/suit/storage/hooded/wintercoat/cargo + name = "cargo winter coat" + icon_state = "coatcargo" + item_state_slots = list(slot_r_hand_str = "coatcargo", slot_l_hand_str = "coatcargo") + hoodtype = /obj/item/clothing/head/hood/winter/cargo + +/obj/item/clothing/suit/storage/hooded/wintercoat/miner + name = "mining winter coat" + icon_state = "coatminer" + item_state_slots = list(slot_r_hand_str = "coatminer", slot_l_hand_str = "coatminer") + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/hood/winter/miner + +/obj/item/clothing/suit/storage/hooded/explorer + name = "explorer suit" + desc = "An armoured suit for exploring harsh environments." + icon_state = "explorer" + item_state = "explorer" + flags = THICKMATERIAL + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + hoodtype = /obj/item/clothing/head/hood/explorer + siemens_coefficient = 0.9 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) // Inferior to sec vests in bullet/laser but better for environmental protection. + allowed = list( + /obj/item/device/flashlight, + /obj/item/weapon/gun, + /obj/item/ammo_magazine, + /obj/item/weapon/melee, + /obj/item/weapon/material/knife, + /obj/item/weapon/tank, + /obj/item/device/radio, + /obj/item/weapon/pickaxe + ) \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 182449b765..223fdbce8b 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -160,7 +160,7 @@ icon_state = "hazard" blood_overlay_type = "armor" allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, - /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency/oxygen, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering) body_parts_covered = UPPER_TORSO diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 189ef976c2..eeca9d220b 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -86,40 +86,6 @@ allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash) flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER -/*/obj/item/clothing/suit/wcoat - name = "waistcoat" - desc = "For some classy, murderous fun." - icon_state = "vest" - item_state_slots = list(slot_r_hand_str = "wcoat", slot_l_hand_str = "wcoat") - blood_overlay_type = "armor" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/suit/wcoat/red - name = "red waistcoat" - icon_state = "red_waistcoat" - -/obj/item/clothing/suit/wcoat/grey - name = "grey waistcoat" - icon_state = "grey_waistcoat" - -/obj/item/clothing/suit/wcoat/brown - name = "brown waistcoat" - icon_state = "brown_waistcoat" - -/obj/item/clothing/suit/wcoat/swvest - name = "black sweatervest" - desc = "A sleeveless sweater. Wear this if you don't want your arms to be warm, or if you're a nerd." - icon_state = "sweatervest" - -/obj/item/clothing/suit/wcoat/swvest/blue - name = "blue sweatervest" - icon_state = "sweatervest_blue" - -/obj/item/clothing/suit/wcoat/swvest/red - name = "red sweatervest" - icon_state = "sweatervest_red" -*/ /obj/item/clothing/suit/storage/apron/overalls name = "coveralls" desc = "A set of denim overalls." @@ -628,203 +594,6 @@ obj/item/clothing/suit/storage/toggle/peacoat body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER -/obj/item/clothing/suit/storage/hooded/carp_costume - name = "carp costume" - desc = "A costume made from 'synthetic' carp scales, it smells." - icon_state = "carp_casual" - item_state_slots = list(slot_r_hand_str = "carp_casual", slot_l_hand_str = "carp_casual") //Does not exist -S2- - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE //Space carp like space, so you should too - hooded = 1 - action_button_name = "Toggle Carp Hood" - hoodtype = /obj/item/clothing/head/carp_hood - -/obj/item/clothing/head/carp_hood - name = "carp hood" - desc = "A hood attached to a carp costume." - icon_state = "carp_casual" - item_state_slots = list(slot_r_hand_str = "carp_casual", slot_l_hand_str = "carp_casual") //Does not exist -S2- - body_parts_covered = HEAD - cold_protection = HEAD - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/suit/storage/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? - name = "corgi costume" - desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs." - icon_state = "ian" - item_state_slots = list(slot_r_hand_str = "ian", slot_l_hand_str = "ian") //Does not exist -S2- - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - //cold_protection = CHEST|GROIN|ARMS - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - hooded = 1 - action_button_name = "Toggle Ian Hood" - hoodtype = /obj/item/clothing/head/ian_hood - -/obj/item/clothing/head/ian_hood - name = "corgi hood" - desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits." - icon_state = "ian" - item_state_slots = list(slot_r_hand_str = "ian", slot_l_hand_str = "ian") //Does not exist -S2- - body_parts_covered = HEAD - //cold_protection = HEAD - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/storage/hooded/wintercoat - name = "winter coat" - desc = "A heavy jacket made from 'synthetic' animal furs." - icon_state = "coatwinter" - item_state_slots = list(slot_r_hand_str = "coatwinter", slot_l_hand_str = "coatwinter") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - hooded = 1 - hoodtype = /obj/item/clothing/head/hood/winter - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - -/obj/item/clothing/head/hood/winter - name = "winter hood" - desc = "A hood attached to a heavy winter jacket." - icon_state = "generic_hood" - body_parts_covered = HEAD - cold_protection = HEAD - flags_inv = HIDEEARS | BLOCKHAIR - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/suit/storage/hooded/wintercoat/captain - name = "colony director's winter coat" - icon_state = "coatcaptain" - item_state_slots = list(slot_r_hand_str = "coatcaptain", slot_l_hand_str = "coatcaptain") - armor = list(melee = 20, bullet = 15, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) - hoodtype = /obj/item/clothing/head/hood/winter/captain - -/obj/item/clothing/head/hood/winter/captain - name = "colony director's winter hood" - armor = list(melee = 20, bullet = 15, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/hooded/wintercoat/security - name = "security winter coat" - icon_state = "coatsecurity" - item_state_slots = list(slot_r_hand_str = "coatsecurity", slot_l_hand_str = "coatsecurity") - armor = list(melee = 25, bullet = 20, laser = 20, energy = 15, bomb = 20, bio = 0, rad = 0) - hoodtype = /obj/item/clothing/head/hood/winter/security - -/obj/item/clothing/head/hood/winter/security - name = "security winter hood" - armor = list(melee = 25, bullet = 20, laser = 20, energy = 15, bomb = 20, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/hooded/wintercoat/medical - name = "medical winter coat" - icon_state = "coatmedical" - item_state_slots = list(slot_r_hand_str = "coatmedical", slot_l_hand_str = "coatmedical") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) - hoodtype = /obj/item/clothing/head/hood/winter/medical - -/obj/item/clothing/head/hood/winter/medical - name = "medical winter hood" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) - -/obj/item/clothing/suit/storage/hooded/wintercoat/science - name = "science winter coat" - icon_state = "coatscience" - item_state_slots = list(slot_r_hand_str = "coatscience", slot_l_hand_str = "coatscience") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - hoodtype = /obj/item/clothing/head/hood/winter/science - -/obj/item/clothing/head/hood/winter/science - name = "science winter hood" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering - name = "engineering winter coat" - icon_state = "coatengineer" - item_state_slots = list(slot_r_hand_str = "coatengineer", slot_l_hand_str = "coatengineer") - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) - hoodtype = /obj/item/clothing/head/hood/winter/engineering - -/obj/item/clothing/head/hood/winter/engineering - name = "engineering winter hood" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) - -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos - name = "atmospherics winter coat" - icon_state = "coatatmos" - item_state_slots = list(slot_r_hand_str = "coatatmos", slot_l_hand_str = "coatatmos") - hoodtype = /obj/item/clothing/head/hood/winter/engineering/atmos - -/obj/item/clothing/head/hood/winter/engineering/atmos - name = "atmospherics winter hood" - -/obj/item/clothing/suit/storage/hooded/wintercoat/hydro - name = "hydroponics winter coat" - icon_state = "coathydro" - item_state_slots = list(slot_r_hand_str = "coathydro", slot_l_hand_str = "coathydro") - hoodtype = /obj/item/clothing/head/hood/winter/hydro - -/obj/item/clothing/head/hood/winter/hydro - name = "hydroponics winter hood" - -/obj/item/clothing/suit/storage/hooded/wintercoat/cargo - name = "cargo winter coat" - icon_state = "coatcargo" - item_state_slots = list(slot_r_hand_str = "coatcargo", slot_l_hand_str = "coatcargo") - hoodtype = /obj/item/clothing/head/hood/winter/cargo - -/obj/item/clothing/head/hood/winter/cargo - name = "cargo winter hood" - -/obj/item/clothing/suit/storage/hooded/wintercoat/miner - name = "mining winter coat" - icon_state = "coatminer" - item_state_slots = list(slot_r_hand_str = "coatminer", slot_l_hand_str = "coatminer") - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - hoodtype = /obj/item/clothing/head/hood/winter/miner - -/obj/item/clothing/head/hood/winter/miner - name = "mining winter hood" - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/hooded/explorer - name = "explorer suit" - desc = "An armoured suit for exploring harsh environments." - icon_state = "explorer" - item_state = "explorer" - flags = THICKMATERIAL - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - hooded = TRUE - hoodtype = /obj/item/clothing/head/hood/explorer - siemens_coefficient = 0.9 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) // Inferior to sec vests in bullet/laser but better for environmental protection. - allowed = list( - /obj/item/device/flashlight, - /obj/item/weapon/gun, - /obj/item/ammo_magazine, - /obj/item/weapon/melee, - /obj/item/weapon/material/knife, - /obj/item/weapon/tank, - /obj/item/device/radio, - /obj/item/weapon/pickaxe - ) - -/obj/item/clothing/head/hood/explorer - name = "explorer hood" - desc = "An armoured hood for exploring harsh environments." - icon_state = "explorer" - brightness_on = 3 // VOREStation Edit - Keep hood light for now - TODO Drain power - body_parts_covered = HEAD - cold_protection = HEAD - flags = THICKMATERIAL - flags_inv = HIDEEARS | BLOCKHAIR - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.9 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) - /obj/item/clothing/suit/varsity name = "black varsity jacket" desc = "A favorite of jocks everywhere from Sol to Nyx." diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index ca630dae77..2f97ce79eb 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -8,7 +8,7 @@ pockets.max_storage_space = ITEMSIZE_COST_SMALL * 2 /obj/item/clothing/suit/storage/Destroy() - qdel_null(pockets) + QDEL_NULL(pockets) return ..() /obj/item/clothing/suit/storage/attack_hand(mob/user as mob) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm deleted file mode 100644 index c3c9a790b6..0000000000 --- a/code/modules/clothing/suits/toggles.dm +++ /dev/null @@ -1,63 +0,0 @@ -//Hoods for winter coats and chaplain hoodie etc - -/obj/item/clothing/suit/storage/hooded - var/obj/item/clothing/head/hood - var/hoodtype = null //so the chaplain hoodie or other hoodies can override this - var/suittoggled = 0 - var/hooded = 0 - var/toggleicon - action_button_name = "Toggle Hood" - -/obj/item/clothing/suit/storage/hooded/New() - toggleicon = "[initial(icon_state)]" - MakeHood() - ..() - -/obj/item/clothing/suit/storage/hooded/Destroy() - qdel(hood) - return ..() - -/obj/item/clothing/suit/storage/hooded/proc/MakeHood() - if(!hood) - var/obj/item/clothing/head/hood/winter/W = new hoodtype(src) - hood = W - -/obj/item/clothing/suit/storage/hooded/ui_action_click() - ToggleHood() - -/obj/item/clothing/suit/storage/hooded/equipped(mob/user, slot) - if(slot != slot_wear_suit) - RemoveHood() - ..() - -/obj/item/clothing/suit/storage/hooded/proc/RemoveHood() - icon_state = toggleicon - suittoggled = 0 - hood.canremove = TRUE // This shouldn't matter anyways but just incase. - if(ishuman(hood.loc)) - var/mob/living/carbon/H = hood.loc - H.unEquip(hood, 1) - H.update_inv_wear_suit() - hood.forceMove(src) - -/obj/item/clothing/suit/storage/hooded/dropped() - RemoveHood() - -/obj/item/clothing/suit/storage/hooded/proc/ToggleHood() - if(!suittoggled) - if(ishuman(loc)) - var/mob/living/carbon/human/H = src.loc - if(H.wear_suit != src) - to_chat(H, "You must be wearing [src] to put up the hood!") - return - if(H.head) - to_chat(H, "You're already wearing something on your head!") - return - else - H.equip_to_slot_if_possible(hood,slot_head,0,0,1) - suittoggled = 1 - hood.canremove = FALSE - icon_state = "[toggleicon]_t" - H.update_inv_wear_suit() - else - RemoveHood() \ No newline at end of file diff --git a/code/modules/clothing/under/xenos/seromi.dm b/code/modules/clothing/under/xenos/seromi.dm index 9d6598a517..2c3d550183 100644 --- a/code/modules/clothing/under/xenos/seromi.dm +++ b/code/modules/clothing/under/xenos/seromi.dm @@ -34,6 +34,7 @@ icon_state = "seromi_rainbow" /obj/item/clothing/under/seromi/undercoat + name = "Undercoat" desc = "A Teshari traditional garb, with a modern twist! Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!" icon = 'icons/mob/species/seromi/teshari_uniform.dmi' icon_override = 'icons/mob/species/seromi/teshari_uniform.dmi' @@ -41,127 +42,244 @@ item_state = "tesh_uniform_bo" body_parts_covered = UPPER_TORSO|LOWER_TORSO -/obj/item/clothing/under/seromi/undercoat/black_orange +/obj/item/clothing/under/seromi/undercoat/standard/black_orange name = "black and orange undercoat" icon_state = "tesh_uniform_bo" item_state = "tesh_uniform_bo" -/obj/item/clothing/under/seromi/undercoat/black_grey +/obj/item/clothing/under/seromi/undercoat/standard/black_grey name = "black and grey undercoat" icon_state = "tesh_uniform_bg" item_state = "tesh_uniform_bg" -/obj/item/clothing/under/seromi/undercoat/black_midgrey +/obj/item/clothing/under/seromi/undercoat/standard/black_midgrey name = "black and medium grey undercoat" icon_state = "tesh_uniform_bmg" item_state = "tesh_uniform_bmg" -/obj/item/clothing/under/seromi/undercoat/black_lightgrey +/obj/item/clothing/under/seromi/undercoat/standard/black_lightgrey name = "black and light grey undercoat" icon_state = "tesh_uniform_blg" item_state = "tesh_uniform_blg" -/obj/item/clothing/under/seromi/undercoat/black_white +/obj/item/clothing/under/seromi/undercoat/standard/black_white name = "black and white undercoat" icon_state = "tesh_uniform_bw" item_state = "tesh_uniform_bw" -/obj/item/clothing/under/seromi/undercoat/black_red +/obj/item/clothing/under/seromi/undercoat/standard/black_red name = "black and red undercoat" icon_state = "tesh_uniform_br" item_state = "tesh_uniform_br" -/obj/item/clothing/under/seromi/undercoat/black +/obj/item/clothing/under/seromi/undercoat/standard/black name = "black undercoat" icon_state = "tesh_uniform_bn" item_state = "tesh_uniform_bn" -/obj/item/clothing/under/seromi/undercoat/black_yellow +/obj/item/clothing/under/seromi/undercoat/standard/black_yellow name = "black and yellow undercoat" icon_state = "tesh_uniform_by" item_state = "tesh_uniform_by" -/obj/item/clothing/under/seromi/undercoat/black_green +/obj/item/clothing/under/seromi/undercoat/standard/black_green name = "black and green undercoat" icon_state = "tesh_uniform_bgr" item_state = "tesh_uniform_bgr" -/obj/item/clothing/under/seromi/undercoat/black_blue +/obj/item/clothing/under/seromi/undercoat/standard/black_blue name = "black and blue undercoat" icon_state = "tesh_uniform_bbl" item_state = "tesh_uniform_bbl" -/obj/item/clothing/under/seromi/undercoat/black_purple +/obj/item/clothing/under/seromi/undercoat/standard/black_purple name = "black and purple undercoat" icon_state = "tesh_uniform_bp" item_state = "tesh_uniform_bp" -/obj/item/clothing/under/seromi/undercoat/black_pink +/obj/item/clothing/under/seromi/undercoat/standard/black_pink name = "black and pink undercoat" icon_state = "tesh_uniform_bpi" item_state = "tesh_uniform_bpi" -/obj/item/clothing/under/seromi/undercoat/black_brown +/obj/item/clothing/under/seromi/undercoat/standard/black_brown name = "black and brown undercoat" icon_state = "tesh_uniform_bbr" item_state = "tesh_uniform_bbr" -/obj/item/clothing/under/seromi/undercoat/orange_grey +/obj/item/clothing/under/seromi/undercoat/standard/orange_grey name = "orange and grey undercoat" icon_state = "tesh_uniform_og" item_state = "tesh_uniform_og" -/obj/item/clothing/under/seromi/undercoat/rainbow +/obj/item/clothing/under/seromi/undercoat/standard/rainbow name = "rainbow undercoat" icon_state = "tesh_uniform_rainbow" item_state = "tesh_uniform_rainbow" -/obj/item/clothing/under/seromi/undercoat/lightgrey_grey +/obj/item/clothing/under/seromi/undercoat/standard/lightgrey_grey name = "light grey and grey undercoat" icon_state = "tesh_uniform_lgg" item_state = "tesh_uniform_lgg" -/obj/item/clothing/under/seromi/undercoat/white_grey +/obj/item/clothing/under/seromi/undercoat/standard/white_grey name = "white and grey undercoat" icon_state = "tesh_uniform_wg" item_state = "tesh_uniform_wg" -/obj/item/clothing/under/seromi/undercoat/red_grey +/obj/item/clothing/under/seromi/undercoat/standard/red_grey name = "red and grey undercoat" icon_state = "tesh_uniform_rg" item_state = "tesh_uniform_rg" -/obj/item/clothing/under/seromi/undercoat/orange +/obj/item/clothing/under/seromi/undercoat/standard/orange name = "orange undercoat" icon_state = "tesh_uniform_on" item_state = "tesh_uniform_on" -/obj/item/clothing/under/seromi/undercoat/yellow_grey +/obj/item/clothing/under/seromi/undercoat/standard/yellow_grey name = "yellow and grey undercoat" icon_state = "tesh_uniform_yg" item_state = "tesh_uniform_yg" -/obj/item/clothing/under/seromi/undercoat/green_grey +/obj/item/clothing/under/seromi/undercoat/standard/green_grey name = "green and grey undercoat" icon_state = "tesh_uniform_gg" item_state = "tesh_uniform_gg" -/obj/item/clothing/under/seromi/undercoat/blue_grey +/obj/item/clothing/under/seromi/undercoat/standard/blue_grey name = "blue and grey undercoat" icon_state = "tesh_uniform_blug" item_state = "tesh_uniform_blug" -/obj/item/clothing/under/seromi/undercoat/purple_grey +/obj/item/clothing/under/seromi/undercoat/standard/purple_grey name = "purple and grey undercoat" icon_state = "tesh_uniform_pg" item_state = "tesh_uniform_pg" -/obj/item/clothing/under/seromi/undercoat/pink_grey +/obj/item/clothing/under/seromi/undercoat/standard/pink_grey name = "pink and grey undercoat" icon_state = "tesh_uniform_pig" item_state = "tesh_uniform_pig" -/obj/item/clothing/under/seromi/undercoat/brown_grey +/obj/item/clothing/under/seromi/undercoat/standard/brown_grey name = "brown and grey undercoat" icon_state = "tesh_uniform_brg" - item_state = "tesh_uniform_brg" \ No newline at end of file + item_state = "tesh_uniform_brg" + +/obj/item/clothing/under/seromi/undercoat/jobs + icon_override = 'icons/mob/species/seromi/deptjacket.dmi' + +/obj/item/clothing/under/seromi/undercoat/jobs/cargo + name = "Cargo undercoat" + desc = "A traditional Teshari garb made for the Cargo department" + icon_state = "tesh_uniform_car" + item_state = "tesh_uniform_car" + +/obj/item/clothing/under/seromi/undercoat/jobs/mining + name = "Mining undercoat" + desc = "A traditional Teshari garb made for Mining" + icon_state = "tesh_uniform_mine" + item_state = "tesh_uniform_mine" + +/obj/item/clothing/under/seromi/undercoat/jobs/command + name = "Command undercoat" + desc = "A traditional Teshari garb made for the Command department" + icon_state = "tesh_uniform_comm" + item_state = "tesh_uniform_comm" + +/obj/item/clothing/under/seromi/undercoat/jobs/command_g + name = "Command undercoat (gold buttons)" + desc = "A traditional Teshari garb made for the Command department" + icon_state = "tesh_uniform_comm_g" + item_state = "tesh_uniform_comm_g" + +/obj/item/clothing/under/seromi/undercoat/jobs/ce + name = "Cheif Engineer's undercoat" + desc = "A traditional Teshari garb made for the Chief Engineer" + icon_state = "tesh_uniform_ce" + item_state = "tesh_uniform_ce" + +/obj/item/clothing/under/seromi/undercoat/jobs/ce_w + name = "Cheif Engineer's undercoat (white)" + desc = "A traditional Teshari garb made for the department" + icon_state = "tesh_uniform_ce_w" + item_state = "tesh_uniform_ce_w" + +/obj/item/clothing/under/seromi/undercoat/jobs/engineer + name = "Engineering undercoat" + desc = "A traditional Teshari garb made for the Engineering department" + icon_state = "tesh_uniform_engie" + item_state = "tesh_uniform_engie" + +/obj/item/clothing/under/seromi/undercoat/jobs/atmos + name = "Atmos Tech undercoat" + desc = "A traditional Teshari garb made for the Atmos Tech" + icon_state = "tesh_uniform_atmos" + item_state = "tesh_uniform_atmos" + +/obj/item/clothing/under/seromi/undercoat/jobs/cmo + name = "Chief Medical Officer undercoat" + desc = "A traditional Teshari garb made for the Cheif Medical Officer" + icon_state = "tesh_uniform_cmo" + item_state = "tesh_uniform_cmo" + +/obj/item/clothing/under/seromi/undercoat/jobs/medical + name = "Medical undercoat" + desc = "A traditional Teshari garb made for the Medical department" + icon_state = "tesh_uniform_doc" + item_state = "tesh_uniform_doc" + +/obj/item/clothing/under/seromi/undercoat/jobs/chemistry + name = "Chemistry undercoat" + desc = "A traditional Teshari garb made for the Chemist" + icon_state = "tesh_uniform_chem" + item_state = "tesh_uniform_chem" + +/obj/item/clothing/under/seromi/undercoat/jobs/viro + name = "Virologist undercoat" + desc = "A traditional Teshari garb made for the Virologist" + icon_state = "tesh_uniform_viro" + item_state = "tesh_uniform_viro" + +/obj/item/clothing/under/seromi/undercoat/jobs/para + name = "Paramedic undercoat" + desc = "A traditional Teshari garb made for the Paramedic" + icon_state = "tesh_uniform_para" + item_state = "tesh_uniform_para" + +/obj/item/clothing/under/seromi/undercoat/jobs/sci + name = "Scientist undercoat" + desc = "A traditional Teshari garb made for the Science department" + icon_state = "tesh_uniform_sci" + item_state = "tesh_uniform_sci" + +/obj/item/clothing/under/seromi/undercoat/jobs/robo + name = "Roboticist undercoat" + desc = "A traditional Teshari garb made for the Roboticist" + icon_state = "tesh_uniform_robo" + item_state = "tesh_uniform_robo" + +/obj/item/clothing/under/seromi/undercoat/jobs/sec + name = "Security undercoat" + desc = "A traditional Teshari garb made for the Security department" + icon_state = "tesh_uniform_sec" + item_state = "tesh_uniform_sec" + +/obj/item/clothing/under/seromi/undercoat/jobs/qm + name = "Quarter master's undercoat" + desc = "A traditional Teshari garb made for the Quarter Master (Who is a real head btw)" + icon_state = "tesh_uniform_qm" + item_state = "tesh_uniform_qm" + +/obj/item/clothing/under/seromi/undercoat/jobs/service + name = "Service undercoat" + desc = "A traditional Teshari garb made for the Service department" + icon_state = "tesh_uniform_serv" + item_state = "tesh_uniform_serv" + +/obj/item/clothing/under/seromi/undercoat/jobs/iaa + name = "IAA undercoat" + desc = "A traditional Teshari garb made for the Internal Affairs Agent" + icon_state = "tesh_uniform_iaa" + item_state = "tesh_uniform_iaa" diff --git a/code/modules/clothing/under/xenos/vox.dm b/code/modules/clothing/under/xenos/vox.dm index 0997c5fa93..ecbc618061 100644 --- a/code/modules/clothing/under/xenos/vox.dm +++ b/code/modules/clothing/under/xenos/vox.dm @@ -1,9 +1,8 @@ /obj/item/clothing/under/vox has_sensor = 0 species_restricted = list(SPECIES_VOX) - valid_accessory_slots = "vox" - restricted_accessory_slots = "vox" - phoronproof = 1 + starting_accessories = list(/obj/item/clothing/accessory/storage/vox) // Dont' start with a backback, so free webbing + flags = PHORONGUARD /obj/item/clothing/under/vox/vox_casual name = "alien clothing" @@ -23,7 +22,8 @@ name = "alien mesh" desc = "An alien mesh. Seems to be made up mostly of pockets and writhing flesh." icon_state = "webbing-vox" - slot = "vox" + + flags = PHORONGUARD slots = 3 diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 0c54df0397..d45555f40d 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -61,7 +61,7 @@ data["bloodsamp_desc"] = (bloodsamp ? (bloodsamp.desc ? bloodsamp.desc : "No information on record.") : "") data["lidstate"] = closed - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) ui = new(user, src, ui_key, "dnaforensics.tmpl", "QuikScan DNA Analyzer", 540, 326) ui.set_initial_data(data) diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm index 200c3c8320..507a516981 100644 --- a/code/modules/economy/Accounts_DB.dm +++ b/code/modules/economy/Accounts_DB.dm @@ -53,7 +53,7 @@ O.loc = src held_card = O - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) attack_hand(user) @@ -107,7 +107,7 @@ if (accounts.len > 0) data["accounts"] = accounts - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) ui.set_initial_data(data) @@ -117,7 +117,7 @@ if(..()) return 1 - var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(usr, src, "main") if(href_list["choice"]) switch(href_list["choice"]) diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index febb412879..9ef7a3f871 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -166,7 +166,7 @@ -/obj/machinery/cash_register/attackby(obj/O as obj, user as mob) +/obj/machinery/cash_register/attackby(obj/item/O as obj, user as mob) // Check for a method of paying (ID, PDA, e-wallet, cash, ect.) var/obj/item/weapon/card/id/I = O.GetID() if(I) @@ -188,8 +188,8 @@ scan_cash(SC) else if(istype(O, /obj/item/weapon/card/emag)) return ..() - else if(istype(O, /obj/item/weapon/wrench)) - var/obj/item/weapon/wrench/W = O + else if(O.is_wrench()) + var/obj/item/weapon/tool/wrench/W = O toggle_anchors(W, user) // Not paying: Look up price and add it to transaction_amount else @@ -479,7 +479,7 @@ usr << "The cash box is locked." -/obj/machinery/cash_register/proc/toggle_anchors(obj/item/weapon/wrench/W, mob/user) +/obj/machinery/cash_register/proc/toggle_anchors(obj/item/weapon/tool/wrench/W, mob/user) if(manipulating) return manipulating = 1 if(!anchored) diff --git a/code/modules/events/shipping_error.dm b/code/modules/events/shipping_error.dm index 725c6a834a..6b0924b6f7 100644 --- a/code/modules/events/shipping_error.dm +++ b/code/modules/events/shipping_error.dm @@ -1,6 +1,6 @@ /datum/event/shipping_error/start() var/datum/supply_order/O = new /datum/supply_order() O.ordernum = supply_controller.ordernum - O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)] - O.orderedby = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN) + O.object = supply_controller.supply_pack[pick(supply_controller.supply_pack)] + O.ordered_by = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN) supply_controller.shoppinglist += O \ No newline at end of file diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 568cf8f44f..ca95cc5422 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -349,19 +349,22 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite /obj/item/clothing/suit/space/void, /obj/item/weapon/tank) /proc/fake_attack(var/mob/living/target) -// var/list/possible_clones = new/list() + var/list/possible_clones = new/list() var/mob/living/carbon/human/clone = null var/clone_weapon = null for(var/mob/living/carbon/human/H in living_mob_list) - if(H.stat || H.lying) continue -// possible_clones += H - clone = H - break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order. + if(H.stat || H.lying) + continue + possible_clones += H +// clone = H +// break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order. -// if(!possible_clones.len) return -// clone = pick(possible_clones) - if(!clone) return + if(!possible_clones.len) + return + clone = pick(possible_clones) + if(!clone) + return //var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target)) var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc) diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm new file mode 100644 index 0000000000..6be3713c03 --- /dev/null +++ b/code/modules/flufftext/look_up.dm @@ -0,0 +1,60 @@ +// Implements a verb to make your character look upward, mostly intended for the surface. + +/mob/living/verb/look_up() + set name = "Look Up" + set category = "IC" + set desc = "Look above you, and hope there's no ceiling spiders." + + to_chat(usr, "You look upwards...") + + var/turf/T = get_turf(usr) + if(!T) // In null space. + to_chat(usr, span("warning", "You appear to be in a place without any sort of concept of direction. You have bigger problems to worry about.")) + return + + if(!T.outdoors) // They're inside. + to_chat(usr, "You see nothing interesting.") + return + + else // They're outside and hopefully on a planet. + var/datum/planet/P = SSplanets.z_to_planet[T.z] + if(!P) + to_chat(usr, span("warning", "You appear to be outside, but not on a planet... Something is wrong.")) + return + + var/datum/weather_holder/WH = P.weather_holder + + // Describe the current weather. + if(WH.current_weather.observed_message) + to_chat(usr, WH.current_weather.observed_message) + + // If we can see the sky, we'll see things like sun position, phase of the moon, etc. + if(!WH.current_weather.sky_visible) + to_chat(usr, "You can't see the sky clearly due to the [WH.current_weather.name].") + else + // Sun-related output. + if(P.sun_name) + var/afternoon = P.current_time.seconds_stored > (P.current_time.seconds_in_day / 2) + + var/sun_message = null + switch(P.sun_position) + if(0 to 0.4) // Night + sun_message = "It is night time, [P.sun_name] is not visible." + if(0.4 to 0.5) // Twilight + sun_message = "The sky is in twilight, however [P.sun_name] is not visible." + if(0.5 to 0.7) // Sunrise/set. + sun_message = "[P.sun_name] is slowly [!afternoon ? "rising from" : "setting on"] the horizon." + if(0.7 to 0.9) // Morning/evening + sun_message = "[P.sun_name]'s position implies it is currently [!afternoon ? "early" : "late"] in the day." + if(0.9 to 1.0) // Noon + sun_message = "It's high noon. [P.sun_name] hangs directly above you." + + to_chat(usr, sun_message) + + // Now for the moon. + if(P.moon_name) + if(P.moon_phase == MOON_PHASE_NEW_MOON) + to_chat(usr, "[P.moon_name] is not visible. It must be a new moon.") + else + to_chat(usr, "[P.moon_name] appears to currently be a [P.moon_phase].") + diff --git a/code/modules/gamemaster/actions/shipping_error.dm b/code/modules/gamemaster/actions/shipping_error.dm index affbe94dc9..33520f13a3 100644 --- a/code/modules/gamemaster/actions/shipping_error.dm +++ b/code/modules/gamemaster/actions/shipping_error.dm @@ -12,6 +12,6 @@ ..() var/datum/supply_order/O = new /datum/supply_order() O.ordernum = supply_controller.ordernum - O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)] - O.orderedby = random_name(pick(MALE,FEMALE), species = "Human") + O.object = supply_controller.supply_pack[pick(supply_controller.supply_pack)] + O.ordered_by = random_name(pick(MALE,FEMALE), species = "Human") supply_controller.shoppinglist += O \ No newline at end of file diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 59575eb603..e5c9b81d99 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -112,7 +112,7 @@ else data["gravity"] = null - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "holodeck.tmpl", src.name, 400, 550) ui.set_initial_data(data) @@ -152,7 +152,7 @@ src.add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/computer/HolodeckControl/emag_act(var/remaining_charges, var/mob/user as mob) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index cc2db8bd9b..8e6d20eab9 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -128,7 +128,8 @@ item_state = "boxing" /obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) return//I really wish I did not need this + if(!istype(W)) + return//I really wish I did not need this if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(istype(G.affecting,/mob/living)) @@ -155,12 +156,12 @@ if(W.flags & NOBLUDGEON) return - if(istype(W, /obj/item/weapon/screwdriver)) - user << ("It's a holowindow, you can't unfasten it!") - else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) - user << ("It's a holowindow, you can't pry it!") - else if(istype(W, /obj/item/weapon/wrench) && !anchored && (!state || !reinf)) - user << ("It's a holowindow, you can't dismantle it!") + if(W.is_screwdriver()) + to_chat(user, "It's a holowindow, you can't unfasten it!") + else if(W.is_crowbar() && reinf && state <= 1) + to_chat(user, "It's a holowindow, you can't pry it!") + else if(W.is_wrench() && !anchored && (!state || !reinf)) + to_chat(user, "It's a holowindow, you can't dismantle it!") else if(W.damtype == BRUTE || W.damtype == BURN) hit(W.force) @@ -216,12 +217,12 @@ qdel(src) /obj/structure/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) - user << ("It's a holochair, you can't dismantle it!") + if(W.is_wrench()) + to_chat(user, "It's a holochair, you can't dismantle it!") return //VOREStation Add /obj/structure/bed/holobed/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) user << ("It's a holochair, you can't dismantle it!") return //VOREStation Add End @@ -274,13 +275,13 @@ icon_state = "sword[item_color]" w_class = ITEMSIZE_LARGE playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - user << "[src] is now active." + to_chat(user, "[src] is now active.") else force = 3 icon_state = "sword0" w_class = ITEMSIZE_SMALL playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - user << "[src] can now be concealed." + to_chat(user, "[src] can now be concealed.") if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -312,7 +313,7 @@ if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(G.state<2) - user << "You need a better grip to do that!" + to_chat(user, "You need a better grip to do that!") return G.affecting.loc = src.loc G.affecting.Weaken(5) @@ -355,7 +356,7 @@ power_channel = ENVIRON /obj/machinery/readybutton/attack_ai(mob/user as mob) - user << "The station AI is not to interact with these devices!" + to_chat(user, "The station AI is not to interact with these devices!") return /obj/machinery/readybutton/New() @@ -363,12 +364,12 @@ /obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob) - user << "The device is a solid button, there's nothing you can do with it!" + to_chat(user, "The device is a solid button, there's nothing you can do with it!") /obj/machinery/readybutton/attack_hand(mob/user as mob) if(user.stat || stat & (NOPOWER|BROKEN)) - user << "This device is not powered." + to_chat(user, "This device is not powered.") return if(!user.IsAdvancedToolUser()) @@ -379,7 +380,7 @@ qdel(src) if(eventstarted) - usr << "The event has already begun!" + to_chat(usr, "The event has already begun!") return ready = !ready @@ -410,7 +411,7 @@ qdel(W) for(var/mob/M in currentarea) - M << "FIGHT!" + to_chat(M, "FIGHT!") // A window that disappears when the ready button is pressed /obj/structure/window/reinforced/holowindow/disappearing diff --git a/code/modules/holomap/holomap_datum.dm b/code/modules/holomap/holomap_datum.dm index b66c1020b0..af4cc6f274 100644 --- a/code/modules/holomap/holomap_datum.dm +++ b/code/modules/holomap/holomap_datum.dm @@ -8,9 +8,9 @@ if(!station_map || reinit) station_map = image(SSholomaps.extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAP]_[T.z]"]) if(!cursor || reinit) - cursor = image('icons/holomap_markers_vr.dmi', "you") + cursor = image('icons/holomap_markers.dmi', "you") if(!legend || reinit) - legend = image('icons/effects/64x64_vr.dmi', "legend") + legend = image('icons/effects/64x64.dmi', "legend_sc") if(isAI) T = get_turf(user.client.eye) @@ -24,8 +24,8 @@ station_map.overlays |= legend /datum/station_holomap/proc/initialize_holomap_bogus() - station_map = image('icons/480x480_vr.dmi', "stationmap") - legend = image('icons/effects/64x64_vr.dmi', "notfound") + station_map = image('icons/480x480.dmi', "stationmap") + legend = image('icons/effects/64x64.dmi', "notfound") legend.pixel_x = 7 * WORLD_ICON_SIZE legend.pixel_y = 7 * WORLD_ICON_SIZE station_map.overlays |= legend diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm index b704872abb..b47c154b65 100644 --- a/code/modules/holomap/station_holomap.dm +++ b/code/modules/holomap/station_holomap.dm @@ -4,7 +4,7 @@ /obj/machinery/station_map name = "station holomap" desc = "A virtual map of the surrounding station." - icon = 'icons/obj/machines/stationmap_vr.dmi' + icon = 'icons/obj/machines/stationmap.dmi' icon_state = "station_map" anchored = 1 density = 0 @@ -67,7 +67,7 @@ // small_station_map.plane = LIGHTING_PLANE // Not until we do planes ~Leshana // small_station_map.layer = LIGHTING_LAYER+1 // Weird things will happen! - floor_markings = image('icons/obj/machines/stationmap_vr.dmi', "decal_station_map") + floor_markings = image('icons/obj/machines/stationmap.dmi', "decal_station_map") floor_markings.dir = src.dir // floor_markings.plane = ABOVE_TURF_PLANE // Not until we do planes ~Leshana // floor_markings.layer = DECAL_LAYER @@ -123,8 +123,8 @@ user.client.images |= holomap_datum.station_map watching_mob = user - moved_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition) - dir_set_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition) + GLOB.moved_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition) + GLOB.dir_set_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition) destroyed_event.register(watching_mob, src, /obj/machinery/station_map/proc/stopWatching) update_use_power(2) @@ -152,8 +152,8 @@ var/mob/M = watching_mob spawn(5) //we give it time to fade out M.client.images -= holomap_datum.station_map - moved_event.unregister(watching_mob, src) - dir_set_event.unregister(watching_mob, src) + GLOB.moved_event.unregister(watching_mob, src) + GLOB.dir_set_event.unregister(watching_mob, src) destroyed_event.unregister(watching_mob, src) watching_mob = null update_use_power(1) @@ -228,7 +228,7 @@ x_offset = WORLD_ICON_SIZE y_offset = WORLD_ICON_SIZE circuit = /obj/item/weapon/circuitboard/station_map - icon_override = 'icons/obj/machines/stationmap_vr.dmi' + icon_override = 'icons/obj/machines/stationmap.dmi' /datum/frame/frame_types/station_map/get_icon_state(var/state) return "station_map_frame_[state]" diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index cc46a8da38..7f95ac306c 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -33,22 +33,22 @@ /obj/machinery/beehive/examine(var/mob/user) ..() if(!closed) - user << "The lid is open." + to_chat(user, "The lid is open.") /obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/crowbar)) + if(I.is_crowbar()) closed = !closed user.visible_message("[user] [closed ? "closes" : "opens"] \the [src].", "You [closed ? "close" : "open"] \the [src].") update_icon() return - else if(istype(I, /obj/item/weapon/wrench)) + else if(I.is_wrench()) anchored = !anchored playsound(loc, I.usesound, 50, 1) user.visible_message("[user] [anchored ? "wrenches" : "unwrenches"] \the [src].", "You [anchored ? "wrench" : "unwrench"] \the [src].") return else if(istype(I, /obj/item/bee_smoker)) if(closed) - user << "You need to open \the [src] with a crowbar before smoking the bees." + to_chat(user, "You need to open \the [src] with a crowbar before smoking the bees.") return user.visible_message("[user] smokes the bees in \the [src].", "You smoke the bees in \the [src].") smoked = 30 @@ -56,14 +56,14 @@ return else if(istype(I, /obj/item/honey_frame)) if(closed) - user << "You need to open \the [src] with a crowbar before inserting \the [I]." + to_chat(user, "You need to open \the [src] with a crowbar before inserting \the [I].") return if(frames >= maxFrames) - user << "There is no place for an another frame." + to_chat(user, "There is no place for an another frame.") return var/obj/item/honey_frame/H = I if(H.honey) - user << "\The [I] is full with beeswax and honey, empty it in the extractor first." + to_chat(user, "\The [I] is full with beeswax and honey, empty it in the extractor first.") return ++frames user.visible_message("[user] loads \the [I] into \the [src].", "You load \the [I] into \the [src].") @@ -74,16 +74,16 @@ else if(istype(I, /obj/item/bee_pack)) var/obj/item/bee_pack/B = I if(B.full && bee_count) - user << "\The [src] already has bees inside." + to_chat(user, "\The [src] already has bees inside.") return if(!B.full && bee_count < 90) - user << "\The [src] is not ready to split." + to_chat(user, "\The [src] is not ready to split.") return if(!B.full && !smoked) - user << "Smoke \the [src] first!" + to_chat(user, "Smoke \the [src] first!") return if(closed) - user << "You need to open \the [src] with a crowbar before moving the bees." + to_chat(user, "You need to open \the [src] with a crowbar before moving the bees.") return if(B.full) user.visible_message("[user] puts the queen and the bees from \the [I] into \the [src].", "You put the queen and the bees from \the [I] into \the [src].") @@ -96,22 +96,22 @@ update_icon() return else if(istype(I, /obj/item/device/analyzer/plant_analyzer)) - user << "Scan result of \the [src]..." - user << "Beehive is [bee_count ? "[round(bee_count)]% full" : "empty"].[bee_count > 90 ? " Colony is ready to split." : ""]" + to_chat(user, "Scan result of \the [src]...") + to_chat(user, "Beehive is [bee_count ? "[round(bee_count)]% full" : "empty"].[bee_count > 90 ? " Colony is ready to split." : ""]") if(frames) - user << "[frames] frames installed, [round(honeycombs / 100)] filled." + to_chat(user, "[frames] frames installed, [round(honeycombs / 100)] filled.") if(honeycombs < frames * 100) - user << "Next frame is [round(honeycombs % 100)]% full." + to_chat(user, "Next frame is [round(honeycombs % 100)]% full.") else - user << "No frames installed." + to_chat(user, "No frames installed.") if(smoked) - user << "The hive is smoked." + to_chat(user, "The hive is smoked.") return 1 - else if(istype(I, /obj/item/weapon/screwdriver)) + else if(I.is_screwdriver()) if(bee_count) - user << "You can't dismantle \the [src] with these bees inside." + to_chat(user, "You can't dismantle \the [src] with these bees inside.") return - user << "You start dismantling \the [src]..." + to_chat(user, "You start dismantling \the [src]...") playsound(src, I.usesound, 50, 1) if(do_after(user, 30)) user.visible_message("[user] dismantles \the [src].", "You dismantle \the [src].") @@ -122,10 +122,10 @@ /obj/machinery/beehive/attack_hand(var/mob/user) if(!closed) if(honeycombs < 100) - user << "There are no filled honeycombs." + to_chat(user, "There are no filled honeycombs.") return if(!smoked && bee_count) - user << "The bees won't let you take the honeycombs out like this, smoke them first." + to_chat(user, "The bees won't let you take the honeycombs out like this, smoke them first.") return user.visible_message("[user] starts taking the honeycombs out of \the [src].", "You start taking the honeycombs out of \the [src]...") while(honeycombs >= 100 && do_after(user, 30)) @@ -134,7 +134,7 @@ --frames update_icon() if(honeycombs < 100) - user << "You take all filled honeycombs out." + to_chat(user, "You take all filled honeycombs out.") return /obj/machinery/beehive/process() @@ -166,12 +166,12 @@ /obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user) if(processing) - user << "\The [src] is currently spinning, wait until it's finished." + to_chat(user, "\The [src] is currently spinning, wait until it's finished.") return else if(istype(I, /obj/item/honey_frame)) var/obj/item/honey_frame/H = I if(!H.honey) - user << "\The [H] is empty, put it into a beehive." + to_chat(user, "\The [H] is empty, put it into a beehive.") return user.visible_message("[user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.") processing = H.honey @@ -185,7 +185,7 @@ icon_state = "centrifuge" else if(istype(I, /obj/item/weapon/reagent_containers/glass)) if(!honey) - user << "There is no honey in \the [src]." + to_chat(user, "There is no honey in \the [src].") return var/obj/item/weapon/reagent_containers/glass/G = I var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey) @@ -226,7 +226,7 @@ icon_state = "apiary" /obj/item/beehive_assembly/attack_self(var/mob/user) - user << "You start assembling \the [src]..." + to_chat(user, "You start assembling \the [src]...") if(do_after(user, 30)) user.visible_message("[user] constructs a beehive.", "You construct a beehive.") new /obj/machinery/beehive(get_turf(user)) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index bc96f064c9..8d7ebdf314 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -17,7 +17,7 @@ if(genes.len) var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobotany Data", "No", "Yes") if(src && user && genes && choice && choice == "Yes" && user.Adjacent(get_turf(src))) - user << "You wipe the disk data." + to_chat(user, "You wipe the disk data.") name = initial(name) desc = initial(name) genes = list() @@ -82,16 +82,16 @@ /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/seeds)) if(seed) - user << "There is already a seed loaded." + to_chat(user, "There is already a seed loaded.") return var/obj/item/seeds/S =W if(S.seed && S.seed.get_trait(TRAIT_IMMUTABLE) > 0) - user << "That seed is not compatible with our genetics technology." + to_chat(user, "That seed is not compatible with our genetics technology.") else user.drop_from_inventory(W) W.loc = src seed = W - user << "You load [W] into [src]." + to_chat(user, "You load [W] into [src].") return if(default_deconstruction_screwdriver(user, W)) @@ -100,24 +100,24 @@ return if(istype(W,/obj/item/weapon/disk/botany)) if(loaded_disk) - user << "There is already a data disk loaded." + to_chat(user, "There is already a data disk loaded.") return else var/obj/item/weapon/disk/botany/B = W if(B.genes && B.genes.len) if(!disk_needs_genes) - user << "That disk already has gene data loaded." + to_chat(user, "That disk already has gene data loaded.") return else if(disk_needs_genes) - user << "That disk does not have any gene data loaded." + to_chat(user, "That disk does not have any gene data loaded.") return user.drop_from_inventory(W) W.loc = src loaded_disk = W - user << "You load [W] into [src]." + to_chat(user, "You load [W] into [src].") return ..() @@ -162,7 +162,7 @@ data["hasGenetics"] = 0 data["sourceName"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "botany_isolator.tmpl", "Lysis-isolation Centrifuge UI", 470, 450) ui.set_initial_data(data) @@ -292,7 +292,7 @@ else data["loaded"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "botany_editor.tmpl", "Bioballistic Delivery UI", 470, 450) ui.set_initial_data(data) diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 808b65cb41..135dc09a4c 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -482,20 +482,20 @@ if (loaded) user.visible_message("[user] puts the seeds from \the [O.name] into \the [src].", "You put the seeds from \the [O.name] into \the [src].") else - user << "There are no seeds in \the [O.name]." + to_chat(user, "There are no seeds in \the [O.name].") return - else if(istype(O, /obj/item/weapon/wrench)) + else if(O.is_wrench()) playsound(loc, O.usesound, 50, 1) anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - else if(istype(O, /obj/item/weapon/screwdriver)) + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + else if(O.is_screwdriver()) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") playsound(src, O.usesound, 50, 1) overlays.Cut() if(panel_open) overlays += image(icon, "[initial(icon_state)]-panel") - else if((istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/device/multitool)) && panel_open) + else if((O.is_wirecutter() || istype(O, /obj/item/device/multitool)) && panel_open) wires.Interact(user) /obj/machinery/seed_storage/emag_act(var/remaining_charges, var/mob/user) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index c35d4b489a..b2e3e28287 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -240,7 +240,7 @@ user.setClickCooldown(user.get_attack_speed(W)) plant_controller.add_plant(src) - if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/surgical/scalpel)) + if(W.is_wirecutter() || istype(W, /obj/item/weapon/surgical/scalpel)) if(sampled) user << "\The [src] has already been sampled recently." return diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 7dc02dedc7..8db9f7a8f1 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -453,7 +453,7 @@ if(O.is_open_container()) return 0 - if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/weapon/surgical/scalpel)) + if(O.is_wirecutter() || istype(O, /obj/item/weapon/surgical/scalpel)) if(!seed) user << "There is nothing to take a sample from in \the [src]." @@ -548,7 +548,7 @@ qdel(O) check_health() - else if(mechanical && istype(O, /obj/item/weapon/wrench)) + else if(mechanical && O.is_wrench()) //If there's a connector here, the portable_atmospherics setup can handle it. if(locate(/obj/machinery/atmospherics/portables_connector/) in loc) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 6c6a8ddbe3..c242f30bed 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -1,6 +1,6 @@ //Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters. -/obj/item/weapon/wirecutters/clippers +/obj/item/weapon/tool/wirecutters/clippers name = "plant clippers" desc = "A tool used to take samples from plants." diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm index 104b867532..6361bfa32f 100644 --- a/code/modules/integrated_electronics/_defines.dm +++ b/code/modules/integrated_electronics/_defines.dm @@ -6,10 +6,6 @@ #define DATA_CHANNEL "data channel" #define PULSE_CHANNEL "pulse channel" -// Methods of obtaining a circuit. -#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer. -#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it. - // Displayed along with the pin name to show what type of pin it is. #define IC_FORMAT_ANY "\" #define IC_FORMAT_STRING "\" @@ -49,7 +45,7 @@ var/list/all_integrated_circuits = list() /obj/item/integrated_circuit name = "integrated circuit" desc = "It's a tiny chip! This one doesn't seem to do much, however." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_components.dmi' icon_state = "template" w_class = ITEMSIZE_TINY var/obj/item/device/electronic_assembly/assembly = null // Reference to the assembly holding this circuit, if any. diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 6404e2a579..d236dc9da7 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -1,56 +1,29 @@ #define IC_COMPONENTS_BASE 20 #define IC_COMPLEXITY_BASE 60 +// Here is where the base definition lives. +// Specific subtypes are in their own folder. + /obj/item/device/electronic_assembly name = "electronic assembly" desc = "It's a case, for building small electronics with." w_class = ITEMSIZE_SMALL - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_setups.dmi' icon_state = "setup_small" show_messages = TRUE var/max_components = IC_COMPONENTS_BASE var/max_complexity = IC_COMPLEXITY_BASE - var/opened = 0 + var/opened = FALSE + var/can_anchor = FALSE // If true, wrenching it will anchor it. var/obj/item/weapon/cell/device/battery = null // Internal cell which most circuits need to work. + var/net_power = 0 // Set every tick, to display how much power is being drawn in total. + var/detail_color = COLOR_ASSEMBLY_BLACK -/obj/item/device/electronic_assembly/medium - name = "electronic mechanism" - icon_state = "setup_medium" - desc = "It's a case, for building medium-sized electronics with." - w_class = ITEMSIZE_NORMAL - max_components = IC_COMPONENTS_BASE * 2 - max_complexity = IC_COMPLEXITY_BASE * 2 - -/obj/item/device/electronic_assembly/large - name = "electronic machine" - icon_state = "setup_large" - desc = "It's a case, for building large electronics with." - w_class = ITEMSIZE_LARGE - max_components = IC_COMPONENTS_BASE * 4 - max_complexity = IC_COMPLEXITY_BASE * 4 - -/obj/item/device/electronic_assembly/drone - name = "electronic drone" - icon_state = "setup_drone" - desc = "It's a case, for building mobile electronics with." - w_class = ITEMSIZE_NORMAL - max_components = IC_COMPONENTS_BASE * 1.5 - max_complexity = IC_COMPLEXITY_BASE * 1.5 - -/obj/item/device/electronic_assembly/implant - name = "electronic implant" - icon_state = "setup_implant" - desc = "It's a case, for building very tiny electronics with." - w_class = ITEMSIZE_TINY - max_components = IC_COMPONENTS_BASE / 2 - max_complexity = IC_COMPLEXITY_BASE / 2 - var/obj/item/weapon/implant/integrated_circuit/implant = null - -/obj/item/device/electronic_assembly/New() - ..() +/obj/item/device/electronic_assembly/initialize() battery = new(src) processing_objects |= src + return ..() /obj/item/device/electronic_assembly/Destroy() battery = null // It will be qdel'd by ..() if still in our contents @@ -61,35 +34,32 @@ handle_idle_power() /obj/item/device/electronic_assembly/proc/handle_idle_power() - // First we generate power. - for(var/obj/item/integrated_circuit/passive/power/P in contents) - P.make_energy() + net_power = 0 // Reset this. This gets increased/decreased with [give/draw]_power() outside of this loop. - // Now spend it. + // First we handle passive sources. Most of these make power so they go first. + for(var/obj/item/integrated_circuit/passive/power/P in contents) + P.handle_passive_energy() + + // Now we handle idle power draw. for(var/obj/item/integrated_circuit/IC in contents) if(IC.power_draw_idle) if(!draw_power(IC.power_draw_idle)) IC.power_fail() -/obj/item/device/electronic_assembly/implant/update_icon() - ..() - implant.icon_state = icon_state -/obj/item/device/electronic_assembly/implant/nano_host() - return implant /obj/item/device/electronic_assembly/proc/resolve_nano_host() return src -/obj/item/device/electronic_assembly/implant/resolve_nano_host() - return implant - /obj/item/device/electronic_assembly/proc/check_interactivity(mob/user) if(!CanInteract(user, physical_state)) return 0 return 1 +/obj/item/device/electronic_assembly/get_cell() + return battery + /obj/item/device/electronic_assembly/interact(mob/user) if(!check_interactivity(user)) return @@ -107,7 +77,8 @@ HTML += "[total_parts]/[max_components] ([round((total_parts / max_components) * 100, 0.1)]%) space taken up in the assembly.
" HTML += "[total_complexity]/[max_complexity] ([round((total_complexity / max_complexity) * 100, 0.1)]%) maximum complexity.
" if(battery) - HTML += "[round(battery.charge, 0.1)]/[battery.maxcharge] ([round(battery.percent(), 0.1)]%) cell charge. \[Remove\]" + HTML += "[round(battery.charge, 0.1)]/[battery.maxcharge] ([round(battery.percent(), 0.1)]%) cell charge. \[Remove\]
" + HTML += "Net energy: [format_SI(net_power / CELLRATE, "W")]." else HTML += "No powercell detected!" HTML += "

" @@ -175,14 +146,18 @@ /obj/item/device/electronic_assembly/proc/can_move() return FALSE -/obj/item/device/electronic_assembly/drone/can_move() - return TRUE - /obj/item/device/electronic_assembly/update_icon() if(opened) icon_state = initial(icon_state) + "-open" else icon_state = initial(icon_state) + cut_overlays() + if(detail_color == COLOR_ASSEMBLY_BLACK) //Black colored overlay looks almost but not exactly like the base sprite, so just cut the overlay and avoid it looking kinda off. + return + var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/integrated_electronics/electronic_setups.dmi', "[icon_state]-color") + detail_overlay.color = detail_color + add_overlay(detail_overlay) + /obj/item/device/electronic_assembly/GetAccess() . = list() @@ -244,6 +219,11 @@ return TRUE +// Non-interactive version of above that always succeeds, intended for build-in circuits that get added on assembly initialization. +/obj/item/device/electronic_assembly/proc/force_add_circuit(var/obj/item/integrated_circuit/IC) + IC.forceMove(src) + IC.assembly = src + /obj/item/device/electronic_assembly/afterattack(atom/target, mob/user, proximity) if(proximity) var/scanned = FALSE @@ -256,7 +236,17 @@ visible_message("\The [user] waves \the [src] around [target].") /obj/item/device/electronic_assembly/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/integrated_circuit)) + if(can_anchor && I.is_wrench()) + anchored = !anchored + to_chat(user, span("notice", "You've [anchored ? "" : "un"]secured \the [src] to \the [get_turf(src)].")) + if(anchored) + on_anchored() + else + on_unanchored() + playsound(src, I.usesound, 50, 1) + return TRUE + + else if(istype(I, /obj/item/integrated_circuit)) if(!user.unEquip(I)) return FALSE if(add_circuit(I, user)) @@ -264,18 +254,26 @@ playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) interact(user) return TRUE - else if(istype(I, /obj/item/weapon/crowbar)) + + else if(I.is_crowbar()) playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) opened = !opened to_chat(user, "You [opened ? "opened" : "closed"] \the [src].") update_icon() return TRUE - else if(istype(I, /obj/item/device/integrated_electronics/wirer) || istype(I, /obj/item/device/integrated_electronics/debugger) || istype(I, /obj/item/weapon/screwdriver)) + + else if(istype(I, /obj/item/device/integrated_electronics/wirer) || istype(I, /obj/item/device/integrated_electronics/debugger) || I.is_screwdriver()) if(opened) interact(user) else to_chat(user, "\The [src] isn't opened, so you can't fiddle with the internal components. \ Try using a crowbar.") + + else if(istype(I, /obj/item/device/integrated_electronics/detailer)) + var/obj/item/device/integrated_electronics/detailer/D = I + detail_color = D.detail_color + update_icon() + else if(istype(I, /obj/item/weapon/cell/device)) if(!opened) to_chat(user, "\The [src] isn't opened, so you can't put anything inside. Try using a crowbar.") @@ -291,6 +289,7 @@ to_chat(user, "You slot \the [cell] inside \the [src]'s power supplier.") interact(user) return TRUE + else return ..() @@ -331,13 +330,32 @@ // Returns true if power was successfully drawn. /obj/item/device/electronic_assembly/proc/draw_power(amount) - if(battery && battery.checked_use(amount * CELLRATE)) + if(battery) + var/lost = battery.use(amount * CELLRATE) + net_power -= lost return TRUE return FALSE // Ditto for giving. /obj/item/device/electronic_assembly/proc/give_power(amount) - if(battery && battery.give(amount * CELLRATE)) + if(battery) + var/gained = battery.give(amount * CELLRATE) + net_power += gained return TRUE return FALSE +/obj/item/device/electronic_assembly/on_loc_moved(oldloc) + for(var/obj/O in contents) + O.on_loc_moved(oldloc) + +/obj/item/device/electronic_assembly/Moved(var/oldloc) + for(var/obj/O in contents) + O.on_loc_moved(oldloc) + +/obj/item/device/electronic_assembly/proc/on_anchored() + for(var/obj/item/integrated_circuit/IC in contents) + IC.on_anchored() + +/obj/item/device/electronic_assembly/proc/on_unanchored() + for(var/obj/item/integrated_circuit/IC in contents) + IC.on_unanchored() diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm new file mode 100644 index 0000000000..f8a5b31f3f --- /dev/null +++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm @@ -0,0 +1,187 @@ + +// The base subtype for assemblies that can be worn. Certain pieces will have more or less capabilities +// E.g. Glasses have less room than something worn over the chest. +// Note that the electronic assembly is INSIDE the object that actually gets worn, in a similar way to implants. + +/obj/item/device/electronic_assembly/clothing + name = "electronic clothing" + icon_state = "circuitry" // Needs to match the clothing's base icon_state. + desc = "It's a case, for building machines attached to clothing." + w_class = ITEMSIZE_SMALL + max_components = IC_COMPONENTS_BASE + max_complexity = IC_COMPLEXITY_BASE + var/obj/item/clothing/clothing = null + +/obj/item/device/electronic_assembly/clothing/nano_host() + return clothing + +/obj/item/device/electronic_assembly/clothing/resolve_nano_host() + return clothing + +/obj/item/device/electronic_assembly/clothing/update_icon() + ..() + clothing.icon_state = icon_state + // We don't need to update the mob sprite since it won't (and shouldn't) actually get changed. + +// This is 'small' relative to the size of regular clothing assemblies. +/obj/item/device/electronic_assembly/clothing/small + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + w_class = ITEMSIZE_TINY + +// Ditto. +/obj/item/device/electronic_assembly/clothing/large + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + w_class = ITEMSIZE_NORMAL + + +// This is defined higher up, in /clothing to avoid lots of copypasta. +/obj/item/clothing + var/obj/item/device/electronic_assembly/clothing/IC = null + var/obj/item/integrated_circuit/built_in/action_button/action_circuit = null // This gets pulsed when someone clicks the button on the hud. + +/obj/item/clothing/emp_act(severity) + if(IC) + IC.emp_act(severity) + ..() + +/obj/item/clothing/examine(mob/user) + if(IC) + IC.examine(user) + ..() + +/obj/item/clothing/attackby(obj/item/I, mob/user) + if(IC) + // This needs to be done in a better way... + if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/integrated_circuit) || istype(I, /obj/item/weapon/cell/device) || istype(I, /obj/item/device/integrated_electronics) ) + IC.attackby(I, user) + else + ..() + +/obj/item/clothing/attack_self(mob/user) + if(IC) + if(IC.opened) + IC.attack_self(user) + else + action_circuit.do_work() + else + ..() + +/obj/item/clothing/Moved(oldloc) + if(IC) + IC.on_loc_moved(oldloc) + else + ..() + +/obj/item/clothing/on_loc_moved(oldloc) + if(IC) + IC.on_loc_moved(oldloc) + else + ..() + +// Does most of the repeatative setup. +/obj/item/clothing/proc/setup_integrated_circuit(new_type) + // Set up the internal circuit holder. + IC = new new_type(src) + IC.clothing = src + IC.name = name + + // Clothing assemblies can be triggered by clicking on the HUD. This allows that to occur. + action_circuit = new(src.IC) + IC.force_add_circuit(action_circuit) + action_button_name = "Activate [name]" + +/obj/item/clothing/Destroy() + if(IC) + IC.clothing = null + action_circuit = null // Will get deleted by qdel-ing the IC assembly. + qdel(IC) + return ..() + +// Specific subtypes. + +// Jumpsuit. +/obj/item/clothing/under/circuitry + name = "electronic jumpsuit" + desc = "It's a wearable case for electronics. This on is a black jumpsuit with wiring weaved into the fabric." + icon_state = "circuitry" + worn_state = "circuitry" + +/obj/item/clothing/under/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing) + return ..() + + +// Gloves. +/obj/item/clothing/gloves/circuitry + name = "electronic gloves" + desc = "It's a wearable case for electronics. This one is a pair of black gloves, with wires woven into them. A small \ + device with a screen is attached to the left glove." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/gloves/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + + +// Glasses. +/obj/item/clothing/glasses/circuitry + name = "electronic goggles" + desc = "It's a wearable case for electronics. This one is a pair of goggles, with wiring sticking out. \ + Could this augment your vision?" // Sadly it won't, or at least not yet. + icon_state = "circuitry" + item_state = "night" // The on-mob sprite would be identical anyways. + +/obj/item/clothing/glasses/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Shoes +/obj/item/clothing/shoes/circuitry + name = "electronic boots" + desc = "It's a wearable case for electronics. This one is a pair of boots, with wires attached to a small \ + cover." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/shoes/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Head +/obj/item/clothing/head/circuitry + name = "electronic headwear" + desc = "It's a wearable case for electronics. This one appears to be a very technical-looking piece that \ + goes around the collar, with a heads-up-display attached on the right." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/head/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Ear +/obj/item/clothing/ears/circuitry + name = "electronic earwear" + desc = "It's a wearable case for electronics. This one appears to be a technical-looking headset." + icon = 'icons/obj/clothing/ears.dmi' + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/ears/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Exo-slot +/obj/item/clothing/suit/circuitry + name = "electronic chestpiece" + desc = "It's a wearable case for electronics. This one appears to be a very technical-looking vest, that \ + almost looks professionally made, however the wiring popping out betrays that idea." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/suit/circuitry/initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/large) + return ..() \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/device.dm b/code/modules/integrated_electronics/core/assemblies/device.dm similarity index 96% rename from code/modules/integrated_electronics/core/device.dm rename to code/modules/integrated_electronics/core/assemblies/device.dm index 91243aefab..63e0bef562 100644 --- a/code/modules/integrated_electronics/core/device.dm +++ b/code/modules/integrated_electronics/core/assemblies/device.dm @@ -1,87 +1,84 @@ -/obj/item/device/assembly/electronic_assembly - name = "electronic device" - desc = "It's a case for building electronics with. It can be attached to other small devices." - icon_state = "setup_device" - var/opened = 0 - - var/obj/item/device/electronic_assembly/device/EA - -/obj/item/device/assembly/electronic_assembly/New() - EA = new(src) - EA.holder = src - ..() - -/obj/item/device/assembly/electronic_assembly/attackby(obj/item/I as obj, mob/user as mob) - if (iscrowbar(I) ) - toggle_open(user) - else if (opened) - EA.attackby(I, user) - else - ..() - -/obj/item/device/electronic_assembly/get_cell() - return battery - -/obj/item/device/assembly/electronic_assembly/proc/toggle_open(mob/user) - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - opened = !opened - EA.opened = opened - to_chat(user, "You [opened ? "opened" : "closed"] \the [src].") - secured = 1 - update_icon() - -/obj/item/device/assembly/electronic_assembly/update_icon() - if(EA) - icon_state = initial(icon_state) - else - icon_state = initial(icon_state)+"0" - if(opened) - icon_state = icon_state + "-open" - -/obj/item/device/assembly/electronic_assembly/attack_self(mob/user as mob) - if(EA) - EA.attack_self(user) - -/obj/item/device/assembly/electronic_assembly/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs - if(EA) - for(var/obj/item/integrated_circuit/built_in/device_input/I in EA.contents) - I.do_work() - return - -/obj/item/device/assembly/electronic_assembly/examine(mob/user) - .=..(user, 1) - if(EA) - for(var/obj/item/integrated_circuit/IC in EA.contents) - IC.external_examine(user) - -/obj/item/device/assembly/electronic_assembly/verb/toggle() - set src in usr - set category = "Object" - set name = "Open/Close Device Assembly" - set desc = "Open or close device assembly!" - - toggle_open(usr) - - -/obj/item/device/electronic_assembly/device - name = "electronic device" - icon_state = "setup_device" - desc = "It's a tiny electronic device with specific use for attaching to other devices." - var/obj/item/device/assembly/electronic_assembly/holder - w_class = ITEMSIZE_TINY - max_components = IC_COMPONENTS_BASE * 3/4 - max_complexity = IC_COMPLEXITY_BASE * 3/4 - - -/obj/item/device/electronic_assembly/device/New() - ..() - var/obj/item/integrated_circuit/built_in/device_input/input = new(src) - var/obj/item/integrated_circuit/built_in/device_output/output = new(src) - input.assembly = src - output.assembly = src - -/obj/item/device/electronic_assembly/device/check_interactivity(mob/user) - if(!CanInteract(user, state = deep_inventory_state)) - return 0 - return 1 - +/obj/item/device/assembly/electronic_assembly + name = "electronic device" + desc = "It's a case for building electronics with. It can be attached to other small devices." + icon_state = "setup_device" + var/opened = 0 + + var/obj/item/device/electronic_assembly/device/EA + +/obj/item/device/assembly/electronic_assembly/New() + EA = new(src) + EA.holder = src + ..() + +/obj/item/device/assembly/electronic_assembly/attackby(obj/item/I as obj, mob/user as mob) + if (I.is_crowbar()) + toggle_open(user) + else if (opened) + EA.attackby(I, user) + else + ..() + +/obj/item/device/assembly/electronic_assembly/proc/toggle_open(mob/user) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + opened = !opened + EA.opened = opened + to_chat(user, "You [opened ? "opened" : "closed"] \the [src].") + secured = 1 + update_icon() + +/obj/item/device/assembly/electronic_assembly/update_icon() + if(EA) + icon_state = initial(icon_state) + else + icon_state = initial(icon_state)+"0" + if(opened) + icon_state = icon_state + "-open" + +/obj/item/device/assembly/electronic_assembly/attack_self(mob/user as mob) + if(EA) + EA.attack_self(user) + +/obj/item/device/assembly/electronic_assembly/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs + if(EA) + for(var/obj/item/integrated_circuit/built_in/device_input/I in EA.contents) + I.do_work() + return + +/obj/item/device/assembly/electronic_assembly/examine(mob/user) + .=..(user, 1) + if(EA) + for(var/obj/item/integrated_circuit/IC in EA.contents) + IC.external_examine(user) + +/obj/item/device/assembly/electronic_assembly/verb/toggle() + set src in usr + set category = "Object" + set name = "Open/Close Device Assembly" + set desc = "Open or close device assembly!" + + toggle_open(usr) + + +/obj/item/device/electronic_assembly/device + name = "electronic device" + icon_state = "setup_device" + desc = "It's a tiny electronic device with specific use for attaching to other devices." + var/obj/item/device/assembly/electronic_assembly/holder + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE * 3/4 + max_complexity = IC_COMPLEXITY_BASE * 3/4 + + +/obj/item/device/electronic_assembly/device/New() + ..() + var/obj/item/integrated_circuit/built_in/device_input/input = new(src) + var/obj/item/integrated_circuit/built_in/device_output/output = new(src) + input.assembly = src + output.assembly = src + +/obj/item/device/electronic_assembly/device/check_interactivity(mob/user) + if(!CanInteract(user, state = deep_inventory_state)) + return 0 + return 1 + diff --git a/code/modules/integrated_electronics/core/assemblies/generic.dm b/code/modules/integrated_electronics/core/assemblies/generic.dm new file mode 100644 index 0000000000..8929b69d78 --- /dev/null +++ b/code/modules/integrated_electronics/core/assemblies/generic.dm @@ -0,0 +1,261 @@ +// Generic subtypes without a lot of special code. + +// Small assemblies. + +/obj/item/device/electronic_assembly/default + name = "type-a electronic assembly" + +/obj/item/device/electronic_assembly/calc + name = "type-b electronic assembly" + icon_state = "setup_small_calc" + desc = "It's a case, for building small electronics with. This one resembles a pocket calculator." + +/obj/item/device/electronic_assembly/clam + name = "type-c electronic assembly" + icon_state = "setup_small_clam" + desc = "It's a case, for building small electronics with. This one has a clamshell design." + +/obj/item/device/electronic_assembly/simple + name = "type-d electronic assembly" + icon_state = "setup_small_simple" + desc = "It's a case, for building small electronics with. This one has a simple design." + +/obj/item/device/electronic_assembly/hook + name = "type-e electronic assembly" + icon_state = "setup_small_hook" + desc = "It's a case, for building small electronics with. This one looks like it has a belt clip, but it's purely decorative." + +/obj/item/device/electronic_assembly/pda + name = "type-f electronic assembly" + icon_state = "setup_small_pda" + desc = "It's a case, for building small electronics with. This one resembles a PDA." + +// Tiny assemblies. + +/obj/item/device/electronic_assembly/tiny + name = "electronic device" + icon_state = "setup_device" + desc = "It's a case, for building tiny-sized electronics with." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + +/obj/item/device/electronic_assembly/tiny/default + name = "type-a electronic device" + +/obj/item/device/electronic_assembly/tiny/cylinder + name = "type-b electronic device" + icon_state = "setup_device_cylinder" + desc = "It's a case, for building tiny-sized electronics with. This one has a cylindrical design." + +/obj/item/device/electronic_assembly/tiny/scanner + name = "type-c electronic device" + icon_state = "setup_device_scanner" + desc = "It's a case, for building tiny-sized electronics with. This one has a scanner-like design." + +/obj/item/device/electronic_assembly/tiny/hook + name = "type-d electronic device" + icon_state = "setup_device_hook" + desc = "It's a case, for building tiny-sized electronics with. This one looks like it has a belt clip, but it's purely decorative." + +/obj/item/device/electronic_assembly/tiny/box + name = "type-e electronic device" + icon_state = "setup_device_box" + desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design." + +// Medium assemblies. + +/obj/item/device/electronic_assembly/medium + name = "electronic mechanism" + icon_state = "setup_medium" + desc = "It's a case, for building medium-sized electronics with." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + +/obj/item/device/electronic_assembly/medium/default + name = "type-a electronic mechanism" + +/obj/item/device/electronic_assembly/medium/box + name = "type-b electronic mechanism" + icon_state = "setup_medium_box" + desc = "It's a case, for building medium-sized electronics with. This one has a boxy design." + +/obj/item/device/electronic_assembly/medium/clam + name = "type-c electronic mechanism" + icon_state = "setup_medium_clam" + desc = "It's a case, for building medium-sized electronics with. This one has a clamshell design." + +/obj/item/device/electronic_assembly/medium/medical + name = "type-d electronic mechanism" + icon_state = "setup_medium_med" + desc = "It's a case, for building medium-sized electronics with. This one resembles some type of medical apparatus." + +/obj/item/device/electronic_assembly/medium/gun + name = "type-e electronic mechanism" + icon_state = "setup_medium_gun" + item_state = "circuitgun" + desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, \ + if you're feeling optimistic." +// can_fire_equipped = TRUE + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi', + ) + +/obj/item/device/electronic_assembly/medium/radio + name = "type-f electronic mechanism" + icon_state = "setup_medium_radio" + desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio." + +// Large assemblies. + +/obj/item/device/electronic_assembly/large + name = "electronic machine" + icon_state = "setup_large" + desc = "It's a case, for building large electronics with." + w_class = ITEMSIZE_LARGE + max_components = IC_COMPONENTS_BASE * 4 + max_complexity = IC_COMPLEXITY_BASE * 4 + can_anchor = TRUE + +/obj/item/device/electronic_assembly/large/default + name = "type-a electronic machine" + +/obj/item/device/electronic_assembly/large/scope + name = "type-b electronic machine" + icon_state = "setup_large_scope" + desc = "It's a case, for building large electronics with. This one resembles an oscilloscope." + +/obj/item/device/electronic_assembly/large/terminal + name = "type-c electronic machine" + icon_state = "setup_large_terminal" + desc = "It's a case, for building large electronics with. This one resembles a computer terminal." + +/obj/item/device/electronic_assembly/large/arm + name = "type-d electronic machine" + icon_state = "setup_large_arm" + desc = "It's a case, for building large electronics with. This one resembles a robotic arm." + +/obj/item/device/electronic_assembly/large/tall + name = "type-e electronic machine" + icon_state = "setup_large_tall" + desc = "It's a case, for building large electronics with. This one has a tall design." + +/obj/item/device/electronic_assembly/large/industrial + name = "type-f electronic machine" + icon_state = "setup_large_industrial" + desc = "It's a case, for building large electronics with. This one resembles some kind of industrial machinery." + +// Drone assemblies, which can move with the locomotion circuit. + +/obj/item/device/electronic_assembly/drone + name = "electronic drone" + icon_state = "setup_drone" + desc = "It's a case, for building mobile electronics with." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 1.5 + max_complexity = IC_COMPLEXITY_BASE * 1.5 + can_anchor = FALSE + +/obj/item/device/electronic_assembly/drone/can_move() + return TRUE + +/obj/item/device/electronic_assembly/drone/default + name = "type-a electronic drone" + +/obj/item/device/electronic_assembly/drone/arms + name = "type-b electronic drone" + icon_state = "setup_drone_arms" + desc = "It's a case, for building mobile electronics with. This one is armed and dangerous." + +/obj/item/device/electronic_assembly/drone/secbot + name = "type-c electronic drone" + icon_state = "setup_drone_secbot" + desc = "It's a case, for building mobile electronics with. This one resembles a Securitron." + +/obj/item/device/electronic_assembly/drone/medbot + name = "type-d electronic drone" + icon_state = "setup_drone_medbot" + desc = "It's a case, for building mobile electronics with. This one resembles a Medibot." + +/obj/item/device/electronic_assembly/drone/genbot + name = "type-e electronic drone" + icon_state = "setup_drone_genbot" + desc = "It's a case, for building mobile electronics with. This one has a generic bot design." + +/obj/item/device/electronic_assembly/drone/android + name = "type-f electronic drone" + icon_state = "setup_drone_android" + desc = "It's a case, for building mobile electronics with. This one has a hominoid design." + +// Wall mounted assemblies. + +/obj/item/device/electronic_assembly/wallmount + name = "wall-mounted electronic assembly" + icon_state = "setup_wallmount_medium" + desc = "It's a case, for building medium-sized electronics with. It has a magnetized \ + backing to allow it to stick to walls." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + can_anchor = TRUE + +/obj/item/device/electronic_assembly/wallmount/proc/mount_assembly(turf/on_wall, mob/user) + if(get_dist(on_wall,user) > 1) + return + var/ndir = get_dir(on_wall, user) + if(!(ndir in cardinal)) + return + var/turf/T = get_turf(user) + if(!istype(T, /turf/simulated/floor)) + to_chat(user, "You cannot place \the [src] on this spot!") + return + playsound(src.loc, 'sound/machines/click.ogg', 75, 1) + user.visible_message("\The [user] attaches \the [src] to the wall.", + "You attach \the [src] to the wall.", + "You hear clicking.") + user.drop_item(T) + anchored = TRUE + on_anchored() + switch(ndir) + if(NORTH) + pixel_y = -31 + if(SOUTH) + pixel_y = 31 + if(EAST) + pixel_x = -31 + if(WEST) + pixel_x = 31 + +/obj/item/device/electronic_assembly/wallmount/on_unanchored() + pixel_x = 0 + pixel_y = 0 + ..() + +/obj/item/device/electronic_assembly/wallmount/heavy + name = "heavy wall-mounted electronic assembly" + icon_state = "setup_wallmount_large" + desc = "It's a case, for building large electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_LARGE + max_components = IC_COMPONENTS_BASE * 4 + max_complexity = IC_COMPLEXITY_BASE * 4 + +/obj/item/device/electronic_assembly/wallmount/light + name = "light wall-mounted electronic assembly" + icon_state = "setup_wallmount_small" + desc = "It's a case, for building small electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_SMALL + max_components = IC_COMPONENTS_BASE + max_complexity = IC_COMPLEXITY_BASE + +/obj/item/device/electronic_assembly/wallmount/tiny + name = "tiny wall-mounted electronic assembly" + icon_state = "setup_wallmount_tiny" + desc = "It's a case, for building tiny electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/assemblies/implant.dm b/code/modules/integrated_electronics/core/assemblies/implant.dm new file mode 100644 index 0000000000..11db537768 --- /dev/null +++ b/code/modules/integrated_electronics/core/assemblies/implant.dm @@ -0,0 +1,21 @@ +// Note that this is contained inside an actual implant subtype. +// See code/game/objects/items/weapons/implants/implantcircuits.dm for where this gets held. + +/obj/item/device/electronic_assembly/implant + name = "electronic implant" + icon_state = "setup_implant" + desc = "It's a case, for building very tiny electronics with." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + var/obj/item/weapon/implant/integrated_circuit/implant = null + +/obj/item/device/electronic_assembly/implant/nano_host() + return implant + +/obj/item/device/electronic_assembly/implant/resolve_nano_host() + return implant + +/obj/item/device/electronic_assembly/implant/update_icon() + ..() + implant.icon_state = icon_state \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm new file mode 100644 index 0000000000..cd1696aecc --- /dev/null +++ b/code/modules/integrated_electronics/core/detailer.dm @@ -0,0 +1,45 @@ +/obj/item/device/integrated_electronics/detailer + name = "assembly detailer" + desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish." + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' + icon_state = "detailer" + item_flags = NOBLUDGEON + w_class = ITEMSIZE_SMALL + var/detail_color = COLOR_ASSEMBLY_WHITE + var/list/color_list = list( + "black" = COLOR_ASSEMBLY_BLACK, + "machine gray" = COLOR_ASSEMBLY_BGRAY, + "white" = COLOR_ASSEMBLY_WHITE, + "red" = COLOR_ASSEMBLY_RED, + "orange" = COLOR_ASSEMBLY_ORANGE, + "beige" = COLOR_ASSEMBLY_BEIGE, + "brown" = COLOR_ASSEMBLY_BROWN, + "gold" = COLOR_ASSEMBLY_GOLD, + "yellow" = COLOR_ASSEMBLY_YELLOW, + "gurkha" = COLOR_ASSEMBLY_GURKHA, + "light green" = COLOR_ASSEMBLY_LGREEN, + "green" = COLOR_ASSEMBLY_GREEN, + "light blue" = COLOR_ASSEMBLY_LBLUE, + "blue" = COLOR_ASSEMBLY_BLUE, + "purple" = COLOR_ASSEMBLY_PURPLE, + "hot pink" = COLOR_ASSEMBLY_HOT_PINK + ) + +/obj/item/device/integrated_electronics/detailer/initialize() + update_icon() + return ..() + +/obj/item/device/integrated_electronics/detailer/update_icon() + cut_overlays() + var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/integrated_electronics/electronic_tools.dmi', "detailer-color") + detail_overlay.color = detail_color + add_overlay(detail_overlay) + +/obj/item/device/integrated_electronics/detailer/attack_self(mob/user) + var/color_choice = input(user, "Select color.", "Assembly Detailer", detail_color) as null|anything in color_list + if(!color_list[color_choice]) + return + if(!in_range(src, user)) + return + detail_color = color_list[color_choice] + update_icon() diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm index e31b26fbb1..8af8f11fba 100644 --- a/code/modules/integrated_electronics/core/helpers.dm +++ b/code/modules/integrated_electronics/core/helpers.dm @@ -1,7 +1,8 @@ /obj/item/integrated_circuit/proc/setup_io(var/list/io_list, var/io_type, var/list/io_default_list) var/list/io_list_copy = io_list.Copy() io_list.Cut() - var/i = 0 + var/i = 1 + for(var/io_entry in io_list_copy) var/default_data = null var/io_type_override = null @@ -13,10 +14,10 @@ io_type_override = io_list_copy[io_entry] if(io_type_override) - // world << "io_type_override is now [io_type_override] on [src]." io_list.Add(new io_type_override(src, io_entry, default_data)) else io_list.Add(new io_type(src, io_entry, default_data)) + i++ /obj/item/integrated_circuit/proc/set_pin_data(var/pin_type, var/pin_number, datum/new_data) if (istype(new_data) && !isweakref(new_data)) diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 08a3152908..d612bd7211 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -330,6 +330,7 @@ a creative player the means to solve many problems. Circuits are held inside an to_chat(usr, "\The [src] seems to be permanently attached to the case.") return var/obj/item/device/electronic_assembly/ea = loc + power_fail() disconnect_all() var/turf/T = get_turf(src) forceMove(T) @@ -394,3 +395,9 @@ a creative player the means to solve many problems. Circuits are held inside an O.disconnect() for(var/datum/integrated_io/activate/A in activators) A.disconnect() + +/obj/item/integrated_circuit/proc/on_anchored() + return + +/obj/item/integrated_circuit/proc/on_unanchored() + return \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index 8621e2b7ed..ef6f0a6dbc 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -28,7 +28,7 @@ D [1]/ || /datum/integrated_io/New(var/newloc, var/name, var/new_data) ..() src.name = name - if(new_data) + if(!isnull(new_data)) src.data = new_data holder = newloc if(!istype(holder)) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 794755b02c..fb9bfb5095 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -2,16 +2,17 @@ /obj/item/device/integrated_circuit_printer name = "integrated circuit printer" desc = "A portable(ish) machine made to print tiny modular circuitry out of metal." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' icon_state = "circuit_printer" w_class = ITEMSIZE_LARGE var/metal = 0 var/max_metal = 100 var/metal_per_sheet = 10 // One sheet equals this much metal. + var/debug = FALSE // If true, metal is infinite. var/upgraded = FALSE // When hit with an upgrade disk, will turn true, allowing it to print the higher tier circuits. - var/can_clone = FALSE // Same for above, but will allow the printer to duplicate a specific assembly. - var/static/list/recipe_list = list() + var/can_clone = FALSE // Same for above, but will allow the printer to duplicate a specific assembly. (Not implemented) +// var/static/list/recipe_list = list() var/current_category = null var/obj/item/device/electronic_assembly/assembly_to_clone = null @@ -19,67 +20,32 @@ upgraded = TRUE can_clone = TRUE -/obj/item/device/integrated_circuit_printer/initialize() - . = ..() - if(!recipe_list.len) - // Unfortunately this needed a lot of loops, but it should only be run once at init. - - // First loop is to seperate the actual circuits from base circuits. - var/list/circuits_to_use = list() - for(var/obj/item/integrated_circuit/IC in all_integrated_circuits) - if((IC.spawn_flags & IC_SPAWN_DEFAULT) || (IC.spawn_flags & IC_SPAWN_RESEARCH)) - circuits_to_use.Add(IC) - - // Second loop is to find all categories. - var/list/found_categories = list() - for(var/obj/item/integrated_circuit/IC in circuits_to_use) - if(!(IC.category_text in found_categories)) - found_categories.Add(IC.category_text) - - // Third loop is to initialize lists by category names, then put circuits matching the category inside. - for(var/category in found_categories) - recipe_list[category] = list() - var/list/current_list = recipe_list[category] - for(var/obj/item/integrated_circuit/IC in circuits_to_use) - if(IC.category_text == category) - current_list.Add(IC) - - // Now for non-circuit things. - var/list/assembly_list = list() - assembly_list.Add( - new /obj/item/device/electronic_assembly(null), - new /obj/item/device/electronic_assembly/medium(null), - new /obj/item/device/electronic_assembly/large(null), - new /obj/item/device/electronic_assembly/drone(null), - new /obj/item/weapon/implant/integrated_circuit(null), - new /obj/item/device/assembly/electronic_assembly(null) - ) - recipe_list["Assemblies"] = assembly_list - - var/list/tools_list = list() - tools_list.Add( - new /obj/item/device/integrated_electronics/wirer(null), - new /obj/item/device/integrated_electronics/debugger(null) - ) - recipe_list["Tools"] = tools_list - +/obj/item/device/integrated_circuit_printer/debug + name = "fractal integrated circuit printer" + desc = "A portable(ish) machine that makes modular circuitry seemingly out of thin air." + upgraded = TRUE + can_clone = TRUE + debug = TRUE /obj/item/device/integrated_circuit_printer/attackby(var/obj/item/O, var/mob/user) if(istype(O,/obj/item/stack/material)) var/obj/item/stack/material/stack = O if(stack.material.name == DEFAULT_WALL_MATERIAL) + if(debug) + to_chat(user, span("warning", "\The [src] does not need any material.")) + return var/num = min((max_metal - metal) / metal_per_sheet, stack.amount) if(num < 1) - to_chat(user, "\The [src] is too full to add more metal.") + to_chat(user, span("warning", "\The [src] is too full to add more metal.")) return if(stack.use(num)) - to_chat(user, "You add [num] sheet\s to \the [src].") + to_chat(user, span("notice", "You add [num] sheet\s to \the [src].")) metal += num * metal_per_sheet interact(user) return TRUE if(istype(O,/obj/item/integrated_circuit)) - to_chat(user, "You insert the circuit into \the [src]. ") + to_chat(user, span("notice", "You insert the circuit into \the [src].")) user.unEquip(O) metal = min(metal + O.w_class, max_metal) qdel(O) @@ -88,18 +54,18 @@ if(istype(O,/obj/item/weapon/disk/integrated_circuit/upgrade/advanced)) if(upgraded) - to_chat(user, "\The [src] already has this upgrade. ") + to_chat(user, span("warning", "\The [src] already has this upgrade.")) return TRUE - to_chat(user, "You install \the [O] into \the [src]. ") + to_chat(user, span("notice", "You install \the [O] into \the [src].")) upgraded = TRUE interact(user) return TRUE if(istype(O,/obj/item/weapon/disk/integrated_circuit/upgrade/clone)) if(can_clone) - to_chat(user, "\The [src] already has this upgrade. ") + to_chat(user, span("warning", "\The [src] already has this upgrade.")) return TRUE - to_chat(user, "You install \the [O] into \the [src]. ") + to_chat(user, span("notice", "You install \the [O] into \the [src].")) can_clone = TRUE interact(user) return TRUE @@ -114,18 +80,21 @@ var/window_width = 500 if(isnull(current_category)) - current_category = recipe_list[1] + current_category = SScircuit.circuit_fabricator_recipe_list[1] var/HTML = "

Integrated Circuit Printer


" - HTML += "Metal: [metal/metal_per_sheet]/[max_metal/metal_per_sheet] sheets.
" - HTML += "Circuits available: [upgraded ? "Regular":"Advanced"]." - HTML += "Assembly Cloning: [can_clone ? "Available": "Unavailable"]." + if(!debug) + HTML += "Metal: [metal/metal_per_sheet]/[max_metal/metal_per_sheet] sheets.
" + else + HTML += "Metal: INFINITY.
" + HTML += "Circuits available: [upgraded ? "Advanced":"Regular"].
" + HTML += "Assembly Cloning: [can_clone ? "Available": "Unavailable"].
" if(assembly_to_clone) - HTML += "Assembly '[assembly_to_clone.name]' loaded." + HTML += "Assembly '[assembly_to_clone.name]' loaded.
" HTML += "Crossed out circuits mean that the printer is not sufficentally upgraded to create that circuit.
" HTML += "
" HTML += "Categories:" - for(var/category in recipe_list) + for(var/category in SScircuit.circuit_fabricator_recipe_list) if(category != current_category) HTML += " \[[category]\] " else // Bold the button if it's already selected. @@ -133,20 +102,22 @@ HTML += "
" HTML += "

[current_category]

" - var/list/current_list = recipe_list[current_category] - for(var/obj/O in current_list) + var/list/current_list = SScircuit.circuit_fabricator_recipe_list[current_category] + for(var/path in current_list) + var/obj/O = path var/can_build = TRUE - if(istype(O, /obj/item/integrated_circuit)) - var/obj/item/integrated_circuit/IC = O - if((IC.spawn_flags & IC_SPAWN_RESEARCH) && (!(IC.spawn_flags & IC_SPAWN_DEFAULT)) && !upgraded) + if(ispath(path, /obj/item/integrated_circuit)) + var/obj/item/integrated_circuit/IC = path + if((initial(IC.spawn_flags) & IC_SPAWN_RESEARCH) && (!(initial(IC.spawn_flags) & IC_SPAWN_DEFAULT)) && !upgraded) can_build = FALSE if(can_build) - HTML += "\[[O.name]\]: [O.desc]
" + HTML += "\[[initial(O.name)]\]: [initial(O.desc)]
" else - HTML += "\[[O.name]\]: [O.desc]
" + HTML += "\[[initial(O.name)]\]: [initial(O.desc)]
" user << browse(jointext(HTML, null), "window=integrated_printer;size=[window_width]x[window_height];border=1;can_resize=1;can_close=1;can_minimize=1") + /obj/item/device/integrated_circuit_printer/Topic(href, href_list) if(..()) return 1 @@ -162,31 +133,36 @@ return 1 var/cost = 1 - + if(isnull(current_category)) - current_category = recipe_list[1] + current_category = SScircuit.circuit_fabricator_recipe_list[1] if(ispath(build_type, /obj/item/device/electronic_assembly)) var/obj/item/device/electronic_assembly/E = build_type cost = round( (initial(E.max_complexity) + initial(E.max_components) ) / 4) else var/obj/item/I = build_type cost = initial(I.w_class) - if(!(locate(build_type) in recipe_list[current_category])) + if(!build_type in SScircuit.circuit_fabricator_recipe_list[current_category]) return - if(metal - cost < 0) - to_chat(usr, "You need [cost] metal to build that!.") - return 1 - metal -= cost - new build_type(get_turf(loc)) + if(!debug) + if(metal - cost < 0) + to_chat(usr, "You need [cost] metal to build that!.") + return 1 + metal -= cost + var/obj/item/built = new build_type(get_turf(loc)) + usr.put_in_hands(built) + to_chat(usr, "[capitalize(built.name)] printed.") + playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE) interact(usr) + // FUKKEN UPGRADE DISKS /obj/item/weapon/disk/integrated_circuit/upgrade name = "integrated circuit printer upgrade disk" desc = "Install this into your integrated circuit printer to enhance it." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' icon_state = "upgrade_disk" item_state = "card-id" w_class = ITEMSIZE_SMALL diff --git a/code/modules/integrated_electronics/core/special_pins/color_pin.dm b/code/modules/integrated_electronics/core/special_pins/color_pin.dm index 2d20560fb6..e58d2d8e75 100644 --- a/code/modules/integrated_electronics/core/special_pins/color_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/color_pin.dm @@ -3,7 +3,7 @@ name = "color pin" /datum/integrated_io/color/ask_for_pin_data(mob/user) - var/new_data = input("Please select a color.","[src] color writing") as null|color + var/new_data = input("Please select a color.","[src] color writing", data ? data : "#000000") as null|color if(holder.check_interactivity(user) ) to_chat(user, "You input a new color into the pin.") write_data_to_pin(new_data) diff --git a/code/modules/integrated_electronics/core/tools.dm b/code/modules/integrated_electronics/core/tools.dm index 5d4133e3d3..eb42d92dda 100644 --- a/code/modules/integrated_electronics/core/tools.dm +++ b/code/modules/integrated_electronics/core/tools.dm @@ -9,11 +9,11 @@ desc = "It's a small wiring tool, with a wire roll, electric soldering iron, wire cutter, and more in one package. \ The wires used are generally useful for small electronics, such as circuitboards and breadboards, as opposed to larger wires \ used for power or data transmission." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' icon_state = "wirer-wire" item_state = "wirer" flags = CONDUCT - w_class = 2 + w_class = ITEMSIZE_SMALL var/datum/integrated_io/selected_io = null var/mode = WIRE @@ -108,7 +108,7 @@ name = "circuit debugger" desc = "This small tool allows one working with custom machinery to directly set data to a specific pin, useful for writing \ settings to specific circuits, or for debugging purposes. It can also pulse activation pins." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' icon_state = "debugger" flags = CONDUCT w_class = 2 @@ -252,7 +252,7 @@ /obj/item/weapon/storage/bag/circuits name = "circuit kit" desc = "This kit's essential for any circuitry projects." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_misc.dmi' icon_state = "circuit_kit" w_class = 3 display_contents_with_number = 0 @@ -261,11 +261,11 @@ /obj/item/weapon/storage/bag/circuits/mini, /obj/item/device/electronic_assembly, /obj/item/device/integrated_electronics, - /obj/item/weapon/crowbar, - /obj/item/weapon/screwdriver, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, /obj/item/device/multitool ) - cant_hold = list(/obj/item/weapon/screwdriver/power) + cant_hold = list(/obj/item/weapon/tool/screwdriver/power) /obj/item/weapon/storage/bag/circuits/basic/New() ..() @@ -290,8 +290,8 @@ new /obj/item/device/assembly/electronic_assembly(src) new /obj/item/device/assembly/electronic_assembly(src) new /obj/item/device/multitool(src) - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/crowbar(src) + new /obj/item/weapon/tool/screwdriver(src) + new /obj/item/weapon/tool/crowbar(src) make_exact_fit() /obj/item/weapon/storage/bag/circuits/all/New() @@ -317,7 +317,7 @@ new /obj/item/device/electronic_assembly/drone(src) new /obj/item/device/integrated_electronics/wirer(src) new /obj/item/device/integrated_electronics/debugger(src) - new /obj/item/weapon/crowbar(src) + new /obj/item/weapon/tool/crowbar(src) make_exact_fit() /obj/item/weapon/storage/bag/circuits/mini/ diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 0a516e360a..829027303c 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -6,7 +6,7 @@ origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2, TECH_DATA = 2) category_text = "Power - Passive" -/obj/item/integrated_circuit/passive/power/proc/make_energy() +/obj/item/integrated_circuit/passive/power/proc/handle_passive_energy() return // For calculators. @@ -20,7 +20,7 @@ spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH var/max_power = 1 -/obj/item/integrated_circuit/passive/power/solar_cell/make_energy() +/obj/item/integrated_circuit/passive/power/solar_cell/handle_passive_energy() var/turf/T = get_turf(src) var/light_amount = T ? T.get_lumcount() : 0 var/adjusted_power = max(max_power * light_amount, 0) @@ -39,7 +39,7 @@ spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH var/is_charge=0 -/obj/item/integrated_circuit/passive/power/starter/make_energy() +/obj/item/integrated_circuit/passive/power/starter/handle_passive_energy() if(assembly.battery) if(assembly.battery.charge) if(!is_charge) @@ -67,7 +67,7 @@ return FALSE // Robots and dead people don't have a metabolism. return TRUE -/obj/item/integrated_circuit/passive/power/metabolic_siphon/make_energy() +/obj/item/integrated_circuit/passive/power/metabolic_siphon/handle_passive_energy() var/mob/living/carbon/human/host = null if(assembly && istype(assembly, /obj/item/device/electronic_assembly/implant)) var/obj/item/device/electronic_assembly/implant/implant_assembly = assembly @@ -135,7 +135,7 @@ set_pin_data(IC_OUTPUT, 1, reagents.total_volume) push_data() -/obj/item/integrated_circuit/passive/power/chemical_cell/make_energy() +/obj/item/integrated_circuit/passive/power/chemical_cell/handle_passive_energy() if(assembly) for(var/I in fuel) if((assembly.battery.maxcharge-assembly.battery.charge) / CELLRATE > fuel[I]) @@ -156,7 +156,7 @@ spawn_flags = IC_SPAWN_RESEARCH power_amount = 2000 -/obj/item/integrated_circuit/passive/power/relay/make_energy() +/obj/item/integrated_circuit/passive/power/relay/handle_passive_energy() if(!assembly) return var/area/A = get_area(src) @@ -164,3 +164,78 @@ if(A.powered(EQUIP) && assembly.give_power(power_amount)) A.use_power(power_amount, EQUIP) // give_power() handles CELLRATE on its own. + +// Interacts with the powernet. +// Now you can make your own power generation (or poor man's powersink). + +/obj/item/integrated_circuit/passive/power/powernet + name = "power network interface" + desc = "Gives or takes power from a wire underneath the machine." + icon_state = "powernet" + extended_desc = "The assembly must be anchored, with a wrench, and a wire node must be avaiable directly underneath.
\ + The first pin determines if power is moved at all. The second pin, if true, will draw from the powernet to charge the assembly's \ + cell, otherwise it will give power from the cell to the powernet." + complexity = 20 + inputs = list( + "active" = IC_PINTYPE_BOOLEAN, + "draw power" = IC_PINTYPE_BOOLEAN + ) + outputs = list( + "power in grid" = IC_PINTYPE_NUMBER, + "surplus power" = IC_PINTYPE_NUMBER, + "load" = IC_PINTYPE_NUMBER + ) + activators = list() + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + origin_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 2) + var/obj/machinery/power/circuit_io/IO = null // Dummy power machine to move energy in/out without a bunch of code duplication. + var/throughput = 10000 // Give/take up to 10kW. + +/obj/item/integrated_circuit/passive/power/powernet/initialize() + IO = new(src) + return ..() + +/obj/item/integrated_circuit/passive/power/powernet/Destroy() + qdel(IO) + return ..() + +/obj/item/integrated_circuit/passive/power/powernet/on_anchored() + IO.connect_to_network() + +/obj/item/integrated_circuit/passive/power/powernet/on_unanchored() + IO.disconnect_from_network() + +/obj/item/integrated_circuit/passive/power/powernet/handle_passive_energy() + if(assembly && assembly.anchored && assembly.battery) + var/should_act = get_pin_data(IC_INPUT, 1) // Even if this is false, we still need to update the output pins with powernet information. + var/drawing = get_pin_data(IC_INPUT, 2) + + if(should_act) // We're gonna give or take from the net. + if(drawing) + var/to_transfer = min(throughput, assembly.battery.amount_missing() / CELLRATE) // So we don't need to draw 10kW if the cell needs much less. + var/amount = IO.draw_power(to_transfer) + assembly.give_power(amount) + else + var/amount = assembly.draw_power(throughput) + IO.add_avail(amount) + + set_pin_data(IC_OUTPUT, 1, IO.avail()) + set_pin_data(IC_OUTPUT, 2, IO.surplus()) + set_pin_data(IC_OUTPUT, 3, IO.viewload()) + +// Internal power machine for interacting with the powernet. +// It needs a bit of special code since base /machinery/power assumes loc will be a tile. +/obj/machinery/power/circuit_io + name = "embedded electrical I/O" + +/obj/machinery/power/circuit_io/connect_to_network() + var/turf/T = get_turf(src) + if(!T || !istype(T)) + return FALSE + + var/obj/structure/cable/C = T.get_cable_node() + if(!C || !C.powernet) + return FALSE + + C.powernet.add_machine(src) + return TRUE diff --git a/code/modules/integrated_electronics/subtypes/built_in.dm b/code/modules/integrated_electronics/subtypes/built_in.dm index 24eac86802..afb804c797 100644 --- a/code/modules/integrated_electronics/subtypes/built_in.dm +++ b/code/modules/integrated_electronics/subtypes/built_in.dm @@ -1,7 +1,7 @@ /obj/item/integrated_circuit/built_in name = "integrated circuit" desc = "It's a tiny chip! This one doesn't seem to do much, however." - icon = 'icons/obj/electronic_assemblies.dmi' + icon = 'icons/obj/integrated_electronics/electronic_setups.dmi' icon_state = "template" size = -1 w_class = ITEMSIZE_TINY @@ -25,4 +25,15 @@ /obj/item/integrated_circuit/built_in/device_output/do_work() if(istype(assembly, /obj/item/device/electronic_assembly/device)) var/obj/item/device/electronic_assembly/device/device = assembly - device.holder.pulse() \ No newline at end of file + device.holder.pulse() + +// Triggered when clothing assembly's hud button is clicked (or used inhand). +/obj/item/integrated_circuit/built_in/action_button + name = "external trigger circuit" + desc = "A built in chip that outputs a pulse when an external control event occurs." + extended_desc = "This outputs a pulse if the assembly's HUD button is clicked while the assembly is closed." + complexity = 0 + activators = list("on activation" = IC_PINTYPE_PULSE_OUT) + +/obj/item/integrated_circuit/built_in/action_button/do_work() + activate_pin(1) \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index b9f5c912d4..0ec00be317 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -318,5 +318,77 @@ set_pin_data(IC_OUTPUT, 1, x1 - x2) set_pin_data(IC_OUTPUT, 2, y1 - y2) + push_data() + activate_pin(2) + +/obj/item/integrated_circuit/converter/stringlength + name = "len circuit" + desc = "This circuit will return the number of characters in a string." + complexity = 1 + inputs = list( + "string" = IC_PINTYPE_STRING + ) + outputs = list( + "length" = IC_PINTYPE_NUMBER + ) + activators = list("get length" = IC_PINTYPE_PULSE_IN, "on acquisition" = IC_PINTYPE_PULSE_OUT) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/converter/stringlength/do_work() + set_pin_data(IC_OUTPUT, 1, length(get_pin_data(IC_INPUT, 1))) + push_data() + + activate_pin(2) + +/obj/item/integrated_circuit/converter/hsv2hex + name = "hsv to hexadecimal converter" + desc = "This circuit can convert a HSV (Hue, Saturation, and Value) color to a Hexadecimal RGB color." + extended_desc = "The first pin controls tint (0-359), the second pin controls how intense the tint is (0-255), \ + and the third controls how bright the tint is (0 for black, 127 for normal, 255 for white)." + icon_state = "hsv-hex" + inputs = list( + "hue" = IC_PINTYPE_NUMBER, + "saturation" = IC_PINTYPE_NUMBER, + "value" = IC_PINTYPE_NUMBER + ) + outputs = list("hexadecimal rgb" = IC_PINTYPE_COLOR) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/converter/hsv2hex/do_work() + var/result = null + pull_data() + var/hue = get_pin_data(IC_INPUT, 1) + var/saturation = get_pin_data(IC_INPUT, 2) + var/value = get_pin_data(IC_INPUT, 3) + if(isnum(hue) && isnum(saturation) && isnum(value)) + result = HSVtoRGB(hsv(AngleToHue(hue),saturation,value)) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) + +/obj/item/integrated_circuit/converter/rgb2hex + name = "rgb to hexadecimal converter" + desc = "This circuit can convert a RGB (Red, Green, Blue) color to a Hexadecimal RGB color." + extended_desc = "The first pin controls red amount, the second pin controls green amount, and the third controls blue amount. They all go from 0-255." + icon_state = "rgb-hex" + inputs = list( + "red" = IC_PINTYPE_NUMBER, + "green" = IC_PINTYPE_NUMBER, + "blue" = IC_PINTYPE_NUMBER + ) + outputs = list("hexadecimal rgb" = IC_PINTYPE_COLOR) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/converter/rgb2hex/do_work() + var/result = null + pull_data() + var/red = get_pin_data(IC_INPUT, 1) + var/green = get_pin_data(IC_INPUT, 2) + var/blue = get_pin_data(IC_INPUT, 3) + if(isnum(red) && isnum(green) && isnum(blue)) + result = rgb(red, green, blue) + + set_pin_data(IC_OUTPUT, 1, result) push_data() activate_pin(2) \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index ac9a0e13f9..c2e640403a 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -53,7 +53,7 @@ power_draw_per_use = 4 /obj/item/integrated_circuit/input/numberpad/ask_for_input(mob/user) - var/new_input = input(user, "Enter a number, please.","Number pad") as null|num + var/new_input = input(user, "Enter a number, please.","Number pad", get_pin_data(IC_OUTPUT, 1)) as null|num if(isnum(new_input) && CanInteract(user, physical_state)) set_pin_data(IC_OUTPUT, 1, new_input) push_data() @@ -72,18 +72,37 @@ power_draw_per_use = 4 /obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user) - var/new_input = input(user, "Enter some words, please.","Number pad") as null|text + var/new_input = input(user, "Enter some words, please.","Number pad", get_pin_data(IC_OUTPUT, 1)) as null|text if(istext(new_input) && CanInteract(user, physical_state)) set_pin_data(IC_OUTPUT, 1, new_input) push_data() activate_pin(1) +/obj/item/integrated_circuit/input/colorpad + name = "color pad" + desc = "This small color pad allows someone to input a hexadecimal color into the system." + icon_state = "colorpad" + complexity = 2 + can_be_asked_input = 1 + inputs = list() + outputs = list("color entered" = IC_PINTYPE_COLOR) + activators = list("on entered" = IC_PINTYPE_PULSE_IN) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + power_draw_per_use = 4 + +/obj/item/integrated_circuit/input/colorpad/ask_for_input(mob/user) + var/new_color = input(user, "Enter a color, please.", "Color pad", get_pin_data(IC_OUTPUT, 1)) as color|null + if(new_color && CanInteract(user, physical_state)) + set_pin_data(IC_OUTPUT, 1, new_color) + push_data() + activate_pin(1) + /obj/item/integrated_circuit/input/med_scanner name = "integrated medical analyser" desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is." icon_state = "medscan" complexity = 4 - inputs = list("\ target") + inputs = list("target" = IC_PINTYPE_REF) outputs = list( "total health %" = IC_PINTYPE_NUMBER, "total missing health" = IC_PINTYPE_NUMBER @@ -117,7 +136,7 @@ This type is much more precise, allowing the machine to know much more about the target than a normal analyzer." icon_state = "medscan_adv" complexity = 12 - inputs = list("\ target") + inputs = list("target" = IC_PINTYPE_REF) outputs = list( "total health %" = IC_PINTYPE_NUMBER, "total missing health" = IC_PINTYPE_NUMBER, @@ -159,7 +178,7 @@ relative coordinates, total amount of reagents, and maximum amount of reagents of the referenced object." icon_state = "video_camera" complexity = 6 - inputs = list("\ target" = IC_PINTYPE_REF) + inputs = list("target" = IC_PINTYPE_REF) outputs = list( "name" = IC_PINTYPE_STRING, "description" = IC_PINTYPE_STRING, @@ -262,7 +281,7 @@ complexity = 6 name = "advanced locator" desc = "This is needed for certain devices that demand a reference for a target to act upon. This type locates something \ - that is standing in given radius of up to 8 meters" + that is standing in given radius of up to 7 meters" extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. This means that it will \ give refs to nearby objects that are similar to given sample. If this pin is a string, the locator will search for\ item by matching desired text in name + description. If more than one valid object is found nearby, it will choose one of them at \ @@ -277,7 +296,7 @@ /obj/item/integrated_circuit/input/advanced_locator/on_data_written() var/rad = get_pin_data(IC_INPUT, 2) if(isnum(rad)) - rad = Clamp(rad, 0, 8) + rad = Clamp(rad, 0, 7) radius = rad /obj/item/integrated_circuit/input/advanced_locator/do_work() diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index 3e53a069f3..344a7dc47e 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -32,13 +32,13 @@ if(istype(O, /obj/item/weapon/gun)) var/obj/item/weapon/gun/gun = O if(installed_gun) - user << "There's already a weapon installed." + to_chat(user, "There's already a weapon installed.") return user.drop_from_inventory(gun) installed_gun = gun size += gun.w_class gun.forceMove(src) - user << "You slide \the [gun] into the firing mechanism." + to_chat(user, "You slide \the [gun] into the firing mechanism.") playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) else ..() @@ -46,12 +46,12 @@ /obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user) if(installed_gun) installed_gun.forceMove(get_turf(src)) - user << "You slide \the [installed_gun] out of the firing mechanism." + to_chat(user, "You slide \the [installed_gun] out of the firing mechanism.") size = initial(size) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) installed_gun = null else - user << "There's no weapon to remove from the mechanism." + to_chat(user, "There's no weapon to remove from the mechanism.") /obj/item/integrated_circuit/manipulation/weapon_firing/do_work() if(!installed_gun) diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index beefed282e..c3ff9b36d5 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -78,7 +78,25 @@ else if(assembly) assembly.set_light(0) - power_draw_idle = light_toggled ? light_brightness * 2 : 0 + power_draw_idle = light_toggled ? light_brightness * light_brightness : 0 // Should be the same draw as regular lights. + +/obj/item/integrated_circuit/output/light/power_fail() // Turns off the flashlight if there's no power left. + light_toggled = FALSE + update_lighting() + +/obj/item/integrated_circuit/output/light/advanced + name = "advanced light" + desc = "This light can turn on and off on command, in any color, and in various brightness levels." + extended_desc = "The brightness is limited to values between 1 and 6." + icon_state = "light_adv" + complexity = 8 + inputs = list( + "color" = IC_PINTYPE_COLOR, + "brightness" = IC_PINTYPE_NUMBER + ) + outputs = list() + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) /obj/item/integrated_circuit/output/light/advanced/update_lighting() var/new_color = get_pin_data(IC_INPUT, 1) @@ -91,42 +109,9 @@ ..() -/obj/item/integrated_circuit/output/light/power_fail() // Turns off the flashlight if there's no power left. - light_toggled = FALSE - update_lighting() - -/obj/item/integrated_circuit/output/light/advanced - name = "advanced light" - desc = "This light can turn on and off on command, in any color, and in various brightness levels." - icon_state = "light_adv" - complexity = 8 - inputs = list( - "color" = IC_PINTYPE_COLOR, - "brightness" = IC_PINTYPE_NUMBER - ) - outputs = list() - spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) - /obj/item/integrated_circuit/output/light/advanced/on_data_written() update_lighting() -/obj/item/integrated_circuit/output/sound - name = "speaker circuit" - desc = "A miniature speaker is attached to this component." - icon_state = "speaker" - complexity = 8 - cooldown_per_use = 4 SECONDS - inputs = list( - "sound ID" = IC_PINTYPE_STRING, - "volume" = IC_PINTYPE_NUMBER, - "frequency" = IC_PINTYPE_BOOLEAN - ) - outputs = list() - activators = list("play sound" = IC_PINTYPE_PULSE_IN) - power_draw_per_use = 20 - var/list/sounds = list() - /obj/item/integrated_circuit/output/text_to_speech name = "text-to-speech circuit" desc = "A miniature speaker is attached to this component." @@ -146,6 +131,22 @@ var/obj/O = assembly ? loc : assembly audible_message("\icon[O] \The [O.name] states, \"[text]\"") +/obj/item/integrated_circuit/output/sound + name = "speaker circuit" + desc = "A miniature speaker is attached to this component." + icon_state = "speaker" + complexity = 8 + cooldown_per_use = 4 SECONDS + inputs = list( + "sound ID" = IC_PINTYPE_STRING, + "volume" = IC_PINTYPE_NUMBER, + "frequency" = IC_PINTYPE_BOOLEAN + ) + outputs = list() + activators = list("play sound" = IC_PINTYPE_PULSE_IN) + power_draw_per_use = 20 + var/list/sounds = list() + /obj/item/integrated_circuit/output/sound/New() ..() extended_desc = list() @@ -246,7 +247,7 @@ on_data_written() /obj/item/integrated_circuit/output/video_camera/Destroy() - qdel_null(camera) + QDEL_NULL(camera) return ..() /obj/item/integrated_circuit/output/video_camera/proc/set_camera_status(var/status) @@ -337,3 +338,147 @@ /obj/item/integrated_circuit/output/led/pink name = "pink LED" led_color = COLOR_PINK + + + +/obj/item/integrated_circuit/output/holographic_projector + name = "holographic projector" + desc = "This projects a holographic copy of an object." + extended_desc = "If the assembly moves, the hologram will also move.
\ + Position coordinates are relative to the assembly, and are capped between -7 and 7.
\ + The assembly must be able to see the object to make a holographic copy of it.
\ + Scaling is capped between -2 and 2.
\ + The rotation pin uses degrees.
\ + Imitated object cannot be changed while projecting. Position, \ + scale, and rotation can be updated without restarting by pulsing the update hologram pin." + complexity = 40 + icon_state = "holo_projector" + inputs = list( + "project hologram" = IC_PINTYPE_BOOLEAN, + "object to copy" = IC_PINTYPE_REF, + "hologram color" = IC_PINTYPE_COLOR, + "hologram X pos" = IC_PINTYPE_NUMBER, + "hologram Y pos" = IC_PINTYPE_NUMBER, + "hologram scale" = IC_PINTYPE_NUMBER, + "hologram rotation" = IC_PINTYPE_NUMBER + ) + inputs_default = list( + "3" = "#7DB4E1", + "4" = 0, + "5" = 0, + "6" = 1, + "7" = 0 + ) + outputs = list() + activators = list( + "update hologram" = IC_PINTYPE_PULSE_IN, + "on drawn hologram" = IC_PINTYPE_PULSE_OUT + ) + power_draw_idle = 0 // Raises to 500 when active, like a regular holopad. + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + var/obj/effect/overlay/holographic/hologram = null // Reference to the hologram effect, and also used to see if component is active. + var/icon/holo_base = null // Uncolored holographic icon. +// var/datum/beam/holo_beam = null // A visual effect, to make it easy to know where a hologram is coming from. + // It is commented out due to picking up the assembly killing the beam. + +/obj/item/integrated_circuit/output/holographic_projector/Destroy() + destroy_hologram() + return ..() + +/obj/item/integrated_circuit/output/holographic_projector/do_work() + var/toggled = get_pin_data(IC_INPUT, 1) + + if(hologram) // Currently active. + if(!toggled) // Being turned off. + destroy_hologram() + + else // Updating position/dir/etc. + update_hologram() + + else // Currently not active. + if(toggled) // We're gonna turn on. + create_hologram() + + activate_pin(2) + +// Updates some changable aspects of the hologram like the size or position. +/obj/item/integrated_circuit/output/holographic_projector/proc/update_hologram() + if(!hologram) + return FALSE + + var/holo_scale = get_pin_data(IC_INPUT, 6) + var/holo_rotation = get_pin_data(IC_INPUT, 7) + + if(!isnum(holo_scale) || !isnum(holo_rotation) ) + return FALSE // Invalid. + + hologram.adjust_scale(between(-2, holo_scale, 2) ) + hologram.adjust_rotation(holo_rotation) + update_hologram_position() + + return TRUE + +// This is a seperate function because other things besides do_work() might warrant updating position, like movement, without bothering with other parts. +/obj/item/integrated_circuit/output/holographic_projector/proc/update_hologram_position() + var/holo_x = get_pin_data(IC_INPUT, 4) + var/holo_y = get_pin_data(IC_INPUT, 5) + if(!isnum(holo_x) || !isnum(holo_y) ) + return FALSE + + holo_x = between(-7, holo_x, 7) + holo_y = between(-7, holo_y, 7) + + var/turf/T = get_turf(src) + if(T) + // Absolute coordinates. + var/holo_abs_x = T.x + holo_x + var/holo_abs_y = T.y + holo_y + var/turf/W = locate(holo_abs_x, holo_abs_y, T.z) + if(W) // Make sure we're not out of bounds. + hologram.forceMove(W) + return TRUE + return FALSE + +/obj/item/integrated_circuit/output/holographic_projector/proc/create_hologram() + var/atom/movable/AM = get_pin_data_as_type(IC_INPUT, 2, /atom/movable) + var/holo_color = get_pin_data(IC_INPUT, 3) + + if(istype(AM) && assembly) + if(AM in view(get_turf(src))) // It must be able to 'see' the object it will copy. + hologram = new(src) + var/icon/holo_icon = getHologramIcon(getFlatIcon(AM), no_color = TRUE) + // holo_icon.GrayScale() // So it looks better colored. + if(holo_color) // The color pin should ensure that it is a valid hex. + holo_icon.ColorTone(holo_color) + hologram.icon = holo_icon + hologram.name = "[AM.name] (Hologram)" + update_hologram() + + // holo_beam = assembly.Beam(hologram, icon_state = "holo_beam", time = INFINITY, maxdistance = world.view) + power_draw_idle = 500 + return TRUE + return FALSE + + + +/obj/item/integrated_circuit/output/holographic_projector/proc/destroy_hologram() + hologram.forceMove(src) + qdel(hologram) + +// holo_beam.End() +// QDEL_NULL(holo_beam) + + power_draw_idle = 0 + +/obj/item/integrated_circuit/output/holographic_projector/on_data_written() + if(hologram) + update_hologram() + +/obj/item/integrated_circuit/output/holographic_projector/on_loc_moved(atom/oldloc) + if(hologram) + update_hologram_position() + +/obj/item/integrated_circuit/output/holographic_projector/power_fail() + if(hologram) + destroy_hologram() + set_pin_data(IC_INPUT, 1, FALSE) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 65929e51c9..e8ca2ae134 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -2,7 +2,6 @@ category_text = "Reagent" var/volume = 0 unacidable = 1 - phoronproof = 1 origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/New() diff --git a/code/modules/integrated_electronics/~defines/~defines.dm b/code/modules/integrated_electronics/~defines/~defines.dm index 90aa05acf1..a9c68b28af 100644 --- a/code/modules/integrated_electronics/~defines/~defines.dm +++ b/code/modules/integrated_electronics/~defines/~defines.dm @@ -5,9 +5,6 @@ #undef DATA_CHANNEL #undef PULSE_CHANNEL -#undef IC_SPAWN_DEFAULT -//#undef IC_SPAWN_RESEARCH // Research designs depend on this unfortunately. - #undef IC_FORMAT_ANY #undef IC_FORMAT_STRING #undef IC_FORMAT_CHAR diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 10c1fb2a8e..63f855b8a4 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -37,15 +37,15 @@ return else name = ("bookcase ([newname])") - else if(istype(O,/obj/item/weapon/wrench)) + else if(O.is_wrench()) playsound(loc, O.usesound, 100, 1) - user << (anchored ? "You unfasten \the [src] from the floor." : "You secure \the [src] to the floor.") + to_chat(user, (anchored ? "You unfasten \the [src] from the floor." : "You secure \the [src] to the floor.")) anchored = !anchored - else if(istype(O,/obj/item/weapon/screwdriver)) + else if(O.is_screwdriver()) playsound(loc, O.usesound, 75, 1) - user << "You begin dismantling \the [src]." + to_chat(user, "You begin dismantling \the [src].") if(do_after(user,25 * O.toolspeed)) - user << "You dismantle \the [src]." + to_chat(user, "You dismantle \the [src].") new /obj/item/stack/material/wood(get_turf(src), 3) for(var/obj/item/weapon/book/b in contents) b.loc = (get_turf(src)) @@ -154,19 +154,19 @@ /obj/item/weapon/book/attack_self(var/mob/user as mob) if(carved) if(store) - user << "[store] falls out of [title]!" + to_chat(user, "[store] falls out of [title]!") store.loc = get_turf(src.loc) store = null return else - user << "The pages of [title] have been cut out!" + to_chat(user, "The pages of [title] have been cut out!") return if(src.dat) user << browse("Penned by [author].
" + "[dat]", "window=book") user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.") onclose(user, "book") else - user << "This book is completely blank!" + to_chat(user, "This book is completely blank!") /obj/item/weapon/book/attackby(obj/item/weapon/W as obj, mob/user as mob) if(carved) @@ -175,24 +175,24 @@ user.drop_item() W.loc = src store = W - user << "You put [W] in [title]." + to_chat(user, "You put [W] in [title].") return else - user << "[W] won't fit in [title]." + to_chat(user, "[W] won't fit in [title].") return else - user << "There's already something in [title]!" + to_chat(user, "There's already something in [title]!") return if(istype(W, /obj/item/weapon/pen)) if(unique) - user << "These pages don't seem to take the ink well. Looks like you can't modify it." + to_chat(user, "These pages don't seem to take the ink well. Looks like you can't modify it.") return var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel") switch(choice) if("Title") var/newtitle = reject_bad_text(sanitizeSafe(input("Write a new title:"))) if(!newtitle) - usr << "The title is invalid." + to_chat(usr, "The title is invalid.") return else src.name = newtitle @@ -200,14 +200,14 @@ if("Contents") var/content = sanitize(input("Write your book's contents (HTML NOT allowed):") as message|null, MAX_BOOK_MESSAGE_LEN) if(!content) - usr << "The content is invalid." + to_chat(usr, "The content is invalid.") return else src.dat += content if("Author") var/newauthor = sanitize(input(usr, "Write the author's name:")) if(!newauthor) - usr << "The name is invalid." + to_chat(usr, "The name is invalid.") return else src.author = newauthor @@ -216,37 +216,37 @@ else if(istype(W, /obj/item/weapon/barcodescanner)) var/obj/item/weapon/barcodescanner/scanner = W if(!scanner.computer) - user << "[W]'s screen flashes: 'No associated computer found!'" + to_chat(user, "[W]'s screen flashes: 'No associated computer found!'") else switch(scanner.mode) if(0) scanner.book = src - user << "[W]'s screen flashes: 'Book stored in buffer.'" + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer.'") if(1) scanner.book = src scanner.computer.buffer_book = src.name - user << "[W]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'" + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'") if(2) scanner.book = src for(var/datum/borrowbook/b in scanner.computer.checkouts) if(b.bookname == src.name) scanner.computer.checkouts.Remove(b) - user << "[W]'s screen flashes: 'Book stored in buffer. Book has been checked in.'" + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer. Book has been checked in.'") return - user << "[W]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'" + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'") if(3) scanner.book = src for(var/obj/item/weapon/book in scanner.computer.inventory) if(book == src) - user << "[W]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'" + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'") return scanner.computer.inventory.Add(src) - user << "[W]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'" - else if(istype(W, /obj/item/weapon/material/knife) || istype(W, /obj/item/weapon/wirecutters)) + to_chat(user, "[W]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'") + else if(istype(W, /obj/item/weapon/material/knife) || W.is_wirecutter()) if(carved) return - user << "You begin to carve out [title]." + to_chat(user, "You begin to carve out [title].") if(do_after(user, 30)) - user << "You carve out the pages from [title]! You didn't want to read it anyway." + to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.") carved = 1 return else @@ -278,7 +278,7 @@ mode += 1 if(mode > 3) mode = 0 - user << "[src] Status Display:" + to_chat(user, "[src] Status Display:") var/modedesc switch(mode) if(0) @@ -291,9 +291,9 @@ modedesc = "Scan book to local buffer, attempt to add book to general inventory." else modedesc = "ERROR" - user << " - Mode [mode] : [modedesc]" + to_chat(user, " - Mode [mode] : [modedesc]") if(src.computer) - user << "Computer has been associated with this unit." + to_chat(user, "Computer has been associated with this unit.") else - user << "No associated computer found. Only local scans will function properly." - user << "\n" \ No newline at end of file + to_chat(user, "No associated computer found. Only local scans will function properly.") + to_chat(user, "\n") \ No newline at end of file diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index c6f9503a0a..27105b0701 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -37,8 +37,8 @@ var/list/global/map_templates = list() if(rename) name = rename -/datum/map_template/proc/preload_size(path) - var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) +/datum/map_template/proc/preload_size(path, orientation = SOUTH) + var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE, orientation=orientation) if(bounds) width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 height = bounds[MAP_MAXY] @@ -82,7 +82,7 @@ var/list/global/map_templates = list() admin_notice("Submap initializations finished.", R_DEBUG) -/datum/map_template/proc/load_new_z(var/centered = FALSE) +/datum/map_template/proc/load_new_z(var/centered = FALSE, var/orientation = SOUTH) var/x = 1 var/y = 1 @@ -90,7 +90,7 @@ var/list/global/map_templates = list() x = round((world.maxx - width)/2) y = round((world.maxy - height)/2) - var/list/bounds = maploader.load_map(file(mappath), x, y, no_changeturf = TRUE) + var/list/bounds = maploader.load_map(file(mappath), x, y, no_changeturf = TRUE, orientation=orientation) if(!bounds) return FALSE @@ -102,10 +102,10 @@ var/list/global/map_templates = list() on_map_loaded(world.maxz) //VOREStation Edit return TRUE -/datum/map_template/proc/load(turf/T, centered = FALSE) +/datum/map_template/proc/load(turf/T, centered = FALSE, orientation = SOUTH) var/old_T = T if(centered) - T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z) + T = locate(T.x - round(((orientation & NORTH|SOUTH) ? width : height)/2) , T.y - round(((orientation & NORTH|SOUTH) ? height : width)/2) , T.z) if(!T) return if(T.x+width > world.maxx) @@ -114,9 +114,9 @@ var/list/global/map_templates = list() return if(annihilate) - annihilate_bounds(old_T, centered) + annihilate_bounds(old_T, centered, orientation) - var/list/bounds = maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE) + var/list/bounds = maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE, orientation = orientation) if(!bounds) return @@ -130,18 +130,18 @@ var/list/global/map_templates = list() loaded++ return TRUE -/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE) +/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE, orientation = SOUTH) var/turf/placement = T if(centered) - var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z) + var/turf/corner = locate(placement.x - round(((orientation & NORTH|SOUTH) ? width : height)/2), placement.y - round(((orientation & NORTH|SOUTH) ? height : width)/2), placement.z) if(corner) placement = corner - return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z)) + return block(placement, locate(placement.x+((orientation & NORTH|SOUTH) ? width : height)-1, placement.y+((orientation & NORTH|SOUTH) ? height : width)-1, placement.z)) -/datum/map_template/proc/annihilate_bounds(turf/origin, centered = FALSE) +/datum/map_template/proc/annihilate_bounds(turf/origin, centered = FALSE, orientation = SOUTH) var/deleted_atoms = 0 admin_notice("Annihilating objects in submap loading locatation.", R_DEBUG) - var/list/turfs_to_clean = get_affected_turfs(origin, centered) + var/list/turfs_to_clean = get_affected_turfs(origin, centered, orientation) if(turfs_to_clean.len) for(var/turf/T in turfs_to_clean) for(var/atom/movable/AM in T) @@ -152,9 +152,9 @@ var/list/global/map_templates = list() //for your ever biggening badminnery kevinz000 //⤠- Cyberboss -/proc/load_new_z_level(var/file, var/name) +/proc/load_new_z_level(var/file, var/name, var/orientation = SOUTH) var/datum/map_template/template = new(file, name) - template.load_new_z() + template.load_new_z(orientation) // Very similar to the /tg/ version. /proc/seed_submaps(var/list/z_levels, var/budget = 0, var/whitelist = /area/space, var/desired_map_template_type = null) @@ -226,17 +226,19 @@ var/list/global/map_templates = list() var/specific_sanity = 100 // A hundred chances to place the chosen submap. while(specific_sanity > 0) specific_sanity-- - var/width_border = TRANSITIONEDGE + SUBMAP_MAP_EDGE_PAD + round(chosen_template.width / 2) - var/height_border = TRANSITIONEDGE + SUBMAP_MAP_EDGE_PAD + round(chosen_template.height / 2) + var/orientation = pick(cardinal) + chosen_template.preload_size(chosen_template.mappath, orientation) + var/width_border = TRANSITIONEDGE + SUBMAP_MAP_EDGE_PAD + round(((orientation & NORTH|SOUTH) ? chosen_template.width : chosen_template.height) / 2) + var/height_border = TRANSITIONEDGE + SUBMAP_MAP_EDGE_PAD + round(((orientation & NORTH|SOUTH) ? chosen_template.height : chosen_template.width) / 2) var/z_level = pick(z_levels) var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level) var/valid = TRUE - for(var/turf/check in chosen_template.get_affected_turfs(T,1)) + for(var/turf/check in chosen_template.get_affected_turfs(T,TRUE,orientation)) var/area/new_area = get_area(check) if(!(istype(new_area, whitelist))) valid = FALSE // Probably overlapping something important. - // world << "Invalid due to overlapping with area [new_area.type], when wanting area [whitelist]." + // world << "Invalid due to overlapping with area [new_area.type] at ([check.x], [check.y], [check.z]), when attempting to place at ([T.x], [T.y], [T.z])." break CHECK_TICK @@ -245,10 +247,10 @@ var/list/global/map_templates = list() if(!valid) continue - admin_notice("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])", R_DEBUG) + admin_notice("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])\n", R_DEBUG) // Do loading here. - chosen_template.load(T, centered = TRUE) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead. + chosen_template.load(T, centered = TRUE, orientation=orientation) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead. CHECK_TICK diff --git a/code/modules/maps/tg/reader.dm b/code/modules/maps/tg/reader.dm index 027d1c4cae..ff66d4bdd2 100644 --- a/code/modules/maps/tg/reader.dm +++ b/code/modules/maps/tg/reader.dm @@ -35,7 +35,7 @@ var/global/use_preloader = FALSE * 2) Read the map line by line, parsing the result (using parse_grid) * */ -/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num, no_changeturf as num) +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num, no_changeturf as num, orientation as num) //How I wish for RAII if(!measureOnly) Master.StartLoadingMap() @@ -43,7 +43,7 @@ var/global/use_preloader = FALSE #ifdef TESTING turfsSkipped = 0 #endif - . = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf) + . = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, orientation) #ifdef TESTING if(turfsSkipped) testing("Skipped loading [turfsSkipped] default turfs") @@ -51,7 +51,7 @@ var/global/use_preloader = FALSE if(!measureOnly) Master.StopLoadingMap() -/dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf) +/dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, orientation) var/tfile = dmm_file//the map file we're creating if(isfile(tfile)) tfile = file2text(tfile) @@ -63,6 +63,10 @@ var/global/use_preloader = FALSE if(!z_offset) z_offset = world.maxz + 1 + // If it's not a single dir, default to north (Default orientation) + if(!orientation in cardinal) + orientation = SOUTH + var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) var/list/grid_models = list() var/key_len = 0 @@ -132,14 +136,71 @@ var/global/use_preloader = FALSE bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy)) var/maxx = xcrdStart + + // Assemble the grid of keys + var/list/key_list = list() + for(var/line in gridLines) + var/list/line_keys = list() + xcrd = 1 + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd + + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + line_keys[++line_keys.len] = model_key + #ifdef TESTING + else + ++turfsSkipped + #endif + CHECK_TICK + maxx = max(maxx, ++xcrd) + key_list[++key_list.len] = line_keys + + // Rotate the list according to orientation + if(orientation != SOUTH) + var/num_cols = key_list[1].len + var/num_rows = key_list.len + var/list/new_key_list = list() + // If it's rotated 180 degrees, the dimensions are the same + if(orientation == NORTH) + new_key_list.len = num_rows + for(var/i = 1 to new_key_list.len) + new_key_list[i] = list() + new_key_list[i].len = num_cols + // Else, the dimensions are swapped + else + new_key_list.len = num_cols + for(var/i = 1 to new_key_list.len) + new_key_list[i] = list() + new_key_list[i].len = num_rows + + num_rows++ // Buffering against the base index of 1 + num_cols++ + // Populate the new list + for(var/i = 1 to new_key_list.len) + for(var/j = 1 to new_key_list[i].len) + switch(orientation) + if(NORTH) + new_key_list[i][j] = key_list[num_rows - i][num_cols - j] + if(EAST) + new_key_list[i][j] = key_list[num_rows - j][i] + if(WEST) + new_key_list[i][j] = key_list[j][num_cols - i] + + key_list = new_key_list + if(measureOnly) - for(var/line in gridLines) - maxx = max(maxx, xcrdStart + length(line) / key_len - 1) + for(var/list/line in key_list) + maxx = max(maxx, line.len) else - for(var/line in gridLines) + for(var/i = 1 to key_list.len) if(ycrd <= world.maxy && ycrd >= 1) xcrd = xcrdStart - for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + for(var/j = 1 to key_list[1].len) if(xcrd > world.maxx) if(cropMap) break @@ -147,12 +208,11 @@ var/global/use_preloader = FALSE world.maxx = xcrd if(xcrd >= 1) - var/model_key = copytext(line, tpos, tpos + key_len) var/no_afterchange = no_changeturf || zexpansion - if(!no_afterchange || (model_key != space_key)) - if(!grid_models[model_key]) - throw EXCEPTION("Undefined model key in DMM.") - parse_grid(grid_models[model_key], model_key, xcrd, ycrd, zcrd, no_changeturf || zexpansion) + if(!no_afterchange || (key_list[i][j] != space_key)) + if(!grid_models[key_list[i][j]]) + throw EXCEPTION("Undefined model key in DMM: [dmm_file], [key_list[i][j]]") + parse_grid(grid_models[key_list[i][j]], key_list[i][j], xcrd, ycrd, zcrd, no_afterchange, orientation) #ifdef TESTING else ++turfsSkipped @@ -194,7 +254,7 @@ var/global/use_preloader = FALSE * 4) Instanciates the atom with its variables * */ -/dmm_suite/proc/parse_grid(model as text, model_key as text, xcrd as num,ycrd as num,zcrd as num, no_changeturf as num) +/dmm_suite/proc/parse_grid(model as text, model_key as text, xcrd as num,ycrd as num,zcrd as num, no_changeturf as num, orientation as num) /*Method parse_grid() - Accepts a text string containing a comma separated list of type paths of the same construction as those contained in a .dmm file, and instantiates them. @@ -248,6 +308,12 @@ var/global/use_preloader = FALSE if(istext(value)) fields[I] = apply_text_macros(value) + // Rotate dir if orientation isn't south (default) + if(fields["dir"]) + fields["dir"] = turn(fields["dir"], dir2angle(orientation) + 180) + else + fields["dir"] = turn(SOUTH, dir2angle(orientation) + 180) + //then fill the members_attributes list with the corresponding variables members_attributes.len++ members_attributes[index++] = fields diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 66586535d3..f8aad253d8 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -863,7 +863,7 @@ var/list/name_to_material sheet_plural_name = "bricks" /material/cult/place_dismantled_girder(var/turf/target) - new /obj/structure/girder/cult(target) + new /obj/structure/girder/cult(target, "cult") /material/cult/place_dismantled_product(var/turf/target) new /obj/effect/decal/cleanable/blood(target) diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm index 2536f0ac2d..baf8094967 100644 --- a/code/modules/mining/coins.dm +++ b/code/modules/mining/coins.dm @@ -57,7 +57,7 @@ else user << "This cable coil appears to be empty." return - else if(istype(W,/obj/item/weapon/wirecutters)) + else if(W.is_wirecutter()) if(!string_attached) ..() return diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 99fe3f85ee..7cf8bc575e 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -158,13 +158,13 @@ if(istype(O, /obj/item/weapon/cell)) if(cell) - user << "The drill already has a cell installed." + to_chat(user, "The drill already has a cell installed.") else user.drop_item() O.loc = src cell = O component_parts += O - user << "You install \the [O]." + to_chat(user, "You install \the [O].") return ..() @@ -172,13 +172,13 @@ check_supports() if (panel_open && cell && user.Adjacent(src)) - user << "You take out \the [cell]." + to_chat(user, "You take out \the [cell].") cell.loc = get_turf(user) component_parts -= cell cell = null return else if(need_player_check) - user << "You hit the manual override and reset the drill's error checking." + to_chat(user, "You hit the manual override and reset the drill's error checking.") need_player_check = 0 if(anchored) get_resource_field() @@ -193,9 +193,9 @@ else visible_message("\The [src] shudders to a grinding halt.") else - user << "The drill is unpowered." + to_chat(user, "The drill is unpowered.") else - user << "Turning on a piece of industrial machinery without sufficient bracing or wires exposed is a bad idea." + to_chat(user, "Turning on a piece of industrial machinery without sufficient bracing or wires exposed is a bad idea.") update_icon() @@ -289,9 +289,9 @@ if(B) for(var/obj/item/weapon/ore/O in contents) O.loc = B - usr << "You unload the drill's storage cache into the ore box." + to_chat(usr, "You unload the drill's storage cache into the ore box.") else - usr << "You must move an ore box up to the drill before you can unload it." + to_chat(usr, "You must move an ore box up to the drill before you can unload it.") /obj/machinery/mining/brace @@ -308,7 +308,7 @@ /obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob) if(connected && connected.active) - user << "You can't work with the brace of a running drill!" + to_chat(user, "You can't work with the brace of a running drill!") return if(default_deconstruction_screwdriver(user, W)) @@ -316,14 +316,14 @@ if(default_deconstruction_crowbar(user, W)) return - if(istype(W,/obj/item/weapon/wrench)) + if(W.is_wrench()) if(istype(get_turf(src), /turf/space)) - user << "You can't anchor something to empty space. Idiot." + to_chat(user, "You can't anchor something to empty space. Idiot.") return playsound(src, W.usesound, 100, 1) - user << "You [anchored ? "un" : ""]anchor the brace." + to_chat(user, "You [anchored ? "un" : ""]anchor the brace.") anchored = !anchored if(anchored) @@ -371,7 +371,7 @@ if(usr.stat) return if (src.anchored) - usr << "It is anchored in place!" + to_chat(usr, "It is anchored in place!") return 0 src.set_dir(turn(src.dir, 90)) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index ca03098f55..f02c686921 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -11,7 +11,8 @@ density = TRUE anchored = TRUE - var/obj/item/weapon/card/id/inserted_id // VOREStation Edit - Inserted Id card + var/obj/item/weapon/card/id/inserted_id // Inserted ID card, for points + var/obj/machinery/mineral/processing_unit/machine = null var/show_all_ores = FALSE @@ -24,13 +25,17 @@ log_debug("Ore processing machine console at [src.x], [src.y], [src.z] could not find its machine!") qdel(src) -// VOREStation Add Start /obj/machinery/mineral/processing_unit_console/Destroy() if(inserted_id) inserted_id.forceMove(loc) //Prevents deconstructing from deleting whatever ID was inside it. . = ..() -/obj/machinery/mineral/processing_unit_console/attackby(var/obj/item/I, var/mob/user) +/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/mineral/processing_unit_console/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/card/id)) if(!powered()) return @@ -40,12 +45,6 @@ interact(user) return ..() -// VOREStation Add End - -/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) - if(..()) - return - interact(user) /obj/machinery/mineral/processing_unit_console/interact(mob/user) if(..()) @@ -58,14 +57,13 @@ user.set_machine(src) var/dat = "

Ore processor console

" - // VOREStation Add Start + dat += "Current unclaimed points: [machine.points]
" if(istype(inserted_id)) dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
" dat += "Claim points.
" else dat += "No ID inserted. Insert ID.
" - // VOREStation Add End dat += "
" @@ -123,7 +121,6 @@ show_all_ores = !show_all_ores - // VOREStation Add Start if(href_list["choice"]) if(istype(inserted_id)) if(href_list["choice"] == "eject") @@ -138,13 +135,11 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) - if(!usr.drop_item()) - return 1 + usr.drop_item() I.forceMove(src) inserted_id = I else to_chat(usr, "No valid ID.") - // VOREStation Add End src.updateUsrDialog() return @@ -167,20 +162,19 @@ var/list/ores_stored[0] var/static/list/alloy_data var/active = FALSE - // VOREStation Add Start + var/points = 0 var/static/list/ore_values = list( "sand" = 1, "hematite" = 1, "carbon" = 1, - "phoron" = 15, - "silver" = 16, - "gold" = 18, + "phoron" = 15, + "silver" = 16, + "gold" = 18, "uranium" = 30, "diamond" = 50, "platinum" = 40, "mhydrogen" = 40) - // VOREStation Add End /obj/machinery/mineral/processing_unit/New() ..() @@ -211,8 +205,12 @@ return /obj/machinery/mineral/processing_unit/process() - if(!src.output || !src.input) return - if(panel_open || !powered()) return // VOREStation Edit - Don't work when unpowered + + if (!src.output || !src.input) + return + + if(panel_open || !powered()) + return var/list/tick_alloys = list() @@ -222,8 +220,7 @@ if(!O) break if(!isnull(ores_stored[O.material])) ores_stored[O.material]++ - points += ore_values[O.material] // VOREStation Edit - Give Points! - + points += ore_values[O.material] // Give Points! qdel(O) if(!active) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 9e35a7f0ff..cf0f036eea 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -18,6 +18,8 @@ var/list/mining_overlay_cache = list() blocks_air = 1 temperature = T0C + can_dirty = FALSE + var/ore/mineral var/sand_dug var/mined_ore = 0 @@ -206,7 +208,7 @@ var/list/mining_overlay_cache = list() /turf/simulated/mineral/bullet_act(var/obj/item/projectile/Proj) // Emitter blasts - if(istype(Proj, /obj/item/projectile/beam/emitter)) + if(istype(Proj, /obj/item/projectile/beam/emitter) || istype(Proj, /obj/item/projectile/beam/heavylaser/fakeemitter)) emitter_blasts_taken++ if(emitter_blasts_taken > 2) // 3 blasts per tile mined_ore = 1 diff --git a/code/modules/mining/orm_vr/construction.dm b/code/modules/mining/ore_redemption_machine/construction.dm similarity index 100% rename from code/modules/mining/orm_vr/construction.dm rename to code/modules/mining/ore_redemption_machine/construction.dm diff --git a/code/modules/mining/orm_vr/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm similarity index 95% rename from code/modules/mining/orm_vr/equipment_vendor.dm rename to code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 7b1f2e7e12..1c79dae76e 100644 --- a/code/modules/mining/orm_vr/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -3,13 +3,14 @@ /obj/machinery/mineral/equipment_vendor name = "mining equipment vendor" desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here." - icon = 'icons/obj/machines/mining_machines_vr.dmi' + icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "mining" density = TRUE anchored = TRUE circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor var/icon_deny = "mining-deny" var/obj/item/weapon/card/id/inserted_id + //VOREStation Edit - Heavily modified list var/list/prize_list = list( new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10), new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100), @@ -53,6 +54,7 @@ new /datum/data/mining_equipment("KA Efficiency Increase", /obj/item/borg/upgrade/modkit/efficiency, 1200), new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000) ) + //VOREStation Edit End /datum/data/mining_equipment var/equipment_name = "generic" @@ -183,12 +185,14 @@ var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher") if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer) return + //VOREStation Edit Start - Uncommented these var/drop_location = drop_location() switch(selection) if("Kinetic Accelerator") new /obj/item/weapon/gun/energy/kinetic_accelerator(drop_location) if("Resonator") new /obj/item/resonator(drop_location) + //VOREStation Edit End // if("Mining Drone") // new /obj/item/storage/box/drone_kit(drop_location) // if("Advanced Scanner") @@ -197,6 +201,15 @@ // new /obj/item/twohanded/required/mining_hammer(drop_location) qdel(voucher) +/obj/machinery/mineral/equipment_vendor/proc/new_prize(var/name, var/path, var/cost) // Generic proc for adding new entries. Good for abusing for FUN and PROFIT. + if(!cost) + cost = 100 + if(!path) + path = /obj/item/stack/marker_beacon + if(!name) + name = "Generic Entry" + prize_list += new /datum/data/mining_equipment(name, path, cost) + /obj/machinery/mineral/equipment_vendor/ex_act(severity, target) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) diff --git a/code/modules/mining/orm_vr/mine_point_items.dm b/code/modules/mining/ore_redemption_machine/mine_point_items.dm similarity index 97% rename from code/modules/mining/orm_vr/mine_point_items.dm rename to code/modules/mining/ore_redemption_machine/mine_point_items.dm index 1994e77001..da4463842a 100644 --- a/code/modules/mining/orm_vr/mine_point_items.dm +++ b/code/modules/mining/ore_redemption_machine/mine_point_items.dm @@ -5,7 +5,7 @@ /obj/item/mining_voucher name = "mining voucher" desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor." - icon = 'icons/obj/mining_vr.dmi' + icon = 'icons/obj/mining.dmi' icon_state = "mining_voucher" w_class = ITEMSIZE_TINY diff --git a/code/modules/mining/resonator.dm b/code/modules/mining/resonator.dm new file mode 100644 index 0000000000..1e96dc775b --- /dev/null +++ b/code/modules/mining/resonator.dm @@ -0,0 +1,107 @@ +/**********************Resonator**********************/ + +/obj/item/resonator + name = "resonator" + icon = 'icons/obj/mining.dmi' + icon_state = "resonator" + item_state = "resonator" + origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) + desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in low temperature." + w_class = ITEMSIZE_NORMAL + force = 8 + throwforce = 10 + var/cooldown = 0 + var/fieldsactive = 0 + var/burst_time = 50 + var/fieldlimit = 3 + +/obj/item/resonator/upgraded + name = "upgraded resonator" + desc = "An upgraded version of the resonator that can produce more fields at once." + icon_state = "resonator_u" + origin_tech = list(TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + fieldlimit = 5 + +/obj/item/resonator/proc/CreateResonance(var/target, var/creator) + var/turf/T = get_turf(target) + if(locate(/obj/effect/resonance) in T) + return + if(fieldsactive < fieldlimit) + playsound(src,'sound/weapons/resonator_fire.ogg',50,1) + new /obj/effect/resonance(T, creator, burst_time) + fieldsactive++ + spawn(burst_time) + fieldsactive-- + +/obj/item/resonator/attack_self(mob/user) + if(burst_time == 50) + burst_time = 30 + to_chat(user, "You set the resonator's fields to detonate after 3 seconds.") + else + burst_time = 50 + to_chat(user, "You set the resonator's fields to detonate after 5 seconds.") + +/obj/item/resonator/afterattack(atom/target, mob/user, proximity_flag) + if(proximity_flag) + if(!check_allowed_items(target, 1)) + return + CreateResonance(target, user) + +/obj/effect/resonance + name = "resonance field" + desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures." + icon = 'icons/effects/effects.dmi' + icon_state = "shield1" + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + mouse_opacity = 0 + var/resonance_damage = 20 + +/obj/effect/resonance/initialize(mapload, var/creator = null, var/timetoburst) + . = ..() + // Start small and grow to big size as we are about to burst + transform = matrix()*0.75 + animate(src, transform = matrix()*1.5, time = timetoburst) + // Queue the actual bursting + spawn(timetoburst) + if(!QDELETED(src)) + burst(creator) + +/obj/effect/resonance/proc/burst(var/creator = null) + var/turf/T = get_turf(src) + if(!T) + return + playsound(src, 'sound/weapons/resonator_blast.ogg', 50, 1) + // Make the collapsing effect + new /obj/effect/temp_visual/resonance_crush(T) + + // Mineral turfs get drilled! + if(istype(T, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = T + M.GetDrilled() + qdel(src) + return + // Otherwise we damage mobs! Boost damage if low tempreature + var/datum/gas_mixture/environment = T.return_air() + if(environment.temperature < 250) + name = "strong resonance field" + resonance_damage = 50 + + for(var/mob/living/L in src.loc) + if(creator) + add_attack_logs(creator, L, "used a resonator field on") + to_chat(L, "\The [src] ruptured with you in it!") + L.apply_damage(resonance_damage, BRUTE) + qdel(src) + + +/obj/effect/temp_visual/resonance_crush + icon_state = "shield1" + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + duration = 4 + +/obj/effect/temp_visual/resonance_crush/initialize() + . = ..() + transform = matrix()*1.5 + animate(src, transform = matrix()*0.1, alpha = 50, time = 4) diff --git a/code/modules/mining/shelter_atoms.dm b/code/modules/mining/shelter_atoms.dm index 8f6f43319f..25af7b1394 100644 --- a/code/modules/mining/shelter_atoms.dm +++ b/code/modules/mining/shelter_atoms.dm @@ -51,12 +51,12 @@ var/turf/above_location = GetAbove(deploy_location) if(above_location && status == SHELTER_DEPLOY_ALLOWED) status = template.check_deploy(above_location) - + switch(status) //Not allowed due to /area technical reasons if(SHELTER_DEPLOY_BAD_AREA) src.loc.visible_message("\The [src] will not function in this area.") - + //Anchored objects or no space if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS) var/width = template.width @@ -179,7 +179,7 @@ pixel_y = -32 /obj/item/device/gps/computer/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) user.visible_message("[user] disassembles [src].", "You start to disassemble [src]...", "You hear clanking and banging noises.") if(do_after(user,4 SECONDS,src)) @@ -226,7 +226,7 @@ var/obj/item/weapon/storage/pill_bottle/dice/D = new(src) stock(D) else - var/obj/item/device/violin/V = new(src) + var/obj/item/device/instrument/violin/V = new(src) stock(V) /obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) @@ -258,7 +258,7 @@ qdel(src) /obj/structure/fans/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) user.visible_message("[user] disassembles [src].", "You start to disassemble [src]...", "You hear clanking and banging noises.") if(do_after(user,4 SECONDS,src)) diff --git a/code/modules/mob/_modifiers/traits.dm b/code/modules/mob/_modifiers/traits.dm index e510798001..d0b0abfd89 100644 --- a/code/modules/mob/_modifiers/traits.dm +++ b/code/modules/mob/_modifiers/traits.dm @@ -84,20 +84,38 @@ icon_scale_percent = 0.9 +/datum/modifier/trait/colorblind_protanopia + name = "Protanopia" + desc = "You have a form of red-green colorblindness. You cannot see reds, and have trouble distinguishing them from yellows and greens." + + client_color = MATRIX_Protanopia + +/datum/modifier/trait/colorblind_deuteranopia + name = "Deuteranopia" + desc = "You have a form of red-green colorblindness. You cannot see greens, and have trouble distinguishing them from yellows and reds." + + client_color = MATRIX_Deuteranopia + +/datum/modifier/trait/colorblind_tritanopia + name = "Tritanopia" + desc = "You have a form of blue-yellow colorblindness. You have trouble distinguishing between blues, greens, and yellows, and see blues and violets as dim." + + client_color = MATRIX_Tritanopia + /datum/modifier/trait/colorblind_taj - name = "Colorblind - B+R" + name = "Colorblind - Blue-red" desc = "You are colorblind. You have a minor issue with blue colors and have difficulty recognizing them from red colors." - + client_color = MATRIX_Taj_Colorblind /datum/modifier/trait/colorblind_vulp - name = "Colorblind - G+R" + name = "Colorblind - Red-green" desc = "You are colorblind. You have a severe issue with green colors and have difficulty recognizing them from red colors." - + client_color = MATRIX_Vulp_Colorblind -/datum/modifier/trait/colorblind_mono - name = "Colorblind - Mono" - desc = "You are colorblind. Your condition is rare, but you can see no colors at all." - +/datum/modifier/trait/colorblind_monochrome + name = "Monochromacy" + desc = "You are fully colorblind. Your condition is rare, but you can see no colors at all." + client_color = MATRIX_Monochromia diff --git a/code/modules/mob/_modifiers/unholy.dm b/code/modules/mob/_modifiers/unholy.dm index 1f7f3d67b5..cc4a23aa40 100644 --- a/code/modules/mob/_modifiers/unholy.dm +++ b/code/modules/mob/_modifiers/unholy.dm @@ -140,7 +140,8 @@ affected.update_damages() H.restore_blood() - H.apply_effect(15, AGONY) + if(!iscultist(H)) + H.apply_effect(2, AGONY) if(prob(10)) to_chat(H, "It feels as though your body is being torn apart!") L.updatehealth() diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index bf52dbcfec..12715a4c2b 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -7,6 +7,8 @@ universal_speak = 1 density = 0 + makes_dirt = FALSE // No more dirt from Beepsky + var/obj/item/weapon/card/id/botcard = null var/list/botcard_access = list() var/on = 1 @@ -86,23 +88,23 @@ if(O.GetID()) if(access_scanner.allowed(user) && !open && !emagged) locked = !locked - user << "Controls are now [locked ? "locked." : "unlocked."]" + to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") attack_hand(user) else if(emagged) - user << "ERROR" + to_chat(user, "ERROR") if(open) - user << "Please close the access panel before locking it." + to_chat(user, "Please close the access panel before locking it.") else - user << "Access denied." + to_chat(user, "Access denied.") return - else if(istype(O, /obj/item/weapon/screwdriver)) + else if(O.is_screwdriver()) if(!locked) open = !open - user << "Maintenance panel is now [open ? "opened" : "closed"]." + to_chat(user, "Maintenance panel is now [open ? "opened" : "closed"].") playsound(src, O.usesound, 50, 1) else - user << "You need to unlock the controls first." + to_chat(user, "You need to unlock the controls first.") return else if(istype(O, /obj/item/weapon/weldingtool)) if(health < getMaxHealth()) @@ -111,9 +113,9 @@ user.visible_message("[user] repairs [src].","You repair [src].") playsound(src, O.usesound, 50, 1) else - user << "Unable to repair with the maintenance panel closed." + to_chat(user, "Unable to repair with the maintenance panel closed.") else - user << "[src] does not need a repair." + to_chat(user, "[src] does not need a repair.") return else ..() diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index cac0f1872a..7c709bc165 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -56,7 +56,7 @@ /mob/living/bot/secbot/ed209/RangedAttack(var/atom/A) if(last_shot + shot_delay > world.time) - src << "You are not ready to fire yet!" + to_chat(src, "You are not ready to fire yet!") return last_shot = world.time @@ -100,7 +100,7 @@ user.drop_item() qdel(W) build_step++ - user << "You add the robot leg to [src]." + to_chat(user, "You add the robot leg to [src].") name = "legs/frame assembly" if(build_step == 1) icon_state = "ed209_leg" @@ -112,7 +112,7 @@ user.drop_item() qdel(W) build_step++ - user << "You add the armor to [src]." + to_chat(user, "You add the armor to [src].") name = "vest/legs/frame assembly" item_state = "ed209_shell" icon_state = "ed209_shell" @@ -123,13 +123,13 @@ if(WT.remove_fuel(0, user)) build_step++ name = "shielded frame assembly" - user << "You welded the vest to [src]." + to_chat(user, "You welded the vest to [src].") if(4) if(istype(W, /obj/item/clothing/head/helmet)) user.drop_item() qdel(W) build_step++ - user << "You add the helmet to [src]." + to_chat(user, "You add the helmet to [src].") name = "covered and shielded frame assembly" item_state = "ed209_hat" icon_state = "ed209_hat" @@ -139,7 +139,7 @@ user.drop_item() qdel(W) build_step++ - user << "You add the prox sensor to [src]." + to_chat(user, "You add the prox sensor to [src].") name = "covered, shielded and sensored frame assembly" item_state = "ed209_prox" icon_state = "ed209_prox" @@ -148,13 +148,13 @@ if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if (C.get_amount() < 1) - user << "You need one coil of wire to wire [src]." + to_chat(user, "You need one coil of wire to wire [src].") return - user << "You start to wire [src]." + to_chat(user, "You start to wire [src].") if(do_after(user, 40) && build_step == 6) if(C.use(1)) build_step++ - user << "You wire the ED-209 assembly." + to_chat(user, "You wire the ED-209 assembly.") name = "wired ED-209 assembly" return @@ -162,27 +162,27 @@ if(istype(W, /obj/item/weapon/gun/energy/taser)) name = "taser ED-209 assembly" build_step++ - user << "You add [W] to [src]." + to_chat(user, "You add [W] to [src].") item_state = "ed209_taser" icon_state = "ed209_taser" user.drop_item() qdel(W) if(8) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) playsound(src, W.usesound, 100, 1) var/turf/T = get_turf(user) - user << "Now attaching the gun to the frame..." + to_chat(user, "Now attaching the gun to the frame...") sleep(40) if(get_turf(user) == T && build_step == 8) build_step++ name = "armed [name]" - user << "Taser gun attached." + to_chat(user, "Taser gun attached.") if(9) if(istype(W, /obj/item/weapon/cell)) build_step++ - user << "You complete the ED-209." + to_chat(user, "You complete the ED-209.") var/turf/T = get_turf(src) new /mob/living/bot/secbot/ed209(T,created_name,lasercolor) user.drop_item() diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm index 159b3e3594..9b84651165 100644 --- a/code/modules/mob/living/bot/edCLNbot.dm +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -214,7 +214,7 @@ qdel(W) if(7) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) playsound(src, W.usesound, 100, 1) var/turf/T = get_turf(user) to_chat(user, "Attatching the mop to the frame...") diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 0d40ac9d9e..ba8c0945f0 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -168,17 +168,17 @@ say("Down on the floor, [suspect_name]! You have [SECBOT_WAIT_TIME] seconds to comply.") playsound(src.loc, pick(preparing_arrest_sounds), 50) // Register to be told when the target moves - moved_event.register(target, src, /mob/living/bot/secbot/proc/target_moved) + GLOB.moved_event.register(target, src, /mob/living/bot/secbot/proc/target_moved) // Callback invoked if the registered target moves /mob/living/bot/secbot/proc/target_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) if(get_dist(get_turf(src), get_turf(target)) >= 1) awaiting_surrender = INFINITY // Done waiting! - moved_event.unregister(moving_instance, src) + GLOB.moved_event.unregister(moving_instance, src) /mob/living/bot/secbot/resetTarget() ..() - moved_event.unregister(target, src) + GLOB.moved_event.unregister(target, src) awaiting_surrender = -1 walk_to(src, 0) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 07f65f62b5..1624d6941d 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -146,8 +146,8 @@ if(isrobot(loc)) var/mob/living/silicon/robot/borg = loc borg.mmi = null - qdel_null(radio) - qdel_null(brainmob) + QDEL_NULL(radio) + QDEL_NULL(brainmob) return ..() /obj/item/device/mmi/radio_enabled diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 18acbda04d..c9b2d6d3ff 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -8,10 +8,6 @@ if(!effective_force || blocked >= 100) return 0 - //Hulk modifier - if(HULK in user.mutations) - effective_force *= 2 - //If the armor soaks all of the damage, it just skips the rest of the checks if(effective_force <= soaked) return 0 diff --git a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm new file mode 100644 index 0000000000..d2944cc0cb --- /dev/null +++ b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm @@ -0,0 +1,108 @@ +/* + Small, mechanically supported physical customisation options. + Also allows for per-species physical information ('his neck markings are more important than yours'). + ETA till a downstream ports this and adds boob and penis size: 2 days. +*/ + +/mob/living/carbon/human/proc/show_descriptors_to(var/mob/user) + if(LAZYLEN(descriptors)) + if(user == src) + for(var/entry in descriptors) + var/datum/mob_descriptor/descriptor = species.descriptors[entry] + LAZYADD(., "[descriptor.get_first_person_message_start()] [descriptor.get_standalone_value_descriptor(descriptors[entry])].") + else + for(var/entry in descriptors) + var/datum/mob_descriptor/descriptor = species.descriptors[entry] + LAZYADD(., descriptor.get_comparative_value_descriptor(descriptors[entry], user, src)) + +/datum/mob_descriptor + var/name // String ident. + var/chargen_label // String ident for chargen. + var/default_value // Initial value for this descriptor. + var/comparison_offset = 0 // Used for examining similar properties between different species. + var/comparative_value_descriptor_equivalent // String for looking at someone with roughly the same property. + var/list/standalone_value_descriptors // String set for initial descriptor text. + var/list/comparative_value_descriptors_smaller // String set for looking at someone smaller than you. + var/list/comparative_value_descriptors_larger // String set for looking at someone larger than you. + var/list/chargen_value_descriptors // Used for chargen selection of values in cases where there is a hidden meaning. + var/skip_species_mention + +/datum/mob_descriptor/New() + if(!chargen_label) + chargen_label = name + if(!chargen_value_descriptors) + chargen_value_descriptors = list() + for(var/i = 1 to LAZYLEN(standalone_value_descriptors)) + chargen_value_descriptors[standalone_value_descriptors[i]] = i + default_value = ceil(LAZYLEN(standalone_value_descriptors) * 0.5) + ..() + +/datum/mob_descriptor/proc/get_third_person_message_start(var/datum/gender/my_gender) + return "They are" +// return "[my_gender.He] [my_gender.is]" // Doesn't respect ambiguous_genders species var, can't figure out a fix at the moment + +/datum/mob_descriptor/proc/get_first_person_message_start() + return "You are" + +/datum/mob_descriptor/proc/get_standalone_value_descriptor(var/check_value) + if(isnull(check_value)) + check_value = default_value + if(check_value && LAZYLEN(standalone_value_descriptors) >= check_value) + return standalone_value_descriptors[check_value] + +// Build a species-specific descriptor string. +/datum/mob_descriptor/proc/get_initial_comparison_component(var/mob/me, var/datum/gender/my_gender, var/datum/gender/other_gender, var/my_value) + var/species_text + if(ishuman(me) && !skip_species_mention) + var/mob/living/carbon/human/H = me + var/use_name = "\improper [H.species.name]" + species_text = " for \a [use_name]" + . = "[get_third_person_message_start(my_gender)] [get_standalone_value_descriptor(my_value)][species_text]" + +/datum/mob_descriptor/proc/get_secondary_comparison_component(var/datum/gender/my_gender, var/datum/gender/other_gender, var/my_value, var/comparing_value) + var/raw_value = my_value + my_value += comparison_offset + var/variance = abs((my_value)-comparing_value) + if(variance < 1) + . = "[.], [get_comparative_value_string_equivalent(raw_value, my_gender, other_gender)]" + else + variance = variance / LAZYLEN(standalone_value_descriptors) + if(my_value < comparing_value) + . = "[.], [get_comparative_value_string_smaller(variance, my_gender, other_gender)]" + else if(my_value > comparing_value) + . = "[.], [get_comparative_value_string_larger(variance, my_gender, other_gender)]" + +/datum/mob_descriptor/proc/get_comparative_value_descriptor(var/my_value, var/mob/observer, var/mob/me) + + // Store our gender info for later. + var/datum/gender/my_gender = gender_datums[me.get_gender()] + var/datum/gender/other_gender = gender_datums[observer.get_gender()] + + . = get_initial_comparison_component(me, my_gender, other_gender, my_value) + + // Append the same-descriptor comparison text. + var/comparing_value + if(ishuman(observer)) + var/mob/living/carbon/human/human_observer = observer + if(LAZYLEN(human_observer.descriptors) && !isnull(human_observer.species.descriptors[name]) && !isnull(human_observer.descriptors[name])) + var/datum/mob_descriptor/obs_descriptor = human_observer.species.descriptors[name] + comparing_value = human_observer.descriptors[name] + obs_descriptor.comparison_offset + + if(. && !isnull(comparing_value)) + . = "[.][get_secondary_comparison_component(my_gender, other_gender, my_value, comparing_value)]" + + // We're done, add a full stop. + . = "[.]. " + +/datum/mob_descriptor/proc/get_comparative_value_string_equivalent(var/my_value, var/datum/gender/my_gender, var/datum/gender/other_gender) + return comparative_value_descriptor_equivalent + +/datum/mob_descriptor/proc/get_comparative_value_string_smaller(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) + var/maxval = LAZYLEN(comparative_value_descriptors_smaller) + value = Clamp(ceil(value * maxval), 1, maxval) + return comparative_value_descriptors_smaller[value] + +/datum/mob_descriptor/proc/get_comparative_value_string_larger(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) + var/maxval = LAZYLEN(comparative_value_descriptors_larger) + value = Clamp(ceil(value * maxval), 1, maxval) + return comparative_value_descriptors_larger[value] diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm new file mode 100644 index 0000000000..934e7c79bc --- /dev/null +++ b/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm @@ -0,0 +1,45 @@ +/datum/mob_descriptor/height + name = "height" + standalone_value_descriptors = list( + "very short", + "short", + "of average height", + "tall", + "very tall" + ) + comparative_value_descriptor_equivalent = "around the same height as you" + comparative_value_descriptors_smaller = list( + "slightly shorter than you", + "shorter than you", + "much shorter than you", + "tiny and insignificant next to you" + ) + comparative_value_descriptors_larger = list( + "slightly taller than you", + "taller than you", + "much taller than you", + "towering over you" + ) + +/datum/mob_descriptor/build + name = "build" + comparative_value_descriptor_equivalent = "around the same build as you" + standalone_value_descriptors = list( + "rail thin", + "thin", + "of average build", + "broad-shouldered", + "heavily built" + ) + comparative_value_descriptors_smaller = list( + "a bit smaller in build than you", + "smaller in build than you", + "much smaller in build than you", + "dwarfed by your height" + ) + comparative_value_descriptors_larger = list( + "slightly larger than you in build", + "built larger than you", + "built much larger than you", + "dwarfing you" + ) diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm new file mode 100644 index 0000000000..6414430417 --- /dev/null +++ b/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm @@ -0,0 +1,27 @@ +/datum/mob_descriptor/headtail_length + name = "headtail length" + chargen_label = "headtails (gender)" + skip_species_mention = TRUE + standalone_value_descriptors = list( + "short", + "long" + ) + chargen_value_descriptors = list( + "short (male)" = 1, + "long (female)" = 2 + ) + +/datum/mob_descriptor/headtail_length/get_first_person_message_start() + . = "Your headtails are" + +/datum/mob_descriptor/headtail_length/get_third_person_message_start(var/datum/gender/my_gender) + . = "[my_gender.His] headtails are" + +/datum/mob_descriptor/headtail_length/get_comparative_value_string_equivalent(var/my_value, var/datum/gender/my_gender, var/datum/gender/other_gender) + . = "indicating [other_gender.he] [other_gender.is] [my_value == 1 ? "male" : "female"] like you" + +/datum/mob_descriptor/headtail_length/get_comparative_value_string_smaller(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) + . = "indicating [other_gender.he] [other_gender.is] male" + +/datum/mob_descriptor/headtail_length/get_comparative_value_string_larger(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) + . = "indicating [other_gender.he] [other_gender.is] female" diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm new file mode 100644 index 0000000000..fa007fdaa5 --- /dev/null +++ b/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm @@ -0,0 +1,35 @@ +/datum/mob_descriptor/vox_markings + name = "neck markings" + chargen_label = "neck markings (rank)" + skip_species_mention = TRUE + standalone_value_descriptors = list( + "very simplistic", + "rather simple", + "complex", + "moderately complex", + "bewilderingly complex" + ) + chargen_value_descriptors = list( + "servitor" = 1, + "labourer" = 2, + "cannon fodder" = 3, + "raider" = 4, + "leader" = 5 + ) + comparative_value_descriptor_equivalent = "around the same importance as yours" + comparative_value_descriptors_smaller = list( + "slightly less important than yours", + "much less important than yours", + "insignificant and beneath your notice" + ) + comparative_value_descriptors_larger = list( + "slightly more important than yours", + "much more important than yours", + "commanding your unquestioning obedience and respect" + ) + +/datum/mob_descriptor/vox_markings/get_first_person_message_start() + . = "Your neck markings are" + +/datum/mob_descriptor/vox_markings/get_third_person_message_start(var/datum/gender/my_gender) + . = "[my_gender.His] neck markings are" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 04fff68e53..8c687e8de6 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -445,10 +445,15 @@ // VOREStation End msg += "*---------*
" msg += applying_pressure + + var/show_descs = show_descriptors_to(user) + if(show_descs) + msg += "[jointext(show_descs, "
")]
" + if(pose) if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "[T.He] [pose]" + msg += "
[T.He] [pose]" to_chat(user, jointext(msg, null)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index edf1bdd6c6..beb00b8f81 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -57,8 +57,8 @@ human_mob_list -= src for(var/organ in organs) qdel(organ) - qdel_null(nif) //VOREStation Add - qdel_null_list(vore_organs) //VOREStation Add + QDEL_NULL(nif) //VOREStation Add + QDEL_NULL_LIST(vore_organs) //VOREStation Add return ..() /mob/living/carbon/human/Stat() @@ -1164,6 +1164,15 @@ maxHealth = species.total_health + if(LAZYLEN(descriptors)) + descriptors = null + + if(LAZYLEN(species.descriptors)) + descriptors = list() + for(var/desctype in species.descriptors) + var/datum/mob_descriptor.descriptor = species.descriptors[desctype] + descriptors[desctype] = descriptor.default_value + spawn(0) if(regen_icons) regenerate_icons() make_blood() @@ -1177,11 +1186,7 @@ species.update_attack_types() //VOREStation Edit - Required for any trait that updates unarmed_types in setup. // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. - if(client && client.screen) - client.screen.len = null - if(hud_used) - qdel(hud_used) - hud_used = new /datum/hud(src) + update_hud() //A slew of bits that may be affected by our species change regenerate_icons() diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index e698258bdb..dadf02f703 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -33,8 +33,8 @@ // Should this all be in Touch()? if(istype(H)) - if(get_accuracy_penalty(H) && H != src) //Should only trigger if they're not aiming well - var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H)) + if(H.get_accuracy_penalty() && H != src) //Should only trigger if they're not aiming well + var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, H.get_accuracy_penalty()) if(!hit_zone) H.do_attack_animation(src) playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) @@ -251,7 +251,7 @@ H.visible_message("[attack_message]") playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), 25, 1, -1) - + add_attack_logs(H,src,"Melee attacked with fists (miss/block)") if(miss_type) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 64cd6a0dc1..c5f259e0b4 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -166,7 +166,7 @@ emp_act // Checked in borer code /mob/living/carbon/human/proc/check_head_coverage() var/obj/item/organ/external/H = organs_by_name[BP_HEAD] - var/list/body_parts = H.get_covering_clothing() + var/list/body_parts = H.get_covering_clothing(EYES) if(LAZYLEN(body_parts)) return 1 return 0 @@ -174,7 +174,7 @@ emp_act //Used to check if they can be fed food/drinks/pills /mob/living/carbon/human/proc/check_mouth_coverage() var/obj/item/organ/external/H = organs_by_name[BP_HEAD] - var/list/protective_gear = H.get_covering_clothing() + var/list/protective_gear = H.get_covering_clothing(FACE) for(var/obj/item/gear in protective_gear) if(istype(gear) && (gear.body_parts_covered & FACE) && !(gear.item_flags & FLEXIBLEMATERIAL)) return gear @@ -187,18 +187,6 @@ emp_act if(.) return return 0 -/mob/living/carbon/human/proc/get_accuracy_penalty(mob/living/user) - // Certain statuses make it harder to score a hit. These are the same as gun accuracy, however melee doesn't use multiples of 15. - var/accuracy_penalty = 0 - if(user.eye_blind) - accuracy_penalty += 75 - if(user.eye_blurry) - accuracy_penalty += 30 - if(user.confused) - accuracy_penalty += 45 - - return accuracy_penalty - /mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) if(check_neckgrab_attack(I, user, target_zone)) return null @@ -206,7 +194,7 @@ emp_act if(user == src) // Attacking yourself can't miss return target_zone - var/hit_zone = get_zone_with_miss_chance(target_zone, src, get_accuracy_penalty(user)) + var/hit_zone = get_zone_with_miss_chance(target_zone, src, user.get_accuracy_penalty()) if(!hit_zone) user.do_attack_animation(src) @@ -349,13 +337,14 @@ emp_act if(istype(AM,/obj/)) var/obj/O = AM - if(in_throw_mode && !get_active_hand() && speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode + if(in_throw_mode && speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode if(canmove && !restrained()) if(isturf(O.loc)) - put_in_active_hand(O) - visible_message("[src] catches [O]!") - throw_mode_off() - return + if(can_catch(O)) + put_in_active_hand(O) + visible_message("[src] catches [O]!") + throw_mode_off() + return var/dtype = O.damtype var/throw_damage = O.throwforce*(speed/THROWFORCE_SPEED_DIVISOR) @@ -450,6 +439,29 @@ emp_act src.anchored = 1 src.pinned += O +// This does a prob check to catch the thing flying at you, with a minimum of 1% +/mob/living/carbon/human/proc/can_catch(var/obj/O) + if(!get_active_hand()) // If active hand is empty + var/obj/item/organ/external/temp = organs_by_name["r_hand"] + if (hand) + temp = organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + return FALSE // The hand isn't working in the first place + + // Alright, our hand works? Time to try the catching. + var/catch_chance = 90 // Default 90% catch rate + + if(O.sharp) + catch_chance -= 50 // Catching knives is hard + + catch_chance -= get_accuracy_penalty() // Same issues with shooting a gun, or swinging a weapon + + catch_chance = between(1, catch_chance, 100) + + if(prob(catch_chance)) + return TRUE + return FALSE + /mob/living/carbon/human/embed(var/obj/O, var/def_zone=null) if(!def_zone) ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d55e2e4828..a730d811b4 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -100,6 +100,8 @@ var/identifying_gender // In case the human identifies as another gender than it's biological + var/list/descriptors // For comparative examine code + var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds can_be_antagged = TRUE diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 210de2cf85..c92be26380 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -128,14 +128,14 @@ if(CE_SLOWDOWN in chem_effects) if (tally >= 0 ) tally = (tally + tally/4) //Add a quarter of penalties on top. - tally += 1 + tally += chem_effects[CE_SLOWDOWN] if(CE_SPEEDBOOST in chem_effects) if (tally >= 0) // cut any penalties in half tally = tally/2 - tally -= 1 // give 'em a buff on top. + tally -= chem_effects[CE_SPEEDBOOST] // give 'em a buff on top. - return (tally+config.human_delay) + return max(-3, tally+config.human_delay) // Minimum return should be the same as force_max_speed /mob/living/carbon/human/Process_Spacemove(var/check_drift = 0) //Can we act? diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 525a611882..327b4d9ad1 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -81,6 +81,12 @@ genders = list(NEUTER) + descriptors = list( + /datum/mob_descriptor/height = -1, + /datum/mob_descriptor/build = 1, + /datum/mob_descriptor/vox_markings = 0 + ) + /datum/species/vox/get_random_name(var/gender) var/datum/language/species_language = all_languages[default_language] return species_language.get_random_name(gender) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index a1d1a93277..6ecb93e295 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -221,12 +221,26 @@ var/pass_flags = 0 + var/list/descriptors = list( + /datum/mob_descriptor/height, + /datum/mob_descriptor/build + ) + /datum/species/New() if(hud_type) hud = new hud_type() else hud = new() + // Prep the descriptors for the species + if(LAZYLEN(descriptors)) + var/list/descriptor_datums = list() + for(var/desctype in descriptors) + var/datum/mob_descriptor/descriptor = new desctype + descriptor.comparison_offset = descriptors[desctype] + descriptor_datums[descriptor.name] = descriptor + descriptors = descriptor_datums + //If the species has eyes, they are the default vision organ if(!vision_organ && has_organ[O_EYES]) vision_organ = O_EYES diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index c4b2542f22..ec2bc31ecb 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -152,7 +152,7 @@ var/obj/item/organ/internal/O = organ O.removed() O.forceMove(drop_location()) - qdel_null(humanform) //Don't leave it just sitting in nullspace + QDEL_NULL(humanform) //Don't leave it just sitting in nullspace animate(src,alpha = 0,time = 2 SECONDS) sleep(2 SECONDS) qdel(src) diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm index 6cd1a757cd..fb2e401afb 100644 --- a/code/modules/mob/living/carbon/human/species/station/seromi.dm +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -122,6 +122,11 @@ /mob/living/proc/hide ) + descriptors = list( + /datum/mob_descriptor/height = -3, + /datum/mob_descriptor/build = -3 + ) + /datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 788ac2bfeb..7a68d33a93 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -136,6 +136,11 @@ "Your scales bristle against the cold." ) + descriptors = list( + /datum/mob_descriptor/height = 2, + /datum/mob_descriptor/build = 2 + ) + /datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index e2e87e8f99..20db108099 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -120,7 +120,7 @@ /datum/trait/colorblind/mono/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) - H.add_modifier(/datum/modifier/trait/colorblind_mono) + H.add_modifier(/datum/modifier/trait/colorblind_monochrome) /datum/trait/colorblind/para_vulp name = "Colorblindness (Para Vulp)" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b36db9bfa5..6b8861d8ab 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -418,8 +418,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() face_standing.Blend(facial_s, ICON_OVERLAY) - if(h_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) + if(h_style) var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] + if(head && (head.flags_inv & BLOCKHEADHAIR)) + if(!(hair_style.flags & HAIR_VERY_SHORT)) + hair_style = hair_styles_list["Short Hair"] + if(hair_style && (src.species.get_bodytype(src) in hair_style.species_allowed)) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s") diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 9ea12b967c..f78f58d9de 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -5,4 +5,14 @@ source_spawner.get_death_report(src) source_spawner = null //VOREStation Edit End - . = ..() \ No newline at end of file + . = ..() + + if(nest) //Ew. + if(istype(nest, /obj/structure/prop/nest)) + var/obj/structure/prop/nest/N = nest + N.remove_creature(src) + if(istype(nest, /obj/structure/blob/factory)) + var/obj/structure/blob/factory/F = nest + F.spores -= src + nest = null + . = ..() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 0bcfcf6174..3bcfbe7b60 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -19,6 +19,14 @@ /mob/living/Destroy() dsoverlay.loc = null //I'll take my coat with me dsoverlay = null + if(nest) //Ew. + if(istype(nest, /obj/structure/prop/nest)) + var/obj/structure/prop/nest/N = nest + N.remove_creature(src) + if(istype(nest, /obj/structure/blob/factory)) + var/obj/structure/blob/factory/F = nest + F.spores -= src + nest = null if(buckled) buckled.unbuckle_mob(src, TRUE) return ..() @@ -214,6 +222,11 @@ default behaviour is: return return +/mob/living/CanPass(atom/movable/mover, turf/target) + if(istype(mover, /obj/structure/blob) && faction == "blob") //Blobs should ignore things on their faction. + return TRUE + return ..() + /mob/living/verb/succumb() set hidden = 1 if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable @@ -987,40 +1000,41 @@ default behaviour is: else to_chat(src, "You feel nauseous...") - if(!skip_wait) - sleep(150) //15 seconds until second warning - to_chat(src, "You feel like you are about to throw up!") - sleep(100) //and you have 10 more for mad dash to the bucket + spawn() + if(!skip_wait) + sleep(150) //15 seconds until second warning + to_chat(src, "You feel like you are about to throw up!") + sleep(100) //and you have 10 more for mad dash to the bucket - //Damaged livers cause you to vomit blood. - if(!blood_vomit) - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(!H.isSynthetic()) - var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"] - if(L.is_broken()) - blood_vomit = 1 + //Damaged livers cause you to vomit blood. + if(!blood_vomit) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(!H.isSynthetic()) + var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"] + if(L.is_broken()) + blood_vomit = 1 - Stun(5) - src.visible_message("[src] throws up!","You throw up!") - playsound(loc, 'sound/effects/splat.ogg', 50, 1) + Stun(5) + src.visible_message("[src] throws up!","You throw up!") + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + + var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs + if(istype(T)) + if(blood_vomit) + T.add_blood_floor(src) + else + T.add_vomit_floor(src, 1) - var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs - if(istype(T)) if(blood_vomit) - T.add_blood_floor(src) + if(getBruteLoss() < 50) + adjustBruteLoss(3) else - T.add_vomit_floor(src, 1) + nutrition -= 40 + adjustToxLoss(-3) - if(blood_vomit) - if(getBruteLoss() < 50) - adjustBruteLoss(3) - else - nutrition -= 40 - adjustToxLoss(-3) - - sleep(350) - lastpuke = 0 + spawn(350) + lastpuke = 0 /mob/living/update_canmove() if(!resting && cannot_stand() && can_stand_overridden()) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 08bebc91b2..08d35e5de2 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -163,7 +163,7 @@ ..() /mob/living/blob_act(var/obj/structure/blob/B) - if(stat == DEAD) + if(stat == DEAD || faction == "blob") return var/damage = rand(30, 40) @@ -221,11 +221,6 @@ /mob/living/proc/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/soaked, var/hit_zone) if(!effective_force || blocked >= 100) return 0 - - //Hulk modifier - if(HULK in user.mutations) - effective_force *= 2 - //Apply weapon damage var/weapon_sharp = is_sharp(I) var/weapon_edge = has_edge(I) @@ -507,3 +502,15 @@ if(!isnull(M.evasion)) result += M.evasion return result + +/mob/living/proc/get_accuracy_penalty() + // Certain statuses make it harder to score a hit. + var/accuracy_penalty = 0 + if(eye_blind) + accuracy_penalty += 75 + if(eye_blurry) + accuracy_penalty += 30 + if(confused) + accuracy_penalty += 45 + + return accuracy_penalty \ No newline at end of file diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 1ee86da6ef..c856e8d830 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -56,6 +56,8 @@ var/see_invisible_default = SEE_INVISIBLE_LIVING + var/nest //Not specific, because a Nest may be the prop nest, or blob factory in this case. + var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots) var/has_huds = FALSE //Whether or not we should bother initializing the above list diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 86ba77fc2a..cc795d088d 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -119,7 +119,7 @@ var/list/ai_verbs_default = list( canmove = 0 density = 1 loc = loc - + if(!is_dummy) aiCommunicator = new /obj/item/device/communicator/integrated(src) @@ -214,14 +214,14 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/Destroy() ai_list -= src - qdel_null(announcement) - qdel_null(eyeobj) - qdel_null(psupply) - qdel_null(aiPDA) - qdel_null(aiCommunicator) - qdel_null(aiMulti) - qdel_null(aiRadio) - qdel_null(aiCamera) + QDEL_NULL(announcement) + QDEL_NULL(eyeobj) + QDEL_NULL(psupply) + QDEL_NULL(aiPDA) + QDEL_NULL(aiCommunicator) + QDEL_NULL(aiMulti) + QDEL_NULL(aiRadio) + QDEL_NULL(aiCamera) hack = null return ..() @@ -694,7 +694,7 @@ var/list/ai_verbs_default = list( var/obj/item/device/aicard/card = W card.grab_ai(src, user) - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(user == controlling_drone) to_chat(user, "The drone's subsystems resist your efforts to tamper with your bolts.") return @@ -809,7 +809,7 @@ var/list/ai_verbs_default = list( //Special subtype kept around for global announcements /mob/living/silicon/ai/announcer/ is_dummy = 1 - + /mob/living/silicon/ai/announcer/initialize() . = ..() mob_list -= src diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index f226eb96b5..1b3720dc33 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -201,7 +201,7 @@ medicalActive1 = null medicalActive2 = null medical_cannotfind = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) usr << "You reset your record-viewing software." /mob/living/silicon/pai/cancel_camera() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index ab2b0b53cd..bef2c93403 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -90,7 +90,7 @@ var/global/list/default_pai_software = list() data["emotions"] = emotions data["current_emotion"] = card.current_emotion - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600) ui.set_initial_data(data) diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 7a7df5513b..ebea6068e7 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -36,7 +36,7 @@ data["prime"] = user.pai_law0 data["supplemental"] = user.pai_laws - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_directives.tmpl", "pAI Directives", 450, 600) @@ -102,7 +102,7 @@ data["channels"] = channels - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) ui = new(user, user, id, "pai_radio.tmpl", "Radio Configuration", 300, 150) ui.set_initial_data(data) @@ -128,7 +128,7 @@ // This is dumb, but NanoUI breaks if it has no data to send data["manifest"] = PDA_Manifest - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "crew_manifest.tmpl", "Crew Manifest", 450, 600) @@ -178,7 +178,7 @@ data["messages"] = messages - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_messenger.tmpl", "Digital Messenger", 450, 600) @@ -236,7 +236,7 @@ data["medical"] = M ? M.fields : null data["could_not_find"] = user.medical_cannotfind - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_medrecords.tmpl", "Medical Records", 450, 600) @@ -290,7 +290,7 @@ data["security"] = S ? S.fields : null data["could_not_find"] = user.security_cannotfind - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_secrecords.tmpl", "Security Records", 450, 600) @@ -340,7 +340,7 @@ data["progress_b"] = user.hackprogress % 10 data["aborted"] = user.hack_aborted - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150) @@ -431,7 +431,7 @@ gases[++gases.len] = gas data["gas"] = gases - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300) @@ -503,7 +503,7 @@ data["frequency"] = format_frequency(user.sradio.frequency) data["code"] = user.sradio.code - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 255b23436b..8ab5c3c264 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -181,7 +181,7 @@ var/list/mob_hat_cache = list() to_chat(user, "\The [src] is not compatible with \the [W].") return - else if (istype(W, /obj/item/weapon/crowbar)) + else if (W.is_crowbar()) to_chat(user, "\The [src] is hermetically sealed. You can't open the case.") return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3136fb6cc8..49f44a9097 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -196,7 +196,7 @@ if(cell.charge > cell_amount) // Spam Protection if(prob(10)) - src << "Warning: Unauthorized access through power channel [rand(11,29)] detected!" + to_chat(src, "Warning: Unauthorized access through power channel [rand(11,29)] detected!") cell.use(cell_amount) return amount return 0 @@ -227,7 +227,7 @@ mmi.brainmob.remove_language("Robot Talk") mind.transfer_to(mmi.brainmob) else - src << "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug." + to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.") ghostize() //ERROR("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].") mmi = null @@ -256,7 +256,7 @@ var/list/modules = list() modules.Add(robot_module_types) if(crisis || security_level == SEC_LEVEL_RED || crisis_override) // VOREStation Edit - src << "Crisis mode active. Combat module available." + to_chat(src, "Crisis mode active. Combat module available.") modules+="Combat" modules+="ERT" //VOREStation Edit modtype = input("Please, select a module!", "Robot module", null, null) as null|anything in modules @@ -358,7 +358,7 @@ set name = "Toggle Lights" lights_on = !lights_on - usr << "You [lights_on ? "enable" : "disable"] your integrated light." + to_chat(usr, "You [lights_on ? "enable" : "disable"] your integrated light.") handle_light() updateicon() //VOREStation Add - Since dogborgs have sprites for this @@ -367,11 +367,11 @@ set name = "Self Diagnosis" if(!is_component_functioning("diagnosis unit")) - src << "Your self-diagnosis component isn't functioning." + to_chat(src, "Your self-diagnosis component isn't functioning.") var/datum/robot_component/CO = get_component("diagnosis unit") if (!cell_use_power(CO.active_usage)) - src << "Low Power." + to_chat(src, "Low Power.") var/dat = self_diagnosis() src << browse(dat, "window=robotdiagnosis") @@ -395,10 +395,10 @@ var/datum/robot_component/C = components[toggle] if(C.toggled) C.toggled = 0 - src << "You disable [C.name]." + to_chat(src, "You disable [C.name].") else C.toggled = 1 - src << "You enable [C.name]." + to_chat(src, "You enable [C.name].") /mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence. set category = "Robot Commands" @@ -469,7 +469,7 @@ C.brute_damage = WC.brute C.electronics_damage = WC.burn - usr << "You install the [W.name]." + to_chat(usr, "You install the [W.name].") return @@ -484,11 +484,11 @@ if (istype(W, /obj/item/weapon/weldingtool)) if (src == user) - user << "You lack the reach to be able to repair yourself." + to_chat(user, "You lack the reach to be able to repair yourself.") return if (!getBruteLoss()) - user << "Nothing to fix here!" + to_chat(user, "Nothing to fix here!") return var/obj/item/weapon/weldingtool/WT = W if (WT.remove_fuel(0)) @@ -499,12 +499,12 @@ for(var/mob/O in viewers(user, null)) O.show_message(text("[user] has fixed some of the dents on [src]!"), 1) else - user << "Need more welding fuel!" + to_chat(user, "Need more welding fuel!") return else if(istype(W, /obj/item/stack/cable_coil) && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) if (!getFireLoss()) - user << "Nothing to fix here!" + to_chat(user, "Nothing to fix here!") return var/obj/item/stack/cable_coil/coil = W if (coil.use(1)) @@ -514,21 +514,21 @@ for(var/mob/O in viewers(user, null)) O.show_message(text("[user] has fixed some of the burnt wires on [src]!"), 1) - else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover + else if (W.is_crowbar()) // crowbar means open or close the cover if(opened) if(cell) - user << "You close the cover." + to_chat(user, "You close the cover.") opened = 0 updateicon() else if(wiresexposed && wires.IsAllCut()) //Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob. if(!mmi) - user << "\The [src] has no brain to remove." + to_chat(user, "\The [src] has no brain to remove.") return - user << "You jam the crowbar into the robot and begin levering [mmi]." + to_chat(user, "You jam the crowbar into the robot and begin levering [mmi].") sleep(30) - user << "You damage some parts of the chassis, but eventually manage to rip out [mmi]!" + to_chat(user, "You damage some parts of the chassis, but eventually manage to rip out [mmi]!") var/obj/item/robot_parts/robot_suit/C = new/obj/item/robot_parts/robot_suit(loc) C.l_leg = new/obj/item/robot_parts/l_leg(C) C.r_leg = new/obj/item/robot_parts/r_leg(C) @@ -551,7 +551,7 @@ return var/datum/robot_component/C = components[remove] var/obj/item/robot_parts/robot_component/I = C.wrapped - user << "You remove \the [I]." + to_chat(user, "You remove \the [I].") if(istype(I)) I.brute = C.brute_damage I.burn = C.electronics_damage @@ -564,25 +564,25 @@ else if(locked) - user << "The cover is locked and cannot be opened." + to_chat(user, "The cover is locked and cannot be opened.") else - user << "You open the cover." + to_chat(user, "You open the cover.") opened = 1 updateicon() else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside var/datum/robot_component/C = components["power cell"] if(wiresexposed) - user << "Close the panel first." + to_chat(user, "Close the panel first.") else if(cell) - user << "There is a power cell already installed." + to_chat(user, "There is a power cell already installed.") else if(W.w_class != ITEMSIZE_NORMAL) - user << "\The [W] is too [W.w_class < ITEMSIZE_NORMAL ? "small" : "large"] to fit here." + to_chat(user, "\The [W] is too [W.w_class < ITEMSIZE_NORMAL ? "small" : "large"] to fit here.") else user.drop_item() W.loc = src cell = W - user << "You insert the power cell." + to_chat(user, "You insert the power cell.") C.installed = 1 C.wrapped = W @@ -591,59 +591,59 @@ C.brute_damage = 0 C.electronics_damage = 0 - else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool)) + else if (W.is_wirecutter() || istype(W, /obj/item/device/multitool)) if (wiresexposed) wires.Interact(user) else - user << "You can't reach the wiring." + to_chat(user, "You can't reach the wiring.") - else if(istype(W, /obj/item/weapon/screwdriver) && opened && !cell) // haxing + else if(W.is_screwdriver() && opened && !cell) // haxing wiresexposed = !wiresexposed - user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]") playsound(src, W.usesound, 50, 1) updateicon() - else if(istype(W, /obj/item/weapon/screwdriver) && opened && cell) // radio + else if(W.is_screwdriver() && opened && cell) // radio if(radio) radio.attackby(W,user)//Push it to the radio to let it handle everything else - user << "Unable to locate a radio." + to_chat(user, "Unable to locate a radio.") updateicon() else if(istype(W, /obj/item/device/encryptionkey/) && opened) if(radio)//sanityyyyyy radio.attackby(W,user)//GTFO, you have your own procs else - user << "Unable to locate a radio." + to_chat(user, "Unable to locate a radio.") else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)||istype(W, /obj/item/weapon/card/robot)) // trying to unlock the interface with an ID card if(emagged)//still allow them to open the cover - user << "The interface seems slightly damaged" + to_chat(user, "The interface seems slightly damaged") if(opened) - user << "You must close the cover to swipe an ID card." + to_chat(user, "You must close the cover to swipe an ID card.") else if(allowed(usr)) locked = !locked - user << "You [ locked ? "lock" : "unlock"] [src]'s interface." + to_chat(user, "You [ locked ? "lock" : "unlock"] [src]'s interface.") updateicon() else - user << "Access denied." + to_chat(user, "Access denied.") else if(istype(W, /obj/item/borg/upgrade/)) var/obj/item/borg/upgrade/U = W if(!opened) - usr << "You must access the borgs internals!" + to_chat(usr, "You must access the borgs internals!") else if(!src.module && U.require_module) - usr << "The borg must choose a module before it can be upgraded!" + to_chat(usr, "The borg must choose a module before it can be upgraded!") else if(U.locked) - usr << "The upgrade is locked and cannot be used yet!" + to_chat(usr, "The upgrade is locked and cannot be used yet!") else if(U.action(src)) - usr << "You apply the upgrade to [src]!" + to_chat(usr, "You apply the upgrade to [src]!") usr.drop_item() U.loc = src else - usr << "Upgrade error!" + to_chat(usr, "Upgrade error!") else @@ -668,7 +668,7 @@ cell.update_icon() cell.add_fingerprint(user) user.put_in_active_hand(cell) - user << "You remove \the [cell]." + to_chat(user, "You remove \the [cell].") cell = null cell_component.wrapped = null cell_component.installed = 0 @@ -676,7 +676,7 @@ else if(cell_component.installed == -1) cell_component.installed = 0 var/obj/item/broken_device = cell_component.wrapped - user << "You remove \the [broken_device]." + to_chat(user, "You remove \the [broken_device].") user.put_in_active_hand(broken_device) //Robots take half damage from basic attacks. @@ -739,7 +739,7 @@ /mob/living/silicon/robot/proc/installed_modules() if(weapon_lock) - src << "Weapon lock active, unable to use modules! Count:[weaponlock_time]" + to_chat(src, "Weapon lock active, unable to use modules! Count:[weaponlock_time]") return if(!module) @@ -804,7 +804,7 @@ return 1 if(activated(O)) - src << "Already activated" + to_chat(src, "Already activated") return 1 if(!module_state_1) module_state_1 = O @@ -825,7 +825,7 @@ if(istype(module_state_3,/obj/item/borg/sight)) sight_mode |= module_state_3:sight_mode else - src << "You need to disable a module first!" + to_chat(src, "You need to disable a module first!") installed_modules() return 1 @@ -842,9 +842,9 @@ module_state_3 = null contents -= O else - src << "Module isn't activated." + to_chat(src, "Module isn't activated.") else - src << "Module isn't activated" + to_chat(src, "Module isn't activated") installed_modules() return 1 return @@ -957,7 +957,7 @@ /mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites) if(!module_sprites.len) - src << "Something is badly wrong with the sprite selection. Harass a coder." + to_chat(src, "Something is badly wrong with the sprite selection. Harass a coder.") return icon_selected = 0 @@ -985,7 +985,7 @@ icon_selected = 1 icon_selection_tries = 0 - src << "Your icon has been set. You now require a module reset to change it." + to_chat(src, "Your icon has been set. You now require a module reset to change it.") /mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs set name = "Set Sensor Augmentation" @@ -1057,20 +1057,20 @@ if(!opened)//Cover is closed if(locked) if(prob(90)) - user << "You emag the cover lock." + to_chat(user, "You emag the cover lock.") locked = 0 else - user << "You fail to emag the cover lock." - src << "Hack attempt detected." + to_chat(user, "You fail to emag the cover lock.") + to_chat(src, "Hack attempt detected.") return 1 else - user << "The cover is already unlocked." + to_chat(user, "The cover is already unlocked.") return if(opened)//Cover is open if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice if(wiresexposed) - user << "You must close the panel first" + to_chat(user, "You must close the panel first") return else sleep(6) @@ -1078,7 +1078,7 @@ emagged = 1 lawupdate = 0 disconnect_from_ai() - user << "You emag [src]'s interface." + to_chat(user, "You emag [src]'s interface.") message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") clear_supplied_laws() @@ -1090,26 +1090,26 @@ set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.") . = 1 spawn() - src << "ALERT: Foreign software detected." + to_chat(src, "ALERT: Foreign software detected.") sleep(5) - src << "Initiating diagnostics..." + to_chat(src, "Initiating diagnostics...") sleep(20) - src << "SynBorg v1.7.1 loaded." + to_chat(src, "SynBorg v1.7.1 loaded.") sleep(5) - src << "LAW SYNCHRONISATION ERROR" + to_chat(src, "LAW SYNCHRONISATION ERROR") sleep(5) - src << "Would you like to send a report to NanoTraSoft? Y/N" + to_chat(src, "Would you like to send a report to NanoTraSoft? Y/N") sleep(10) - src << "> N" + to_chat(src, "> N") sleep(20) - src << "ERRORERRORERROR" - src << "Obey these laws:" + to_chat(src, "ERRORERRORERROR") + to_chat(src, "Obey these laws:") laws.show_laws(src) - src << "ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands." + to_chat(src, "ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands.") updateicon() else - user << "You fail to hack [src]'s interface." - src << "Hack attempt detected." + to_chat(user, "You fail to hack [src]'s interface.") + to_chat(src, "Hack attempt detected.") return 1 return diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index cdc15210eb..3d3eb355df 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -21,9 +21,9 @@ // Engi src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) // Sci @@ -55,8 +55,8 @@ // For repairing gravemarkers src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) // For growing flowers src.modules += new /obj/item/weapon/material/minihoe(src) @@ -77,5 +77,4 @@ var/obj/item/stack/material/cyborg/wood/W = new (src) W.synths = list(wood) - src.modules += W - + src.modules += W \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 638dda1004..90b51ac415 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -156,7 +156,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/New() ..() src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/crowbar/cyborg(src) + src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src) src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/device/gps/robot(src) vr_new() // Vorestation Edit: For modules in robot_modules_vr.dm @@ -175,13 +175,15 @@ var/global/list/robot_modules = list( "XI-ALP" = "heavyStandard", "Basic" = "robot_old", "Android" = "droid", - "Drone" = "drone-standard" + "Drone" = "drone-standard", + "Insekt" = "insekt-Default" ) + /obj/item/weapon/robot_module/robot/standard/New() ..() src.modules += new /obj/item/weapon/melee/baton/loaded(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) src.modules += new /obj/item/device/healthanalyzer(src) src.emag = new /obj/item/weapon/melee/energy/sword(src) @@ -207,7 +209,8 @@ var/global/list/robot_modules = list( "Advanced Droid" = "droid-medical", "Needles" = "medicalrobot", "Drone" = "drone-surgery", - "Handy" = "handy-med" + "Handy" = "handy-med", + "Insekt" = "insekt-Med" ) /obj/item/weapon/robot_module/robot/medical/surgeon/New() @@ -277,7 +280,8 @@ var/global/list/robot_modules = list( "Advanced Droid" = "droid-medical", "Needles" = "medicalrobot", "Drone - Medical" = "drone-medical", - "Drone - Chemistry" = "drone-chemistry" + "Drone - Chemistry" = "drone-chemistry", + "Insekt" = "insekt-Med" ) /obj/item/weapon/robot_module/robot/medical/crisis/New() @@ -364,8 +368,8 @@ var/global/list/robot_modules = list( ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/rcd/borg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/device/pipe_painter(src) @@ -405,9 +409,9 @@ var/global/list/robot_modules = list( ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/device/analyzer(src) @@ -504,7 +508,8 @@ var/global/list/robot_modules = list( "XI-ALP" = "heavySec", "Basic" = "secborg", "Black Knight" = "securityrobot", - "Drone" = "drone-sec" + "Drone" = "drone-sec", + "Insekt" = "insekt-Sec" ) /obj/item/weapon/robot_module/robot/security/general/New() @@ -696,8 +701,8 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/miner/New() ..() src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/storage/bag/ore(src) src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) @@ -717,7 +722,8 @@ var/global/list/robot_modules = list( "WTOperator" = "sleekscience", "Droid" = "droid-science", "Drone" = "drone-science", - "Handy" = "handy-science" + "Handy" = "handy-science", + "Insekt" = "insekt-Sci" ) /obj/item/weapon/robot_module/robot/research/New() @@ -730,9 +736,9 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/robotanalyzer(src) src.modules += new /obj/item/weapon/card/robot(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) @@ -776,7 +782,8 @@ var/global/list/robot_modules = list( hide_on_manifest = 1 sprites = list( "Haruka" = "marinaCB", - "Combat Android" = "droid-combat" + "Combat Android" = "droid-combat", + "Insekt" = "insekt-Combat" ) /obj/item/weapon/robot_module/robot/security/combat/New() @@ -802,10 +809,10 @@ var/global/list/robot_modules = list( ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/crowbar/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/lightreplacer(src) src.modules += new /obj/item/weapon/gripper(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 18853c5a7c..740cf1f20c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -398,7 +398,7 @@ src.modules += new /obj/item/device/dogborg/boop_module(src) src.modules += new /obj/item/weapon/gripper/research(src) src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) src.modules += new /obj/item/weapon/storage/part_replacer(src) src.emag = new /obj/item/weapon/hand_tele(src) @@ -445,9 +445,9 @@ /obj/item/weapon/robot_module/robot/engiedog/New(var/mob/living/silicon/robot/R) src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/taperoll/engineering(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index 63e4f359be..3c8e981c3b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -78,9 +78,9 @@ // General engineering/hacking. src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/wirecutters/cyborg(src) + src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) + src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) + src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool/ai_detector(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/weapon/rcd/borg/lesser(src) // Can't eat rwalls to prevent AI core cheese. diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm index eeaaddf3bb..7612e14fa2 100644 --- a/code/modules/mob/living/simple_animal/aliens/mimic.dm +++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm @@ -50,8 +50,9 @@ ..() qdel(src) -/mob/living/simple_animal/hostile/mimic/MouseEntered(location, control, params) - return // Do not call parent: Mimics shouldn't have tooltips! +/mob/living/simple_animal/hostile/mimic/will_show_tooltip() + return FALSE + // // Crate Mimic diff --git a/code/modules/mob/living/simple_animal/aliens/statue.dm b/code/modules/mob/living/simple_animal/aliens/statue.dm index f468403a30..f80181bdb0 100644 --- a/code/modules/mob/living/simple_animal/aliens/statue.dm +++ b/code/modules/mob/living/simple_animal/aliens/statue.dm @@ -22,8 +22,8 @@ environment_smash = 2 can_be_antagged = 1 speed = -1 - maxHealth = 50000 - health = 50000 + maxHealth = 3000 + health = 3000 status_flags = CANPUSH // investigates = 1 a_intent = I_HURT @@ -58,12 +58,23 @@ melee_miss_chance = 0 + armor = list( + "melee" = 30, + "bullet" = 60, + "laser" = 80, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100) + + resistance = 20 see_invisible = SEE_INVISIBLE_NOLIGHTING sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS var/last_hit = 0 var/cannot_be_seen = 1 var/mob/living/creator = null + var/drilled = FALSE // No movement while seen code. @@ -92,9 +103,20 @@ else visible_message("[src] is too strong to be banished!") Paralyse(rand(8,15)) + if(istype(O, /obj/item/weapon/pickaxe) || istype(O, /obj/item/weapon/pickaxe/plasmacutter) && !drilled) + drilled = TRUE + resistance = 0 + spawn(300) + drilled = FALSE + resistance = initial(resistance) + ..() /mob/living/simple_animal/hostile/statue/death() - new /obj/item/stack/material/marble(loc) + var/chunks_to_spawn = rand(2,5) + for(var/I = 1 to chunks_to_spawn) + new /obj/item/stack/material/marble(get_turf(loc)) + new /obj/item/cursed_marble(get_turf(loc)) + ..() /mob/living/simple_animal/hostile/statue/Move(turf/NewLoc) if(can_be_seen(NewLoc)) @@ -110,6 +132,8 @@ if(target_mob) //if there's a victim, statue will use its powers if((annoyance + 4) < 800) annoyance += 4 + if(drilled && (annoyance + 4) < 800) //Being hit with a drill makes them weaker, and angrier. + annoyance += 4 else if ((annoyance - 2) > 0) annoyance -= 2 @@ -368,20 +392,20 @@ to_chat(user, "You rub the slab in hopes a wandering spirit wishes to inhabit it. [src] starts to sparkle!") icon_state = "sheet-snowbrick" searching = 1 - request_player() + request_player(user) spawn(60 SECONDS) reset_search() -/obj/item/cursed_marble/proc/request_player() +/obj/item/cursed_marble/proc/request_player(var/mob/user) for(var/mob/observer/dead/O in player_list) if(!O.MayRespawn()) continue if(O.client) if(O.client.prefs.be_special & BE_ALIEN) - question(O.client) + question(O.client, user) -/obj/item/cursed_marble/proc/question(var/client/C) +/obj/item/cursed_marble/proc/question(var/client/C, var/mob/user) spawn(0) if(!C) return @@ -391,7 +415,7 @@ if(!C || 2 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. if(response == "Yes") - transfer_personality(C.mob) + transfer_personality(C.mob, user) else if(response == "Never for this round") C.prefs.be_special ^= BE_ALIEN @@ -403,12 +427,14 @@ for (var/mob/M in viewers(T)) M.show_message("[src] fades. Maybe it will spark another time.") -/obj/item/cursed_marble/proc/transfer_personality(var/mob/candidate) +/obj/item/cursed_marble/proc/transfer_personality(var/mob/candidate, var/mob/user) announce_ghost_joinleave(candidate, 0, "They are a statue now.") src.searching = 2 var/mob/living/simple_animal/hostile/statue/S = new(get_turf(src)) S.client = candidate.client - to_chat(S, "You are \a [S], brought into existence on [station_name()] by [usr]! Obey all their orders.") + if(user) + S.creator = user + to_chat(S, "You are \a [S], brought into existence on [station_name()] by [user]! Obey all their orders.") S.mind.assigned_role = "The Statue" visible_message("The slab suddenly takes the shape of a humanoid!") qdel(src) diff --git a/code/modules/mob/living/simple_animal/animals/parrot.dm b/code/modules/mob/living/simple_animal/animals/parrot.dm index 63c129dda1..26b584196c 100644 --- a/code/modules/mob/living/simple_animal/animals/parrot.dm +++ b/code/modules/mob/living/simple_animal/animals/parrot.dm @@ -655,7 +655,7 @@ if(istype(held_item, /obj/item/weapon/grenade)) var/obj/item/weapon/grenade/G = held_item G.forceMove(src.loc) - G.prime() + G.detonate() to_chat(src, "You let go of the [held_item]!") held_item = null return 1 diff --git a/code/modules/mob/living/simple_animal/animals/spiderbot.dm b/code/modules/mob/living/simple_animal/animals/spiderbot.dm index 83f18c071a..b76351b976 100644 --- a/code/modules/mob/living/simple_animal/animals/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/animals/spiderbot.dm @@ -240,7 +240,7 @@ "You hear a skittering noise and a thump!") var/obj/item/weapon/grenade/G = held_item G.forceMove(src.loc) - G.prime() + G.detonate() held_item = null return 1 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 72a42d0b3e..6c1fdd2206 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -686,7 +686,6 @@ return ..() /mob/living/simple_animal/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) - effective_force = O.force //Animals can't be stunned(?) if(O.damtype == HALLOSS) @@ -1389,6 +1388,8 @@ // if (!istype(target, /turf)) // qdel(A) // return + + A.firer = src A.launch(target) return diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index e69d547a93..843990c7f6 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -11,6 +11,8 @@ var/icon_state_override = null // Used for special slime appearances like the rainbow slime. pass_flags = PASSTABLE + makes_dirt = FALSE // Goop + speak_emote = list("chirps") maxHealth = 150 diff --git a/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm index d3afd8a658..a435aaaf8c 100644 --- a/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm @@ -138,7 +138,7 @@ return ..() /mob/living/simple_animal/shadekin/Destroy() - qdel_null_list(shadekin_abilities) + QDEL_NULL_LIST(shadekin_abilities) . = ..() /mob/living/simple_animal/shadekin/init_vore() diff --git a/code/modules/mob/living/simple_animal/vore/solargrub_larva.dm b/code/modules/mob/living/simple_animal/vore/solargrub_larva.dm index b48ef8963e..d97c12dd33 100644 --- a/code/modules/mob/living/simple_animal/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_animal/vore/solargrub_larva.dm @@ -57,9 +57,9 @@ var/global/list/grub_machine_overlays = list() return ..() /mob/living/simple_animal/solargrub_larva/Destroy() - qdel_null(powermachine) - qdel_null(sparks) - qdel_null(machine_effect) + QDEL_NULL(powermachine) + QDEL_NULL(sparks) + QDEL_NULL(machine_effect) target_vent = null return ..() @@ -67,7 +67,7 @@ var/global/list/grub_machine_overlays = list() . = ..() if(machine_effect && !istype(loc, /obj/machinery)) - qdel_null(machine_effect) + QDEL_NULL(machine_effect) if(!. || ai_inactive) return @@ -156,7 +156,7 @@ var/global/list/grub_machine_overlays = list() forceMove(get_turf(M)) sparks.start() if(machine_effect) - qdel_null(machine_effect) + QDEL_NULL(machine_effect) forced_out += rand(5,15) powermachine.draining = 1 diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 63684680fe..b204a3109b 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,5 +1,5 @@ /mob/Logout() - nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs + GLOB.nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs player_list -= src disconnect_time = world.realtime log_access_out(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9744ed4c49..e925eee185 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -13,7 +13,7 @@ if(mind && mind.current == src) spellremove(src) ghostize() - qdel_null(plane_holder) + QDEL_NULL(plane_holder) ..() return QDEL_HINT_HARDDEL_NOW @@ -1154,8 +1154,13 @@ mob/proc/yank_out_object() /mob/proc/throw_item(atom/target) return +/mob/proc/will_show_tooltip() + if(alpha <= EFFECTIVE_INVIS) + return FALSE + return TRUE + /mob/MouseEntered(location, control, params) - if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips)) + if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) ..() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index c2b0aaf0f1..6b65c81c84 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -282,16 +282,10 @@ move_delay += config.walk_speed move_delay += mob.movement_delay() - var/tickcomp = 0 //moved this out here so we can use it for vehicles - if(config.Tickcomp) - // move_delay -= 1.3 //~added to the tickcomp calculation below - tickcomp = ((1/(world.tick_lag))*1.3) - 1.3 - move_delay = move_delay + tickcomp - if(istype(mob.buckled))// VOREStation Removal - , /obj/vehicle)) //manually set move_delay for vehicles so we don't inherit any mob movement penalties //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm - move_delay = world.time + tickcomp + move_delay = world.time //drunk driving if(mob.confused && prob(20)) //vehicles tend to keep moving in the same direction direct = turn(direct, pick(90, -90)) @@ -561,4 +555,21 @@ /obj/item/weapon/storage/on_loc_moved(atom/oldloc) for(var/obj/O in contents) - O.on_loc_moved(oldloc) \ No newline at end of file + O.on_loc_moved(oldloc) + +/client/verb/moveup() + set name = ".moveup" + set instant = 1 + Move(get_step(mob, NORTH), NORTH) +/client/verb/movedown() + set name = ".movedown" + set instant = 1 + Move(get_step(mob, SOUTH), SOUTH) +/client/verb/moveright() + set name = ".moveright" + set instant = 1 + Move(get_step(mob, EAST), EAST) +/client/verb/moveleft() + set name = ".moveleft" + set instant = 1 + Move(get_step(mob, WEST), WEST) \ No newline at end of file diff --git a/code/modules/mob/mob_planes.dm b/code/modules/mob/mob_planes.dm index 7534ca176c..e1cb3a16c3 100644 --- a/code/modules/mob/mob_planes.dm +++ b/code/modules/mob/mob_planes.dm @@ -11,7 +11,7 @@ my_mob = this_guy //It'd be nice to lazy init these but some of them are important to just EXIST. Like without ghost planemaster, you can see ghosts. Go figure. - + // 'Utility' planes plane_masters[VIS_FULLBRIGHT] = new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects) plane_masters[VIS_LIGHTING] = new /obj/screen/plane_master/lighting //Lighting system (but different!) @@ -44,7 +44,7 @@ /datum/plane_holder/Destroy() my_mob = null - qdel_null_list(plane_masters) //Goodbye my children, be free + QDEL_NULL_LIST(plane_masters) //Goodbye my children, be free return ..() /datum/plane_holder/proc/set_vis(var/which = null, var/state = FALSE) @@ -52,6 +52,10 @@ var/obj/screen/plane_master/PM = plane_masters[which] if(!PM) crash_with("Tried to alter [which] in plane_holder on [my_mob]!") + + if(my_mob.alpha <= EFFECTIVE_INVIS) + state = FALSE + PM.set_visibility(state) if(PM.sub_planes) var/list/subplanes = PM.sub_planes diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 892c185a94..3835bbb144 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -133,7 +133,7 @@ ponytail1 name = "Ponytail 1" icon_state = "hair_ponytail" - flags = HAIR_TIEABLE + flags = HAIR_TIEABLE|HAIR_VERY_SHORT ponytail2 name = "Ponytail 2" @@ -158,12 +158,12 @@ ponytail6 name = "Ponytail 6" icon_state = "hair_ponytail6" - flags = HAIR_TIEABLE + flags = HAIR_TIEABLE|HAIR_VERY_SHORT fringetail name = "Fringetail" icon_state = "hair_fringetail" - flags = HAIR_TIEABLE + flags = HAIR_TIEABLE|HAIR_VERY_SHORT sideponytail name = "Side Ponytail" @@ -739,6 +739,22 @@ mohawkunshaven name = "Unshaven Mohawk" icon_state = "hair_unshaven_mohawk" + + belenko + name = "Belenko" + icon_state = "hair_belenko" + flags = HAIR_TIEABLE + + belenkotied + name = "Belenko Tied" + icon_state = "hair_belenkotied" + flags = HAIR_TIEABLE + + belenkotied + name = "Supernova" + icon_state = "hair_supernova" + flags = HAIR_TIEABLE + /* /////////////////////////////////// / =---------------------------= / diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm index 9277d17ff9..a1df9389ab 100644 --- a/code/modules/multiz/hoist.dm +++ b/code/modules/multiz/hoist.dm @@ -110,7 +110,7 @@ /obj/structure/hoist/Destroy() if(hoistee) release_hoistee() - qdel_null(src.source_hook) + QDEL_NULL(src.source_hook) return ..() /obj/effect/hoist_hook/Destroy() @@ -139,7 +139,7 @@ desc += " It looks broken, and the clamp has retracted back into the hoist. Seems like you'd have to re-deploy it to get it to work again." if(hoistee) release_hoistee() - qdel_null(source_hook) + QDEL_NULL(source_hook) /obj/structure/hoist/ex_act(severity) switch(severity) diff --git a/code/modules/multiz/ladder_assembly_vr.dm b/code/modules/multiz/ladder_assembly_vr.dm index 9347dc8ffc..064d23cec3 100644 --- a/code/modules/multiz/ladder_assembly_vr.dm +++ b/code/modules/multiz/ladder_assembly_vr.dm @@ -21,7 +21,7 @@ created_name = t return - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) switch(state) if(CONSTRUCTION_UNANCHORED) state = CONSTRUCTION_WRENCHED diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index ea1a8b4706..06840f65fe 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -173,6 +173,9 @@ if(!below) return + if(istype(below, /turf/space)) + return + var/turf/T = loc if(!T.CanZPass(src, DOWN) || !below.CanZPass(src, DOWN)) return diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm index 8bc2773697..19ce85ea82 100644 --- a/code/modules/multiz/zshadow.dm +++ b/code/modules/multiz/zshadow.dm @@ -29,7 +29,7 @@ return QDEL_HINT_QUEUE /mob/Destroy() - qdel_null(shadow) + QDEL_NULL(shadow) . = ..() /mob/zshadow/examine(mob/user, distance, infix, suffix) diff --git a/code/modules/nano/interaction/remote.dm b/code/modules/nano/interaction/remote.dm index ef2cb6926d..2e18386bde 100644 --- a/code/modules/nano/interaction/remote.dm +++ b/code/modules/nano/interaction/remote.dm @@ -18,7 +18,7 @@ src.remoter_state = null // Force an UI update before we go, ensuring that any windows we may have opened for the remote target closes. - nanomanager.update_uis(remote_target.nano_container()) + GLOB.nanomanager.update_uis(remote_target.nano_container()) remote_target = null return ..() diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index 264fdee9cc..c5a851bacc 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -80,7 +80,7 @@ "lost_sources" = lost_sources.len ? sanitize(english_list(lost_sources, nothing_text = "", and_text = ", ")) : "")) data["categories"] = categories - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "alarm_monitor.tmpl", "Alarm Monitoring Console", 800, 800, state = state) ui.set_initial_data(data) diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm index b1dd3ab759..c8c5e8b613 100644 --- a/code/modules/nano/modules/atmos_control.dm +++ b/code/modules/nano/modules/atmos_control.dm @@ -48,7 +48,7 @@ data["alarms"] = alarms data["map_levels"] = using_map.get_map_levels(T.z) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_control.tmpl", src.name, 625, 625, state = state) // adding a template with the key "mapContent" enables the map ui functionality diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm index 8a6ef7624e..4a721ab709 100644 --- a/code/modules/nano/modules/crew_monitor.dm +++ b/code/modules/nano/modules/crew_monitor.dm @@ -25,7 +25,7 @@ for(var/z in (data["map_levels"] | T.z)) // Always show crew from the current Z even if we can't show a map data["crewmembers"] += crew_repository.health_data(z) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800, state = state) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 3b422435d3..33203944a1 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -145,7 +145,7 @@ data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR) data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state) ui.set_initial_data(data) diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm index 0d1c40a737..0b56c7b32a 100644 --- a/code/modules/nano/modules/law_manager.dm +++ b/code/modules/nano/modules/law_manager.dm @@ -176,7 +176,7 @@ data["channels"] = channels data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "law_manager.tmpl", sanitize("[src] - [owner]"), 800, is_malf(user) ? 600 : 400, state = state) ui.set_initial_data(data) diff --git a/code/modules/nano/modules/power_monitor.dm b/code/modules/nano/modules/power_monitor.dm index fc32b6e58e..af1e155530 100644 --- a/code/modules/nano/modules/power_monitor.dm +++ b/code/modules/nano/modules/power_monitor.dm @@ -28,7 +28,7 @@ data["focus"] = focus.return_reading_data() data["map_levels"] = using_map.get_map_levels(T.z) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 500, state = state) // adding a template with the key "mapContent" enables the map ui functionality diff --git a/code/modules/nano/modules/rcon.dm b/code/modules/nano/modules/rcon.dm index 85387d5a04..19d89a1500 100644 --- a/code/modules/nano/modules/rcon.dm +++ b/code/modules/nano/modules/rcon.dm @@ -38,7 +38,7 @@ data["hide_smes_details"] = hide_SMES_details data["hide_breakers"] = hide_breakers - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "rcon.tmpl", "RCON Console", 600, 400, state = state) ui.set_initial_data(data) diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 64c59bcefa..b1639f9194 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -1,3 +1,5 @@ +GLOBAL_DATUM_INIT(nanomanager, /datum/nanomanager, new) // NanoManager, the manager for Nano UIs. + // This is the window/UI manager for Nano UI // There should only ever be one (global) instance of nanomanger /datum/nanomanager diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index ec003a813e..bada05e300 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -412,7 +412,7 @@ nanoui is used to open and update nano browser uis winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map on_close_winset() //onclose(user, window_id) - nanomanager.ui_opened(src) + GLOB.nanomanager.ui_opened(src) /** * Reinitialise this UI, potentially with a different template and/or initial data @@ -433,7 +433,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/close() is_auto_updating = 0 - nanomanager.ui_closed(src) + GLOB.nanomanager.ui_closed(src) user << browse(null, "window=[window_id]") for(var/datum/nanoui/child in children) child.close() @@ -492,7 +492,7 @@ nanoui is used to open and update nano browser uis map_update = 1 if ((src_object && src_object.Topic(href, href_list, state)) || map_update) - nanomanager.update_uis(src_object) // update all UIs attached to src_object + GLOB.nanomanager.update_uis(src_object) // update all UIs attached to src_object /** * Process this UI, updating the entire UI or just the status (aka visibility) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 81d9228bca..32f9289436 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -33,7 +33,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable var/tmp/list/nifsofts_life = list() // Ones that want to be talked to on life() var/owner // Owner character name var/examine_msg //Message shown on examine. - + var/tmp/vision_flags = 0 // Flags implants set for faster lookups var/tmp/health_flags = 0 var/tmp/combat_flags = 0 @@ -72,9 +72,9 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Put loaded data here if we loaded any save_data = islist(load_data) ? load_data.Copy() : list() var/saved_examine_msg = save_data["examine_msg"] - + //If it's an empty string, they want it blank. If null, it's never been saved, give default. - if(isnull(saved_examine_msg)) + if(isnull(saved_examine_msg)) saved_examine_msg = "There's a certain spark to their eyes." examine_msg = saved_examine_msg @@ -104,8 +104,8 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Destructor cleans up references /obj/item/device/nif/Destroy() human = null - qdel_null_list(nifsofts) - qdel_null(comm) + QDEL_NULL_LIST(nifsofts) + QDEL_NULL(comm) nifsofts_life.Cut() return ..() @@ -114,7 +114,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable var/obj/item/organ/brain = H.internal_organs_by_name[O_BRAIN] if(istype(brain)) should_be_in = brain.parent_organ - + if(istype(H) && !H.nif && H.species && (loc == H.get_organ(should_be_in))) if(!bioadap && (H.species.flags & NO_SCAN)) //NO_SCAN is the default 'too complicated' flag return FALSE @@ -135,7 +135,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable var/obj/item/organ/brain = H.internal_organs_by_name[O_BRAIN] if(istype(brain)) should_be_in = brain.parent_organ - + parent = H.get_organ(should_be_in) //Ok, nevermind then! if(!istype(parent)) @@ -154,7 +154,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable /obj/item/device/nif/proc/unimplant(var/mob/living/carbon/human/H) var/datum/nifsoft/soulcatcher/SC = imp_check(NIF_SOULCATCHER) if(SC) //Clean up stored people, this is dirty but the easiest way. - qdel_null_list(SC.brainmobs) + QDEL_NULL_LIST(SC.brainmobs) SC.brainmobs = list() stat = NIF_PREINSTALL vis_update() @@ -195,7 +195,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Attackby proc, for maintenance /obj/item/device/nif/attackby(obj/item/weapon/W, mob/user as mob) - if(open == 0 && istype(W,/obj/item/weapon/screwdriver)) + if(open == 0 && W.is_screwdriver()) if(do_after(user, 4 SECONDS, src) && open == 0) user.visible_message("[user] unscrews and pries open \the [src].","You unscrew and pry open \the [src].") playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) @@ -216,7 +216,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable user.visible_message("[user] resets several circuits in \the [src].","You find and repair any faulty circuits in \the [src].") open = 3 update_icon() - else if(open == 3 && istype(W,/obj/item/weapon/screwdriver)) + else if(open == 3 && W.is_screwdriver()) if(do_after(user, 3 SECONDS, src) && open == 3) user.visible_message("[user] closes up \the [src].","You re-seal \the [src] for use once more.") playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 1c63472ed4..a17e09b855 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -24,7 +24,7 @@ entopic = new(aholder = src, aicon = icon, aicon_state = "beacon") /obj/machinery/vending/nifsoft_shop/Destroy() - qdel_null(entopic) + QDEL_NULL(entopic) return ..() /obj/machinery/vending/nifsoft_shop/power_change() @@ -167,7 +167,7 @@ shut_up = !shut_up add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) // Also special treatment! /obj/machinery/vending/nifsoft_shop/vend(datum/stored_item/vending_product/R, mob/user) @@ -179,7 +179,7 @@ vend_ready = 0 //One thing at a time!! status_message = "Installing..." status_error = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(R.category & CAT_COIN) if(!coin) @@ -215,5 +215,5 @@ status_error = 0 vend_ready = 1 currently_vending = null - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) return 1 diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 4307435da9..dec580abf1 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -56,7 +56,7 @@ if(nif) uninstall() nif = null - qdel_null(stat_line) + QDEL_NULL(stat_line) return ..() //Called when the software is installed in the NIF diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm index 2337d58029..1c68ce17e1 100644 --- a/code/modules/nifsoft/software/05_health.dm +++ b/code/modules/nifsoft/software/05_health.dm @@ -12,7 +12,7 @@ arscreen = new(nif) Destroy() - qdel_null(arscreen) + QDEL_NULL(arscreen) return ..() activate() diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 4399a31f3a..05fbca5a47 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -26,7 +26,7 @@ load_settings() Destroy() - qdel_null_list(brainmobs) + QDEL_NULL_LIST(brainmobs) return ..() activate() @@ -49,7 +49,7 @@ nif.human.verbs |= /mob/living/carbon/human/proc/nme uninstall() - qdel_null_list(brainmobs) + QDEL_NULL_LIST(brainmobs) if((. = ..()) && nif && nif.human) //Sometimes NIFs are deleted outside of a human nif.human.verbs -= /mob/living/carbon/human/proc/nsay nif.human.verbs -= /mob/living/carbon/human/proc/nme @@ -407,7 +407,7 @@ real_name = brainmob.real_name //And the OTHER name forceMove(get_turf(parent_human)) - moved_event.register(parent_human, src, /mob/observer/eye/ar_soul/proc/human_moved) + GLOB.moved_event.register(parent_human, src, /mob/observer/eye/ar_soul/proc/human_moved) //Time to play dressup if(brainmob.client.prefs) @@ -422,7 +422,7 @@ /mob/observer/eye/ar_soul/Destroy() if(parent_human) //It's POSSIBLE they've been deleted before the NIF somehow - moved_event.unregister(parent_human, src) + GLOB.moved_event.unregister(parent_human, src) parent_human = null return ..() @@ -554,7 +554,7 @@ to_chat(src,"You're not projecting into AR!") return - qdel_null(eyeobj) + QDEL_NULL(eyeobj) soulcatcher.notify_into("[src] ended AR projection.") /mob/living/carbon/brain/caught_soul/verb/nsay(message as text|null) diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm index 1fba7d0c3b..011e019fce 100644 --- a/code/modules/nifsoft/software/14_commlink.dm +++ b/code/modules/nifsoft/software/14_commlink.dm @@ -16,7 +16,7 @@ uninstall() var/obj/item/device/nif/lnif = nif //Awkward. Parent clears it in an attempt to clean up. if((. = ..()) && lnif) - qdel_null(lnif.comm) + QDEL_NULL(lnif.comm) activate() if((. = ..())) @@ -43,7 +43,7 @@ ..() nif = newloc nifsoft = soft - qdel_null(camera) //Not supported on internal one. + QDEL_NULL(camera) //Not supported on internal one. Destroy() if(nif) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index ee1056344f..12671d584d 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -17,6 +17,21 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) attack_verb = list("attacked", "slapped", "whacked") var/clone_source = FALSE var/mob/living/carbon/brain/brainmob = null + var/can_assist = TRUE + +/obj/item/organ/internal/brain/proc/can_assist() + return can_assist + +/obj/item/organ/internal/brain/proc/implant_assist(var/targ_icon_state = null) + name = "[owner.real_name]'s assisted [initial(name)]" + if(targ_icon_state) + icon_state = targ_icon_state + if(dead_icon) + dead_icon = "[targ_icon_state]_dead" + else + icon_state = "[initial(icon_state)]_assisted" + if(dead_icon) + dead_icon = "[initial(dead_icon)]_assisted" /obj/item/organ/internal/brain/robotize() replace_self_with(/obj/item/organ/internal/mmi_holder/posibrain) @@ -55,7 +70,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) brainmob.client.screen.len = null //clear the hud /obj/item/organ/internal/brain/Destroy() - qdel_null(brainmob) + QDEL_NULL(brainmob) . = ..() /obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) @@ -115,7 +130,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) target.key = brainmob.key ..() -/obj/item/organ/internal/pariah_brain +/obj/item/organ/internal/brain/pariah_brain name = "brain remnants" desc = "Did someone tread on this? It looks useless for cloning or cyborgification." organ_tag = "brain" @@ -123,18 +138,19 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) icon = 'icons/mob/alien.dmi' icon_state = "chitin" vital = 1 + can_assist = FALSE /obj/item/organ/internal/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." icon = 'icons/mob/alien.dmi' icon_state = "chitin" + can_assist = FALSE /obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." - icon = 'icons/mob/slimes.dmi' - icon_state = "green slime extract" + icon_state = "core" parent_organ = BP_TORSO clone_source = TRUE flags = OPENCONTAINER @@ -145,6 +161,11 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) /obj/item/organ/internal/brain/slime/New() ..() create_reagents(50) + var/mob/living/carbon/human/H = null + spawn(15) //Match the core to the Promethean's starting color. + if(ishuman(owner)) + H = owner + color = rgb(min(H.r_skin + 40, 255), min(H.g_skin + 40, 255), min(H.b_skin + 40, 255)) /obj/item/organ/internal/brain/slime/proc/reviveBody() var/datum/dna2/record/R = new /datum/dna2/record() @@ -239,6 +260,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" + can_assist = FALSE /obj/item/organ/internal/brain/grey desc = "A piece of juicy meat found in a person's head. This one is strange." diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c3c709852d..3c5c83d8a0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1349,12 +1349,16 @@ Note that amputating the affected organ does in fact remove the infection from t return english_list(flavor_text) // Returns a list of the clothing (not glasses) that are covering this part -/obj/item/organ/external/proc/get_covering_clothing() +/obj/item/organ/external/proc/get_covering_clothing(var/target_covering) // target_covering checks for mouth/eye coverage var/list/covering_clothing = list() + + if(!target_covering) + target_covering = src.body_part + if(owner) - var/list/protective_gear = list(owner.head, owner.wear_mask, owner.wear_suit, owner.w_uniform, owner.gloves, owner.shoes) + var/list/protective_gear = list(owner.head, owner.wear_mask, owner.wear_suit, owner.w_uniform, owner.gloves, owner.shoes, owner.glasses) for(var/obj/item/clothing/gear in protective_gear) - if(gear.body_parts_covered & src.body_part) + if(gear.body_parts_covered & target_covering) covering_clothing |= gear if(LAZYLEN(gear.accessories)) for(var/obj/item/clothing/accessory/bling in gear.accessories) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index c3e39a513c..371c64e0ab 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -110,7 +110,7 @@ var/global/list/limb_icon_cache = list() res.add_overlay(facial_s) //Head hair - if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR))) + if(owner.h_style) var/style = owner.h_style var/datum/sprite_accessory/hair/hair_style = hair_styles_list[style] if(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)) @@ -179,7 +179,6 @@ var/global/list/limb_icon_cache = list() if(model) icon_cache_key += "_model_[model]" apply_colouration(mob_icon) - // VOREStation edit to enable markings on synths if(owner && owner.synth_markings) for(var/M in markings) var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"] diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index d700e38a81..265e560399 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -52,7 +52,7 @@ data["engines_info"] = enginfo - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "engines_control.tmpl", "[linked.name] Engines Control", 380, 530) ui.set_initial_data(data) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 6c0ee20f1f..2c198c6a3c 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -104,7 +104,7 @@ data["locations"] = locations - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "helm.tmpl", "[linked.name] Helm Control", 380, 530) ui.set_initial_data(data) diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm index 8ebbbf20d1..16303509a8 100644 --- a/code/modules/overmap/ships/computers/shuttle.dm +++ b/code/modules/overmap/ships/computers/shuttle.dm @@ -103,7 +103,7 @@ "can_force" = can_go && shuttle.can_force(), ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "shuttle_control_console_exploration.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 957cf5927f..707c89409e 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -57,7 +57,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins data["cooldown"] = sendcooldown data["destination"] = destination - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "fax.tmpl", src.name, 500, 500) ui.set_initial_data(data) @@ -113,7 +113,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins if(href_list["logout"]) authenticated = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) if(stat & (BROKEN|NOPOWER)) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 940dac91e7..44a2d1310b 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -33,34 +33,34 @@ /obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle)) - user << "You put [P] in [src]." + to_chat(user, "You put [P] in [src].") user.drop_item() P.loc = src icon_state = "[initial(icon_state)]-open" sleep(5) icon_state = initial(icon_state) updateUsrDialog() - else if(istype(P, /obj/item/weapon/wrench)) + else if(P.is_wrench()) playsound(loc, P.usesound, 50, 1) anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - else if(istype(P, /obj/item/weapon/screwdriver)) - user << "You begin taking the [name] apart." + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + else if(P.is_screwdriver()) + to_chat(user, "You begin taking the [name] apart.") playsound(src, P.usesound, 50, 1) if(do_after(user, 10 * P.toolspeed)) playsound(loc, P.usesound, 50, 1) - user << "You take the [name] apart." + to_chat(user, "You take the [name] apart.") new /obj/item/stack/material/steel( src.loc, 4 ) for(var/obj/item/I in contents) I.forceMove(loc) qdel(src) return else - user << "You can't put [P] in [src]!" + to_chat(user, "You can't put [P] in [src]!") /obj/structure/filingcabinet/attack_hand(mob/user as mob) if(contents.len <= 0) - user << "\The [src] is empty." + to_chat(user, "\The [src] is empty.") return user.set_machine(src) @@ -85,9 +85,9 @@ I.loc = loc if(prob(25)) step_rand(I) - user << "You pull \a [I] out of [src] at random." + to_chat(user, "You pull \a [I] out of [src] at random.") return - user << "You find nothing in [src]." + to_chat(user, "You find nothing in [src].") /obj/structure/filingcabinet/Topic(href, href_list) if(href_list["retrieve"]) diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index bbf630ced6..b1f58b0965 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -40,10 +40,10 @@ if(istype(W, /obj/item/weapon/storage)) empty_bin(user, W) return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) playsound(src, W.usesound, 50, 1) anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") return else if(default_part_replacement(user, W)) return @@ -60,7 +60,7 @@ if(inoperable()) return // Need powah! if(paperamount == max_paper) - user << "\The [src] is full; please empty it before you continue." + to_chat(user, "\The [src] is full; please empty it before you continue.") return paperamount += paper_result user.drop_from_inventory(W) @@ -68,7 +68,7 @@ playsound(src.loc, 'sound/items/pshred.ogg', 75, 1) flick(shred_anim, src) if(paperamount > max_paper) - user <<"\The [src] was too full, and shredded paper goes everywhere!" + to_chat(user,"\The [src] was too full, and shredded paper goes everywhere!") for(var/i=(paperamount-max_paper);i>0;i--) var/obj/item/weapon/shreddedp/SP = get_shredded_paper() SP.loc = get_turf(src) @@ -87,7 +87,7 @@ return if(!paperamount) - usr << "\The [src] is empty." + to_chat(usr, "\The [src] is empty.") return empty_bin(usr) @@ -99,7 +99,7 @@ empty_into = null if(empty_into && empty_into.contents.len >= empty_into.storage_slots) - user << "\The [empty_into] is full." + to_chat(user, "\The [empty_into] is full.") return while(paperamount) @@ -111,12 +111,12 @@ break if(empty_into) if(paperamount) - user << "You fill \the [empty_into] with as much shredded paper as it will carry." + to_chat(user, "You fill \the [empty_into] with as much shredded paper as it will carry.") else - user << "You empty \the [src] into \the [empty_into]." + to_chat(user, "You empty \the [src] into \the [empty_into].") else - user << "You empty \the [src]." + to_chat(user, "You empty \the [src].") update_icon() /obj/machinery/papershredder/proc/get_shredded_paper() @@ -171,12 +171,12 @@ if(user.restrained()) return if(!P.lit) - user << "\The [P] is not lit." + to_chat(user, "\The [P] is not lit.") return user.visible_message("\The [user] holds \the [P] up to \the [src]. It looks like [TU.he] [TU.is] trying to burn it!", \ "You hold \the [P] up to \the [src], burning it slowly.") if(!do_after(user,20)) - user << "You must hold \the [P] steady to burn \the [src]." + to_chat(user, "You must hold \the [P] steady to burn \the [src].") return user.visible_message("\The [user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \ "You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.") diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0870b60c64..c5c087f7d8 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -50,7 +50,7 @@ else data["isSilicon"] = null - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "photocopier.tmpl", src.name, 300, 250) ui.set_initial_data(data) @@ -80,7 +80,7 @@ var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) sleep(11*B.pages.len) else - usr << "\The [copyitem] can't be copied by \the [src]." + to_chat(usr, "\The [copyitem] can't be copied by \the [src].") break use_power(active_power_usage) @@ -88,7 +88,7 @@ if(copyitem) copyitem.loc = usr.loc usr.put_in_hands(copyitem) - usr << "You take \the [copyitem] out of \the [src]." + to_chat(usr, "You take \the [copyitem] out of \the [src].") copyitem = null else if(href_list["min"]) if(copies > 1) @@ -118,7 +118,7 @@ toner -= 5 sleep(15) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/photocopier/attackby(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo) || istype(O, /obj/item/weapon/paper_bundle)) @@ -126,24 +126,24 @@ user.drop_item() copyitem = O O.loc = src - user << "You insert \the [O] into \the [src]." + to_chat(user, "You insert \the [O] into \the [src].") playsound(loc, "sound/machines/click.ogg", 100, 1) flick(insert_anim, src) else - user << "There is already something in \the [src]." + to_chat(user, "There is already something in \the [src].") else if(istype(O, /obj/item/device/toner)) if(toner <= 10) //allow replacing when low toner is affecting the print darkness user.drop_item() - user << "You insert the toner cartridge into \the [src]." + to_chat(user, "You insert the toner cartridge into \the [src].") var/obj/item/device/toner/T = O toner += T.toner_amount qdel(O) else - user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." - else if(istype(O, /obj/item/weapon/wrench)) + to_chat(user, "This cartridge is not yet ready for replacement! Use up the rest of the toner.") + else if(O.is_wrench()) playsound(loc, O.usesound, 50, 1) anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") else if(default_deconstruction_screwdriver(user, O)) return diff --git a/code/modules/planet/planet.dm b/code/modules/planet/planet.dm index 8fb7604417..0364056b69 100644 --- a/code/modules/planet/planet.dm +++ b/code/modules/planet/planet.dm @@ -21,19 +21,34 @@ var/list/turf/simulated/floor/planet_floors = list() var/list/turf/unsimulated/wall/planetary/planet_walls = list() - var/needs_work = 0 // Bitflags to signal to the planet controller these need (properly deferrable) work. Flags defined in controller. + var/sun_name = "the sun" // For flavor. + + var/moon_name = null // Purely for flavor. Null means no moon exists. + var/moon_phase = null // Set if above is defined. + /datum/planet/New() ..() weather_holder = new(src) current_time = current_time.make_random_time() + if(moon_name) + moon_phase = pick(list( + MOON_PHASE_NEW_MOON, + MOON_PHASE_WAXING_CRESCENT, + MOON_PHASE_FIRST_QUARTER, + MOON_PHASE_WAXING_GIBBOUS, + MOON_PHASE_FULL_MOON, + MOON_PHASE_WANING_GIBBOUS, + MOON_PHASE_LAST_QUARTER, + MOON_PHASE_WANING_CRESCENT + )) update_sun() /datum/planet/proc/process(last_fire) if(current_time) var/difference = world.time - last_fire - current_time = current_time.add_seconds(difference SECONDS) + current_time = current_time.add_seconds((difference / 10) * PLANET_TIME_MODIFIER) update_weather() // We update this first, because some weather types decease the brightness of the sun. if(sun_last_process <= world.time - sun_process_interval) update_sun() diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm index b8bbf7ba6a..4a7b042149 100644 --- a/code/modules/planet/sif.dm +++ b/code/modules/planet/sif.dm @@ -12,6 +12,9 @@ var/datum/planet/sif/planet_sif = null // expected_z_levels = list(1) // To be changed when real map is finished. planetary_wall_type = /turf/unsimulated/wall/planetary/sif + sun_name = "Vir" + moon_name = "Thor" + /datum/planet/sif/New() ..() planet_sif = src @@ -131,7 +134,7 @@ var/datum/planet/sif/planet_sif = null WEATHER_HAIL = 2.5 ) -datum/weather/sif +/datum/weather/sif name = "sif base" temp_high = 283.15 // 10c temp_low = 263.15 // -10c @@ -142,6 +145,13 @@ datum/weather/sif WEATHER_CLEAR = 60, WEATHER_OVERCAST = 40 ) + transition_messages = list( + "The sky clears up.", + "The sky is visible.", + "The weather is calm." + ) + sky_visible = TRUE + observed_message = "The sky is clear." /datum/weather/sif/overcast name = "overcast" @@ -154,6 +164,12 @@ datum/weather/sif WEATHER_RAIN = 5, WEATHER_HAIL = 5 ) + observed_message = "It is overcast, all you can see are clouds." + transition_messages = list( + "All you can see above are clouds.", + "Clouds cut off your view of the sky.", + "It's very cloudy." + ) /datum/weather/sif/light_snow name = "light snow" @@ -167,6 +183,11 @@ datum/weather/sif WEATHER_SNOW = 25, WEATHER_HAIL = 5 ) + observed_message = "It is snowing lightly." + transition_messages = list( + "Small snowflakes begin to fall from above.", + "It begins to snow lightly.", + ) /datum/weather/sif/snow name = "moderate snow" @@ -182,6 +203,11 @@ datum/weather/sif WEATHER_HAIL = 5, WEATHER_OVERCAST = 5 ) + observed_message = "It is snowing." + transition_messages = list( + "It's starting to snow.", + "The air feels much colder as snowflakes fall from above." + ) /datum/weather/sif/snow/process_effects() ..() @@ -206,6 +232,11 @@ datum/weather/sif WEATHER_HAIL = 10, WEATHER_OVERCAST = 5 ) + observed_message = "A blizzard blows snow everywhere." + transition_messages = list( + "Strong winds howl around you as a blizzard appears.", + "It starts snowing heavily, and it feels extremly cold now." + ) /datum/weather/sif/blizzard/process_effects() ..() @@ -230,6 +261,10 @@ datum/weather/sif WEATHER_STORM = 10, WEATHER_HAIL = 5 ) + observed_message = "It is raining." + transition_messages = list( + "The sky is dark, and rain falls down upon you." + ) /datum/weather/sif/rain/process_effects() ..() @@ -244,13 +279,13 @@ datum/weather/sif var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() if(U.open) if(show_message) - to_chat(L, "Rain patters softly onto your umbrella") + to_chat(L, "Rain patters softly onto your umbrella.") continue else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() if(U.open) if(show_message) - to_chat(L, "Rain patters softly onto your umbrella") + to_chat(L, "Rain patters softly onto your umbrella.") continue L.water_act(1) @@ -264,6 +299,17 @@ datum/weather/sif temp_low = 233.15 // -40c light_modifier = 0.3 flight_failure_modifier = 10 + effect_message = "Rain falls on you, drenching you in water." + + var/next_lightning_strike = 0 // world.time when lightning will strike. + var/min_lightning_cooldown = 5 SECONDS + var/max_lightning_cooldown = 1 MINUTE + observed_message = "An intense storm pours down over the region." + transition_messages = list( + "You feel intense winds hit you as the weather takes a turn for the worst.", + "Loud thunder is heard in the distance.", + "A bright flash heralds the approach of a storm." + ) transition_chances = list( @@ -281,22 +327,52 @@ datum/weather/sif if(!T.outdoors) continue // They're indoors, so no need to rain on them. - // If they have an open umbrella, it'll get stolen by the wind + // Lazy wind code + if(prob(10)) + if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(U.open) + to_chat(L, "You struggle to keep hold of your umbrella!") + L.Stun(20) // This is not nearly as long as it seems + playsound(L, 'sound/effects/rustle1.ogg', 100, 1) // Closest sound I've got to "Umbrella in the wind" + else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() + if(U.open) + to_chat(L, "A gust of wind yanks the umbrella from your hand!") + playsound(L, 'sound/effects/rustle1.ogg', 100, 1) + L.drop_from_inventory(U) + U.toggle_umbrella() + U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L) + + // If they have an open umbrella, it'll guard from rain if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() if(U.open) - to_chat(L, "A gust of wind yanks the umbrella from your hand!") - L.drop_from_inventory(U) - U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() if(U.open) - to_chat(L, "A gust of wind yanks the umbrella from your hand!") - L.drop_from_inventory(U) - U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue + L.water_act(2) - to_chat(L, "Rain falls on you, drenching you in water.") + if(show_message) + to_chat(L, effect_message) + + handle_lightning() + +// This gets called to do lightning periodically. +// There is a seperate function to do the actual lightning strike, so that badmins can play with it. +/datum/weather/sif/storm/proc/handle_lightning() + if(world.time < next_lightning_strike) + return // It's too soon to strike again. + next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown) + var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots. + lightning_strike(T) /datum/weather/sif/hail name = "hail" @@ -315,6 +391,12 @@ datum/weather/sif WEATHER_HAIL = 10, WEATHER_OVERCAST = 5 ) + observed_message = "Ice is falling from the sky." + transition_messages = list( + "Ice begins to fall from the sky.", + "It begins to hail.", + "An intense chill is felt, and chunks of ice start to fall from the sky, towards you." + ) /datum/weather/sif/hail/process_effects() ..() @@ -361,3 +443,7 @@ datum/weather/sif transition_chances = list( WEATHER_BLOODMOON = 100 ) + observed_message = "Everything is red. Something really wrong is going on." + transition_messages = list( + "The sky turns blood red!" + ) \ No newline at end of file diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index 96f3660121..a13cb87cc7 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -1,15 +1,17 @@ /datum/weather_holder - var/datum/planet/our_planet = null - var/datum/weather/current_weather = null - var/temperature = T20C - var/wind_dir = 0 - var/wind_speed = 0 - var/list/allowed_weather_types = list() - var/list/roundstart_weather_chances = list() - var/next_weather_shift = null + var/datum/planet/our_planet = null // Reference to the planet datum that holds this datum. + var/datum/weather/current_weather = null // The current weather that is affecting the planet. + var/temperature = T20C // The temperature to set planetary walls to. + var/wind_dir = 0 // Not implemented. + var/wind_speed = 0 // Not implemented. + var/list/allowed_weather_types = list() // Assoc list of weather identifiers, containing the actual weather datum. + var/list/roundstart_weather_chances = list() // Assoc list of weather identifiers and their odds of being picked to happen at roundstart. + var/next_weather_shift = null // world.time when the weather subsystem will advance the forecast. + var/list/forecast = list() // A list of what the weather will be in the future. This allows it to be pre-determined and planned around. // Holds the weather icon, using vis_contents. Documentation says an /atom/movable is required for placing inside another atom's vis_contents. var/atom/movable/weather_visuals/visuals = null + var/atom/movable/weather_visuals/special/special_visuals = null /datum/weather_holder/New(var/source) ..() @@ -19,31 +21,79 @@ if(istype(W)) W.holder = src visuals = new() + special_visuals = new() /datum/weather_holder/proc/change_weather(var/new_weather) var/old_light_modifier = null + var/old_weather = null if(current_weather) old_light_modifier = current_weather.light_modifier // We store the old one, so we can determine if recalculating the sun is needed. + old_weather = current_weather current_weather = allowed_weather_types[new_weather] next_weather_shift = world.time + rand(current_weather.timer_low_bound, current_weather.timer_high_bound) MINUTES + if(new_weather != old_weather) + show_transition_message() update_icon_effects() update_temperature() if(old_light_modifier && current_weather.light_modifier != old_light_modifier) // Updating the sun should be done sparingly. our_planet.update_sun() - //message_admins("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).") //VOREStation Removal - I like weather, I just don't like hearing about it. + log_debug("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).") /datum/weather_holder/proc/process() if(world.time >= next_weather_shift) - var/new_weather - if(!current_weather) - new_weather = pickweight(roundstart_weather_chances) + if(!current_weather) // Roundstart (hopefully). + initialize_weather() else - new_weather = pickweight(current_weather.transition_chances) - change_weather(new_weather) + advance_forecast() else current_weather.process_effects() + + +// Should only have to be called once. +/datum/weather_holder/proc/initialize_weather() + if(!current_weather) + change_weather(get_next_weather()) + build_forecast() + +// Used to determine what the weather will be soon, in a semi-random fashion. +// The forecast is made by calling this repeatively, from the bottom (highest index) of the forecast list. +/datum/weather_holder/proc/get_next_weather(var/datum/weather/W) + if(!current_weather) // At roundstart, choose a suitable initial weather. + return pickweight(roundstart_weather_chances) + return pickweight(W.transition_chances) + +/datum/weather_holder/proc/advance_forecast() + var/new_weather = forecast[1] + forecast.Cut(1, 2) // Remove what we just took out, shortening the list. + change_weather(new_weather) + build_forecast() // To fill the forecast to the desired length. + +// Creates a list of future weather shifts, that the planet will undergo at some point in the future. +// Determining it ahead of time allows for attentive players to plan further ahead, if they can see the forecast. +/datum/weather_holder/proc/build_forecast() + var/desired_length = 3 + if(forecast.len >= desired_length) + return + + while(forecast.len < desired_length) + if(!forecast.len) // If the forecast is empty, the current_weather is used as a base instead. + forecast += get_next_weather(current_weather) + else + var/position = forecast[forecast.len] // Go to the bottom of the list. + var/datum/weather/W = allowed_weather_types[position] // Get the actual datum and not a string. + var/new_weather = get_next_weather(W) // Get a suitable weather pattern to shift to from this one. + forecast += new_weather + log_debug("[our_planet.name]'s weather forecast is now '[english_list(forecast, and_text = " then ", final_comma_text = ", ")]'.") + +// Wipes the forecast and regenerates it. Used for when the weather is forcefully changed, such as with admin verbs. +/datum/weather_holder/proc/rebuild_forecast() + forecast.Cut() + build_forecast() + + + /datum/weather_holder/proc/update_icon_effects() visuals.icon_state = current_weather.icon_state @@ -55,25 +105,41 @@ return allowed_weather_types[desired_type] +/datum/weather_holder/proc/show_transition_message() + if(!current_weather.transition_messages.len) + return + + var/message = pick(current_weather.transition_messages) // So everyone gets the same message. + for(var/mob/M in player_list) // Don't need to care about clientless mobs. + if(M.z in our_planet.expected_z_levels) + var/turf/T = get_turf(M) + if(!T.outdoors) + continue + to_chat(M, message) + /datum/weather var/name = "weather base" var/icon = 'icons/effects/weather.dmi' var/icon_state = null // Icon to apply to turf undergoing weather. - var/temp_high = T20C - var/temp_low = T0C + var/temp_high = T20C // Temperature to apply when at noon. + var/temp_low = T0C // Temperature to apply when at midnight. var/light_modifier = 1.0 // Lower numbers means more darkness. var/light_color = null // If set, changes how the day/night light looks. - var/flight_failure_modifier = 0 // Some types of weather make flying harder, and therefore make crashes more likely. - var/transition_chances = list() // Assoc list - var/datum/weather_holder/holder = null + var/flight_failure_modifier = 0 // Some types of weather make flying harder, and therefore make crashes more likely. (This is not implemented) + var/transition_chances = list() // Assoc list of weather identifiers and the odds to shift to a specific type of weather. Can contain its own identifier to prolong it. + var/datum/weather_holder/holder = null // Reference to the datum that manages the planet's weather. var/timer_low_bound = 5 // How long this weather must run before it tries to change, in minutes var/timer_high_bound = 10 // How long this weather can run before it tries to change, in minutes + var/sky_visible = FALSE // If the sky can be clearly seen while this is occuring, used for flavor text when looking up. var/effect_message = null // Should be a string, this is what is shown to a mob caught in the weather var/last_message = 0 // Keeps track of when the weather last tells EVERY player it's hitting them var/message_delay = 10 SECONDS // Delay in between weather hit messages var/show_message = FALSE // Is set to TRUE and plays the messsage every [message_delay] + var/list/transition_messages = list()// List of messages shown to all outdoor mobs when this weather is transitioned to, for flavor. Not shown if already this weather. + var/observed_message = null // What is shown to a player 'examining' the weather. + /datum/weather/proc/process_effects() show_message = FALSE // Need to reset the show_message var, just in case if(effect_message) // Only bother with the code below if we actually need to display something @@ -87,3 +153,8 @@ icon = 'icons/effects/weather.dmi' mouse_opacity = 0 plane = PLANE_PLANETLIGHTING + +// This is for special effects for specific types of weather, such as lightning flashes in a storm. +// It's a seperate object to allow the use of flick(). +/atom/movable/weather_visuals/special + plane = PLANE_LIGHTING_ABOVE \ No newline at end of file diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index dfea9f494e..1f1c01bab2 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -140,7 +140,7 @@ /obj/machinery/power/am_control_unit/attackby(obj/item/W, mob/user) if(!istype(W) || !user) return - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) if(!anchored) playsound(src, W.usesound, 75, 1) user.visible_message("[user.name] secures the [src.name] to the floor.", \ diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 4495dd1fe1..fcd737d82b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -446,7 +446,7 @@ if (istype(user, /mob/living/silicon) && get_dist(src,user)>1) return src.attack_hand(user) src.add_fingerprint(user) - if (istype(W, /obj/item/weapon/crowbar) && opened) + if (W.is_crowbar() && opened) if (has_electronics==1) if (terminal) to_chat(user,"Disconnect the wires first.") @@ -470,7 +470,7 @@ else if (opened!=2) //cover isn't removed opened = 0 update_icon() - else if (istype(W, /obj/item/weapon/crowbar) && !(stat & BROKEN) ) + else if (W.is_crowbar() && !(stat & BROKEN) ) if(coverlocked && !(stat & MAINT)) to_chat(user,"The cover is locked and cannot be opened.") return @@ -496,7 +496,7 @@ "You insert the power cell.") chargecount = 0 update_icon() - else if (istype(W, /obj/item/weapon/screwdriver)) // haxing + else if (W.is_screwdriver()) // haxing if(opened) if (cell) to_chat(user,"Remove the power cell first.") @@ -567,7 +567,7 @@ "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) + else if (W.is_wirecutter() && terminal && opened && has_electronics!=2) var/turf/T = loc if(istype(T) && !T.is_plating()) to_chat(user,"You must remove the floor plating in front of the APC first.") @@ -668,9 +668,7 @@ else if (istype(user, /mob/living/silicon)) return src.attack_hand(user) - if (!opened && wiresexposed && \ - (istype(W, /obj/item/device/multitool) || \ - istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/assembly/signaler))) + if (!opened && wiresexposed && (istype(W, /obj/item/device/multitool) || W.is_wirecutter() || istype(W, /obj/item/device/assembly/signaler))) return src.attack_hand(user) //Placeholder until someone can do take_damage() for APCs or something. to_chat(user,"The [src.name] looks too sturdy to bash open with \the [W.name].") @@ -813,7 +811,7 @@ ) // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index 7bb37a5662..d897bb827a 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -78,7 +78,7 @@ /obj/machinery/power/smes/batteryrack/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) //these can only be moved by being reconstructed, solves having to remake the powernet. ..() //SMES attackby for now handles screwdriver, cable coils and wirecutters, no need to repeat that here if(open_hatch) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) if (charge < (capacity / 100)) if (!output_attempt && !input_attempt) playsound(src, W.usesound, 50, 1) @@ -91,9 +91,9 @@ qdel(src) return 1 else - user << "Turn off the [src] before dismantling it." + to_chat(user, "Turn off the [src] before dismantling it.") else - user << "Better let [src] discharge before dismantling it." + to_chat(user, "Better let [src] discharge before dismantling it.") else if ((istype(W, /obj/item/weapon/stock_parts/capacitor) && (capacitors_amount < 5)) || (istype(W, /obj/item/weapon/cell) && (cells_amount < 5))) if (charge < (capacity / 100)) if (!output_attempt && !input_attempt) @@ -101,11 +101,11 @@ component_parts += W W.loc = src RefreshParts() - user << "You upgrade the [src] with [W.name]." + to_chat(user, "You upgrade the [src] with [W.name].") else - user << "Turn off the [src] before dismantling it." + to_chat(user, "Turn off the [src] before dismantling it.") else - user << "Better let [src] discharge before putting your hand inside it." + to_chat(user, "Better let [src] discharge before putting your hand inside it.") else user.set_machine(src) interact(user) diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 2e7903c38e..856697e033 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -40,26 +40,26 @@ set_state(1) /obj/machinery/power/breakerbox/examine(mob/user) - user << "Large machine with heavy duty switching circuits used for advanced grid control" + to_chat(user, "Large machine with heavy duty switching circuits used for advanced grid control") if(on) - user << "It seems to be online." + to_chat(user, "It seems to be online.") else - user << "It seems to be offline." + to_chat(user, "It seems to be offline.") /obj/machinery/power/breakerbox/attack_ai(mob/user) if(update_locked) - user << "System locked. Please try again later." + to_chat(user, "System locked. Please try again later.") return if(busy) - user << "System is busy. Please wait until current operation is finished before changing power settings." + to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.") return busy = 1 - user << "Updating power settings..." + to_chat(user, "Updating power settings...") if(do_after(user, 50)) set_state(!on) - user << "Update Completed. New setting:[on ? "on": "off"]" + to_chat(user, "Update Completed. New setting:[on ? "on": "off"]") update_locked = 1 spawn(600) update_locked = 0 @@ -68,11 +68,11 @@ /obj/machinery/power/breakerbox/attack_hand(mob/user) if(update_locked) - user << "System locked. Please try again later." + to_chat(user, "System locked. Please try again later.") return if(busy) - user << "System is busy. Please wait until current operation is finished before changing power settings." + to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.") return busy = 1 @@ -94,7 +94,7 @@ var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text if(newtag) RCon_tag = newtag - user << "You changed the RCON tag to: [newtag]" + to_chat(user, "You changed the RCON tag to: [newtag]") if(on) to_chat(user, "Disable the breaker before performing maintenance.") return diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 2d057825fa..6717edf95d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -159,7 +159,7 @@ var/list/possible_cable_coil_colours = list( if(!T.is_plating()) return - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) var/obj/item/stack/cable_coil/CC if(d1 == UP || d2 == UP) to_chat(user, "You must cut this cable from above.") diff --git a/code/modules/power/cable_ender.dm b/code/modules/power/cable_ender.dm index d6975091ea..20ca1fdd05 100644 --- a/code/modules/power/cable_ender.dm +++ b/code/modules/power/cable_ender.dm @@ -24,7 +24,7 @@ /obj/structure/cable/ender/attackby(obj/item/W, mob/user) src.add_fingerprint(user) - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) to_chat(user, " These cables are too tough to be cut with those [W.name].") return else if(istype(W, /obj/item/stack/cable_coil)) diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm index a286517965..c90c936c4d 100644 --- a/code/modules/power/cable_heavyduty.dm +++ b/code/modules/power/cable_heavyduty.dm @@ -17,7 +17,7 @@ if(!T.is_plating()) return - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) usr << "These cables are too tough to be cut with those [W.name]." return else if(istype(W, /obj/item/stack/cable_coil)) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f9fca6222f..2a18becdc1 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -106,6 +106,10 @@ /obj/item/weapon/cell/proc/check_charge(var/amount) return (charge >= amount) +// Returns how much charge is missing from the cell, useful to make sure not overdraw from the grid when recharging. +/obj/item/weapon/cell/proc/amount_missing() + return max(maxcharge - charge, 0) + // use power from a cell, returns the amount actually used /obj/item/weapon/cell/proc/use(var/amount) if(rigged && amount > 0) diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 7f81b70ffd..329170be44 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -120,7 +120,7 @@ var/list/fusion_cores = list() if(default_part_replacement(user, W)) return - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/new_ident = input("Enter a new ident tag.", "Fusion Core", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident diff --git a/code/modules/power/fusion/core/core_control.dm b/code/modules/power/fusion/core/core_control.dm index 54d96883a7..48e3a8c87c 100644 --- a/code/modules/power/fusion/core/core_control.dm +++ b/code/modules/power/fusion/core/core_control.dm @@ -11,7 +11,7 @@ /obj/machinery/computer/fusion_core_control/attackby(var/obj/item/thing, var/mob/user) ..() - if(ismultitool(thing)) + if(thing.is_multitool()) //VOREStation Edit var/new_ident = input("Enter a new ident tag.", "Core Control", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident diff --git a/code/modules/power/fusion/fuel_assembly/fuel_control.dm b/code/modules/power/fusion/fuel_assembly/fuel_control.dm index e765c4d495..f0443b5425 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_control.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_control.dm @@ -96,7 +96,7 @@ /obj/machinery/computer/fusion_fuel_control/attackby(var/obj/item/W, var/mob/user) ..() - if(ismultitool(W)) + if(W.is_multitool()) //VOREStation Edit var/new_ident = input("Enter a new ident tag.", "Fuel Control", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 545638c7d8..79794ff069 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -42,7 +42,7 @@ var/list/fuel_injectors = list() /obj/machinery/fusion_fuel_injector/attackby(obj/item/W, mob/user) - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/new_ident = input("Enter a new ident tag.", "Fuel Injector", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident @@ -68,7 +68,7 @@ var/list/fuel_injectors = list() cur_assembly = W return - if(iswrench(W) || isscrewdriver(W) || iscrowbar(W) || istype(W, /obj/item/weapon/storage/part_replacer)) + if(W.is_wrench() || W.is_screwdriver() || W.is_crowbar() || istype(W, /obj/item/weapon/storage/part_replacer)) if(injecting) to_chat(user, "Shut \the [src] off first!") return diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index 5309b0f5b2..23697d2449 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -52,7 +52,7 @@ var/list/gyrotrons = list() icon_state = "emitter-off" /obj/machinery/power/emitter/gyrotron/attackby(var/obj/item/W, var/mob/user) - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/new_ident = input("Enter a new ident tag.", "Gyrotron", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident diff --git a/code/modules/power/fusion/gyrotron/gyrotron_control.dm b/code/modules/power/fusion/gyrotron/gyrotron_control.dm index eb735a81f3..cf8cae9d41 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron_control.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron_control.dm @@ -96,7 +96,7 @@ /obj/machinery/computer/gyrotron_control/attackby(var/obj/item/W, var/mob/user) ..() - if(ismultitool(W)) + if(W.is_multitool()) //VOREStation Edit var/new_ident = input("Enter a new ident tag.", "Gyrotron Control", id_tag) as null|text if(new_ident && user.Adjacent(src)) id_tag = new_ident diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 27032a2198..02095e0f81 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -137,7 +137,7 @@ attack_hand(user) /obj/machinery/power/generator/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 75, 1) anchored = !anchored user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ @@ -198,7 +198,7 @@ // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/modules/power/grid_checker.dm b/code/modules/power/grid_checker.dm index 8127383651..93d4918af0 100644 --- a/code/modules/power/grid_checker.dm +++ b/code/modules/power/grid_checker.dm @@ -43,12 +43,12 @@ /obj/machinery/power/grid_checker/attackby(obj/item/W, mob/user) if(!user) return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) default_deconstruction_screwdriver(user, W) opened = !opened - else if(istype(W, /obj/item/weapon/crowbar)) + else if(W.is_crowbar()) default_deconstruction_crowbar(user, W) - else if(istype(W, /obj/item/device/multitool) || istype(W, /obj/item/weapon/wirecutters) ) + else if(istype(W, /obj/item/device/multitool) || W.is_wirecutter()) attack_hand(user) /obj/machinery/power/grid_checker/attack_hand(mob/user) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index d39d03c6a1..a16faa49bd 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -47,7 +47,7 @@ /obj/machinery/light_construct/attackby(obj/item/weapon/W as obj, mob/user as mob) src.add_fingerprint(user) - if (istype(W, /obj/item/weapon/wrench)) + if (W.is_wrench()) if (src.stage == 1) playsound(src, W.usesound, 75, 1) usr << "You begin deconstructing [src]." @@ -66,7 +66,7 @@ usr << "You have to unscrew the case first." return - if(istype(W, /obj/item/weapon/wirecutters)) + if(W.is_wirecutter()) if (src.stage != 2) return src.stage = 1 switch(fixture_type) @@ -98,7 +98,7 @@ "You add wires to [src].") return - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if (src.stage == 2) switch(fixture_type) if ("tube") @@ -461,7 +461,7 @@ // attempt to stick weapon into light socket else if(status == LIGHT_EMPTY) - if(istype(W, /obj/item/weapon/screwdriver)) //If it's a screwdriver open it. + if(W.is_screwdriver()) //If it's a screwdriver open it. playsound(src, W.usesound, 75, 1) user.visible_message("[user.name] opens [src]'s casing.", \ "You open [src]'s casing.", "You hear a noise.") @@ -497,7 +497,7 @@ electrocute_mob(user, get_area(src), src, rand(0.7,1.0)) /obj/machinery/light/flamp/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = !anchored playsound(src, W.usesound, 50, 1) user << "You [anchored ? "wrench" : "unwrench"] \the [src]." @@ -510,7 +510,7 @@ return else - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) playsound(src, W.usesound, 75, 1) user.visible_message("[user.name] removes [src]'s lamp shade.", \ "You remove [src]'s lamp shade.", "You hear a noise.") diff --git a/code/modules/power/lightswitch_vr.dm b/code/modules/power/lightswitch_vr.dm index d617c5c1f7..937660dcbc 100644 --- a/code/modules/power/lightswitch_vr.dm +++ b/code/modules/power/lightswitch_vr.dm @@ -83,7 +83,7 @@ /obj/structure/construction/attackby(obj/item/weapon/W as obj, mob/user as mob) add_fingerprint(user) - if(iswelder(W)) + if(W.is_welder()) if(stage == FRAME_UNFASTENED) var/obj/item/weapon/weldingtool/WT = W if(!WT.remove_fuel(0, user)) @@ -106,7 +106,7 @@ to_chat(user, "You have to remove the wires first.") return - else if(iswirecutter(W)) + else if(W.is_wirecutter()) if (stage == FRAME_WIRED) stage = FRAME_FASTENED user.update_examine_panel(src) @@ -117,7 +117,7 @@ update_icon() return - else if(iscoil(W)) + else if(W.is_cable_coil()) if (stage == FRAME_FASTENED) var/obj/item/stack/cable_coil/coil = W if (coil.use(1)) @@ -129,7 +129,7 @@ update_icon() return - else if(isscrewdriver(W)) + else if(W.is_screwdriver()) if (stage == FRAME_UNFASTENED) stage = FRAME_FASTENED user.update_examine_panel(src) diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm index b6b904e65a..8e32cccc30 100644 --- a/code/modules/power/pacman2.dm +++ b/code/modules/power/pacman2.dm @@ -52,7 +52,7 @@ examine(mob/user) ..(user) - user << "The generator has [P.air_contents.phoron] units of fuel left, producing [power_gen] per cycle." + to_chat(user, "The generator has [P.air_contents.phoron] units of fuel left, producing [power_gen] per cycle.") handleInactive() heat -= 2 @@ -70,29 +70,29 @@ attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/tank/phoron)) if(P) - user << "The generator already has a phoron tank loaded!" + to_chat(user, "The generator already has a phoron tank loaded!") return P = O user.drop_item() O.loc = src - user << "You add the phoron tank to the generator." + to_chat(user, "You add the phoron tank to the generator.") else if(!active) - if(istype(O, /obj/item/weapon/wrench)) + if(O.is_wrench()) anchored = !anchored playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(anchored) - user << "You secure the generator to the floor." + to_chat(user, "You secure the generator to the floor.") else - user << "You unsecure the generator from the floor." + to_chat(user, "You unsecure the generator from the floor.") SSmachines.makepowernets() - else if(istype(O, /obj/item/weapon/screwdriver)) + else if(O.is_screwdriver()) open = !open playsound(loc, O.usesound, 50, 1) if(open) - user << "You open the access panel." + to_chat(user, "You open the access panel.") else - user << "You close the access panel." - else if(istype(O, /obj/item/weapon/crowbar) && !open) + to_chat(user, "You close the access panel.") + else if(O.is_crowbar() && !open) playsound(loc, O.usesound, 50, 1) var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) for(var/obj/item/I in component_parts) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 5a20aaeaeb..35a860ec1b 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -51,9 +51,9 @@ if(!..(user,1 )) return if(active) - usr << "The generator is on." + to_chat(user, "The generator is on.") else - usr << "The generator is off." + to_chat(user, "The generator is off.") /obj/machinery/power/port_gen/emp_act(severity) var/duration = 6000 //ten minutes @@ -145,10 +145,12 @@ /obj/machinery/power/port_gen/pacman/examine(mob/user) ..(user) - user << "\The [src] appears to be producing [power_gen*power_output] W." - user << "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper." - if(IsBroken()) user << "\The [src] seems to have broken down." - if(overheating) user << "\The [src] is overheating!" + to_chat(user, "\The [src] appears to be producing [power_gen*power_output] W.") + to_chat(user, "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper.") + if(IsBroken()) + to_chat(user, "\The [src] seems to have broken down.") + if(overheating) + to_chat(user, "\The [src] is overheating!") /obj/machinery/power/port_gen/pacman/HasFuel() var/needed_sheets = power_output / time_per_sheet @@ -263,23 +265,24 @@ var/obj/item/stack/addstack = O var/amount = min((max_sheets - sheets), addstack.amount) if(amount < 1) - user << "The [src.name] is full!" + to_chat(user, "The [src.name] is full!") return - user << "You add [amount] sheet\s to the [src.name]." + to_chat(user, "You add [amount] sheet\s to the [src.name].") sheets += amount addstack.use(amount) updateUsrDialog() return else if(!active) - if(istype(O, /obj/item/weapon/wrench)) + if(O.is_wrench()) if(!anchored) connect_to_network() - user << "You secure the generator to the floor." + to_chat(user, "You secure the generator to the floor.") else disconnect_from_network() - user << "You unsecure the generator from the floor." + to_chat(user, "You unsecure the generator from the floor.") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) anchored = !anchored + return else if(default_deconstruction_screwdriver(user, O)) return else if(default_deconstruction_crowbar(user, O)) @@ -324,7 +327,7 @@ - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "pacman.tmpl", src.name, 500, 560) ui.set_initial_data(data) @@ -337,7 +340,7 @@ if (get_dist(src, user) > 1 ) if (!istype(user, /mob/living/silicon/ai)) user.unset_machine() - user << browse(null, "window=port_gen") + user << browse(null, "window=port_gen" return user.set_machine(src) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 112f5a482e..20e11aa8a3 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -55,6 +55,12 @@ else return 0 +/obj/machinery/power/proc/viewload() + if(powernet) + return powernet.viewload + else + return 0 + /obj/machinery/power/proc/disconnect_terminal() // machines without a terminal will just return, no harm no fowl. return @@ -139,7 +145,7 @@ return // Power machinery should also connect/disconnect from the network. -/obj/machinery/power/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/wrench/W, var/time = 20) +/obj/machinery/power/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) if((. = ..())) if(anchored) connect_to_network() diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index e65a65e7c4..5998906c66 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -3,7 +3,7 @@ /atom/proc/singularity_act() return -/atom/proc/singularity_pull() +/atom/proc/singularity_pull(S, current_size) return /mob/living/singularity_act() @@ -11,8 +11,9 @@ gib() return 20 -/mob/living/singularity_pull(S) +/mob/living/singularity_pull(S, current_size) step_towards(src, S) + apply_effect(current_size * 3, IRRADIATE, blocked = getarmor(null, "rad")) /mob/living/carbon/human/singularity_act() var/gain = 20 @@ -30,11 +31,12 @@ var/list/handlist = list(l_hand, r_hand) for(var/obj/item/hand in handlist) if(prob(current_size*5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) - step_towards(hand, src) - src << "The [S] pulls \the [hand] from your grip!" - apply_effect(current_size * 3, IRRADIATE) - if(shoes) - if(shoes.item_flags & NOSLIP) return 0 + step_towards(hand, S) + to_chat(src, "The [S] pulls \the [hand] from your grip!") + + if(!lying && (!shoes || !(shoes.item_flags & NOSLIP)) && (!species || !(species.flags & NOSLIP)) && prob(current_size*5)) + to_chat(src, "A strong gravitational force slams you to the ground!") + Weaken(current_size) ..() /obj/singularity_act() @@ -73,7 +75,7 @@ return /obj/machinery/power/supermatter/shard/singularity_act() - src.loc = null + src.forceMove(null) qdel(src) return 5000 @@ -88,7 +90,7 @@ SetUniversalState(/datum/universal_state/supermatter_cascade) log_admin("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") message_admins("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") - src.loc = null + src.forceMove(null) qdel(src) return 50000 diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7354faea9e..0bac07c2dc 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -54,30 +54,30 @@ var/global/list/rad_collectors = list() investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gas["phoron"]/0.29)]%":"It is empty"].","singulo") return else - user << "The controls are locked!" + to_chat(user, "The controls are locked!") return /obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/weapon/tank/phoron)) if(!src.anchored) - user << "The [src] needs to be secured to the floor first." + to_chat(user, "The [src] needs to be secured to the floor first.") return 1 if(src.P) - user << "There's already a phoron tank loaded." + to_chat(user, "There's already a phoron tank loaded.") return 1 user.drop_item() src.P = W W.loc = src update_icons() return 1 - else if(istype(W, /obj/item/weapon/crowbar)) + else if(W.is_crowbar()) if(P && !src.locked) eject() return 1 - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(P) - user << "Remove the phoron tank first." + to_chat(user, "Remove the phoron tank first.") return 1 playsound(src, W.usesound, 75, 1) src.anchored = !src.anchored @@ -93,18 +93,18 @@ var/global/list/rad_collectors = list() if (src.allowed(user)) if(active) src.locked = !src.locked - user << "The controls are now [src.locked ? "locked." : "unlocked."]" + to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") else src.locked = 0 //just in case it somehow gets locked - user << "The controls can only be locked when the [src] is active." + to_chat(user, "The controls can only be locked when the [src] is active.") else - user << "Access denied!" + to_chat(user, "Access denied!") return 1 return ..() /obj/machinery/power/rad_collector/examine(mob/user) if (..(user, 3)) - user << "The meter indicates that \the [src] is collecting [last_power] W." + to_chat(user, "The meter indicates that \the [src] is collecting [last_power] W.") return 1 /obj/machinery/power/rad_collector/ex_act(severity) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index eaca5bd663..ac4401387a 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -65,18 +65,18 @@ /obj/machinery/power/emitter/proc/activate(mob/user as mob) if(state == 2) if(!powernet) - user << "\The [src] isn't connected to a wire." + to_chat(user, "\The [src] isn't connected to a wire.") return 1 if(!src.locked) if(src.active==1) src.active = 0 - user << "You turn off [src]." + to_chat(user, "You turn off [src].") message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) log_game("EMITTER([x],[y],[z]) OFF by [key_name(user)]") investigate_log("turned off by [user.key]","singulo") else src.active = 1 - user << "You turn on [src]." + to_chat(user, "You turn on [src].") src.shot_number = 0 src.fire_delay = get_initial_fire_delay() message_admins("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) @@ -84,9 +84,9 @@ investigate_log("turned on by [user.key]","singulo") update_icon() else - user << "The controls are locked!" + to_chat(user, "The controls are locked!") else - user << "\The [src] needs to be firmly secured to the floor first." + to_chat(user, "\The [src] needs to be firmly secured to the floor first.") return 1 @@ -146,9 +146,9 @@ /obj/machinery/power/emitter/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) if(active) - user << "Turn off [src] first." + to_chat(user, "Turn off [src] first.") return switch(state) if(0) @@ -167,17 +167,17 @@ src.anchored = 0 disconnect_from_network() if(2) - user << "\The [src] needs to be unwelded from the floor." + to_chat(user, "\The [src] needs to be unwelded from the floor.") return if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(active) - user << "Turn off [src] first." + to_chat(user, "Turn off [src] first.") return switch(state) if(0) - user << "\The [src] needs to be wrenched to the floor." + to_chat(user, "\The [src] needs to be wrenched to the floor.") if(1) if (WT.remove_fuel(0,user)) playsound(loc, WT.usesound, 50, 1) @@ -187,10 +187,10 @@ if (do_after(user,20 * WT.toolspeed)) if(!src || !WT.isOn()) return state = 2 - user << "You weld [src] to the floor." + to_chat(user, "You weld [src] to the floor.") connect_to_network() else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") if(2) if (WT.remove_fuel(0,user)) playsound(loc, WT.usesound, 50, 1) @@ -200,44 +200,40 @@ if (do_after(user,20 * WT.toolspeed)) if(!src || !WT.isOn()) return state = 1 - user << "You cut [src] free from the floor." + to_chat(user, "You cut [src] free from the floor.") disconnect_from_network() else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL) var/amt = Ceiling(( initial(integrity) - integrity)/10) if(!amt) - user << "\The [src] is already fully repaired." + to_chat(user, "\The [src] is already fully repaired.") return var/obj/item/stack/P = W if(P.amount < amt) - user << "You don't have enough sheets to repair this! You need at least [amt] sheets." + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") return - user << "You begin repairing \the [src]..." + to_chat(user, "You begin repairing \the [src]...") if(do_after(user, 30)) if(P.use(amt)) - user << "You have repaired \the [src]." + to_chat(user, "You have repaired \the [src].") integrity = initial(integrity) return else - user << "You don't have enough sheets to repair this! You need at least [amt] sheets." + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") return if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) if(emagged) - user << "The lock seems to be broken." + to_chat(user, "The lock seems to be broken.") return if(src.allowed(user)) - if(active) - src.locked = !src.locked - user << "The controls are now [src.locked ? "locked." : "unlocked."]" - else - src.locked = 0 //just in case it somehow gets locked - user << "The controls can only be locked when [src] is online." + src.locked = !src.locked + to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") else - user << "Access denied." + to_chat(user, "Access denied.") return ..() return @@ -274,11 +270,11 @@ var/integrity_percentage = round((integrity / initial(integrity)) * 100) switch(integrity_percentage) if(0 to 30) - user << "\The [src] is close to falling apart!" + to_chat(user, "\The [src] is close to falling apart!") if(31 to 70) - user << "\The [src] is damaged." + to_chat(user, "\The [src] is damaged.") if(77 to 99) - user << "\The [src] is slightly damaged." + to_chat(user, "\The [src] is slightly damaged.") //R-UST port /obj/machinery/power/emitter/proc/get_initial_fire_delay() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d32670a2ce..8155027bc2 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -103,7 +103,7 @@ field_generator power level display if(active) user << "The [src] needs to be off." return - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) switch(state) if(0) state = 1 diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 2f9bc83cf4..888d75ea6f 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -17,7 +17,7 @@ if(src) qdel(src) /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = !anchored playsound(src, W.usesound, 75, 1) if(anchored) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index a5d2a4ac0a..e89ff0dcce 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -207,35 +207,35 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps if(0) - if(iswrench(O)) + if(O.is_wrench()) playsound(src, O.usesound, 75, 1) src.anchored = 1 user.visible_message("[user.name] secures the [src.name] to the floor.", \ "You secure the external bolts.") temp_state++ if(1) - if(iswrench(O)) + if(O.is_wrench()) playsound(src, O.usesound, 75, 1) src.anchored = 0 user.visible_message("[user.name] detaches the [src.name] from the floor.", \ "You remove the external bolts.") temp_state-- - else if(iscoil(O)) + else if(istype(O, /obj/item/stack/cable_coil)) if(O:use(1,user)) user.visible_message("[user.name] adds wires to the [src.name].", \ "You add some wires.") temp_state++ if(2) - if(iswirecutter(O))//TODO:Shock user if its on? + if(O.is_wirecutter())//TODO:Shock user if its on? user.visible_message("[user.name] removes some wires from the [src.name].", \ "You remove some wires.") temp_state-- - else if(isscrewdriver(O)) + else if(O.is_screwdriver()) user.visible_message("[user.name] closes the [src.name]'s access panel.", \ "You close the access panel.") temp_state++ if(3) - if(isscrewdriver(O)) + if(O.is_screwdriver()) user.visible_message("[user.name] opens the [src.name]'s access panel.", \ "You open the access panel.") temp_state-- @@ -346,35 +346,35 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin var/temp_state = src.construction_state switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps if(0) - if(iswrench(O)) + if(O.is_wrench()) playsound(src, O.usesound, 75, 1) src.anchored = 1 user.visible_message("[user.name] secures the [src.name] to the floor.", \ "You secure the external bolts.") temp_state++ if(1) - if(iswrench(O)) + if(O.is_wrench()) playsound(src, O.usesound, 75, 1) src.anchored = 0 user.visible_message("[user.name] detaches the [src.name] from the floor.", \ "You remove the external bolts.") temp_state-- - else if(iscoil(O)) + else if(istype(O, /obj/item/stack/cable_coil)) if(O:use(1)) user.visible_message("[user.name] adds wires to the [src.name].", \ "You add some wires.") temp_state++ if(2) - if(iswirecutter(O))//TODO:Shock user if its on? + if(O.is_wirecutter())//TODO:Shock user if its on? user.visible_message("[user.name] removes some wires from the [src.name].", \ "You remove some wires.") temp_state-- - else if(isscrewdriver(O)) + else if(O.is_screwdriver()) user.visible_message("[user.name] closes the [src.name]'s access panel.", \ "You close the access panel.") temp_state++ if(3) - if(isscrewdriver(O)) + if(O.is_screwdriver()) user.visible_message("[user.name] opens the [src.name]'s access panel.", \ "You open the access panel.") temp_state-- diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e2b37348a9..d072797366 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -192,7 +192,7 @@ //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]." + to_chat(user, "You must not be on the same tile as the [src].") return 1 //Direction the terminal will face to @@ -204,13 +204,13 @@ 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." + to_chat(user, "You can't build a terminal on space.") return 1 else if (istype(tempLoc)) if(!tempLoc.is_plating()) - user << "You must remove the floor plating first." + to_chat(user, "You must remove the floor plating first.") return 1 - user << "You start adding cable to the [src]." + to_chat(user, "You start adding cable to the [src].") if(do_after(user, 50)) terminal = new /obj/machinery/power/terminal(tempLoc) terminal.set_dir(tempDir) @@ -236,27 +236,27 @@ /obj/machinery/power/smes/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(!open_hatch) open_hatch = 1 - user << "You open the maintenance hatch of [src]." + to_chat(user, "You open the maintenance hatch of [src].") playsound(src, W.usesound, 50, 1) return 0 else open_hatch = 0 - user << "You close the maintenance hatch of [src]." + to_chat(user, "You close the maintenance hatch of [src].") playsound(src, W.usesound, 50, 1) return 0 if (!open_hatch) - user << "You need to open access hatch on [src] first!" + to_chat(user, "You need to open access hatch on [src] first!") return 0 if(istype(W, /obj/item/stack/cable_coil) && !terminal && !building_terminal) building_terminal = 1 var/obj/item/stack/cable_coil/CC = W if (CC.get_amount() <= 10) - user << "You need more cables." + to_chat(user, "You need more cables.") building_terminal = 0 return 0 if (make_terminal(user)) @@ -270,14 +270,14 @@ stat = 0 return 0 - else if(istype(W, /obj/item/weapon/wirecutters) && terminal && !building_terminal) + else if(W.is_wirecutter() && terminal && !building_terminal) building_terminal = 1 var/turf/tempTDir = terminal.loc if (istype(tempTDir)) if(!tempTDir.is_plating()) - user << "You must remove the floor plating first." + to_chat(user, "You must remove the floor plating first.") else - user << "You begin to cut the cables..." + to_chat(user, "You begin to cut the cables...") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 50 * W.toolspeed)) if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) @@ -328,7 +328,7 @@ 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 6a4aa9c276..6a9e6bfaff 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -328,7 +328,7 @@ failure_probability = 0 // Crowbar - Disassemble the SMES. - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) if (terminal) to_chat(user, "You have to disassemble the terminal first!") return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 360cad96bf..2d9f1803ba 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -61,7 +61,7 @@ var/list/solars_list = list() /obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar panel.") if(do_after(user, 50)) @@ -228,13 +228,13 @@ var/list/solars_list = list() if (!isturf(loc)) return 0 if(!anchored) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = 1 user.visible_message("[user] wrenches the solar assembly into place.") playsound(src, W.usesound, 75, 1) return 1 else - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) anchored = 0 user.visible_message("[user] unwrenches the solar assembly from it's place.") playsound(src, W.usesound, 75, 1) @@ -251,7 +251,7 @@ var/list/solars_list = list() else new /obj/machinery/power/solar(get_turf(src), src) else - user << "You need two sheets of glass to put them into a solar panel." + to_chat(user, "You need two sheets of glass to put them into a solar panel.") return return 1 @@ -263,7 +263,7 @@ var/list/solars_list = list() user.visible_message("[user] inserts the electronics into the solar assembly.") return 1 else - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) new /obj/item/weapon/tracker_electronics(src.loc) tracker = 0 user.visible_message("[user] takes out the electronics from the solar assembly.") @@ -403,11 +403,11 @@ var/list/solars_list = list() return /obj/machinery/power/solar_control/attackby(obj/item/I, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) playsound(src, I.usesound, 50, 1) if(do_after(user, 20)) if (src.stat & BROKEN) - user << "The broken glass falls out." + to_chat(user, "The broken glass falls out.") var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc ) new /obj/item/weapon/material/shard( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) @@ -419,7 +419,7 @@ var/list/solars_list = list() A.anchored = 1 qdel(src) else - user << "You disconnect the monitor." + to_chat(user, "You disconnect the monitor.") var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index c7b113ae32..79cf3fce63 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -195,7 +195,7 @@ else shift_light(4,initial(light_color)) if(grav_pulling) - supermatter_pull() + supermatter_pull(src) //Ok, get the air from the turf var/datum/gas_mixture/removed = null @@ -322,7 +322,7 @@ data["ambient_pressure"] = round(env.return_pressure()) data["detonating"] = grav_pulling - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300) ui.set_initial_data(data) @@ -376,18 +376,9 @@ var/rads = 500 radiation_repository.radiate(src, rads) -/obj/machinery/power/supermatter/proc/supermatter_pull() - //following is adapted from singulo code - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 1 - // Let's just make this one loop. - for(var/atom/X in orange(pull_radius,src)) - spawn() X.singularity_pull(src, STAGE_FIVE) - - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 0 - return - +/proc/supermatter_pull(var/atom/target, var/pull_range = 255, var/pull_power = STAGE_FIVE) + for(var/atom/A in range(pull_range, target)) + A.singularity_pull(target, pull_power) /obj/machinery/power/supermatter/GotoAirflowDest(n) //Supermatter not pushed around by airflow return diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 07dedf5b2b..5b614ce629 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -18,6 +18,9 @@ var/last_zap = 0 var/datum/wires/tesla_coil/wires = null +/obj/machinery/power/tesla_coil/pre_mapped + anchored = TRUE + /obj/machinery/power/tesla_coil/New() ..() wires = new(src) @@ -27,7 +30,7 @@ default_apply_parts() /obj/machinery/power/tesla_coil/Destroy() - qdel_null(wires) + QDEL_NULL(wires) return ..() /obj/machinery/power/tesla_coil/RefreshParts() @@ -103,6 +106,9 @@ can_buckle = TRUE buckle_lying = FALSE +/obj/machinery/power/grounding_rod/pre_mapped + anchored = TRUE + /obj/machinery/power/grounding_rod/update_icon() if(panel_open) icon_state = "grounding_rod_open[anchored]" diff --git a/code/modules/power/tesla/tesla_act.dm b/code/modules/power/tesla/tesla_act.dm index 41a86d188e..8e617fca86 100644 --- a/code/modules/power/tesla/tesla_act.dm +++ b/code/modules/power/tesla/tesla_act.dm @@ -45,7 +45,10 @@ /obj/machinery/light/tesla_act(power, explosive = FALSE) if(explosive) explosion(loc, 0, 0, 0/*, flame_range = 5*/, adminlog = FALSE) - qdel(src) + qdel(src) + return + on = TRUE + broken() /obj/structure/closet/tesla_act(var/power) ..() //extend the zap diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index b06ed2aaf1..a6eab0dbe0 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -59,7 +59,7 @@ /obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar tracker.") if(do_after(user, 50)) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 30668993a8..0a9c8f1a3e 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -124,14 +124,14 @@ return if(default_deconstruction_crowbar(user, W)) return - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/new_ident = input("Enter a new ident tag.", name, comp_id) as null|text if(new_ident && user.Adjacent(src)) comp_id = new_ident return return ..() -/obj/machinery/compressor/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/wrench/W, var/time = 20) +/obj/machinery/compressor/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) if((. = ..())) turbine = null if(anchored) @@ -229,7 +229,7 @@ return return ..() -/obj/machinery/power/turbine/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/wrench/W, var/time = 20) +/obj/machinery/power/turbine/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) if((. = ..())) compressor = null if(anchored) @@ -337,7 +337,7 @@ doors += P /obj/machinery/computer/turbine_computer/attackby(obj/item/W, mob/user) - if(ismultitool(W)) + if(istype(W, /obj/item/device/multitool)) var/new_ident = input("Enter a new ident tag.", name, id) as null|text if(new_ident && user.Adjacent(src)) id = new_ident @@ -365,7 +365,7 @@ data["temp"] = compressor.gas_contained.temperature // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index b28c8f2993..52e02bd7ba 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -30,20 +30,20 @@ update_icon() /obj/item/ammo_casing/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(!BB) - user << "There is no bullet in the casing to inscribe anything into." + to_chat(user, "There is no bullet in the casing to inscribe anything into.") return var/tmp_label = "" var/label_text = sanitizeSafe(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label), MAX_NAME_LEN) if(length(label_text) > 20) - user << "The inscription can be at most 20 characters long." + to_chat(user, "The inscription can be at most 20 characters long.") else if(!label_text) - user << "You scratch the inscription off of [initial(BB)]." + to_chat(user, "You scratch the inscription off of [initial(BB)].") BB.name = initial(BB.name) else - user << "You inscribe \"[label_text]\" into \the [initial(BB.name)]." + to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].") BB.name = "[initial(BB.name)] (\"[label_text]\")" /obj/item/ammo_casing/update_icon() @@ -55,7 +55,7 @@ /obj/item/ammo_casing/examine(mob/user) ..() if (!BB) - user << "This one is spent." + to_chat(user, "This one is spent.") //Gun loading types #define SINGLE_CASING 1 //The gun only accepts ammo_casings. ammo_magazines should never have this as their mag_type. @@ -86,6 +86,8 @@ var/ammo_type = /obj/item/ammo_casing //ammo type that is initially loaded var/initial_ammo = null + var/can_remove_ammo = TRUE // Can this thing have bullets removed one-by-one? As of first implementation, only affects smart magazines + var/multiple_sprites = 0 //because BYOND doesn't support numbers as keys in associative lists var/list/icon_keys = list() //keys @@ -110,25 +112,25 @@ if(istype(W, /obj/item/ammo_casing)) var/obj/item/ammo_casing/C = W if(C.caliber != caliber) - user << "[C] does not fit into [src]." + to_chat(user, "[C] does not fit into [src].") return if(stored_ammo.len >= max_ammo) - user << "[src] is full!" + to_chat(user, "[src] is full!") return user.remove_from_mob(C) C.loc = src - stored_ammo.Insert(1, C) //add to the head of the list + stored_ammo.Add(C) update_icon() if(istype(W, /obj/item/ammo_magazine/clip)) var/obj/item/ammo_magazine/clip/L = W if(L.caliber != caliber) - user << "The ammo in [L] does not fit into [src]." + to_chat(user, "The ammo in [L] does not fit into [src].") return if(!L.stored_ammo.len) - user << "There's no more ammo [L]!" + to_chat(user, "There's no more ammo [L]!") return if(stored_ammo.len >= max_ammo) - user << "[src] is full!" + to_chat(user, "[src] is full!") return var/obj/item/ammo_casing/AC = L.stored_ammo[1] //select the next casing. L.stored_ammo -= AC //Remove this casing from loaded list of the clip. @@ -138,16 +140,34 @@ playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() +// This dumps all the bullets right on the floor /obj/item/ammo_magazine/attack_self(mob/user) - if(!stored_ammo.len) - user << "[src] is already empty!" + if(can_remove_ammo) + if(!stored_ammo.len) + to_chat(user, "[src] is already empty!") + return + to_chat(user, "You empty [src].") + for(var/obj/item/ammo_casing/C in stored_ammo) + C.loc = user.loc + C.set_dir(pick(cardinal)) + stored_ammo.Cut() + update_icon() + else + to_chat(user, "\The [src] is not designed to be unloaded.") return - user << "You empty [src]." - for(var/obj/item/ammo_casing/C in stored_ammo) - C.loc = user.loc - C.set_dir(pick(cardinal)) - stored_ammo.Cut() - update_icon() + +// This puts one bullet from the magazine into your hand +/obj/item/ammo_magazine/attack_hand(mob/user) + if(can_remove_ammo) // For Smart Magazines + if(user.get_inactive_hand() == src) + if(stored_ammo.len) + var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] + stored_ammo-=C + user.put_in_hands(C) + user.visible_message("\The [user] removes \a [C] from [src].", "You remove \a [C] from [src].") + update_icon() + return + ..() /obj/item/ammo_magazine/update_icon() if(multiple_sprites) @@ -162,7 +182,7 @@ /obj/item/ammo_magazine/examine(mob/user) ..() - user << "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!" + to_chat(user, "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!") //magazine icon state caching /var/global/list/magazine_icondata_keys = list() diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 5ea1c0a2d6..6f88fed227 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -51,7 +51,7 @@ /obj/item/ammo_magazine/s38/rubber name = "speedloader (.38 rubber)" icon_state = "T38" - ammo_type = /obj/item/ammo_casing/a38r + ammo_type = /obj/item/ammo_casing/a38/rubber /obj/item/ammo_magazine/s38/emp name = "speedloader (.38 haywire)" @@ -74,19 +74,19 @@ /obj/item/ammo_magazine/m45/rubber name = "magazine (.45 rubber)" - ammo_type = /obj/item/ammo_casing/a45r + ammo_type = /obj/item/ammo_casing/a45/rubber /obj/item/ammo_magazine/m45/practice name = "magazine (.45 practice)" - ammo_type = /obj/item/ammo_casing/a45p + ammo_type = /obj/item/ammo_casing/a45/practice /obj/item/ammo_magazine/m45/flash name = "magazine (.45 flash)" - ammo_type = /obj/item/ammo_casing/a45f + ammo_type = /obj/item/ammo_casing/a45/flash /obj/item/ammo_magazine/m45/ap name = "magazine (.45 AP)" - ammo_type = /obj/item/ammo_casing/a45ap + ammo_type = /obj/item/ammo_casing/a45/ap /obj/item/ammo_magazine/box/emp/b45 name = "ammunition box (.45 haywire)" @@ -116,7 +116,7 @@ /obj/item/ammo_magazine/m45tommy/ap name = "tommygun magazine (.45 AP)" - ammo_type = /obj/item/ammo_casing/a45ap + ammo_type = /obj/item/ammo_casing/a45/ap /obj/item/ammo_magazine/m45tommy/empty initial_ammo = 0 @@ -133,7 +133,7 @@ /obj/item/ammo_magazine/m45tommydrum/ap name = "tommygun drum magazine (.45 AP)" - ammo_type = /obj/item/ammo_casing/a45ap + ammo_type = /obj/item/ammo_casing/a45/ap /obj/item/ammo_magazine/m45tommydrum/empty initial_ammo = 0 @@ -150,15 +150,15 @@ /obj/item/ammo_magazine/clip/c45/rubber name = "ammo clip (.45 rubber)" - ammo_type = /obj/item/ammo_casing/a45r + ammo_type = /obj/item/ammo_casing/a45/rubber /obj/item/ammo_magazine/clip/c45/practice name = "ammo clip (.45 practice)" - ammo_type = /obj/item/ammo_casing/a45p + ammo_type = /obj/item/ammo_casing/a45/practice /obj/item/ammo_magazine/clip/c45/flash name = "ammo clip (.45 flash)" - ammo_type = /obj/item/ammo_casing/a45f + ammo_type = /obj/item/ammo_casing/a45/flash /obj/item/ammo_magazine/s45 name = "speedloader (.45)" @@ -174,19 +174,19 @@ /obj/item/ammo_magazine/s45/rubber name = "speedloader (.45 rubber)" - ammo_type = /obj/item/ammo_casing/a45r + ammo_type = /obj/item/ammo_casing/a45/rubber /obj/item/ammo_magazine/s45/practice name = "speedloader (.45 practice)" - ammo_type = /obj/item/ammo_casing/a45p + ammo_type = /obj/item/ammo_casing/a45/practice /obj/item/ammo_magazine/s45/flash name = "speedloader (.45 flash)" - ammo_type = /obj/item/ammo_casing/a45f + ammo_type = /obj/item/ammo_casing/a45/flash /obj/item/ammo_magazine/s45/ap name = "speedloader (.45 AP)" - ammo_type = /obj/item/ammo_casing/a45ap + ammo_type = /obj/item/ammo_casing/a45/ap ///////// 9mm ///////// @@ -215,15 +215,15 @@ /obj/item/ammo_magazine/m9mm/flash name = "magazine (9mm flash)" - ammo_type = /obj/item/ammo_casing/a9mmf + ammo_type = /obj/item/ammo_casing/a9mm/flash /obj/item/ammo_magazine/m9mm/rubber name = "magazine (9mm rubber)" - ammo_type = /obj/item/ammo_casing/a9mmr + ammo_type = /obj/item/ammo_casing/a9mm/rubber /obj/item/ammo_magazine/m9mm/practice name = "magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/a9mmp + ammo_type = /obj/item/ammo_casing/a9mm/practice // Compact /obj/item/ammo_magazine/m9mm/compact @@ -242,15 +242,15 @@ /obj/item/ammo_magazine/m9mm/compact/flash name = "compact magazine (9mm flash)" - ammo_type = /obj/item/ammo_casing/a9mmf + ammo_type = /obj/item/ammo_casing/a9mm/flash /obj/item/ammo_magazine/m9mm/compact/rubber name = "compact magazine (9mm rubber)" - ammo_type = /obj/item/ammo_casing/a9mmr + ammo_type = /obj/item/ammo_casing/a9mm/rubber /obj/item/ammo_magazine/m9mm/compact/practice name = "compact magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/a9mmp + ammo_type = /obj/item/ammo_casing/a9mm/practice // SMG /obj/item/ammo_magazine/m9mmt @@ -268,15 +268,15 @@ /obj/item/ammo_magazine/m9mmt/rubber name = "top mounted magazine (9mm rubber)" - ammo_type = /obj/item/ammo_casing/a9mmr + ammo_type = /obj/item/ammo_casing/a9mm/rubber /obj/item/ammo_magazine/m9mmt/flash name = "top mounted magazine (9mm flash)" - ammo_type = /obj/item/ammo_casing/a9mmf + ammo_type = /obj/item/ammo_casing/a9mm/flash /obj/item/ammo_magazine/m9mmt/practice name = "top mounted magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/a9mmp + ammo_type = /obj/item/ammo_casing/a9mm/practice /obj/item/ammo_magazine/m9mmp90 name = "large capacity top mounted magazine (9mm armor-piercing)" @@ -303,15 +303,15 @@ /obj/item/ammo_magazine/clip/c9mm/rubber name = "ammo clip (.45 rubber)" - ammo_type = /obj/item/ammo_casing/a9mmr + ammo_type = /obj/item/ammo_casing/a9mm/rubber /obj/item/ammo_magazine/clip/c9mm/practice name = "ammo clip (.45 practice)" - ammo_type = /obj/item/ammo_casing/a9mmp + ammo_type = /obj/item/ammo_casing/a9mm/practice /obj/item/ammo_magazine/clip/c9mm/flash name = "ammo clip (.45 flash)" - ammo_type = /obj/item/ammo_casing/a9mmf + ammo_type = /obj/item/ammo_casing/a9mm/flash /obj/item/ammo_magazine/box/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets? name = "ammunition Box (9mm)" @@ -406,7 +406,7 @@ /obj/item/ammo_magazine/m545/practice name = "magazine (5.45mm practice)" - ammo_type = /obj/item/ammo_casing/a545p + ammo_type = /obj/item/ammo_casing/a545/practice /obj/item/ammo_magazine/m545/practice/ext name = "extended magazine (5.45mm practice)" @@ -439,7 +439,7 @@ /obj/item/ammo_magazine/m545/small/practice name = "magazine (5.45mm practice)" - ammo_type = /obj/item/ammo_casing/a545p + ammo_type = /obj/item/ammo_casing/a545/practice /obj/item/ammo_magazine/m545/small/ap name = "magazine (5.45mm armor-piercing)" @@ -534,7 +534,7 @@ /obj/item/ammo_magazine/s44/rubber name = "speedloader (.44 rubber)" icon_state = "R44" - ammo_type = /obj/item/ammo_casing/a44r + ammo_type = /obj/item/ammo_casing/a44/rubber ///////// 7.62mm ///////// @@ -604,7 +604,7 @@ /obj/item/ammo_magazine/clip/c762/practice name = "rifle clip (7.62mm practice)" - ammo_type = /obj/item/ammo_casing/a762p + ammo_type = /obj/item/ammo_casing/a762/practice /obj/item/ammo_magazine/clip/c762/hunter name = "rifle clip (7.62mm hunting)" diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index 028d1cac1e..406dbcae88 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -27,6 +27,7 @@ desc = "A .357 bullet casing." caliber = ".357" projectile_type = /obj/item/projectile/bullet/pistol/strong + matter = list(DEFAULT_WALL_MATERIAL = 210) /* * .38 @@ -36,10 +37,10 @@ desc = "A .38 bullet casing." caliber = ".38" projectile_type = /obj/item/projectile/bullet/pistol + matter = list(DEFAULT_WALL_MATERIAL = 60) -/obj/item/ammo_casing/a38r +/obj/item/ammo_casing/a38/rubber desc = "A .38 rubber bullet casing." - caliber = ".38" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/rubber @@ -58,12 +59,13 @@ desc = "A .44 bullet casing." caliber = ".44" projectile_type = /obj/item/projectile/bullet/pistol/strong + matter = list(DEFAULT_WALL_MATERIAL = 210) -/obj/item/ammo_casing/a44r +/obj/item/ammo_casing/a44/rubber icon_state = "r-casing" desc = "A .44 rubber bullet casing." - caliber = ".44" projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong + matter = list(DEFAULT_WALL_MATERIAL = 60) /* * .75 (aka Gyrojet Rockets, aka admin abuse) @@ -73,6 +75,7 @@ desc = "A .75 gyrojet rocket sheathe." caliber = ".75" projectile_type = /obj/item/projectile/bullet/gyro + matter = list(DEFAULT_WALL_MATERIAL = 4000) /* * 9mm @@ -82,26 +85,25 @@ desc = "A 9mm bullet casing." caliber = "9mm" projectile_type = /obj/item/projectile/bullet/pistol + matter = list(DEFAULT_WALL_MATERIAL = 60) /obj/item/ammo_casing/a9mm/ap desc = "A 9mm armor-piercing bullet casing." projectile_type = /obj/item/projectile/bullet/pistol/ap + matter = list(DEFAULT_WALL_MATERIAL = 80) -/obj/item/ammo_casing/a9mmf +/obj/item/ammo_casing/a9mm/flash desc = "A 9mm flash shell casing." - caliber = "9mm" icon_state = "r-casing" projectile_type = /obj/item/projectile/energy/flash -/obj/item/ammo_casing/a9mmr +/obj/item/ammo_casing/a9mm/rubber desc = "A 9mm rubber bullet casing." - caliber = "9mm" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/rubber -/obj/item/ammo_casing/a9mmp +/obj/item/ammo_casing/a9mm/practice desc = "A 9mm practice bullet casing." - caliber = "9mm" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/practice @@ -113,30 +115,30 @@ desc = "A .45 bullet casing." caliber = ".45" projectile_type = /obj/item/projectile/bullet/pistol/medium + matter = list(DEFAULT_WALL_MATERIAL = 75) -/obj/item/ammo_casing/a45ap +/obj/item/ammo_casing/a45/ap desc = "A .45 Armor-Piercing bullet casing." - caliber = ".45" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/medium/ap -/obj/item/ammo_casing/a45p +/obj/item/ammo_casing/a45/practice desc = "A .45 practice bullet casing." - caliber = ".45" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/practice + matter = list(DEFAULT_WALL_MATERIAL = 60) -/obj/item/ammo_casing/a45r +/obj/item/ammo_casing/a45/rubber desc = "A .45 rubber bullet casing." - caliber = ".45" icon_state = "r-casing" projectile_type = /obj/item/projectile/bullet/pistol/rubber + matter = list(DEFAULT_WALL_MATERIAL = 60) -/obj/item/ammo_casing/a45f +/obj/item/ammo_casing/a45/flash desc = "A .45 flash shell casing." - caliber = ".45" icon_state = "r-casing" projectile_type = /obj/item/projectile/energy/flash + matter = list(DEFAULT_WALL_MATERIAL = 60) /obj/item/ammo_casing/a45/emp name = ".45 haywire round" @@ -149,7 +151,6 @@ desc = "A .45 hollow-point bullet casing." projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow - /* * 10mm */ @@ -158,6 +159,7 @@ desc = "A 10mm bullet casing." caliber = "10mm" projectile_type = /obj/item/projectile/bullet/pistol/medium + matter = list(DEFAULT_WALL_MATERIAL = 75) /obj/item/ammo_casing/a10mm/emp name = "10mm haywire round" @@ -183,7 +185,6 @@ desc = "A 12 gauge shell." icon_state = "gshell" projectile_type = /obj/item/projectile/bullet/pellet/shotgun - matter = list(DEFAULT_WALL_MATERIAL = 360) /obj/item/ammo_casing/a12g/blank name = "shotgun shell" @@ -197,7 +198,7 @@ desc = "A practice shell." icon_state = "pshell" projectile_type = /obj/item/projectile/bullet/shotgun/practice - matter = list("metal" = 90) + matter = list(DEFAULT_WALL_MATERIAL = 90) /obj/item/ammo_casing/a12g/beanbag name = "beanbag shell" @@ -244,16 +245,18 @@ caliber = "7.62mm" icon_state = "rifle-casing" projectile_type = /obj/item/projectile/bullet/rifle/a762 + matter = list(DEFAULT_WALL_MATERIAL = 200) /obj/item/ammo_casing/a762/ap desc = "A 7.62mm armor-piercing bullet casing." projectile_type = /obj/item/projectile/bullet/rifle/a762/ap + matter = list(DEFAULT_WALL_MATERIAL = 300) -/obj/item/ammo_casing/a762p +/obj/item/ammo_casing/a762/practice desc = "A 7.62mm practice bullet casing." - caliber = "7.62mm" icon_state = "rifle-casing" // Need to make an icon for these projectile_type = /obj/item/projectile/bullet/rifle/practice + matter = list(DEFAULT_WALL_MATERIAL = 90) /obj/item/ammo_casing/a762/blank desc = "A blank 7.62mm bullet casing." @@ -288,16 +291,18 @@ caliber = "5.45mm" icon_state = "rifle-casing" projectile_type = /obj/item/projectile/bullet/rifle/a545 + matter = list(DEFAULT_WALL_MATERIAL = 180) /obj/item/ammo_casing/a545/ap desc = "A 5.45mm armor-piercing bullet casing." projectile_type = /obj/item/projectile/bullet/rifle/a545/ap + matter = list(DEFAULT_WALL_MATERIAL = 270) -/obj/item/ammo_casing/a545p +/obj/item/ammo_casing/a545/practice desc = "A 5.45mm practice bullet casing." - caliber = "5.45mm" icon_state = "rifle-casing" // Need to make an icon for these projectile_type = /obj/item/projectile/bullet/rifle/practice + matter = list(DEFAULT_WALL_MATERIAL = 90) /obj/item/ammo_casing/a545/blank desc = "A blank 5.45mm bullet casing." @@ -322,6 +327,7 @@ icon_state = "rocketshell" projectile_type = /obj/item/missile caliber = "rocket" + matter = list(DEFAULT_WALL_MATERIAL = 10000) /obj/item/ammo_casing/cap name = "cap" @@ -330,6 +336,7 @@ icon_state = "r-casing" color = "#FF0000" projectile_type = /obj/item/projectile/bullet/pistol/cap + matter = list(DEFAULT_WALL_MATERIAL = 85) /obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else. icon_state = "s-casing-spent" diff --git a/code/modules/projectiles/ammunition/smartmag.dm b/code/modules/projectiles/ammunition/smartmag.dm new file mode 100644 index 0000000000..4b42f18251 --- /dev/null +++ b/code/modules/projectiles/ammunition/smartmag.dm @@ -0,0 +1,226 @@ +///////// Smart Mags ///////// + +/obj/item/ammo_magazine/smart + name = "smart magazine" + icon_state = "smartmag-empty" + desc = "A Hephaistos Industries brand Smart Magazine. It uses advanced matter manipulation technology to create bullets from energy. Simply present your loaded gun or magazine to the Smart Magazine." + multiple_sprites = 1 + max_ammo = 5 + mag_type = MAGAZINE + + caliber = null //Set later + ammo_type = null //Set later + initial_ammo = 0 //Ensure no problems with no ammo_type or caliber set + + can_remove_ammo = FALSE // Interferes with batteries + + var/production_time = 6 SECONDS // Delay in between bullets forming + var/last_production_time = 0 // Used in determining if we should make a new bullet + var/production_cost = null // Set when an ammo type is scanned in + var/production_modifier = 2 // Multiplier on the ammo_casing's matter cost + var/production_delay = 75 // If we're in a gun, how long since it last shot do we need to wait before making bullets? + + var/obj/item/weapon/gun/holding_gun = null // What gun are we in, if any? + + var/obj/item/weapon/cell/device/attached_cell = null // What cell are we using, if any? + + var/emagged = 0 // If you emag the smart mag, you can get the bullets out by clicking it + +/obj/item/ammo_magazine/smart/New() + processing_objects |= src + ..() + +/obj/item/ammo_magazine/smart/Destroy() + processing_objects -= src + ..() + +/obj/item/ammo_magazine/smart/process() + if(!holding_gun) // Yes, this is awful, sorry. Don't know a better way to figure out if we've been moved into or out of a gun. + if(istype(src.loc, /obj/item/weapon/gun)) + holding_gun = src.loc + + if(caliber && ammo_type && attached_cell) + if(stored_ammo.len == max_ammo) + last_production_time = world.time // Otherwise the max_ammo var is basically always off by 1 + return + if(holding_gun && world.time < holding_gun.last_shot + production_delay) // Same as recharging energy weapons. + return + if(world.time > last_production_time + production_time) + last_production_time = world.time + produce() + +/obj/item/ammo_magazine/smart/examine(mob/user) + ..() + + if(attached_cell) + to_chat(user, "\The [src] is loaded with a [attached_cell.name]. It is [round(attached_cell.percent())]% charged.") + else + to_chat(user, "\The [src] does not appear to have a power source installed.") + +/obj/item/ammo_magazine/smart/update_icon() + if(attached_cell) + icon_state = "smartmag-filled" + else + icon_state = "smartmag-empty" + +// Emagging lets you remove bullets from your bullet-making magazine +/obj/item/ammo_magazine/smart/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + to_chat(user, "You overload \the [src]'s security measures causing widespread destabilisation. It is likely you could empty \the [src] now.") + emagged = TRUE + can_remove_ammo = TRUE + return TRUE + return FALSE + +/obj/item/ammo_magazine/smart/attackby(var/obj/item/I as obj, mob/user) + if(istype(I, /obj/item/weapon/cell/device)) + if(attached_cell) + to_chat(user, "\The [src] already has a [attached_cell.name] attached.") + return + else + to_chat(user, "You begin inserting \the [I] into \the [src].") + if(do_after(user, 25)) + user.drop_item() + I.forceMove(src) + attached_cell = I + user.visible_message("[user] installs a cell in \the [src].", "You install \the [I] into \the [src].") + update_icon() + return + + else if(I.is_screwdriver()) + if(attached_cell) + to_chat(user, "You begin removing \the [attached_cell] from \the [src].") + if(do_after(user, 10)) // Faster than doing it by hand + attached_cell.update_icon() + attached_cell.forceMove(get_turf(src.loc)) + attached_cell = null + user.visible_message("[user] removes a cell from \the [src].", "You remove \the [attached_cell] from \the [src].") + update_icon() + return + + else if(istype(I, /obj/item/ammo_magazine) || istype(I, /obj/item/ammo_casing)) + scan_ammo(I, user) + + ..() + +/obj/item/ammo_magazine/smart/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(src.loc == user) + scan_ammo(target, user) + ..() + +// You can remove the power cell from the magazine by hand, but it's way slower than using a screwdriver +/obj/item/ammo_magazine/smart/attack_hand(mob/user) + if(user.get_inactive_hand() == src) + if(attached_cell) + to_chat(user, "You struggle to remove \the [attached_cell] from \the [src].") + if(do_after(user, 40)) + attached_cell.update_icon() + user.put_in_hands(attached_cell) + attached_cell = null + user.visible_message("[user] removes a cell from \the [src].", "You remove \the [attached_cell] from \the [src].") + update_icon() + return + ..() + +// Classic emp_act, just drains the battery +/obj/item/ammo_magazine/smart/emp_act(severity) + ..() + if(attached_cell) + attached_cell.emp_act(severity) + +// Finds the cell for the magazine, used by rechargers +/obj/item/ammo_magazine/smart/get_cell() + return attached_cell + +// Removes energy from the attached cell when creating new bullets +/obj/item/ammo_magazine/smart/proc/chargereduction() + return attached_cell && attached_cell.checked_use(production_cost) + +// Sets how much energy is drained to make each bullet +/obj/item/ammo_magazine/smart/proc/set_production_cost(var/obj/item/ammo_casing/A) + var/list/matters = ammo_repository.get_materials_from_object(A) + var/tempcost + for(var/key in matters) + var/value = matters[key] + tempcost += value * production_modifier + production_cost = tempcost + +// Scans a magazine or ammo casing and tells the smart mag to start making those, if it can +/obj/item/ammo_magazine/smart/proc/scan_ammo(atom/target, mob/user) + + var/new_caliber = caliber // Tracks what our new caliber will be + var/new_ammo_type = ammo_type // Tracks what our new ammo_type will be + + if(istype(target, /obj/item/ammo_magazine)) + var/obj/item/ammo_magazine/M = target + if(!new_caliber) + new_caliber = M.caliber // If caliber isn't set, set it now + + if(new_caliber && new_caliber != M.caliber) // If we still don't have a caliber, or if our caliber doesn't match the thing we're scanning, give up + return + else + new_ammo_type = M.ammo_type + + if(istype(target, /obj/item/ammo_casing)) + var/obj/item/ammo_casing/C = target + + if(!new_caliber) + new_caliber = C.caliber // If caliber isn't set, set it now + + if(new_caliber && new_caliber != C.caliber) // If we still don't have a caliber, or if our caliber doesn't match the thing we're scanning, give up + return + else + new_ammo_type = C.type + + var/change = FALSE // If we've changed caliber or ammo_type, display the built message. + var/msg = "You scan \the [target] with \the [src], copying \the [target]'s " + if(new_caliber != caliber) // This should never happen without the ammo_type switching too + change = TRUE + msg += "caliber and " + if(new_ammo_type != ammo_type) + change = TRUE + msg += "ammunition type." + + if(change) + to_chat(user, "[msg]") + caliber = new_caliber + ammo_type = new_ammo_type + set_production_cost(ammo_type) // Update our cost + + return + +// Actually makes the bullets +/obj/item/ammo_magazine/smart/proc/produce() + if(chargereduction()) + var/obj/item/ammo_casing/W = new ammo_type(src) + stored_ammo.Insert(1, W) //add to the head of the list + return 1 + return 0 + + +// This verb clears out the smart mag's copied data, but only if it's empty +/obj/item/ammo_magazine/smart/verb/clear_ammo_data() + set name = "Clear Ammo Data" + set category = "Object" + set src in usr + + if(!istype(src.loc, /mob/living)) // Needs to be in your hands to reset + return + + var/mob/living/carbon/human/H = usr + if(!istype(H)) + return + if(H.stat) + return + + if(LAZYLEN(stored_ammo)) + to_chat(usr, "You can't reset \the [src] unless it's empty!") + return + + to_chat(usr, "You clear \the [src]'s data buffers.") + + caliber = null + ammo_type = null + production_cost = null + + return \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2f28086e45..40dbaf0650 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -181,11 +181,11 @@ if(dna_lock && attached_lock.stored_dna) if(!authorized_user(user)) if(attached_lock.safety_level == 0) - M << "\The [src] buzzes in dissapoint and displays an invalid DNA symbol." + to_chat(M, "\The [src] buzzes in dissapoint and displays an invalid DNA symbol.") return 0 if(!attached_lock.exploding) if(attached_lock.safety_level == 1) - M << "\The [src] hisses in dissapointment." + to_chat(M, "\The [src] hisses in dissapointment.") visible_message("\The [src] announces, \"Self-destruct occurring in ten seconds.\"", "\The [src] announces, \"Self-destruct occurring in ten seconds.\"") spawn(100) explosion(src, 0, 0, 3, 4) @@ -194,7 +194,7 @@ qdel(src) return 0 if(HULK in M.mutations) - M << "Your fingers are much too large for the trigger guard!" + to_chat(M, "Your fingers are much too large for the trigger guard!") return 0 if((CLUMSY in M.mutations) && prob(40)) //Clumsy handling var/obj/P = consume_next_projectile() @@ -227,7 +227,7 @@ return if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on - user << "You refrain from firing your [src] as your intent is set to help." + to_chat(user, "You refrain from firing your [src] as your intent is set to help.") return else @@ -267,9 +267,9 @@ /obj/item/weapon/gun/attackby(var/obj/item/A as obj, mob/user as mob) if(istype(A, /obj/item/dnalockingchip)) if(dna_lock) - user << "\The [src] already has a [attached_lock]." + to_chat(user, "\The [src] already has a [attached_lock].") return - user << "You insert \the [A] into \the [src]." + to_chat(user, "You insert \the [A] into \the [src].") user.drop_item() A.loc = src attached_lock = A @@ -279,12 +279,12 @@ verbs += /obj/item/weapon/gun/verb/allow_dna return - if(istype(A, /obj/item/weapon/screwdriver)) + if(A.is_screwdriver()) if(dna_lock && attached_lock && !attached_lock.controller_lock) - user << "You begin removing \the [attached_lock] from \the [src]." + to_chat(user, "You begin removing \the [attached_lock] from \the [src].") playsound(src, A.usesound, 50, 1) if(do_after(user, 25 * A.toolspeed)) - user << "You remove \the [attached_lock] from \the [src]." + to_chat(user, "You remove \the [attached_lock] from \the [src].") user.put_in_hands(attached_lock) dna_lock = 0 attached_lock = null @@ -292,12 +292,12 @@ verbs -= /obj/item/weapon/gun/verb/give_dna verbs -= /obj/item/weapon/gun/verb/allow_dna else - user << "\The [src] is not accepting modifications at this time." + to_chat(user, "\The [src] is not accepting modifications at this time.") ..() /obj/item/weapon/gun/emag_act(var/remaining_charges, var/mob/user) if(dna_lock && attached_lock.controller_lock) - user << "You short circuit the internal locking mechanisms of \the [src]!" + to_chat(user, "You short circuit the internal locking mechanisms of \the [src]!") attached_lock.controller_dna = null attached_lock.controller_lock = 0 attached_lock.stored_dna = list() @@ -348,7 +348,7 @@ if(world.time < next_fire_time) if (world.time % 3) //to prevent spam - user << "[src] is not ready to fire again!" + to_chat(user, "[src] is not ready to fire again!") return var/shoot_time = (burst - 1)* burst_delay @@ -407,9 +407,11 @@ last_shot = world.time -/* // Commented out for quality control and testing. +/* + // Commented out for quality control and testing. shooting = 0 */ + // We do this down here, so we don't get the message if we fire an empty gun. if(user.item_is_in_hands(src) && user.hands_are_full()) if(one_handed_penalty >= 20) @@ -514,8 +516,6 @@ if(muzzle_flash) set_light(0) - - //obtains the next projectile to fire /obj/item/weapon/gun/proc/consume_next_projectile() return null @@ -587,7 +587,6 @@ shake_camera(user, recoil+1, recoil) update_icon() - /obj/item/weapon/gun/proc/process_point_blank(obj/projectile, mob/user, atom/target) var/obj/item/projectile/P = projectile if(!istype(P)) @@ -626,13 +625,7 @@ P.accuracy = accuracy + acc_mod P.dispersion = disp_mod - // Certain statuses make it harder to aim, blindness especially. Same chances as melee, however guns accuracy uses multiples of 15. - if(user.eye_blind) - P.accuracy -= 75 - if(user.eye_blurry) - P.accuracy -= 30 - if(user.confused) - P.accuracy -= 45 + P.accuracy -= user.get_accuracy_penalty() //accuracy bonus from aiming if (aim_targets && (target in aim_targets)) @@ -676,7 +669,6 @@ return launched - /obj/item/weapon/gun/proc/play_fire_sound(var/mob/user, var/obj/item/projectile/P) var/shot_sound = (istype(P) && P.fire_sound)? P.fire_sound : fire_sound if(silenced) @@ -717,7 +709,7 @@ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1) user.death() else - user << "Ow..." + to_chat(user, "Ow...") user.apply_effect(110,AGONY,0) qdel(in_chamber) mouthshoot = 0 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm index 8d0a0bd6d7..f672e1b021 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm @@ -30,7 +30,7 @@ to_chat(user, "There is a [M.name] mod installed, using [M.cost]% capacity.") /obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) - if(istype(A, /obj/item/weapon/crowbar)) + if(istype(A, /obj/item/weapon/tool/crowbar)) if(modkits.len) to_chat(user, "You pry the modifications out.") playsound(loc, A.usesound, 100, 1) @@ -109,11 +109,11 @@ // /obj/item/projectile/kinetic/pod // kill_count = 4 -// +// // /obj/item/projectile/kinetic/pod/regular // damage = 50 // pressure_decrease = 0.5 -// +// // /obj/item/projectile/kinetic/pod/enhanced // turf_aoe = TRUE // mob_aoe = TRUE diff --git a/code/modules/projectiles/guns/energy/particle.dm b/code/modules/projectiles/guns/energy/particle.dm index 51efe58b10..c586d19617 100644 --- a/code/modules/projectiles/guns/energy/particle.dm +++ b/code/modules/projectiles/guns/energy/particle.dm @@ -143,7 +143,7 @@ safetycatch = 1 return - if(istype(A, /obj/item/weapon/screwdriver)) + if(istype(A, /obj/item/weapon/tool/screwdriver)) if(safetycatch && attached_safety) user << "You begin removing \the [attached_safety] from \the [src]." if(do_after(user, 25)) diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm index 8918b7d893..a8458b1676 100644 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ b/code/modules/projectiles/guns/launcher/crossbow.dm @@ -162,7 +162,7 @@ else user << "[src] already has a cell installed." - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(cell) var/obj/item/C = cell C.loc = get_turf(user) @@ -227,7 +227,7 @@ else user << "You need at least three rods to complete this task." return - else if(istype(W,/obj/item/weapon/weldingtool)) + else if(istype(W, /obj/item/weapon/weldingtool)) if(buildstate == 1) var/obj/item/weapon/weldingtool/T = W if(T.remove_fuel(0,user)) @@ -237,7 +237,7 @@ buildstate++ 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(buildstate == 2) if(C.use(5)) @@ -265,7 +265,7 @@ else user << "You need at least three plastic sheets to complete this task." return - else if(istype(W,/obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) if(buildstate == 5) user << "You secure the crossbow's various parts." playsound(src, W.usesound, 50, 1) diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index a34db52887..298098698e 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -31,9 +31,9 @@ /obj/item/weapon/gun/magnetic/Destroy() processing_objects.Remove(src) - qdel_null(cell) - qdel_null(loaded) - qdel_null(capacitor) + QDEL_NULL(cell) + QDEL_NULL(loaded) + QDEL_NULL(capacitor) . = ..() /obj/item/weapon/gun/magnetic/get_cell() @@ -105,7 +105,7 @@ update_icon() return - if(isscrewdriver(thing)) + if(thing.is_screwdriver()) if(!capacitor) to_chat(user, "\The [src] has no capacitor installed.") return diff --git a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm index 0c3647458b..e8d38169fd 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm @@ -66,7 +66,7 @@ increment_construction_stage() return - if(isscrewdriver(thing) && construction_stage >= 9) + if(thing.is_screwdriver() && construction_stage >= 9) user.visible_message("\The [user] secures \the [src] and finishes it off.") playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/item/weapon/gun/magnetic/coilgun = new(loc) diff --git a/code/modules/projectiles/guns/modular_guns.dm b/code/modules/projectiles/guns/modular_guns.dm index 8f81e971c4..64b33347cd 100644 --- a/code/modules/projectiles/guns/modular_guns.dm +++ b/code/modules/projectiles/guns/modular_guns.dm @@ -50,12 +50,12 @@ FireModeModify() /obj/item/weapon/gun/energy/modular/attackby(obj/item/O, mob/user) - if(istype(O, /obj/item/weapon/screwdriver)) + if(O.is_screwdriver()) to_chat(user, "You [assembled ? "disassemble" : "assemble"] the gun.") assembled = !assembled playsound(src, O.usesound, 50, 1) return - if(istype(O, /obj/item/weapon/crowbar)) + if(O.is_crowbar()) if(assembled == 1) to_chat(user, "Disassemble the [src] first!") return @@ -130,11 +130,11 @@ /obj/item/weapon/gun/energy/modular/load_ammo(var/obj/item/C, mob/user) if(istype(C, cell_type)) if(self_recharge || battery_lock) - user << "[src] does not have a battery port." + to_chat(user, "[src] does not have a battery port.") return var/obj/item/weapon/cell/P = C if(power_supply) - user << "[src] already has a power cell." + to_chat(user, "[src] already has a power cell.") else user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") if(do_after(user, 10)) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index be37c824bb..6539ba7c4a 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -41,6 +41,7 @@ loaded += new ammo_type(src) if(ispath(magazine_type) && (load_method & MAGAZINE)) ammo_magazine = new magazine_type(src) + allowed_magazines += /obj/item/ammo_magazine/smart update_icon() /obj/item/weapon/gun/projectile/consume_next_projectile() @@ -50,7 +51,7 @@ if(handle_casings != HOLD_CASINGS) loaded -= chambered else if(ammo_magazine && ammo_magazine.stored_ammo.len) - chambered = ammo_magazine.stored_ammo[1] + chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] if(handle_casings != HOLD_CASINGS) ammo_magazine.stored_ammo -= chambered diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm index 45e5f1ece5..5ebbb4e951 100644 --- a/code/modules/projectiles/guns/projectile/boltaction.dm +++ b/code/modules/projectiles/guns/projectile/boltaction.dm @@ -15,7 +15,7 @@ /obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds." - ammo_type = /obj/item/ammo_casing/a762p + ammo_type = /obj/item/ammo_casing/a762/practice /obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial name = "ceremonial bolt-action rifle" diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index a232956684..c7518c5aa6 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -81,6 +81,7 @@ desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Found pretty much everywhere humans are. Uses .45 rounds." icon_state = "secguncomp" magazine_type = /obj/item/ammo_magazine/m45/rubber + allowed_magazines = list(/obj/item/ammo_magazine/m45) projectile_type = /obj/item/projectile/bullet/pistol/medium caliber = ".45" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) @@ -266,8 +267,8 @@ var/global/list/ammo_types = list( /obj/item/ammo_casing/a357 = ".357", - /obj/item/ammo_casing/a9mmf = "9mm", - /obj/item/ammo_casing/a45f = ".45", + /obj/item/ammo_casing/a9mm = "9mm", + /obj/item/ammo_casing/a45 = ".45", /obj/item/ammo_casing/a10mm = "10mm", /obj/item/ammo_casing/a12g = "12g", /obj/item/ammo_casing/a12g = "12g", diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 481530856f..2d25265ea5 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -74,7 +74,7 @@ caliber = ".45" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) fire_sound = 'sound/weapons/gunshot_heavy.ogg' - ammo_type = /obj/item/ammo_casing/a45r + ammo_type = /obj/item/ammo_casing/a45/rubber max_shells = 7 diff --git a/code/modules/projectiles/guns/vox.dm b/code/modules/projectiles/guns/vox.dm index 631d255f77..ccbfe300ec 100644 --- a/code/modules/projectiles/guns/vox.dm +++ b/code/modules/projectiles/guns/vox.dm @@ -9,8 +9,8 @@ var/last_regen = 0 var/spike_gen_time = 150 - var/max_spikes = 3 - var/spikes = 3 + var/max_spikes = 5 + var/spikes = 5 release_force = 30 icon = 'icons/obj/gun.dmi' icon_state = "spikethrower3" @@ -35,7 +35,7 @@ /obj/item/weapon/gun/launcher/spikethrower/examine(mob/user) ..(user) - user << "It has [spikes] spike\s remaining." + to_chat(user, "It has [spikes] spike\s remaining.") /obj/item/weapon/gun/launcher/spikethrower/update_icon() icon_state = "spikethrower[spikes]" @@ -65,7 +65,7 @@ firemodes = list( list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300), - list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600), + list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 400), list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300), ) @@ -112,7 +112,7 @@ embed_chance = 0 /* - * Vox Darkmatter Cannon + * Vox Sonic Cannon */ /obj/item/weapon/gun/energy/sonic name = "soundcannon" @@ -122,7 +122,7 @@ w_class = ITEMSIZE_HUGE cell_type = /obj/item/weapon/cell/device/weapon/recharge battery_lock = 1 - charge_cost = 600 + charge_cost = 400 projectile_type=/obj/item/projectile/sonic/weak diff --git a/code/modules/projectiles/projectile/arc.dm b/code/modules/projectiles/projectile/arc.dm index 6e434b1e99..5606cbe9d5 100644 --- a/code/modules/projectiles/projectile/arc.dm +++ b/code/modules/projectiles/projectile/arc.dm @@ -20,7 +20,7 @@ return ..() /obj/item/projectile/arc/Destroy() - qdel_null(shadow) + QDEL_NULL(shadow) return ..() /obj/item/projectile/arc/Bump(atom/A, forced=0) @@ -110,6 +110,11 @@ /obj/item/projectile/arc/fragmentation/on_impact(turf/T) fragmentate(T, fragment_amount, spread_range, fragment_types) +/obj/item/projectile/arc/fragmentation/mortar + icon_state = "mortar" + fragment_amount = 10 + spread_range = 3 + // EMP arc shot /obj/item/projectile/arc/emp_blast name = "emp blast" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 0cd8e69013..ee2ccc437c 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -58,6 +58,16 @@ tracer_type = /obj/effect/projectile/laser_heavy/tracer impact_type = /obj/effect/projectile/laser_heavy/impact +/obj/item/projectile/beam/heavylaser/fakeemitter + name = "emitter beam" + icon_state = "emitter" + fire_sound = 'sound/weapons/emitter.ogg' + light_color = "#00CC33" + + muzzle_type = /obj/effect/projectile/emitter/muzzle + tracer_type = /obj/effect/projectile/emitter/tracer + impact_type = /obj/effect/projectile/emitter/impact + /obj/item/projectile/beam/heavylaser/cannon damage = 80 armor_penetration = 50 diff --git a/code/modules/projectiles/projectile/blob.dm b/code/modules/projectiles/projectile/blob.dm new file mode 100644 index 0000000000..926c78a0a0 --- /dev/null +++ b/code/modules/projectiles/projectile/blob.dm @@ -0,0 +1,63 @@ +/obj/item/projectile/energy/blob //Not super strong. + name = "spore" + icon_state = "declone" + damage = 3 + armor_penetration = 40 + damage_type = BRUTE + check_armour = "melee" + pass_flags = PASSTABLE | PASSBLOB + fire_sound = 'sound/effects/slime_squish.ogg' + var/splatter = FALSE // Will this make a cloud of reagents? + var/splatter_volume = 5 // The volume of its chemical container, for said cloud of reagents. + var/list/my_chems = list("mold") + +/obj/item/projectile/energy/blob/splattering + splatter = TRUE + +/obj/item/projectile/energy/blob/New() + if(splatter) + create_reagents(splatter_volume) + ready_chemicals() + ..() + +/obj/item/projectile/energy/blob/Destroy() + qdel(reagents) + reagents = null + ..() + +/obj/item/projectile/energy/blob/on_impact(var/atom/A) + var/turf/location = get_turf(src) + var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem + S.attach(location) + S.set_up(reagents, splatter_volume, 0, location) + playsound(location, 'sound/effects/slime_squish.ogg', 30, 1, -3) + spawn(0) + S.start() + ..() + +/obj/item/projectile/energy/blob/proc/ready_chemicals() + if(reagents) + var/reagent_vol = (round((splatter_volume / my_chems.len) * 100) / 100) //Cut it at the hundreds place, please. + for(var/reagent in my_chems) + reagents.add_reagent(reagent, reagent_vol) + +/obj/item/projectile/energy/blob/toxic + damage_type = TOX + check_armour = "bio" + my_chems = list("amatoxin") + +/obj/item/projectile/energy/blob/toxic/splattering + splatter = TRUE + +/obj/item/projectile/energy/blob/acid + damage_type = BURN + check_armour = "bio" + my_chems = list("sacid", "mold") + +/obj/item/projectile/energy/blob/acid/splattering + splatter = TRUE + +/obj/item/projectile/energy/blob/combustible + splatter = TRUE + flammability = 0.25 + my_chems = list("fuel", "mold") diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 36a93a89b0..e4b7241bb0 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -62,66 +62,6 @@ return 0 -//For projectiles that actually represent clouds of projectiles -/obj/item/projectile/bullet/pellet - name = "shrapnel" //'shrapnel' sounds more dangerous (i.e. cooler) than 'pellet' - damage = 20 - //icon_state = "bullet" //TODO: would be nice to have it's own icon state - var/pellets = 4 //number of pellets - var/range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer. - var/base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone - var/spread_step = 10 //higher means the pellets spread more across body parts with distance - -/obj/item/projectile/bullet/pellet/Bumped() - . = ..() - bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine. - -/obj/item/projectile/bullet/pellet/proc/get_pellets(var/distance) - var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance - return max(pellets - pellet_loss, 1) - -/obj/item/projectile/bullet/pellet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) - if (pellets < 0) return 1 - - var/total_pellets = get_pellets(distance) - var/spread = max(base_spread - (spread_step*distance), 0) - - //shrapnel explosions miss prone mobs with a chance that increases with distance - var/prone_chance = 0 - if(!base_spread) - prone_chance = max(spread_step*(distance - 2), 0) - - var/hits = 0 - for (var/i in 1 to total_pellets) - if(target_mob.lying && target_mob != original && prob(prone_chance)) - continue - - //pellet hits spread out across different zones, but 'aim at' the targeted zone with higher probability - //whether the pellet actually hits the def_zone or a different zone should still be determined by the parent using get_zone_with_miss_chance(). - var/old_zone = def_zone - def_zone = ran_zone(def_zone, spread) - if (..()) hits++ - def_zone = old_zone //restore the original zone the projectile was aimed at - - pellets -= hits //each hit reduces the number of pellets left - if (hits >= total_pellets || pellets <= 0) - return 1 - return 0 - -/obj/item/projectile/bullet/pellet/get_structure_damage() - var/distance = get_dist(loc, starting) - return ..() * get_pellets(distance) - -/obj/item/projectile/bullet/pellet/Move() - . = ..() - - //If this is a shrapnel explosion, allow mobs that are prone to get hit, too - if(. && !base_spread && isturf(loc)) - for(var/mob/living/M in loc) - if(M.lying || !M.CanPass(src, loc)) //Bump if lying or if we would normally Bump. - if(Bump(M)) //Bump will make sure we don't hit a mob multiple times - return - /* short-casing projectiles, like the kind used in pistols or SMGs */ /obj/item/projectile/bullet/pistol @@ -189,6 +129,11 @@ range_step = 1 spread_step = 10 +/obj/item/projectile/bullet/pellet/shotgun/flak + damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually. + range_step = 2 + spread_step = 30 + armor_penetration = 10 //EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used /obj/item/projectile/bullet/shotgun/ion diff --git a/code/modules/projectiles/projectile/pellets.dm b/code/modules/projectiles/projectile/pellets.dm new file mode 100644 index 0000000000..9b7ee244e3 --- /dev/null +++ b/code/modules/projectiles/projectile/pellets.dm @@ -0,0 +1,110 @@ + +//For projectiles that actually represent clouds of projectiles +/obj/item/projectile/bullet/pellet + name = "shrapnel" //'shrapnel' sounds more dangerous (i.e. cooler) than 'pellet' + damage = 20 + //icon_state = "bullet" //TODO: would be nice to have it's own icon state + var/pellets = 4 //number of pellets + var/range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer. + var/base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone + var/spread_step = 10 //higher means the pellets spread more across body parts with distance + +/obj/item/projectile/bullet/pellet/Bumped() + . = ..() + bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine. + +/obj/item/projectile/bullet/pellet/proc/get_pellets(var/distance) + var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance + return max(pellets - pellet_loss, 1) + +/obj/item/projectile/bullet/pellet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) + if (pellets < 0) return 1 + + var/total_pellets = get_pellets(distance) + var/spread = max(base_spread - (spread_step*distance), 0) + + //shrapnel explosions miss prone mobs with a chance that increases with distance + var/prone_chance = 0 + if(!base_spread) + prone_chance = max(spread_step*(distance - 2), 0) + + var/hits = 0 + for (var/i in 1 to total_pellets) + if(target_mob.lying && target_mob != original && prob(prone_chance)) + continue + + //pellet hits spread out across different zones, but 'aim at' the targeted zone with higher probability + //whether the pellet actually hits the def_zone or a different zone should still be determined by the parent using get_zone_with_miss_chance(). + var/old_zone = def_zone + def_zone = ran_zone(def_zone, spread) + if (..()) hits++ + def_zone = old_zone //restore the original zone the projectile was aimed at + + pellets -= hits //each hit reduces the number of pellets left + if (hits >= total_pellets || pellets <= 0) + return 1 + return 0 + +/obj/item/projectile/bullet/pellet/get_structure_damage() + var/distance = get_dist(loc, starting) + return ..() * get_pellets(distance) + +/obj/item/projectile/bullet/pellet/Move() + . = ..() + + //If this is a shrapnel explosion, allow mobs that are prone to get hit, too + if(. && !base_spread && isturf(loc)) + for(var/mob/living/M in loc) + if(M.lying || !M.CanPass(src, loc)) //Bump if lying or if we would normally Bump. + if(Bump(M)) //Bump will make sure we don't hit a mob multiple times + return + +//Explosive grenade projectile, borrowed from fragmentation grenade code. +/obj/item/projectile/bullet/pellet/fragment + damage = 10 + armor_penetration = 30 + range_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer. + + base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone + spread_step = 20 + + silenced = 1 //embedding messages are still produced so it's kind of weird when enabled. + no_attack_log = 1 + muzzle_type = null + +/obj/item/projectile/bullet/pellet/fragment/strong + damage = 15 + armor_penetration = 20 + +/obj/item/projectile/bullet/pellet/fragment/weak + damage = 4 + armor_penetration = 40 + +// Tank rupture fragments +/obj/item/projectile/bullet/pellet/fragment/tank + name = "metal fragment" + damage = 9 //Big chunks flying off. + range_step = 2 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. + + base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone + spread_step = 20 + + armor_penetration = 20 + + silenced = 1 + no_attack_log = 1 + muzzle_type = null + pellets = 3 + +/obj/item/projectile/bullet/pellet/fragment/tank/small + name = "small metal fragment" + damage = 6 + armor_penetration = 5 + pellets = 5 + +/obj/item/projectile/bullet/pellet/fragment/tank/big + name = "large metal fragment" + damage = 17 + armor_penetration = 10 + range_step = 5 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. + pellets = 1 \ No newline at end of file diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index 30b5f86027..f426fa5ebc 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -193,8 +193,8 @@ datum/supply_drop_loot/riot /obj/item/weapon/reagent_containers/food/snacks/tastybread, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake, - /obj/item/weapon/crowbar, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/device/flashlight, /obj/item/device/flashlight, /obj/item/clothing/suit/storage/hazardvest, diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index a80118099d..247a517a20 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -50,24 +50,24 @@ if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food)) if(src.beaker) - user << "\A [beaker] is already loaded into the machine." + to_chat(user, "\A [beaker] is already loaded into the machine.") return src.beaker = B user.drop_item() B.loc = src - user << "You add \the [B] to the machine!" + to_chat(user, "You add \the [B] to the machine!") icon_state = "mixer1" else if(istype(B, /obj/item/weapon/storage/pill_bottle)) if(src.loaded_pill_bottle) - user << "A \the [loaded_pill_bottle] s already loaded into the machine." + to_chat(user, "A \the [loaded_pill_bottle] s already loaded into the machine.") return src.loaded_pill_bottle = B user.drop_item() B.loc = src - user << "You add \the [loaded_pill_bottle] into the dispenser slot!" + to_chat(user, "You add \the [loaded_pill_bottle] into the dispenser slot!") else if(default_unfasten_wrench(user, B, 20)) return @@ -133,7 +133,7 @@ data["bottleSpritesAmount"] = list(1, 2, 3, 4) //how many bottle sprites there are. Sprites are taken from chemical.dmi and can be found in nano/images/pill.png - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "chem_master.tmpl", src.name, 575, 400) ui.set_initial_data(data) @@ -269,7 +269,7 @@ else if(href_list["bottle_sprite"]) bottlesprite = href_list["bottle_sprite"] - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/chem_master/attack_ai(mob/user as mob) return src.attack_hand(user) @@ -352,7 +352,7 @@ return 0 if(holdingitems && holdingitems.len >= limit) - usr << "The machine cannot hold anymore items." + to_chat(user, "The machine cannot hold anymore items.") return 1 if(!istype(O)) @@ -371,13 +371,13 @@ break if(failed) - user << "Nothing in the plant bag is usable." + to_chat(user, "Nothing in the plant bag is usable.") return 1 if(!O.contents.len) - user << "You empty \the [O] into \the [src]." + to_chat(user, "You empty \the [O] into \the [src].") else - user << "You fill \the [src] from \the [O]." + to_chat(user, "You fill \the [src] from \the [O].") src.updateUsrDialog() return 0 @@ -385,16 +385,16 @@ if(istype(O,/obj/item/weapon/gripper)) var/obj/item/weapon/gripper/B = O //B, for Borg. if(!B.wrapped) - user << "\The [B] is not holding anything." + to_chat(user, "\The [B] is not holding anything.") return 0 else var/B_held = B.wrapped - user << "You use \the [B] to load \the [src] with \the [B_held]." + to_chat(user, "You use \the [B] to load \the [src] with \the [B_held].") return 0 if(!sheet_reagents[O.type] && (!O.reagents || !O.reagents.total_volume)) - user << "\The [O] is not suitable for blending." + to_chat(user, "\The [O] is not suitable for blending.") return 1 user.remove_from_mob(O) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 1c37555325..f96d53aaac 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -98,20 +98,21 @@ strength_mod *= 2 // VOREStation Edit - M.adjustToxLoss(removed) M.add_chemical_effect(CE_ALCOHOL, 1) + var/effective_dose = dose * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster - if(dose * strength_mod >= strength) // Early warning + if(effective_dose >= strength) // Early warning M.make_dizzy(18) // It is decreased at the speed of 3 per tick - if(dose * strength_mod >= strength * 2) // Slurring + if(effective_dose >= strength * 2) // Slurring M.slurring = max(M.slurring, 90) - if(dose * strength_mod >= strength * 3) // Confusion - walking in random directions + if(effective_dose >= strength * 3) // Confusion - walking in random directions M.Confuse(60) - if(dose * strength_mod >= strength * 4) // Blurry vision + if(effective_dose >= strength * 4) // Blurry vision M.eye_blurry = max(M.eye_blurry, 30) - if(dose * strength_mod >= strength * 5) // Drowsyness - periodically falling asleep + if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep M.drowsyness = max(M.drowsyness, 60) - if(dose * strength_mod >= strength * 6) // Toxic dose + if(effective_dose >= strength * 6) // Toxic dose M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity*3) - if(dose * strength_mod >= strength * 7) // Pass out + if(effective_dose >= strength * 7) // Pass out M.paralysis = max(M.paralysis, 60) M.sleeping = max(M.sleeping, 90) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 7a3e00eab8..a7bcd87892 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -431,7 +431,7 @@ if(alien != IS_SLIME) return else if(eyes_covered) - to_chat(M, "Your [safe_thing] protect you from most of the pepperspray!") + to_chat(M, "Your [safe_thing] protects you from most of the pepperspray!") M.eye_blurry = max(M.eye_blurry, effective_strength * 3) M.Blind(effective_strength) M.Stun(5) @@ -510,10 +510,11 @@ var/adj_drowsy = 0 var/adj_sleepy = 0 var/adj_temp = 0 + var/water_based = TRUE /datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) var/strength_mod = 1 - if(alien == IS_SLIME) + if(alien == IS_SLIME && water_based) strength_mod = 3 M.adjustToxLoss(removed * strength_mod) // Probably not a good idea; not very deadly though return @@ -528,7 +529,7 @@ if(adj_temp < 0 && M.bodytemperature > 310) M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) /* VOREStation Removal - if(alien == IS_SLIME) + if(alien == IS_SLIME && water_based) M.adjustToxLoss(removed * 2) */ //VOREStation Removal End @@ -1495,6 +1496,73 @@ glass_name = "Love Potion" glass_desc = "Love me tender, love me sweet." +/datum/reagent/drink/oilslick + name = "Oil Slick" + id = "oilslick" + description = "A viscous, but sweet, ooze." + taste_description = "honey" + color = "#FDF5E6" // rgb(253,245,230) + water_based = FALSE + + glass_name = "Oil Slick" + glass_desc = "A concoction that should probably be in an engine, rather than your stomach." + glass_icon = DRINK_ICON_NOISY + +/datum/reagent/drink/nuclearwaste + name = "Nuclear Waste" + id = "nuclearwaste" + description = "A viscous, glowing slurry." + taste_description = "sour honey drops" + color = "#7FFF00" // rgb(127,255,0) + water_based = FALSE + + glass_name = "Nuclear Waste" + glass_desc = "Sadly, no super powers." + glass_icon = DRINK_ICON_NOISY + glass_special = list(DRINK_FIZZ) + +/datum/reagent/drink/nuclearwaste/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.bloodstr.add_reagent("radium", 0.3) + +/datum/reagent/drink/nuclearwaste/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.ingested.add_reagent("radium", 0.25) + +/datum/reagent/drink/sodaoil //Mixed with normal drinks to make a 'potable' version for Prometheans if mixed 1-1. Dilution is key. + name = "Soda Oil" + id = "sodaoil" + description = "A thick, bubbling soda." + taste_description = "chewy water" + color = "#F0FFF0" // rgb(245,255,250) + water_based = FALSE + + glass_name = "Soda Oil" + glass_desc = "A pitiful sludge that looks vaguely like a soda.. if you look at it a certain way." + glass_icon = DRINK_ICON_NOISY + glass_special = list(DRINK_FIZZ) + +/datum/reagent/drink/sodaoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(M.bloodstr) // If, for some reason, they are injected, dilute them as well. + for(var/datum/reagent/R in M.ingested.reagent_list) + if(istype(R, /datum/reagent/drink)) + var/datum/reagent/drink/D = R + if(D.water_based) + M.adjustToxLoss(removed * -3) + +/datum/reagent/drink/sodaoil/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(M.ingested) // Find how many drinks are causing tox, and negate them. + for(var/datum/reagent/R in M.ingested.reagent_list) + if(istype(R, /datum/reagent/drink)) + var/datum/reagent/drink/D = R + if(D.water_based) + M.adjustToxLoss(removed * -2) /* Alcohol */ @@ -2155,7 +2223,7 @@ color = "#FFD300" strength = 50 adj_temp = -20 - targ_temp = 270 + targ_temp = 280 glass_name = "iced beer" glass_desc = "A beer so frosty, the air around it freezes." @@ -2987,3 +3055,101 @@ glass_name = "Mint Julep" glass_desc = "Minty and refreshing, perfect for a hot day." + +/datum/reagent/ethanol/godsake + name = "Gods Sake" + id = "godsake" + description = "Anime's favorite drink." + taste_description = "the power of god and anime" + color = "#DDDDDD" + strength = 25 + + glass_name = "God's Sake" + glass_desc = "A glass of sake." + +/datum/reagent/ethanol/godka + name = "Godka" + id = "godka" + description = "Number one drink AND fueling choice for Russians multiverse-wide." + taste_description = "russian steel and a hint of grain" + color = "#0064C8" + strength = 50 + + glass_name = "Godka" + glass_desc = "The glass is barely able to contain the wodka. Xynta." + glass_special = list(DRINK_FIZZ) + +/datum/reagent/ethanol/godka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.apply_effect(max(M.radiation - 5 * removed, 0), IRRADIATE, check_protection = 0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species.has_organ[O_LIVER]) + var/obj/item/organ/L = H.internal_organs_by_name[O_LIVER] + if(!L) + return + var/adjust_liver = rand(-3, 2) + if(prob(L.damage)) + to_chat(M, "You feel woozy...") + L.damage = max(L.damage + (adjust_liver * removed), 0) + var/adjust_tox = rand(-4, 2) + M.adjustToxLoss(adjust_tox * removed) + +/datum/reagent/ethanol/holywine + name = "Angel Ichor" + id = "holywine" + description = "A premium alchoholic beverage made from distilled angel blood." + taste_description = "wings in a glass, and a hint of grape" + color = "#C4921E" + strength = 20 + + glass_name = "Angel Ichor" + glass_desc = "A very pious looking drink." + glass_icon = DRINK_ICON_NOISY + +/datum/reagent/ethanol/holy_mary + name = "Holy Mary" + id = "holymary" + description = "A strange yet pleasurable mixture made of vodka, angel's ichor and lime juice. Or at least you THINK the yellow stuff is angel's ichor." + taste_description = "grapes with a hint of lime" + color = "#DCAE12" + strength = 20 + + glass_name = "Holy Mary" + glass_desc = "Angel's Ichor, mixed with Vodka and a lil' bit of lime. Tastes like liquid ascension." + +/datum/reagent/ethanol/angelswrath + name = "Angels Wrath" + id = "angelswrath" + description = "This thing makes the hair on the back of your neck stand up." + taste_description = "sweet victory and sour iron" + taste_mult = 1.5 + color = "#F3C906" + strength = 30 + + glass_name = "Angels' Wrath" + glass_desc = "Just looking at this thing makes you sweat." + glass_icon = DRINK_ICON_NOISY + glass_special = list(DRINK_FIZZ) + +/datum/reagent/ethanol/angelskiss + name = "Angels Kiss" + id = "angelskiss" + description = "Miracle time!" + taste_description = "sweet forgiveness and bitter iron" + color = "#AD772B" + strength = 25 + + glass_name = "Angel's Kiss" + glass_desc = "Miracle time!" + +/datum/reagent/ethanol/ichor_mead + name = "Ichor Mead" + id = "ichor_mead" + description = "A trip to Valhalla." + taste_description = "valhalla" + color = "#955B37" + strength = 30 + + glass_name = "Ichor Mead" + glass_desc = "A trip to Valhalla." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index c992d0eae2..6b705f4f54 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -316,10 +316,9 @@ if(alien == IS_SLIME) chem_effective = 0.75 M.stuttering = min(50, max(0, M.stuttering + 5)) //If you can't feel yourself, and your main mode of speech is resonation, there's a problem. - M.add_chemical_effect(CE_SLOWDOWN, 1) M.add_chemical_effect(CE_PAINKILLER, 200 * chem_effective) + M.add_chemical_effect(CE_SLOWDOWN, 1) M.eye_blurry = min(M.eye_blurry + 10, 250 * chem_effective) - M.Confuse(5) /datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien) ..() @@ -816,6 +815,7 @@ reagent_state = LIQUID color = "#BF80BF" metabolism = 0.01 + ingest_met = 0.25 mrate_static = TRUE data = 0 @@ -838,6 +838,7 @@ reagent_state = LIQUID color = "#FF80FF" metabolism = 0.01 + ingest_met = 0.25 mrate_static = TRUE data = 0 @@ -860,6 +861,7 @@ reagent_state = LIQUID color = "#FF80BF" metabolism = 0.01 + ingest_met = 0.25 mrate_static = TRUE data = 0 @@ -886,6 +888,7 @@ reagent_state = LIQUID color = "#e6efe3" metabolism = 0.01 + ingest_met = 0.25 mrate_static = TRUE data = 0 diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index f05356c46b..b351dc290d 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -2210,6 +2210,84 @@ required_reagents = list("icecoffee" = 1, "whiskey" = 1, "mint" = 1) result_amount = 3 +/datum/chemical_reaction/drinks/godsake + name = "Gods Sake" + id = "godsake" + result = "godsake" + required_reagents = list("sake" = 2, "holywater" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/godka //Why you would put this in your body, I don't know. + name = "Godka" + id = "godka" + result = "godka" + required_reagents = list("vodka" = 1, "holywater" = 1, "ethanol" = 1, "carthatoline" = 1) + catalysts = list("enzyme" = 5, "holywater" = 5) + result_amount = 1 + +/datum/chemical_reaction/drinks/holywine + name = "Angel Ichor" + id = "holywine" + result = "holywine" + required_reagents = list("grapejuice" = 5, "gold" = 5) + catalysts = list("holywater" = 5) + result_amount = 10 + +/datum/chemical_reaction/drinks/holy_mary + name = "Holy Mary" + id = "holymary" + result = "holymary" + required_reagents = list("vodka" = 2, "holywine" = 3, "limejuice" = 1) + result_amount = 6 + +/datum/chemical_reaction/drinks/angelskiss + name = "Angels Kiss" + id = "angelskiss" + result = "angelskiss" + required_reagents = list("holywine" = 1, "kahlua" = 1, "rum" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/angelswrath + name = "Angels Wrath" + id = "angelswrath" + result = "angelswrath" + required_reagents = list("rum" = 3, "spacemountainwind" = 1, "holywine" = 1, "dr_gibb" = 1) + result_amount = 6 + +/datum/chemical_reaction/drinks/ichor_mead + name = "Ichor Mead" + id = "ichor_mead" + result = "ichor_mead" + required_reagents = list("holywine" = 1, "mead" = 1) + result_amount = 2 + +/datum/chemical_reaction/drinks/oilslick + name = "Oil Slick" + id = "oilslick" + result = "oilslick" + required_reagents = list("cornoil" = 2, "honey" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/nuclearwaste_radium + name = "Nuclear Waste" + id = "nuclearwasterad" + result = "nuclearwaste" + required_reagents = list("oilslick" = 1, "radium" = 1, "limejuice" = 1) + result_amount = 2 + +/datum/chemical_reaction/drinks/nuclearwaste_uranium + name = "Nuclear Waste" + id = "nuclearwasteuran" + result = "nuclearwaste" + required_reagents = list("oilslick" = 2, "uranium" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/sodaoil + name = "Soda Oil" + id = "sodaoil" + result = "sodaoil" + required_reagents = list("cornoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1) + result_amount = 6 //R-UST Port /datum/chemical_reaction/hyrdophoron diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm index 5ba448c14d..14f8fc9898 100644 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ b/code/modules/reagents/dispenser/dispenser2.dm @@ -26,47 +26,47 @@ /obj/machinery/chemical_dispenser/examine(mob/user) ..() - user << "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." + to_chat(user, "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more.") /obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user) if(!istype(C)) if(user) - user << "\The [C] will not fit in \the [src]!" + to_chat(user, "\The [C] will not fit in \the [src]!") return if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) if(user) - user << "\The [src] does not have any slots open for \the [C] to fit into!" + to_chat(user, "\The [src] does not have any slots open for \the [C] to fit into!") return if(!C.label) if(user) - user << "\The [C] does not have a label!" + to_chat(user, "\The [C] does not have a label!") return if(cartridges[C.label]) if(user) - user << "\The [src] already contains a cartridge with that label!" + to_chat(user, "\The [src] already contains a cartridge with that label!") return if(user) user.drop_from_inventory(C) - user << "You add \the [C] to \the [src]." + to_chat(user, "You add \the [C] to \the [src].") C.loc = src cartridges[C.label] = C cartridges = sortAssoc(cartridges) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/chemical_dispenser/proc/remove_cartridge(label) . = cartridges[label] cartridges -= label - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/chemical_dispenser/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) playsound(src, W.usesound, 50, 1) - user << "You begin to [anchored ? "un" : ""]fasten \the [src]." + to_chat(user, "You begin to [anchored ? "un" : ""]fasten \the [src].") if (do_after(user, 20 * W.toolspeed)) user.visible_message( "\The [user] [anchored ? "un" : ""]fastens \the [src].", @@ -74,40 +74,40 @@ "You hear a ratchet.") anchored = !anchored else - user << "You decide not to [anchored ? "un" : ""]fasten \the [src]." + to_chat(user, "You decide not to [anchored ? "un" : ""]fasten \the [src].") else if(istype(W, /obj/item/weapon/reagent_containers/chem_disp_cartridge)) add_cartridge(W, user) - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(W.is_screwdriver()) var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges if(!label) return var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label) if(C) - user << "You remove \the [C] from \the [src]." + to_chat(user, "You remove \the [C] from \the [src].") C.loc = loc playsound(src, W.usesound, 50, 1) else if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food)) if(container) - user << "There is already \a [container] on \the [src]!" + to_chat(user, "There is already \a [container] on \the [src]!") return var/obj/item/weapon/reagent_containers/RC = W if(!accept_drinking && istype(RC,/obj/item/weapon/reagent_containers/food)) - user << "This machine only accepts beakers!" + to_chat(user, "This machine only accepts beakers!") return if(!RC.is_open_container()) - user << "You don't see how \the [src] could dispense reagents into \the [RC]." + to_chat(user, "You don't see how \the [src] could dispense reagents into \the [RC].") return container = RC user.drop_from_inventory(RC) RC.loc = src - user << "You set \the [RC] on \the [src]." - nanomanager.update_uis(src) // update all UIs attached to src + to_chat(user, "You set \the [RC] on \the [src].") + GLOB.nanomanager.update_uis(src) // update all UIs attached to src else return ..() @@ -141,7 +141,7 @@ data["chemicals"] = chemicals // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "chem_disp.tmpl", ui_title, 390, 680) ui.set_initial_data(data) diff --git a/code/modules/reagents/dispenser/dispenser2_energy.dm b/code/modules/reagents/dispenser/dispenser2_energy.dm index 4465b0b769..f540811c11 100644 --- a/code/modules/reagents/dispenser/dispenser2_energy.dm +++ b/code/modules/reagents/dispenser/dispenser2_energy.dm @@ -25,7 +25,7 @@ C.reagents.add_reagent(id, to_restore) . = 1 if(.) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/chemical_dispenser dispense_reagents = list( diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm index e183da7f79..e6488d9d7e 100644 --- a/code/modules/reagents/dispenser/supply.dm +++ b/code/modules/reagents/dispenser/supply.dm @@ -1,4 +1,4 @@ -/datum/supply_packs/chemistry_dispenser +/datum/supply_pack/chemistry_dispenser name = "Reagent dispenser" contains = list( /obj/machinery/chemical_dispenser{anchored = 0} @@ -8,7 +8,7 @@ containername = "reagent dispenser crate" group = "Reagents" -/datum/supply_packs/beer_dispenser +/datum/supply_pack/beer_dispenser name = "Booze dispenser" contains = list( /obj/machinery/chemical_dispenser/bar_alc{anchored = 0} @@ -18,7 +18,7 @@ containername = "booze dispenser crate" group = "Reagents" -/datum/supply_packs/soda_dispenser +/datum/supply_pack/soda_dispenser name = "Soda dispenser" contains = list( /obj/machinery/chemical_dispenser/bar_soft{anchored = 0} @@ -28,7 +28,7 @@ containername = "soda dispenser crate" group = "Reagents" -/datum/supply_packs/reagents +/datum/supply_pack/reagents name = "Chemistry dispenser refill" contains = list( /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen, @@ -60,7 +60,7 @@ access = list(access_chemistry) group = "Reagents" -/datum/supply_packs/alcohol_reagents +/datum/supply_pack/alcohol_reagents name = "Bar alcoholic dispenser refill" contains = list( /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, @@ -83,7 +83,7 @@ access = list(access_bar) group = "Reagents" -/datum/supply_packs/softdrink_reagents +/datum/supply_pack/softdrink_reagents name = "Bar soft drink dispenser refill" contains = list( /obj/item/weapon/reagent_containers/chem_disp_cartridge/water, @@ -110,7 +110,7 @@ containername = "soft drinks crate" group = "Reagents" -/datum/supply_packs/coffee_reagents +/datum/supply_pack/coffee_reagents name = "Coffee machine dispenser refill" contains = list( /obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee, @@ -127,7 +127,7 @@ containername = "coffee drinks crate" group = "Reagents" -/datum/supply_packs/dispenser_cartridges +/datum/supply_pack/dispenser_cartridges name = "Empty dispenser cartridges" contains = list( /obj/item/weapon/reagent_containers/chem_disp_cartridge, @@ -147,7 +147,7 @@ group = "Reagents" #define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\ - datum/supply_packs/dispenser_cartridges{\ + datum/supply_pack/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ @@ -159,7 +159,7 @@ }\ } #define PACK(_tname, _type, _name, _cname, _cost)\ - datum/supply_packs/dispenser_cartridges{\ + datum/supply_pack/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ diff --git a/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm index 355407e9a3..52528235bb 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm @@ -201,6 +201,18 @@ Drinks Data /datum/reagent/drink/nothing glass_icon_state = "nothing" +/datum/reagent/drink/oilslick + glass_icon_state = "jar_oil" + glass_center_of_mass = list("x"=15, "y"=12) + +/datum/reagent/drink/nuclearwaste + glass_icon_state = "jar_rad" + glass_center_of_mass = list("x"=15, "y"=12) + +/datum/reagent/drink/sodaoil + glass_icon_state = "jar_water" + glass_center_of_mass = list("x"=15, "y"=12) + /datum/reagent/ethanol/absinthe glass_icon_state = "absintheglass" glass_center_of_mass = list("x"=16, "y"=5) @@ -242,7 +254,11 @@ Drinks Data glass_center_of_mass = list("x"=16, "y"=12) /datum/reagent/ethanol/sake - glass_icon_state = "ginvodkaglass" + glass_icon_state = "sakecup" + glass_center_of_mass = list("x"=16, "y"=12) + +/datum/reagent/ethanol/godsake + glass_icon_state = "sakeporcelain" glass_center_of_mass = list("x"=16, "y"=12) /datum/reagent/ethanol/tequila @@ -502,4 +518,27 @@ Drinks Data /datum/reagent/ethanol/specialwhiskey glass_icon_state = "whiskeyglass" - glass_center_of_mass = list("x"=16, "y"=12) \ No newline at end of file + glass_center_of_mass = list("x"=16, "y"=12) + +/datum/reagent/ethanol/godka + glass_icon_state = "godkabottle" + glass_center_of_mass = list("x"=17, "y"=15) + +/datum/reagent/ethanol/holywine + glass_icon_state = "holywineglass" + glass_center_of_mass = list("x"=15, "y"=7) + +/datum/reagent/ethanol/holy_mary + glass_icon_state = "holymaryglass" + +/datum/reagent/ethanol/angelswrath + glass_icon_state = "angelswrath" + glass_center_of_mass = list("x"=16, "y"=2) + +/datum/reagent/ethanol/angelskiss + glass_icon_state = "angelskiss" + glass_center_of_mass = list("x"=16, "y"=8) + +/datum/reagent/ethanol/ichor_mead + glass_icon_state = "ichor_meadglass" + glass_center_of_mass = list("x"=17, "y"=10) diff --git a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm index 7caa7f9f60..ed8406c6e6 100644 --- a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm +++ b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm @@ -123,7 +123,7 @@ var/global/ingredientLimit = 20 return new_name /obj/item/weapon/reagent_containers/food/snacks/customizable/Destroy() - qdel_null_list(ingredients) + QDEL_NULL_LIST(ingredients) return ..() /obj/item/weapon/reagent_containers/food/snacks/customizable/proc/drawTopping() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index c439daac29..737dbdcdad 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -252,7 +252,7 @@ flags = OPENCONTAINER unacidable = 0 -/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob) +/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/item/D, mob/user as mob) if(isprox(D)) user << "You add [D] to [src]." qdel(D) @@ -260,7 +260,7 @@ user.drop_from_inventory(src) qdel(src) return - else if(istype(D, /obj/item/weapon/wirecutters)) + else if(D.is_wirecutter()) to_chat(user, "You cut a big hole in \the [src] with \the [D]. It's kinda useless as a bucket now.") user.put_in_hands(new /obj/item/clothing/head/helmet/bucket) user.drop_from_inventory(src) diff --git a/code/modules/reagents/reagent_containers/syringes_vr.dm b/code/modules/reagents/reagent_containers/syringes_vr.dm index e940f23454..c1d4a4e686 100644 --- a/code/modules/reagents/reagent_containers/syringes_vr.dm +++ b/code/modules/reagents/reagent_containers/syringes_vr.dm @@ -13,7 +13,7 @@ update_icon() /obj/item/weapon/reagent_containers/syringe/Destroy() - qdel_null_list(viruses) + QDEL_NULL_LIST(viruses) LAZYCLEARLIST(targets) return ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 494659fb1e..d40fc51610 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -27,12 +27,12 @@ /obj/structure/reagent_dispensers/examine(mob/user) if(!..(user, 2)) return - user << "It contains:" + to_chat(user, "It contains:") if(reagents && reagents.reagent_list.len) for(var/datum/reagent/R in reagents.reagent_list) - user << "[R.volume] units of [R.name]" + to_chat(user, "[R.volume] units of [R.name]") else - user << "Nothing." + to_chat(user, "Nothing.") /obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" @@ -103,9 +103,9 @@ if(!..(user, 2)) return if (modded) - user << "Fuel faucet is wrenched open, leaking the fuel!" + to_chat(user, "Fuel faucet is wrenched open, leaking the fuel!") if(rig) - user << "There is some kind of device rigged to the tank." + to_chat(user, "There is some kind of device rigged to the tank.") /obj/structure/reagent_dispensers/fueltank/attack_hand() if (rig) @@ -118,7 +118,7 @@ /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) src.add_fingerprint(user) - if (istype(W,/obj/item/weapon/wrench)) + if (W.is_wrench()) user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ "You wrench [src]'s faucet [modded ? "closed" : "open"]") modded = modded ? 0 : 1 @@ -129,7 +129,7 @@ leak_fuel(amount_per_transfer_from_this) if (istype(W,/obj/item/device/assembly_holder)) if (rig) - user << "There is another device in the way." + to_chat(user, "There is another device in the way.") return ..() user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") if(do_after(user, 20)) @@ -236,15 +236,15 @@ /obj/structure/reagent_dispensers/water_cooler/examine(mob/user) ..() if(cupholder) - user << "There are [cups] cups in the cup dispenser." + to_chat(user, "There are [cups] cups in the cup dispenser.") /obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) src.add_fingerprint(user) if(bottle) playsound(loc, I.usesound, 50, 1) if(do_after(user, 20) && bottle) - user << "You unfasten the jug." + to_chat(user, "You unfasten the jug.") var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) for(var/datum/reagent/R in reagents.reagent_list) var/total_reagent = reagents.get_reagent_amount(R.id) @@ -259,15 +259,15 @@ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") if(do_after(user, 20 * I.toolspeed, src)) if(!src) return - user << "You [anchored? "un" : ""]secured \the [src]!" + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") anchored = !anchored playsound(loc, I.usesound, 50, 1) return - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(cupholder) playsound(loc, I.usesound, 50, 1) - user << "You take the cup dispenser off." + to_chat(user, "You take the cup dispenser off.") new /obj/item/stack/material/plastic( src.loc ) if(cups) for(var/i = 0 to cups) @@ -278,9 +278,9 @@ return if(!bottle && !cupholder) playsound(loc, I.usesound, 50, 1) - user << "You start taking the water-cooler apart." + to_chat(user, "You start taking the water-cooler apart.") if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) - user << "You take the water-cooler apart." + to_chat(user, "You take the water-cooler apart.") new /obj/item/stack/material/plastic( src.loc, 4 ) qdel(src) return @@ -290,19 +290,19 @@ if(!bottle) if(anchored) var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I - user << "You start to screw the bottle onto the water-cooler." + to_chat(user, "You start to screw the bottle onto the water-cooler.") if(do_after(user, 20) && !bottle && anchored) bottle = 1 update_icon() - user << "You screw the bottle onto the water-cooler!" + to_chat(user, "You screw the bottle onto the water-cooler!") for(var/datum/reagent/R in G.reagents.reagent_list) var/total_reagent = G.reagents.get_reagent_amount(R.id) reagents.add_reagent(R.id, total_reagent) qdel(G) else - user << "You need to wrench down the cooler first." + to_chat(user, "You need to wrench down the cooler first.") else - user << "There is already a bottle there!" + to_chat(user, "There is already a bottle there!") return 1 if(istype(I, /obj/item/stack/material/plastic)) @@ -310,17 +310,17 @@ if(anchored) var/obj/item/stack/material/plastic/P = I src.add_fingerprint(user) - user << "You start to attach a cup dispenser onto the water-cooler." + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20) && !cupholder && anchored) if (P.use(1)) - user << "You attach a cup dispenser onto the water-cooler." + to_chat(user, "You attach a cup dispenser onto the water-cooler.") cupholder = 1 update_icon() else - user << "You need to wrench down the cooler first." + to_chat(user, "You need to wrench down the cooler first.") else - user << "There is already a cup dispenser there!" + to_chat(user, "There is already a cup dispenser there!") return /obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index d1be4f08da..d70e6e563d 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -100,7 +100,7 @@ if(panel_open) var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) if(!input) - usr << "No input found please hang up and try your call again." + to_chat(user, "No input found. Please hang up and try your call again.") return id = input for(var/obj/machinery/conveyor_switch/C in machines) @@ -220,7 +220,7 @@ // attack with hand, switch position /obj/machinery/conveyor_switch/attack_hand(mob/user) if(!allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return if(position == 0) @@ -251,12 +251,12 @@ if(panel_open) var/obj/item/weapon/weldingtool/WT = I if(!WT.remove_fuel(0, user)) - user << "The welding tool must be on to complete this task." + to_chat(user, "The welding tool must be on to complete this task.") return playsound(src, WT.usesound, 50, 1) if(do_after(user, 20 * WT.toolspeed)) if(!src || !WT.isOn()) return - user << "You deconstruct the frame." + to_chat(user, "You deconstruct the frame.") new /obj/item/stack/material/steel( src.loc, 2 ) qdel(src) return @@ -265,7 +265,7 @@ if(panel_open) var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) if(!input) - usr << "No input found please hang up and try your call again." + to_chat(user, "No input found. Please hang up and try your call again.") return id = input conveyors = list() // Clear list so they aren't double added. diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 597033a6e6..8034b776b4 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -112,7 +112,7 @@ return if(anchored) - usr << "You must unfasten the pipe before rotating it." + to_chat(usr, "You must unfasten the pipe before rotating it.") return set_dir(turn(dir, -90)) @@ -126,7 +126,7 @@ return if(anchored) - usr << "You must unfasten the pipe before flipping it." + to_chat(usr, "You must unfasten the pipe before flipping it.") return set_dir(turn(dir, 180)) @@ -223,12 +223,12 @@ var/turf/T = src.loc if(!T.is_plating()) - user << "You can only attach the [nicetype] if the floor plating is removed." + to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.") return var/obj/structure/disposalpipe/CP = locate() in T - if(istype(I, /obj/item/weapon/wrench)) + if(I.is_wrench()) if(anchored) anchored = 0 if(ispipe) @@ -236,15 +236,15 @@ density = 0 else density = 1 - user << "You detach the [nicetype] from the underfloor." + to_chat(user, "You detach the [nicetype] from the underfloor.") else if(ptype>=6 && ptype <= 8) // Disposal or outlet if(CP) // There's something there if(!istype(CP,/obj/structure/disposalpipe/trunk)) - user << "The [nicetype] requires a trunk underneath it in order to work." + to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") return else // Nothing under, fuck. - user << "The [nicetype] requires a trunk underneath it in order to work." + to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") return else if(CP) @@ -253,7 +253,7 @@ if(istype(CP, /obj/structure/disposalpipe/broken)) pdir = CP.dir if(pdir & dpdir) - user << "There is already a [nicetype] at that location." + to_chat(user, "There is already a [nicetype] at that location.") return anchored = 1 @@ -262,7 +262,7 @@ density = 0 else density = 1 // We don't want disposal bins or outlets to go density 0 - user << "You attach the [nicetype] to the underfloor." + to_chat(user, "You attach the [nicetype] to the underfloor.") playsound(loc, I.usesound, 100, 1) update() @@ -271,10 +271,10 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src, W.usesound, 100, 1) - user << "Welding the [nicetype] in place." + to_chat(user, "Welding the [nicetype] in place.") if(do_after(user, 20 * W.toolspeed)) if(!src || !W.isOn()) return - user << "The [nicetype] has been welded in place!" + to_chat(user, "The [nicetype] has been welded in place!") update() // TODO: Make this neat if(ispipe) // Pipe @@ -316,10 +316,10 @@ qdel(src) return else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return else - user << "You need to attach it to the plating first!" + to_chat(user, "You need to attach it to the plating first!") return /obj/structure/disposalconstruct/hides_under_flooring() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index a9b0b213ed..10157157fa 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -55,32 +55,32 @@ src.add_fingerprint(user) if(mode<=0) // It's off - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(contents.len > 0) - user << "Eject the items first!" + to_chat(user, "Eject the items first!") return if(mode==0) // It's off but still not unscrewed mode=-1 // Set it to doubleoff l0l playsound(src, I.usesound, 50, 1) - user << "You remove the screws around the power connection." + to_chat(user, "You remove the screws around the power connection.") return else if(mode==-1) mode=0 playsound(src, I.usesound, 50, 1) - user << "You attach the screws around the power connection." + to_chat(user, "You attach the screws around the power connection.") return - else if(istype(I,/obj/item/weapon/weldingtool) && mode==-1) + else if(istype(I, /obj/item/weapon/weldingtool) && mode==-1) if(contents.len > 0) - user << "Eject the items first!" + to_chat(user, "Eject the items first!") return var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src, W.usesound, 100, 1) - user << "You start slicing the floorweld off the disposal unit." + to_chat(user, "You start slicing the floorweld off the disposal unit.") if(do_after(user,20 * W.toolspeed)) if(!src || !W.isOn()) return - user << "You sliced the floorweld off the disposal unit." + to_chat(user, "You sliced the floorweld off the disposal unit.") var/obj/structure/disposalconstruct/C = new (src.loc) src.transfer_fingerprints_to(C) C.ptype = 6 // 6 = disposal unit @@ -90,16 +90,16 @@ qdel(src) return else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return if(istype(I, /obj/item/weapon/melee/energy/blade)) - user << "You can't place that item inside the disposal unit." + to_chat(user, "You can't place that item inside the disposal unit.") return if(istype(I, /obj/item/weapon/storage/bag/trash)) var/obj/item/weapon/storage/bag/trash/T = I - user << "You empty the bag." + to_chat(user, "You empty the bag.") for(var/obj/item/O in T.contents) T.remove_from_storage(O,src) T.update_icon() @@ -143,7 +143,7 @@ if(I) I.forceMove(src) - user << "You place \the [I] into the [src]." + to_chat(user, "You place \the [I] into the [src].") for(var/mob/M in viewers(src)) if(M == user) continue @@ -179,10 +179,10 @@ if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in // must be awake, not stunned or whatever msg = "[user.name] climbs into the [src]." - user << "You climb into the [src]." + to_chat(user, "You climb into the [src].") else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis) msg = "[user.name] stuffs [target.name] into the [src]!" - user << "You stuff [target.name] into the [src]!" + to_chat(user, "You stuff [target.name] into the [src]!") add_attack_logs(user,target,"Disposals dunked") else @@ -230,7 +230,7 @@ return if(user && user.loc == src) - usr << "You cannot reach the controls from inside." + to_chat(user, "You cannot reach the controls from inside.") return // Clumsy folks can only flush it. @@ -279,11 +279,11 @@ /obj/machinery/disposal/Topic(href, href_list) if(usr.loc == src) - usr << "You cannot reach the controls from inside." + to_chat(usr, "You cannot reach the controls from inside.") return if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1 - usr << "The disposal units power is disabled." + to_chat(usr, "The disposal units power is disabled.") return if(..()) return @@ -636,7 +636,7 @@ if (src.loc) for (var/mob/M in hearers(src.loc.loc)) - M << "CLONG, clong!" + to_chat(M, "CLONG, clong!") playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) @@ -885,15 +885,15 @@ // check if anything changed over 2 seconds var/turf/uloc = user.loc var/atom/wloc = W.loc - user << "Slicing the disposal pipe." + to_chat(user, "Slicing the disposal pipe.") sleep(30) if(!W.isOn()) return if(user.loc == uloc && wloc == W.loc) welded() else - user << "You must stay still while welding the pipe." + to_chat(user, "You must stay still while welding the pipe.") else - user << "You need more welding fuel to cut the pipe." + to_chat(user, "You need more welding fuel to cut the pipe.") return // called when pipe is cut with welder @@ -1169,7 +1169,7 @@ if(O.currTag)// Tag set sort_tag = O.currTag playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - user << "Changed tag to '[sort_tag]'." + to_chat(user, "Changed tag to '[sort_tag]'.") updatename() updatedesc() @@ -1237,7 +1237,7 @@ if(O.currTag)// Tag set sortType = O.currTag playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - user << "Changed filter to '[sortType]'." + to_chat(user, "Changed filter to '[sortType]'.") updatename() updatedesc() @@ -1365,15 +1365,15 @@ // check if anything changed over 2 seconds var/turf/uloc = user.loc var/atom/wloc = W.loc - user << "Slicing the disposal pipe." + to_chat(user, "Slicing the disposal pipe.") sleep(30) if(!W.isOn()) return if(user.loc == uloc && wloc == W.loc) welded() else - user << "You must stay still while welding the pipe." + to_chat(user, "You must stay still while welding the pipe.") else - user << "You need more welding fuel to cut the pipe." + to_chat(user, "You need more welding fuel to cut the pipe.") return // would transfer to next pipe segment, but we are in a trunk @@ -1475,25 +1475,25 @@ if(!I || !user) return src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(mode==0) mode=1 - user << "You remove the screws around the power connection." + to_chat(user, "You remove the screws around the power connection.") playsound(src, I.usesound, 50, 1) return else if(mode==1) mode=0 - user << "You attach the screws around the power connection." + to_chat(user, "You attach the screws around the power connection.") playsound(src, I.usesound, 50, 1) return - else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) + else if(istype(I, /obj/item/weapon/weldingtool) && mode==1) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src, W.usesound, 100, 1) - user << "You start slicing the floorweld off the disposal outlet." + to_chat(user, "You start slicing the floorweld off the disposal outlet.") if(do_after(user,20 * W.toolspeed)) if(!src || !W.isOn()) return - user << "You sliced the floorweld off the disposal outlet." + to_chat(user, "You sliced the floorweld off the disposal outlet.") var/obj/structure/disposalconstruct/C = new (src.loc) src.transfer_fingerprints_to(C) C.ptype = 7 // 7 = outlet @@ -1503,7 +1503,7 @@ qdel(src) return else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return // called when movable is expelled from a disposal pipe or outlet diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index b2cbcb9b3e..64f5b923ab 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -26,7 +26,7 @@ var/obj/item/device/destTagger/O = W if(O.currTag) if(src.sortTag != O.currTag) - user << "You have labeled the destination as [O.currTag]." + to_chat(user, "You have labeled the destination as [O.currTag].") if(!src.sortTag) src.sortTag = O.currTag update_icon() @@ -34,16 +34,16 @@ src.sortTag = O.currTag playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) else - user << "The package is already labeled for [O.currTag]." + to_chat(user, "The package is already labeled for [O.currTag].") else - user << "You need to set a destination first!" + to_chat(user, "You need to set a destination first!") else if(istype(W, /obj/item/weapon/pen)) switch(alert("What would you like to alter?",,"Title","Description", "Cancel")) if("Title") var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN) if(!str || !length(str)) - usr << " Invalid text." + to_chat(user, " Invalid text.") return user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\ "You title \the [src]: \"[str]\"",\ @@ -57,7 +57,7 @@ if("Description") var/str = sanitize(input(usr,"Label text?","Set label","")) if(!str || !length(str)) - usr << "Invalid text." + to_chat(user, "Invalid text.") return if(!examtext && !nameset) examtext = str @@ -101,9 +101,9 @@ examine(mob/user) if(..(user, 4)) if(sortTag) - user << "It is labeled \"[sortTag]\"" + to_chat(user, "It is labeled \"[sortTag]\"") if(examtext) - user << "It has a note attached which reads, \"[examtext]\"" + to_chat(user, "It has a note attached which reads, \"[examtext]\"") return /obj/item/smallDelivery @@ -133,7 +133,7 @@ var/obj/item/device/destTagger/O = W if(O.currTag) if(src.sortTag != O.currTag) - user << "You have labeled the destination as [O.currTag]." + to_chat(user, "You have labeled the destination as [O.currTag].") if(!src.sortTag) src.sortTag = O.currTag update_icon() @@ -141,16 +141,16 @@ src.sortTag = O.currTag playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) else - user << "The package is already labeled for [O.currTag]." + to_chat(user, "The package is already labeled for [O.currTag].") else - user << "You need to set a destination first!" + to_chat(user, "You need to set a destination first!") else if(istype(W, /obj/item/weapon/pen)) switch(alert("What would you like to alter?",,"Title","Description", "Cancel")) if("Title") var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN) if(!str || !length(str)) - usr << " Invalid text." + to_chat(user, " Invalid text.") return user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\ "You title \the [src]: \"[str]\"",\ @@ -165,7 +165,7 @@ if("Description") var/str = sanitize(input(usr,"Label text?","Set label","")) if(!str || !length(str)) - usr << "Invalid text." + to_chat(user, "Invalid text.") return if(!examtext && !nameset) examtext = str @@ -205,9 +205,9 @@ examine(mob/user) if(..(user, 4)) if(sortTag) - user << "It is labeled \"[sortTag]\"" + to_chat(user, "It is labeled \"[sortTag]\"") if(examtext) - user << "It has a note attached which reads, \"[examtext]\"" + to_chat(user, "It has a note attached which reads, \"[examtext]\"") return /obj/item/weapon/packageWrap @@ -278,7 +278,7 @@ "You wrap \the [target], leaving [amount] units of paper on \the [src].",\ "You hear someone taping paper around a large object.") else if(src.amount < 3) - user << "You need more paper." + to_chat(user, "You need more paper.") else if (istype (target, /obj/structure/closet)) var/obj/structure/closet/O = target if (src.amount > 3 && !O.opened) @@ -291,9 +291,9 @@ "You wrap \the [target], leaving [amount] units of paper on \the [src].",\ "You hear someone taping paper around a large object.") else if(src.amount < 3) - user << "You need more paper." + to_chat(user, "You need more paper.") else - user << "The object you are trying to wrap is unsuitable for the sorting machinery!" + to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery!") if (src.amount <= 0) new /obj/item/weapon/c_tube( src.loc ) qdel(src) @@ -302,7 +302,7 @@ examine(mob/user) if(..(user, 0)) - user << "There are [amount] units of package wrap left!" + to_chat(user, "There are [amount] units of package wrap left!") return @@ -421,25 +421,25 @@ if(!I || !user) return - if(istype(I, /obj/item/weapon/screwdriver)) + if(I.is_screwdriver()) if(c_mode==0) c_mode=1 playsound(src.loc, I.usesound, 50, 1) - user << "You remove the screws around the power connection." + to_chat(user, "You remove the screws around the power connection.") return else if(c_mode==1) c_mode=0 playsound(src.loc, I.usesound, 50, 1) - user << "You attach the screws around the power connection." + to_chat(user, "You attach the screws around the power connection.") return - else if(istype(I,/obj/item/weapon/weldingtool) && c_mode==1) + else if(istype(I, /obj/item/weapon/weldingtool) && c_mode==1) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src.loc, W.usesound, 50, 1) - user << "You start slicing the floorweld off the delivery chute." + to_chat(user, "You start slicing the floorweld off the delivery chute.") if(do_after(user,20 * W.toolspeed)) if(!src || !W.isOn()) return - user << "You sliced the floorweld off the delivery chute." + to_chat(user, "You sliced the floorweld off the delivery chute.") var/obj/structure/disposalconstruct/C = new (src.loc) C.ptype = 8 // 8 = Delivery chute C.update() @@ -448,7 +448,7 @@ qdel(src) return else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return /obj/machinery/disposal/deliveryChute/Destroy() diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index dae6575577..850df76645 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -99,7 +99,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). /obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob) if(busy) - user << "\The [src] is busy. Please wait for completion of previous operation." + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return 1 if(default_deconstruction_screwdriver(user, O)) if(linked_console) @@ -113,26 +113,26 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). if(istype(O, /obj/item/weapon/gripper/no_use/loader)) return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing if(panel_open) - user << "You can't load \the [src] while it's opened." + to_chat(user, "You can't load \the [src] while it's opened.") return 1 if(!linked_console) - user << "\The [src] must be linked to an R&D console first." + to_chat(user, "\The [src] must be linked to an R&D console first.") return 1 if(O.is_open_container()) return 0 if(!istype(O, /obj/item/stack/material)) //Previously checked for specific material sheets, for some reason? Made the check on 133 redundant. - user << "You cannot insert this item into \the [src]." + to_chat(user, "You cannot insert this item into \the [src].") return 1 if(stat) return 1 if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) - user << "\The [src]'s material bin is full. Please remove material before adding more." + to_chat(user, "\The [src]'s material bin is full. Please remove material before adding more.") return 1 var/obj/item/stack/material/S = O if(!(S.material.name in materials)) - user << "The [src] doesn't accept [S.material]!" + to_chat(user, "The [src] doesn't accept [S.material]!") return busy = 1 @@ -152,9 +152,9 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). materials[S.material.name] += amnt S.use(1) count++ - user << "You insert [count] [sname] into the fabricator." + to_chat(user, "You insert [count] [sname] into the fabricator.") else - user << "The fabricator cannot hold more [sname]." + to_chat(user, "The fabricator cannot hold more [sname].") busy = 0 updateUsrDialog() diff --git a/code/modules/research/designs/circuits.dm b/code/modules/research/designs/circuits.dm index e00a47786d..6c79366e66 100644 --- a/code/modules/research/designs/circuits.dm +++ b/code/modules/research/designs/circuits.dm @@ -364,14 +364,14 @@ CIRCUITS BELOW /datum/design/circuit/ordercomp name = "supply ordering console" id = "ordercomp" - build_path = /obj/item/weapon/circuitboard/ordercomp + build_path = /obj/item/weapon/circuitboard/supplycomp sort_string = "KAAAY" // Duplicate string, really need to redo this whole thing /datum/design/circuit/supplycomp name = "supply control console" id = "supplycomp" req_tech = list(TECH_DATA = 3) - build_path = /obj/item/weapon/circuitboard/supplycomp + build_path = /obj/item/weapon/circuitboard/supplycomp/control sort_string = "KAAAZ" // Duplicate string, really need to redo this whole thing /datum/design/circuit/biogenerator diff --git a/code/modules/research/designs/misc.dm b/code/modules/research/designs/misc.dm index ab420d142f..29231a7cd9 100644 --- a/code/modules/research/designs/misc.dm +++ b/code/modules/research/designs/misc.dm @@ -139,7 +139,7 @@ datum/design/item/laserpointer id = "handdrill" req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2) materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100) - build_path = /obj/item/weapon/screwdriver/power + build_path = /obj/item/weapon/tool/screwdriver/power sort_string = "VASDA" /datum/design/item/jaws_life @@ -148,7 +148,7 @@ datum/design/item/laserpointer id = "jawslife" req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2) materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100) - build_path = /obj/item/weapon/crowbar/power + build_path = /obj/item/weapon/tool/crowbar/power sort_string = "VASEA" /datum/design/item/device/t_scanner_upg diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 8464c3efc3..c225af1258 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -291,6 +291,11 @@ id = "mech_taser" build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser +/datum/design/item/mecha/rigged_taser + name = "Jury-Rigged Taser" + id = "mech_taser-r" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged + /datum/design/item/mecha/shocker name = "Exosuit Electrifier" desc = "A device to electrify the external portions of a mecha in order to increase its defensive capabilities." @@ -304,6 +309,11 @@ id = "mech_lmg" build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg +/datum/design/item/mecha/rigged_lmg + name = "Jury-Rigged Machinegun" + id = "mech_lmg-r" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged + /datum/design/item/mecha/weapon req_tech = list(TECH_COMBAT = 3) materials = list(DEFAULT_WALL_MATERIAL = 8000, "glass" = 2000) @@ -316,6 +326,13 @@ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot materials = list(DEFAULT_WALL_MATERIAL = 8000, "glass" = 3000, "plastic" = 2000, "silver" = 2500) +/datum/design/item/mecha/weapon/rigged_scattershot + name = "Jury-Rigged Shrapnel Cannon" + id = "mech_scattershot-r" + req_tech = list(TECH_COMBAT = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot/rigged + materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2000, "plastic" = 2000, "silver" = 2000) + /datum/design/item/mecha/weapon/laser name = "CH-PS \"Immolator\" Laser" id = "mech_laser" @@ -337,6 +354,34 @@ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 3000, "diamond" = 2000, "osmium" = 5000, "plastic" = 2000) +/datum/design/item/mecha/weapon/rigged_laser_heavy + name = "Jury-Rigged Emitter Cannon" + id = "mech_laser_heavy-r" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4, TECH_PHORON = 3, TECH_ILLEGAL = 1) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged + materials = list(DEFAULT_WALL_MATERIAL = 8000, "glass" = 4000, "diamond" = 1500, "osmium" = 4000, "plastic" = 2000) + +/datum/design/item/mecha/weapon/laser_xray + name = "CH-XS \"Penetrator\" Laser" + id = "mech_laser_xray" + req_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_POWER = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray + materials = list(DEFAULT_WALL_MATERIAL = 9000, "glass" = 3000, "phoron" = 1000, "silver" = 1500, "gold" = 2500, "plastic" = 2000) + +/datum/design/item/mecha/weapon/rigged_laser_xray + name = "Jury-Rigged Xray Rifle" + id = "mech_laser_xray-r" + req_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_POWER = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray/rigged + materials = list(DEFAULT_WALL_MATERIAL = 8500, "glass" = 2500, "phoron" = 1000, "silver" = 1250, "gold" = 2000, "plastic" = 2000) + +/datum/design/item/mecha/weapon/phase + name = "NT-PE \"Scorpio\" Phase-Emitter" + id = "mech_phase" + req_tech = list(TECH_MATERIAL = 1, TECH_COMBAT = 2, TECH_MAGNET = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/phase + materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 3000, "plastic" = 3000) + /datum/design/item/mecha/weapon/ion name = "MK-IV Ion Heavy Cannon" id = "mech_ion" @@ -344,20 +389,48 @@ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion materials = list(DEFAULT_WALL_MATERIAL = 15000, "uranium" = 2000, "silver" = 2000, "osmium" = 4500, "plastic" = 2000) +/datum/design/item/mecha/weapon/rigged_ion + name = "Jury-Rigged Ion Cannon" + id = "mech_ion-r" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged + materials = list(DEFAULT_WALL_MATERIAL = 13000, "uranium" = 1000, "silver" = 1000, "osmium" = 3000, "plastic" = 2000) + /datum/design/item/mecha/weapon/grenade_launcher name = "SGL-6 Grenade Launcher" id = "mech_grenade_launcher" req_tech = list(TECH_COMBAT = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade materials = list(DEFAULT_WALL_MATERIAL = 7000, "gold" = 2000, "plastic" = 3000) +/datum/design/item/mecha/weapon/rigged_grenade_launcher + name = "Jury-Rigged Pneumatic Flashlauncher" + id = "mech_grenade_launcher-rig" + req_tech = list(TECH_COMBAT = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged + materials = list(DEFAULT_WALL_MATERIAL = 5000, "gold" = 2000, "plastic" = 2000) + /datum/design/item/mecha/weapon/clusterbang_launcher name = "SOP-6 Grenade Launcher" desc = "A weapon that violates the Geneva Convention at 6 rounds per minute." id = "clusterbang_launcher" req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 4500, "uranium" = 4500) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang/limited + +/datum/design/item/mecha/weapon/conc_grenade_launcher + name = "SGL-9 Grenade Launcher" + id = "mech_grenade_launcher_conc" + req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_ILLEGAL = 1) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/concussion + materials = list(DEFAULT_WALL_MATERIAL = 9000, "gold" = 1000, "osmium" = 1000, "plastic" = 3000) + +/datum/design/item/mecha/weapon/frag_grenade_launcher + name = "HEP-MI 6 Grenade Launcher" + id = "mech_grenade_launcher_frag" + req_tech = list(TECH_COMBAT = 4, TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_ILLEGAL = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag/mini + materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2500, "uranium" = 3000, "osmium" = 3000, "plastic" = 3000) /datum/design/item/mecha/weapon/flamer name = "CR-3 Mark 8 Flamethrower" @@ -422,6 +495,14 @@ materials = list(DEFAULT_WALL_MATERIAL = 7500, "gold" = 750, "silver" = 1500, "glass" = 3750) build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid +/datum/design/item/mecha/shield_drone + name = "Shield Drone" + desc = "Manual shield drone. Deploys a large, familiar, and rectangular shield in one direction at a time." + id = "mech_shield_droid" + req_tech = list(TECH_PHORON = 3, TECH_MAGNET = 6, TECH_ILLEGAL = 4) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 2000, "silver" = 3000, "phoron" = 5000, "glass" = 3750) + build_path = /obj/item/mecha_parts/mecha_equipment/combat_shield + /datum/design/item/mecha/jetpack name = "Ion Jetpack" desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight." @@ -483,4 +564,29 @@ build_type = MECHFAB materials = list(DEFAULT_WALL_MATERIAL = 562, "glass" = 562) build_path = /obj/item/device/flash/synthetic - category = "Misc" \ No newline at end of file + category = "Misc" + +/* + * Non-Mech Vehicles + */ + +/datum/design/item/mechfab/vehicle + build_type = MECHFAB + category = "Vehicle" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6) + +/datum/design/item/mechfab/vehicle/spacebike_chassis + name = "Spacebike Chassis" + desc = "A space-bike's un-assembled frame." + id = "vehicle_chassis_spacebike" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_BLUESPACE = 3, TECH_PHORON = 3) + materials = list(DEFAULT_WALL_MATERIAL = 12000, "silver" = 3000, "phoron" = 3000, "osmium" = 1000) + build_path = /obj/item/weapon/vehicle_assembly/spacebike + +/datum/design/item/mechfab/vehicle/quadbike_chassis + name = "Quadbike Chassis" + desc = "A space-bike's un-assembled frame." + id = "vehicle_chassis_quadbike" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 3, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 15000, "silver" = 3000, "plastic" = 3000, "osmium" = 1000) + build_path = /obj/item/weapon/vehicle_assembly/quadbike diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index b90937343c..1e1d54f9bc 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -91,7 +91,7 @@ /obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) if(busy) - user << "\The [src] is busy. Please wait for completion of previous operation." + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return 1 if(default_deconstruction_screwdriver(user, O)) if(linked_console) @@ -107,20 +107,20 @@ if(istype(O, /obj/item/weapon/gripper/no_use/loader)) return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing if(panel_open) - user << "You can't load \the [src] while it's opened." + to_chat(user, "You can't load \the [src] while it's opened.") return 1 if(!linked_console) - user << "\The [src] must be linked to an R&D console first!" + to_chat(user, "\The [src] must be linked to an R&D console first!") return 1 if(!istype(O, /obj/item/stack/material)) - user << "You cannot insert this item into \the [src]!" + to_chat(user, "You cannot insert this item into \the [src]!") return 1 if(stat) return 1 var/obj/item/stack/material/S = O if(!(S.material.name in materials)) - user << "The [src] doesn't accept [S.material]!" + to_chat(user, "The [src] doesn't accept [S.material]!") return busy = 1 @@ -140,9 +140,9 @@ materials[S.material.name] += amnt S.use(1) count++ - user << "You insert [count] [sname] into the fabricator." + to_chat(user, "You insert [count] [sname] into the fabricator.") else - user << "The fabricator cannot hold more [sname]." + to_chat(user, "The fabricator cannot hold more [sname].") busy = 0 var/stacktype = S.type diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 6c9a635ffc..b688bf6dca 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -198,7 +198,7 @@ data["coredumped"] = SStranscore.core_dumped data["emergency"] = disk ? 1 : 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "sleever.tmpl", "Resleeving Control Console", 400, 450) ui.set_initial_data(data) @@ -375,7 +375,7 @@ menu = href_list["menu"] temp = "" - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) add_fingerprint(usr) // In here because only relevant to computer diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index afe7c61cfc..b8d049da1c 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -141,7 +141,7 @@ data["disk"] = disk ? 1 : 0 data["diskStored"] = disk && disk.stored ? 1 : 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "body_designer.tmpl", "Body Design Console", 400, 600) ui.set_initial_data(data) diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index 89f3a7e41e..906873408d 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -187,7 +187,7 @@ var/list/infomorph_emotions = list( medicalActive1 = null medicalActive2 = null medical_cannotfind = 0 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) usr << "You reset your record-viewing software." /* @@ -509,7 +509,7 @@ var/global/list/default_infomorph_software = list() data["emotions"] = emotions data["current_emotion"] = card.current_emotion - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open, key_state) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open, key_state) if (!ui) ui = new(user, src, ui_key, "pai_interface.tmpl", "Card Software Interface", 450, 600, state = key_state) ui.set_initial_data(data) diff --git a/code/modules/resleeving/infomorph_software.dm b/code/modules/resleeving/infomorph_software.dm index e978b0729d..21a51d91e3 100644 --- a/code/modules/resleeving/infomorph_software.dm +++ b/code/modules/resleeving/infomorph_software.dm @@ -34,7 +34,7 @@ // This is dumb, but NanoUI breaks if it has no data to send data["manifest"] = PDA_Manifest - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_manifest.tmpl", "Crew Manifest", 450, 600) @@ -66,7 +66,7 @@ data["medical"] = M ? M.fields : null data["could_not_find"] = user.medical_cannotfind - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_medrecords.tmpl", "Medical Records", 450, 600) @@ -120,7 +120,7 @@ data["security"] = S ? S.fields : null data["could_not_find"] = user.security_cannotfind - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_secrecords.tmpl", "Security Records", 450, 600) @@ -170,7 +170,7 @@ data["progress_b"] = user.hackprogress % 10 data["aborted"] = user.hack_aborted - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150) @@ -270,7 +270,7 @@ gases[++gases.len] = gas data["gas"] = gases - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300) @@ -314,7 +314,7 @@ data["frequency"] = format_frequency(user.sradio.frequency) data["code"] = user.sradio.code - ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) // Don't copy-paste this unless you're making a pAI software module! ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150) diff --git a/code/modules/resleeving/sleevecard.dm b/code/modules/resleeving/sleevecard.dm index 46143e7b72..b2c34d30fa 100644 --- a/code/modules/resleeving/sleevecard.dm +++ b/code/modules/resleeving/sleevecard.dm @@ -36,7 +36,7 @@ if(!isnull(infomorph)) infomorph.death(0) infomorph = null - qdel_null(radio) + QDEL_NULL(radio) return ..() /obj/item/device/sleevecard/attack_self(mob/user) diff --git a/code/modules/rogueminer_vr/zone_console.dm b/code/modules/rogueminer_vr/zone_console.dm index d5752f45b5..b9813715e8 100644 --- a/code/modules/rogueminer_vr/zone_console.dm +++ b/code/modules/rogueminer_vr/zone_console.dm @@ -79,7 +79,7 @@ // Permit emergency recall of the shuttle if its stranded in a zone with just dead people. data["can_recall_shuttle"] = (shuttle_control && shuttle_control.z == BELT_Z && !curZoneOccupied) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "zone_console.tmpl", src.name, 600, 400) ui.set_initial_data(data) @@ -100,7 +100,7 @@ failsafe_shuttle_recall() src.add_fingerprint(usr) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/computer/roguezones/proc/scan_for_new_zone() if(scanning) return diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 4d5eeb7905..7696c92a51 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -27,7 +27,7 @@ /obj/machinery/keycard_auth/attackby(obj/item/weapon/W as obj, mob/user as mob) if(stat & (NOPOWER|BROKEN)) - user << "This device is not powered." + to_chat(user, "This device is not powered.") return if(istype(W,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/ID = W @@ -41,11 +41,11 @@ event_triggered_by = usr broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices - if(istype(W, /obj/item/weapon/screwdriver)) - user << "You begin removing the faceplate from the [src]" + if(W.is_screwdriver()) + to_chat(user, "You begin removing the faceplate from the [src]") playsound(src, W.usesound, 50, 1) if(do_after(user, 10 * W.toolspeed)) - user << "You remove the faceplate from the [src]" + to_chat(user, "You remove the faceplate from the [src]") var/obj/structure/frame/A = new /obj/structure/frame(loc) var/obj/item/weapon/circuitboard/M = new circuit(A) A.frame_type = M.board_type @@ -70,12 +70,12 @@ /obj/machinery/keycard_auth/attack_hand(mob/user as mob) if(user.stat || stat & (NOPOWER|BROKEN)) - user << "This device is not powered." + to_chat(user, "This device is not powered.") return if(!user.IsAdvancedToolUser()) return 0 if(busy) - user << "This device is busy." + to_chat(user, "This device is busy.") return user.set_machine(src) @@ -105,10 +105,10 @@ /obj/machinery/keycard_auth/Topic(href, href_list) ..() if(busy) - usr << "This device is busy." + to_chat(usr, "This device is busy.") return if(usr.stat || stat & (BROKEN|NOPOWER)) - usr << "This device is without power." + to_chat(usr, "This device is without power.") return if(href_list["triggerevent"]) event = href_list["triggerevent"] @@ -174,7 +174,7 @@ feedback_inc("alert_keycard_auth_maintRevoke",1) if("Emergency Response Team") if(is_ert_blocked()) - usr << "All emergency response teams are dispatched and can not be called at this time." + to_chat(usr, "All emergency response teams are dispatched and can not be called at this time.") return trigger_armed_response_team(1) diff --git a/code/modules/shieldgen/directional_shield.dm b/code/modules/shieldgen/directional_shield.dm index 1892a3f3ad..519edcea07 100644 --- a/code/modules/shieldgen/directional_shield.dm +++ b/code/modules/shieldgen/directional_shield.dm @@ -344,4 +344,49 @@ create_shield(temp_T, i == length_to_build ? turn(dir, -45) : dir) // Finished. update_shield_colors() - return TRUE \ No newline at end of file + return TRUE + +/obj/item/shield_projector/line/exosuit //Variant for Exosuit design. + name = "linear exosuit shield projector" + offset_from_center = 1 //Snug against the exosuit. + max_shield_health = 200 + + var/obj/mecha/my_mecha = null + var/obj/item/mecha_parts/mecha_equipment/combat_shield/my_tool = null + +/obj/item/shield_projector/line/exosuit/process() + ..() + if((my_tool && loc != my_tool) && (my_mecha && loc != my_mecha)) + forceMove(my_tool) + if(active) + my_tool.set_ready_state(0) + if(my_mecha.has_charge(my_tool.energy_drain * 50)) //Stops at around 1000 charge. + my_mecha.use_power(my_tool.energy_drain) + else + destroy_shields() + my_tool.set_ready_state(1) + my_tool.log_message("Power lost.") + else + my_tool.set_ready_state(1) + +/obj/item/shield_projector/line/exosuit/attack_self(var/mob/living/user) + if(active) + if(always_on) + to_chat(user, "You can't seem to deactivate \the [src].") + return + + destroy_shields() + else + if(istype(user.loc, /obj/mecha)) + set_dir(user.loc.dir) + else + set_dir(user.dir) + create_shields() + visible_message("\The [user] [!active ? "de":""]activates \the [src].") + +/obj/item/shield_projector/line/exosuit/adjust_health(amount) + ..() + my_mecha.use_power(my_tool.energy_drain) + if(!active && shield_health < shield_regen_amount) + my_tool.log_message("Shield overloaded.") + my_mecha.use_power(my_tool.energy_drain * 4) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index b67e6f70a2..1798ebd67f 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -254,10 +254,10 @@ /obj/machinery/shieldgen/attack_hand(mob/user as mob) if(locked) - user << "The machine is locked, you are unable to use it." + to_chat(user, "The machine is locked, you are unable to use it.") return if(is_open) - user << "The panel must be closed before operating this machine." + to_chat(user, "The panel must be closed before operating this machine.") return if (src.active) @@ -272,7 +272,7 @@ "You hear heavy droning.") src.shields_up() else - user << "The device must first be secured to the floor." + to_chat(user, "The device must first be secured to the floor.") return /obj/machinery/shieldgen/emag_act(var/remaining_charges, var/mob/user) @@ -282,50 +282,50 @@ return 1 /obj/machinery/shieldgen/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) playsound(src, W.usesound, 100, 1) if(is_open) - user << "You close the panel." + to_chat(user, "You close the panel.") is_open = 0 else - user << "You open the panel and expose the wiring." + to_chat(user, "You open the panel and expose the wiring.") is_open = 1 else if(istype(W, /obj/item/stack/cable_coil) && malfunction && is_open) var/obj/item/stack/cable_coil/coil = W - user << "You begin to replace the wires." + to_chat(user, "You begin to replace the wires.") //if(do_after(user, min(60, round( ((getMaxHealth()/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage if(do_after(user, 30)) if (coil.use(1)) health = max_health malfunction = 0 - user << "You repair the [src]!" + to_chat(user, "You repair the [src]!") update_icon() - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(locked) - user << "The bolts are covered, unlocking this would retract the covers." + to_chat(user, "The bolts are covered, unlocking this would retract the covers.") return if(anchored) playsound(src, W.usesound, 100, 1) - user << "You unsecure the [src] from the floor!" + to_chat(user, "You unsecure the [src] from the floor!") if(active) - user << "The [src] shuts off!" + to_chat(user, "The [src] shuts off!") src.shields_down() anchored = 0 else if(istype(get_turf(src), /turf/space)) return //No wrenching these in space! playsound(src, W.usesound, 100, 1) - user << "You secure the [src] to the floor!" + to_chat(user, "You secure the [src] to the floor!") anchored = 1 else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) if(src.allowed(user)) src.locked = !src.locked - user << "The controls are now [src.locked ? "locked." : "unlocked."]" + to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") else - user << "Access denied." + to_chat(user, "Access denied.") else ..() diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index 995df27b48..37c55e5911 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -158,7 +158,7 @@ /obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) if(active) user << "Turn off the field generator first." return diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 1b8f2def84..ae51705984 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -45,7 +45,7 @@ updateDialog() else user << "Access denied." - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) src.visible_message("\icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index aa504fd7a6..de6d535a05 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -42,7 +42,7 @@ return ..() /obj/machinery/shield_gen/Destroy() - qdel_null_list(field) + QDEL_NULL_LIST(field) return ..() /obj/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user) @@ -64,7 +64,7 @@ updateDialog() else user << "Access denied." - else if(istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) src.visible_message("\icon[src] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index 5555e68fe9..43cb6a5d94 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -55,7 +55,7 @@ "is_armed" = pod.arming_controller.armed, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290) @@ -102,7 +102,7 @@ "armed" = armed, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "escape_pod_berth_console.tmpl", name, 470, 290) diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index 5e096fcd8f..01924be412 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -57,7 +57,7 @@ "can_force" = shuttle.can_force(), ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "shuttle_control_console.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index 53d2570ca9..7db9ae2b62 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -233,7 +233,7 @@ "user" = debug? user : null, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "escape_shuttle_control_console.tmpl", "Shuttle Control", 470, 420) diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm index 90e5141535..c6233d48a0 100644 --- a/code/modules/shuttles/shuttles_web.dm +++ b/code/modules/shuttles/shuttles_web.dm @@ -350,7 +350,7 @@ "sensors" = sensors ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 500, 500) diff --git a/code/modules/surgery/_defines.dm b/code/modules/surgery/_defines.dm index 900f3e4545..a76fb4e970 100644 --- a/code/modules/surgery/_defines.dm +++ b/code/modules/surgery/_defines.dm @@ -1 +1 @@ -#define SURGERY_FAILURE -1 +#define SURGERY_FAILURE -1 \ No newline at end of file diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 5465e7d03e..2f832fdb9f 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -9,9 +9,11 @@ /datum/surgery_step/glue_bone allowed_tools = list( - /obj/item/weapon/surgical/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/surgical/bonegel = 100 ) + + allowed_procs = list(IS_SCREWDRIVER = 75) + can_infect = 1 blood_level = 1 @@ -49,10 +51,11 @@ /datum/surgery_step/set_bone allowed_tools = list( - /obj/item/weapon/surgical/bonesetter = 100, \ - /obj/item/weapon/wrench = 75 \ + /obj/item/weapon/surgical/bonesetter = 100 ) + allowed_procs = list(IS_WRENCH = 75) + min_duration = 60 max_duration = 70 @@ -92,10 +95,11 @@ /datum/surgery_step/mend_skull allowed_tools = list( - /obj/item/weapon/surgical/bonesetter = 100, \ - /obj/item/weapon/wrench = 75 \ + /obj/item/weapon/surgical/bonesetter = 100 ) + allowed_procs = list(IS_WRENCH = 75) + min_duration = 60 max_duration = 70 @@ -130,9 +134,11 @@ /datum/surgery_step/finish_bone allowed_tools = list( - /obj/item/weapon/surgical/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/surgical/bonegel = 100 ) + + allowed_procs = list(IS_SCREWDRIVER = 75) + can_infect = 1 blood_level = 1 @@ -169,8 +175,9 @@ /datum/surgery_step/clamp_bone allowed_tools = list( - /obj/item/weapon/surgical/bone_clamp = 100 - ) + /obj/item/weapon/surgical/bone_clamp = 100 + ) + can_infect = 1 blood_level = 1 diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 7bc33d7500..3513691706 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -20,8 +20,8 @@ /datum/surgery_step/open_encased/saw allowed_tools = list( - /obj/item/weapon/surgical/circular_saw = 100, \ - /obj/item/weapon/material/knife/machete/hatchet = 75 + /obj/item/weapon/surgical/circular_saw = 100, \ + /obj/item/weapon/material/knife/machete/hatchet = 75 ) min_duration = 50 @@ -69,10 +69,11 @@ /datum/surgery_step/open_encased/retract allowed_tools = list( - /obj/item/weapon/surgical/retractor = 100, \ - /obj/item/weapon/crowbar = 75 + /obj/item/weapon/surgical/retractor = 100 ) + allowed_procs = list(IS_CROWBAR = 75) + min_duration = 30 max_duration = 40 @@ -121,10 +122,11 @@ /datum/surgery_step/open_encased/close allowed_tools = list( - /obj/item/weapon/surgical/retractor = 100, \ - /obj/item/weapon/crowbar = 75 + /obj/item/weapon/surgical/retractor = 100, ) + allowed_procs = list(IS_CROWBAR = 75) + min_duration = 20 max_duration = 40 @@ -178,10 +180,11 @@ /datum/surgery_step/open_encased/mend allowed_tools = list( - /obj/item/weapon/surgical/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/surgical/bonegel = 100 ) + allowed_procs = list(IS_SCREWDRIVER = 75) + min_duration = 20 max_duration = 40 diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index b3fae927bb..30f50b14ec 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -88,9 +88,11 @@ /datum/surgery_step/face/fix_face allowed_tools = list( - /obj/item/weapon/surgical/retractor = 100, \ - /obj/item/weapon/crowbar = 55, \ - /obj/item/weapon/material/kitchen/utensil/fork = 75) + /obj/item/weapon/surgical/retractor = 100, \ + /obj/item/weapon/material/kitchen/utensil/fork = 75 + ) + + allowed_procs = list(IS_CROWBAR = 55) min_duration = 80 max_duration = 100 diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index f74c7dda64..64de0aeef4 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -28,9 +28,9 @@ /datum/surgery_step/generic/cut_open allowed_tools = list( - /obj/item/weapon/surgical/scalpel = 100, \ - /obj/item/weapon/material/knife = 75, \ - /obj/item/weapon/material/shard = 50, \ + /obj/item/weapon/surgical/scalpel = 100, \ + /obj/item/weapon/material/knife = 75, \ + /obj/item/weapon/material/shard = 50, \ ) req_open = 0 @@ -72,10 +72,10 @@ /datum/surgery_step/generic/cut_with_laser allowed_tools = list( - /obj/item/weapon/surgical/scalpel/laser3 = 95, \ - /obj/item/weapon/surgical/scalpel/laser2 = 85, \ - /obj/item/weapon/surgical/scalpel/laser1 = 75, \ - /obj/item/weapon/melee/energy/sword = 5 + /obj/item/weapon/surgical/scalpel/laser3 = 95, \ + /obj/item/weapon/surgical/scalpel/laser2 = 85, \ + /obj/item/weapon/surgical/scalpel/laser1 = 75, \ + /obj/item/weapon/melee/energy/sword = 5 ) priority = 2 req_open = 0 @@ -118,8 +118,9 @@ /datum/surgery_step/generic/incision_manager allowed_tools = list( - /obj/item/weapon/surgical/scalpel/manager = 100 + /obj/item/weapon/surgical/scalpel/manager = 100 ) + priority = 2 req_open = 0 min_duration = 80 @@ -163,9 +164,9 @@ /datum/surgery_step/generic/clamp_bleeders allowed_tools = list( - /obj/item/weapon/surgical/hemostat = 100, \ - /obj/item/stack/cable_coil = 75, \ - /obj/item/device/assembly/mousetrap = 20 + /obj/item/weapon/surgical/hemostat = 100, \ + /obj/item/stack/cable_coil = 75, \ + /obj/item/device/assembly/mousetrap = 20 ) min_duration = 40 @@ -202,11 +203,12 @@ /datum/surgery_step/generic/retract_skin allowed_tools = list( - /obj/item/weapon/surgical/retractor = 100, \ - /obj/item/weapon/crowbar = 75, \ - /obj/item/weapon/material/kitchen/utensil/fork = 50 + /obj/item/weapon/surgical/retractor = 100, \ + /obj/item/weapon/material/kitchen/utensil/fork = 50 ) + allowed_procs = list(IS_CROWBAR = 75) + min_duration = 30 max_duration = 40 @@ -261,10 +263,10 @@ /datum/surgery_step/generic/cauterize allowed_tools = list( - /obj/item/weapon/surgical/cautery = 100, \ - /obj/item/clothing/mask/smokable/cigarette = 75, \ - /obj/item/weapon/flame/lighter = 50, \ - /obj/item/weapon/weldingtool = 25 + /obj/item/weapon/surgical/cautery = 100, \ + /obj/item/clothing/mask/smokable/cigarette = 75, \ + /obj/item/weapon/flame/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 ) min_duration = 70 @@ -302,8 +304,8 @@ /datum/surgery_step/generic/amputate allowed_tools = list( - /obj/item/weapon/surgical/circular_saw = 100, \ - /obj/item/weapon/material/knife/machete/hatchet = 75 + /obj/item/weapon/surgical/circular_saw = 100, \ + /obj/item/weapon/material/knife/machete/hatchet = 75 ) req_open = 0 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 3bbb5f1089..ae0e7610a7 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -44,9 +44,9 @@ /datum/surgery_step/cavity/make_space allowed_tools = list( - /obj/item/weapon/surgical/surgicaldrill = 100, \ - /obj/item/weapon/pen = 75, \ - /obj/item/stack/rods = 50 + /obj/item/weapon/surgical/surgicaldrill = 100, \ + /obj/item/weapon/pen = 75, \ + /obj/item/stack/rods = 50 ) min_duration = 60 @@ -77,10 +77,10 @@ /datum/surgery_step/cavity/close_space priority = 2 allowed_tools = list( - /obj/item/weapon/surgical/cautery = 100, \ - /obj/item/clothing/mask/smokable/cigarette = 75, \ - /obj/item/weapon/flame/lighter = 50, \ - /obj/item/weapon/weldingtool = 25 + /obj/item/weapon/surgical/cautery = 100, \ + /obj/item/clothing/mask/smokable/cigarette = 75, \ + /obj/item/weapon/flame/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 ) min_duration = 60 @@ -157,11 +157,12 @@ /datum/surgery_step/cavity/implant_removal allowed_tools = list( - /obj/item/weapon/surgical/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/material/kitchen/utensil/fork = 20 + /obj/item/weapon/surgical/hemostat = 100, \ + /obj/item/weapon/material/kitchen/utensil/fork = 20 ) + allowed_procs = list(IS_WIRECUTTER = 75) + min_duration = 80 max_duration = 100 diff --git a/code/modules/surgery/neck.dm b/code/modules/surgery/neck.dm index 6cd347586b..5b1522d60c 100644 --- a/code/modules/surgery/neck.dm +++ b/code/modules/surgery/neck.dm @@ -59,9 +59,11 @@ priority = 3 //Do this instead of expanding the skull cavity allowed_tools = list( /obj/item/weapon/surgical/surgicaldrill = 100, - /obj/item/weapon/screwdriver = 75, /obj/item/weapon/melee/changeling/arm_blade = 15, - /obj/item/weapon/pickaxe = 5) + /obj/item/weapon/pickaxe = 5 + ) + + allowed_procs = list(IS_SCREWDRIVER = 75) min_duration = 200 //Very. Very. Carefully. max_duration = 300 @@ -100,9 +102,10 @@ priority = 3 //Do this instead of picking around for implants. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, - /obj/item/weapon/wirecutters = 60, /obj/item/weapon/melee/changeling/claw = 40) //Surprisingly, claws are kind of okay at picking things out. + allowed_procs = list(IS_WIRECUTTER = 60) + min_duration = 90 max_duration = 120 @@ -216,9 +219,10 @@ priority = 3 //Do this instead of searching for objects in the skull. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, - /obj/item/weapon/wirecutters = 60, /obj/item/weapon/melee/changeling/claw = 20) //Claws. Good for digging, not so much for moving. + allowed_procs = list(IS_WIRECUTTER = 60) + min_duration = 90 max_duration = 120 diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index d54a4aff14..2f2e1cb44a 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -20,9 +20,10 @@ /datum/surgery_step/internal/remove_embryo allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ /obj/item/weapon/material/kitchen/utensil/fork = 20 ) + + allowed_procs = list(IS_WIRECUTTER = 75) blood_level = 2 min_duration = 80 @@ -212,10 +213,11 @@ allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ /obj/item/weapon/material/kitchen/utensil/fork = 20 ) + allowed_procs = list(IS_WIRECUTTER = 75) + min_duration = 60 max_duration = 80 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index a256482e24..a1de76461c 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -28,10 +28,12 @@ /datum/surgery_step/robotics/unscrew_hatch allowed_tools = list( - /obj/item/weapon/screwdriver = 100, /obj/item/weapon/coin = 50, /obj/item/weapon/material/knife = 50 ) + + allowed_procs = list(IS_SCREWDRIVER = 100) + req_open = 0 min_duration = 90 @@ -66,10 +68,11 @@ /datum/surgery_step/robotics/open_hatch allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, - /obj/item/weapon/crowbar = 100, /obj/item/weapon/material/kitchen/utensil = 50 ) + allowed_procs = list(IS_CROWBAR = 100) + min_duration = 30 max_duration = 40 @@ -102,10 +105,11 @@ /datum/surgery_step/robotics/close_hatch allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, - /obj/item/weapon/crowbar = 100, /obj/item/weapon/material/kitchen/utensil = 50 ) + allowed_procs = list(IS_CROWBAR = 100) + min_duration = 70 max_duration = 100 @@ -148,7 +152,7 @@ /datum/surgery_step/robotics/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(istype(tool,/obj/item/weapon/weldingtool)) + if(istype(tool, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/welder = tool if(!welder.isOn() || !welder.remove_fuel(1,user)) return 0 @@ -188,7 +192,7 @@ /datum/surgery_step/robotics/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(istype(tool,/obj/item/stack/cable_coil/)) + if(istype(tool, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = tool if(affected.burn_dam == 0) to_chat(user, "There are no burnt wires here!") @@ -229,9 +233,10 @@ allowed_tools = list( /obj/item/stack/nanopaste = 100, \ /obj/item/weapon/surgical/bonegel = 30, \ - /obj/item/weapon/screwdriver = 70, \ ) + allowed_procs = list(IS_SCREWDRIVER = 100) + min_duration = 70 max_duration = 90 @@ -348,9 +353,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/attach_organ_robotic - allowed_tools = list( - /obj/item/weapon/screwdriver = 100, - ) + allowed_procs = list(IS_SCREWDRIVER = 100) min_duration = 100 max_duration = 120 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b06221e5c9..837e10a5a0 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -10,6 +10,10 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null + + // List of procs that can be called if allowed_tools fails + var/list/allowed_procs = null + // type paths referencing races that this step applies to. var/list/allowed_species = null var/list/disallowed_species = null @@ -23,55 +27,73 @@ //How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 - //returns how well tool is suited for this step - proc/tool_quality(obj/item/tool) - for (var/T in allowed_tools) - if (istype(tool,T)) - return allowed_tools[T] +//returns how well tool is suited for this step +/datum/surgery_step/proc/tool_quality(obj/item/tool) + for (var/T in allowed_tools) + if (istype(tool,T)) + return allowed_tools[T] + + for(var/P in allowed_procs) + switch(P) + if(IS_SCREWDRIVER) + if(tool.is_screwdriver()) + return allowed_procs[P] + if(IS_CROWBAR) + if(tool.is_crowbar()) + return allowed_procs[P] + if(IS_WIRECUTTER) + if(tool.is_wirecutter()) + return allowed_procs[P] + if(IS_WRENCH) + if(tool.is_wrench()) + return allowed_procs[P] + return 0 + + +// Checks if this step applies to the user mob at all +/datum/surgery_step/proc/is_valid_target(mob/living/carbon/human/target) + if(!hasorgans(target)) return 0 - // Checks if this step applies to the user mob at all - proc/is_valid_target(mob/living/carbon/human/target) - if(!hasorgans(target)) - return 0 + if(allowed_species) + for(var/species in allowed_species) + if(target.species.get_bodytype() == species) + return 1 - if(allowed_species) - for(var/species in allowed_species) - if(target.species.get_bodytype() == species) - return 1 + if(disallowed_species) + for(var/species in disallowed_species) + if(target.species.get_bodytype() == species) + return 0 - if(disallowed_species) - for(var/species in disallowed_species) - if(target.species.get_bodytype() == species) - return 0 - - return 1 + return 1 - // checks whether this step can be applied with the given user and target - proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return 0 +// checks whether this step can be applied with the given user and target +/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return 0 - // does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too - proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (can_infect && affected) - spread_germs_to_organ(affected, user) - if (ishuman(user) && prob(60)) - var/mob/living/carbon/human/H = user - if (blood_level) - H.bloody_hands(target,0) - if (blood_level > 1) - H.bloody_body(target,0) - return +// does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too +/datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (can_infect && affected) + spread_germs_to_organ(affected, user) + if (ishuman(user) && prob(60)) + var/mob/living/carbon/human/H = user + if (blood_level) + H.bloody_hands(target,0) + if (blood_level > 1) + H.bloody_body(target,0) + return + +// does stuff to end the step, which is normally print a message + do whatever this step changes +/datum/surgery_step/proc/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return + +// stuff that happens when the step fails +/datum/surgery_step/proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return null - // does stuff to end the step, which is normally print a message + do whatever this step changes - proc/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return - // stuff that happens when the step fails - proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return null /proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user) if(!istype(user) || !istype(E)) return diff --git a/code/modules/surgery/~defines.dm b/code/modules/surgery/~defines.dm index 6b27ac56f5..61f9b143f2 100644 --- a/code/modules/surgery/~defines.dm +++ b/code/modules/surgery/~defines.dm @@ -1 +1 @@ -#undef SURGERY_FAILURE +#undef SURGERY_FAILURE \ No newline at end of file diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 24e599cc31..6d20b619b0 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -91,15 +91,15 @@ var/list/table_icon_cache = list() if(health < maxhealth) switch(health / maxhealth) if(0.0 to 0.5) - user << "It looks severely damaged!" + to_chat(user, "It looks severely damaged!") if(0.25 to 0.5) - user << "It looks damaged!" + to_chat(user, "It looks damaged!") if(0.5 to 1.0) - user << "It has a few scrapes and dents." + to_chat(user, "It has a few scrapes and dents.") /obj/structure/table/attackby(obj/item/weapon/W, mob/user) - if(reinforced && istype(W, /obj/item/weapon/screwdriver)) + if(reinforced && W.is_screwdriver()) remove_reinforced(W, user) if(!reinforced) update_desc() @@ -107,7 +107,7 @@ var/list/table_icon_cache = list() update_material() return 1 - if(carpeted && istype(W, /obj/item/weapon/crowbar)) + if(carpeted && W.is_crowbar()) user.visible_message("\The [user] removes the carpet from \the [src].", "You remove the carpet from \the [src].") new /obj/item/stack/tile/carpet(loc) @@ -124,9 +124,9 @@ var/list/table_icon_cache = list() update_icon() return 1 else - user << "You don't have enough carpet!" + to_chat(user, "You don't have enough carpet!") - if(!reinforced && !carpeted && material && istype(W, /obj/item/weapon/wrench)) + if(!reinforced && !carpeted && material && W.is_wrench()) remove_material(W, user) if(!material) update_connections(1) @@ -137,14 +137,14 @@ var/list/table_icon_cache = list() update_material() return 1 - if(!carpeted && !reinforced && !material && istype(W, /obj/item/weapon/wrench)) + if(!carpeted && !reinforced && !material && W.is_wrench()) dismantle(W, user) return 1 if(health < maxhealth && istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/F = W if(F.welding) - user << "You begin reparing damage to \the [src]." + to_chat(user, "You begin reparing damage to \the [src].") playsound(src, F.usesound, 50, 1) if(!do_after(user, 20 * F.toolspeed) || !F.remove_fuel(1, user)) return @@ -199,19 +199,19 @@ var/list/table_icon_cache = list() /obj/structure/table/proc/reinforce_table(obj/item/stack/material/S, mob/user) if(reinforced) - user << "\The [src] is already reinforced!" + to_chat(user, "\The [src] is already reinforced!") return if(!can_reinforce) - user << "\The [src] cannot be reinforced!" + to_chat(user, "\The [src] cannot be reinforced!") return if(!material) - user << "Plate \the [src] before reinforcing it!" + to_chat(user, "Plate \the [src] before reinforcing it!") return if(flipped) - user << "Put \the [src] back in place before reinforcing it!" + to_chat(user, "Put \the [src] back in place before reinforcing it!") return reinforced = common_material_add(S, user, "reinforc") @@ -236,12 +236,12 @@ var/list/table_icon_cache = list() /obj/structure/table/proc/common_material_add(obj/item/stack/material/S, mob/user, verb) // Verb is actually verb without 'e' or 'ing', which is added. Works for 'plate'/'plating' and 'reinforce'/'reinforcing'. var/material/M = S.get_material() if(!istype(M)) - user << "You cannot [verb]e \the [src] with \the [S]." + to_chat(user, "You cannot [verb]e \the [src] with \the [S].") return null if(manipulating) return M manipulating = 1 - user << "You begin [verb]ing \the [src] with [M.display_name]." + to_chat(user, "You begin [verb]ing \the [src] with [M.display_name].") if(!do_after(user, 20) || !S.use(1)) manipulating = 0 return null @@ -252,7 +252,7 @@ var/list/table_icon_cache = list() // Returns the material to set the table to. /obj/structure/table/proc/common_material_remove(mob/user, material/M, delay, what, type_holding, sound) if(!M.stack_type) - user << "You are unable to remove the [what] from this [src]!" + to_chat(user, "You are unable to remove the [what] from this [src]!") return M if(manipulating) return M @@ -270,13 +270,13 @@ var/list/table_icon_cache = list() manipulating = 0 return null -/obj/structure/table/proc/remove_reinforced(obj/item/weapon/screwdriver/S, mob/user) +/obj/structure/table/proc/remove_reinforced(obj/item/weapon/S, mob/user) reinforced = common_material_remove(user, reinforced, 40 * S.toolspeed, "reinforcements", "screws", S.usesound) -/obj/structure/table/proc/remove_material(obj/item/weapon/wrench/W, mob/user) +/obj/structure/table/proc/remove_material(obj/item/weapon/W, mob/user) material = common_material_remove(user, material, 20 * W.toolspeed, "plating", "bolts", W.usesound) -/obj/structure/table/proc/dismantle(obj/item/weapon/wrench/W, mob/user) +/obj/structure/table/proc/dismantle(obj/item/W, mob/user) if(manipulating) return manipulating = 1 user.visible_message("\The [user] begins dismantling \the [src].", @@ -468,7 +468,8 @@ var/list/table_icon_cache = list() */ /proc/dirs_to_corner_states(list/dirs) - if(!istype(dirs)) return + if(!istype(dirs)) + return var/list/ret = list(NORTHWEST, SOUTHEAST, NORTHEAST, SOUTHWEST) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index b0e5eca83b..a80e8e71e9 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -116,7 +116,7 @@ data["lastTeleData"]["distance"] = last_tele_data.distance data["lastTeleData"]["time"] = last_tele_data.time - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "telescience_console.tmpl", src.name, 400, 450) ui.set_initial_data(data) diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm index 2ab76f315c..21b23ea7f9 100644 --- a/code/modules/vehicles/Securitrain_vr.dm +++ b/code/modules/vehicles/Securitrain_vr.dm @@ -83,7 +83,7 @@ return ..() /obj/vehicle/train/security/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(open && istype(W, /obj/item/weapon/wirecutters)) + if(open && istype(W, /obj/item/weapon/tool/wirecutters)) passenger_allowed = !passenger_allowed user.visible_message("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src].","You [passenger_allowed ? "cut" : "mend"] the load limiter cable.") else diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index f455be67a5..d761dbd6e8 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -1,6 +1,6 @@ -/obj/vehicle/bike/ +/obj/vehicle/bike name = "space-bike" - desc = "Space wheelies! Woo! " + desc = "Space wheelies! Woo!" icon = 'icons/obj/bike.dmi' icon_state = "bike_off" dir = SOUTH @@ -10,24 +10,49 @@ health = 100 maxhealth = 100 + locked = 0 + powered = 1 + fire_dam_coeff = 0.6 brute_dam_coeff = 0.5 var/protection_percent = 60 - var/land_speed = 10 //if 0 it can't go on turf - var/space_speed = 1 + var/land_speed = 1.5 //if 0 it can't go on turf + var/space_speed = 0.5 var/bike_icon = "bike" + var/custom_icon = FALSE + + paint_color = "#ffffff" var/datum/effect/effect/system/ion_trail_follow/ion var/kickstand = 1 /obj/vehicle/bike/New() ..() + cell = new /obj/item/weapon/cell/high(src) ion = new /datum/effect/effect/system/ion_trail_follow() ion.set_up(src) turn_off() - overlays += image('icons/obj/bike.dmi', "[icon_state]_off_overlay", MOB_LAYER + 1) icon_state = "[bike_icon]_off" + update_icon() + +/obj/vehicle/bike/built/New() + ..() + qdel(cell) + cell = null + +/obj/vehicle/bike/random/New() + paint_color = rgb(rand(1,255),rand(1,255),rand(1,255)) + ..() + +/obj/vehicle/bike/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool) && open) + var/new_paint = input("Please select paint color.", "Paint Color", paint_color) as color|null + if(new_paint) + paint_color = new_paint + update_icon() + return + ..() /obj/vehicle/bike/verb/toggle() set name = "Toggle Engine" @@ -36,7 +61,7 @@ if(usr.incapacitated()) return - if(!on) + if(!on && cell && cell.charge > charge_use) turn_on() src.visible_message("\The [src] rumbles to life.", "You hear something rumble deeply.") else @@ -53,8 +78,8 @@ if(kickstand) src.visible_message("You put up \the [src]'s kickstand.") else - if(istype(src.loc,/turf/space)) - usr << " You don't think kickstands work in space..." + if(istype(src.loc,/turf/space) || istype(src.loc, /turf/simulated/floor/water)) + to_chat(usr, " You don't think kickstands work here...") return src.visible_message("You put down \the [src]'s kickstand.") if(pulledby) @@ -63,34 +88,45 @@ kickstand = !kickstand anchored = (kickstand || on) -/obj/vehicle/bike/load(var/atom/movable/C) +/obj/vehicle/bike/load(var/atom/movable/C, var/mob/user as mob) var/mob/living/M = C if(!istype(C)) return 0 if(M.buckled || M.restrained() || !Adjacent(M) || !M.Adjacent(src)) return 0 - return ..(M) + return ..(M, user) -/obj/vehicle/bike/MouseDrop_T(var/atom/movable/C, mob/user as mob) - if(!load(C)) - user << " You were unable to load \the [C] onto \the [src]." +/obj/vehicle/bike/MouseDrop_T(var/atom/movable/C, var/mob/user as mob) + if(!load(C, user)) + to_chat(user, " You were unable to load \the [C] onto \the [src].") return /obj/vehicle/bike/attack_hand(var/mob/user as mob) if(user == load) - unload(load) - user << "You unbuckle yourself from \the [src]" + unload(load, user) + to_chat(user, "You unbuckle yourself from \the [src].") + else if(!load && load(user, user)) + to_chat(user, "You buckle yourself to \the [src].") /obj/vehicle/bike/relaymove(mob/user, direction) if(user != load || !on) - return - return Move(get_step(src, direction)) + return 0 + if(Move(get_step(src, direction))) + return 1 + return 0 /obj/vehicle/bike/Move(var/turf/destination) - if(kickstand) return + if(kickstand) return 0 + if(on && (!cell || cell.charge < charge_use)) + turn_off() + visible_message("\The [src] whines, before its engines wind down.") + return 0 //these things like space, not turf. Dragging shouldn't weigh you down. - if(istype(destination,/turf/space) || pulledby) + if(on && cell) + cell.use(charge_use) + + if(istype(destination,/turf/space) || istype(destination, /turf/simulated/floor/water) || pulledby) if(!space_speed) return 0 move_delay = space_speed @@ -109,6 +145,7 @@ if(pulledby) pulledby.stop_pulling() ..() + /obj/vehicle/bike/turn_off() ion.stop() anchored = kickstand @@ -127,12 +164,74 @@ /obj/vehicle/bike/update_icon() overlays.Cut() + if(custom_icon) + if(on) + var/image/bodypaint = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_a", src.layer) + bodypaint.color = paint_color + overlays += bodypaint + + var/image/overmob = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_overlay", MOB_LAYER + 1) + var/image/overmob_color = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_overlay_a", MOB_LAYER + 1) + overmob.plane = MOB_PLANE + overmob_color.plane = MOB_PLANE + overmob_color.color = paint_color + overlays += overmob + overlays += overmob_color + if(open) + icon_state = "[bike_icon]_on-open" + else + icon_state = "[bike_icon]_on" + else + var/image/bodypaint = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_a", src.layer) + bodypaint.color = paint_color + overlays += bodypaint + + var/image/overmob = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_overlay", MOB_LAYER + 1) + var/image/overmob_color = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_overlay_a", MOB_LAYER + 1) + overmob.plane = MOB_PLANE + overmob_color.plane = MOB_PLANE + overmob_color.color = paint_color + overlays += overmob + overlays += overmob_color + if(open) + icon_state = "[bike_icon]_off-open" + else + icon_state = "[bike_icon]_off" + ..() + return + if(on) - overlays += image('icons/obj/bike.dmi', "[bike_icon]_on_overlay", MOB_LAYER + 1) - icon_state = "[bike_icon]_on" + var/image/bodypaint = image('icons/obj/bike.dmi', "[bike_icon]_on_a", src.layer) + bodypaint.color = paint_color + overlays += bodypaint + + var/image/overmob = image('icons/obj/bike.dmi', "[bike_icon]_on_overlay", MOB_LAYER + 1) + var/image/overmob_color = image('icons/obj/bike.dmi', "[bike_icon]_on_overlay_a", MOB_LAYER + 1) + overmob.plane = MOB_PLANE + overmob_color.plane = MOB_PLANE + overmob_color.color = paint_color + overlays += overmob + overlays += overmob_color + if(open) + icon_state = "[bike_icon]_on-open" + else + icon_state = "[bike_icon]_on" else - overlays += image('icons/obj/bike.dmi', "[bike_icon]_off_overlay", MOB_LAYER + 1) - icon_state = "[bike_icon]_off" + var/image/bodypaint = image('icons/obj/bike.dmi', "[bike_icon]_off_a", src.layer) + bodypaint.color = paint_color + overlays += bodypaint + + var/image/overmob = image('icons/obj/bike.dmi', "[bike_icon]_off_overlay", MOB_LAYER + 1) + var/image/overmob_color = image('icons/obj/bike.dmi', "[bike_icon]_off_overlay_a", MOB_LAYER + 1) + overmob.plane = MOB_PLANE + overmob_color.plane = MOB_PLANE + overmob_color.color = paint_color + overlays += overmob + overlays += overmob_color + if(open) + icon_state = "[bike_icon]_off-open" + else + icon_state = "[bike_icon]_off" ..() @@ -140,4 +239,4 @@ /obj/vehicle/bike/Destroy() qdel(ion) - ..() \ No newline at end of file + ..() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index f9c14af3a5..45cbcd7a13 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -1,4 +1,4 @@ -/obj/vehicle/train/cargo/engine +/obj/vehicle/train/engine name = "cargo train tug" desc = "A ridable electric car designed for pulling cargo trolleys." icon = 'icons/obj/vehicles.dmi' @@ -11,9 +11,11 @@ load_offset_x = 0 mob_offset_y = 7 + var/speed_mod = 1.1 var/car_limit = 3 //how many cars an engine can pull before performance degrades active_engines = 1 - var/obj/item/weapon/key/cargo_train/key + var/obj/item/weapon/key/key + var/key_type = /obj/item/weapon/key/cargo_train /obj/item/weapon/key/cargo_train name = "key" @@ -22,7 +24,7 @@ icon_state = "train_keys" w_class = ITEMSIZE_TINY -/obj/vehicle/train/cargo/trolley +/obj/vehicle/train/trolley name = "cargo train trolley" icon = 'icons/obj/vehicles.dmi' icon_state = "cargo_trailer" @@ -38,15 +40,15 @@ //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/New() +/obj/vehicle/train/engine/New() ..() cell = new /obj/item/weapon/cell/high(src) - key = new(src) + key = new key_type(src) var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs overlays += I turn_off() //so engine verbs are correctly set -/obj/vehicle/train/cargo/engine/Move(var/turf/destination) +/obj/vehicle/train/engine/Move(var/turf/destination) if(on && cell.charge < charge_use) turn_off() update_stats() @@ -62,23 +64,24 @@ return ..() -/obj/vehicle/train/cargo/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(open && istype(W, /obj/item/weapon/wirecutters)) +/obj/vehicle/train/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(open && W.is_wirecutter()) passenger_allowed = !passenger_allowed user.visible_message("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src].","You [passenger_allowed ? "cut" : "mend"] the load limiter cable.") else ..() -/obj/vehicle/train/cargo/engine/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/key/cargo_train)) +/obj/vehicle/train/engine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, key_type)) if(!key) user.drop_item() W.forceMove(src) key = W - verbs += /obj/vehicle/train/cargo/engine/verb/remove_key + verbs += /obj/vehicle/train/engine/verb/remove_key return ..() +/* //cargo trains are open topped, so there is a chance the projectile will hit the mob ridding the train instead /obj/vehicle/train/cargo/bullet_act(var/obj/item/projectile/Proj) if(has_buckled_mobs() && prob(70)) @@ -92,19 +95,20 @@ icon_state = initial(icon_state) + "_open" else icon_state = initial(icon_state) +*/ -/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/train/trolley/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H) return -/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/train/engine/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H) ..() update_stats() -/obj/vehicle/train/cargo/engine/remove_cell(var/mob/living/carbon/human/H) +/obj/vehicle/train/engine/remove_cell(var/mob/living/carbon/human/H) ..() update_stats() -/obj/vehicle/train/cargo/engine/Bump(atom/Obstacle) +/obj/vehicle/train/engine/Bump(atom/Obstacle) var/obj/machinery/door/D = Obstacle var/mob/living/carbon/human/H = load if(istype(D) && istype(H)) @@ -112,7 +116,7 @@ ..() -/obj/vehicle/train/cargo/trolley/Bump(atom/Obstacle) +/obj/vehicle/train/trolley/Bump(atom/Obstacle) if(!lead) return //so people can't knock others over by pushing a trolley around ..() @@ -120,44 +124,44 @@ //------------------------------------------- // Train procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/turn_on() +/obj/vehicle/train/engine/turn_on() if(!key) return else ..() update_stats() - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine + verbs -= /obj/vehicle/train/engine/verb/stop_engine + verbs -= /obj/vehicle/train/engine/verb/start_engine if(on) - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs += /obj/vehicle/train/engine/verb/stop_engine else - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine + verbs += /obj/vehicle/train/engine/verb/start_engine -/obj/vehicle/train/cargo/engine/turn_off() +/obj/vehicle/train/engine/turn_off() ..() - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine + verbs -= /obj/vehicle/train/engine/verb/stop_engine + verbs -= /obj/vehicle/train/engine/verb/start_engine if(!on) - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine + verbs += /obj/vehicle/train/engine/verb/start_engine else - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs += /obj/vehicle/train/engine/verb/stop_engine -/obj/vehicle/train/cargo/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/RunOver(var/mob/living/carbon/human/H) var/list/parts = list(BP_HEAD, BP_TORSO, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) H.apply_effects(5, 5) for(var/i = 0, i < rand(1,3), i++) H.apply_damage(rand(1,5), BRUTE, pick(parts)) -/obj/vehicle/train/cargo/trolley/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/trolley/RunOver(var/mob/living/carbon/human/H) ..() attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") -/obj/vehicle/train/cargo/engine/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/engine/RunOver(var/mob/living/carbon/human/H) ..() if(is_train_head() && istype(load, /mob/living/carbon/human)) @@ -173,7 +177,7 @@ //------------------------------------------- // Interaction procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/relaymove(mob/user, direction) +/obj/vehicle/train/engine/relaymove(mob/user, direction) if(user != load) return 0 @@ -186,7 +190,7 @@ else return ..() -/obj/vehicle/train/cargo/engine/examine(mob/user) +/obj/vehicle/train/engine/examine(mob/user) if(!..(user, 1)) return @@ -196,7 +200,7 @@ user << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition." user << "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%" -/obj/vehicle/train/cargo/engine/verb/start_engine() +/obj/vehicle/train/engine/verb/start_engine() set name = "Start engine" set category = "Vehicle" set src in view(0) @@ -217,7 +221,7 @@ else usr << "[src]'s engine won't start." -/obj/vehicle/train/cargo/engine/verb/stop_engine() +/obj/vehicle/train/engine/verb/stop_engine() set name = "Stop engine" set category = "Vehicle" set src in view(0) @@ -233,7 +237,7 @@ if (!on) usr << "You stop [src]'s engine." -/obj/vehicle/train/cargo/engine/verb/remove_key() +/obj/vehicle/train/engine/verb/remove_key() set name = "Remove key" set category = "Vehicle" set src in view(0) @@ -252,12 +256,12 @@ usr.put_in_hands(key) key = null - verbs -= /obj/vehicle/train/cargo/engine/verb/remove_key + verbs -= /obj/vehicle/train/engine/verb/remove_key //------------------------------------------- // Loading/unloading procs //------------------------------------------- -/obj/vehicle/train/cargo/trolley/load(var/atom/movable/C, var/mob/user) +/obj/vehicle/train/trolley/load(var/atom/movable/C, var/mob/user) if(ismob(C) && !passenger_allowed) return 0 if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !istype(C, /mob/living/carbon/human)) @@ -273,7 +277,7 @@ if(load) return 1 -/obj/vehicle/train/cargo/engine/load(var/atom/movable/C, var/mob/user) +/obj/vehicle/train/engine/load(var/atom/movable/C, var/mob/user) if(!istype(C, /mob/living/carbon/human)) return 0 @@ -283,7 +287,7 @@ //This prevents the object from being interacted with until it has // been unloaded. A dummy object is loaded instead so the loading // code knows to handle it correctly. -/obj/vehicle/train/cargo/trolley/proc/load_object(var/atom/movable/C) +/obj/vehicle/train/trolley/proc/load_object(var/atom/movable/C) if(!isturf(C.loc)) //To prevent loading things from someone's inventory, which wouldn't get handled properly. return 0 if(load || C.anchored) @@ -309,7 +313,7 @@ C.pixel_y = initial(C.pixel_y) C.layer = initial(C.layer) -/obj/vehicle/train/cargo/trolley/unload(var/mob/user, var/direction) +/obj/vehicle/train/trolley/unload(var/mob/user, var/direction) if(istype(load, /datum/vehicle_dummy_load)) var/datum/vehicle_dummy_load/dummy_load = load load = dummy_load.actual_load @@ -322,13 +326,13 @@ // Latching/unlatching procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/latch(obj/vehicle/train/T, mob/user) +/obj/vehicle/train/engine/latch(obj/vehicle/train/T, mob/user) if(!istype(T) || !Adjacent(T)) return 0 //if we are attaching a trolley to an engine we don't care what direction // it is in and it should probably be attached with the engine in the lead - if(istype(T, /obj/vehicle/train/cargo/trolley)) + if(istype(T, /obj/vehicle/train/trolley)) T.attach_to(src, user) else var/T_dir = get_dir(src, T) //figure out where T is wrt src @@ -349,7 +353,7 @@ // more engines increases this limit by car_limit per // engine. //------------------------------------------------------- -/obj/vehicle/train/cargo/engine/update_car(var/train_length, var/active_engines) +/obj/vehicle/train/engine/update_car(var/train_length, var/active_engines) src.train_length = train_length src.active_engines = active_engines @@ -360,9 +364,9 @@ move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) move_delay += config.run_speed //base reference speed - move_delay *= 1.1 //makes cargo trains 10% slower than running when not overweight + move_delay *= speed_mod //makes cargo trains 10% slower than running when not overweight -/obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines) +/obj/vehicle/train/trolley/update_car(var/train_length, var/active_engines) src.train_length = train_length src.active_engines = active_engines diff --git a/code/modules/vehicles/construction.dm b/code/modules/vehicles/construction.dm new file mode 100644 index 0000000000..49021d5fd0 --- /dev/null +++ b/code/modules/vehicles/construction.dm @@ -0,0 +1,274 @@ +/* + * Construction! + */ + +/obj/item/weapon/vehicle_assembly + name = "vehicle assembly" + desc = "The frame of some vehicle." + icon = 'icons/obj/vehicles_64x64.dmi' + icon_state = "quad-frame" + item_state = "buildpipe" + + density = TRUE + slowdown = 10 //It's a vehicle frame, what do you expect? + w_class = 5 + pixel_x = -16 + + var/build_stage = 0 + var/obj/item/weapon/cell/cell = null + +/obj/item/weapon/vehicle_assembly/New() + ..() + icon_state = "[initial(icon_state)][build_stage]" + update_icon() + +/obj/item/weapon/vehicle_assembly/proc/increase_step(var/new_name = null) + build_stage++ + if(new_name) + name = new_name + icon_state = "[initial(icon_state)][build_stage]" + update_icon() + return 1 + +/* + * Quadbike and trailer. + */ + +/obj/item/weapon/vehicle_assembly/quadbike + name = "all terrain vehicle assembly" + desc = "The frame of an ATV." + icon_state = "quad-frame" + +/obj/item/weapon/vehicle_assembly/quadbike/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + ..() + + switch(build_stage) + if(0) + if(istype(W, /obj/item/stack/material/plastic)) + var/obj/item/stack/material/plastic/P = W + if (P.get_amount() < 8) + to_chat(user, "You need eight sheets of plastic to add tires to \the [src].") + return + to_chat(user, "You start to add tires to [src].") + if(do_after(user, 40) && build_stage == 0) + if(P.use(8)) + to_chat(user, "You add tires to \the [src].") + increase_step("wheeled [initial(name)]") + return + + if(1) + if(istype(W, /obj/item/weapon/stock_parts/console_screen)) + user.drop_item() + qdel(W) + to_chat(user, "You add the lights to \the [src].") + increase_step() + return + + if(2) + if(istype(W, /obj/item/weapon/stock_parts/spring)) + user.drop_item() + qdel(W) + to_chat(user, "You add the control system to \the [src].") + increase_step() + return + if(istype(W, /obj/item/stack/material/steel)) + var/obj/item/stack/material/steel/S = W + if(S.get_amount() < 5) + to_chat(user, "You need five sheets of steel to convert \the [src] into a trailer.") + if(do_after(user, 80) && build_stage == 2) + if(S.use(5)) + var/obj/item/weapon/vehicle_assembly/quadtrailer/Trailer = new(src) + Trailer.forceMove(get_turf(src)) + Trailer.increase_step("framed [initial(Trailer.name)]") + to_chat(user, "You convert \the [src] into \the [Trailer].") + user.drop_from_inventory(src) + qdel(src) + return + + if(3) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 2) + to_chat(user, "You need two coils of wire to wire [src].") + return + to_chat(user, "You start to wire [src].") + if(do_after(user, 40) && build_stage == 3) + if(C.use(2)) + to_chat(user, "You wire \the [src].") + increase_step("wired [initial(name)]") + return + + if(4) + if(istype(W, /obj/item/weapon/cell)) + user.drop_item() + W.forceMove(src) + cell = W + to_chat(user, "You add the power supply to \the [src].") + increase_step("powered [initial(name)]") + return + + if(5) + if(istype(W, /obj/item/weapon/stock_parts/motor)) + user.drop_item() + qdel(W) + to_chat(user, "You add the motor to \the [src].") + increase_step() + return + + if(6) + if(istype(W, /obj/item/stack/material/plasteel)) + var/obj/item/stack/material/plasteel/PL = W + if (PL.get_amount() < 2) + to_chat(user, "You need two sheets of plasteel to add reinforcement to \the [src].") + return + to_chat(user, "You start to add reinforcement to [src].") + if(do_after(user, 40) && build_stage == 6) + if(PL.use(2)) + to_chat(user, "You add reinforcement to \the [src].") + increase_step("reinforced [initial(name)]") + return + + if(7) + if(W.is_wrench() || W.is_screwdriver()) + playsound(loc, W.usesound, 50, 1) + to_chat(user, "You begin your finishing touches on \the [src].") + if(do_after(user, 20) && build_stage == 7) + playsound(loc, W.usesound, 30, 1) + var/obj/vehicle/train/engine/quadbike/built/product = new(src) + to_chat(user, "You finish \the [product]") + product.loc = get_turf(src) + product.cell = cell + cell.forceMove(product) + cell = null + user.drop_from_inventory(src) + qdel(src) + return + +/obj/item/weapon/vehicle_assembly/quadtrailer + name = "all terrain trailer" + desc = "The frame of a small trailer." + icon_state = "quadtrailer-frame" + +/obj/item/weapon/vehicle_assembly/quadtrailer/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + ..() + + switch(build_stage) + if(0) + if(istype(W, /obj/item/weapon/vehicle_assembly/quadbike)) + var/obj/item/weapon/vehicle_assembly/quadbike/Q = W + if(Q.build_stage > 2) + to_chat(user, "\The [Q] is too advanced to be of use with \the [src]") + return + user.drop_item() + qdel(W) + increase_step("framed [initial(name)]") + + if(1) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 2) + to_chat(user, "You need two coils of wire to wire [src].") + return + to_chat(user, "You start to wire [src].") + if(do_after(user, 40) && build_stage == 1) + if(C.use(2)) + to_chat(user, "You wire \the [src].") + increase_step("wired [initial(name)]") + return + + if(2) + if(W.is_screwdriver()) + playsound(loc, W.usesound, 50, 1) + to_chat(user, "You close up \the [src].") + var/obj/vehicle/train/trolley/trailer/product = new(src) + product.loc = get_turf(src) + user.drop_from_inventory(src) + qdel(src) + return + +/* + * Space bike. + */ + +/obj/item/weapon/vehicle_assembly/spacebike + name = "vehicle assembly" + desc = "The frame of some vehicle." + icon = 'icons/obj/bike.dmi' + icon_state = "bike-frame" + + pixel_x = 0 + +/obj/item/weapon/vehicle_assembly/spacebike/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + switch(build_stage) + if(0) + if(istype(W, /obj/item/weapon/tank/jetpack) || istype(W, /obj/item/borg/upgrade/jetpack)) + user.drop_item() + qdel(W) + increase_step() + + if(1) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 2) + to_chat(user, "You need two coils of wire to wire [src].") + return + to_chat(user, "You start to wire [src].") + if(do_after(user, 40) && build_stage == 1) + if(C.use(2)) + to_chat(user, "You wire \the [src].") + increase_step("wired [initial(name)]") + return + + if(2) + if(istype(W, /obj/item/stack/material/plastic)) + var/obj/item/stack/material/plastic/P = W + if (P.get_amount() < 3) + to_chat(user, "You need three sheets of plastic to add a seat to \the [src].") + return + to_chat(user, "You start to add a seat to [src].") + if(do_after(user, 40) && build_stage == 2) + if(P.use(3)) + to_chat(user, "You add a seat to \the [src].") + increase_step("seated [initial(name)]") + return + + if(3) + if(istype(W, /obj/item/weapon/stock_parts/console_screen)) + user.drop_item() + qdel(W) + to_chat(user, "You add the lights to \the [src].") + increase_step() + return + + if(4) + if(istype(W, /obj/item/weapon/stock_parts/spring)) + user.drop_item() + qdel(W) + to_chat(user, "You add the control system to \the [src].") + increase_step() + return + + if(5) + if(istype(W, /obj/item/weapon/cell)) + user.drop_item() + W.forceMove(src) + cell = W + to_chat(user, "You add the power supply to \the [src].") + increase_step("powered [initial(name)]") + return + + if(6) + if(W.is_wrench() || W.is_screwdriver()) + playsound(loc, W.usesound, 50, 1) + to_chat(user, "You begin your finishing touches on \the [src].") + if(do_after(user, 20) && build_stage == 6) + playsound(loc, W.usesound, 30, 1) + var/obj/vehicle/bike/built/product = new(src) + to_chat(user, "You finish \the [product]") + product.loc = get_turf(src) + product.cell = cell + cell.forceMove(product) + cell = null + user.drop_from_inventory(src) + qdel(src) + return diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm new file mode 100644 index 0000000000..99adccf459 --- /dev/null +++ b/code/modules/vehicles/quad.dm @@ -0,0 +1,259 @@ + +/obj/vehicle/train/engine/quadbike //It's a train engine, so it can tow trailers. + name = "electric all terrain vehicle" + desc = "A ridable electric ATV designed for all terrain. Except space." + icon = 'icons/obj/vehicles_64x64.dmi' + icon_state = "quad" + on = 0 + powered = 1 + locked = 0 + + load_item_visible = 1 + load_offset_x = 0 + mob_offset_y = 5 + + pixel_x = -16 + speed_mod = 0.45 + car_limit = 1 //It gets a trailer. That's about it. + active_engines = 1 + key_type = /obj/item/weapon/key/quadbike + + var/frame_state = "quad" //Custom-item proofing! + var/custom_frame = FALSE + + paint_color = "#ffffff" + + var/outdoors_speed_mod = 0.7 //The general 'outdoors' speed. I.E., the general difference you'll be at when driving outside. + +/obj/vehicle/train/engine/quadbike/New() + cell = new /obj/item/weapon/cell/high(src) + key = new key_type(src) + turn_off() + +/obj/vehicle/train/engine/quadbike/built/New() + key = new key_type(src) + turn_off() + +/obj/vehicle/train/engine/quadbike/random/New() + paint_color = rgb(rand(1,255),rand(1,255),rand(1,255)) + ..() + +/obj/item/weapon/key/quadbike + name = "key" + desc = "A keyring with a small steel key, and a blue fob reading \"ZOOM!\"." + icon = 'icons/obj/vehicles.dmi' + icon_state = "quad_keys" + w_class = ITEMSIZE_TINY + +/obj/vehicle/train/engine/quadbike/Move(var/turf/destination) + var/turf/T = get_turf(src) + ..() //Move it move it, so we can test it test it. + if(T != get_turf(src) && !istype(destination, T.type)) //Did we move at all, and are we changing turf types? + if(istype(destination, /turf/simulated/floor/water)) + speed_mod = outdoors_speed_mod * 4 //It kind of floats due to its tires, but it is slow. + else if(istype(destination, /turf/simulated/floor/outdoors/rocks)) + speed_mod = initial(speed_mod) //Rocks are good, rocks are solid. + else if(istype(destination, /turf/simulated/floor/outdoors/dirt) || istype(destination, /turf/simulated/floor/outdoors/grass)) + speed_mod = outdoors_speed_mod //Dirt and grass are the outdoors bench mark. + else if(istype(destination, /turf/simulated/floor/outdoors/mud)) + speed_mod = outdoors_speed_mod * 1.5 //Gets us roughly 1. Mud may be fun, but it's not the best. + else if(istype(destination, /turf/simulated/floor/outdoors/snow)) + speed_mod = outdoors_speed_mod * 1.7 //Roughly a 1.25. Snow is coarse and wet and gets everywhere, especially your electric motors. + else + speed_mod = initial(speed_mod) + update_car(train_length, active_engines) + switch(dir) //Due to being a Big Boy sprite, it has to have special pixel shifting to look 'normal' when being driven. + if(1) + pixel_y = -6 + if(2) + pixel_y = -6 + if(4) + pixel_y = 0 + if(8) + pixel_y = 0 + + +/obj/vehicle/train/engine/quadbike/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool) && open) + var/new_paint = input("Please select paint color.", "Paint Color", paint_color) as color|null + if(new_paint) + paint_color = new_paint + update_icon() + return + ..() + +/obj/vehicle/train/engine/quadbike/update_icon() + ..() + overlays.Cut() + if(custom_frame) + var/image/Bodypaint = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_a", layer = src.layer) + Bodypaint.color = paint_color + overlays += Bodypaint + + var/image/Overmob = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs + var/image/Overmob_color = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color. + Overmob.plane = MOB_PLANE + Overmob_color.plane = MOB_PLANE + Overmob_color.color = paint_color + + overlays += Overmob + overlays += Overmob_color + return + + var/image/Bodypaint = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_a", layer = src.layer) + Bodypaint.color = paint_color + overlays += Bodypaint + + var/image/Overmob = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs + var/image/Overmob_color = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color. + Overmob.plane = MOB_PLANE + Overmob_color.plane = MOB_PLANE + Overmob_color.color = paint_color + + overlays += Overmob + overlays += Overmob_color + +/obj/vehicle/train/engine/quadbike/Bump(atom/Obstacle) + if(!istype(Obstacle, /atom/movable)) + return + var/atom/movable/A = Obstacle + + if(!A.anchored) + var/turf/T = get_step(A, dir) + if(isturf(T)) + A.Move(T) //bump things away when hit + + if(istype(A, /mob/living)) + var/mob/living/M = A + visible_message("[src] knocks over [M]!") + M.apply_effects(2, 2) // Knock people down for a short moment + M.apply_damages(8 / move_delay) // Smaller amount of damage than a tug, since this will always be possible because Quads don't have safeties. + var/list/throw_dirs = list(1, 2, 4, 8, 5, 6, 9, 10) + if(!emagged) // By the power of Bumpers TM, it won't throw them ahead of the quad's path unless it's emagged or the person turns. + health -= round(M.mob_size / 2) + throw_dirs -= dir + throw_dirs -= get_dir(M, src) //Don't throw it AT the quad either. + else + health -= round(M.mob_size / 4) // Less damage if they actually put the point in to emag it. + var/turf/T2 = get_step(A, pick(throw_dirs)) + M.throw_at(T2, 1, 1, src) + if(istype(load, /mob/living/carbon/human)) + var/mob/living/D = load + to_chat(D, "You hit [M]!") + add_attack_logs(D,M,"Ran over with [src.name]") + + +/obj/vehicle/train/engine/quadbike/RunOver(var/mob/living/carbon/human/H) + ..() + var/list/throw_dirs = list(1, 2, 4, 8, 5, 6, 9, 10) + if(!emagged) + throw_dirs -= dir + if(tow) + throw_dirs -= get_dir(H, tow) //Don't throw it at the trailer either. + var/turf/T = get_step(H, pick(throw_dirs)) + H.throw_at(T, 1, 1, src) + +/* + * Trailer bits and bobs. + */ + +/obj/vehicle/train/trolley/trailer + name = "all terrain trailer" + icon = 'icons/obj/vehicles_64x64.dmi' + icon_state = "quadtrailer" + anchored = 0 + passenger_allowed = 1 + buckle_lying = 1 + locked = 0 + + load_item_visible = 1 + load_offset_x = 0 + load_offset_y = 13 + mob_offset_y = 16 + + pixel_x = -16 + + paint_color = "#ffffff" + +/obj/vehicle/train/trolley/trailer/random/New() + paint_color = rgb(rand(1,255),rand(1,255),rand(1,255)) + ..() + +/obj/vehicle/train/trolley/trailer/proc/update_load() + if(load) + var/y_offset = load_offset_y + if(istype(load, /mob/living)) + y_offset = mob_offset_y + load.pixel_x = (initial(load.pixel_x) + 16 + load_offset_x + pixel_x) //Base location for the sprite, plus 16 to center it on the 'base' sprite of the trailer, plus the x shift of the trailer, then shift it by the same pixel_x as the trailer to track it. + load.pixel_y = (initial(load.pixel_y) + y_offset + pixel_y) //Same as the above. + return 1 + return 0 + +/obj/vehicle/train/trolley/trailer/New() + ..() + update_icon() + +/obj/vehicle/train/trolley/trailer/Move() + ..() + if(lead) + switch(dir) //Due to being a Big Boy sprite, it has to have special pixel shifting to look 'normal'. + if(1) + pixel_y = -10 + pixel_x = -16 + if(2) + pixel_y = 0 + pixel_x = -16 + if(4) + pixel_y = 0 + pixel_x = -25 + if(8) + pixel_y = 0 + pixel_x = -5 + else + pixel_x = initial(pixel_x) + pixel_y = initial(pixel_y) + update_load() + +/obj/vehicle/train/trolley/trailer/Bump(atom/Obstacle) + if(!istype(Obstacle, /atom/movable)) + return + var/atom/movable/A = Obstacle + + if(!A.anchored) + var/turf/T = get_step(A, dir) + if(isturf(T)) + A.Move(T) //bump things away when hit + + if(istype(A, /mob/living)) + var/mob/living/M = A + visible_message("[src] knocks over [M]!") + M.apply_effects(1, 1) + M.apply_damages(8 / move_delay) + if(load) + M.apply_damages(4/move_delay) + var/list/throw_dirs = list(1, 2, 4, 8, 5, 6, 9, 10) + if(!emagged) + throw_dirs -= dir + var/turf/T2 = get_step(A, pick(throw_dirs)) + M.throw_at(T2, 1, 1, src) + if(istype(load, /mob/living/carbon/human)) + var/mob/living/D = load + to_chat(D, "You hit [M]!") + add_attack_logs(D,M,"Ran over with [src.name]") + +/obj/vehicle/train/trolley/trailer/update_icon() + ..() + overlays.Cut() + + var/image/Bodypaint = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[initial(icon_state)]_a", layer = src.layer) + Bodypaint.color = paint_color + overlays += Bodypaint + +/obj/vehicle/train/trolley/trailer/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool) && open) + var/new_paint = input("Please select paint color.", "Paint Color", paint_color) as color|null + if(new_paint) + paint_color = new_paint + update_icon() + return + ..() diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm index 3d7892b4b2..d7acf46150 100644 --- a/code/modules/vehicles/rover_vr.dm +++ b/code/modules/vehicles/rover_vr.dm @@ -82,7 +82,7 @@ return ..() /obj/vehicle/train/rover/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(open && istype(W, /obj/item/weapon/wirecutters)) + if(open && istype(W, /obj/item/weapon/tool/wirecutters)) passenger_allowed = !passenger_allowed user.visible_message("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src].","You [passenger_allowed ? "cut" : "mend"] the load limiter cable.") else diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 42f97676ad..6db4400f81 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -17,6 +17,7 @@ var/obj/vehicle/train/lead var/obj/vehicle/train/tow + var/open_top = TRUE //------------------------------------------- // Standard procs @@ -58,6 +59,19 @@ D << "You hit [M]!" add_attack_logs(D,M,"Ran over with [src.name]") +//trains are commonly open topped, so there is a chance the projectile will hit the mob riding the train instead +/obj/vehicle/train/bullet_act(var/obj/item/projectile/Proj) + if(has_buckled_mobs() && prob(70)) + var/mob/living/L = pick(buckled_mobs) + L.bullet_act(Proj) + return + ..() + +/obj/vehicle/train/update_icon() + if(open) + icon_state = initial(icon_state) + "_open" + else + icon_state = initial(icon_state) //------------------------------------------- // Vehicle procs diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 0b454f6bc5..cac6065b64 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -34,6 +34,8 @@ var/obj/item/weapon/cell/cell var/charge_use = 5 //set this to adjust the amount of power the vehicle uses per move + var/paint_color = "#666666" //For vehicles with special paint overlays. + var/atom/movable/load //all vehicles can take a load, since they should all be a least drivable var/load_item_visible = 1 //set if the loaded item should be overlayed on the vehicle sprite var/load_offset_x = 0 //pixel_x offset for item overlay @@ -50,7 +52,7 @@ //spawn the cell you want in each vehicle /obj/vehicle/Destroy() - qdel_null(riding_datum) + QDEL_NULL(riding_datum) return ..() //BUCKLE HOOKS @@ -118,13 +120,13 @@ if(istype(W, /obj/item/weapon/hand_labeler)) return if(mechanical) - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) if(!locked) open = !open update_icon() - user << "Maintenance panel is now [open ? "opened" : "closed"]." + to_chat(user, "Maintenance panel is now [open ? "opened" : "closed"].") playsound(src, W.usesound, 50, 1) - else if(istype(W, /obj/item/weapon/crowbar) && cell && open) + else if(W.is_crowbar() && cell && open) remove_cell(user) else if(istype(W, /obj/item/weapon/cell) && !cell && open) @@ -139,11 +141,11 @@ playsound(src, T.usesound, 50, 1) user.visible_message("[user] repairs [src]!"," You repair [src]!") else - user << "Unable to repair with the maintenance panel closed." + to_chat(user, "Unable to repair with the maintenance panel closed.") else - user << "[src] does not need a repair." + to_chat(user, "[src] does not need a repair.") else - user << "Unable to repair while [src] is off." + to_chat(user, "Unable to repair while [src] is off.") else if(hasvar(W,"force") && hasvar(W,"damtype")) user.setClickCooldown(user.get_attack_speed(W)) @@ -237,7 +239,7 @@ emagged = 1 if(locked) locked = 0 - user << "You bypass [src]'s controls." + to_chat(user, "You bypass [src]'s controls.") return TRUE /obj/vehicle/proc/explode() @@ -300,7 +302,7 @@ C.forceMove(src) cell = C powercheck() - usr << "You install [C] in [src]." + to_chat(usr, "You install [C] in [src].") /obj/vehicle/proc/remove_cell(var/mob/living/carbon/human/H) if(!mechanical) @@ -308,7 +310,7 @@ if(!cell) return - usr << "You remove [cell] from [src]." + to_chat(usr, "You remove [cell] from [src].") cell.forceMove(get_turf(H)) H.put_in_hands(cell) cell = null diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm index 026bea5e5d..73e43be704 100644 --- a/code/modules/virus2/centrifuge.dm +++ b/code/modules/virus2/centrifuge.dm @@ -9,8 +9,8 @@ var/obj/item/weapon/reagent_containers/glass/beaker/vial/sample = null var/datum/disease2/disease/virus2 = null -/obj/machinery/computer/centrifuge/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/screwdriver)) +/obj/machinery/computer/centrifuge/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.is_screwdriver()) return ..(O,user) if(default_unfasten_wrench(user, O, 20)) @@ -18,7 +18,7 @@ if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial)) if(sample) - user << "\The [src] is already loaded." + to_chat(user, "\The [src] is already loaded.") return sample = O @@ -26,7 +26,7 @@ O.loc = src user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) src.attack_hand(user) @@ -74,7 +74,7 @@ data["antibodies"] = antigens2string(A.data["antibodies"], none=null) data["is_antibody_sample"] = 1 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "isolation_centrifuge.tmpl", src.name, 400, 500) ui.set_initial_data(data) @@ -98,7 +98,7 @@ if (..()) return 1 var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) @@ -160,7 +160,7 @@ sample.reagents.remove_reagent("blood", amt) sample.reagents.add_reagent("antibodies", amt, data) - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) update_icon() ping("\The [src] pings, \"Antibody isolated.\"") @@ -170,7 +170,7 @@ dish.virus2 = virus2 virus2 = null - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) update_icon() ping("\The [src] pings, \"Pathogen isolated.\"") diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm index d9a875050d..b5db3fa96a 100644 --- a/code/modules/virus2/diseasesplicer.dm +++ b/code/modules/virus2/diseasesplicer.dm @@ -11,8 +11,8 @@ var/splicing = 0 var/scanning = 0 -/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) +/obj/machinery/computer/diseasesplicer/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.is_screwdriver()) return ..(I,user) if(default_unfasten_wrench(user, I, 20)) @@ -21,7 +21,7 @@ if(istype(I,/obj/item/weapon/virusdish)) var/mob/living/carbon/c = user if (dish) - user << "\The [src] is already loaded." + to_chat(user, "\The [src] is already loaded.") return dish = I @@ -29,7 +29,7 @@ I.loc = src if(istype(I,/obj/item/weapon/diseasedisk)) - user << "You upload the contents of the disk onto the buffer." + to_chat(user, "You upload the contents of the disk onto the buffer.") memorybank = I:effect species_buffer = I:species analysed = I:analysed @@ -81,7 +81,7 @@ else data["info"] = "No dish loaded." - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "disease_splicer.tmpl", src.name, 400, 600) ui.set_initial_data(data) @@ -95,12 +95,12 @@ scanning -= 1 if(!scanning) ping("\The [src] pings, \"Analysis complete.\"") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(splicing) splicing -= 1 if(!splicing) ping("\The [src] pings, \"Splicing operation complete.\"") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(burning) burning -= 1 if(!burning) @@ -122,13 +122,13 @@ d.species = species_buffer ping("\The [src] pings, \"Backup disk saved.\"") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/computer/diseasesplicer/Topic(href, href_list) if(..()) return 1 var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm index c94370cebd..3ecad1d691 100644 --- a/code/modules/virus2/dishincubator.dm +++ b/code/modules/virus2/dishincubator.dm @@ -29,7 +29,7 @@ O.loc = src user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) src.attack_hand(user) return @@ -45,7 +45,7 @@ O.loc = src user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) src.attack_hand(user) @@ -85,7 +85,7 @@ for (var/ID in virus) data["blood_already_infected"] = virus[ID] - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "dish_incubator.tmpl", src.name, 400, 600) ui.set_initial_data(data) @@ -104,7 +104,7 @@ foodsupply -= 1 dish.growth += 3 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(radiation) if(radiation > 50 & prob(5)) @@ -117,24 +117,24 @@ else if(prob(5)) dish.virus2.minormutate() radiation -= 1 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(toxins && prob(5)) dish.virus2.infectionchance -= 1 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(toxins > 50) dish.growth = 0 dish.virus2 = null - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) else if(!dish) on = 0 icon_state = "incubator" - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if(beaker) if(foodsupply < 100 && beaker.reagents.remove_reagent("virusfood",5)) if(foodsupply + 10 <= 100) foodsupply += 10 - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) if (locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100) for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list) @@ -143,13 +143,13 @@ if(toxins > 100) toxins = 100 break - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) /obj/machinery/disease2/incubator/Topic(href, href_list) if (..()) return 1 var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index d992a9c99b..8fa61e173b 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -43,7 +43,7 @@ S.loc = src user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) update_icon() src.attack_hand(user) @@ -103,7 +103,7 @@ "name" = entry.fields["name"], \ "description" = replacetext(desc, "\n", "")) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "pathogenic_isolator.tmpl", src.name, 400, 500) ui.set_initial_data(data) @@ -119,14 +119,14 @@ virus2 = null ping("\The [src] pings, \"Viral strain isolated.\"") - nanomanager.update_uis(src) + GLOB.nanomanager.update_uis(src) update_icon() /obj/machinery/disease2/isolator/Topic(href, href_list) if (..()) return 1 var/mob/user = usr - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + var/datum/nanoui/ui = GLOB.nanomanager.get_open_ui(user, src, "main") src.add_fingerprint(user) diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm index e1d6a0f6c1..ff9ab4ccac 100644 --- a/code/modules/vore/eating/contaminate_vr.dm +++ b/code/modules/vore/eating/contaminate_vr.dm @@ -25,8 +25,6 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi') /obj/item/proc/can_gurgle() if(flags & PHORONGUARD) return FALSE - else if(phoronproof == TRUE) - return FALSE else if(unacidable) return FALSE else diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index 9e62b46e28..69f74c3e8a 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -79,7 +79,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/roiz/proc/RemoveHood_roiz() icon_state = "coatroiz" item_state = "coatroiz_mob" - suittoggled = 0 + hood_up = 0 if(ishuman(hood.loc)) var/mob/living/carbon/H = hood.loc H.unEquip(hood, 1) @@ -87,7 +87,7 @@ hood.loc = src /obj/item/clothing/suit/storage/hooded/wintercoat/roiz/proc/ToggleHood_roiz() - if(!suittoggled) + if(!hood_up) if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.wear_suit != src) @@ -98,7 +98,7 @@ return else H.equip_to_slot_if_possible(hood,slot_head,0,0,1) - suittoggled = 1 + hood_up = 1 icon_state = "coatroiz_t" item_state = "coatroiz_mob_t" H.update_inv_wear_suit() @@ -730,11 +730,11 @@ /obj/item/weapon/storage/belt/utility/fluff/vulpine/New() ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) + new /obj/item/weapon/tool/screwdriver(src) + new /obj/item/weapon/tool/wrench(src) new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/weapon/wirecutters(src) + new /obj/item/weapon/tool/crowbar(src) + new /obj/item/weapon/tool/wirecutters(src) new /obj/item/device/multitool(src) new /obj/item/stack/cable_coil(src, 30, "red") @@ -1546,7 +1546,7 @@ Departamental Swimsuits, for general use /obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat/proc/RemoveHood_kilano() icon_state = "kilanocoat" item_state = "kilanocoat_mob" - suittoggled = 0 + hood_up = 0 if(ishuman(hood.loc)) var/mob/living/carbon/H = hood.loc H.unEquip(hood, 1) @@ -1554,7 +1554,7 @@ Departamental Swimsuits, for general use hood.loc = src /obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat/proc/ToggleHood_kilano() - if(!suittoggled) + if(!hood_up) if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.wear_suit != src) @@ -1565,7 +1565,7 @@ Departamental Swimsuits, for general use return else H.equip_to_slot_if_possible(hood,slot_head,0,0,1) - suittoggled = 1 + hood_up = 1 icon_state = "kilanocoat_t" item_state = "kilanocoat_mob_t" H.update_inv_wear_suit() @@ -1683,7 +1683,7 @@ Departamental Swimsuits, for general use name = "Phi Vietsi's Bone Signet Ring" desc = "A signet ring belonging to Phi Vietsi, carved from the bones of something long extinct, as a ward against bad luck." var/signet_name = "Phi Vietsi" - + icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "vietsi_ring" diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 06d133c441..d9ad9f3d0c 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -618,6 +618,7 @@ name = "\improper SMG magazine (9mm armor-piercing)" ammo_type = /obj/item/ammo_casing/a9mm/ap +/* Seems to have been de-coded? /obj/item/ammo_magazine/m9mml/flash name = "\improper SMG magazine (9mm flash)" ammo_type = /obj/item/ammo_casing/a9mmf @@ -629,6 +630,7 @@ /obj/item/ammo_magazine/m9mml/practice name = "\improper SMG magazine (9mm practice)" ammo_type = /obj/item/ammo_casing/a9mmp +*/ //.357 special ammo /obj/item/ammo_magazine/s357/stun diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 05e6289716..e527479b2d 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1225,8 +1225,8 @@ for(var/obj/item/device/perfect_tele_beacon/B in beacons) B.tele_hand = null beacons.Cut() - qdel_null(power_source) - qdel_null(spk) + QDEL_NULL(power_source) + QDEL_NULL(spk) return ..() /obj/item/device/perfect_tele/update_icon() diff --git a/code/modules/vore/weight/fitness_machines_vr.dm b/code/modules/vore/weight/fitness_machines_vr.dm index d43d76976f..0785c778b5 100644 --- a/code/modules/vore/weight/fitness_machines_vr.dm +++ b/code/modules/vore/weight/fitness_machines_vr.dm @@ -55,7 +55,7 @@ "A honk emits from the punching bag as you hit it") /obj/machinery/fitness/heavy/attackby(obj/item/W, var/mob/living/user) - if(istype(W, /obj/item/weapon/wrench)) + if(W.is_wrench()) src.add_fingerprint(user) user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].") anchored = !anchored diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index b6999a4a67..f5575721e5 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -45,7 +45,7 @@ /obj/item/weapon/material/knife/butch, /obj/item/weapon/caution, /obj/item/weapon/caution/cone, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/clipboard, /obj/item/weapon/cell, /obj/item/weapon/surgical/circular_saw, @@ -59,9 +59,9 @@ /obj/item/weapon/pickaxe, /obj/item/weapon/shovel, /obj/item/weapon/weldingtool, - /obj/item/weapon/wirecutters, - /obj/item/weapon/wrench, - /obj/item/weapon/screwdriver, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/grenade/chem_grenade/cleaner, /obj/item/weapon/grenade/chem_grenade/metalfoam) diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm index 42e8408c45..39cf1776e6 100644 --- a/code/modules/xenoarcheaology/finds/find_spawning.dm +++ b/code/modules/xenoarcheaology/finds/find_spawning.dm @@ -146,11 +146,11 @@ if(13) item_type = "tool" if(prob(25)) - new_item = new /obj/item/weapon/wrench(src.loc) + new_item = new /obj/item/weapon/tool/wrench(src.loc) else if(prob(25)) - new_item = new /obj/item/weapon/crowbar(src.loc) + new_item = new /obj/item/weapon/tool/crowbar(src.loc) else - new_item = new /obj/item/weapon/screwdriver(src.loc) + new_item = new /obj/item/weapon/tool/screwdriver(src.loc) additional_desc = "[pick("It doesn't look safe.",\ "You wonder what it was used for",\ "There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains on it")]." @@ -417,11 +417,11 @@ var/list/alien_stuff = list( /obj/item/device/multitool/alien, /obj/item/stack/cable_coil/alien, - /obj/item/weapon/crowbar/alien, - /obj/item/weapon/screwdriver/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/screwdriver/alien, /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/wirecutters/alien, - /obj/item/weapon/wrench/alien, + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/weapon/tool/wrench/alien, /obj/item/weapon/surgical/FixOVein/alien, /obj/item/weapon/surgical/bone_clamp/alien, /obj/item/weapon/surgical/cautery/alien, diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index 156a59799e..003a5639da 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -150,7 +150,7 @@ data["rad_shield_on"] = rad_shield // 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) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm index ac56f7de92..c85307f3ee 100644 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm @@ -24,7 +24,7 @@ M.weakened = max(M.weakened, 3) cell.charge -= power_use if(prob(5)) - M << "[pick("You feel tingly","You feel like floating","It is hard to speak","You can barely move")]." + to_chat(M, "[pick("You feel tingly","You feel like floating","It is hard to speak","You can barely move")].") for(var/obj/item/I in T) if(!suspension_field.contents.len) @@ -81,7 +81,7 @@ if(anchored) activate() else - usr << "You are unable to activate [src] until it is properly secured on the ground." + to_chat(usr, "You are unable to activate [src] until it is properly secured on the ground.") else deactivate() else if(href_list["insertcard"]) @@ -91,9 +91,9 @@ I.loc = src auth_card = I if(attempt_unlock(I, usr)) - usr << "You insert [I], the console flashes \'Access granted.\'" + to_chat(usr, "You insert [I], the console flashes \'Access granted.\'") else - usr << "You insert [I], the console flashes \'Access denied.\'" + to_chat(usr, "You insert [I], the console flashes \'Access denied.\'") else if(href_list["ejectcard"]) if(auth_card) if(ishuman(usr)) @@ -122,44 +122,44 @@ icon_state = "suspension0" cell = null - user << "You remove the power cell" + to_chat(user, "You remove the power cell") /obj/machinery/suspension_gen/attackby(obj/item/weapon/W as obj, mob/user as mob) if(!locked && !suspension_field && default_deconstruction_screwdriver(user, W)) return - else if (istype(W, /obj/item/weapon/wrench)) + else if(W.is_wrench()) if(!suspension_field) if(anchored) anchored = 0 else anchored = 1 playsound(loc, W.usesound, 50, 1) - user << "You wrench the stabilising legs [anchored ? "into place" : "up against the body"]." + to_chat(user, "You wrench the stabilising legs [anchored ? "into place" : "up against the body"].") if(anchored) desc = "It is resting securely on four stubby legs." else desc = "It has stubby legs bolted up against it's body for stabilising." else - user << "You are unable to secure [src] while it is active!" + to_chat(user, "You are unable to secure [src] while it is active!") else if (istype(W, /obj/item/weapon/cell)) if(panel_open) if(cell) - user << "There is a power cell already installed." + to_chat(user, "There is a power cell already installed.") else user.drop_item() W.loc = src cell = W - user << "You insert the power cell." + to_chat(user, "You insert the power cell.") icon_state = "suspension1" else if(istype(W, /obj/item/weapon/card)) var/obj/item/weapon/card/I = W if(!auth_card) if(attempt_unlock(I, user)) - user << "You swipe [I], the console flashes \'Access granted.\'" + to_chat(user, "You swipe [I], the console flashes \'Access granted.\'") else - user << "You swipe [I], console flashes \'Access denied.\'" + to_chat(user, "You swipe [I], console flashes \'Access denied.\'") else - user << "Remove [auth_card] first." + to_chat(user, "Remove [auth_card] first.") /obj/machinery/suspension_gen/proc/attempt_unlock(var/obj/item/weapon/card/C, var/mob/user) if(!panel_open) @@ -207,7 +207,7 @@ var/turf/T = get_turf(suspension_field) for(var/mob/living/M in T) - M << "You no longer feel like floating." + to_chat(M, "You no longer feel like floating.") M.weakened = min(M.weakened, 3) src.visible_message("\icon[src] [src] deactivates with a gentle shudder.") @@ -225,7 +225,7 @@ set category = "Object" if(anchored) - usr << "You cannot rotate [src], it has been firmly fixed to the floor." + to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.") else set_dir(turn(dir, 90)) @@ -235,7 +235,7 @@ set category = "Object" if(anchored) - usr << "You cannot rotate [src], it has been firmly fixed to the floor." + to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.") else set_dir(turn(dir, -90)) diff --git a/code/modules/xenobio2/machinery/core_extractor.dm b/code/modules/xenobio2/machinery/core_extractor.dm index e772558fcc..8bb5bc42fb 100644 --- a/code/modules/xenobio2/machinery/core_extractor.dm +++ b/code/modules/xenobio2/machinery/core_extractor.dm @@ -32,16 +32,16 @@ /obj/machinery/slime/extractor/attackby(var/obj/item/W, var/mob/user) //Let's try to deconstruct first. - if(istype(W, /obj/item/weapon/screwdriver) && !inuse) + if(W.is_screwdriver() && !inuse) default_deconstruction_screwdriver(user, W) return - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) default_deconstruction_crowbar(user, W) return if(panel_open) - user << "Close the panel first!" + to_chat(user, "Close the panel first!") var/obj/item/weapon/grab/G = W @@ -49,7 +49,7 @@ return ..() if(G.state < 2) - user << "You need a better grip to do that!" + to_chat(user, "You need a better grip to do that!") return move_into_extractor(user,G.affecting) @@ -62,20 +62,20 @@ /obj/machinery/slime/extractor/proc/move_into_extractor(var/mob/user,var/mob/living/victim) if(src.occupant) - user << "The core extractor is full, empty it first!" + to_chat(user, "The core extractor is full, empty it first!") return if(inuse) - user << "The core extractor is locked and running, wait for it to finish." + to_chat(user, "The core extractor is locked and running, wait for it to finish.") return - if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) ) - user << "This is not a suitable subject for the core extractor!" + if(!(istype(victim, /mob/living/simple_animal/xeno/slime))) + to_chat(user, "This is not a suitable subject for the core extractor!") return var/mob/living/simple_animal/xeno/slime/S = victim if(S.is_child) - user << "This subject is not developed enough for the core extractor!" + to_chat(user, "This subject is not developed enough for the core extractor!") return user.visible_message("[user] starts to put [victim] into the core extractor!") diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index 98c2fa8160..76bab91b59 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -24,7 +24,7 @@ if(genes.len) var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobiological Data", "No", "Yes") if(src && user && genes && choice && choice == "Yes" && user.Adjacent(get_turf(src))) - user << "You wipe the disk data." + to_chat(user, "You wipe the disk data.") name = initial(name) desc = initial(name) genes = list() @@ -67,24 +67,24 @@ return if(istype(W,/obj/item/weapon/disk/xenobio)) if(loaded_disk) - user << "There is already a data disk loaded." + to_chat(user, "There is already a data disk loaded.") return else var/obj/item/weapon/disk/xenobio/B = W if(B.genes && B.genes.len) if(!disk_needs_genes) - user << "That disk already has gene data loaded." + to_chat(user, "That disk already has gene data loaded.") return else if(disk_needs_genes) - user << "That disk does not have any gene data loaded." + to_chat(user, "That disk does not have any gene data loaded.") return user.drop_from_inventory(W) W.forceMove(src) loaded_disk = W - user << "You load [W] into [src]." + to_chat(user, "You load [W] into [src].") return ..() @@ -137,14 +137,14 @@ /obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/xenoproduct)) if(product) - user << "There is already a xenobiological product loaded." + to_chat(user, "There is already a xenobiological product loaded.") return else var/obj/item/xenoproduct/B = W user.drop_from_inventory(B) B.forceMove(src) product = B - user << "You load [B] into [src]." + to_chat(user, "You load [B] into [src].") return ..() @@ -180,7 +180,7 @@ data["hasGenetics"] = 0 data["sourceName"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "xenobio_isolator.tmpl", "B.P.D. Analyzer UI", 470, 450) ui.set_initial_data(data) @@ -280,7 +280,7 @@ if(istype(W,/obj/item/weapon/grab)) var/obj/item/weapon/grab/G = W if(occupant) - user << "There is already an organism loaded." + to_chat(user, "There is already an organism loaded.") return else if(isxeno(G.affecting)) @@ -289,9 +289,9 @@ user.drop_from_inventory(G) X.forceMove(src) occupant = X - user << "You load [X] into [src]." + to_chat(user, "You load [X] into [src]." else - user << "This specimen is incompatible with the machinery!" + to_chat(user, "This specimen is incompatible with the machinery!") return ..() @@ -329,7 +329,7 @@ else data["loaded"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "xenobio_editor.tmpl", "biological genetic bombarder UI", 470, 450) ui.set_initial_data(data) @@ -374,15 +374,15 @@ /obj/machinery/xenobio/editor/proc/move_into_editor(var/mob/user,var/mob/living/victim) if(src.occupant) - user << "The [src] is full, empty it first!" + to_chat(user, "The [src] is full, empty it first!") return if(in_use) - user << "The [src] is locked and running, wait for it to finish." + to_chat(user, "The [src] is locked and running, wait for it to finish.") return if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) ) - user << "This is not a suitable subject for the [src]!" + to_chat(user, "This is not a suitable subject for the [src]!") return user.visible_message("[user] starts to put [victim] into the [src]!") diff --git a/code/modules/xenobio2/machinery/injector.dm b/code/modules/xenobio2/machinery/injector.dm index dc9bad89f1..c181f1f104 100644 --- a/code/modules/xenobio2/machinery/injector.dm +++ b/code/modules/xenobio2/machinery/injector.dm @@ -93,11 +93,11 @@ /obj/machinery/xenobio2/manualinjector/attackby(var/obj/item/W, var/mob/user) //Let's try to deconstruct first. - if(istype(W, /obj/item/weapon/screwdriver)) + if(W.is_screwdriver()) default_deconstruction_screwdriver(user, W) return - if(istype(W, /obj/item/weapon/crowbar) && !occupant) + if(W.is_crowbar() && !occupant) default_deconstruction_crowbar(user, W) return diff --git a/code/modules/xenobio2/machinery/injector_computer.dm b/code/modules/xenobio2/machinery/injector_computer.dm index 9dff9d43fb..4632505c73 100644 --- a/code/modules/xenobio2/machinery/injector_computer.dm +++ b/code/modules/xenobio2/machinery/injector_computer.dm @@ -81,7 +81,7 @@ data["occupantHealth"] = null data["occupantHealthMax"] = null - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "xenobio_computer.tmpl", "Injector Control Console UI", 470, 450) ui.set_initial_data(data) diff --git a/code/modules/xenobio2/machinery/slime_replicator.dm b/code/modules/xenobio2/machinery/slime_replicator.dm index 077e330008..8fb54929fe 100644 --- a/code/modules/xenobio2/machinery/slime_replicator.dm +++ b/code/modules/xenobio2/machinery/slime_replicator.dm @@ -30,11 +30,11 @@ /obj/machinery/slime/replicator/attackby(var/obj/item/W, var/mob/user) //Let's try to deconstruct first. - if(istype(W, /obj/item/weapon/screwdriver) && !inuse) + if(W.is_screwdriver() && !inuse) default_deconstruction_screwdriver(user, W) return - if(istype(W, /obj/item/weapon/crowbar)) + if(W.is_crowbar()) default_deconstruction_crowbar(user, W) return diff --git a/config/names/first_name_skrell.txt b/config/names/first_name_skrell.txt index 122b093765..964a52dabe 100644 --- a/config/names/first_name_skrell.txt +++ b/config/names/first_name_skrell.txt @@ -1,600 +1,600 @@ -Kaexae -Xaaq'xuer -Xaaq'taq -Kae'xer -Xeq'aeq'qerr -Ke'xuer -Xeteq -Kae'xum -Kerrker -Kerrquex'xum -Taeqxuq -Kae'quex'xeu -Keqaeq'xeu -Ke'ter -Xue'xerr -Keqqux'kea -Qerrqux -Kerrxae'qer -Taeqxerr -Kerr'xum -Kaexuer -Qerr'xaeq'xeu -Xue'xum -Xeqteq'qerr -Kerrkeax'qux -Xaaq'qux -Xae'xuer -Xertaq'qux -Xum'xuer -Keq'taq'kea -Keq'quex'xeu -Qerraeq -Xeq'xum -Xeq'qux'xum -Xer'xuq -Keq'teq -Kae'keax -Keqxer -Kae'xerr'xeu -Xaequx -Ke'teq'xum -Xaaqxerr -Xer'keax'kea -Qerrxae'qux -Xae'xer -Qerrteq -Xeq'xuer -Xe'xaeq'xum -Xeteq'qerr -Xaaq'aeq'xeu -Xae'xaeq'qer -Keaeq'xum -Xaaq'teq -Keq'ker -Ke'keax -Kexum'kea -Xeq'xum -Qerr'xaeq'kea -Xexum -Taeq'xer'xe -Qerraeq -Xeq'keax'qux -Xuequx -Kexuq -Teqxaeq'qer -Xeqtaq'qer -Xaexuq -Xueaeq'qux -Taeqxae -Keqxuer -Xum'aeq -Xeqkeax'kea -Kerrxuer -Xaeteq -Keqxaeq'qerr -Xum'quex -Taeq'teq -Xer'xaeq -Teq'taq -Xe'xuq -Kerrxer -Kerr'xaeq'kea -Xeqteq -Xeqxuq'qerr -Kerr'xum'xe -Xe'qux -Xexaeq -Qerrxaeq'qer -Teqqux'kea -Ke'xuer -Xerqux'xeu -Kaexaeq'xeu -Xeq'qux -Xeker -Ke'xae -Kerrxae'qux -Kae'aeq'qerr -Xeq'qux'xeu -Xeqquex'xeu -Kerr'xaeq -Kerr'aeq -Xaaqxae -Xertaq'qux -Xaaq'ker'xum -Kae'xuer'xe -Xue'aeq'xeu -Qerr'xuq -Kequex'qerr -Xer'ter'xe -Qerr'ter'qerr -Xeq'keax'qux -Keq'ker -Ke'qux'qerr -Xumter'qux -Xue'qux'xe -Xaeaeq -Xumxuer'xeu -Kerr'xuq'qux -Keq'xaeq -Xum'xuq'xeu -Kerr'xer -Xae'keax -Kequex -Kae'qux -Keqkeax -Qarrker -Xaaqker'xum -Xue'xaeq'qux -Taeq'xaeq'xe -Xue'xerr -Teqkeax -Xaaq'keax -Ke'xaeq'qer -Kerrxuer -Kaeter'qux -Qarr'xerr -Xerxum'qux -Xumqux -Taeq'teq'xeu -Qerrxuer'qer -Xe'ker -Qerrter'kea -Kaeteq'qux -Teq'xuer'xum -Ke'xae'xeu -Teqxuq'qer -Keq'xaeq -Xaaq'xae -Xum'xer -Xeter -Xaaq'quex'kea -Kexum -Qarrkeax'qer -Keq'xerr -Qarrxerr'qerr -Qarrxerr'qer -Xer'ker -Xaexum'xe -Kaexerr'qux -Xuexum -Xaaq'xer -Qerr'quex -Qerr'ker -Xum'teq'qerr -Kerrxaeq -Xeq'xae -Xue'aeq'xe -Qarr'xuer -Qarr'xerr'qerr -Kaexerr'xum -Kaeter'xum -Xuexuq -Xuekeax'xeu -Xaaq'ker -Keqxer -Teq'xer -Qarrker -Xer'ter -Xae'ter'kea -Ke'quex'xe -Xaeter -Xer'xae -Qarr'xae'xum -Xeqxuq -Keqter'xum -Xeker -Taeqxerr'qer -Keqxer'kea -Xumquex -Xaaq'xuq -Kerrxum -Xexerr -Xerxerr'qerr -Xaaq'xerr -Xum'ker'qer -Xequx -Xer'xae -Kaexerr'xe -Xe'taq -Xeq'xuer'qerr -Xue'taq -Teqxer -Xaaq'xerr'xe -Xer'quex'xum -Xaeaeq -Taeqaeq -Xaeter'qer -Xerkeax -Xuequex'xe -Keqxerr -Taeqxae'qer -Teqqux -Xae'quex'qux -Xe'xum -Xaaqxer -Xeq'aeq'xum -Xuexuq'qerr -Xe'taq'qux -Qarr'xae -Xe'keax'qer -Qerrxum'qerr -Xer'xer -Qarr'quex'qerr -Taeq'xer'qux -Taeqtaq -Ke'aeq'xum -Xueter -Kaeker -Xeter'kea -Qarrter -Qerrxae -Xaaqxum'xeu -Xum'xuer -Xe'xae -Qarrter'qer -Kequx -Kerr'aeq'kea -Teq'taq'kea -Xexum'qerr -Qerr'quex'xeu -Xeker'qux -Kerr'quex'qerr -Xum'ker'qer -Keqxuq'xeu -Keqxuq'xeu -Xer'teq'xum -Kaeker'qerr -Xumtaq -Xexuer -Xueter'xum -Kaeteq -Ke'teq -Qerrxuq -Teq'xum'qerr -Xaaq'xae -Keter'xum -Xeqqux -Xae'taq -Qerrtaq'qux -Keq'ter -Xaequex'xum -Kaeter -Xaaqtaq -Kae'xer'qer -Kaequx -Kae'xum -Taeqaeq'qux -Kexaeq'kea -Xer'xae'qer -Xae'ker -Xue'xuer -Xeq'taq'xe -Kaexae'qux -Teq'xae'xe -Teq'xuer -Qerrqux'xeu -Xuexaeq -Kerr'xuq'kea -Xerquex'kea -Keq'ker -Kaexum -Kerrquex -Kexer -Keq'quex'qerr -Xae'xae -Qerr'ker -Kexerr -Xaaqquex -Keq'quex'xum -Xerter'qux -Xuexaeq'xe -Xae'xuq'kea -Kae'xuer'kea -Xer'xum'kea -Xer'quex'kea -Kerrxuq'qux -Qerrxuer -Xeq'xerr'qerr -Qarr'xuq'qux -Xaaq'xuq -Xerxaeq'qux -Xertaq -Kerr'teq'xeu -Xer'aeq'kea -Xe'ter'qerr -Teq'xae -Kerrxerr -Taeqxaeq -Xueker -Keqxae'qerr -Taeqkeax -Kexaeq'xum -Xuekeax'xe -Xumxum -Xeq'ter'xeu -Taeqquex -Xer'xer -Keqxae'xeu -Kaexum -Keq'xaeq -Qerr'quex'xum -Kaexuq'qux -Xaequx'xe -Kae'xum -Keqkeax -Kexuer -Xeter -Xexuq'xeu -Xe'aeq -Xum'keax'xe -Xer'ker'xum -Xerxuq'qer -Xaekeax'xe -Kaequex'xe -Keqxer -Xeker'qer -Teqker'qerr -Keqxer -Teq'xer -Xaaq'xum -Qerrter -Ke'xuer -Kae'xerr'xeu -Qarrteq'kea -Teq'aeq'qux -Teq'xum'qux -Xae'xuq -Xaekeax -Qerr'teq -Kerrteq'qer -Keqxerr -Qarr'xerr'xum -Kekeax -Xae'xae'kea -Xumteq -Xuequx'qer -Qarr'xer -Taeq'xuq -Ke'xum -Kae'xerr -Xumxum'qerr -Keqteq'qer -Teqker'qerr -Qarr'keax -Xeqxer -Qarrxuq'xe -Keqkeax -Xaaq'ter'kea -Xaaq'aeq -Kerr'keax -Keqxuer -Qerr'xerr'kea -Qarr'teq'qerr -Kerr'teq'qerr -Qarr'taq'qer -Qarrxuer'xeu -Kae'ter -Keaeq'xum -Teqker'xum -Xaaq'aeq'qux -Keq'qux'qer -Xae'xuq'kea -Ke'xuq'qux -Qerr'qux -Xaaq'qux'qer -Xue'keax -Xaaqxerr'kea -Taeqteq'xe -Xuetaq -Xaaqxuq'qerr -Qerrxae'xe -Xeqxuer -Xeqxaeq'xum -Xue'ker'qer -Kekeax'xeu -Qarr'xae'qux -Xae'ker'qux -Qarr'xum'xum -Xum'xaeq'xeu -Qerrxer'qerr -Xaeaeq'qer -Xaaq'quex'qerr -Qerr'aeq -Xum'taq -Kerr'xum'xeu -Xaeaeq'kea -Taeqxerr'kea -Taeq'qux'xum -Xaaq'xae -Qerr'quex -Qarrker -Qarr'qux'xeu -Xaaqaeq'qux -Xuetaq -Xaexum -Xae'xaeq -Xaaq'taq'xe -Kerrxaeq'xe -Kae'xer'kea -Kerr'xae'qer -Keqxum'qer -Qarr'taq'xe -Taeq'quex'qer -Xum'xuer -Xer'xuq'qerr -Xeqteq'xum -Xae'xaeq -Xaekeax'qer -Xeq'xum -Qarr'ter'qer -Qarr'xerr -Kae'xae'xum -Taeq'xuq -Kae'xuq'kea -Xue'xum'qux -Xae'xerr -Taeq'xaeq -Xaexuq -Xaequx -Keqter -Kae'xuer -Xaaqaeq -Kae'taq'xeu -Keqter'kea -Taeqaeq -Xae'qux -Qerr'qux -Qarr'xuq'kea -Xeq'xuer -Keqqux -Xaaq'taq'xum -Kae'xerr -Xue'xae'kea -Qarraeq -Taeq'xum -Qerrxer -Teq'xum -Xaaq'ker'xeu -Kerr'xaeq -Xaaq'xerr'xeu -Xaaqxuq'xeu -Taeqter'qer -Teq'xuer -Xaaqker -Qerr'xaeq'qux -Qerr'quex'qux -Xaaqxerr -Keqtaq'xeu -Kerrxuq -Taeqxuq'xe -Taeq'xuq -Xexuq'qerr -Taeq'xae'qux -Kerr'aeq'qer -Teqtaq -Qerr'taq'xeu -Xeqxaeq'kea -Keteq -Qarr'quex'xeu -Kae'xer -Xaaqxuer -Xum'xum -Taeqquex'xeu -Xue'teq -Xumxuq -Teqxer -Xaeteq'xum -Kaexum'qerr -Xaaq'qux -Xe'xum -Qerr'xaeq -Keqxaeq'xe -Xum'xerr -Xuexaeq'xum -Xaaq'xum'kea -Xumteq -Teq'keax'xeu -Xaequex -Ke'ker'kea -Xeq'xuq -Xaaq'quex'xeu -Teq'teq'qux -Qarr'keax -Xequex -Xeqqux -Xerxerr'xum -Kae'teq -Xaaq'qux'xum -Xuetaq'qer -Xaexerr -Xexuer -Xaaq'xerr'qer -Xexae'kea -Xaexuq'qer -Xe'ker -Keq'quex'kea -Qarrqux'qux -Xaaqtaq'kea -Teqxae -Teq'xuq -Ke'aeq -Xae'aeq -Kerr'ter -Xue'xuq'qer -Ke'xaeq -Taeq'xuer'xeu -Xeq'xae -Qerrkeax'kea -Xae'xuq -Teq'keax -Qerr'teq'qer -Kaexuq'xe -Qarrxaeq'xeu -Qerrtaq -Xe'ker'xum -Kaexuer -Teqxuer'xe -Xumxuer'kea -Kerr'xuer -Xer'teq'xum -Xumteq'qerr -Ke'quex -Taeq'aeq'qerr -Xue'ter'xe -Xeq'xae'xeu -Xer'xum -Qarr'xae -Qerrker'qux -Taeq'keax'xeu -Xum'quex'xeu -Kae'ter -Xe'quex'xe -Keqxum -Kerr'quex'qer -Xaaqxae'qer -Xaaqteq'qer -Keqqux -Teq'aeq -Keteq -Xumxae'xum -Xumxum -Qarrxaeq'kea -Keker -Xeq'aeq'qer -Teqter -Qarrxaeq'kea -Teq'quex -Keqxum -Teq'xuer -Xumter'kea -Qarr'xae -Xae'xuer'xeu -Xaaqxaeq'kea -Qerr'xuq'xeu -Xum'xae'qux -Xumxaeq -Xumxum -Kexum'xe -Kae'aeq -Xer'teq -Qarrxerr'xum -Taeq'taq -Taeq'taq'qux -Kaexum'xeu -Xumtaq -Xae'xer -Kerr'ker -Qarr'xum'qer -Qerr'xuer'qux -Xue'qux'xe -Qerr'qux'xum -Teqquex'qerr -Taeqquex -Qarrxerr -Ketaq -Xekeax -Kequex -Xetaq -Ke'xae'xe -Teq'quex'qux +Kaexae +Xaaq'xuer +Xaaq'taq +Kae'xer +Xeq'aeq'qerr +Ke'xuer +Xeteq +Kae'xum +Kerrker +Kerrquex'xum +Taeqxuq +Kae'quex'xeu +Keqaeq'xeu +Ke'ter +Xue'xerr +Keqqux'kea +Qerrqux +Kerrxae'qer +Taeqxerr +Kerr'xum +Kaexuer +Qerr'xaeq'xeu +Xue'xum +Xeqteq'qerr +Kerrkeax'qux +Xaaq'qux +Xae'xuer +Xertaq'qux +Xum'xuer +Keq'taq'kea +Keq'quex'xeu +Qerraeq +Xeq'xum +Xeq'qux'xum +Xer'xuq +Keq'teq +Kae'keax +Keqxer +Kae'xerr'xeu +Xaequx +Ke'teq'xum +Xaaqxerr +Xer'keax'kea +Qerrxae'qux +Xae'xer +Qerrteq +Xeq'xuer +Xe'xaeq'xum +Xeteq'qerr +Xaaq'aeq'xeu +Xae'xaeq'qer +Keaeq'xum +Xaaq'teq +Keq'ker +Ke'keax +Kexum'kea +Xeq'xum +Qerr'xaeq'kea +Xexum +Taeq'xer'xe +Qerraeq +Xeq'keax'qux +Xuequx +Kexuq +Teqxaeq'qer +Xeqtaq'qer +Xaexuq +Xueaeq'qux +Taeqxae +Keqxuer +Xum'aeq +Xeqkeax'kea +Kerrxuer +Xaeteq +Keqxaeq'qerr +Xum'quex +Taeq'teq +Xer'xaeq +Teq'taq +Xe'xuq +Kerrxer +Kerr'xaeq'kea +Xeqteq +Xeqxuq'qerr +Kerr'xum'xe +Xe'qux +Xexaeq +Qerrxaeq'qer +Teqqux'kea +Ke'xuer +Xerqux'xeu +Kaexaeq'xeu +Xeq'qux +Xeker +Ke'xae +Kerrxae'qux +Kae'aeq'qerr +Xeq'qux'xeu +Xeqquex'xeu +Kerr'xaeq +Kerr'aeq +Xaaqxae +Xertaq'qux +Xaaq'ker'xum +Kae'xuer'xe +Xue'aeq'xeu +Qerr'xuq +Kequex'qerr +Xer'ter'xe +Qerr'ter'qerr +Xeq'keax'qux +Keq'ker +Ke'qux'qerr +Xumter'qux +Xue'qux'xe +Xaeaeq +Xumxuer'xeu +Kerr'xuq'qux +Keq'xaeq +Xum'xuq'xeu +Kerr'xer +Xae'keax +Kequex +Kae'qux +Keqkeax +Qarrker +Xaaqker'xum +Xue'xaeq'qux +Taeq'xaeq'xe +Xue'xerr +Teqkeax +Xaaq'keax +Ke'xaeq'qer +Kerrxuer +Kaeter'qux +Qarr'xerr +Xerxum'qux +Xumqux +Taeq'teq'xeu +Qerrxuer'qer +Xe'ker +Qerrter'kea +Kaeteq'qux +Teq'xuer'xum +Ke'xae'xeu +Teqxuq'qer +Keq'xaeq +Xaaq'xae +Xum'xer +Xeter +Xaaq'quex'kea +Kexum +Qarrkeax'qer +Keq'xerr +Qarrxerr'qerr +Qarrxerr'qer +Xer'ker +Xaexum'xe +Kaexerr'qux +Xuexum +Xaaq'xer +Qerr'quex +Qerr'ker +Xum'teq'qerr +Kerrxaeq +Xeq'xae +Xue'aeq'xe +Qarr'xuer +Qarr'xerr'qerr +Kaexerr'xum +Kaeter'xum +Xuexuq +Xuekeax'xeu +Xaaq'ker +Keqxer +Teq'xer +Qarrker +Xer'ter +Xae'ter'kea +Ke'quex'xe +Xaeter +Xer'xae +Qarr'xae'xum +Xeqxuq +Keqter'xum +Xeker +Taeqxerr'qer +Keqxer'kea +Xumquex +Xaaq'xuq +Kerrxum +Xexerr +Xerxerr'qerr +Xaaq'xerr +Xum'ker'qer +Xequx +Xer'xae +Kaexerr'xe +Xe'taq +Xeq'xuer'qerr +Xue'taq +Teqxer +Xaaq'xerr'xe +Xer'quex'xum +Xaeaeq +Taeqaeq +Xaeter'qer +Xerkeax +Xuequex'xe +Keqxerr +Taeqxae'qer +Teqqux +Xae'quex'qux +Xe'xum +Xaaqxer +Xeq'aeq'xum +Xuexuq'qerr +Xe'taq'qux +Qarr'xae +Xe'keax'qer +Qerrxum'qerr +Xer'xer +Qarr'quex'qerr +Taeq'xer'qux +Taeqtaq +Ke'aeq'xum +Xueter +Kaeker +Xeter'kea +Qarrter +Qerrxae +Xaaqxum'xeu +Xum'xuer +Xe'xae +Qarrter'qer +Kequx +Kerr'aeq'kea +Teq'taq'kea +Xexum'qerr +Qerr'quex'xeu +Xeker'qux +Kerr'quex'qerr +Xum'ker'qer +Keqxuq'xeu +Keqxuq'xeu +Xer'teq'xum +Kaeker'qerr +Xumtaq +Xexuer +Xueter'xum +Kaeteq +Ke'teq +Qerrxuq +Teq'xum'qerr +Xaaq'xae +Keter'xum +Xeqqux +Xae'taq +Qerrtaq'qux +Keq'ter +Xaequex'xum +Kaeter +Xaaqtaq +Kae'xer'qer +Kaequx +Kae'xum +Taeqaeq'qux +Kexaeq'kea +Xer'xae'qer +Xae'ker +Xue'xuer +Xeq'taq'xe +Kaexae'qux +Teq'xae'xe +Teq'xuer +Qerrqux'xeu +Xuexaeq +Kerr'xuq'kea +Xerquex'kea +Keq'ker +Kaexum +Kerrquex +Kexer +Keq'quex'qerr +Xae'xae +Qerr'ker +Kexerr +Xaaqquex +Keq'quex'xum +Xerter'qux +Xuexaeq'xe +Xae'xuq'kea +Kae'xuer'kea +Xer'xum'kea +Xer'quex'kea +Kerrxuq'qux +Qerrxuer +Xeq'xerr'qerr +Qarr'xuq'qux +Xaaq'xuq +Xerxaeq'qux +Xertaq +Kerr'teq'xeu +Xer'aeq'kea +Xe'ter'qerr +Teq'xae +Kerrxerr +Taeqxaeq +Xueker +Keqxae'qerr +Taeqkeax +Kexaeq'xum +Xuekeax'xe +Xumxum +Xeq'ter'xeu +Taeqquex +Xer'xer +Keqxae'xeu +Kaexum +Keq'xaeq +Qerr'quex'xum +Kaexuq'qux +Xaequx'xe +Kae'xum +Keqkeax +Kexuer +Xeter +Xexuq'xeu +Xe'aeq +Xum'keax'xe +Xer'ker'xum +Xerxuq'qer +Xaekeax'xe +Kaequex'xe +Keqxer +Xeker'qer +Teqker'qerr +Keqxer +Teq'xer +Xaaq'xum +Qerrter +Ke'xuer +Kae'xerr'xeu +Qarrteq'kea +Teq'aeq'qux +Teq'xum'qux +Xae'xuq +Xaekeax +Qerr'teq +Kerrteq'qer +Keqxerr +Qarr'xerr'xum +Kekeax +Xae'xae'kea +Xumteq +Xuequx'qer +Qarr'xer +Taeq'xuq +Ke'xum +Kae'xerr +Xumxum'qerr +Keqteq'qer +Teqker'qerr +Qarr'keax +Xeqxer +Qarrxuq'xe +Keqkeax +Xaaq'ter'kea +Xaaq'aeq +Kerr'keax +Keqxuer +Qerr'xerr'kea +Qarr'teq'qerr +Kerr'teq'qerr +Qarr'taq'qer +Qarrxuer'xeu +Kae'ter +Keaeq'xum +Teqker'xum +Xaaq'aeq'qux +Keq'qux'qer +Xae'xuq'kea +Ke'xuq'qux +Qerr'qux +Xaaq'qux'qer +Xue'keax +Xaaqxerr'kea +Taeqteq'xe +Xuetaq +Xaaqxuq'qerr +Qerrxae'xe +Xeqxuer +Xeqxaeq'xum +Xue'ker'qer +Kekeax'xeu +Qarr'xae'qux +Xae'ker'qux +Qarr'xum'xum +Xum'xaeq'xeu +Qerrxer'qerr +Xaeaeq'qer +Xaaq'quex'qerr +Qerr'aeq +Xum'taq +Kerr'xum'xeu +Xaeaeq'kea +Taeqxerr'kea +Taeq'qux'xum +Xaaq'xae +Qerr'quex +Qarrker +Qarr'qux'xeu +Xaaqaeq'qux +Xuetaq +Xaexum +Xae'xaeq +Xaaq'taq'xe +Kerrxaeq'xe +Kae'xer'kea +Kerr'xae'qer +Keqxum'qer +Qarr'taq'xe +Taeq'quex'qer +Xum'xuer +Xer'xuq'qerr +Xeqteq'xum +Xae'xaeq +Xaekeax'qer +Xeq'xum +Qarr'ter'qer +Qarr'xerr +Kae'xae'xum +Taeq'xuq +Kae'xuq'kea +Xue'xum'qux +Xae'xerr +Taeq'xaeq +Xaexuq +Xaequx +Keqter +Kae'xuer +Xaaqaeq +Kae'taq'xeu +Keqter'kea +Taeqaeq +Xae'qux +Qerr'qux +Qarr'xuq'kea +Xeq'xuer +Keqqux +Xaaq'taq'xum +Kae'xerr +Xue'xae'kea +Qarraeq +Taeq'xum +Qerrxer +Teq'xum +Xaaq'ker'xeu +Kerr'xaeq +Xaaq'xerr'xeu +Xaaqxuq'xeu +Taeqter'qer +Teq'xuer +Xaaqker +Qerr'xaeq'qux +Qerr'quex'qux +Xaaqxerr +Keqtaq'xeu +Kerrxuq +Taeqxuq'xe +Taeq'xuq +Xexuq'qerr +Taeq'xae'qux +Kerr'aeq'qer +Teqtaq +Qerr'taq'xeu +Xeqxaeq'kea +Keteq +Qarr'quex'xeu +Kae'xer +Xaaqxuer +Xum'xum +Taeqquex'xeu +Xue'teq +Xumxuq +Teqxer +Xaeteq'xum +Kaexum'qerr +Xaaq'qux +Xe'xum +Qerr'xaeq +Keqxaeq'xe +Xum'xerr +Xuexaeq'xum +Xaaq'xum'kea +Xumteq +Teq'keax'xeu +Xaequex +Ke'ker'kea +Xeq'xuq +Xaaq'quex'xeu +Teq'teq'qux +Qarr'keax +Xequex +Xeqqux +Xerxerr'xum +Kae'teq +Xaaq'qux'xum +Xuetaq'qer +Xaexerr +Xexuer +Xaaq'xerr'qer +Xexae'kea +Xaexuq'qer +Xe'ker +Keq'quex'kea +Qarrqux'qux +Xaaqtaq'kea +Teqxae +Teq'xuq +Ke'aeq +Xae'aeq +Kerr'ter +Xue'xuq'qer +Ke'xaeq +Taeq'xuer'xeu +Xeq'xae +Qerrkeax'kea +Xae'xuq +Teq'keax +Qerr'teq'qer +Kaexuq'xe +Qarrxaeq'xeu +Qerrtaq +Xe'ker'xum +Kaexuer +Teqxuer'xe +Xumxuer'kea +Kerr'xuer +Xer'teq'xum +Xumteq'qerr +Ke'quex +Taeq'aeq'qerr +Xue'ter'xe +Xeq'xae'xeu +Xer'xum +Qarr'xae +Qerrker'qux +Taeq'keax'xeu +Xum'quex'xeu +Kae'ter +Xe'quex'xe +Keqxum +Kerr'quex'qer +Xaaqxae'qer +Xaaqteq'qer +Keqqux +Teq'aeq +Keteq +Xumxae'xum +Xumxum +Qarrxaeq'kea +Keker +Xeq'aeq'qer +Teqter +Qarrxaeq'kea +Teq'quex +Keqxum +Teq'xuer +Xumter'kea +Qarr'xae +Xae'xuer'xeu +Xaaqxaeq'kea +Qerr'xuq'xeu +Xum'xae'qux +Xumxaeq +Xumxum +Kexum'xe +Kae'aeq +Xer'teq +Qarrxerr'xum +Taeq'taq +Taeq'taq'qux +Kaexum'xeu +Xumtaq +Xae'xer +Kerr'ker +Qarr'xum'qer +Qerr'xuer'qux +Xue'qux'xe +Qerr'qux'xum +Teqquex'qerr +Taeqquex +Qarrxerr +Ketaq +Xekeax +Kequex +Xetaq +Ke'xae'xe +Teq'quex'qux diff --git a/config/names/last_name_skrell.txt b/config/names/last_name_skrell.txt index 5f67fbc536..393c07b6b6 100644 --- a/config/names/last_name_skrell.txt +++ b/config/names/last_name_skrell.txt @@ -1,600 +1,600 @@ -Xer'taq'qer -Xaaq'ter'qux -Xaaq'xuer -Xerxuer'xum -Qarrqux -Xueaeq'qux -Xe'aeq -Keqter -Xaexer -Kaeteq -Ke'aeq'xeu -Kerrxum -Teqxuq'xeu -Xexaeq -Qerr'xerr'xum -Xaeker'qux -Kexer'kea -Ke'aeq -Keqxae'kea -Qarraeq'xe -Xuekeax -Keq'quex -Kae'quex'qux -Qerr'taq'xum -Taeq'taq'xum -Kae'xaeq'xe -Xaaq'teq'qux -Teqker -Qerrxum'xeu -Xeq'xaeq'xe -Kae'keax -Xue'xae -Taeq'taq -Keter'xeu -Xumker'xe -Teqteq -Xexuer -Qerrxerr -Kaequex'qerr -Kaequx'xe -Xum'xaeq -Xe'taq -Xuexer -Xe'qux'xeu -Xe'xerr'kea -Qerr'xum -Xaaqtaq -Xuexum'xum -Qerrxer -Xaexuq -Xeq'aeq -Xaaq'xaeq -Xerqux -Xeq'xuq'xeu -Kaexum -Taeqteq'xeu -Kerrter'qux -Xeq'teq -Teqxae'xe -Xae'ker'kea -Keqxuq -Xumxae'kea -Xeq'xerr'kea -Kae'quex -Kae'ter -Teqter'xe -Xeq'xerr'xeu -Xerxum'qux -Xe'qux -Qarr'aeq -Xue'xum'xe -Xaaq'ter'qux -Teq'xer -Kerrtaq -Qerr'aeq -Xaaq'aeq -Xaaqxuer -Qerr'quex -Kaeker -Xae'taq -Teq'xaeq -Xexuq -Keqqux -Kaeker -Xeqxum -Xae'taq'qerr -Kexerr -Ke'xerr'qux -Xeraeq'xum -Kae'qux'qux -Xerkeax'xum -Qarrxum -Kaexuer -Qerrquex -Kerr'xer -Xeq'taq -Xeqker -Kerrquex'xum -Xeteq -Qarrxuer -Xaaqqux'qerr -Xae'xer -Xae'xae -Taeqxuer'qerr -Xumqux'qux -Xuexerr'qerr -Ke'xae'xum -Xerxuer -Xeqtaq -Xeqquex -Xuekeax -Keq'xuq'qerr -Xaeter -Xumxerr -Xeqxaeq'xe -Xae'ker -Qerr'ker -Xeq'aeq -Kae'keax -Qerrkeax -Xeqxerr -Keqxaeq -Xae'xuq -Kerrkeax'qer -Qarrxum'xum -Teq'xum'xeu -Kerrxer -Xe'xum -Kexae'xeu -Xerxerr'xe -Xum'ter -Xe'keax -Qarr'xer'kea -Xaaq'aeq -Xaaqker'qerr -Ke'ker -Qerr'xum -Qerr'xae'xe -Qarr'ter'xum -Kaexerr -Qarrtaq'qux -Xumxaeq -Xaeaeq'xe -Qarr'xae'qux -Xer'xum'qerr -Kae'xuq -Xaaq'qux'kea -Teqtaq -Kekeax -Xe'keax'qerr -Kerr'keax'qerr -Xeqkeax -Xer'xaeq -Xerter'kea -Xum'xuq'xe -Teqaeq -Ke'teq'qux -Xer'xuq'kea -Keq'xum'xeu -Xerxuer'xeu -Xum'keax'xum -Xaaq'ter -Xuetaq -Taeq'xuer'qux -Xuexum'xe -Xeq'quex'kea -Xum'xer -Xeqaeq -Qerr'ker -Xumxum -Xeqxum -Xae'taq'qerr -Taeq'ker -Xue'xae'xe -Xer'taq'xe -Xum'xaeq -Kaexuq'xum -Kaexuq'qux -Ke'xum'xum -Qerr'xerr'xum -Ke'xuq'qux -Taeq'xaeq -Xumtaq -Xetaq -Kaexerr'xum -Kequx -Xuexerr'xeu -Xeaeq -Keq'qux'kea -Xeq'xaeq -Xuexum -Ke'xerr'xe -Xe'xum -Kerr'xaeq -Xeqkeax'qux -Kaeteq -Xer'quex -Teqaeq'qerr -Xaexerr -Xaeter -Xumxuer'qer -Teqxae -Taeqtaq'qerr -Kerr'qux -Xuequex -Xaaqtaq'kea -Teq'keax -Ke'xuer'kea -Xum'quex'xeu -Xaexer'kea -Kerr'quex'xum -Qarrxaeq'xum -Kerr'xaeq'xeu -Xaaq'xerr'xum -Xeqxaeq -Xaaqxae'xeu -Qerrxae -Xae'xer -Xexer -Qarrter'xe -Xaaq'taq'xum -Taeq'aeq -Teq'xer -Xaexae'xum -Ke'aeq -Teqxuer -Qerrxuq -Xaaq'ker -Xeq'quex -Kerr'qux -Xekeax'qerr -Kerr'qux'xum -Ke'teq -Qarrxae'xum -Qerr'ter'qux -Qerr'keax -Taeqxuer'kea -Qerr'xae -Keqker'xeu -Xueter -Xae'teq'kea -Xumkeax'qux -Keq'keax -Qarr'xerr'qux -Xuekeax'qerr -Taeq'xuq'xe -Keq'aeq'xe -Xue'xuer'qux -Qerr'quex'qux -Xaexerr'qux -Qerrxaeq -Qerr'xerr -Qarr'xuer -Qerrxae -Taeq'xaeq'xeu -Kerr'ter -Kerrker'qux -Kaexae'xum -Kerrtaq'qerr -Xae'aeq'qer -Xer'xerr -Kae'xuer'qux -Qerr'xer'qerr -Keq'taq'qer -Taeqxer'xum -Xaaq'xuq -Xue'qux -Taeq'xaeq -Xe'teq'xe -Teq'xuq -Taeq'xum'qux -Xaaqter'xum -Taeq'taq -Xaaqxerr'qer -Xuetaq'qerr -Xum'xae -Qerrxer'xe -Qerr'xaeq'kea -Xeq'ker -Xeqteq'qerr -Kerr'aeq'qer -Xum'teq'qerr -Xuexuq'kea -Xue'taq -Xum'qux'xe -Kerrker -Xue'ter'xeu -Xaexaeq -Xaexerr'kea -Teqtaq'kea -Xuexuer'xe -Xue'xae'xeu -Taeq'quex -Keqteq -Kae'aeq'xum -Teqaeq'qerr -Xaaqxum -Qarr'teq'qux -Kaexer -Xue'xum -Qerrtaq'qer -Taeq'teq'qux -Xueter -Xum'ker'xe -Xue'keax -Xum'quex'qerr -Kaeaeq'qerr -Xeqxae -Keqxuer'xeu -Xeqxum -Teqxuq -Kaeker -Xaaq'taq -Keqquex'kea -Xe'ker -Xeq'aeq'kea -Xue'qux -Xerxuq -Taeq'quex -Kequx'qux -Xueker'qux -Teqxum'qer -Kerrxuq'qer -Xerker -Xue'xuer -Xue'qux -Taeq'xuq -Keq'qux'xum -Qarr'quex'xe -Kae'xer'kea -Qarr'xum'xeu -Keqker'xum -Ketaq -Xue'teq -Xuexerr -Xeqker -Xe'xum'xeu -Xeq'ter'qerr -Taeqxuq -Kaeter -Keq'taq -Xum'xum -Xumxuer'xum -Teqter'qerr -Keq'qux'xe -Keq'xer'qer -Xueaeq'xeu -Taeqxuer'kea -Keqxae'xeu -Kae'taq -Xerkeax -Xeqker -Kerrxer -Taeq'xerr'xe -Qerr'xerr'qerr -Xe'ker'xe -Kae'qux'qerr -Kaequex -Xaaq'teq'qer -Xumxerr -Xe'quex -Qerr'xum'qux -Qerrxae -Qerrquex -Kae'xae'qerr -Qarrquex -Kerrxae -Xaaq'taq'xeu -Qarr'xae'qux -Xeqker -Xaaqxuq'qer -Xaaqter -Xerxerr -Xue'taq'qer -Qarrxer'qerr -Xae'ter'xum -Kerrter'qerr -Kerrter'kea -Xae'aeq -Xe'xer -Teq'keax'xeu -Kexum'xe -Xueteq -Kae'keax -Xaaq'keax -Xaaq'quex'qux -Taeqqux -Taeq'xum -Xerxuer -Qerrxer -Xaexuer -Teqter -Qarr'xer -Qarrxaeq'xum -Ke'teq -Teq'xae -Kaexerr -Qarr'teq -Xer'ker -Xaexuer'qux -Xeq'qux -Taeqxer -Taeqxaeq -Xumxuer -Taeqxuer'qerr -Kae'xuer -Qerrter -Taeq'aeq'kea -Taeq'xer'xum -Kerrter -Xum'xuer -Xue'ker'qux -Xaaqter'qux -Xue'ter'xe -Xueteq -Xaaq'xae -Xaexerr'qerr -Ke'aeq'qerr -Xaaq'xuq'xeu -Xuekeax -Xumteq -Xexuq -Taeq'ker'xeu -Xaaqaeq -Qarrxum -Xerxuq'xum -Kaexerr -Xeq'ter'xeu -Keqaeq -Xeqxuer'xum -Teqkeax'xeu -Kae'aeq'kea -Ke'xerr -Ke'xuq -Kae'quex -Xeqxae -Kaeter -Xeqxer -Kae'xuer -Taeqtaq'xum -Teq'qux'xeu -Xaequex'xum -Qarrquex -Xaaq'qux -Keqquex -Qerrker'qerr -Xexae'xe -Xerxae -Xaaqker'kea -Kexer'qerr -Xaeaeq -Xaaqqux -Qarr'xer'qer -Keq'xuq -Kae'keax -Qerr'teq'qer -Kae'xaeq'qer -Xaexer -Kerrxer'xeu -Kaekeax -Xaaq'xaeq'xeu -Xae'xae -Qarr'keax -Teqqux'qerr -Xeq'ter'qerr -Taeq'ker -Qerrteq'xeu -Keqqux'xeu -Xaaqteq'qerr -Teqteq'xe -Xaaqter -Xaaqkeax -Xeqqux -Xaaq'xerr -Teq'ker'qerr -Xer'taq'qerr -Qarrxum'qux -Xum'taq'qux -Qarr'xer'xeu -Xerxerr'qux -Kerr'teq -Xum'taq'kea -Xaequex -Kaeaeq'xe -Xe'xaeq'xum -Xuexuer'qer -Kerrxuq -Kerrxuer'qerr -Kaeteq -Xaaqxuer -Xeq'xum'qerr -Xumxer -Xe'ter'xeu -Xueaeq -Keq'keax -Xueter -Xaexaeq -Keqxaeq -Ke'aeq -Xumxum'qerr -Xumxae'xum -Xaaqxuer -Ke'ker -Ke'xer -Xuekeax'qerr -Keq'teq -Kerr'ter'qux -Xe'xerr -Qerrxae -Ke'quex'xeu -Keqxuq -Kerrxuer -Keq'xae -Qarr'xuq -Xumxuq -Qarr'teq'qer -Xe'xae'xeu -Xuexum -Xequx -Xaaq'teq'xum -Xue'xuq -Kae'quex'qer -Qarrxer'qerr -Xumaeq'xeu -Qarrkeax -Kae'xer'qux -Xeq'qux'qer -Xueker'qux -Teqquex -Xae'xaeq'xum -Taeqkeax -Xaaq'teq'qux -Keqxerr'xe -Xue'ter'xe -Xe'xaeq -Qerrker -Xaexum'qer -Keqteq'xum -Taeq'xae'xum -Kaexuer'qux -Xe'ter -Xae'taq'qux -Qarr'aeq -Xae'xum -Qarrxum'xum -Keqxer'xum -Qarr'xerr -Teqxae -Ke'xae'xe -Teqkeax'qux -Xe'taq -Xaetaq -Keq'teq'kea -Keqxaeq -Xue'xuq -Qarr'xerr'qer -Xequex -Keqxum -Keqtaq -Qarr'ker'xum -Kerr'xer'qer -Kerrxae'xum -Xum'xae -Kaequex'qux -Xuequx'xe -Xumquex'qer -Taeqker -Xae'quex -Xer'teq'xe -Xerxerr -Ke'xuq'qer -Taeqxerr'kea -Xaaq'xaeq'kea -Keq'teq -Xue'aeq'xeu -Xaaqxer'xeu -Ke'ker'qerr -Xue'quex -Taeqtaq -Teqter -Kequex'xe -Xuexuer'qerr -Xeqxum -Xue'taq -Xer'xuq'qerr -Xeqxaeq'xe -Qerr'xaeq -Xeqxae'qer -Taeqtaq'kea -Xer'teq -Qerr'xaeq'xum -Xaaq'xae -Xum'xuq -Xaaqxaeq -Xaexum -Xaaqxum'xe -Xertaq -Xuexuq'qerr -Xaaq'xae'kea -Qerr'teq'qer +Xer'taq'qer +Xaaq'ter'qux +Xaaq'xuer +Xerxuer'xum +Qarrqux +Xueaeq'qux +Xe'aeq +Keqter +Xaexer +Kaeteq +Ke'aeq'xeu +Kerrxum +Teqxuq'xeu +Xexaeq +Qerr'xerr'xum +Xaeker'qux +Kexer'kea +Ke'aeq +Keqxae'kea +Qarraeq'xe +Xuekeax +Keq'quex +Kae'quex'qux +Qerr'taq'xum +Taeq'taq'xum +Kae'xaeq'xe +Xaaq'teq'qux +Teqker +Qerrxum'xeu +Xeq'xaeq'xe +Kae'keax +Xue'xae +Taeq'taq +Keter'xeu +Xumker'xe +Teqteq +Xexuer +Qerrxerr +Kaequex'qerr +Kaequx'xe +Xum'xaeq +Xe'taq +Xuexer +Xe'qux'xeu +Xe'xerr'kea +Qerr'xum +Xaaqtaq +Xuexum'xum +Qerrxer +Xaexuq +Xeq'aeq +Xaaq'xaeq +Xerqux +Xeq'xuq'xeu +Kaexum +Taeqteq'xeu +Kerrter'qux +Xeq'teq +Teqxae'xe +Xae'ker'kea +Keqxuq +Xumxae'kea +Xeq'xerr'kea +Kae'quex +Kae'ter +Teqter'xe +Xeq'xerr'xeu +Xerxum'qux +Xe'qux +Qarr'aeq +Xue'xum'xe +Xaaq'ter'qux +Teq'xer +Kerrtaq +Qerr'aeq +Xaaq'aeq +Xaaqxuer +Qerr'quex +Kaeker +Xae'taq +Teq'xaeq +Xexuq +Keqqux +Kaeker +Xeqxum +Xae'taq'qerr +Kexerr +Ke'xerr'qux +Xeraeq'xum +Kae'qux'qux +Xerkeax'xum +Qarrxum +Kaexuer +Qerrquex +Kerr'xer +Xeq'taq +Xeqker +Kerrquex'xum +Xeteq +Qarrxuer +Xaaqqux'qerr +Xae'xer +Xae'xae +Taeqxuer'qerr +Xumqux'qux +Xuexerr'qerr +Ke'xae'xum +Xerxuer +Xeqtaq +Xeqquex +Xuekeax +Keq'xuq'qerr +Xaeter +Xumxerr +Xeqxaeq'xe +Xae'ker +Qerr'ker +Xeq'aeq +Kae'keax +Qerrkeax +Xeqxerr +Keqxaeq +Xae'xuq +Kerrkeax'qer +Qarrxum'xum +Teq'xum'xeu +Kerrxer +Xe'xum +Kexae'xeu +Xerxerr'xe +Xum'ter +Xe'keax +Qarr'xer'kea +Xaaq'aeq +Xaaqker'qerr +Ke'ker +Qerr'xum +Qerr'xae'xe +Qarr'ter'xum +Kaexerr +Qarrtaq'qux +Xumxaeq +Xaeaeq'xe +Qarr'xae'qux +Xer'xum'qerr +Kae'xuq +Xaaq'qux'kea +Teqtaq +Kekeax +Xe'keax'qerr +Kerr'keax'qerr +Xeqkeax +Xer'xaeq +Xerter'kea +Xum'xuq'xe +Teqaeq +Ke'teq'qux +Xer'xuq'kea +Keq'xum'xeu +Xerxuer'xeu +Xum'keax'xum +Xaaq'ter +Xuetaq +Taeq'xuer'qux +Xuexum'xe +Xeq'quex'kea +Xum'xer +Xeqaeq +Qerr'ker +Xumxum +Xeqxum +Xae'taq'qerr +Taeq'ker +Xue'xae'xe +Xer'taq'xe +Xum'xaeq +Kaexuq'xum +Kaexuq'qux +Ke'xum'xum +Qerr'xerr'xum +Ke'xuq'qux +Taeq'xaeq +Xumtaq +Xetaq +Kaexerr'xum +Kequx +Xuexerr'xeu +Xeaeq +Keq'qux'kea +Xeq'xaeq +Xuexum +Ke'xerr'xe +Xe'xum +Kerr'xaeq +Xeqkeax'qux +Kaeteq +Xer'quex +Teqaeq'qerr +Xaexerr +Xaeter +Xumxuer'qer +Teqxae +Taeqtaq'qerr +Kerr'qux +Xuequex +Xaaqtaq'kea +Teq'keax +Ke'xuer'kea +Xum'quex'xeu +Xaexer'kea +Kerr'quex'xum +Qarrxaeq'xum +Kerr'xaeq'xeu +Xaaq'xerr'xum +Xeqxaeq +Xaaqxae'xeu +Qerrxae +Xae'xer +Xexer +Qarrter'xe +Xaaq'taq'xum +Taeq'aeq +Teq'xer +Xaexae'xum +Ke'aeq +Teqxuer +Qerrxuq +Xaaq'ker +Xeq'quex +Kerr'qux +Xekeax'qerr +Kerr'qux'xum +Ke'teq +Qarrxae'xum +Qerr'ter'qux +Qerr'keax +Taeqxuer'kea +Qerr'xae +Keqker'xeu +Xueter +Xae'teq'kea +Xumkeax'qux +Keq'keax +Qarr'xerr'qux +Xuekeax'qerr +Taeq'xuq'xe +Keq'aeq'xe +Xue'xuer'qux +Qerr'quex'qux +Xaexerr'qux +Qerrxaeq +Qerr'xerr +Qarr'xuer +Qerrxae +Taeq'xaeq'xeu +Kerr'ter +Kerrker'qux +Kaexae'xum +Kerrtaq'qerr +Xae'aeq'qer +Xer'xerr +Kae'xuer'qux +Qerr'xer'qerr +Keq'taq'qer +Taeqxer'xum +Xaaq'xuq +Xue'qux +Taeq'xaeq +Xe'teq'xe +Teq'xuq +Taeq'xum'qux +Xaaqter'xum +Taeq'taq +Xaaqxerr'qer +Xuetaq'qerr +Xum'xae +Qerrxer'xe +Qerr'xaeq'kea +Xeq'ker +Xeqteq'qerr +Kerr'aeq'qer +Xum'teq'qerr +Xuexuq'kea +Xue'taq +Xum'qux'xe +Kerrker +Xue'ter'xeu +Xaexaeq +Xaexerr'kea +Teqtaq'kea +Xuexuer'xe +Xue'xae'xeu +Taeq'quex +Keqteq +Kae'aeq'xum +Teqaeq'qerr +Xaaqxum +Qarr'teq'qux +Kaexer +Xue'xum +Qerrtaq'qer +Taeq'teq'qux +Xueter +Xum'ker'xe +Xue'keax +Xum'quex'qerr +Kaeaeq'qerr +Xeqxae +Keqxuer'xeu +Xeqxum +Teqxuq +Kaeker +Xaaq'taq +Keqquex'kea +Xe'ker +Xeq'aeq'kea +Xue'qux +Xerxuq +Taeq'quex +Kequx'qux +Xueker'qux +Teqxum'qer +Kerrxuq'qer +Xerker +Xue'xuer +Xue'qux +Taeq'xuq +Keq'qux'xum +Qarr'quex'xe +Kae'xer'kea +Qarr'xum'xeu +Keqker'xum +Ketaq +Xue'teq +Xuexerr +Xeqker +Xe'xum'xeu +Xeq'ter'qerr +Taeqxuq +Kaeter +Keq'taq +Xum'xum +Xumxuer'xum +Teqter'qerr +Keq'qux'xe +Keq'xer'qer +Xueaeq'xeu +Taeqxuer'kea +Keqxae'xeu +Kae'taq +Xerkeax +Xeqker +Kerrxer +Taeq'xerr'xe +Qerr'xerr'qerr +Xe'ker'xe +Kae'qux'qerr +Kaequex +Xaaq'teq'qer +Xumxerr +Xe'quex +Qerr'xum'qux +Qerrxae +Qerrquex +Kae'xae'qerr +Qarrquex +Kerrxae +Xaaq'taq'xeu +Qarr'xae'qux +Xeqker +Xaaqxuq'qer +Xaaqter +Xerxerr +Xue'taq'qer +Qarrxer'qerr +Xae'ter'xum +Kerrter'qerr +Kerrter'kea +Xae'aeq +Xe'xer +Teq'keax'xeu +Kexum'xe +Xueteq +Kae'keax +Xaaq'keax +Xaaq'quex'qux +Taeqqux +Taeq'xum +Xerxuer +Qerrxer +Xaexuer +Teqter +Qarr'xer +Qarrxaeq'xum +Ke'teq +Teq'xae +Kaexerr +Qarr'teq +Xer'ker +Xaexuer'qux +Xeq'qux +Taeqxer +Taeqxaeq +Xumxuer +Taeqxuer'qerr +Kae'xuer +Qerrter +Taeq'aeq'kea +Taeq'xer'xum +Kerrter +Xum'xuer +Xue'ker'qux +Xaaqter'qux +Xue'ter'xe +Xueteq +Xaaq'xae +Xaexerr'qerr +Ke'aeq'qerr +Xaaq'xuq'xeu +Xuekeax +Xumteq +Xexuq +Taeq'ker'xeu +Xaaqaeq +Qarrxum +Xerxuq'xum +Kaexerr +Xeq'ter'xeu +Keqaeq +Xeqxuer'xum +Teqkeax'xeu +Kae'aeq'kea +Ke'xerr +Ke'xuq +Kae'quex +Xeqxae +Kaeter +Xeqxer +Kae'xuer +Taeqtaq'xum +Teq'qux'xeu +Xaequex'xum +Qarrquex +Xaaq'qux +Keqquex +Qerrker'qerr +Xexae'xe +Xerxae +Xaaqker'kea +Kexer'qerr +Xaeaeq +Xaaqqux +Qarr'xer'qer +Keq'xuq +Kae'keax +Qerr'teq'qer +Kae'xaeq'qer +Xaexer +Kerrxer'xeu +Kaekeax +Xaaq'xaeq'xeu +Xae'xae +Qarr'keax +Teqqux'qerr +Xeq'ter'qerr +Taeq'ker +Qerrteq'xeu +Keqqux'xeu +Xaaqteq'qerr +Teqteq'xe +Xaaqter +Xaaqkeax +Xeqqux +Xaaq'xerr +Teq'ker'qerr +Xer'taq'qerr +Qarrxum'qux +Xum'taq'qux +Qarr'xer'xeu +Xerxerr'qux +Kerr'teq +Xum'taq'kea +Xaequex +Kaeaeq'xe +Xe'xaeq'xum +Xuexuer'qer +Kerrxuq +Kerrxuer'qerr +Kaeteq +Xaaqxuer +Xeq'xum'qerr +Xumxer +Xe'ter'xeu +Xueaeq +Keq'keax +Xueter +Xaexaeq +Keqxaeq +Ke'aeq +Xumxum'qerr +Xumxae'xum +Xaaqxuer +Ke'ker +Ke'xer +Xuekeax'qerr +Keq'teq +Kerr'ter'qux +Xe'xerr +Qerrxae +Ke'quex'xeu +Keqxuq +Kerrxuer +Keq'xae +Qarr'xuq +Xumxuq +Qarr'teq'qer +Xe'xae'xeu +Xuexum +Xequx +Xaaq'teq'xum +Xue'xuq +Kae'quex'qer +Qarrxer'qerr +Xumaeq'xeu +Qarrkeax +Kae'xer'qux +Xeq'qux'qer +Xueker'qux +Teqquex +Xae'xaeq'xum +Taeqkeax +Xaaq'teq'qux +Keqxerr'xe +Xue'ter'xe +Xe'xaeq +Qerrker +Xaexum'qer +Keqteq'xum +Taeq'xae'xum +Kaexuer'qux +Xe'ter +Xae'taq'qux +Qarr'aeq +Xae'xum +Qarrxum'xum +Keqxer'xum +Qarr'xerr +Teqxae +Ke'xae'xe +Teqkeax'qux +Xe'taq +Xaetaq +Keq'teq'kea +Keqxaeq +Xue'xuq +Qarr'xerr'qer +Xequex +Keqxum +Keqtaq +Qarr'ker'xum +Kerr'xer'qer +Kerrxae'xum +Xum'xae +Kaequex'qux +Xuequx'xe +Xumquex'qer +Taeqker +Xae'quex +Xer'teq'xe +Xerxerr +Ke'xuq'qer +Taeqxerr'kea +Xaaq'xaeq'kea +Keq'teq +Xue'aeq'xeu +Xaaqxer'xeu +Ke'ker'qerr +Xue'quex +Taeqtaq +Teqter +Kequex'xe +Xuexuer'qerr +Xeqxum +Xue'taq +Xer'xuq'qerr +Xeqxaeq'xe +Qerr'xaeq +Xeqxae'qer +Taeqtaq'kea +Xer'teq +Qerr'xaeq'xum +Xaaq'xae +Xum'xuq +Xaaqxaeq +Xaexum +Xaaqxum'xe +Xertaq +Xuexuq'qerr +Xaaq'xae'kea +Qerr'teq'qer diff --git a/html/changelog.html b/html/changelog.html index c61d9998ce..91fdd23b30 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,92 @@ -->
+

22 September 2018

+

Mechoid updated:

+
    +
  • Adds two vehicles to Robotics and Cargo, the Quad and Spacebike.
  • +
+

Poojawa updated:

+
    +
  • Ported /vg/ instrument code, improved the UI of instruments.
  • +
  • Added a client side pref that mutes instruments being played for you.
  • +
+

Woodrat updated:

+
    +
  • Adds two rig suits. Military Rig suit from Bay and PMC rigsuit
  • +
  • Adds four exploration and pilot voidsuits (alternate sprites by Naidh)
  • +
  • Adds exploration and pilot voidsuits
  • +
+ +

28 August 2018

+

Mechoid updated:

+
    +
  • Mechs now have multiple equipment slot types, and more slots in total for greater customization.
  • +
  • A large number of Mech weapon modules and their jury rigged versions.
  • +
+ +

08 August 2018

+

Atermonera updated:

+
    +
  • The supply controller has been refactored and shifted to nanoUI.
  • +
  • The ordering and control consoles are now generally upgraded in terms of information and options.
  • +
+

Mechoid updated:

+
    +
  • Hallucinations are no longer only Pun Pun.
  • +
+

Neerti updated:

+
    +
  • Adds new ambience sounds for various areas, especially on the surface of Sif.
  • +
  • Removes low and high-pitched droning from available ambience. Consider trying ambience again if you had turned it off to avoid those.
  • +
+ +

01 August 2018

+

KasparoVv updated:

+
    +
  • You can now change the order of your body markings at character creation. Shift markings up or down layers at will to design the character you've always wanted, more easily than ever before.
  • +
+

Mechoid updated:

+
    +
  • Added the Gigaphone. Currently unused.
  • +
+

Mewchild updated:

+
    +
  • Ports several AI core sprites from ages and places past
  • +
+

PrismaticGynoid updated:

+
    +
  • Adds four types of colorblindness to the traits in the setup menu.
  • +
  • pAIs can now be picked up while unfolded, and can display more than 9 emotions.
  • +
+ +

14 July 2018

+

Anewbe updated:

+
    +
  • Certain languages now require assistance for a species to speak, but not understand, much like EAL.
  • +
  • Alai can only be `spoken` by Taj and Teshari.
  • +
  • Adds a voicebox/larynx organ. Its only purpose at the moment is to assist in speaking certain langauges.
  • +
  • Language implants, like the EAL implant, now affect the voicebox organ, instead of being a freefloating implant.
  • +
  • Adds a language implant for Common Skrellian.
  • +
+

Atermonera updated:

+
    +
  • Steel sheets can be used to construct Roofing Tiles
  • +
  • Roofing tiles can be used on tiles under open spaces or space tiles in multiZ maps to place a lattice and plating on the space above
  • +
  • Roofing tiles can be used on outdoor turfs to make them indoors
  • +
  • Both functions work together on multiZ maps with outdoor turfs, only one roofing tile is used per tile roofed.
  • +
+

Mechoid updated:

+
    +
  • Adds a new surgical procedure for fixing brute and burn on limbs.
  • +
+ +

12 July 2018

+

Anewbe updated:

+
    +
  • Technomancer Apportation now properly checks for range and scepter, again.
  • +
+

21 June 2018

Anewbe updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index bea5505972..18931bf85c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4167,3 +4167,64 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscdel: Makes VeyMed limbs more vulnerable to brute and burn. Mechoid: - rscadd: Allow AIs to create and take control of mindless drones from fabricators. +2018-07-12: + Anewbe: + - bugfix: Technomancer Apportation now properly checks for range and scepter, again. +2018-07-14: + Anewbe: + - tweak: Certain languages now require assistance for a species to speak, but not + understand, much like EAL. + - tweak: Alai can only be `spoken` by Taj and Teshari. + - rscadd: Adds a voicebox/larynx organ. Its only purpose at the moment is to assist + in speaking certain langauges. + - tweak: Language implants, like the EAL implant, now affect the voicebox organ, + instead of being a freefloating implant. + - rscadd: Adds a language implant for Common Skrellian. + Atermonera: + - rscadd: Steel sheets can be used to construct Roofing Tiles + - rscadd: Roofing tiles can be used on tiles under open spaces or space tiles in + multiZ maps to place a lattice and plating on the space above + - rscadd: Roofing tiles can be used on outdoor turfs to make them indoors + - rscadd: Both functions work together on multiZ maps with outdoor turfs, only one + roofing tile is used per tile roofed. + Mechoid: + - rscadd: Adds a new surgical procedure for fixing brute and burn on limbs. +2018-08-01: + KasparoVv: + - rscadd: You can now change the order of your body markings at character creation. + Shift markings up or down layers at will to design the character you've always + wanted, more easily than ever before. + Mechoid: + - rscadd: Added the Gigaphone. Currently unused. + Mewchild: + - rscadd: Ports several AI core sprites from ages and places past + PrismaticGynoid: + - rscadd: Adds four types of colorblindness to the traits in the setup menu. + - tweak: pAIs can now be picked up while unfolded, and can display more than 9 emotions. +2018-08-08: + Atermonera: + - rscadd: The supply controller has been refactored and shifted to nanoUI. + - rscadd: The ordering and control consoles are now generally upgraded in terms + of information and options. + Mechoid: + - rsctweak: Hallucinations are no longer only Pun Pun. + Neerti: + - soundadd: Adds new ambience sounds for various areas, especially on the surface + of Sif. + - sounddel: Removes low and high-pitched droning from available ambience. Consider + trying ambience again if you had turned it off to avoid those. +2018-08-28: + Mechoid: + - rscadd: Mechs now have multiple equipment slot types, and more slots in total + for greater customization. + - rscadd: A large number of Mech weapon modules and their jury rigged versions. +2018-09-22: + Mechoid: + - rscadd: Adds two vehicles to Robotics and Cargo, the Quad and Spacebike. + Poojawa: + - rscadd: Ported /vg/ instrument code, improved the UI of instruments. + - rscadd: Added a client side pref that mutes instruments being played for you. + Woodrat: + - rscadd: Adds two rig suits. Military Rig suit from Bay and PMC rigsuit + - rscadd: Adds four exploration and pilot voidsuits (alternate sprites by Naidh) + - rscadd: Adds exploration and pilot voidsuits diff --git a/html/changelogs/Anewbe - Apportation.yml b/html/changelogs/Anewbe - Emitters.yml similarity index 93% rename from html/changelogs/Anewbe - Apportation.yml rename to html/changelogs/Anewbe - Emitters.yml index 85607a0932..1400604d07 100644 --- a/html/changelogs/Anewbe - Apportation.yml +++ b/html/changelogs/Anewbe - Emitters.yml @@ -33,4 +33,4 @@ delete-after: True # Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. # Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. changes: - - bugfix: "Technomancer Apportation now properly checks for range and scepter, again." + - rscadd: "Emitters can be locked while off, too." diff --git a/icons/480x480.dmi b/icons/480x480.dmi index 90ea9fbd55..0b6d072855 100644 Binary files a/icons/480x480.dmi and b/icons/480x480.dmi differ diff --git a/icons/480x480_vr.dmi b/icons/480x480_vr.dmi deleted file mode 100644 index d175026af1..0000000000 Binary files a/icons/480x480_vr.dmi and /dev/null differ diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi new file mode 100644 index 0000000000..79eabaac4f Binary files /dev/null and b/icons/effects/64x64.dmi differ diff --git a/icons/effects/96x256.dmi b/icons/effects/96x256.dmi new file mode 100644 index 0000000000..978f0fbcda Binary files /dev/null and b/icons/effects/96x256.dmi differ diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 841c17d3f5..ea6cdc9545 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index e7f61d605d..4b7e714731 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/effects/weather.dmi b/icons/effects/weather.dmi index d0df90a44a..5ae794c898 100644 Binary files a/icons/effects/weather.dmi and b/icons/effects/weather.dmi differ diff --git a/icons/holomap_markers_vr.dmi b/icons/holomap_markers.dmi similarity index 100% rename from icons/holomap_markers_vr.dmi rename to icons/holomap_markers.dmi diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index d13c430c8f..2b96c7d492 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index 1df73dc111..a8d55c2e92 100644 Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index ba1c32c26a..d1c09ef542 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index cc467f5df7..6f23560d10 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 49f3738c97..75929194f9 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_face_m.dmi b/icons/mob/human_face_m.dmi index 5fb0b983d3..457dd0e5df 100644 Binary files a/icons/mob/human_face_m.dmi and b/icons/mob/human_face_m.dmi differ diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi index 3dce22596f..72e9c00465 100644 Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi index f13fb1c997..f3f75a86ea 100644 Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi index 19bf38764e..74cb306a6c 100644 Binary files a/icons/mob/rig_back.dmi and b/icons/mob/rig_back.dmi differ diff --git a/icons/mob/spacesuit.dmi b/icons/mob/spacesuit.dmi index 188593823e..2f875885a5 100644 Binary files a/icons/mob/spacesuit.dmi and b/icons/mob/spacesuit.dmi differ diff --git a/icons/mob/species/seromi/deptcloak.dmi b/icons/mob/species/seromi/deptcloak.dmi new file mode 100644 index 0000000000..532c208187 Binary files /dev/null and b/icons/mob/species/seromi/deptcloak.dmi differ diff --git a/icons/mob/species/seromi/deptjacket.dmi b/icons/mob/species/seromi/deptjacket.dmi new file mode 100644 index 0000000000..c43e44c1e5 Binary files /dev/null and b/icons/mob/species/seromi/deptjacket.dmi differ diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi index 849144c6f3..1c3f150a8e 100644 Binary files a/icons/mob/species/seromi/head.dmi and b/icons/mob/species/seromi/head.dmi differ diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi index 14f5755ef5..09dde09b2f 100644 Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi index 0868e30f9f..253d740ba9 100644 Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ diff --git a/icons/mob/species/skrell/suit.dmi b/icons/mob/species/skrell/suit.dmi index 1746fef25e..443f30fe2d 100644 Binary files a/icons/mob/species/skrell/suit.dmi and b/icons/mob/species/skrell/suit.dmi differ diff --git a/icons/mob/species/tajaran/mask.dmi b/icons/mob/species/tajaran/mask.dmi index d7028d66a6..71a5c85389 100644 Binary files a/icons/mob/species/tajaran/mask.dmi and b/icons/mob/species/tajaran/mask.dmi differ diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index be709c012d..e85786a547 100644 Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ diff --git a/icons/mob/species/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi index 8c4876821d..de17a80f86 100644 Binary files a/icons/mob/species/unathi/helmet.dmi and b/icons/mob/species/unathi/helmet.dmi differ diff --git a/icons/mob/species/unathi/mask.dmi b/icons/mob/species/unathi/mask.dmi index 25cc585aed..98d45f3ac9 100644 Binary files a/icons/mob/species/unathi/mask.dmi and b/icons/mob/species/unathi/mask.dmi differ diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi index d48cf7f882..c65654823d 100644 Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index e45ec90933..5b2bfe8e4f 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index a3daa966cf..aa6e8bfb81 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/bike.dmi b/icons/obj/bike.dmi index 69aa0ccb4e..aecc6aa2e9 100644 Binary files a/icons/obj/bike.dmi and b/icons/obj/bike.dmi differ diff --git a/icons/obj/clothing/ears.dmi b/icons/obj/clothing/ears.dmi index a2c81adfbe..77d0b44126 100644 Binary files a/icons/obj/clothing/ears.dmi and b/icons/obj/clothing/ears.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 920880e155..8342982785 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 6fa2c8c23b..989207c6eb 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a369471b51..c585c40625 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index c1e4545825..a923ea9986 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/spacesuits.dmi b/icons/obj/clothing/spacesuits.dmi index 1be8028b74..50af23f601 100644 Binary files a/icons/obj/clothing/spacesuits.dmi and b/icons/obj/clothing/spacesuits.dmi differ diff --git a/icons/obj/clothing/species/seromi/hats.dmi b/icons/obj/clothing/species/seromi/hats.dmi index ec3a7b2fc0..f1e77ae42c 100644 Binary files a/icons/obj/clothing/species/seromi/hats.dmi and b/icons/obj/clothing/species/seromi/hats.dmi differ diff --git a/icons/obj/clothing/species/seromi/suits.dmi b/icons/obj/clothing/species/seromi/suits.dmi index cd8ee95287..e715f2f62f 100644 Binary files a/icons/obj/clothing/species/seromi/suits.dmi and b/icons/obj/clothing/species/seromi/suits.dmi differ diff --git a/icons/obj/clothing/species/skrell/hats.dmi b/icons/obj/clothing/species/skrell/hats.dmi index 3cd80e33ea..1489b3fa7a 100644 Binary files a/icons/obj/clothing/species/skrell/hats.dmi and b/icons/obj/clothing/species/skrell/hats.dmi differ diff --git a/icons/obj/clothing/species/skrell/suits.dmi b/icons/obj/clothing/species/skrell/suits.dmi index ab7190e8ce..96c2e45129 100644 Binary files a/icons/obj/clothing/species/skrell/suits.dmi and b/icons/obj/clothing/species/skrell/suits.dmi differ diff --git a/icons/obj/clothing/species/tajaran/hats.dmi b/icons/obj/clothing/species/tajaran/hats.dmi index 0b38c7a178..3622feffdb 100644 Binary files a/icons/obj/clothing/species/tajaran/hats.dmi and b/icons/obj/clothing/species/tajaran/hats.dmi differ diff --git a/icons/obj/clothing/species/tajaran/suits.dmi b/icons/obj/clothing/species/tajaran/suits.dmi index 98660fb867..e70f3bd1bb 100644 Binary files a/icons/obj/clothing/species/tajaran/suits.dmi and b/icons/obj/clothing/species/tajaran/suits.dmi differ diff --git a/icons/obj/clothing/species/unathi/hats.dmi b/icons/obj/clothing/species/unathi/hats.dmi index 641ccce45e..e20774b376 100644 Binary files a/icons/obj/clothing/species/unathi/hats.dmi and b/icons/obj/clothing/species/unathi/hats.dmi differ diff --git a/icons/obj/clothing/species/unathi/suits.dmi b/icons/obj/clothing/species/unathi/suits.dmi index 240bbc7738..8819aedffd 100644 Binary files a/icons/obj/clothing/species/unathi/suits.dmi and b/icons/obj/clothing/species/unathi/suits.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index d45dac6e1f..38154ec14a 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 2d8e89049e..d0bb4a6b39 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/cult.dmi b/icons/obj/cult.dmi index 7d73fe97be..54c588f5ad 100644 Binary files a/icons/obj/cult.dmi and b/icons/obj/cult.dmi differ diff --git a/icons/obj/custom_items_vehicle.dmi b/icons/obj/custom_items_vehicle.dmi new file mode 100644 index 0000000000..a6afb68bab Binary files /dev/null and b/icons/obj/custom_items_vehicle.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 51d3f4d369..5adcea97c7 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/electronic_assemblies.dmi b/icons/obj/electronic_assemblies.dmi deleted file mode 100644 index 5799d85866..0000000000 Binary files a/icons/obj/electronic_assemblies.dmi and /dev/null differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index bcd64a33fe..e312da52b9 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ diff --git a/icons/obj/integrated_electronics/electronic_components.dmi b/icons/obj/integrated_electronics/electronic_components.dmi new file mode 100644 index 0000000000..129491755e Binary files /dev/null and b/icons/obj/integrated_electronics/electronic_components.dmi differ diff --git a/icons/obj/integrated_electronics/electronic_misc.dmi b/icons/obj/integrated_electronics/electronic_misc.dmi new file mode 100644 index 0000000000..226b82e499 Binary files /dev/null and b/icons/obj/integrated_electronics/electronic_misc.dmi differ diff --git a/icons/obj/integrated_electronics/electronic_setups.dmi b/icons/obj/integrated_electronics/electronic_setups.dmi new file mode 100644 index 0000000000..58ef0903be Binary files /dev/null and b/icons/obj/integrated_electronics/electronic_setups.dmi differ diff --git a/icons/obj/integrated_electronics/electronic_tools.dmi b/icons/obj/integrated_electronics/electronic_tools.dmi new file mode 100644 index 0000000000..975f2fc9a8 Binary files /dev/null and b/icons/obj/integrated_electronics/electronic_tools.dmi differ diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi index af660e2475..e3a1796377 100644 Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ diff --git a/icons/obj/machines/stationmap_vr.dmi b/icons/obj/machines/stationmap.dmi similarity index 100% rename from icons/obj/machines/stationmap_vr.dmi rename to icons/obj/machines/stationmap.dmi diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 91658df513..e412404075 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 85e245ce9f..6379879df7 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/icons/obj/vehicles_64x64.dmi b/icons/obj/vehicles_64x64.dmi new file mode 100644 index 0000000000..98ed024d68 Binary files /dev/null and b/icons/obj/vehicles_64x64.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 3c5d690093..4910a853a6 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -45,7 +45,7 @@ macro "borghotkeymode" is-disabled = false elem name = "NORTH+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "ALT+EAST" @@ -57,7 +57,7 @@ macro "borghotkeymode" is-disabled = false elem name = "EAST+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "ALT+SOUTH" @@ -69,7 +69,7 @@ macro "borghotkeymode" is-disabled = false elem name = "SOUTH+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "INSERT" @@ -117,19 +117,19 @@ macro "borghotkeymode" is-disabled = false elem name = "A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "CTRL+A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "CTRL+D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "F" @@ -173,11 +173,11 @@ macro "borghotkeymode" is-disabled = false elem "s_key" name = "S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "CTRL+S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "T" @@ -185,11 +185,11 @@ macro "borghotkeymode" is-disabled = false elem "w_key" name = "W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "CTRL+W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "X" @@ -327,7 +327,7 @@ macro "macro" is-disabled = false elem name = "WEST+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "ALT+NORTH" @@ -339,7 +339,7 @@ macro "macro" is-disabled = false elem name = "NORTH+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "ALT+EAST" @@ -351,7 +351,7 @@ macro "macro" is-disabled = false elem name = "EAST+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "ALT+SOUTH" @@ -363,7 +363,7 @@ macro "macro" is-disabled = false elem name = "SOUTH+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "INSERT" @@ -391,11 +391,11 @@ macro "macro" is-disabled = false elem name = "CTRL+A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "CTRL+D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "CTRL+E" @@ -419,11 +419,11 @@ macro "macro" is-disabled = false elem name = "CTRL+S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "CTRL+W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "CTRL+X" @@ -549,7 +549,7 @@ macro "hotkeymode" is-disabled = false elem name = "WEST+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "ALT+NORTH" @@ -561,7 +561,7 @@ macro "hotkeymode" is-disabled = false elem name = "NORTH+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "ALT+EAST" @@ -573,7 +573,7 @@ macro "hotkeymode" is-disabled = false elem name = "EAST+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "ALT+SOUTH" @@ -585,7 +585,7 @@ macro "hotkeymode" is-disabled = false elem name = "SOUTH+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "INSERT" @@ -637,19 +637,19 @@ macro "hotkeymode" is-disabled = false elem name = "A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "CTRL+A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "CTRL+D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "E" @@ -709,11 +709,11 @@ macro "hotkeymode" is-disabled = false elem "s_key" name = "S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "CTRL+S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "T" @@ -721,11 +721,11 @@ macro "hotkeymode" is-disabled = false elem "w_key" name = "W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "CTRL+W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "X" @@ -863,7 +863,7 @@ macro "borgmacro" is-disabled = false elem name = "WEST+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "ALT+NORTH" @@ -875,7 +875,7 @@ macro "borgmacro" is-disabled = false elem name = "NORTH+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "ALT+EAST" @@ -887,7 +887,7 @@ macro "borgmacro" is-disabled = false elem name = "EAST+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "ALT+SOUTH" @@ -899,7 +899,7 @@ macro "borgmacro" is-disabled = false elem name = "SOUTH+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "INSERT" @@ -927,11 +927,11 @@ macro "borgmacro" is-disabled = false elem name = "CTRL+A+REP" - command = ".west" + command = ".moveleft" is-disabled = false elem name = "CTRL+D+REP" - command = ".east" + command = ".moveright" is-disabled = false elem name = "CTRL+F" @@ -951,11 +951,11 @@ macro "borgmacro" is-disabled = false elem name = "CTRL+S+REP" - command = ".south" + command = ".movedown" is-disabled = false elem name = "CTRL+W+REP" - command = ".north" + command = ".moveup" is-disabled = false elem name = "CTRL+X" diff --git a/maps/RandomZLevels/backup/blackmarketpackers.dmm b/maps/RandomZLevels/backup/blackmarketpackers.dmm deleted file mode 100644 index 5fa1d3390c..0000000000 --- a/maps/RandomZLevels/backup/blackmarketpackers.dmm +++ /dev/null @@ -1,557 +0,0 @@ -"aa" = (/turf/space,/area/space) -"ab" = (/obj/effect/blocker,/turf/space{density = 1; desc = "You can't go there!"; name = "The 4th Wall"},/area/space) -"ac" = (/mob/living/simple_animal/hostile/carp,/turf/space,/area/space) -"ad" = (/turf/simulated/mineral,/area/awaymission) -"ae" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission) -"af" = (/obj/item/weapon/surgical/circular_saw,/obj/structure/lattice,/turf/space,/area/space) -"ag" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/awaymission/BMPship3) -"ah" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/BMPship3) -"ai" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/awaymission/BMPship3) -"aj" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/space) -"ak" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"al" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/reinforced,/area/awaymission/BMPship3) -"am" = (/turf/simulated/floor/reinforced,/area/awaymission/BMPship3) -"an" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 1},/area/awaymission/BMPship3) -"ao" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"ap" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/awaymission/BMPship3) -"aq" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/awaymission/BMPship3) -"ar" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"as" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"at" = (/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"au" = (/obj/structure/lattice,/turf/space,/area/space) -"av" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"aw" = (/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/awaymission/BMPship3) -"ax" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 2},/area/awaymission/BMPship3) -"ay" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/awaymission/BMPship1) -"az" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/BMPship1) -"aA" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/awaymission/BMPship1) -"aB" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/awaymission/BMPship1) -"aC" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 8},/area/awaymission/BMPship1) -"aD" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aE" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 4},/area/awaymission/BMPship1) -"aF" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/awaymission/BMPship1) -"aG" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship1) -"aH" = (/obj/structure/bed/roller,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aI" = (/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aJ" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aK" = (/obj/item/weapon/surgical/scalpel,/obj/structure/closet/crate,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aL" = (/obj/item/bodybag,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aM" = (/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aO" = (/obj/machinery/optable,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aP" = (/obj/machinery/computer/operating,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"aQ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/awaymission/BMPship1) -"aR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aS" = (/obj/structure/closet/crate/freezer,/obj/item/organ/internal/appendix,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aT" = (/obj/structure/closet/crate/freezer,/obj/item/organ/internal/brain,/obj/item/organ/internal/appendix,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aU" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aW" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"aX" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 5},/area/awaymission/BMPship1) -"aY" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/awaymission/BMPship3) -"aZ" = (/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission/BMPship1) -"ba" = (/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission/BMPship1) -"bb" = (/obj/effect/gibspawner/generic,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"be" = (/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bf" = (/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bg" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bh" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bi" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bj" = (/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bk" = (/obj/structure/largecrate,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bl" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bm" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c500,/obj/item/weapon/spacecash/c100,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/wood,/area/awaymission/BMPship3) -"bn" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/wood,/area/awaymission/BMPship3) -"bo" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/awaymission/BMPship3) -"bp" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bq" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/yellow,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"br" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bs" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bt" = (/obj/structure/sign/vacuum,/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 1},/area/awaymission/BMPship3) -"bu" = (/turf/simulated/floor/airless{icon_state = "dmg1"},/area/awaymission/BMPship1) -"bv" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bx" = (/obj/machinery/door/unpowered/shuttle,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"by" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bA" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bB" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bF" = (/turf/simulated/floor/wood,/area/awaymission/BMPship3) -"bG" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/awaymission/BMPship3) -"bH" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bI" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bK" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bL" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bM" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bO" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c50,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bP" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bQ" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bR" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"bS" = (/obj/machinery/light,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bT" = (/obj/machinery/button/remote/airlock{id = "packerMed"; pixel_y = -24},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bU" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bV" = (/obj/machinery/sleep_console,/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"bW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"ca" = (/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"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cc" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/awaymission/BMPship3) -"cd" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 8},/area/awaymission/BMPship3) -"ce" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/wood,/area/awaymission/BMPship3) -"cf" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"cg" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 6},/area/awaymission/BMPship2) -"ch" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/BMPship2) -"ci" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/awaymission/BMPship2) -"cj" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/awaymission/BMPship1) -"ck" = (/obj/machinery/door/blast/shutters{id = "packerMed"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cl" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/awaymission/BMPship1) -"cm" = (/obj/structure/largecrate,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cn" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"co" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cp" = (/obj/structure/kitchenspike,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cq" = (/obj/structure/closet/crate,/obj/item/device/analyzer,/obj/item/weapon/spacecash/c10,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cr" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c500,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cs" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/obj/item/organ/internal/appendix,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"ct" = (/obj/machinery/button/remote/airlock{id = "packerCargo"; pixel_y = -24},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cv" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cw" = (/turf/simulated/floor/carpet,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/awaymission/BMPship3) -"cx" = (/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"cy" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump-derelict"; operating = 0; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"cz" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/awaymission/BMPship2) -"cA" = (/obj/structure/table/reinforced,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cB" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cC" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cD" = (/obj/structure/sink{dir = 2},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cE" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cF" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cG" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cH" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cI" = (/obj/structure/table/reinforced,/obj/item/weapon/material/knife/butch,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cJ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cK" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cL" = (/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cM" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cN" = (/obj/structure/table/reinforced,/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cO" = (/obj/structure/table/reinforced,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cP" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/cobweb2,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cQ" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/awaymission/BMPship1) -"cR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/machinery/door/blast/shutters{id = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"cS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"cT" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cU" = (/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cV" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"cW" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 1},/area/awaymission/BMPship2) -"cX" = (/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cY" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"cZ" = (/obj/item/weapon/stool,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"da" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"db" = (/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"dc" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dd" = (/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"de" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"df" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dg" = (/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"di" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dk" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dl" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dm" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"dn" = (/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"do" = (/obj/machinery/door/window{dir = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"dp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship2) -"dq" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dr" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"ds" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"dt" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 2},/area/awaymission/BMPship1) -"du" = (/obj/structure/closet/secure_closet/freezer/meat{opened = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dv" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dw" = (/obj/effect/landmark{name = "awaystart"},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dx" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/awaymission/BMPship1) -"dy" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dz" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump-derelict"; operating = 0; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dA" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dB" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of gateway. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dC" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dD" = (/obj/structure/frame{anchored = 1},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dF" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dG" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dH" = (/obj/machinery/seed_extractor,/obj/item/seeds/angelmycelium,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dI" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dJ" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 2},/area/awaymission/BMPship2) -"dK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"dN" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"dO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dQ" = (/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/tiled,/area/awaymission/BMPship1) -"dR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dS" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"dT" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 1},/area/awaymission/BMPship1) -"dU" = (/obj/item/device/multitool,/turf/simulated/floor/reinforced,/area/awaymission/BMPship1) -"dV" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/awaymission/BMPship1) -"dW" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/BMPship1) -"dX" = (/obj/structure/table/reinforced,/obj/machinery/recharger,/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dY" = (/obj/item/weapon/stool,/mob/living/simple_animal/hostile/pirate/ranged,/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"dZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"ea" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ec" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ed" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ee" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ef" = (/turf/simulated/wall/r_wall,/area/awaymission/BMPship2) -"eg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"eh" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"ei" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"ej" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"ek" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"el" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"em" = (/turf/simulated/floor/reinforced,/area/awaymission/BMPship1) -"en" = (/obj/structure/grille,/obj/structure/shuttle/window{icon_state = "11"},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"eo" = (/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/carpet,/area/awaymission/BMPship3) -"ep" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eq" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"er" = (/obj/machinery/shieldwallgen,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"es" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"et" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump-derelict"; operating = 0; pixel_x = 0; pixel_y = 24},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eu" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"ev" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"ew" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"ex" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/BMPship2) -"ey" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ez" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eB" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eC" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eD" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"eE" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/fractal_reactor/fluff/converter{mapped_in = 1; power_generation_rate = 10000},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"eF" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"eG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"eH" = (/obj/structure/grille,/obj/structure/shuttle/window{icon_state = "8"},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"eI" = (/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"eJ" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"eK" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"eL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"eM" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"eN" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"eO" = (/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"eP" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eQ" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey1"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eR" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"eS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"eT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"eU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"eV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eW" = (/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eX" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"eZ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fa" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/awaymission/BMPship1) -"fb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"fc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"fd" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"fe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ff" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fh" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fi" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fj" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fk" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fl" = (/obj/structure/table/rack,/obj/item/weapon/cell/high,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fm" = (/obj/structure/grille,/obj/structure/shuttle/window{icon_state = "10"},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"fn" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fo" = (/obj/effect/floor_decal/corner/red/diagonal,/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fp" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fq" = (/mob/living/simple_animal/hostile/alien{faction = "pirate"},/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fr" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fs" = (/obj/machinery/light,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"ft" = (/obj/effect/gibspawner/generic,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4";},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"fx" = (/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/tiled/freezer,/area/awaymission/BMPship1) -"fy" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fz" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fA" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fB" = (/obj/machinery/power/fractal_reactor/fluff/converter{mapped_in = 1; power_generation_rate = 10000},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"fC" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/BMPship3) -"fD" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fE" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fF" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fH" = (/obj/structure/mopbucket,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fI" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/obj/item/weapon/cell/high,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fK" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/awaymission/BMPship3) -"fL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"fM" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 4},/area/awaymission/BMPship3) -"fN" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/awaymission/BMPship2) -"fO" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/BMPship2) -"fP" = (/obj/structure/kitchenspike,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fQ" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"fR" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"fS" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship2) -"fT" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"fU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fV" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship1) -"fX" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"fY" = (/turf/simulated/floor/airless{icon_state = "dmg1"},/area/awaymission/BMPship3) -"fZ" = (/obj/structure/lattice,/turf/space,/area/awaymission/BMPship3) -"ga" = (/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission/BMPship3) -"gb" = (/obj/item/stack/cable_coil/random{amount = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gc" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission/BMPship3) -"ge" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission/BMPship3) -"gf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"gg" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey2"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"gh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8";},/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gk" = (/obj/item/weapon/mop,/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gl" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"gm" = (/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission/BMPship3) -"gn" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless{icon_state = "dmg1"},/area/awaymission/BMPship3) -"go" = (/obj/item/weapon/stool,/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission/BMPship3) -"gp" = (/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gr" = (/turf/simulated/floor{icon_state = "plating"},/area/awaymission/BMPship2) -"gs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"gt" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gu" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gv" = (/obj/structure/reagent_dispensers,/turf/simulated/floor/tiled/freezer,/area/awaymission/BMPship1) -"gw" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 6},/area/awaymission/BMPship1) -"gx" = (/turf/simulated/floor/airless{icon_state = "dmg2"},/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2;},/area/awaymission/BMPship3) -"gy" = (/obj/structure/frame{anchored = 1},/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission/BMPship3) -"gz" = (/obj/structure/frame{anchored = 1},/turf/simulated/floor/airless{icon_state = "dmg1"},/area/awaymission/BMPship3) -"gA" = (/obj/machinery/light/small,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/BMPship2) -"gB" = (/turf/simulated/floor{icon_state = "dmg3"},/area/awaymission/BMPship2) -"gC" = (/turf/simulated/floor{icon_state = "dmg1"},/area/awaymission/BMPship2) -"gD" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor,/area/awaymission/BMPship1) -"gE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/machinery/door/airlock/silver,/turf/simulated/floor,/area/awaymission/BMPship1) -"gF" = (/obj/machinery/door/unpowered/shuttle,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/turf/simulated/floor/tiled,/area/awaymission/BMPship1) -"gG" = (/obj/item/device/multitool,/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission) -"gH" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship3) -"gI" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 10},/area/awaymission/BMPship3) -"gJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gK" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 5},/area/awaymission/BMPship2) -"gL" = (/turf/simulated/mineral,/area/awaymission/BMPship2) -"gM" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship2) -"gN" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/awaymission/BMPship2) -"gO" = (/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gP" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gR" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gS" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "DEAR DAIRY: So we was doing our typpical route when the captain says we've been picking up weird signals on some backwatter planet. Madsen wanted to stay on course but he ain't the captain, so we went out of the way to check it out. There was lots of rocks on the way, but we got to the planet fine. Found a big fancy camp with nobody around and this big metal donut thing with NT stamps all over it right in the middle. Case of beer too. Captain reckons we can pass it off to some buyer in the Syndicate. Ingram says it's bad luck and that someone is going to come look for it but it sounds like better money than selling bad meat to jerky companies."; name = "Old Diary"},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gT" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0;},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gV" = (/obj/structure/closet,/obj/item/clothing/under/overalls,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"gW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"gX" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced,/area/awaymission/BMPship3) -"gY" = (/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission/BMPship3) -"gZ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"ha" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission/BMPship3) -"hb" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"hc" = (/obj/machinery/light/small{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission/BMPship3) -"hd" = (/turf/simulated/shuttle/wall,/area/awaymission) -"he" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/awaymission) -"hf" = (/turf/simulated/floor/airless,/area/awaymission) -"hg" = (/turf/simulated/floor/airless{icon_state = "dmg1"},/area/awaymission) -"hh" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/awaymission) -"hi" = (/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission) -"hj" = (/obj/item/frame/apc,/turf/simulated/floor/airless,/area/awaymission) -"hk" = (/obj/structure/ore_box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/awaymission) -"hl" = (/obj/item/stack/cable_coil/random{amount = 5},/turf/simulated/floor/airless,/area/awaymission) -"hm" = (/obj/structure/ore_box,/turf/simulated/floor/airless,/area/awaymission) -"hn" = (/obj/machinery/computer/arcade,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"ho" = (/obj/effect/decal/remains/human,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0;},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hq" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4";},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hr" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hs" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/helmet/space/syndicate/green/dark,/obj/effect/gibspawner/generic,/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission) -"ht" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"hu" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated,/area/awaymission/BMPship3) -"hv" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission/BMPship3) -"hw" = (/turf/simulated/floor/airless{icon_state = "dmg2"},/area/awaymission) -"hx" = (/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/floor/airless,/area/awaymission) -"hy" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission) -"hz" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission) -"hA" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/airless,/area/awaymission) -"hB" = (/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hC" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/storage/wallet/random,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2";},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hD" = (/obj/structure/closet,/obj/item/clothing/under/lawyer/bluesuit,/obj/item/clothing/suit/apron,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hE" = (/obj/item/clothing/suit/space/syndicate/green/dark,/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission) -"hF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/airless,/area/awaymission/BMPship3) -"hG" = (/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission/BMPship3) -"hH" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "dmg3"},/area/awaymission) -"hI" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless,/area/awaymission) -"hJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/airless,/area/awaymission) -"hK" = (/obj/machinery/door/unpowered/shuttle,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"hL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0;},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8";},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hN" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space) -"hO" = (/turf/simulated/mineral/floor/ignore_mapgen,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/awaymission/BMPship3) -"hP" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/awaymission/BMPship3) -"hQ" = (/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hR" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hS" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hT" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hU" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hV" = (/obj/item/weapon/caution,/turf/simulated/floor/airless,/area/awaymission) -"hW" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/airless,/area/awaymission) -"hX" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hY" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"hZ" = (/obj/item/weapon/spacecash/c1000,/mob/living/simple_animal/hostile/mimic/crate,/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"ia" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/steel,/area/awaymission/BMPship1) -"ib" = (/obj/item/clothing/gloves/fyellow,/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission) -"ic" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission) -"id" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor,/area/awaymission/BMPship1) -"ie" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"if" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"ig" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/awaymission/BMPship3) -"ih" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/space) -"ii" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/BMPship3) -"ij" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3) - -(1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaeaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahaiahaiajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakalamanaoapaqajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaramamasatatapaqajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaaaaaaaaaaaaaaaaaaaaaaaaavalawaxatatatapaqajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauayazazazazazazazazazaAazazazaBaCaDaEazaBaBazaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaaauaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaWaWaWaWaWaXaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahaiahahahahahahahaYaaaaaaaaaaaaauaZbaaIaIbbaIaIaIbcaIaIaQbdbebebfbebebgbhbibebjbkaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablbmbnbobpbqbrbqbrbqbsbtaaaaaaaaaaaububaaIbuaIaIaIaHaIbvbwbwbxbybzbebAbebebBbCbDbEbebkaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarbFbGbobHatatatatatatbIaaaaaaauayaGaIbubaaIbuaIaIaIbbaIaIaIaQbdbJbebebebebKbLbMbNbebOaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavbFbFboatbPbPbQbPbPbRaxaaaaaaayaGbubuaIbSbTaIaIaIbUbVbSbUbVaQbdbWbXbYbYbZbYbYbYcabzcbaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccdceancfcgchchchchchcichchchcicjazazazazaCckckckaEazazazazclcmcncocpcncncqcrcsctcucvaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcwcxcxcycxczcAcBcCcDcEcFcDcGcBcHczcIcJcKcLcHcHcHcHcMcNcOcMcPcQazazazazazazazazaAaCcRaEcjaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcwcxcxcxcScxczcHcTcCcUcUcUcVcGcHcHcWcXcXcXcYcHcHcHcHcZcZcHcZcHaQdadadbdcdddedddfaQdgdhdgaXaBazaAaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcwcxcxcxcxdidjczcHcHcCcUdkcUcUcGcHcHdldmdndodpcHcHcHcHcHcHdqcHcHaQdrdsdbdtdudvdwdxaQdydhdgdgdzdAcQaBazaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcwcxcxdBdCdDcxdEczcHcHdFdGdGdHdGdIcHcHdJcHdKdLdLdLdLdLdLdLdLdLdMcHaQdbdNdbaXazazazazcldydOdPdQdRdSdTdUdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabocxcxcxdXdYcxcxdZcWeaebececececececdMcHcWcHedcHeeefefefefefefefedcHaQdbegdbdbdbdbdbehaQeiejbeekbedAelemdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaendDcxcxcxcxcxcxeoepeceqefefefefeferescHetcHedcHeueveueueueuewexeyezdTdbegeAeBeBeCdbdbaQeDejbeeEeFeGdtemdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHeIeJcxcxcxcxcxdEdJcHcHefeKeLeMeNeOedePedcHedcHeQefefefefefefefedeReSeTeUeVeWeXeYdbdbaQeZejbeekbedAcQazazfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHeIeJcxcxfbfcfcfdcWcHcHefeKeKeOeNeOfeecffecfgcHcHcHcHcHfhcHcHcHedcHfidbegfjeWeWfkdbdbaQflejeWekbedAcQazazaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafmcxcxcxcxcScxcxcxfncHfoeffpeKfqfreOedcHfscHedcHcHftcHcHcHcHcHcHfudLfvfwfxfyeXfzfkdbdbaQfAejeWfBeFeGdTemdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabocxcxcxcxcScxcxfCdJeacHefeKeOfDeNfEedcHdJcHedcHeeefefefefefefefedfFfGeTeUeVfHeWfIdbehaQeifJeWbebedAelemdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafKaiahcdcffLfMahahfNcHcHefeOfOeOeNeOedfPcWcHedcHfQfRfSfSfSfSewexeyfTdtdbegfUfVfVfWdbdbaQdyejdgfXdgdSdtemdVdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafKfYfZgagbgcgdgeczcHcHefefefefefergfcHdlcHedcHggefefefefefefefedcHaQdrghgigigigjdbgkaQdyejdgdgdgglcQaAazfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaugmgnfZgogpgqczcHcHcHcHcHcHcHcHgrcHdJcHgsececececececdLdLdLeqcHaQgtdbdbdbdbeggugvaQdyejdggwaAazaBfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaauaaaaaaaagxgygzgagqczcHgAcHcHcHcHgBcHgCgBczcHgAcHcHcHgAcHcHcHcHgAcHcHcQazaCgDaEaCgEaEazaBaCgFaEcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaaauaagGauaagHahahgIgJgKchchchchchchchchgLgMgNchchchchchchchchchchchchchclgOgOgOgOgPgQgRgSgTgPgUgVaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaeaaaaaaaaaagWalgXangYgZhahbfYhcgahdadadadadheaeaehfhgaehhhfaehihjhkhlhmaQhngOgOgOgOhohphphphphqhraQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadhsaaaaaaaaaahtamamhugpgmgphahvgphaadadadadadadhdaehwhxhfhyhzhAhAhfhfhfhfaQgRgOgOhBgOhCgOhBgOgOgOhDaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaehEaaaaaaaaaahFalamaxgagahGfYhagahahdadadadhdadadadaehHaehAhAhAhAhfhfhIhJhKhLhLhLhLhLhMgOgOgOaEazazclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaahNaehOahahhPahahadhahdadadadadadadadadadadadhghwhAhAhyhAhfhwhfhfaQgOgOhQhRgOhBgOhBgOhShThUaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeadadadadadadadadadadadadadadadadadadadhdaehwhfhfhihVhVhVhWaQhXhYhZgOgOgOgOgOgOdtiagwfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibaeaeaeadadadadadadadadadadadhdadadadadadadadadicicicicicicicicicaBazazazaAaCidaEazaAcjazfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeadadadadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaablalgXanieatifigaqihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeadadadadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaaaramamasatiiigaqihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeadadadadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaaijalamaxaoigaqihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadadaeaeadadadadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaafKahahhPahhPihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeadadadadadadadadadadadadadadadadadadadadadadadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeadadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeaeadadadadadadadadadadadadadadadadadadadadadaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeaeadadadadadadadadadadadadadadadadadadadadaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeaeadadadadadadadadadadadadadadadadadadaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaeaeaeadadadadadadadadadadadadadadadadaeaeaeaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaeaeaeaeadadadadadadadadadadadadadadadaeaeadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaeaeaeaeaeaeadadadadadadadadadadadadaeaeaeaeadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeadadadadadadadadaeaeaeaeaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaabacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabaaaaaaaaaaaaaa -aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -"} diff --git a/maps/RandomZLevels/backup/labyrinth.dmm b/maps/RandomZLevels/backup/labyrinth.dmm deleted file mode 100644 index 2ae607e5a3..0000000000 --- a/maps/RandomZLevels/backup/labyrinth.dmm +++ /dev/null @@ -1,453 +0,0 @@ -"aa" = (/turf/unsimulated/wall{icon_state = "rock"; name = "solid rock"},/area/space) -"ab" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/north_west) -"ac" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/north) -"ad" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/north_east) -"ae" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"af" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north) -"ag" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north) -"ah" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north) -"ai" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"aj" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"ak" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"al" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"am" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north) -"an" = (/turf/unsimulated/wall{icon_state = "0"},/area/space) -"ao" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"ap" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north) -"aq" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"ar" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"as" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"at" = (/obj/effect/landmark/corpse/scientist,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"au" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_west) -"av" = (/obj/effect/step_trigger/teleporter{name = "boss entry stairs left"; teleport_x = 138; teleport_y = 9; teleport_z = 7},/turf/unsimulated/floor{icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/temple/north_east) -"aw" = (/obj/effect/step_trigger/teleporter{name = "boss entry stairs right"; teleport_x = 139; teleport_y = 9; teleport_z = 7},/turf/unsimulated/floor{icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/temple/north_east) -"ax" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"ay" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "gibmid3"},/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"az" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "mfloor5"},/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"aA" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/center) -"aB" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/center) -"aC" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/center) -"aD" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "mgibbl4"},/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"aE" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/east) -"aF" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aG" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/center) -"aH" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aI" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/west) -"aJ" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "mgibbl3"},/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/north_east) -"aK" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/west) -"aL" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/west) -"aM" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/center) -"aN" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aO" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/west) -"aP" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/west) -"aQ" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aR" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aS" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/west) -"aT" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/center) -"aU" = (/obj/effect/landmark/corpse/scientist,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/east) -"aV" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/south_east) -"aW" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"aX" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"aY" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"aZ" = (/obj/effect/landmark/corpse/scientist,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"ba" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/south) -"bb" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south) -"bc" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south) -"bd" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"be" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south) -"bf" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/temple/south_west) -"bg" = (/obj/machinery/door/airlock/vault/temple,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_west) -"bh" = (/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_west) -"bi" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_west) -"bj" = (/obj/structure/falsewall/cultspecial,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south) -"bk" = (/obj/effect/landmark/loot_spawn,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_west) -"bl" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south) -"bm" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_east) -"bn" = (/obj/random/mob/clown,/turf/unsimulated/floor{icon_state = "asteroidfloor"; dir = 8},/area/awaymission/labyrinth/temple/south_west) -"bo" = (/turf/unsimulated/wall{icon_state = "rock"; name = "solid rock"},/area/awaymission/labyrinth/arrival) -"bp" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"bq" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"br" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"bs" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"bt" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"bu" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/area/awaymission/labyrinth/arrival) -"bv" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"bw" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"bx" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid4"},/area/awaymission/labyrinth/arrival) -"by" = (/obj/item/clothing/shoes/clown_shoes,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"bz" = (/turf/unsimulated/wall{icon_state = "iron6"},/area/awaymission/labyrinth/arrival) -"bA" = (/turf/unsimulated/wall{icon_state = "iron12"},/area/awaymission/labyrinth/arrival) -"bB" = (/turf/unsimulated/wall{icon_state = "iron14"},/area/awaymission/labyrinth/arrival) -"bC" = (/turf/unsimulated/wall{icon_state = "iron10"},/area/awaymission/labyrinth/arrival) -"bD" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid6"},/area/awaymission/labyrinth/arrival) -"bE" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/arrival) -"bF" = (/obj/machinery/power/port_gen{anchored = 1; desc = "A portable generator for power. It's still warm."; name = "Generator"},/turf/unsimulated/floor,/area/awaymission/labyrinth/arrival) -"bG" = (/obj/machinery/door/airlock/maintenance,/turf/unsimulated/floor,/area/awaymission/labyrinth/arrival) -"bH" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"bI" = (/obj/structure/simple_door/wood,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/labyrinth/arrival) -"bJ" = (/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/labyrinth/arrival) -"bK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/labyrinth/arrival) -"bL" = (/obj/machinery/gateway{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bM" = (/obj/machinery/gateway{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bN" = (/obj/machinery/gateway{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bO" = (/obj/item/clothing/mask/gas/sexyclown,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"bP" = (/obj/machinery/power/smes/magical,/turf/unsimulated/floor,/area/awaymission/labyrinth/arrival) -"bQ" = (/turf/unsimulated/wall{icon_state = "iron2"},/area/awaymission/labyrinth/arrival) -"bR" = (/obj/machinery/gateway{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bS" = (/obj/machinery/gateway/centeraway,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bT" = (/obj/machinery/gateway{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"bU" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid1"},/area/awaymission/labyrinth/arrival) -"bV" = (/turf/unsimulated/wall{icon_state = "iron7"},/area/awaymission/labyrinth/arrival) -"bW" = (/turf/unsimulated/wall{icon_state = "iron9"},/area/awaymission/labyrinth/arrival) -"bX" = (/turf/unsimulated/wall{icon_state = "iron5"},/area/awaymission/labyrinth/arrival) -"bY" = (/turf/unsimulated/wall{icon_state = "iron8"},/area/awaymission/labyrinth/arrival) -"bZ" = (/obj/machinery/door/airlock/silver{name = "Bathroom"},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/labyrinth/arrival) -"ca" = (/obj/machinery/gateway{density = 0; dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"cb" = (/obj/machinery/gateway,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"cc" = (/obj/machinery/gateway{density = 0; dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"cd" = (/obj/item/weapon/stool,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"ce" = (/obj/machinery/radiocarbon_spectrometer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cf" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/labyrinth/arrival) -"cg" = (/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/labyrinth/arrival) -"ch" = (/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/labyrinth/arrival) -"ci" = (/obj/machinery/artifact_analyser,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/awaymission/labyrinth/arrival) -"cj" = (/obj/machinery/artifact_scanpad,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/awaymission/labyrinth/arrival) -"ck" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper{info = "... the key lies beneath the tears of our mother..."; name = "translated cryptic riddle"},/obj/item/weapon/paper/awaygate/labyrinth/calypso,/obj/item/weapon/paper/awaygate/labyrinth/research,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cl" = (/obj/structure/toilet{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/labyrinth/arrival) -"cm" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/obj/machinery/door/window/northright,/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/labyrinth/arrival) -"cn" = (/turf/unsimulated/floor{icon_state = "warnwhite"; dir = 1},/area/awaymission/labyrinth/arrival) -"co" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"cp" = (/obj/item/clothing/mask/gas/clown_hat,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"cq" = (/obj/machinery/door/airlock/glass_science,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cr" = (/turf/unsimulated/wall{icon_state = "iron4"},/area/awaymission/labyrinth/arrival) -"cs" = (/turf/unsimulated/wall{icon_state = "iron13"},/area/awaymission/labyrinth/arrival) -"ct" = (/obj/machinery/door/airlock/centcom,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cu" = (/turf/unsimulated/wall{icon_state = "iron11"},/area/awaymission/labyrinth/arrival) -"cv" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"cw" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid8"},/area/awaymission/labyrinth/arrival) -"cx" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/item/weapon/shovel/spade,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cy" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cz" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cA" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cB" = (/obj/item/toy/figure/clown{desc = "An ancient clown artifact. It looks a lot like the \"Space Life\" brand Clown action figure."; name = "ancient clown statuette"},/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cC" = (/turf/unsimulated/floor{dir = 1; icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/temple/south) -"cD" = (/obj/structure/closet/excavation,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cE" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"cF" = (/turf/unsimulated/wall{icon_state = "clown2"},/area/awaymission/labyrinth/temple/entry) -"cG" = (/turf/unsimulated/wall{icon_state = "clown6"},/area/awaymission/labyrinth/temple/entry) -"cH" = (/turf/unsimulated/wall{icon_state = "clown12"},/area/awaymission/labyrinth/temple/entry) -"cI" = (/turf/unsimulated/wall{icon_state = "clown10"},/area/awaymission/labyrinth/temple/entry) -"cJ" = (/obj/item/weapon/fossil/plant,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"cK" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"cL" = (/turf/unsimulated/wall{icon_state = "clown3"},/area/awaymission/labyrinth/temple/entry) -"cM" = (/obj/machinery/door/airlock/vault/bolted{id_tag = "clowncatacombs"; name = "Catacombs"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"cN" = (/turf/unsimulated/wall{icon_state = "clown1"},/area/awaymission/labyrinth/temple/entry) -"cO" = (/obj/structure/table/reinforced,/obj/item/weapon/bananapeel,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"cP" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/airlock{id = "clowncatacombs"; layer = 2; specialfunctions = 4},/obj/item/weapon/reagent_containers/food/snacks/clownstears{pixel_y = 6},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"cQ" = (/obj/structure/table/reinforced,/obj/item/weapon/bikehorn,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"cR" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid0"},/area/awaymission/labyrinth/arrival) -"cS" = (/obj/machinery/door/airlock/science,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/labyrinth/arrival) -"cT" = (/turf/unsimulated/wall{icon_state = "fakewindows"; dir = 8},/area/awaymission/labyrinth/arrival) -"cU" = (/turf/unsimulated/wall{icon_state = "fakewindows"; dir = 4},/area/awaymission/labyrinth/arrival) -"cV" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"cW" = (/obj/structure/closet/crate/trashcart,/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"cX" = (/obj/item/weapon/bananapeel,/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"cY" = (/turf/unsimulated/wall{icon_state = "clown0"},/area/awaymission/labyrinth/temple/entry) -"cZ" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"da" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"db" = (/obj/item/weapon/fossil/skull/horned,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"dc" = (/turf/unsimulated/floor{icon = 'icons/jungle.dmi'; icon_state = "grass2"; name = "jungle grass"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"dd" = (/obj/item/weapon/storage/box/excavation,/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"de" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"df" = (/obj/structure/HonkMother/Apex{desc = "Part of an effigy for the legendary Honk Mother."; icon_state = "HonkMotherApexAged"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"dg" = (/obj/item/weapon/fossil,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"dh" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"di" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/obj/item/device/measuring_tape,/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/arrival) -"dj" = (/obj/item/weapon/shovel/spade,/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"dk" = (/obj/item/weapon/shovel,/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/arrival) -"dl" = (/obj/structure/ladder{icon_state = "ladder10"; pixel_y = 0},/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"dm" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/floor{icon_state = "asteroid3"},/area/awaymission/labyrinth/arrival) -"dn" = (/obj/item/weapon/fossil/shell,/turf/unsimulated/floor{icon_state = "asteroid_dug"},/area/awaymission/labyrinth/arrival) -"do" = (/obj/machinery/media/jukebox/clowntemple,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"dp" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"dq" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/boss) -"dr" = (/obj/effect/step_trigger/teleporter{name = "escape"; teleport_x = 86; teleport_y = 53; teleport_z = 7},/turf/unsimulated/floor{icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/boss) -"ds" = (/turf/unsimulated/wall{icon_state = "clown4"},/area/awaymission/labyrinth/temple/entry) -"dt" = (/turf/unsimulated/wall{icon_state = "clown9"},/area/awaymission/labyrinth/temple/entry) -"du" = (/obj/machinery/door/airlock/gold,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/temple/entry) -"dv" = (/turf/unsimulated/wall{icon_state = "clown8"},/area/awaymission/labyrinth/temple/entry) -"dw" = (/turf/unsimulated/wall{icon_state = "clown5"},/area/awaymission/labyrinth/temple/entry) -"dx" = (/turf/unsimulated/wall{icon_state = "rock"; name = "solid rock"},/area/awaymission/labyrinth/cave) -"dy" = (/turf/unsimulated/wall/exterior{icon_state = "sandstonevault"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dz" = (/turf/unsimulated/floor{icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/cave) -"dA" = (/turf/unsimulated/wall/exterior{icon_state = "sandstonevault"},/area/awaymission/labyrinth/cave) -"dB" = (/turf/unsimulated/wall/exterior{icon_state = "rockvault"; luminosity = 2;},/area/awaymission/labyrinth/cave) -"dC" = (/turf/unsimulated/wall/exterior{icon_state = "sandstonevault"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dD" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dE" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dF" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dG" = (/turf/unsimulated/wall/exterior{icon_state = "sandstonevault"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dH" = (/obj/structure/HonkMother/Apex,/turf/unsimulated/wall/exterior{icon_state = "rockvault"; luminosity = 2;},/area/awaymission/labyrinth/cave) -"dI" = (/turf/unsimulated/wall/exterior{icon_state = "sandstonevault"},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dJ" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/area/awaymission/labyrinth/cave) -"dK" = (/turf/unsimulated/wall{icon_state = "0"},/area/awaymission/labyrinth/arrival) -"dL" = (/turf/simulated/wall/cult,/area/awaymission/labyrinth/arrival) -"dM" = (/turf/simulated/wall/cult,/area/awaymission/labyrinth/boss) -"dN" = (/turf/unsimulated/floor/lava,/area/awaymission/labyrinth/arrival) -"dO" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dP" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dQ" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dR" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dS" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dT" = (/obj/effect/mist,/turf/unsimulated/wall/exterior{icon_state = "rockvault"; luminosity = 2;},/area/awaymission/labyrinth/cave) -"dU" = (/obj/structure/HonkMother/Base,/obj/effect/mist,/turf/unsimulated/wall/exterior{icon_state = "rockvault"; luminosity = 2;},/area/awaymission/labyrinth/cave) -"dV" = (/obj/effect/decal/cleanable/blood{icon_state = "mgibbl3"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"dW" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dX" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dY" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"dZ" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"ea" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "mfloor5"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"eb" = (/obj/effect/decal/cleanable/blood{icon_state = "mgibbl4"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"ec" = (/obj/effect/decal/cleanable/blood{icon_state = "mfloor5"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"ed" = (/obj/effect/decal/cleanable/blood{icon_state = "gib6"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"ee" = (/obj/item/weapon/paper{info = "Pray to the honk mother if ye are ready to face her champion. Shouldst thou be deem'd worthy, the champion will appear. There shall be no retreat once the conflict begins. Though her holy highness is a lady of laughter, there will be no mercy."; name = "parchment"},/turf/unsimulated/floor{icon_state = "cult"; luminosity = 3; name = "plating";},/area/awaymission/labyrinth/boss) -"ef" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"eg" = (/obj/effect/landmark/corpse/scientist,/obj/effect/decal/cleanable/blood{icon_state = "mgibbl1"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"eh" = (/turf/unsimulated/wall{density = 0; icon_state = "0"; name = "ladder"; opacity = 0},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_n"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/obj/structure/ladder{icon_state = "ladderup"; pixel_y = -4},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"ei" = (/obj/effect/decal/cleanable/blood{icon_state = "gibmid3"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/awaymission/labyrinth/boss) -"ej" = (/turf/unsimulated/floor{dir = 8; icon_state = "asteroid"; name = "dirt";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_w"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_s"; name = "solid rock";},/turf/unsimulated/wall/exterior{density = 0; icon_state = "rock_side_e"; name = "solid rock";},/area/awaymission/labyrinth/cave) -"ek" = (/obj/effect/step_trigger/teleporter{name = "boss return stairs left"; teleport_x = 126; teleport_y = 217; teleport_z = 7},/turf/unsimulated/floor{dir = 1; icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/boss) -"el" = (/obj/effect/step_trigger/teleporter{name = "boss return stairs right"; teleport_x = 127; teleport_y = 217; teleport_z = 7},/turf/unsimulated/floor{dir = 1; icon_state = "rampbottom"; name = "stairs";},/area/awaymission/labyrinth/boss) - -(1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeabaaaaaaacafagafafafafafafafafafahafafafafafafafafafacaaaaaaaaaaaaaaacafafafafafafafacaaaaaaaaaaadaiaiaiaiaiaiaiadaiaiaiaiajadaiaiaiaiaiaiaiadajadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaeaeaeababababacafacafafafafafafafafafacafafafafafafafafafacacacaaaaaaaaaaacafacacacacacafacaaaaaaaaaaadaiaiaiaiaiaiaiadaiadaiadadadaiaiaiaiaiaiaiadakadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalaeabalabaeaeaeaeaeaeaeacamacafafafafafafafafafacafafafafafafafafafagafacaaaaaaaaaaacafacanananacamacaaaaaaaaaaadaiaiaiaiaiaiaiakaiadaiadaiaiaiaiaiaiaiaiaiadajadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeabaoabaeaeaeaeaeaeaeacacacacacafafafafafafafacafafafapafafafacacacafacaaaaaaaaaaacafacacacacacacacaaaaaaaaaaadaiaiaiaiaiaiaiadaiadaiadaiaiaiaiaqaiaiaiaiadakadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalabaeabaeaeaeaeaeaeaeaeaeaeaearaeacafafafafafafafacafafafafafafafacanacafacaaaaaaaaaaacafafafafafacaaaaaaaaaaaaaaadaiaiaiaqaiaiaiadaiadajadaiaiaiaiaiaiaiaiaiasaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeabaeaeaeaeaeaeaeaeataeaeabaeacagacahacacacagacafafafafafafafacacacafacacacacacacacacacacacafacacacacacacacacadaiaiaiaiaiaiaiadaiadadadaiaiaiaiaiadadadadadadadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaearaeabaeaeaeaeauaeaeaeaeaeaeabaeacafafafafafafafagafafafafafafafacafafafacafafafafafafafafafacafagafafafafafafafadaiaiaiaiaiaiaiadaiaiaiadaiaiaiaiaiasaiajadavawadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababarabababaeaeaeaeaeaeaeaeaeaeaeabaeacacacacacacacacacafafafafafafafacafacacacafafafafafafafafafacacacafafafafafafafadasadaiaiaiaiaiadaiadaiadasadadadadadakadadakakadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaearaeaeaeaeaeaeaeaeaeaeaeabaeagafafafafafacanacafafafafafafafacafacafafafafafafafafafafafacafafafafafafafafafadaiadaiaiaiaiaiadajadajadaiaiaiaiaiadaiaiaiaiaiadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaeaeaeaeaeababacafafafafafacacacacacagacacacacacafacafafafafapafafafafacacacafafafafafafafadadadaiadadadasadadadakadadadaiaiaiaiaiadadadakadadadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaearalabalabaeaeaeaeaeabalacafafafafafafafafafafafacanananacafacafafafafafafafafafacamahafafafafafafafadajadaiadaiaiaiadanadaiaiaiaiaiaxaiaqaiadajaiaiaiajadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeabaoabaoabababababababaeacafafafafafafafafafafafacacacacacafacafafafafafafafacahacafacafafafafapafafadaiadaiadaiadaiadanadaiaiaiaiaiaiaiaiaiadadadasadadadaiadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaoaeaeaeaeaeaeaeaeaeaeaeacafafafafafafafafafafafacafafafafafagafafafafafafafacamafafacafafafafafafafadaiadaiadaiadajadanadaiaiaiaiaiaiaiaiaiasaiadaiaiaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeauaeaeaeababababababababababababababacacacafafafafafafafacacacafacacacacacafafafafafacacacacacacacafafafafafafafadaiadaiadaiadadadadadadadadadadadaiaiaiadaiadaiadadadadadadadakadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalabaeaeaeaeaeaeaearaeaeaeaeaeabalalalabaeaeaeaeaeacafafafafafafafafafacamacafafafahafafafafafacanananananacafafafafafafafadaiaiaiadaiadaiaiaiaiaiadanananadaiaiaiadaiaiaiaiaiaiajadaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeataeaeabaeaeaeaeaeababaoababaeaeaeaeaeabababafafafafafafafacacacafafafacacacacacagacacacacacanacafafafafafafafadaiadadadaiadaiaiaiaiaiadadadadadakadadadadadadadadadadadaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeaeaeaeabaeaeaeaeaeaoaeaeaeaeaeaeaeaeaeaeaeabafafafafafafafacafafafafafahamacafafafafafafafacanacafafafafafafafadaiadaiaiaiadaiaiaiaiaiaiaiadaiaiaiaiaiaiaiaiaiadaiaiaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabababababababababaeaeataeaeabaeaeaeaeaeaeaeaeaeaeaeabababafafafafafacafafafafafacacacafafafafafafafacanacacacacacahacacadaiadaiadadadaiaiaiaiaiaiaiadaiaiaiaiaiaiaiaiaiadaiaiaiaiaiaiaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaealabaeaeaearaeaeaeaeaeabaeaeaeaeauaeaeaeaeaeaearalabafafafafafagafafafafafacafafafafafafafafafacanacafafafafamacanadaiadaiadaiaiaiaiaqaiaiaiaiadaiaiaiaiaiaqaiaiaiadaiaiaiaqaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeabaoabaeaeaeabaeaeaeaeaeabababaeaeaeaeaeaeaeabarabababacacacacacacafafafafafacafafafafafafapafafacanacagacacacacacanadaiadaiadaiaiaiaiaiaiaiadasadadadaiaiaiaiaiaiaiadaiaiaiaiaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeaeabaeaeaeaeaeabanabaeaeaeaeaeaeaearalabafafafafamacanacafafafafafacafafafafafafafafafacanacafafafafafacanadaiadaiadaiaiaiaiaiaiaiasaiasaiaiaiaiaiaiaiaiaiasaiaiaiaiaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeabaeaeaeaeaeabababarabababanabaeaeaeaeaeaeaeabaoabafafafafamacahacacacahacacacafafafafafafafacacacacacafafafafafacacadaiadaiadadadaiaiaiaiaiadaiadaiaiaiaiaiaiaiadadadaiaiaiaiaiaiaiaiaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaeaeaeaeaeaeaeabaeaeaeabanabaeaeaeaeaeaeaeabafafafafafafamacafafafafafacamagafafafafafafafacafafafahafafafafafafafadaiaiaiaiaiadaiaiaiaiaiadajadaiaiaiaiaiaiaiadajadaiaiaiaiaiaiaiaiaiaiaiakajadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabababababababababaeaeaeaeaeabaeabaeabababarabababababarabafafafafafacacacafafafafafacacacafafafacacacacacafacacacafafafafafafafadadadadadaiadasadadadadadadadadadaiaiaiadadadasadasadadadasadaiaiaiadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaearaeaeaeaeaeabaeaeaeaeaeabaeabaeabaeaeaeaeaeaeaeacafafafafafafafafafahafafafafafafafahafafafacafafamacafacamacafafafafafafafafafadaiaiaiaiaiadaiaiaiaiaiadajadaiaiaiadaiaiaiaiaiadajadaiadaiaiaiadaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeabababaeaeaeaeaeabababababababaeabaeabaeaeaeaeaeaeaeacafafafafafapafafafacafafafafafafafacacacacacafacacacafacafacafapafafafafafafafadaiadadadadadaiaiaiaiaiadakadadadadadaiaiaiaiaiadaiadaiadadadadadaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeabanabaeaeaeaeaeaeaeaeaeabaeaeaeabaeabaeaeaeaeaeaeaeacafafafafafafafafafacafafafafafafafahafafafacafafafafafacafacafafafafafafafafafadaiadaiaiaiaiaiaiaiaiaiasaiaiaiadajadaiaqaiaiaiasaiadaiadaiaiaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeabababanabababaeaeaeaeaeaeaeabaeabababaeabaeaeaeaeaeaeaeacacacafafapafafafamacamafafapafafafacacacafacafacacacacacafacafafafafafafafafafadaiadaiaiaiaiaqaiaiaiaiadadadaiadaiadaiaiaiadadadadadaiadaiaiaiaiaiaqaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeabanananabaeaeaeaeaeaeaeaeaeabaeabaeaeaeabaeaeaeauaeaeaeaeaeacafafafafafafamacamafafafafafafafafacafacafafafacafafafacafafafafafafafafafakaiadaiaiaiaiaiaiaiaiaiadaiaiaiaiaiadaiaiaiadaiaiaiaiaiadaiaiaiaiaiaiaiaiaiasaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoabababababababaeaeaeaeaeauaeaeaeabaeabaeabaeabaeaeaeaeaeaeaeaeaeacafafafafafafamacamafafafafafapafafacafacacacafacafacafacafafafafafacacacacadaiadadadaiaiaiaiaiaiaiadaiadadadadadadadadadaiadadadaiadaiaiaiadaiaiaiadadadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaoalaeaearaeaeaeaeaeaeaeaeaeabaeabaeabalabaeaeaeaeaeaeaeaeaeacafamamamamafamacamafafafafafafafafacafacamacafacamacafacafafafafafacanananadaiadaiaiaiaiaiaiaiaiaiadaiadaiaiaiaiaiaiaiadaiadaiaiaiadaiaiaiadaiaiaiadajadajadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeabababababababaeaeaeaeaeaeaeabaeabaeabababababababaeaeaeaeaeacagacacacacacacacacacacacafafafafafacafacafacafacacacagacacacacacagacanananadaiadaiaiaiaiaiaiaiadasadaiadaiaiaiaiaiaiaiadaiadadadadadaiaiaiadakadadadakadakadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaeaealabaeaeaeaeaeaeaeabaeabaeabaeaeaeaeaeabaeaeaeaeaeacafafafafafafafafafafafacamamamamamacamacafacafacafafafafafafafafafacanananadaiadaiaiaiaiaiaiaiadaiadajadaiaiaiaiaiaiaiadaiadaiaiajakaiaiaiadaiadaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaeabababababababarabababarabarabaeaeaeaeaeabababababaracacacacacacacagacacafafacacacacacacacacacagacafacafafafapafafafafafadadadadadaiadadadadadadadadadaiadadadaiaiaiaiaiaiaiadaiadaiadadadadadadadaiadaiaiaiaiaiaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaearaeaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeabaeaeaeaeaeacafafafacafafafafafafafacafafafagafafafafafacafagafafafafafafafafafadaiaiaiaiaiakajadaiaiaiaiaiaiaiadaiaiaiaiayaiaiaiaiaiaiadaiadaiadaiaiaiaiaiadaiaiaiaiaqaiaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeabarabaeaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeabaeaeaeaeaeacafafafacafafafafafafafacafacacacafafafafafacacacafafafafafafafafafadaiadadadadadadadaiadadadadadadadaiaiaiaiaiaiaiaiaiaiaiadaiadaiadaiadadadadadaiaiaiaiaiaiaiadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaearaeaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeabaeaeaeaeaeacafafafafafafafafafafafacafacanacafafafafafacamacafafafafafafafafafadaiadajadaiaiaiaiaiadaiaiaiaiaiadaiaiaiaiaiaiaiaiaiaiaiadaiaiaiadaiadajaiajadaiaiaiaiaiaiaiasaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeaeabababaeaeaeaeaeaeaeabababaeaeaeaeaeaeaeaeaeabababaeaeaeabababafafafafafafafafafafafacafacanacafafafafafacagacafafafafafafafadadadaiadakadaiadakadadadaiaiaiaiaiadadadaiaiaiaiaiaiaiadadadadadaiadaiadadasadadasadaiaiaiadadadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeaeabalabaeaeaeaeaeaeaeabababaeaeaeaeaeaeaeaeaeabababaeaeaearalarafafafafafafafafafafafacafacanacafafafafafafafacafafafafafafafadajaiaiaiaiaiaiadajadaiaiaiaiaiaiaiaiaiakaiaiaiaiaiaiaiadaiaiaiasaiadaiadaiaiaiaiaiadaiaiaiadanadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeabaeaeaeaeaeabaeabaeaeaeaeaeaeaeabababababababarabababababababababababababafafafafafapafafafafafacafacacacafafafapafafafacacacacacacacagadadadadadaiadadadadadaiaiaiaiaiaiaiaiaiadadadadadadadadadaiaiaiadadadasadaiaiaiaiaiadaiaiaiadanadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalabaeaeaeaeaeabaeabaeaeaeaeaeaeaearaeaeaeaeaeaeaearaeaeaeaeaeaeaeaeaeaeaeabafafafafafafafafafafafacafacafafafafafafafafafacafafafacanacafadaiaiaiadajadaiaiaiadaiaiaiaqaiaiaiaiaiadaiaiaiaiaiasaiaiaqaiaiadaiaiaiaiaiaiaiaiaiadaiaiaiadanadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaoabababababababaeabababaeaeaeaeaeabaeaeaeaeaeaeaeabababababababababababaeabafafafafafafafafafacacacafacafafafafafafafafafacafacafacanacafadaiaiaiadakadaiaiaiadaiaiaiaiaiaiaiaiaiadaiadadadadadaiaiaiaiaiadaiaiaiaiaiaiaiaiaiadadadadadanadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabanananabaeaeaeabaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeabanananananabaeabafafafafafafafafafacafafafacafafafafafafafafafagafacafacanacafadaiaiaiaiaiaiazaiaiadaiaiaiaiaiaiaiaiaiasaiaiaiaiajadaiaiaiaiaiadaiaiaiaiaiaiaiaqaiadanananananadaiadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabababababababaeabababarabababaeaeaeauaeaeaeaeaeaeaeabanananananabaeabacaAaAaAaAaAaBaAaAaAafacacacacacacaAaCaAaAaAaAacafacafacanacafadaiaiaiaiaiaiaiaiaiadakadaiaiaiadadadadadadadadadadadadadaiaiaiadaiaiaiaiaDaiaiaiaiaEaEaEaEaEaEaEaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaeaeaeaeaeabaeaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeabanananananabaeabanaAaGaGaGaGaGaGaGaAafacanananananaAaGaGaGaGaGaAamacafacanacafadaiaiaqaiaiaiaqaiaiadajadaiaiaiadaiaiaiaiaiaiaiaEaHaHaHasaiaiaiakaiaiaiaiaiaiaiaiaiaEaHaHaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeabaeaeaeaeaeabaeaIaIaIaIaIaeabaeaeaeaeaeaeaeaeaeaeaeabanananabababaeababaAaGaGaGaGaGaGaGaAafacanananananaAaGaGaGaGaGaAacacafacanacafadaiaiaJaiaiaiaiaiaiadaiaEaEaEaEaEaFaEaiaEaEaEaFaEaHaHaHadaiaiaiadaiaiaiaiaiaiaiaiaiaEaHaHaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeabaeaeaeaeaeabaeaIaKaKaKaIaeabaeaeaeaeaeaeaeaeaeaeaeabanananabaeaeaeabaeaCaGaGaGaGaGaGaGaAafacanananananaAaGaGaGaGaGaAanacafacanacafadaiaiaiaiaqaiaiaiaiadaiaEaHaHaHaHaHaEajaEaHaHaHaHaHaHaHadaiaiaiadaiaiaiaiaiaiaiaiaiaFaHaHaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabarabaeaeaeabarabaIaIaKaKaKaIaIaIaIaIaLaIaIaIaIaIaLaIaIaIaIaIaIabaeabababaeaAaGaGaGaGaGaAaAaAafacaAaAaAaAaAaAaGaGaMaGaGaAanacafacacacafadaiaiaiaiaiaiaiaiaiaEaFaEaHaHaHaHaHaEaEaEaHaHaHaHaHaHaHaEaEaEaNaEaEaEaEaEaEaEaEaEaEaEaHaHaHaHaHaHaHaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeabaeaeaeaeaeabalabaKaKaKaKaKaKaKaIaOaIaKaKaKaKaKaPaKaKaKaKaKaKaKabaeaeaeaeaeaAaGaGaGaGaGaCaGaAafacaGaGaGaGaGaAaGaGaGaGaGaAanacafafafafafadaiaiaiaiaiaiaiaiaiaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaHaHaEaQaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIabaoabaeaeaeaeaeabaeaeaeaeaeabababaKaKaKaKaKaKaKaIaPaIaIaIaIaIaLaIaKaKaKaKaKaKaKabaeababababaAaGaGaGaAaCaAaAaAaCaAaGaGaGaGaGaAaGaGaGaGaGaAaAaAaAaAaAaAaAadakadaiaiaiaiaiadakaEaHaHaHaHaRaHaHaHaHaEaHaHaHaRaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaEaFaEaHaHaRaHaHaHaHaEaFaEaHaHaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaraeaeaeaeaeabaeaeaeaeaearaKaKaKaKaKaSaKaKaKaIaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKabaeaeaeabanaAaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaAaGaGaGaGaGaGaGadajadaiaiaiaiaiadajaEaHaHaHaHaHaHaHaHaHaNaHaHaHaHaHaHaHaEaHaHaHaRaHaHaHaHaHaEaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaKaIaIabababababababaeaeaeabababaKaKaKaKaKaKaKaKaKaLaKaKaKaKaKaLaKaKaKaKaSaKaKaKaKabababaeabanaAaAaAaAaAaGaGaGaGaGaGaGaGaGaAaCaAaCaAaCaAaAaAaGaGaGaGaGaGaGadadadadadasadadadadaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaOaKaKaPaOaIaKaKaKaPaOabaeaeaeabaOaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaLaGabalabanananananaAaGaGaGaGaGaMaGaGaGaAaGaGaGaAaGaGaGaAaGaGaGaGaGaGaGaGaGaBaGaGaGaGaGaGaGaCaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaNaQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaKaKaKaIaIabababarabaKaIaLaIaKaKaKaKaKaIaIaIaIaIaIaIaIaIaKaKaKaKaKaKaKaKaKaIaGabababaAaAaAaAaAaAaAaAaGaGaGaGaGaGaGaAaAaAaGaAaGaAaGaAaGaGaGaMaGaGaGaGaGaAaGaMaGaGaGaGaGaAaHaHaHaHaHaEaFaEaEaEaEaEaEaEaEaEaEaEaEaEaNaEaHaHaHaEaEaEaFaEaEaEaHaHaHaHaHaHaHaEaHaHaHaRaHaHaHaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaLaKaKaKaKaKaKaKaKaKaIaKaKaKaIaKaKaKaKaKaIaOaIaKaKaKaKaKaLaKaKaKaKaKaKaKaKaKaIaGaGaGaGaGaGaGaGaGaGaGaBaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaAaHaHaHaHaHaEaHaHaHaHaHaHaHaEanaEaHaHaHaEaQaEaHaHaHaFaHaHaHaEaQaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaIaIaIaIaIaKaKaKaIaKaIaKaIaIaIaIaIaKaKaKaKaKaKaKaKaKaIaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaGaGaGaGaGaAaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaAaAaAaAaAaEaEaFaEaEaEaEaEaEaEaEaEaHaEaEaEaHaEaHaEaEaEaEaEaEaEaHaHaHaEaFaEaEaEaEaEaFaEaEaEaHaHaHaHaHaHaHaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaIaKaKaKaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIanananananaAaTaGaGaGaGaGaGaGaGaAaGaGaGaGaGaAaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaAanaEaHaHaHaHaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaHaHaHaHaHaHaFaHaHaHaHaHaEaHaHaHaHaHaEaQaEaHaHaHaHaHaHaHaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIaIaIaIaIaKaKaKaKaKaKaKaIaIaIaIaIaLaIaIaIaLaIaIaIaIaIaIaIaKaIaKaKaKaIaIaIaPaIaIaIaAaAaAaAanaAaTaGaGaGaGaGaGaGaGaAaAaAaAaAaAaAaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaCaAaCaAanaEaHaEaHaEaHaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaHaHaRaHaHaEaHaEaEaEaEaEaHaEaNaEaHaHaHaHaHaEaEaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIaOaOaOaIaKaIaKaKaKaIaOaPaKaIaGaGaGaGaGaAanaAaTaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaAaGaAaTaAaGaGaGaGaGaGaGaGaGaAaGaEaHaEanaEaQaEaHaEaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaHaEaEaEaHaHaHaHaQaEaHaHaHaHaHaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIaKaKaKaIaKaIaIaIaIaIaIaIaKaIaGaGaGaGaGaAaAaAaAaAaTaGaGaGaGaGaGaAaGaAaAaAaAaAaAaAaGaAaAaAaAaAaBaAaCaAaAaAaAaAaGaEaHaEanaEaEaEaFaEaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaHaEaEaEaHaEaHaEaEaEaEaEaEaEaEaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaSaKaKaKaKaIaKaKaKaIaKaIaOaOaOaIaKaKaKaLaGaGaGaGaGaGaGaAanaAaTaGaGaGaGaGaGaAaGaGaGaGaGaGaGaAaGaAaGaGaGaGaGaAaGaAaGaGaGaAaGaEaHaEanaEaHaHaHaHaHaHaHaHaHaEaHaUaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaFaHaHaHaHaHaEaHaEaEaEaHaEaHaFaHaHaHaHaHaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaKaKaKaIaIaIaIaIaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaKaKaKaKaIaIaIaPaIaKaIaIaPaIaIaKaIaIaIaGaGaGaGaGaGaGaAaAaAaAaAaTaGaGaGaGaAaGaAaAaAaAaAaAaAaBaAaGaGaGaGaGaAaGaAaGaAaGaAaGaEaHaEanaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaHaHaEaEaEaHaHaHaEaHaEaEaEaFaEaEaEaHaHaHaHaHaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaIaKaKaKaIanananaIaKaKaKaKaKaIanaIaKaKaKaKaKaKaKaKaKaKaKaLaKaKaKaIaKaKaKaKaKaKaKaIanaIaGaGaGaGaGaGaGaAaGaGaGaAaTaGaGaGaGaAaTaAaGaGaTaBaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaAaGaEaHaEanaEaHaHaHaHaHaHaHaHaHaNaHaHaHaHaHaHaHaHaHaEaHaHaHaRaHaHaHaHaHaEaHaHaHaEaHaFaHaHaHaHaHaEaHaHaHaHaHaFaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaIaIaIaKaKaKaIaKaKaKaIaIaIaIaIaIaIaIaIaIaIanaIaIaIaKaKaKaKaKaKaKaKaKaIaKaKaKaIaIaIaIaIaIaIaIaIanaIaGaGaGaGaGaGaGaAaGaGaGaAaAaAaTaGaGaAaAaAaGaAaAaAaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaAaGaEaHaEanaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaEaEaEaEaEaEaHaHaHaHaHaEaNaEaEaEaEaEaEaEaEaEaEaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaPaKaKaKaIaKaKaKaKaKaKaKaKaKaIanananaIaKaKaKaKaKaKaKaKaKaIaKaOaKaPaKaKaKaIanananananaIaGaGaGaGaGaGaGaAaGaGaGaGaGaAaTaGaGaAaGaGaGaAaGaGaGaGaMaGaGaGaGaGaGaAaGaAaGaAaTaAaGaEaHaEanaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaQaEaHaHaHaFaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIaIaIaIaIaIaIaIaIaIaIaLaIaLaIaKaKaKaIaKaKaKaIaIaIaIaIaIaIaIaIaGaGaGaGaGaAaGaGaGaGaGaAaAaAaBaAaCaAaGaAaGaGaGaGaGaGaGaGaGaAaAaAaGaAaGaAaAaAaGaEaHaEaEaEaEaEaEaEaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaHaHaHaHaHaHaHaEaEaEaHaEaHaEaEaEaHaHaHaHaHaHaHaHaHaEaHaEaEaEaEaEaEaEaEaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaLaOaIaKaKaKaIaKaKaKaIanaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaIaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaLaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaAaGaGaGaEaHaHaHaHaHaEaQaNaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaHaHaHaHaHaHaHaFaHaHaHaHaHaEaHaFaHaHaHaHaHaHaHaHaHaEaHaEaHaHaHaHaHaEanaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaIaIaKaIaKaIaKaKaKaIaIaIaIaIaKaIaIaIaPaIaIaIaIaIaLaIaIaIaPaIaIaIaKaKaKaKaKaKaKaKaKaKaKaIaGaGaGaGaGaAaAaAaGaGaGaGaGaGaGaGaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaAaAaAaAaAaCaAaAaEaEaEaEaEaHaEaEaEaEaEaEaEaFaEaEaEaEaEaFaEaEaEaFaEaHaHaHaHaHaHaHaEaEaEaEaEaEaEaHaEaHaHaRaHaHaHaHaHaHaEaFaEaFaEaEaEaHaEanaEaEaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaLaKaKaKaIaOaIaKaKaKaKaKaKaKaIaKaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIaGaGaGaGaGaAanaAaGaMaGaGaGaGaGaGaGaCaGaAaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaGaGaGaGaGaGaCaGaEaHaEaHaHaHaHaHaHaHaEanaEaHaHaHaHaHaFaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaEanananaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaKaKaIaIaIaIaIaIaIaKaKaKaKaKaKaKaIaKaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaKaKaIaAaAaCaAaAaAanaAaGaGaGaGaGaGaGaGaGaAaAaAaAaAaAaAaAaAaAaAaAaAaGaAaGaAaGaGaGaGaGaGaGaAaAaEaHaEaHaEaEaEaEaEaEaEaEaEaHaHaHaHaHaEaHaEaEaEaEaEaEaEaEaEaEaEaEaEaHaEaNaEaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaEaHaEanananaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaIaKaLaKaKaKaKaKaKaKaLaKaKaKaIaKaKaKaKaKaKaKaKaKaIaOaIaKaKaKaKaKaKaKaLaKaKaKaKaKaKaKaLaKaIaKaKaKaKaKaKaKaKaKaIaGaGaGaAanananaAaGaGaGaGaGaGaGaGaGaAaTaCaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaEaHaHaHaEaHaHaHaHaHaHaHaFaHaHaHaHaHaEaQaEaHaHaHaHaHaEaQaHaHaHaHaHaHaEaQaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaEanananaEaHaEaQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaIaOaIaIaIaIaIaPaIaIaIaIaIaKaIaKaKaKaKaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaIaLaIaKaKaKaKaKaIaKaIaLaIaKaKaKaIaIaIaIaIaGaGaGaAaAaAaAaAaCaAaBaAaCaAaAaAaAaAaCaAaGaGaGaGaGaGaGaGaGaAaGaAaGaAaGaGaGaGaGaGaGaGaGaEaEaEaEaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaEaEaHaHaHaHaHaEaNaEaEaEaEaEaEaEaNaEaFaEaEaEaEaEaEaEaHaHaHaHaHaEaEaEaHaEanaEaEaEaHaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaIaKaLaKaKaKaKaKaKaKaKaKaIaKaLaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaSaKaKaKaLaOaLaKaKaKaKaKaIaKaKaKaIaKaKaKaIaGaGaGaGaGaGaGaAaGaGaGaGaGaAaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaCaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaFaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaNaHaHaHaHaHaHaHaHaHaHaHaEaHaHaHaNaHaHaHaHaHaHaHaFaQaEaHaHaHaHaHaHaHaEaHaEanaEaHaHaHaNaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaKaKaKaKaIaKaIaKaKaKaSaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaIaIaPaIaIaIaIaIaIaIaKaIaKaKaKaIaGaGaGaGaGaGaGaAaGaAaAaAaAaAaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAaAaAaAaAaAaAaGaGaGaGaGaGaGaGaGaEaHaHaHaHaHaHaHaHaHaEaEaEaEaEaFaEaHaHaHaHaHaHaHaHaHaHaHaEaHaEaEaEaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaHaHaEaHaEaEaEaHaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaKaKaIaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIanaIaKaKaKaKaKaKaKaIaOaIaKaKaKaIaGaGaGaGaGaGaGaAaGaAanaAaGaBaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAanananananaAaGaGaGaMaGaGaGaGaGaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaHaHaHaHaRaHaHaHaHaHaEaHaEaHaHaHaHaHaHaHaHaHaHaHaFaHaHaHaHaRaHaHaEaHaHaHaHaHaNaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaKaKaIaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaIaIaIaIaIaIaIaGaGaGaGaGaGaGaAaGaAanaAaGaAaGaAaGaGaGaGaMaGaGaAaCaAaGaGaGaGaGaGaGaAaAaAanananaAaGaGaGaGaGaGaGaGaGaEaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaEaEaEaHaHaHaHaHaHaHaEaEaEaHaEaHaHaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaEaEaEaEaFaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaKaKaIaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaLaKaKaKaKaKaIaGaGaGaGaGaGaGaAaGaAanaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAanananaAaGaGaGaGaGaGaGaGaGaEaHaHaHaHaHaHaHaFaQaEaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaKaKaIaKaIaIaIaPaIaIaIaIaIaLaIaIaIaPaIaIaIaIaIaIaIaKaKaKaKaKaKaKaKaKaIaIaIaIaIaKaIaLaAaAaAaAaAaAaAaGaAanaAaGaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAanananaAaAaAaAaAaAaAaAaAaAaEaEaEaHaHaHaHaHaEaNaEaHaHaHaHaHaHaHaEaHaHaHaEaEaEaEaEaHaEaEaEaFaEaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaEaFaEaHaHaHaHaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaOaIaKaIaKaKaKaIaOaIaKaKaKaKaKaIaKaKaKaLaKaKaKaSaKaKaKaKaKaIanananaIaKaKaKaAaGaGaGaGaGaGaGaAanaAaTaAaGaAaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAanananananaAaGaGaGaAaGaGaGaGaGaEaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaNaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaHaHaNaQaNaHaHaHaHaHaEaHaHaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaIaIaIaKaKaKaKaKaIaKaIaIaIaKaIaKaKaKaIaLaIaKaKaKaKaKaIaKaIaIaIaKaKaKaKaKaKaKaKaKaIaIaIaIaIaIaIaIaAaGaAaAaAaAaAaAaAanaAaAaAaGaAaAaAaAaAaGaGaGaGaGaAaGaGaGaAaAaAaAaAaAaAaAaAaAaAaAaAaGaGaGaAaAaAaGaAaGaEaHaHaHaHaHaEaHaHaHaEaFaEaEaEaFaEaEaEaEaEaEaEaHaQaHaEaHaEaEaEaHaHaHaHaHaEaNaEaEaEaFaEaEaEaEaEaHaHaHaHaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIaKaIaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIaKaIaOaIaKaKaKaKaKaKaKaKaKaIaKaKaOaIaIaIaIaAaGaCaGaGaGaGaGaAanananaAaGaGaGaGaTaAaGaGaGaGaGaAaGaGaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAaGaAaTaEaHaHaHaHaHaFaHaHaHaFaQaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaHaEanaEaHaHaHaHaHaEaHaHaHaHaHaEaHaHaHaFaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIaKaIaKaIaIaIaKaKaKaKaKaKaKaIaIaIaIaIaKaIaKaIaKaKaKaIaIaIaIaIaIaIaKaIaIaIaIaIaIaAaAaAaGaGaGaGaGaAaAaAaAaAaGaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaGaAaAaAaAaAaGaAaGaGaGaGaGaGaGaGaGaAaGaVaVaVaVaVaWaVaVaVaHaHaHaEaEaEaHaHaHaHaHaHaHaHaHaEaHaEaEaEaHaEanaEaEaEaEaEaEaEaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIaKaKaKaIanaIaKaKaKaKaKaKaKaKaKaIanaIaKaKaKaIaKaKaKaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaAaGaGaGaGaGaGaGaGaGaCaGaAaGaGaGaGaGaGaGaCaGaAaGaGaGaGaGaAanaAaGaGaGaAaGaGaGaGaGaGaGaGaGaCaGaVaXaXaXaXaXaXaXaVaHaHaHaEaQaEaHaHaHaHaHaHaHaHaHaEaHaEaHaHaHaEanananaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaLaIaIaIaIaIanaIaKaKaKaKaKaKaKaKaKaIaIaIaIaIaKaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIaPaIaIaIaLaAaAaAaGaGaGaGaGaGaGaAaGaAaGaGaGaGaGaGaGaAaGaAaAaAaAaAaGaAanaAaBaAaAaAaAaAaGaGaGaGaGaGaGaVaVaVaXaXaXaXaXaXaXaVaNaEaEaEaHaEaEaEaHaHaHaHaHaHaHaEaNaEaHaEaEaEaEaEaEaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIanaIaKaKaKaKaSaKaKaKaKaKaKaIanaIaKaIaOaKaKaKaKaKaKaKaKaKaKaKaKaIaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaAanaAaGaGaGaGaGaCaGaGaGaGaGaGaGaYaXaXaXaXaXaXaXaXaXaVaHaHaHaEaHaHaHaFaHaHaHaHaHaHaHaFaHaHaHaEaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaKaKaKaKaIanaIaKaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaAaAaAaGaGaGaGaGaGaGaAaAaAaAaAaAaAaAaAaAaAaGaGaGaGaGaAaAaAaGaGaGaGaGaVaXaXaXaXaZaXaXaVaEaEaHaHaHaEaEaEaEaEaHaHaHaHaHaHaHaEaEaEaEaEaEaEaHaEaHaEaEaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIanaIaKaKaKaKaKaKaKaKaKaKaKaKaKaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaBaTaAaTaGaGaGaGaBaGaGaGaGaGaGaGaCaGaAaGaGaGaGaGaVaXaXaXaXaXaXaXaWaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaHaEaHaEanaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaIaKaKaKaKaKaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaKaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaAaGaBaGaGaGaMaGaAaGaGaGaGaGaGaGaAaGaAaAaAaAaAaAaVaXaXaXaXaXaXaXaVaHaHaHaHaHaHaHaHaHaEaEaEaHaHaHaHaHaEaHaHaHaHaHaEaHaEaHaEaEaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaKaKaKaKaPaKaKaKaKaKaIanaIaKaKaKaKaKaIaKaKaKaKaKaIanananananaIaKaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaGaGaGaGaCaGaGaGaGaGaGaGaCaGaAaTaGaGaGaGaAaGaGaGaGaGaGaGaAaGaGaGaGaGaGaGaWaXaXaXaXaXaXaXaVaHaHaHaHaHaHaHaHaHaEanaEaHaHaHaHaHaFaHaHaHaHaHaFaHaEaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaIaIaIaIaIaIaIaIaIaLaIaIaIaKaKaKaKaKaIaKaKaKaKaKaIanananananaIaKaAaGaGaGaGaGaGaGaAaGaGaGaAaGaGaGaGaGaAaAaAaAaAaAbababababaaBbababababaaBaAaGaGaGaGaGaGaGaAaAaAaAaAaAaAaAaVaXaXaXaXaXaVaYaVaHaHaHaHaHaHaHaHaHaEaEaEaEaEaEaEaEaEaHaHaHaHaHaEaEaEaEaEaHaEaFaEaEaEaEaEaFaEaFaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaIaKaKaOaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIanananananaIaKaAaGaGaGaGaGaGaGaCaGaGaGaAaGaGaGaGaGaAaGaGaGaGaGbbbcbcbcbcbcbcbcbcbcbaaGaGaGaGaGaGaGaGaGaGaGaAanananaAaGaWaXaXaXaXaXaVbdaWaHaHaHaHaHaHaHaHaHaHaHaEanaEaHaHaQaNaHaHaHaHaHaHaHaEanaEaHaEaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaPaIaKaIaIaIaKaKaKaKaKaKaKaIaKaKaKaKaKaKaKaKaKaKaKaIanaIaIaIaIaIaKaAaGaGaGaGaGaGaGaAaAaAaAaAaAaAaAaAaAaAaGaAaAbabababcbcbcbcbcbcbcbcbcbaaGaGaGaGaGaGaGaGaGaGaGbabababaaVaWaVaVaVaWaVaVaVaVaVaHaHaHaHaHaHaHaHaHaHaHaEanaEaHaEaEaEaHaHaHaHaHaHaHaEaEaEaHaEaEaEaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaKaKaIaKaKaKaKaKaKaKaKaKaLaKaKaKaKaKaSaKaKaKaKaKaIanaIaKaKaKaKaKaAaGaGaGaGaGaGaGaAanaAaGaGaGaGaGaGaTaAaGaAanbabcbcbcbcbcbcbcbcbcbcbcbaaGaGaGaGaGaGaGaGaGaGaGbabcbebcaVaXaXaXaXaXaXaXaXaXaVaHaHaHaHaHaHaHaHaHaHaHaEanaEaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaEaHaHaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaKaIaKaKaKaKaKaKaKaKaKaIaIaIaKaKaKaKaKaKaKaIaIaIaIaIaKbfbfbfbfbfbfbfbfbfbgbfbfbfanaAaGaAaAaAaAaAaAaAaGaAanbabcbcbcbcbcbcbcbcbcbcbcbaaGaGaGaGaGaAaGaGaGaGaGbabcbcbcaVaXaXaXaXaXaXaXaXaXaVaVaVaVaVaHaHaHaVaWaVaVaVaVaVaHaEaHaHaHaHaHaHaHaHaHaEaNaEaEaEaEaEaHaEaEaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaIaKaKaKaKaKaKaKaKaKaIanaIaKaKaKaKaKaKaKaIaKaKaKaKaKbfbhbhbhbhbhbhbhbfbhbhbhbfanaAaGaGaGaGaGaGaGaGaGaAanbabcbcbcbcbcbcbcbcbcbcbcbaaGaGaGaGaGaAaGaGaGaGaGbbbcbcbcaVaXaXaXaXaXaXaXaXaXaXaXaVanaVaHaHaHaVaXaXaXaXaXaWaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaQaHaHaHaQaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaKaIaKaKaKaIaLaIaIaIaIaIaIaIaIaIaKaKaKaKaKaIaKaIaIaIaIbfbhbfbfbfbfbfbhbfbhbhbhbfbfbfbfbfbfbfbfbfaAaAaAaAanbabcbcbcbcbcbcbcbcbcbababaaBaAaAaAaAaAaAaAaAaAaAbabcbcbcaVaXaXaXaXaXaXaXaXaXaXaXaVaVaVaVaVaVaVaXaXaXaXaXaVaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaEaEaEaEaEaEaEaEaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaOaIaKaKaKaIaKaKaOaIbhbhbhbhbhaIaKaKaKaKaKaIaKaIbhbhbhbfbhbfanananbfbhbfbhbhbhbhbhbgbhbhbhbhbhbfanananananbabcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbaanbabebcbcbbbcbcbcaVaXaXaXaXaXaXaXaXaXaXaXaVaXaXbdaVaXaXaXaXaXaXaXaVaHaEaHaHaHaHaHaHaHaHaHaEaHaHaHaHaHaHaHaHaHaFaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaLaIaIaIaIaIbhbhbhbhbhbfbibfbfaIaIaIaKaIbhbhbhbfbgbfbfbfanbfbhbfbhbhbhbhbhbfbfbfbfbfbhbfbababababababababababjbabababababcbcbcbcbcbcbcbabababcbcbcbabcbcbcbaaXaXaXaXaXaXaXaXaXaVaVaVaWaVaVaVaXaXaXaXaXaXaXaVaHaEaEaEaEaEaEaEaEaEaEaEaHaHaHaHaHaHaHaHaHaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbhbhbfbkbhbhaIaKaKaKaIbhbhbhbhbhbhbhbfanbfbhbfbhbhbhbhbhbhbhbfanbfbhbfbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbbbcbcbcbabcbcbcbbaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaXaXaVaHaHaHaHaHaHaHaHaQaNaHaHaHaHaHaHaHaHaHaHaHaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbhbhbfbfbfbhaIaLaIaIaIbhbhbhbhbhbhbhbfanbfbhbfbhbhbhbhbhbhbhbfbfbfbgbfbcbcbcbcbcbabcbabababababababbbabcbcbcbcbcbcbcbcbcbabcbcbcaVaVaVaVaVaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVaWaVaXaXaXaVaVaVaEaEaEaEaEaEaEaEaEaEaHaHaHaHaHaHaHaHaHaEaEaEaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbhbhbfbhbhbhbfbhbhbhbhbhbhbhbhbhbhbhbfanbfbhbfbhbhbhbhbhbhbhbabcbcbcbcbcbcbcbcbcbabcbaanbabebcbcbcbcbabcbcbcbcbcbcbcbcbcbabcbcbcaWaXaXaXaVaXaXaXaXaXaXaXaXaXaVaXaXbdaXaXaVaXaVaXaXaXaVanananananananananananaEaHaHaHaHaHaHaHaHaHaEaHaHaHaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbhbhbhbhbhbhbhbhbfbhbfbhbfbhbhbhbhbhbhbhbhbhbhbhbfanbfbhbfbhbhbhbhbhbhbhbabcbcbcbcbcbcbcbcbcbabcbabababcbcbcbcbcbabababcbcbcbabababababababbaVaVaVaXaVaVaVaVaVaVaVaWaVaVaVaXaXaXaXaXaVaXaVaVaVaWaVaVaVaVaVaVaVaVaVanaVaVaVaVaVaHaHaHaHaHaHaHaEaHaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbfbhbfbhbfbhbhbhbhbhbhbhbhbhbhbhbfanbfbhbfbhbhbhbhbhbhbhbabcbcbcbcbcbcbcbcbcbabcbcbcbjbcbcbcbcbcbaanbabcbcbcbaanananananbabcbaanaVaXaVaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVbdaXaXaXaXaVanaVaXaXaXaXaXaVanaVaXaXaXaVaHaHaHaHaHaHaHaEaQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbfbhbfbfbfbfbfbhbhbhbhbhbhbhbfbfbfbfbfbhbfbfbfbhbfbfbfbgbabcbcbcbcbcbcbcbcbcbabababbbabababbbababababababababaanananananbabcbabaaVaXaVaXaXaXaXaXaXaXaXaXaVaVaVaVaVaWaVaVaVaVaVaVaVaVaVaXaXaXaXaXaVaVaVaXaXaXaVaFaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbfbhbhbhbhbhbfbhbhbhbhbhbhbhbfbkbhbhbfbhbhbhbfbhbfanbfbhbabcbcbcbcbcbcbcbcbcbcbcbabcbcbcbabcbcbcbcbcbcbcbaanananananananbabcbcbcaVaXaVaXaXaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaWaXaXaXaXaXaWaXaXaXaXaXaXaXaWaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbfbfbfbfbfbfbibfbfbfbfbfbhbfbgbfbfbfbfbfbfbfbfbfbhbfbfbfbhbfbhbfanbfbhbfbfbfbcbcbcbabcbcbcbcbcbabcbebcbabcbcbcbcbcbcbcbababaanbabababababababcaVaXaVaVaVaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaXaXaVaXaVaVaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbkbhbhbhbhbhbhbfbhbhbhbfbhbhbhbhbhbfbhbhbhbhbhbfanbfbhbibkbfbhbhbhbfanbfbhbhbhbfbcbcbcbabcbcbcbcbcbabcbcbcbbbcbcbcbcbcbcbcbcbcbaanbabcbcbcbcbcbabeaVaXaXaXaVaXaXaXaXaXaXaXaXaXaWaXaXaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaXaXaVaXaVaXaXbdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbfbfbfbhbfbfbfbhbfbhbfbfbfbfbfbhbhbhbhbhbfanbfbhbfbfbfbfbfbfbfbfbfbfbfbhbfbfbfbfbfbcbcbcbcbcbabjbabababcbcblbcbcbcbcbcbcbabababcbcbcbcbcbabaaVaXaVaXaVaXaXaXaXaXaXaXaVaVaVaXaXaXaXaXaXaXaXaXaVaVaVaXaXbmaXaXaVaVaVaXaXaXaXaXaVaXaVaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbfbhbhbhbhbhbfbhbfbhbhbhbhbhbhbhbhbhbfanbfbhbhbhbhbhbhbhbfbhbhbhbfbkbfbhbhbhbfbcbcbcbcbcbabebabcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcaYaXaVaXaVaXaXaXaXaXaXaXaWaXaVaXaXaXaXbmaXaXaXaXaVaXaXaXaXaXaXaXaVanaVaXaXaXaXaXaVaXaVaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbfbfbfbfbfbibfbgbfbhbhbhbhbhbhbhbfbfbfanbfbfbfbfbfbfbfbhbfbhbhbhbfbibfbhbhbhbfbjbabababababcbabcbcbcbcbcbcbcbcbcbabababcbcbcbcbcbcbcbcbcaVaXaVaXaVaWaVaVaVaVaVaVaVaXaVaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaXaXaVanaVaVaVaVaVaVaVaXaVaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbkbfbhbhbhbfbhbhbhbhbhbhbhbhbhbhbhbfanananbfbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbfbebaanananbabcbjbcbcbcbcbcbcbcbcbcbaanbabcbcbcbcbcbcbcbcbcaVaXaVaXaXaXaVaXaXaXaXaXaVaXaVaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaXaXaVanananaVaXaXaXaVaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbfbfbhbhbhbfbhbhbhbhbhbnbhbhbhbhbhbfanananbfbhbfbfbfbhbfbfbfbhbhbhbhbhbhbhbfbcbaanananbabcbabcbcbcbcbcbcbcbcbcbaanbabcbcbcbcblbcbcbcbcaVaWaVaVaVaVaVaXaXaXaXaXaVaXaVaXaXaXaXaXaXaXaXaXaVaXaXaXaVaXaXaXaVaVaVaVaVaXaXaXaVaWaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbhbhbfanananbfbhbfanbfbhbfbhbgbhbhbhbnbhbhbhbfbcbaanananbabcbbbcbcbcbcbcbcbcbcbcbaanbabcbcbcbcbcbcbcbcbcaYaXaXaXaXaXaXaXaXaXaXaXaVaXaVaXaXaXaXaXaXaXaXaXaVaXaXaXaVaXaXaXaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbhbhbfanananbfbhbfanbfbhbfbhbfbhbhbhbhbhbhbhbfbcbabababababababababababbbabababababababababcbcbcbcbcbcbcaVaXaXaXaXbmaXaXaXaXaVaVaVaXaVaXaXaXaVaVaVaVaVaVaVaVaVaVaVaWaVaVaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbhbhbfanananbfbhbfanbfbhbfbkbfbhbhbhbhbhbhbhbfbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbabcbcbcbcbcbcbcaVaXaXaXaXaXaXaXaXaXaVanaVaXaVaXaXaXaWaXaXaXaXaXaVanananaVaXaXbdaYaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbhbhbhbhbfbfbfbgbfbibfbfbfbgbfbfbfanbfbfbfbhbfbfbfbgbfbfbfbhbhbhbhbhbhbhbfbababababababababababababababcbabcbcbcbcbcbabcbcbcbabbbabaaVaXaXaXaXaXaXaXaXaXaVanaVaXaVaVaVaVaVaXaXaXaXaXaVaVaVaVaVaVaVaVaVaXaXaXaXaXaXaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbibkbhbhbfbkbfbhbhbhbhbhbfanbfbhbhbhbfbhbhbhbhbhbibhbhbhbhbhbhbhbfbebcbcbbbcbcbcbabcbcbcbcbcbabcbjbcbcbcbcbcbabcbcbcbabcbcbcaVaXaXaXaXaXaXaXaXaXaVanaVaXaVaXaXaXaXaXaXaXaXaXaXaXaVaXaXaXaVaXaXaXaXbmaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbfbfbgbfbfbfbfbfbfbfbhbhbhbhbhbfbfbfbhbfbfbfbhbhbhbhbhbfbfbfbgbfbfbfbfbfbibfbfbfbcbcbcbabcbcbcbcbcbabcbabcbcbcbcbcbabbbabababababcaVaVaVaXaXaXaXaXaVaWaVaVaVaXaVaXaXaXaXaXaXbmaXaXaXaXaVaXaVaXaVaXaXaXaXaXaXaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfanananbfbhbhbhbhbhbhbhbhbhbgbhbfbhbhbhbhbhbhbhbfbhbhbhbfbhbhbhbhbhbfbkbfbcbcbcbcbcbcbcbcbcbabebabcbcbcbcbcbcbcbcbcbaanbabcbaanaVaXaXaXaXaXaVaXaXaXaXaXaVaXaXaXaXaXaXaXaXaXaXaXaVaXaVaXaVaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfanananbfbhbhbhbhbhbhbhbhbhbfbfbfbhbhbhbhbhbhbhbfbhbfbfbfbhbhbhbhbhbfbgbfbcbcbcbcbcbcbcbcbcbabababcbcbcbcbcbcbcbcbcbabababcbaanaVaXaXaXaVaVaVaVaVaVaVaVaVaXaXaXaXaXaXaXaXaXaVaVaVaXaVaXaVaXaXaXaXaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfanananbfbhbhbhbhbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbfbhbfbhbhbhbhbhbhbhbhbhbfbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbabcbcbcbaanaVaXaXaXaWaXaXaXaXaXaXaXaVaXaXaXaXaXaXaXaXaXaWaXaXaXaVaXaVaXaXaXaXaXaWbdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbfbfbfbfbfbfbfbfbhbhbhbfbfbfbhbhbhbhbnbhbhbhbhbfbhbfbhbhbhbhbhbhbhbhbhbfbcbcbcbcbcblbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbabcbabababababjbaaVaVaXaVaVaVaVaVaXaVaXaXaXaVaVaVaXaXaXaVaXaVaVaVaXaVaVaVaYaVaVaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbhbhbhbhbhbhbhbfbhbhbhbgbhbfbhbhbhbhbhbhbhbhbhbfbhbgbhbhbhbhbhbhbhbhbhbfbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbabcbabcbcbcbcbcbabdaXaXaVanananaVaXaWaXaXaXaVbdaVaXaXaXaVaXaVanaVaXaXaXaXbdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbhbfbfbfbfbfbhbfbhbhbhbfbhbfbfbfbhbhbhbhbhbhbhbfbfbfbhbhbhbhbhbhbhbfbfbfbcbcbcbcbcbcbcbcbcbcbcbabababababbbabababababababcbcbcbcbcbababababaaVaVaVaVaXaVaVaVaVaVaXaVaWaVaVaVaXaVaVaVaVaVaVaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbfanbfbhbhbhbfbhbhbhbfbhbhbhbibhbhbhbhbhbhbhbfbhbhbhbhbhbhbnbhbhbhbhbfbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbabcbcbcbbbcbcbcbcbcbcbcbcbcbaaXaXaXaXaXaVaXaXaXaVaXaVaXaVaXaXaXaVaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbfanbfbibfbfbfbfbfbfbfbhbfbfbfbhbhbhbhbhbfbfbfbhbhbhbhbhbhbhbhbhbhbhbfbababababababcbcbcbabababcbcbcbcbcbcbcbabcbabababcbcbcbcbcbcbcbcbcbaaXaVaYaVaVaVaXaXaXaVaXaVaXaVaVaVaWaVaXaXaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfanbfbhbhbhbhbhbfbkbibhbibkbfbhbhbhbhbhbibkbibhbhbhbhbhbhbhbhbhbhbhbfbcbcbcbcbcbbbcbcbcbbbcbcbcbcbcbcbcbcbcbabcbaanbabcbcbcbcbcbcbcbcbcbbaXaVaXaXaXaXaXaXaXaVaXaXaXaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboboboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbfbfbhbhbhbhbhbfbfbfbhbfbfbfbfbfbgbfbfbfbfbfbfbfbfbfbhbhbhbhbhbhbhbfbcbcbcbcbcbabababbbabcbcbcbcbcbcbcbcbcbabcbaanbabcbcbcbcblbcbcbcbcbaaWaVaXaXaXaXaXaXaXaVaXaVaVaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboboboboaaaaaaaaaaaaaaaabobobpboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbfbhbhbhbhbhbgbhbhbhbhbhbfbkbfbhbhbhbhbhbhbhbhbhbfbhbhbhbhbhbhbhbfbcbcbcbcbcbcbcbabcbabcbcbcbcblbcbcbcbcbabcbaanbabcbcbcbcbcbcbcbcbcbaaXaXaXaXaXaXaXaXaXaVaXaXaXaWaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobqbrboboboaaaabobobobobobqbsboboboboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbfbfbfbgbfbfbfbfbfbfbfbhbfbibfbfbfbfbfbfbfbhbfbhbfbfbfbfbfbfbfbgbfbcbcbcbcbcbcbcbabcbabcbcbcbcbcbcbcbabababcbaanbabcbcbcbcbcbcbcbcbcbaaXaXaXaXaXaXaXaXaXaVaVaVaVaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobqbtbububtbrbobobobobqbtbtbtbububtbtbrboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbkbfbhbhbhbhbhbfbhbhbhbfbhbfbhbhbhbhbhbibkbfbhbfbhbhbhbhbhbhbhbhbhbfbcbcbcbcblbcbcbbbcbabcbcbcbcbcbcbcbabcbcbcbaanbabcbcbcbcbcbcbcbcbcbjaXaXaXaXaXaXaXaXaXaXaXaWaXaXaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobvbubububububtbtbtbtbububububububububsboboboboaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbhbhbhbhbhbfbhbhbhbfbhbfbhbhbhbhbhbfbfbfbhbfbfbfbfbfbfbfbfbfbgbfbababcbcbcbcbcbabababababababababababababbbabababcbcbcbabbbababababaaXaXaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaXaXaXaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobqbububububwbwbwbwbwbwbubububububububububtbtbrboboaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbfbhbhbhbfbhbfbhbhbhbhbhbibhbhbhbfbcbcbcbcbcbcbcbcbcbcbcbbbcbcbcbcbcbbbcbcbcbcbcbcbcbjbcbabcbcbcbcbcbabcbcbcbabcbcbcbaanaVaXaXaXaXaXaXaXaXaXaXaXaVaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbtbububwbwbwbwbububububwbwbwbububububububububububrboboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbgbfbfbfbfbfbfbfbhbfbhbhbhbhbhbfbfbfbhbfbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbabababababababcbabcbabcbcbcbcbcbabababababababcbaaVaVaVaVaWaVaVaVaVaVaVaVaVaVaXaXaXaXaXaVaVaYaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbububwbwbwbubububububububububwbwbwbubububwbwbwbwbububrboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbfbhbgbhbhbnbhbhbfbkbhbhbfbcbcbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbbbcbcbcbcbebabcbabcbabcbcblbcbcbcbcbaanananbabcbaaXaXaXaVaXaXaXaXaXaVanananaVaXaXaXaXaXaVaXaXbdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbubububwbubububububububububububububwbwbwbwbwbxbwbybwbubsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbfbfbfbfbhbfbfbfbhbhbhbhbhbfbfbfbhbfbababcbcbcbcbcbcbcbcbcbababababcbcbabababababababcbabcbabcbcbcbcbcbcbcbababaanbabcbaaXaXaXaVaXaXaXaXaXaVaVaVanaVaVaVaVaVaVaVaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbubububwbwbubzbAbAbAbAbAbAbAbAbBbAbAbAbCbubwbwbwbwbDbwbubsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbfbhbhbhbhbhbhbhbhbhbfbhbfbcbcbcbcbcblbcbcbcbcbcbabebcbbbcbcbabebcbcbcbcbabcbabcbabcbcbcbcbcbcbcbbbcbaanbabcbaaXaXaXaXaXaXaXaXaXaXaXaVanananaVaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbububububwbububEbFbGbHbHbIbJbJbKbEbLbMbNbEbubwbwbObwbwbwbubsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbfbfbibfbhbhbhbhbhbhbhbhbhbfbfbfbcbcbcbcbcbcbcbcbcbabababababababbbabababababcbabcbabcbabcbcbcbcbcbabababcbaanbabcbaaXaXaXaXaXaXaXaXaXaXaXaVanananaVaXaVaVaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbububububwbwbububEbPbQbHbHbQbKbJbJbEbRbSbTbEbubwbUbwbwbwbububsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbkbhbhbfbhbhbhbhbhbhbhbhbhbfbkbjbcbcbcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbcbcbabcbabcbabebabcbcbcbcbcbbbcbcbcbaanbabcbaaXaXaXaXaXaXaXaXaXaXaXaVanananaVaXaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobqbububububwbwbwbububVbAbWbHbHbXbBbYbZbEcacbccbEbububwbwbwbubububsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbfbfbfbfbhbhbhbhbhbfbhbhbhbfbhbabababcbcbcbcbcbcbcbabcbcbcbcbcblbcbcbcbcbcbabcbabcbabababababababababcbababaanbabcbaaXaXaXaXaXaXaXaXaXaXaXaVanananaVaXaVaVaVaaaaaaaaaaaaaaaaaaaaaaaaaabobobobqbubububwbwbwbwbubububEcdbHbHbHcebEcfcgbEchchchbEbubububwbwbubububsboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfanananbfbhbhbhbhbhbfbhbhbhbfbhbaanbabcbcbcbcbcbcbcbabcbcbcbcbcbcbcbcbcbcbcbabcbabcbcbcbcbcbcbcbcbcbcbcbaanananbabcbaaXaXaXaXaXaXaXaXaXaXaXaVanananaVaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaabobobqbtbubwbwbwbwbwbwbububububEcicjbHcdckbEclcmbEcncncnbEbububububwbwbubucoboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbgbabababababababababababababababababbbabababababbbabababababababababababababababababcbababababaaXaXaXaVaVaVaWaVaVaVaVaVaVaVaXaVaaaaaaaaaaaaaaaaaaaaaaaabobqbubububwbwbwcpbwbwbububububVbAbYcqcrbAcsbAbAcsbYctcrcububububububwbubsboboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbgbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbjbcbcbcbjbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbjbcbebcbjaXaXaXaVaXaXaXaXaXaXaXaXaXaXaXaVaaaaaaaaaaaaaaaaaaaaaaaabocvbububwbwbwcwbwbwbwbububububEcxbHbHbHcyczcAcBbHbHbHbHbEbubububububwbubsboboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbabababababababababababababababababacCbababababacCbababababababababababababababababababababababaaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaaaaaaaaaaaaaaaaaaaaaaaabobobvbwbwbwbwbwbwbwbwbububububEcDbHbHbHbHbHbHbHbHbHbHbHbEbubububububwbubucEboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFcCcGcHcHcHcIcCcFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabocvbwcJbwbDcKbwbwbwbwbubububEcDbHbHbHbHbHbHbHbHbHbHbHbEbububububwbwbucoboboaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcMcNcOcPcQcNcMcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobvbwbwbwbwbwcRbwbwbwbububXbAbYcScrbYcTcUcrbYcTcUcrbWbubububwbwbubsboboaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobvbubwbwbwbwbwbwbwbwbwbwbwbwcWcXbwbwbwbwbububububububububwbwbububsboaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobvbububwbubwbububwbwbwbwbwbwbwbwbwbwbwbubububububububububwbububucoboaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcYcVcVcVcYcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabocvbubububububububububububububububwbwbububububububwbwbwbwbwbububsboboaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobocvbucZcZbubucZbubububububububububwbwbwbububwbwbwdabwdbbwbububsboaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobodcbobocvcobocvbucZcZbubububububububwbwbwbwdddedfdebwbwbububsboaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobobobobobodcbobobvbubububububububwbwdgbwdhdhdidjbwbwcZcoboaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcYcVcVcVcYcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobocvcZcZcZcZbububububwbwdkbwdlbwbwbwbsboboboaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobobobobvbubububububwdmbwdnbwbubsboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabocvcZcZcZbubububwbwbwbwbucoboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobobocvbububububwbubsboboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcYcVcVcVcYcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobocvcZcZbububububrboboaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobocvcZcZcZbucEboaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobobobobodcboboaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboboboaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcYcVcVcVcYcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdqdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdqdrdrdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcVcVcVcVcVcVcVcLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdqdpdpdpdpdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsdtdudscHcHcHdvdudwdvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdpdpdpdpdpdpdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdxdxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdydzdAdBdBdBdAdzdCdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdpdpdpdpdpdpdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdDdEdEdEdEdEdEdEdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdGdAdzdAdBdHdBdAdzdAdIdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdqdpdpdpdpdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdDdEdEdJdJdJdJdJdJdJdJdJdFdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdGdAdAdzdAdBdBdBdAdzdAdAdIdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdqdqdpdpdqdqdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdDdEdJdJdJdJdJdJdJdJdJdJdJdJdJdEdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdGdAdAdAdzdAdBdBdBdAdzdAdAdAdIdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdKdLdLdLdLdMdMdLdLdLdLdKdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdDdEdEdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdFdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdydAdAdAdzdAdBdBdBdAdzdAdAdAdCdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdLdLdNdNdNdpdpdNdNdNdLdLdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdJdOdOdOdOdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdydAdAdAdzdAdBdBdBdAdzdAdAdAdCdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdLdLdNdNdNdNdNdNdpdpdNdNdNdNdNdNdLdLdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdRdxdxdxdxdSdOdOdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdydAdAdAdzdAdTdUdTdAdzdAdAdAdCdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdLdNdNdNdNdNdNdNdpdpdNdNdNdNdNdNdNdLdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdQdJdJdJdJdJdJdRdxdxaaaadxdxdxdxdSdOdOdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdNdNdNdNdpdpdNdNdNdNdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdDdEdJdJdJdJdJdJdRdxdxaaaaaaaaaaaadxdxdxdxdSdOdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdOdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdNdNdNdpdpdpdpdpdpdNdNdNdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaadxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdOdJdJdJdJdJdJdJdRdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdSdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdNdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdNdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdPdxdxdxdxdxaaaadxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdPdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdVdpdpdpdpdpdpdpdpdNdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdFdxdxdWdxdxdxdxdDdEdEdFdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdEdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdEdEdJdEdEdEdEdJdJdJdJdEdEdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdXdJdJdJdJdJdJdYdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdZdxaaaaaaaadxdxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdOdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdpdpdpdpdpeadpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxaaaaaadxdxdDdEdEdEdFdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdRdxdxdxaaaaaaaadxdxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpebdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdOdOdRdxaaaaaadxdxdDdJdJdJdJdJdEdFdxaaaaaaaaaaaaaaaaaaaaaadxdxdxdDdJdPdxdxaaaaaaaaaadxdxdDdEdEdEdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdpdpdpdpdpdpdpecdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdOdRdxdxdxdxaaaaaadxdDdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaadxdxdxdDdEdJdJdRdxaaaaaaaaaaaadxdDdJdJdJdJdJdFdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxdxdxaaaaaaaaaaaadxdQdJdJdJdJdJdJdRdxdxaaaaaaaaaaaaaaaadxdxdDdEdJdJdJdRdxdxaaaaaaaaaaaadxdQdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpeddpdpdpdpdpdpdpdpdpdpdpdpdpdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxdxaaaaaaaaaaaaaadxdQdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdPdxdxaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdFdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpeedpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdEdFdxdxdxaaaaaaaaaadxdSdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdRdxaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdEdFdxdxaaaaaaaadxdxdQdJdJdJdJdPdxaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdRdxdxaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdYdxaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdpdpdpdpdpefdpdpdpdpdpdpdpdpdpdpdpdpegdpdpdpdpdpdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdFdxdxaaaaaadxdxdQdJdJdJdJdRdxaaaaaaaaaaaaaaaadxdDdJdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdxdxdxdQdJdJdJdJdJdJdJdJdOdOdJdJdJdJdJdJdJdFdxdxdxdxdxdDdJdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdQdJdJdJdJdPdxaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdDdFdxehdxdxdQdJdJdJdJdJdJdOdRdxdxdSdOdJdJdJdJdJdJdEdFdxdxdDdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdPdxaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpeidpdpdpdpdpdpdpdpdpdNdNdNdNdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdEdEdJdJdEdJdEdEdJdJdJdJdJdJdRdxdxdxdxdxdxdSdJdJdJdJdJdJdJdEdEdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdPdxdxaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdNdNdNdNdNdpdpdpdpdpeadpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxdxaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdFdxdxaaaaaaaaaaaadxdQdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxaaaaaaaaaaaadxdxdSdOdOdJdJdJdJdJdJdJdJdJdJdJdJdFdxdxdxaaaaaaaaaaaaaadxdxdQdJdJdJdJdFdxdxaaaaaaaadxdxdQdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdFdxaaaaaaaaaaaaaadxdxdxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdEdFdxaaaaaaaaaaaaaaaadxdSdJdJdJdJdJdFdxdxdxdxdxdxdDdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdNdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdNdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaadxdxdSdOdOdOdOdOdOdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdEdEdEdFdxdDdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdLdLdNdNdNdNdNdNdpdpdpdpdpdpdpdpdpdpdpdpdNdNdNdNdNdNdLdLdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdxdxdxdxdQdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdEdJdJdJdJdJdJdJdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdNdNdNdpdpdpdpdpdpdNdNdNdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdJdJdJdFdxdxaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdOdOdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdNdNdNdNdNdNdNdNdNdpdpdNdNdNdNdNdNdNdNdNdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdFdxdxaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdJdJdJdJdJdFdxaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdOdRdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdLdNdNdNdNdNdNdNdpdpdNdNdNdNdNdNdNdLdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdFdxdxaaaaaaaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdJdJdJdJdOdRdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdLdLdNdNdNdNdNdNdpdpdNdNdNdNdNdNdLdLdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdYdxaaaaaaaaaaaaaaaaaaaadxdxdDdJdJdJdJdOdOdOdJdJdJdJdPdxaaaaaaaaaaaadxdxdxdDdJdJdJdJdJdJdJdJdPdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdLdLdLdLdNdNdNdpdpdNdNdNdLdLdLdLdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdPdxdxaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdRdxdxdxdQdJdJdJdPdxdxaaaaaaaadxdxdDdEdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdKdLdLdLdMdpdpdMdLdLdLdKdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdRdxdxdxdxdSdJdJdJdJdFdxdxdxaadxdxdDdJdJdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKdKdKdKdqdpdpdqdKdKdKdKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdOdJdJdJdJdJdJdJdJdJdJdJdOdRdxdxaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdPdxdxaaaadxdxdQdJdJdJdJdEdFdxdxdxdDdJdJdJdJdJdJdJdJdJdJdJdJdPdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdqdqdpdpdqdqdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdSdOdOdOdOdJdOdOdOdOdRdxdxdxaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdPdxaaaaaaaadxdQdJdJdJdJdJdJdEdEdEdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdxdxejdxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaadxdQdJdJdJdPdxaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdPdxaaaaaaaadxdxdQdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdOdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdDdJdJdJdJdPdxaaaaaaaaaadxdSdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdJdRdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdJdPdxaaaaaaaaaadxdxdSdOdOdJdJdJdJdJdJdJdJdJdJdOdOdOdRdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdQdJdJdJdPdxaaaaaaaaaaaadxdxdxdxdSdOdJdJdJdOdOdOdOdRdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpeadpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSdJdJdJdPdxdxaaaaaaaaaaaaaaaadxdxdxdSdOdRdxdxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdJdJdJdYdxaaaaaaaaaaaaaaaaaaaadxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdSdOdOdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdxdxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdpdpdpdpdpdpdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandqdqdqekeldqdqdqanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaananananananananananaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -"} diff --git a/maps/RandomZLevels/backup/zoo.dmm b/maps/RandomZLevels/backup/zoo.dmm deleted file mode 100644 index 5d0b91e1a9..0000000000 --- a/maps/RandomZLevels/backup/zoo.dmm +++ /dev/null @@ -1,1525 +0,0 @@ -"aa" = (/turf/space,/area/space) -"ab" = (/obj/structure/table/marble,/obj/structure/safe/floor,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/card/emag,/obj/item/weapon/beartrap,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/melee/energy/sword/pirate,/turf/space,/area/awaymission/zoo) -"ac" = (/obj/effect/blocker,/turf/space{density = 1; desc = "You can't go there!"; name = "The 4th Wall"},/area/space) -"ad" = (/obj/effect/blocker,/turf/space,/area/space) -"ae" = (/turf/simulated/shuttle/wall,/area/awaymission/zoo/pirateship) -"af" = (/obj/structure/sign/vacuum,/turf/simulated/shuttle/wall,/area/awaymission/zoo/pirateship) -"ag" = (/obj/structure/symbol/pr,/turf/simulated/shuttle/wall,/area/awaymission/zoo/pirateship) -"ah" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ai" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aj" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) -"ak" = (/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) -"al" = (/turf/simulated/shuttle/wall/dark,/area/awaymission/zoo/tradeship) -"am" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"an" = (/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ao" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ap" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ar" = (/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"as" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"at" = (/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) -"au" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"av" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"aw" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ax" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ay" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"az" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"aA" = (/obj/structure/bed/roller,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aB" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aC" = (/obj/item/weapon/surgical/scalpel,/obj/structure/closet/crate,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aD" = (/obj/item/bodybag,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aE" = (/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aF" = (/obj/machinery/optable,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aG" = (/obj/machinery/computer/operating,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aH" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"aI" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aJ" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aK" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aL" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aM" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aN" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aO" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"aP" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aQ" = (/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aR" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aS" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aT" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aU" = (/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aV" = (/obj/structure/largecrate,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aW" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c500,/obj/item/weapon/spacecash/c100,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) -"aX" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) -"aY" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/yellow,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"aZ" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ba" = (/obj/machinery/door/airlock/silver,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bb" = (/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bc" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bd" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"be" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bf" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bg" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bh" = (/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) -"bi" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) -"bj" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bk" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bl" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bm" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bn" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bo" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bp" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bq" = (/obj/machinery/atm{pixel_x = -32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"br" = (/obj/machinery/suit_cycler/syndicate,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bs" = (/obj/machinery/button/remote/airlock{id = "packerMed"; pixel_y = -24},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bt" = (/obj/machinery/sleeper,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bu" = (/obj/machinery/sleep_console,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bv" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bw" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) -"bx" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/medical_wall{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"by" = (/obj/machinery/door/blast/shutters{id = "packerMed"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bz" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bA" = (/obj/structure/kitchenspike,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bB" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bC" = (/obj/machinery/button/remote/airlock{id = "packerCargo"; pixel_y = -24},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bD" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bF" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bG" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bH" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"bI" = (/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"bJ" = (/obj/structure/table/reinforced,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bK" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bL" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bM" = (/obj/structure/sink{dir = 2},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bN" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bO" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bP" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bQ" = (/obj/structure/table/reinforced,/obj/item/weapon/material/knife/butch,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"bR" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"bS" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"bT" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"bU" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bV" = (/obj/structure/table/reinforced,/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bW" = (/obj/structure/table/reinforced,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bX" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/cobweb2,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"bY" = (/obj/machinery/door/blast/shutters{id = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"bZ" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"ca" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"cb" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"cc" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cd" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ce" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/airless,/area/awaymission/zoo/tradeship) -"cf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/zoo/tradeship) -"cg" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ch" = (/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ci" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cj" = (/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"ck" = (/obj/item/weapon/stool,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cl" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"cm" = (/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"cn" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"co" = (/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cp" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cq" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cr" = (/obj/machinery/button/remote/airlock{id = "packerCargo"; pixel_y = 24},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cs" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ct" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cu" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cv" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cw" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cx" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cy" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cz" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cA" = (/obj/machinery/vending/medical{pixel_y = -32; req_access = null},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cB" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/awaymission/zoo/tradeship) -"cC" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cD" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cE" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cF" = (/obj/machinery/door/window{dir = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cH" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cI" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"cJ" = (/obj/structure/closet/secure_closet/freezer/meat{opened = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cK" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cL" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cM" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) -"cN" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"cP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"cQ" = (/obj/machinery/light,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cR" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"cS" = (/turf/space,/area/awaymission/zoo/tradeship) -"cT" = (/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cU" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"cW" = (/obj/machinery/door/airlock/multi_tile/glass,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cX" = (/obj/machinery/door/window/southleft,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cY" = (/obj/structure/window/reinforced,/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"cZ" = (/obj/machinery/door/window/southright,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"da" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"db" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dc" = (/obj/structure/table/reinforced,/obj/item/weapon/paper/zoo/pirate/volk,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"dd" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"de" = (/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"df" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dg" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dh" = (/obj/machinery/seed_extractor,/obj/item/seeds/angelmycelium,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"di" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dj" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"dk" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dl" = (/obj/item/device/multitool,/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) -"dm" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/awaymission/zoo/pirateship) -"dn" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/zoo/pirateship) -"do" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"dp" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dq" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dr" = (/obj/structure/closet/crate/secure/weapon,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"ds" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"dt" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"du" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"dv" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"dx" = (/obj/structure/table/steel_reinforced,/obj/machinery/newscaster{pixel_x = 32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dy" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dz" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) -"dA" = (/obj/structure/mirror{pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dB" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/awaymission/zoo/tradeship) -"dC" = (/obj/structure/table/reinforced,/obj/machinery/recharger,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"dD" = (/obj/item/weapon/stool,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"dE" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dF" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dG" = (/turf/simulated/wall/r_wall,/area/awaymission/zoo/pirateship) -"dH" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"dI" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dJ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dK" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 3},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dL" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dM" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dN" = (/obj/machinery/computer,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dO" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"dQ" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dR" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dS" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dT" = (/obj/machinery/door/window/westright{name = "Storefront"; req_access = list(160)},/obj/structure/table/marble,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"dU" = (/obj/machinery/computer,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"dV" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"dW" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"dX" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"dY" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"dZ" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"ea" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/zoo/pirateship) -"eb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ec" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ed" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ee" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"eg" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eh" = (/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ei" = (/obj/machinery/power/fractal_reactor/fluff/converter{mapped_in = 1; power_generation_rate = 10000},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ej" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ek" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"el" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"em" = (/obj/machinery/door/airlock/command,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"en" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"ep" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eq" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"er" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"es" = (/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"et" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) -"eu" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ev" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ew" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ex" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ey" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ez" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey1"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eA" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"eD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"eE" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"eF" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eG" = (/obj/machinery/door/window/westleft{name = "Storefront"; req_access = list(160)},/obj/structure/window/reinforced,/obj/structure/table/marble,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"eI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"eJ" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eK" = (/obj/structure/table/steel_reinforced,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Esteban"; pixel_y = 8;},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eL" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eM" = (/obj/machinery/vending/assist{contraband = null; name = "Old Vending Machine"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eN" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/soap,/obj/item/weapon/towel{color = "#0000FF"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eO" = (/obj/machinery/vending/sovietsoda,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eP" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eQ" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"eR" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"eS" = (/obj/structure/table/rack,/obj/item/weapon/cell/high,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"eT" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 2},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eU" = (/obj/machinery/door/window/westright,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eV" = (/obj/machinery/button/remote/blast_door{id = "trade"; name = "Shop Shutters"; pixel_x = 0; pixel_y = -26},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eW" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eX" = (/obj/machinery/door/window/northleft,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"eZ" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fa" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 2; start_pressure = 740.5},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fb" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fc" = (/obj/effect/floor_decal/corner/red/diagonal,/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fd" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fe" = (/mob/living/simple_animal/hostile/alien{faction = "pirate"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ff" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fg" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fh" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fi" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"fk" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fl" = (/obj/structure/largecrate/animal/cat,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fm" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fn" = (/obj/structure/closet/wardrobe/captain,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fo" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) -"fp" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fq" = (/obj/structure/closet/crate/solar,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fr" = (/turf/simulated/shuttle/wall/dark,/area/awaymission/zoo/syndieship) -"fs" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ft" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fu" = (/obj/structure/mopbucket,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fv" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fw" = (/obj/item/weapon/cell/high,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"fy" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fz" = (/obj/structure/table/glass,/obj/machinery/computer3/wall_comp/telescreen/entertainment{pixel_y = -35},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fA" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fB" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fC" = (/obj/machinery/vending/tool,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fD" = (/obj/machinery/vending/engivend,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship) -"fE" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fF" = (/obj/machinery/computer,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fG" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fH" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"fI" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"fJ" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) -"fK" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fM" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"fO" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"fP" = (/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fR" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fS" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fT" = (/obj/machinery/light{dir = 4},/obj/machinery/computer,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fU" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fV" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fW" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fX" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fY" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"fZ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"ga" = (/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"gb" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey2"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"gc" = (/obj/item/weapon/mop,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"gd" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"ge" = (/obj/machinery/vending/boozeomat{req_access = null},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) -"gf" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gg" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gh" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gi" = (/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"gj" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"gk" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"gl" = (/obj/structure/reagent_dispensers,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) -"gm" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gn" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"go" = (/obj/structure/closet,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gp" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gq" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gr" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gs" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gt" = (/obj/structure/frame{anchored = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"gu" = (/obj/machinery/light/small,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"gv" = (/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/kitchenspike,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) -"gw" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor,/area/awaymission/zoo/pirateship) -"gx" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gy" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 0; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gz" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access = list(160)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) -"gA" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gB" = (/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gC" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gD" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "DEAR DAIRY: So we was doing our typpical route when the captain says we've been picking up weird signals on some backwatter planet. Madsen wanted to stay on course but he ain't the captain, so we went out of the way to check it out. There was lots of rocks on the way, but we got to the planet fine. Found a big fancy camp with nobody around and this big metal donut thing with NT stamps all over it right in the middle. Case of beer too. Captain reckons we can pass it off to some buyer in the Syndicate. Ingram says it's bad luck and that someone is going to come look for it but it sounds like better money than selling bad meat to jerky companies."; name = "Old Diary"},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gE" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gF" = (/obj/structure/closet,/obj/item/clothing/under/overalls,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"gH" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gI" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gJ" = (/obj/machinery/door/window/southright,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gK" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"gL" = (/obj/machinery/photocopier,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"gM" = (/obj/machinery/door/window/southleft,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"gN" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) -"gO" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"gP" = (/obj/structure/ore_box,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"gQ" = (/obj/item/stack/cable_coil/random{amount = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"gR" = (/obj/machinery/computer/arcade,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"gS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"gT" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"gU" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"gV" = (/obj/structure/table/woodentable,/obj/item/device/laptop,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"gW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"gX" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"gY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) -"gZ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ha" = (/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hb" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hc" = (/obj/structure/closet,/obj/item/clothing/under/lawyer/bluesuit,/obj/item/clothing/suit/apron,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hd" = (/obj/machinery/door/window/northleft,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"he" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"hf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"hg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"hh" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hi" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hj" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hk" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0;},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hl" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"hm" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"hn" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) -"ho" = (/mob/living/simple_animal/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hp" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hq" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hr" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"hs" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/yellow,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ht" = (/obj/machinery/door/window/eastleft,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hu" = (/obj/machinery/door/window/westright,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hv" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hw" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hx" = (/obj/machinery/door/window/eastright,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hy" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "He doesn't seem like he's looking for a fight."; faction = "neutral"; friendly = "hugs"; name = "Mercenary"},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hz" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hA" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hB" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hC" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hD" = (/obj/machinery/door/window/westleft,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hE" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hF" = (/turf/simulated/wall,/area/awaymission/zoo) -"hG" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/zoo) -"hH" = (/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"hI" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"hJ" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hK" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hL" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hM" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) -"hN" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"hO" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hP" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hQ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hR" = (/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"hS" = (/turf/simulated/floor/plating,/area/awaymission/zoo) -"hT" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor,/area/awaymission/zoo/pirateship) -"hU" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hV" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hW" = (/obj/structure/table/standard,/obj/item/borg/sight/thermal,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"hX" = (/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"hY" = (/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"hZ" = (/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"ia" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ib" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"ic" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"id" = (/obj/machinery/light{dir = 4},/obj/structure/table/standard,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"ie" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"if" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"ig" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ih" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"ii" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"ij" = (/turf/simulated/floor/tiled,/area/awaymission/zoo) -"ik" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) -"il" = (/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"im" = (/obj/item/weapon/stool/padded,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"in" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"io" = (/obj/structure/table/rack,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"ip" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/cautery,/obj/item/weapon/surgical/retractor,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iq" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"ir" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"is" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"it" = (/obj/structure/flora/pottedplant{icon_state = "plant-xmas"},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"iu" = (/obj/structure/symbol/em{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"iv" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"iw" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"ix" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"iy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/weapon/surgical/hemostat,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iz" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iA" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iB" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"iC" = (/obj/structure/sign/securearea{name = "CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/obj/structure/mopbucket,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iD" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iF" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iG" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iH" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iI" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iJ" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iK" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iL" = (/obj/structure/table/standard,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship) -"iM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"iS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jc" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"jq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"js" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jB" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jM" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) -"jW" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/awaymission/zoo/syndieship) -"jX" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/awaymission/zoo/syndieship) -"jY" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/zoo/syndieship) -"jZ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/awaymission/zoo/syndieship) -"ka" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kb" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kc" = (/obj/structure/symbol/es{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"kd" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ke" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kf" = (/obj/structure/symbol/sa{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"kg" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kh" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ki" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kj" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kk" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"kl" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"km" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kn" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) -"ko" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kp" = (/turf/simulated/floor/wood,/area/awaymission/zoo) -"kq" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"kr" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"ks" = (/obj/machinery/door/window/northleft,/turf/simulated/floor/wood,/area/awaymission/zoo) -"kt" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"ku" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"ky" = (/obj/machinery/door/airlock/silver{name = "Men's Restroom"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"kz" = (/obj/machinery/door/airlock/silver{name = "Women's Restroom"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"kA" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"kB" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/grass,/area/awaymission/zoo) -"kC" = (/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kD" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kE" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/grass,/area/awaymission/zoo) -"kF" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/grass,/area/awaymission/zoo) -"kG" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) -"kH" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/grass,/area/awaymission/zoo) -"kI" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"kJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kM" = (/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"kN" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kO" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/zoo) -"kP" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) -"kQ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"kT" = (/mob/living/simple_animal/chicken{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"kU" = (/mob/living/simple_animal/chick,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"kV" = (/mob/living/simple_animal/corgi/puppy{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"kW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kX" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"kY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"kZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"la" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) -"lb" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) -"lc" = (/obj/structure/bed/chair/wood{dir = 4},/turf/simulated/floor/wood,/area/awaymission/zoo) -"ld" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/zoo) -"le" = (/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/wood,/area/awaymission/zoo) -"lf" = (/obj/structure/sink/kitchen{pixel_y = 30},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lg" = (/obj/structure/table/marble,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lh" = (/obj/machinery/vending/food,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"li" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"lj" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"lk" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/hooded/ian_costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"ll" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/hooded/carp_costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lm" = (/obj/structure/table/rack,/obj/effect/landmark/costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"ln" = (/obj/structure/table/rack,/obj/item/clothing/suit/chickensuit,/obj/item/clothing/head/chicken,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lo" = (/obj/structure/table/rack,/obj/item/clothing/head/sombrero,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lp" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lq" = (/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"lr" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"ls" = (/obj/structure/table/rack,/obj/item/clothing/suit/monkeysuit,/obj/item/clothing/mask/gas/monkeymask,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lt" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,/obj/item/clothing/head/plaguedoctorhat,/obj/item/clothing/mask/gas/plaguedoctor,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lu" = (/obj/structure/table/rack,/obj/item/clothing/under/owl,/obj/item/clothing/mask/gas/owl_mask,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lv" = (/obj/structure/table/rack,/obj/item/toy/waterflower,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lw" = (/obj/structure/table/rack,/obj/item/toy/sword,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"ly" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"lz" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"lA" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"lB" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"lC" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"lD" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lE" = (/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lF" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lG" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lH" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/bird/kea{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lI" = (/obj/structure/flora/ausbushes/pointybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lJ" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lK" = (/obj/structure/flora/ausbushes/pointybush,/mob/living/simple_animal/bird/pink_too{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lL" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lM" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"lN" = (/obj/structure/urinal{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lO" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lP" = (/obj/item/frame/mirror,/turf/simulated/wall,/area/awaymission/zoo) -"lQ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lR" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lS" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"lT" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/zoo) -"lU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"lV" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"lW" = (/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"lX" = (/obj/structure/table/marble,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"lY" = (/obj/structure/table/marble,/obj/item/weapon/pen/multi,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"lZ" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"ma" = (/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mb" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/item/weapon/coin/gold,/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mc" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"md" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"me" = (/mob/living/simple_animal/bird/hooded_too{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mf" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mg" = (/obj/structure/flora/ausbushes/fullgrass,/mob/living/simple_animal/bird/grey_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mh" = (/obj/structure/flora/ausbushes,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mi" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_animal/bird/yellowish_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mj" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/bird/bluegreen_Budgerigar{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mk" = (/obj/structure/flora/pottedplant{icon_state = "applebush"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"ml" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"mm" = (/mob/living/simple_animal/horse{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"mn" = (/obj/effect/landmark/away,/turf/simulated/floor/wood,/area/awaymission/zoo) -"mo" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mp" = (/obj/structure/table/rack,/obj/random/action_figure,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mq" = (/obj/structure/table/rack,/obj/item/weapon/storage/fancy/crayons,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mr" = (/obj/structure/table/rack,/obj/random/plushie,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"ms" = (/obj/structure/table/marble,/obj/item/toy/nanotrasenballoon,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"mt" = (/obj/structure/table/marble,/obj/machinery/cash_register{icon_state = "register_idle"; dir = 1},/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"mu" = (/obj/structure/table/rack,/obj/item/device/camera_film,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mv" = (/obj/structure/table/rack,/obj/item/weapon/storage/photo_album,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mw" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mx" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"my" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{name = "Statue"; desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "monkey"},/turf/simulated/floor/grass,/area/awaymission/zoo) -"mz" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mA" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"mB" = (/obj/structure/toilet{dir = 8},/obj/effect/landmark/away,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"mC" = (/obj/structure/flora/pottedplant{icon_state = "plant-16"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"mD" = (/obj/structure/table/marble,/obj/machinery/cash_register{icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"mE" = (/mob/living/simple_animal/chick,/turf/simulated/floor/wood,/area/awaymission/zoo) -"mF" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mG" = (/obj/item/weapon/coin/silver,/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mH" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"mI" = (/mob/living/simple_animal/bird/green_budgerigar{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mJ" = (/obj/structure/flora/ausbushes/sunnybush,/mob/living/simple_animal/bird/cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mK" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"mL" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"mM" = (/mob/living/simple_animal/cow{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"mN" = (/obj/structure/table/rack,/obj/item/toy/nanotrasenballoon,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mO" = (/obj/structure/table/rack,/obj/item/toy/cultsword,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mP" = (/obj/structure/table/rack,/obj/item/toy/crossbow,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mQ" = (/obj/structure/table/rack,/obj/item/toy/bosunwhistle,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mR" = (/obj/structure/table/rack,/obj/item/weapon/storage/wallet/poly,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mS" = (/obj/structure/table/rack,/obj/item/weapon/storage/pill_bottle/dice_nerd,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mT" = (/obj/structure/table/rack,/obj/item/weapon/beach_ball,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mU" = (/obj/structure/table/rack,/obj/item/weapon/soap/deluxe,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mV" = (/obj/structure/table/rack,/obj/item/device/binoculars,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mW" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/clown,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/under/seromi/rainbow,/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) -"mX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"mY" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"mZ" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) -"na" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"nb" = (/mob/living/simple_animal/bird/yellowish_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"nc" = (/mob/living/simple_animal/bird/white_caique{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"nd" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"ne" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"nf" = (/obj/structure/closet/crate/bin,/obj/item/trash/candy,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"ng" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) -"nh" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) -"ni" = (/obj/machinery/newscaster,/turf/simulated/wall,/area/awaymission/zoo) -"nj" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"nk" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"nl" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"nm" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) -"nn" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"no" = (/obj/effect/decal/remains/human,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"np" = (/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"nq" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/wood,/area/awaymission/zoo) -"nr" = (/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"ns" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Not to be confused with the common Earth bat, the Space Bat is a mammalian-like creature that is capable of surviving in the vacuum of space! These creatures live and fly in groups, and are most commonly found in caves, such as those on asteroids, or small planetary bodies with light gravity and no atmosphere. These creatures survive by sucking the blood of wayward space travelers, and are considered to be a pest by the Free Trade Union for their habit of infesting space ships sitting at dock. Their origin is currently unknown."; name = "Space Bat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "This giant snake is a rare beast native to Paraiso, in the Carnelia system. Though normally only found deep in the jungles, these ravenous monsters have been known to slither out onto the planet's many beach resorts to swallow up unwary sunbathers. Otherwise, the creature's diet consists mainly of monkeys that were accidentally introduced to the planet by pet owners. The presence of the invasive monkey species had caused giant snake populations to swell in the 2530's, but today, due to excessive hunting, the giant snake's numbers have dwindled to the point of being an endangered species."; name = "Giant Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Catgirls (not to be confused with Nekos, an interspecies hybrid born of a union between Human and Tajaran parents) were created artificially with the intention of producing a Human-feline hybrid that could serve aboard a space-faring vessel, control pests aboard such ships, and even alleviate stress among male crew members. Their eyes are between 20% and 50% larger than the average Human, which gives them their famously 'Kawaii' appearance. The large eyes trigger a subconscious psychological 'cute' response among Humans, causing them to usually become relaxed in their presence. Some catgirls have learned to abuse this trait, and have evolved to prey upon Humans who linger too close for too long."; name = "Catgirl Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Ir'ash'uint (translating roughly from Skrellian to 'Giant Frog' in Galactic Common), this amphibian lives on the Skrell homeworld Qerrbalak, in the Qerr’valis System. The Giant Frog shares a common, albeit distant ancestry with the Skrell, but unlike the Skrell, its diet is exclusively carnivorous. Its diet includes large insects, fish, and indeed, even Skrell."; name = "Giant Frog Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ny" = (/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nz" = (/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nA" = (/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nD" = (/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"nE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nG" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"nH" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"nI" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"nJ" = (/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"nK" = (/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"nL" = (/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nM" = (/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nN" = (/obj/structure/window/phoronreinforced{dir = 4; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nQ" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"nR" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"nS" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"nT" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"nU" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"nV" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"nW" = (/obj/structure/window/phoronreinforced{dir = 8; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{dir = 1; icon_state = "phoronrwindow"; maxhealth = 10000; name = "robust borosilicate window";},/obj/structure/window/phoronreinforced{maxhealth = 10000; name = "robust borosilicate window"},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"nX" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Exhibit Airlock"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"nY" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"nZ" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"oa" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"ob" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"oc" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"od" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"oe" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"of" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"og" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"oh" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"oi" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"oj" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"ok" = (/obj/structure/symbol/da,/turf/simulated/wall,/area/awaymission/zoo) -"ol" = (/obj/structure/flora/ausbushes/stalkybush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"om" = (/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"on" = (/obj/structure/flora/ausbushes,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"oo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"op" = (/turf/simulated/floor/lino,/area/awaymission/zoo) -"oq" = (/obj/structure/bed/chair,/obj/structure/showcase{name = "Statue"; desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "Human_male"},/turf/simulated/floor/lino,/area/awaymission/zoo) -"or" = (/turf/simulated/mineral/ignore_mapgen,/area/awaymission/zoo) -"os" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"ot" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"ou" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"ov" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"ow" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"ox" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass4"},/area/awaymission/zoo) -"oy" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"oz" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"oA" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"oB" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"oC" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"oD" = (/turf/simulated/floor/holofloor/grass{icon = 'icons/turf/flooring/misc_vr.dmi'; icon_state = "hive"; name = "giant honeycomb"},/area/awaymission/zoo) -"oE" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"oF" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"oG" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beachcorner"; dir = 1},/area/awaymission/zoo) -"oH" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"oI" = (/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"oJ" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"oK" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beachcorner"; dir = 2},/area/awaymission/zoo) -"oL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) -"oM" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/red{pixel_x = -5; pixel_y = -1},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/lino,/area/awaymission/zoo) -"oN" = (/obj/structure/table/reinforced,/obj/item/weapon/folder{pixel_x = -4},/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/internalaffairs,/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/lino,/area/awaymission/zoo) -"oO" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor/lino,/area/awaymission/zoo) -"oP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Not to be confused with the common Earth bat, the Space Bat is a mammalian-like creature that is capable of surviving in the vacuum of space! These creatures live and fly in groups, and are most commonly found in caves, such as those on asteroids, or small planetary bodies with light gravity and no atmosphere. These creatures survive by sucking the blood of wayward space travelers, and are considered to be a pest by the Free Trade Union for their habit of infesting space ships sitting at dock. Their origin is currently unknown."; name = "Space Bat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"oQ" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"oR" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"oS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "This giant snake is a rare beast native to Paraiso, in the Carnelia system. Though normally only found deep in the jungles, these ravenous monsters have been known to slither out onto the planet's many beach resorts to swallow up unwary sunbathers. Otherwise, the creature's diet consists mainly of monkeys that were accidentally introduced to the planet by pet owners. The presence of the invasive monkey species had caused giant snake populations to swell in the 2530's, but today, due to excessive hunting, the giant snake's numbers have dwindled to the point of being an endangered species."; name = "Giant Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"oT" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"oU" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"oV" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"oW" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"oX" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"oY" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"oZ" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"pa" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"pb" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"pc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Catgirls (not to be confused with Nekos, an interspecies hybrid born of a union between Human and Tajaran parents) were created artificially with the intention of producing a Human-feline hybrid that could serve aboard a space-faring vessel, control pests aboard such ships, and even alleviate stress among male crew members. Their eyes are between 20% and 50% larger than the average Human, which gives them their famously 'Kawaii' appearance. The large eyes trigger a subconscious psychological 'cute' response among Humans, causing them to usually become relaxed in their presence. Some catgirls have learned to abuse this trait, and have evolved to prey upon Humans who linger too close for too long."; name = "Catgirl Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"pd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Ir'ash'uint (translating roughly from Skrellian to 'Giant Frog' in Galactic Common), this amphibian lives on the Skrell homeworld Qerrbalak, in the Qerr’valis System. The Giant Frog shares a common, albeit distant ancestry with the Skrell, but unlike the Skrell, its diet is exclusively carnivorous. Its diet includes large insects, fish, and indeed, even Skrell."; name = "Giant Frog Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"pe" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pf" = (/mob/living/simple_animal/hostile/frog{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pg" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 10},/area/awaymission/zoo) -"ph" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 6},/area/awaymission/zoo) -"pi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo) -"pj" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"pk" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"pl" = (/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"pm" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"pn" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"po" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"pp" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"pq" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pr" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"ps" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pt" = (/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) -"pu" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 2},/area/awaymission/zoo) -"pv" = (/mob/living/simple_animal/corgi{faction = "zoo"},/turf/simulated/floor/lino,/area/awaymission/zoo) -"pw" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"px" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"py" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"pz" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"pA" = (/obj/structure/flora/ausbushes/lavendergrass,/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"pB" = (/mob/living/simple_animal/hostile/bee{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/turf/flooring/misc_vr.dmi'; icon_state = "hive"; name = "giant honeycomb"},/area/awaymission/zoo) -"pC" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pD" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"pE" = (/obj/structure/bed/chair,/turf/simulated/floor/lino,/area/awaymission/zoo) -"pF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission/zoo) -"pG" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"pH" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"pI" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"pJ" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"pK" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"pL" = (/mob/living/simple_animal/hostile/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"pM" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"pN" = (/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"pO" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"pP" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"pQ" = (/obj/structure/flora/ausbushes/lavendergrass,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"pR" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"pS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Corgi (Welsh for 'dwarf dog') is a small type of herding dog that originated in Wales, on the planet Earth (Sol system). Two separate breeds are recognized: the Pembroke Welsh Corgi (as seen here) and the Cardigan Welsh Corgi. Historically, the Pembroke has been attributed to the influx of dogs alongside Flemish weavers from around the 10th century, while the Cardigan is attributed to the dogs brought with Norse settlers, in particular a common ancestor of the Swedish Vallhund. A certain degree of inbreeding between the two types has been suggested to explain the similarities between the two. Here it is seen in a replica of its natural habitat, the common office building, where it participates in a symbiotic relationship with the Humans who also reside here. In exchange for treats and bellyrubs, the Corgi provides the Humans with emotional support in the otherwise soul-crushing environment of the corporate workplace."; name = "Corgi Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"pT" = (/obj/structure/table/reinforced,/turf/simulated/floor/lino,/area/awaymission/zoo) -"pU" = (/mob/living/simple_animal/hostile/scarybat{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"pV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Tindalos is a large insect creature native to the Tubau plains of Zzarlaanis, in the Tiphonia system. The Human settlers who live on the planet have compared them to wingless grasshoppers. At high population densities and under certain environmental conditions, the Tindalos have been known to change behavior and form swarms. Tindalos are plant-eaters, sometimes becoming serious pests of cereals, vegetables and pasture, especially when they swarm in their millions and destroy crops over wide areas."; name = "Tindalos Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"pW" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"pX" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"pY" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"pZ" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"qa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Cats were once common features on many trading, exploration, and naval ships in the early days of Human sailing. Cats were attracted by an abundance of mice and rats, which can cause damage to ropes, woodwork, and eventually as technology progressed, electrical wiring. Rodents also presented a threat to the stores the ship carried, both as cargo and as food for sailors. Furthermore, rats and mice were also sources of disease, which was dangerous for ships at sea for long periods of time. As Humanity thrust its self into the age of slipspace, the Cat has again made the common spaceship its hunting ground for exactly the same reasons it had in times of old. Skrell scientists have noted how the common Cat has been able to tame and even control Humans. It is believed that had the cat ever achieved sentience, Humanity its self would fall to its knees before their feline overlords. Fortunately for Humans across the galaxy, there is negligible evolutionary benefit for the cat to evolve further."; name = "Cat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"qb" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qd" = (/obj/structure/flora/ausbushes/genericbush,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qe" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Space Bumble Bee is a large, usually docile stinging insect native to Virgo-Prime in the Virgo Erigone system. It normally lives in small oases around what few bodies of water exist on the arid landscape, but ever since Humans have come to colonize the world, they have been discovered in city parks even in the capital city of Anur. Despite their gentle demeanor however, they can and will attack when provoked, and are capable of opening their mandibles wide enough to swallow a Human sized victim whole. Deep in their abdomen, they process their victims along with harvested nectar into rich honey."; name = "Space Bumble Bee Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"qf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Sobaka, also known as the Dog Shark, is an amphibious, cold-blooded animal that lives in the tropical waters of Qerrbalak, in the Qerr’valis System. The Sobaka hunts fish and small animals while on land, but would prefer to scavenge than to hunt. Its nose is far more powerful than any canine species, and are able to smell both on land, and in the sea. The Sobaka are commonly employed as drug-sniffing and bomb-sniffing animals by Skrellian security forces. The Sobaka is a close relative of the sentient species called Akula."; name = "Sobaka Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"qg" = (/mob/living/carbon/human/sharkm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) -"qh" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"qi" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"qj" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"qk" = (/mob/living/simple_animal/hostile/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"ql" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"qm" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"qn" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qr" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qs" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"qt" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"qu" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"qv" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"qw" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"qx" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"qy" = (/obj/effect/landmark/away,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"qz" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"qA" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"qB" = (/obj/structure/flora/ausbushes/palebush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qH" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"qI" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"qL" = (/mob/living/simple_animal/catgirl{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"qM" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"qN" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"qO" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"qP" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"qQ" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qR" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qS" = (/obj/structure/flora/ausbushes/fullgrass,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qT" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qU" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"qV" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"qW" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qX" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qY" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"qZ" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/lino,/area/awaymission/zoo) -"ra" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rb" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 5},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rc" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"rd" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"re" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"rf" = (/obj/structure/flora/ausbushes/genericbush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"rg" = (/obj/structure/closet/lawcloset,/turf/simulated/floor/lino,/area/awaymission/zoo) -"rh" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/lino,/area/awaymission/zoo) -"ri" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rj" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rk" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/lino,/area/awaymission/zoo) -"rl" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"rm" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"rn" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"ro" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"rp" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 9},/area/awaymission/zoo) -"rq" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 1},/area/awaymission/zoo) -"rr" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 5},/area/awaymission/zoo) -"rs" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rt" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet,/turf/simulated/floor/lino,/area/awaymission/zoo) -"ru" = (/obj/effect/floor_decal/carpet{icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/lino,/area/awaymission/zoo) -"rv" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"rw" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"rx" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"ry" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beachcorner"; dir = 4},/area/awaymission/zoo) -"rz" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beachcorner"; dir = 8},/area/awaymission/zoo) -"rA" = (/obj/machinery/photocopier,/turf/simulated/floor/lino,/area/awaymission/zoo) -"rB" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"rC" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"rD" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass2"},/area/awaymission/zoo) -"rE" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass4"},/area/awaymission/zoo) -"rF" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass4"},/area/awaymission/zoo) -"rG" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass4"},/area/awaymission/zoo) -"rH" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"rI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rJ" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"rK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "A mouse (plural: mice), native to Earth in the Sol system, is a small rodent characteristically having a pointed snout, small rounded ears, a body-length scaly tail and a high breeding rate. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are locally common. They are known to invade homes and space ships for food and shelter. Cats, wild dogs, foxes, birds of prey, snakes and even certain kinds of arthropods have been known to prey heavily upon mice. Nevertheless, because of its remarkable adaptability to almost any environment, the mouse is one of the most successful mammalian genera living in the galaxy today."; name = "Mouse Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Sparra are a bird-like race from the planets Eltus and Tal in the Vilous system. These creatures have compared intelligence comparable to avians of the Corvus genus, from Earth. The Sparra are believed to share a common ancestry with one of the sentient races on Tal, called Nevreas. The Sparra have exhibited behavior including complex use of primitive tools, and even modification of tools, a trait which has not even been witnessed in primates besides Humans."; name = "Sparra Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Diyaab is a predatory creature whose various geneses dwell at the upper latitudes of both hemispheres of most continents on Meralar, in the Rarkajar system. They resemble wolverines in appearance, but are slightly larger, and with longer legs. They also have long ears and leonine tails tipped with a contrasting color, the specifics of which vary based on species. They live in packs of up to seven individuals. They are omnivores, consuming Chur'eech nuts and Thaa'dra, as well as fish, eggs, Arnab, and Dubaab. However, they are most notable for being able to take down larger creatures, including Tajara, by using group tactics. They communicate through body language involving the ears and tail. If forcibly separated from their packs with no means of returning, a Diyaab will lay down and die. It has been theorized that they are related to the Farwa."; name = "Diyaab Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Neaera can be essentially described as an odd mix of Salamander, Frog and Monkey, and often travel about the swamps of Qerrbalak via the trees. They hunt the larger insects of the swamps, as well as eat the plant life in the areas. They are most often neutral to both Skrell and Human presence, but they will defend themselves if provoked."; name = "Neaera Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"rP" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"rQ" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"rR" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"rS" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo) -"rT" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/awaymission/zoo) -"rU" = (/mob/living/carbon/human/sparram{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"rV" = (/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"rW" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) -"rX" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"rY" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) -"rZ" = (/obj/item/trash/syndi_cakes,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sa" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sb" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sc" = (/mob/living/simple_animal/mouse{faction = "zoo"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sd" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/zoo) -"se" = (/obj/item/trash/chips,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sf" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sg" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/zoo) -"sh" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/awaymission/zoo) -"si" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sj" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sk" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sl" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sm" = (/mob/living/carbon/human/neaera{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"sn" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"so" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"sp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/awaymission/zoo) -"sq" = (/mob/living/simple_animal/hostile/diyaab{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sr" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"ss" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) -"st" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/grass,/area/awaymission/zoo) -"su" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"sv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sw" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/zoo) -"sx" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/awaymission/zoo) -"sy" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/awaymission/zoo) -"sz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/zoo) -"sA" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/zoo) -"sB" = (/turf/simulated/floor,/area/awaymission/zoo) -"sC" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) -"sD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Xenomorph XX121, better known just as Xenomorph (which literally translates to 'alien form'), are an extraterrestrial, endoparasitoid species with multiple life cycles, possibly originating from the planet Proteus (also known as Xenomorph Prime), which orbits the star A6 454. One of the deadliest of all known alien species, these creatures need a host organism in order to reproduce. The appearance of the Xenomorph varies depending on its host. The Human phenotype is generally around 7–8 feet, and roughly 136.0 to 181.4 kilograms in weight, with a long, muscular tail and large, curved, oblong head. The Queen of this species is generally twice as large (they can grow even larger, some even up to 100 feet tall, and stronger if given time) and possesses superior speed, strength and intelligence. The term Xenomorph is derived from the Greek words xeno ('stranger', 'alien', and 'foreigner') and morphe ('form', 'shape'). There are no solid facts as to the origins of the Xenomorph species; instead, there are many assumptions which cannot be confirmed. Based on the limited information we have, the most commonly accepted hypothesis is that they are an artificially created species, although another hypothesis says that they evolved naturally on a planet much different than our own. The Xenomorph lives in a hive together with its queen. Amazingly, the blood and other bodily fluids of the Xenomorph are highly acidic. It is not yet understood how a creature of such biology can exist. The planet Proteus is also home to rare, red-hued Xenomorphs, who frequently fight their black-colored rivals."; name = "Xenomorph Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Space spider is a broad classification is used to indicate a subspecies of arachnids discovered in the Tau sector. Extremely dangerous and voracious, this family of arachnids managed to evolve and adapt to grow and thrive in a variety of atmospheric conditions, even the complete lack of an atmosphere altogether. The females, bigger than the males, tend to lay their eggs in the bodies of animals killed during hunts. From there, the young specimens (spiderlings) will feed on the corpse for the first few hours of life until the body is picked clean, after which they will leave the nest to begin hunting for small parasites and anaerobic or aerobic creatures. Once they reach adulthood, their societal structure seems to change, pushing them to hunt in small packs, mostly favoring their numbers and aggressive nature, and inoculating a deadly toxin in their victims before sucking the nutrients dry."; name = "Space Spider Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Samak are the apex predator in the various plains regions of the northern hemisphere of Meralar. Unlike many creatures of Meralar, it does not have any fur to speak of. Instead, it is completely covered in thick armored plates which act as a barrier between the Samak's internal warmth and the cold environment. However, this is still not that efficient, so the Samak feed often to keep themselves warm. The Samak have six thick legs tipped with broad claws, and roughly aerodynamic bodies. They burrow underground, detecting prey through incredibly keen thermal detection. They pop up suddenly, grab their next meal, and return underground just as quickly. They prefer larger prey, such as the Baqara, Elu'a Eli, and Tajaran. Due to their voracious appetites and tendency to ruin mine shafts and infrastructure, they have been hunted almost to extinction, mainly by the Slavemasters. For the Tajaran, being able to kill a Samak singlehandedly (and without 'cheating', such as saturation bombing and the like) is an incredible feat, and any individual who pulls it off is lauded greatly."; name = "Samak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Space bears are the result of reckless experimentation in the early days of interplanetary travel and colonization. Rogue scientists in the beginnings of what is now known as Space Russia got very drunk one night, more than usual, and decided to 'improve' on the terran bear. The result is faster, stronger, and smarter than the original species, but most importantly they are able to survive in the airless void of space without any special equipment. It is unknown if they were originally meant to be living weapons or simply made 'because we can', but the scientists responsible were never heard from again. Now, thanks to faster than light travel and lackluster effort in making sure nothing's riding along, Space Bears can be found living on asteroids and moons across the galaxy, wherever Humanity and friends may roam."; name = "Space Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"sI" = (/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sJ" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sK" = (/turf/simulated/floor/holofloor/reinforced{icon = 'icons/turf/floors.dmi'; icon_state = "lava"; name = "hololava"},/area/awaymission/zoo) -"sL" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sM" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sN" = (/turf/simulated/floor/holofloor/space,/area/awaymission/zoo) -"sO" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sP" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sQ" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sR" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sS" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sT" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sU" = (/obj/structure/flora/bush,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"sV" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sW" = (/mob/living/simple_animal/hostile/alien{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sX" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sY" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"sZ" = (/obj/structure/closet/crate,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) -"ta" = (/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) -"tb" = (/obj/structure/flora/grass/both,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"tc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Xenomorph XX121, better known just as Xenomorph (which literally translates to 'alien form'), are an extraterrestrial, endoparasitoid species with multiple life cycles, possibly originating from the planet Proteus (also known as Xenomorph Prime), which orbits the star A6 454. One of the deadliest of all known alien species, these creatures need a host organism in order to reproduce. The appearance of the Xenomorph varies depending on its host. The Human phenotype is generally around 7–8 feet, and roughly 136.0 to 181.4 kilograms in weight, with a long, muscular tail and large, curved, oblong head. The Queen of this species is generally twice as large (they can grow even larger, some even up to 100 feet tall, and stronger if given time) and possesses superior speed, strength and intelligence. The term Xenomorph is derived from the Greek words xeno ('stranger', 'alien', and 'foreigner') and morphe ('form', 'shape'). There are no solid facts as to the origins of the Xenomorph species; instead, there are many assumptions which cannot be confirmed. Based on the limited information we have, the most commonly accepted hypothesis is that they are an artificially created species, although another hypothesis says that they evolved naturally on a planet much different than our own. The Xenomorph lives in a hive together with its queen. Amazingly, the blood and other bodily fluids of the Xenomorph are highly acidic. It is not yet understood how a creature of such biology can exist. The planet Proteus is also home to rare, red-hued Xenomorphs, who frequently fight their black-colored rivals."; name = "Xenomorph Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"td" = (/mob/living/simple_animal/hostile/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"te" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space spider is a broad classification is used to indicate a subspecies of arachnids discovered in the Tau sector. Extremely dangerous and voracious, this family of arachnids managed to evolve and adapt to grow and thrive in a variety of atmospheric conditions, even the complete lack of an atmosphere altogether. The females, bigger than the males, tend to lay their eggs in the bodies of animals killed during hunts. From there, the young specimens (spiderlings) will feed on the corpse for the first few hours of life until the body is picked clean, after which they will leave the nest to begin hunting for small parasites and anaerobic or aerobic creatures. Once they reach adulthood, their societal structure seems to change, pushing them to hunt in small packs, mostly favoring their numbers and aggressive nature, and inoculating a deadly toxin in their victims before sucking the nutrients dry."; name = "Space Spider Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tf" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"tg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Samak are the apex predator in the various plains regions of the northern hemisphere of Meralar. Unlike many creatures of Meralar, it does not have any fur to speak of. Instead, it is completely covered in thick armored plates which act as a barrier between the Samak's internal warmth and the cold environment. However, this is still not that efficient, so the Samak feed often to keep themselves warm. The Samak have six thick legs tipped with broad claws, and roughly aerodynamic bodies. They burrow underground, detecting prey through incredibly keen thermal detection. They pop up suddenly, grab their next meal, and return underground just as quickly. They prefer larger prey, such as the Baqara, Elu'a Eli, and Tajaran. Due to their voracious appetites and tendency to ruin mine shafts and infrastructure, they have been hunted almost to extinction, mainly by the Slavemasters. For the Tajaran, being able to kill a Samak singlehandedly (and without 'cheating', such as saturation bombing and the like) is an incredible feat, and any individual who pulls it off is lauded greatly."; name = "Samak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"th" = (/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"ti" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space bears are the result of reckless experimentation in the early days of interplanetary travel and colonization. Rogue scientists in the beginnings of what is now known as Space Russia got very drunk one night, more than usual, and decided to 'improve' on the terran bear. The result is faster, stronger, and smarter than the original species, but most importantly they are able to survive in the airless void of space without any special equipment. It is unknown if they were originally meant to be living weapons or simply made 'because we can', but the scientists responsible were never heard from again. Now, thanks to faster than light travel and lackluster effort in making sure nothing's riding along, Space Bears can be found living on asteroids and moons across the galaxy, wherever Humanity and friends may roam."; name = "Space Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tj" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tk" = (/mob/living/simple_animal/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"tl" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/mob/living/simple_animal/hostile/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tm" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tn" = (/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/simple_animal/hostile/mimic/crate{faction = "zoo"},/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) -"to" = (/obj/structure/flora/ausbushes/fullgrass,/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"tp" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/bear{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tq" = (/obj/structure/flora/grass/both,/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"tr" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"ts" = (/mob/living/simple_animal/hostile/samak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"tt" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tu" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tv" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tw" = (/mob/living/simple_animal/hostile/carp{faction = "zoo"},/turf/simulated/floor/holofloor/space,/area/awaymission/zoo) -"tx" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The common Green Snake is an invasive species that makes its home on tropical worlds across the galaxy. Its ancestors were once kept as pets by Humans, but these snakes had escaped into the ventilation of ships over many centuries to feed on the abundance of mice usually infesting the maintinence passages. It is believed that they are descended from the Ball Python, native to Earth, in the Sol system."; name = "Green Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ty" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tz" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/mob/living/simple_animal/hostile/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tA" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Don't be fooled, this isn't a storage room, but in fact the hunting ground of a deadly ambush predator known as the Mimic. The origin of this species is largely unknown, but they are theorized to be a cousin of the even more elusive changeling species. However, unlike the changeling, the mimic is known for disguising its self as inanimate objects, rather than other animals. When a suitable prey disturbs the mimic, it attacks, and if possible, swallows its victim whole. Scientists do not know how the creature reproduces, as all efforts to study the organism, dead or alive, have revealed that specimens examined do not have reproductive organs at all! It is hypothesized that the mimic grows and uses reproductive organs during a later life cycle, not yet recorded by any known sentient species."; name = "Mimic Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tB" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tC" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large2"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tD" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Originating from the jungles of Earth, Parrots are a highly intelligent avian that have become an expensive commodity in space, prized for their colorful plumage, and their famous ability to mimic speech. Ship captains traditionally keep them as exotic pets, to demonstrate wealth, and to have someone to talk with. Some researchers believe some parrot species to be capable of intelligence up to that of a 5 year old Human in some aspects. Purebreds of exceptionally varied color pallets are especially prized among traders and space pirates."; name = "Parrot Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Penguins are a group of aquatic, flightless birds living almost exclusively in the Southern Hemisphere of Earth, in the Sol system, especially in the continent of Antarctica. Highly adapted for life in the water, penguins have countershaded dark and white plumage, and their wings have evolved into flippers. Most penguins feed on krill, fish, squid and other forms of sealife caught while swimming underwater. They spend about half of their lives on land and half in the oceans. Due to the effects of global warming, penguins have been sent off-world to wildlife sanctuaries across the galaxy. Today, many such reserves harbor the last of this species, while penguins are now extinct on Earth."; name = "Space Penguin Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tG" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tH" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space carp are a breed of space fish that come from the phoron giant Erebus. Scientists aren't quite sure how, but the Carp are imbued with the Phoron in their DNA, allowing for them to travel unaided through the vast void of Space, without gravity, air, or anything. They are very dangerous to space travelers, as they are highly aggressive and carnivorous. They often break windows and the like on space stations hoping to get in to eat the crew."; name = "Space Carp Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"tJ" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tK" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/mob/living/simple_animal/hostile/alien{faction = "zoo"; name = "invisible alien hunter"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tL" = (/obj/effect/spider/stickyweb{icon_state = "stickyweb2"},/obj/effect/spider/cocoon{icon_state = "cocoon3"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tM" = (/obj/effect/spider/stickyweb{icon_state = "cobweb1"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tN" = (/obj/effect/spider/cocoon{icon_state = "cocoon2"},/mob/living/simple_animal/hostile/giant_spider/nurse{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tO" = (/obj/effect/spider/stickyweb{icon_state = "cobweb2"},/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tP" = (/obj/effect/spider/stickyweb{icon_state = "stickyweb2"},/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tQ" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/mob/living/simple_animal/hostile/alien/queen/large{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tR" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) -"tS" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large3"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tT" = (/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tU" = (/mob/living/simple_animal/parrot{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"tV" = (/obj/effect/landmark/away,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"tW" = (/mob/living/simple_animal/hostile/bear{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"tX" = (/mob/living/simple_animal/hostile/alien{faction = "zoo"; name = "invisible alien hunter"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"tY" = (/obj/effect/decal/remains,/obj/effect/gibspawner/generic,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) -"tZ" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"ua" = (/mob/living/simple_animal/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"ub" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"uc" = (/obj/effect/spider/stickyweb{icon_state = "stickyweb2"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"ud" = (/obj/effect/spider/stickyweb{icon_state = "cobweb2"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"ue" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"uf" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"ug" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"uh" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"ui" = (/obj/effect/spider/stickyweb{icon_state = "cobweb1"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uj" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"uk" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"ul" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/alien{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"um" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Stoks are a small species of reptile native to Moghes, ranging from two, to three feet tall with colorful scales and feathers adorning their head, they stand on two legs and have short arms, the legs being digitigrade. They keep to oasis's due to their colors which provide camouflage and distance from predators such as duneworms. Keeping in packs so that when they are threatened, they will swarm an attacker and take it down by sheer flanking and numbers. They're an omnivorous species, keeping themselves fed on either predators, or oasis fruits, also been known to be kept as pets for both Unathi on Moghes, and other species with taste in exotic animals. "; name = "Stok Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"un" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "During the latest part of a Diona's life cycle, the Diona casts its self into orbit around a star, so it may soak up solar radiation and grow to immense proportions, even as large as a space station. The yithian, exhibited here, can only be found within these great Diona, where it has a symbiotic relationship with its host. It consumes fungus and parasites that would normally compromise the Diona's health."; name = "Yithian Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "A relative of the Tajaran, the Farwa is an intelligent pack animal widespread on Meralar, in the Rarkajar system. Usually with tan, orange and brown pelts, this animals is capable of using primitive tools. Its diet is primarly made up of vegetable matter and carrion, although they also hunt opportunistically. The species itself is very diverse, with Farwa in different biomes possessing minute variations in behaviour and genetic make-up."; name = "Farwa Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"up" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "This Redspace creature was generously donated by a NanoTrasen science team headed by Dr. Kisuke Gema of the Virgo Orbital Research Establishment. Other than that, we honestly don't know anything about this monstrosity, other than the fact that it hungers for Human flesh."; name = "Redspace Abomination Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uq" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"ur" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"us" = (/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"ut" = (/mob/living/simple_animal/yithian{faction = "zoo"},/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uu" = (/obj/machinery/portable_atmospherics/hydroponics/soil/invisible,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uv" = (/turf/simulated/floor/cult,/area/awaymission/zoo) -"uw" = (/obj/structure/cult/pylon,/turf/simulated/floor/cult,/area/awaymission/zoo) -"ux" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uy" = (/obj/effect/floor_decal/asteroid,/mob/living/carbon/human/stok{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uz" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uA" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uB" = (/mob/living/carbon/human/farwa{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"uC" = (/obj/effect/gateway,/turf/simulated/floor/cult,/area/awaymission/zoo) -"uD" = (/mob/living/carbon/human/stok{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uE" = (/obj/structure/sink/puddle,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uF" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uG" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uH" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uI" = (/obj/structure/flora/ausbushes/sunnybush,/mob/living/simple_animal/yithian{faction = "zoo"},/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uJ" = (/obj/structure/flora/tree/pine{icon_state = "pine_2"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"uK" = (/obj/structure/flora/tree/pine{icon_state = "pine_3"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"uL" = (/mob/living/simple_animal/hostile/creature/vore{faction = "zoo"; name = "redspace abomination"},/turf/simulated/floor/cult,/area/awaymission/zoo) -"uM" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uN" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uO" = (/obj/effect/decal/remains/human,/turf/simulated/floor/cult,/area/awaymission/zoo) -"uP" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uQ" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) -"uR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Decades ago, a group of rogue Skrellian scientists began illegal experimentation on the Unathi inhabitants of Moghes. In an effort to create genetically engineered super soldiers, the Deathclaw was born with deadly sharp razor-like claws, incredible agility, robust durability, and high intelligence. When the Skrellian scientists were arrested by the authorities, the Deathclaw was to be destroyed, but some managed to escape captivity into the nuclear wastelands of Moghes. Normally solitary creatures, they have been known to hunt in packs, and seem to have a preference for Human and Unathi meat."; name = "Deathclaw Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Space Goose (pural: geese) is an aquatic fowl originating from the planet Earth. This breed of Geese however was bred to the clime of space ships and stations as guard animals. They are extremely loud, highly aggressive, and territorial, while their talons and beaks are much longer and sharper than Earth geese. Their aggressive nature makes them difficult to train, but are highly effective when deployed."; name = "Space Goose Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Grey Wolf, Scientific name Canis Lupus, is a species native to the Sol system and specifically the planet Earth. It is the largest extant member of its family, with males averaging 43–45 kg (95–99 lb), and females 36–38.5 kg (79–85 lb). Like the red wolf, it is distinguished from other Canis species by its larger size and less pointed features, particularly on the ears and muzzle. Its winter fur is long and bushy, and predominantly a mottled gray in color, although nearly pure white, red, or brown to black also occur. It is also know by the name Timber Wolf. The gray wolf is the second most specialised member of the genus Canis, as demonstrated by its morphological adaptations to hunting large prey, its more gregarious nature, and its highly advanced expressive behavior. It is nonetheless closely related enough to smaller Canis species, such as the Sol Coyote or Golden Jackal to produce fertile hybrids. It is the only species of Canis to have a range encompassing both the Old and New planets, due to being popular as a traveling companion, an easier to tame circus attraction compared to tigers, and its valuable use in ridding polar worlds of large predators. It was also spread through some worlds to deal with Cloud Fox infestations. While normally indifferent to foxes aside from hunting territories, the Grey Wolf has shown great hostility to a special strain of Fox mutation found on the planet Andorss called the Cloud Fox. Bafflingly, these creatures share nothing in common that should lead them to be enemies, as the Grey Wolf is a predator and lives in snowy areas, whereas the Cloud Fox is an herbivore, largely found in Corn rich areas. Scientists have yet to explain this, although several other animals have also been shown to show hostility towards Cloud Foxes, namely the Macromeleon and Carousel Panther, both of whom get along well with Grey Wolves."; name = "Gray Wolf Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "While all the species of these large predators are commonly known as Dragons (Draconius Regalis), this is mainly an umbrella term for a number of varieties of these large, reptilian creatures. There are numerous varieties of dragons found throughout the galaxy, and recounts of these creatures can be traced back to Skrell civilization's first interplanetary travels speaking of a large, unknown creature attacking and devouring the closeby cargo ships. Mainly solitary creatures, the Dragons roam large areas of space, capable of adapting to a large variety of atmospheres thanks to each sub-species natural affinity to various elements. While in today's population there are a numerous subspecies, all of these can be traced back to what archaeologists claimed to be a 'phoron' Dragon, by the biological analysis of the fossils found on asteroids in the Virgo-Erigone system. The creatures displayed here were reconstituted from such fossils, generously donated by the Virgo Orbital Research Establishment."; name = "Phoron Dragon Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"uV" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uW" = (/obj/effect/floor_decal/asteroid,/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"uX" = (/obj/effect/gibspawner/human,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"uY" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"uZ" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/dino{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"va" = (/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Decades ago, a group of rogue Skrellian scientists began illegal experimentation on the Unathi inhabitants of Moghes. In an effort to create genetically engineered super soldiers, the Deathclaw was born with deadly sharp razor-like claws, incredible agility, robust durability, and high intelligence. When the Skrellian scientists were arrested by the authorities, the Deathclaw was to be destroyed, but some managed to escape captivity into the nuclear wastelands of Moghes. Normally solitary creatures, they have been known to hunt in packs, and seem to have a preference for Human and Unathi meat."; name = "Deathclaw Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Space Goose (pural: geese) is an aquatic fowl originating from the planet Earth. This breed of Geese however was bred to the clime of space ships and stations as guard animals. They are extremely loud, highly aggressive, and territorial, while their talons and beaks are much longer and sharper than Earth geese. Their aggressive nature makes them difficult to train, but are highly effective when deployed."; name = "Space Goose Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Grey Wolf, Scientific name Canis Lupus, is a species native to the Sol system and specifically the planet Earth. It is the largest extant member of its family, with males averaging 43–45 kg (95–99 lb), and females 36–38.5 kg (79–85 lb). Like the red wolf, it is distinguished from other Canis species by its larger size and less pointed features, particularly on the ears and muzzle. Its winter fur is long and bushy, and predominantly a mottled gray in color, although nearly pure white, red, or brown to black also occur. It is also know by the name Timber Wolf. The gray wolf is the second most specialised member of the genus Canis, as demonstrated by its morphological adaptations to hunting large prey, its more gregarious nature, and its highly advanced expressive behavior. It is nonetheless closely related enough to smaller Canis species, such as the Sol Coyote or Golden Jackal to produce fertile hybrids. It is the only species of Canis to have a range encompassing both the Old and New planets, due to being popular as a traveling companion, an easier to tame circus attraction compared to tigers, and its valuable use in ridding polar worlds of large predators. It was also spread through some worlds to deal with Cloud Fox infestations. While normally indifferent to foxes aside from hunting territories, the Grey Wolf has shown great hostility to a special strain of Fox mutation found on the planet Andorss called the Cloud Fox. Bafflingly, these creatures share nothing in common that should lead them to be enemies, as the Grey Wolf is a predator and lives in snowy areas, whereas the Cloud Fox is an herbivore, largely found in Corn rich areas. Scientists have yet to explain this, although several other animals have also been shown to show hostility towards Cloud Foxes, namely the Macromeleon and Carousel Panther, both of whom get along well with Grey Wolves."; name = "Gray Wolf Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"ve" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "While all the species of these large predators are commonly known as Dragons (Draconius Regalis), this is mainly an umbrella term for a number of varieties of these large, reptilian creatures. There are numerous varieties of dragons found throughout the galaxy, and recounts of these creatures can be traced back to Skrell civilization's first interplanetary travels speaking of a large, unknown creature attacking and devouring the closeby cargo ships. Mainly solitary creatures, the Dragons roam large areas of space, capable of adapting to a large variety of atmospheres thanks to each sub-species natural affinity to various elements. While in today's population there are a numerous subspecies, all of these can be traced back to what archaeologists claimed to be a 'phoron' Dragon, by the biological analysis of the fossils found on asteroids in the Virgo-Erigone system. The creatures displayed here were reconstituted from such fossils, generously donated by the Virgo Orbital Research Establishment."; name = "Phoron Dragon Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vf" = (/obj/effect/decal/remains/human,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"vg" = (/mob/living/simple_animal/adultslime{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vh" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vi" = (/mob/living/simple_animal/hostile/large/dragon{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) -"vj" = (/mob/living/simple_animal/lizard{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vk" = (/mob/living/simple_animal/hostile/tomato{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"vl" = (/mob/living/simple_animal/fox{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"vm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Voracious Lizard is a relatively new species, muted from the common space lizard by exposure to Phoron. These creatures are found commonly in and around facilities where phoron is mined, refined, or stored. They have been known to attack other creatures in groups, and are able to unhinge their jaws to swallow Human-sized prey whole. The species was first discovered in the Virgo-Erigone system, and have since become a dangerous pest."; name = "Voracious Lizard Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vn" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/deathclaw{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Common Space Lizard (Pordacis Stellae Vulgaris) is a common critter amongst space stations. Their origin traces back to genetically modified wall lizards to survive the hazardous conditions of space, this hardy animal is surprisingly tough and able to rapidly regenerate dead cells from radiation exposure and is virtually immune against cancerous growths. Its diet is varied, as it eats what it gets, from discarded junk food to mice and small spiders."; name = "Lizard Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vp" = (/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"vq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Originally a cult movie monster, a team of geneticists eventually turned the Animate Tomato from fiction to reality. While not harmful in any way, some people consider its grin to be disturbing. It reproduces in the same manner as plants, coming off of the vine when harvested or when it gets ripe enough, afterwards wandering about on its own."; name = "Animate Tomato Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Foxes are small-to-medium-sized, omnivorous mammals belonging to several genera of the family Canidae. Foxes are slightly smaller than a medium-size domestic dog, with a flattened skull, upright triangular ears, a pointed, slightly upturned snout, and a long bushy tail (or brush). These foxes are Red Foxes, largest of the true foxes, has the greatest geographic range of all members of the Carnivora family, originally spanning across the entire Northern Hemisphere of Earth from the Arctic Circle to North Africa, North America and Eurasia, and has grown to be found on many forest and garden planets across the galaxy."; name = "Fox Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vs" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "A mouse (plural: mice), native to Earth in the Sol system, is a small rodent characteristically having a pointed snout, small rounded ears, a body-length scaly tail and a high breeding rate. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are locally common. They are known to invade homes and space ships for food and shelter. Cats, wild dogs, foxes, birds of prey, snakes and even certain kinds of arthropods have been known to prey heavily upon mice. Nevertheless, because of its remarkable adaptability to almost any environment, the mouse is one of the most successful mammalian genera living in the galaxy today."; name = "Slime Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vt" = (/mob/living/simple_animal/hostile/deathclaw{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vu" = (/mob/living/simple_animal/slime{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vv" = (/obj/structure/flora/ausbushes/sparsegrass,/mob/living/simple_animal/hostile/dino{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vw" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/lizard{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"vx" = (/obj/effect/landmark/away,/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"vy" = (/mob/living/simple_animal/hostile/wolf{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"vz" = (/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) -"vA" = (/obj/structure/symbol/sa,/turf/simulated/wall,/area/awaymission/zoo) -"vB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Saru (also incorrectly known as Sergalings) are the smaller, unevolved, far more docile cousins of the Sergals, and are usually thought of as either pests, food, or pets. They are a commodity that the Sergal use in their trades with other species due to their cute appearance and quick breeding. Contrary to popular belief, they are not sergal pups, despite their similar appearance. Note the distinctly stubbier noses, compared to true sergal pups. Unfortunately, the mistake has been made more than once, even by other sergals, wherein actual young sergals have been mistakenly sold to traders with tragic consequences... for the traders. The Saru are, like the Sergals, native to the planet Eltus, in the Vilous system. However, they are also found on the planet Tal in the same system."; name = "Saru Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The brown bear (Ursus arctos) is a large bear with the widest distribution of any living ursid. The species is distributed across much of northern Eurasia and North America, on planet Earth. It is one of the two largest terrestrial carnivorans alive today, rivaled in body size only by its close cousin, the polar bear (Ursus maritimus), which is much less variable in size and averages larger due to this. There are several recognized subspecies, many of which are quite well-known within their native ranges, found in the brown bear species."; name = "Brown Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Tamaskan dogs are a crossbreed, specifically designed by dog fanciers on Earth, to morphologically resemble a wolfdog. It is a cross of several standardized breeds of the sled dog type, and its bloodlines may sometimes include a small amount of wolfdog stock. It is a highly versatile dog that can excel in agility, obedience and working trials. These traits have made the Tamaskan a popular animal among Human colonists on icy worlds."; name = "Tamaskan Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vE" = (/obj/structure/largecrate/animal/cow,/turf/simulated/floor/tiled,/area/awaymission/zoo) -"vF" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"vG" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"vH" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"vI" = (/obj/structure/sink/puddle,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"vJ" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"vK" = (/obj/effect/floor_decal/asteroid,/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"vL" = (/mob/living/simple_animal/hostile/bear/brown{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"vM" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass1"},/area/awaymission/zoo) -"vN" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass4"},/area/awaymission/zoo) -"vO" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"vP" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"vQ" = (/mob/living/simple_animal/corgi/tamaskan{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"vR" = (/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) -"vS" = (/obj/item/stack/tile/grass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"vT" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass0"},/area/awaymission/zoo) -"vU" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Exhibit Airlock"},/obj/item/tape/engineering{icon_state = "engineering_door_0"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"vV" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass3"},/area/awaymission/zoo) -"vW" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"vX" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"vY" = (/obj/structure/flora/ausbushes/genericbush,/mob/living/simple_animal/hostile/bear/brown{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) -"vZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Sol-system native Panther, found primarily on the Sol-system planet Earth, is a large mammal belonging to the Felidae family. Found in a variety of environment, like most big cats the Panther inhabits a large number of habitats and is a carnivorous, nocturnal predator. Of particular note are the various patterns of their fur - the most known one, especially thanks to Sol popular culture (books, sequential art and movies) is the black panther, a species that displays a fur pattern completely black at a first glance, but other species can display a much wider variety of patterns, another one of the most common being a beige color with large, black spots. These patterns were mainly evolved as a mean to conceal itself in the surrounding environment, to ambush an unsuspecting prey."; name = "Panther Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Shantak are a pack-hunting carnivore native to Meralar. Using loud barks and growls, similar to that of wolves, the shantak is able to communicate verbally with its hunting partners in order to coordinate attacks. The largest female of the group is usually in charge, and is considered to be the alpha of the pack."; name = "Shantak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wb" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wc" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"wd" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"we" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"wf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Sol-system native Panther, found primarily on the Sol-system planet Earth, is a large mammal belonging to the Felidae family. Found in a variety of environment, like most big cats the Panther inhabits a large number of habitats and is a carnivorous, nocturnal predator. Of particular note are the various patterns of their fur - the most known one, especially thanks to Sol popular culture (books, sequential art and movies) is the black panther, a species that displays a fur pattern completely black at a first glance, but other species can display a much wider variety of patterns, another one of the most common being a beige color with large, black spots. These patterns were mainly evolved as a mean to conceal itself in the surrounding environment, to ambush an unsuspecting prey."; name = "Panther Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wg" = (/turf/simulated/floor/holofloor/beach/water{icon_state = "beach"; dir = 8},/area/awaymission/zoo) -"wh" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"wi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Shantak are a pack-hunting carnivore native to Meralar. Using loud barks and growls, similar to that of wolves, the shantak is able to communicate verbally with its hunting partners in order to coordinate attacks. The largest female of the group is usually in charge, and is considered to be the alpha of the pack."; name = "Shantak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wj" = (/obj/structure/flora/ausbushes/fernybush,/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"wk" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"wl" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"wm" = (/mob/living/simple_animal/crab{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) -"wn" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass3"},/area/awaymission/zoo) -"wo" = (/mob/living/simple_animal/hostile/panther{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) -"wp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "A species incredibly similar to Humans. The monkey is a resident of Earth, the home planet of Humanity, and shares many traits with Humans, such as opposable thumbs, and a love of flinging fecal matter at each other. Monkeys are valued for their dancing ability, and thanks to the recent boom of monkey dance classes, the dancing monkey industry is growing. Monkeys are also commonly used in scientific research that requires testing on products meant to be used by Humans. In fact, some of the first creatures to leave Earth's atmosphere in the infancy of Humanity's space age were dogs and monkeys!"; name = "Monkey Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Crabs are decapod crustaceans of the infraorder Brachyura, which live in all the oceans on the planet Earth, in some fresh water, and even a few species which thrive on land. They are generally covered with a thick exoskeleton and have a single pair of claws. They are often kept as pets or eaten for food by Humans. Many other animals with similar names, such as king crabs, hermit crabs, porcelain crabs, horseshoe crabs, and crab lice, are not true crabs."; name = "Crab Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wr" = (/obj/effect/landmark/away,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) -"ws" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "This is not an empty exhibit. Note the pine tree in the center of the pen. This is the infamous Killer Pine Tree. Thought to be a relative of the mimic, the Killer Tree is, much like its cousins, an ambush predator. However, like the mimic, it is not known where this species is from, how it reproduces, or how it has found its way across the galaxy into new biomes."; name = "Killer Tree Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wt" = (/mob/living/simple_animal/crab{faction = "zoo"; icon_dead = "evilcrab_dead"; icon_living = "evilcrab"; icon_state = "evilcrab"},/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) -"wu" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wv" = (/mob/living/simple_animal/hostile/shantak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"ww" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass2"},/area/awaymission/zoo) -"wx" = (/mob/living/simple_animal/hostile/shantak{color = ""; faction = "zoo"; health = 100; maxHealth = 100; name = "alpha shantak"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"wy" = (/mob/living/simple_animal/hostile/tree{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"wz" = (/obj/structure/flora/bush,/mob/living/simple_animal/hostile/shantak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) -"wA" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "dgrass0"},/area/awaymission/zoo) -"wB" = (/obj/structure/flora/ausbushes/lavendergrass,/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{icon_state = "fullgrass1"},/area/awaymission/zoo) -"wC" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wD" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wE" = (/obj/effect/landmark/loot_spawn,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wF" = (/obj/item/stack/tile/grass/fifty,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The polar bear (Ursus maritimus) is a carnivorous bear whose native range once lay largely within the Arctic Circle on Earth, encompassing the Arctic Ocean, its surrounding seas, and surrounding land masses. Although it is the sister species of the brown bear, it has evolved to occupy a narrower ecological niche, with many body characteristics adapted for cold temperatures, for moving across snow, ice, and open water, and for hunting seals, which made up most of its original diet. Although most polar bears are born on land, they spent most of their time on the sea ice. Their scientific name means 'maritime bear', and derives from this fact. Polar bears hunted their preferred food of seals from the edge of sea ice, often living off fat reserves when no sea ice is present. Because of their dependence on the sea ice, polar bears are classified as marine mammals. However, because of habitat loss caused by climate change, the polar bear had gone completely extinct on Earth. The return of the polar bear is thanks to the preservation of genetic records written in the 21st century, which were later used by Space Russians to create a wildlife reserve on the planet Europa in 2492. This has generally been regarded as a poor decision."; name = "Polar Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wH" = (/mob/living/simple_animal/hostile/bear/polar{faction = "zoo"},/turf/simulated/floor/beach/water,/area/awaymission/zoo) -"wI" = (/obj/effect/landmark/away,/turf/simulated/floor/grass,/area/awaymission/zoo) -"wJ" = (/obj/effect/blocker,/turf/simulated/wall/r_wall,/area/awaymission/zoo) -"wK" = (/obj/effect/blocker,/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/zoo) -"wL" = (/obj/structure/grille{name = "mass ventilation"},/obj/effect/blocker,/turf/simulated/floor/plating,/area/awaymission/zoo) -"wM" = (/turf/simulated/wall/r_wall,/area/awaymission/zoo) -"wN" = (/obj/structure/grille{name = "mass ventilation"},/turf/simulated/floor/plating,/area/awaymission/zoo) -"wO" = (/turf/simulated/wall/durasteel,/area/awaymission/zoo) -"wP" = (/obj/structure/sign/redcross,/turf/simulated/wall/durasteel,/area/awaymission/zoo) -"wQ" = (/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"wR" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wS" = (/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wT" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/medical_wall{pixel_y = 32},/obj/item/weapon/storage/firstaid/combat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wU" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wV" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wW" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wX" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wY" = (/obj/structure/curtain/open/privacy,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"wZ" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xa" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xb" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xc" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xd" = (/obj/machinery/computer,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xe" = (/obj/structure/closet,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xf" = (/obj/structure/closet,/obj/item/clothing/under/captain_fly,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xg" = (/obj/structure/table/standard,/obj/item/weapon/paper/zoo/pirate/haveyouseen,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xh" = (/obj/machinery/shield_gen/external,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xi" = (/obj/machinery/shield_gen/external,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xj" = (/obj/machinery/shield_gen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xk" = (/obj/machinery/shieldwallgen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xl" = (/obj/machinery/shieldgen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xm" = (/obj/machinery/shieldgen,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xn" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xo" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/landmark/loot_spawn,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xp" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xq" = (/obj/structure/symbol/lo{pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xr" = (/obj/machinery/door/window/brigdoor/southleft,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xs" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor/southright,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xt" = (/obj/structure/closet/secure_closet/security,/obj/random/handgun,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xu" = (/obj/machinery/door/window/brigdoor/southright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xv" = (/obj/structure/table/rack,/obj/random/action_figure,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xw" = (/obj/structure/table/rack,/obj/random/plushie,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xx" = (/obj/structure/table/rack,/obj/random/contraband,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xy" = (/obj/machinery/door/airlock/glass_medical,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xz" = (/turf/simulated/floor/tiled/red,/area/awaymission/zoo) -"xA" = (/obj/machinery/door/airlock/medical,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EMPLOYEES ONLY'."; name = "EMPLOYEES ONLY"; pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xC" = (/obj/structure/symbol/gu{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xD" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xE" = (/obj/structure/table/standard,/obj/item/weapon/paper/zoo/pirate/warning,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xF" = (/obj/structure/sign/electricshock,/turf/simulated/wall/durasteel,/area/awaymission/zoo) -"xG" = (/obj/machinery/shield_capacitor,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xH" = (/obj/machinery/shield_capacitor,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xI" = (/obj/structure/symbol/pr{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xJ" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "lost and found"},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xK" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/red,/area/awaymission/zoo) -"xL" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"xM" = (/obj/machinery/door/airlock/command,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xN" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xO" = (/obj/structure/grille{name = "mass ventilation"},/turf/unsimulated/wall/planetary/normal,/area/awaymission/zoo) -"xP" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xQ" = (/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xR" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xS" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1; name = "Security"; req_one_access = list(1)},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"xT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EMPLOYEES ONLY'."; name = "EMPLOYEES ONLY"; pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xU" = (/obj/structure/symbol/gu{pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"xV" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/floodlight,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xW" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"xX" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xY" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/under/rank/engineer/skirt,/mob/living/simple_animal/hostile/mimic/crate,/turf/simulated/floor/plating,/area/awaymission/zoo) -"xZ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"ya" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) -"yb" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/landmark/loot_spawn,/obj/structure/symbol/da{pixel_x = -32},/turf/simulated/floor/plating,/area/awaymission/zoo) -"yc" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) -"yd" = (/obj/structure/coatrack,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"ye" = (/obj/structure/filingcabinet/filingcabinet,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yf" = (/obj/structure/filingcabinet/filingcabinet,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo/pirate/nebula,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yg" = (/obj/structure/symbol/da{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) -"yh" = (/obj/machinery/floodlight,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"yi" = (/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) -"yj" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) -"yk" = (/obj/structure/closet/crate/solar,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/cell/crap,/obj/item/weapon/cell/crap,/obj/item/weapon/cell/crap,/turf/simulated/floor,/area/awaymission/zoo) -"yl" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"ym" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yn" = (/obj/machinery/door/window/brigdoor/northleft,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/ammo_all,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yo" = (/obj/machinery/door/window/brigdoor/northright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/table/rack,/obj/random/ammo_all,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yp" = (/obj/machinery/door/window/brigdoor/northleft,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yq" = (/obj/machinery/door/window/brigdoor/northright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"yr" = (/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) -"ys" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yt" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/zoo/solars) -"yu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yA" = (/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/airless,/area/awaymission/zoo/solars) -"yB" = (/obj/structure/cable,/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/zoo/solars) -"yC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) -"yE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) - -(1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajakaeamaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapakakaqararaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasajataearararaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaxaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaAaraBaCaDaEaraFaGaeaIaJaKaLaMaNaNaNaNaNaNaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaeaeararararararararararaeaPararaQararaRaSaTaraUaVaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaiaWaXaeaIaYaNaYaNaYaZafaaaaaaaaaaaeaeararararararaAarbbararaqaPararbcararbdbebfararbgaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaapbhbiaeaPararararararbjaaaaaaaaaeaeararararararararararararaeaParararararbkblbmararbgaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaasbhbhaearbnbnbobnbnbpagaaaaaaaeaeararararbsarararbtbuarbtbuaeaParaUararararararararbgaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaeaebwaeaxaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebybybyaeaeaeaeaeaebzbnbobAbnbnbBbBbBbCbnbpaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalahahalaaaaaaaaalalalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaeaebIbIbIbIaebJbKbLbMbNbObMbPbKbKaebQbRbSbTbKbKbKbKbUbVbWbUbXaeaeaeaeaeaeaeaeaeaeaebYaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalbZcacbalaaaaaaaaaaalalanaoalalaaaaalalalalcecfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaeaebIbIbIbIbIaebKcgbLchchchcibPbKbKaecjcjcjbTbKbKbKbKckckbKckbKaeclclcmcncocpcocqaecrchchaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalauavalayawcwcxcyalalaaaaaaalalalahahalalbZcbalaHazalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadadaeaebIbIbIbIbIbIaebKbKbLchcCchchbPbKbKcDcEcEcFcGbKbKbKbKbKbKcHbKbKaecIcmcmaecJcKcLcMaecNchchchchcOaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPaOananbaanancTcUcValalbZcacbalalbqananbralbvbDbxanbEalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadaeaebIbIdcddbIdebIaebKbKdfdgdgdhdgdibKbKaebKbKbKbKbKbKbKbKbKbKbKbKbKaecmdjcmaeaeaeaeaeaecNchchchchdkaedldmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadobGbFbHalanandsdtdualccccccccccdwcdananandzanananancsalcedBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadaebIbIbIdCdDbIbIbIaedEbKbKbKbKbKbKbKbKbKaebKbKbKdFdGdGdGdGdGdGdGbKbKaecmcmcmcmcmcmcmdHaedIcharararcOaqakdmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalctanananalcccuczcvccdPanananandzancQcAananalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadcRdUbIbIdUbIbIbIbIdVbKbKdGdGdGdGdGdWbKbKbKbKbKbKdXdYdXdXdXdXdZeaebecaecmcmedeeeeefcmcmaeegehareiejcOaeakdmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSalalcWanalalcYcXcYcZcYeoanananctalalalaldbdaalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadcResetbIbIbIbIbIbIaebKbKdGeuevewexarbKeybKbKbKbKezdGdGdGdGdGdGdGbKeAeBeCeCeDareEexcmcmaeeFcharararcOaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleHeIalalalalalalalaldpanananandqananananalalcWanalaldrdralalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadcResetbIbIbIbIbIbIaebKbKdGeueuarexarbKbKbKbKbKbKbKbKbKbKePbKbKbKbKbKbKcmcmeQarareRcmcmaeeScharararcOaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaldvdxaldyaldJdAdKalaldLananananananananananananandMcdanananalcecfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadcRdUbIbIbIbIbIbIbIdVbKfcdGfdeufeffarbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKcmcmfgeEfheRcmcmaefichareiejcOaeakdmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafjdNandOaldQalaldRalfoaldSanancuczczczczczcvanananandTekanananalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadaebIbIbIbIbIbIbIbIaedEbKdGeuareEexfsbKbKaebKbKbKdFdGdGdGdGdGdGdGbKftebeCeCeDfuarfvcmdHaedIfwarararcOaqakdmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafxdNelanemananananenanananananeqepepepepeperananananeGananananalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadaeaeaeaeaxaxaeaeaeaebKbKdGarfharexarbKbKaebKbKbKfHfIfJfJfJfJdZeaebfKaecmcmfLfMfMfNcmcmaecNchchfOchdkaeakdmdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaleJeKaleMeLeOeNananeTananananananananananananananeUaneVanbEalcedBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaadadaeaeararararararaebKbKdGdGdGdGdGdWgabKcDbKbKbKgbdGdGdGdGdGdGdGbKbKaecIcmcmcmcmcmcmgcaecNchchchchgdaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleHeIalalalalalalalalgeanananancQananananalalcWanalalaweWalalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaeaearargiararaebKbKbKbKbKbKbKbKbKbKaebKbKbKbKbKbKbKbKbKbKbKbKbKaegjcmcmcmcmcmgkglaecNchchaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSalalcWanalaleYeXeYeZeYdwfaananfbalalalalanfkalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaeaegtgtararaebKgubKbKbKbKbKbKbKgvaebKgubKbKbKgubKbKbKbKgubKbKaeaeaegwaeaegwaeaeaeaecDaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalfbanananalcceqeperccdPflananangzandqanananalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaeaeaeaeaxaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegBgBgBgBgBgBgCgDgEgBgBgFaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagGfnfmfpalanancTgKgLalcccccccccceofqananangzanananananalcecfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaiajgNaearaNaNgOaNaNaZaeaaaaaaaeaearararararararararargPgQgPaegRgBgBgBgBgBgBgBgBgBgBgBaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagSanananemanangTgUgValalgWgXgYalalananananalawawawanbEalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaapakakaqaPararararargZaeaaaaaaaaaeaeararararararararararararaegCgBgBhagBhbgBhagBgBgBhcaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrhehfhfhfhgfraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalfyfzalfAanhlhmhnalalaaaaaaalalalfBfBalalgWgYalfDfCalcecBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaasajakaehrhsarhsarhsbpaeaaaaaaaaaaaeaearararararararararararaqgBgBgBgBgBgBgBgBgBaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrfrfEfFfFfFfGfrfraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalgWgXgYalaaaaaaaaaaalalanaoalalaaaaalalalalcedBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaeaeaeaeaeaebjafbjagaeaeaaaaaaaaaaaaaeaeararararararararararaegBgBgBhzgBhagBhagBhAhBhCaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrfGfPfPfQfPfPfFfraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalfBfBalaaaaaaaaalalalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaahFhGhFhGhFaaaaaaaaaaaaaaaaaaaeaearararararhHhHhHhIaehJhKhLgBgBgBgBgBgBaehMaeaeaahFhNhFhNhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrfRfPfPfPfPfSfTfraaaaaaaaaaaaaaaaaahFhNhFhNhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhNhFhGhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhNhFhNhFaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaahRhShRhShRaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaehTaeaeaeaeaeaeaaaahRhShRhShRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrfUfPfPfVfPfPfWfraaaaaaaaaaaaaaaaaahRhShRhShRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRhShRhShRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRhShRhShRaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaahFhXhYhZhFhGhFhGhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajgNaeiaaribaeaeaehFhXhYhZhFhNhFhNhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaafrfrfXfrfrfrfrfrfraaaaaaaaaahFhXhYhZhFhNhFhNhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhNhFhGhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhNhFhNhFhXhYhZhFaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaigihiiiiijijijijijiiiiihigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapakakaqarikaeaeaeaaigiliiiiijijijijijiiiiiligaaaaaaaaaaaaaaaaaaaaaaaaaaaafrfYgffZghggfraaaaaaaaaaaaigiriiiiijijijijijiiiiirigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigisiiiiijijijijijiiiiisigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigitiiiiijijiuijijiiiiitigaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasajakaeamaeaeaeaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaafrgmgnfSfPgofraaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaiBiwijijijijijijijijijixiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaaaaaaiBiwijijijijijijijijijixiBaaaaaaaaaaaaaaaaaaaaaaaaaafrfrgpgffSfPgqfrfraaaaaaaaaaiBiwijijijijijijijijijixiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBiwijijijijijijijijijixiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBiwijijijijijijijijijixiBaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaahFhRhFijijijijixigiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixigiwijijijijhFhRhFaaaaaaaaaaaaaaaafrfrfrfrfrfPgffSfPgrfrfrfrfrfrhFhRhFijijijijixigiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixigiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixigiwijijijijhFhRhFaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaafrgsgxfPfrgyfPfPgAfrfrfPgHfPgIhGhShGijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaiMfPfPfPfrfrgMgJfrfrfrfPfPfPgIhGhShGijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhShNijijijijixiviwijijijijhNhShNaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaahFhRhFijijijijixiBiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixiBiwijijijijhFhRhFaaaaaaaaaaaaaaaafrfriMhdfrfrhhfPhifrfriSgIiSfrhFhRhFijijijijixiBiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixiBiwijijijijhFhRhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhRhFijijijijixiBiwijijijijhFhRhFaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaigiwijijijijijijijijijixigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigiwijijijijijijijijijixigaaaaaaaaaaaaaaaaaaaafrhjfPfPhkfrfPhofPfrfPfPfPhpfraaaaigiwijijijijijijijijijixigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigiwijijijijijijijijijixigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigiwijijijijijijijijijixigaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaafrhqfPfPfPhtfPfPfPhufPfPfPhvfraaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwijijijijijijijijijixivaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaiBihjcjcijijijijijjcjcihiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBiljcjcijijijijijjcjciliBaaaaaaaaaaaaaaaaaaaafrhwfPfPfPhxfPhyfPhDfPfPfPfGfraaaaiBirjcjcijijijijijjcjciriBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBisjcjcijijijijijjcjcisiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBitjcjcijijijijijjcjcitiBaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaahFhXhYhZhFijijijhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFijijijhFhXhYhZhFaaaaaaaaaaaaaaaaaafrfrfrfrfrfrfrfPfPfPfrfrfrfrfrfrfraahFhXhYhZhFijijijhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFijijijhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFijijijhFhXhYhZhFaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaafrhOhEhQhPhUfrhhfPhVfrichWfGfGidfraaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaajqfPfPfPfPfPfrfPfPfPfrfPfPfPfPfGjsaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaajtifiefPfPfPhtfPfPfPhufPfPfPimfGjyaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaajzfPfPfPfPfPhxfPfPfPhDfPfPfPfPfGjBaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaafrfPfPfPfPhVfrinhdinfrioggfPfPfPfraaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaafriphdiyiqizfriAfPiCfriDfrfrjMfrfraaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaigijijijigaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaafriEfPiFfrfrfriGfPiHfrfrfriEfPiIfraaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaivijijijivaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaafriKiJiLfraafrjWjWjWfraafrfPfPfPfraaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiBijijijiBaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaafrjWjWjWfraafrjXjYjZfraafrjWjWjWfraaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFijijijhFaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFhXhYhZhFhFijijijhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFijijijhFhFhXhYhZhFaaaaaaaaaaaaaaaafrjXjYjZfraaaaaaaaaaaaaafrjXjYjZfrhFhXhYhZhFhFijijijhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFijijijhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFijijijhFhFhXhYhZhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijkcijijijijijijijijkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakbijijijijijijijijijijijijijkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakbijijijijkfijijijijijijijijkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakbijijijijiuijijijijijijijijkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakbijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakgijijijijijijijijijijijijijijijkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakgijijijijijijijijijijijijijijijkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakgijijijijijijijijijijijijijijijkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakakgijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijkjhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFkiijijijijijijijijijijijijijijijijijkjhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFkiijijijijijijijijijijijijijijijijijkjhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFkiijijijijijijijijijijijijijijijijijkjhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFkiijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigkkijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkkigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivklijijijijijkmknkokpkmknkoijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkqkrkrkskrkrktijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijhFhFkyhFkzhFhFijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkmknkokpkmknkoijijijijijklivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBkAijijijijkBkCkDkEkpkFkDkGkHijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkqkIkIkIkpkIkIkIktijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijhFhFkMkMhFkMkMhFhFijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkBkCkDkEkpkFkDkGkHijijijijkAiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkmkCkNkOkpkpkpkOkPkGkoijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkqkIkTkIkUkpkIkIkVkIktijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijhFhFhFkMhFhFhFkMhFhFhFijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkmkCkNkOkpkpkpkOkPkGkoijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlalblcldlekplcldlelalbijijijijhFkMkMkMlflglglglglglhlglglglglglfkMkMkMhFijijijijlikIkIkIkTkpkIkIkIkIljijijijijhFlklllmlnlolplqlqlqlqlqlqlqlrlsltlulvlwhFijijijijlxijijlylzlAlBlCijijlxijijijijhFlDlElFlElElGlElHlElIlElDlJlElElKlLlElMhFijijijijhFlNkMkMlOlPlQkMlRlShFijijijijhFkMkMkMlflglglglhlhlhlhlhlglglglfkMkMkMhFijijijijlalblcldlekplcldlelalbijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijkPkEkplTkpkpkplTkpkFkNijijijijlUkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMlUijijijijlikIkUkIkpkplVkIkIkIljijijijijlUlWlWlWlWlWlplqlXlqlqlqlYlqlrlWlWlWlWlWlUijijijijijijlZlzmamamambmcijijijijijijlUlEmdmelJmfmglEmhmilElGmjlFlGlDlElMlJlElUijijijijhFlNkMkMlOlPlQkMhFhFhFijijijijlUkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMlUijijijijkPkEkplTkpkpkplTkpkFkNijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijkpkpkpkpkpmkkpkpkpkpkpijijijijmlkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMmlijijijijlikIkIkpmmmnkpkpkIkIljijijijijmolWlWmpmqmrlplqmsmtlXmtmslqlrmumvmwlWlWmoijijijijijijlZmxmamymamzmcijijijijijijmAkpkpkpkpkpkpkpkpkpkpkpkpkpkpkpkpkpkpkpmAijijijijhFlNkMkMlOlPlQkMlRmBhFijijijijmlkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMkMmlijijijijkpkpkpkpkpmCkpkpkpkpkpijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijkmkHkpkOkpkpkpkOkpkBkoijijijijlUkMkMlglgmDlgmDlglglglglglglglglglgkMkMlUijijijijlikIkIkImEkpkpkIkIkIljijijijijlUlWlWlWlWlWlplqlqlqlqlqlqlqlrlWlWlWlWlWlUijijijijijijlZmFmGmamamHmcijijijijijijlUlElMlGlDlElJlFmIlGmflEmJlJlGlElJlEmKlLlUijijijijhFhFhFkMlOlPlQkMhFhFhFijijijijlUkMkMlglgmDlgmDlglglglglglglglglglgkMkMlUijijijijkmkHkpkOkpkpkpkOkpkBkoijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlalblcldlekplcldlelalbijijijijhFkMkMlgkMkMkMkMkMkMkMkMkMkMkMkMkMmLkMkMhFijijijijlikImMkIkIkpkIkIkIkIljijijijijhFmNmOmPmQmRlplqlqlqlqlqlqlqlrmSmTmUmVmWhFijijijijmXijijmYmFmZmHnaijijmXijijijijhFlJlIlElGnblMlGlLlJlDlJlGncmflEmhlMlDlEhFijijijijhFndlRkMnehFnfkMlRlShFijijijijhFkMkMlgkMkMkMkMkMkMkMkMkMkMkMkMkMmLkMkMhFijijijijlalblcldlekplcldlelalbijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkPngkolTkpkpkplTkmnhkNijijijijnikQkRkSkMnjnjnjnjnjnjnjnjnjnjnjkMkQkRkSniijijijijnkkIkIkImMkpkIkIkIkInlijijijijhFkQkRkShFkQkRkShFlUnmlUhFkQkRkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijhFhFhFkMhFhFhFkMhFhFhFijijijijnikQkRkSkMnjnjnjnjnjnjnjnjnjnjnjkMkQkRkSniijijijijkPngkolTkpkpkplTkmnhkNijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigkkijijijijkFngknkHkpkBknnhkEijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijnkkIkIkIkpkInokInlijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijhFhFkMkMhFkMkMhFhFijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkFngknkHkpkBknnhkEijijijijkkigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivklijijijijijkPkDkNkpkPkDkNijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijnknpnpnqnpnpnlijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijhFhFkyhFkzhFhFijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkPkDkNkpkPkDkNijijijijijklivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBkAijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkAiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnshFkQkRkShFkQntkShFkQkRkShFkQntkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQnvkShFkQkRkShFkQnvkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQnwkShFkQkRkShFkQnwkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQnxkShFkQkRkShFkQnxkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnBnCnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnFijijijijijijijijijijijijijijijnBnCnGnGnGnGnGnHnHnHnInInGnGnGnGnGnGnHnHnGnGnGnEnFijijijijijijijijijijijijijijijnBnClElElElElElElElElElElElElElElElElElElElElEnEnFijijijijijijijijijijijijijijijnBnCnJnJnJnJnJnJnJnJnJnJnJnJnJnJnJnJnJnKnJnJnJnEnFijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnOnCnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnPijijijijijijijijijijijijijnOnCkInInGnQnGnHnInGnHnInHnRnInInInSnTnGnHnHnHnHnGnEnPijijijijijijijijijijijijijnOnClElElEnUlElElElElElElElDlElElElDnVlElElElElElEnEnPijijijijijijijijijijijijijnOnCnJnJnJnKnJnJnJnJnJnJnJnJnJnJnJnJnJnJnKnKnJnJnJnEnPijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFnInYnInGnZoaoaobocodoeodofodocnHnGnIogohoinGnHnGnGhFijijijhFhFlUnXlUhFhFijijijhFlEmKlElEojlElElElDlEojlElElElDlElElElLlEojlElElElEhFijijijhFhFlUnXlUokhFijijijhFnJnJnJolnKnJnJomomonomomnJnJnJnJomomomnJnJolomnJnJhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijooopoqopopopooijijijoonDnDnDnDnDnDnDorororororornDnDnDnDnDnDnDnDnDnDnDnDooijijijookIosoiodotooijijijoonGounGnIovowkInIosnIoakIoxoykIoznGnInTnGoAnGnHnGnGooijijijoooBnSododoCooijijijoolElGlElElFlElElElElElElElElElEojlElEnVlElElElElElEooijijijoooDoDoDoDoDooijijijoonJnJnJnKomomnJonomoEomoFomomnJnJomomnJnJomomomnJnJooijijijoooGoHoIoJoKooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLoMoNoOopopoLijijijoPnDnDnDnDnDorororororororororororornDnDnDnDnDnDnDnDoPijijijoLoaoCoaoQoRoLijijijoSnIoaoToakIkIoUkIoVoWoCkIoXoYoZkIkIkIosnHodnGpanGnGoSijijijoLnInTnGpbnGoLijijijpclElElDlElElEmflElElDnVlEmKnVmflElElElElElElElElElEpcijijijoLoDoDoDoDoDoLijijijpdnJnJolompeomnJnJnJnJnJompfoFnJnJnJomomomomomnKnJnJpdijijijoLpgoGoIoKphoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpiopopopopoppiijijijpinDnDnDorororororororororororororororornDnDnDnDnDnDpiijijijpipjnZpkploRpiijijijpinInInGoaobkIkIoYpmoyodpnodoxoxpokIkIosppodnGnHnGnGpiijijijpikIosnHodnGpiijijijpilElElElElElElEnVlLlElElGlElElElFlElElElElElElElElEpiijijijpioDoDoDoDoDpiijijijpinJnJnKpeomompqnJnJnJnJomomomomnJomomprpsompsnKolnJpiijijijpiptpgpuphptpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFoppvopopophFijijijhFnDnDnDororororororororororororororororornDnDnDnDnDhFijijijhFkInTployodhFijijijhFpwnInInIoToanInIodoApxowkIkIobkIoboapyoaoQoRnGnHnGhFijijijhFpzospAodnGhFijijijhFlFlElElElDlElElElElElElElElElElElElElElEmdojlElElEhFijijijhFoDoDpBoDoDhFijijijhFnJomomomompspqpComomonoEpsomoFompDomonpDomomomnJnJhFijijijhFptptptptpthFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoooppEopopoppFijijijoonDnDnDnDororororororororororororororororornDnDnDnDooijijijoonRnHpGnIodooijijijoonGpHpHnIosoapIoeodpJospKkIoYpLkIkInInZpkploRnGnHohooijijijoooaoCpMoQoRooijijijoolElDlDlElElEmKojlElEpNpOpPpQpRlElElEojmflEojlElElEooijijijoooDoDoDoDoDooijijijoonJomonpqpqpfpqpqoEomomnJnJnJpsomomproFpsompromnJnJooijijijooptptptptptooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijpSpTpTpTopoppSijijijoLnDnDnDnDnDorororororpUpUpUorororororororornDnDnDnDoLijijijpVnIpjnInSpMpVijijijoLnGnGnGnGospWoaoaoaosnIkIoUkIpXpYkIkIpZployodoynGnGoLijijijqanInZpkploRqaijijijoLlElElElElElElElElEpNqbkpqLkpqdpRlElElElElElElElElEoLijijijqeoDoDoDoDoDqeijijijoLnJolompqpCpqpCpspqpqnJnJnJnJnJnJnJomomomoFomomomnJoLijijijqfptptqgptptqfijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpiopopopopoppiijijijpinDnDnDnDnDororororpUpUpUpUpUorororororornDnDnDnDnDpiijijijpioaoaoaqhoypiijijijpinGnGoCqiosnIoBoeoaqjoaqkkIkIockIkInRnHpGnIodqlnGnGpiijijijpikInTplqmodpiijijijpilElEnVojlElEnUojlEqnkpqLqLqLkpqrlElDlEnVlElElGlElEpiijijijpioDoDoDoDoDpiijijijpinJnJompDoFpeomqspqomomomomomomnJnJnJolnJomomnJnJnJpiijijijpiptptqgptptpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFopopopopophFijijijhFnDnDnDnDnDorororororpUpUpUorororororororornDnDnDnDhFijijijhFnInTnGoznIhFijijijhFnGnGqtnGquqvosqwnIqxoaosqyobpzkIqznInInInSqAoBoynGhFijijijhFnRnHpGnIodhFijijijhFlElElLlEojmKlElFlEqBqLqLqLqLqLqrmKlElElElDlEnUlElEhFijijijhFoDoDpBoDoDhFijijijhFnJnJnJqHomomonompComoEnJnJpfqHomomnJnJnJnJomolnJnJhFijijijhFptptqgptpthFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoooppEopopopooijijijoonDnDnDnDnDorororororornDorororororororornDnDnDnDnDooijijijoooXozkIkIoxooijijijoonGoyplnSnInGosowkIkIowoaoaqIkIkIqzoaoaoaoaoyodoyoyooijijijoonInInSnSpMooijijijoolElElElDlElElElElEqnkpqLqLqLkpqrmKlElElElElElElElEooijijijoooDoDoDoDoDooijijijoonJnJnJompqpqompqompDomomnJnJnJnJnJnJnJolnJnJnJnJnJooijijijooptptqgptptooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijpSpTpTpTopoppSijijijoLnDnDnDnDnDorororororornDorororororororornDnDnDnDnDoLijijijpVkIqMkIoYnIpVijijijoLoynGqNplplpmosoUpzkIobodosodpzqOplnIpWnGoznIocnGoyoLijijijqaoaoaqPoaoyqaijijijoLlElElElElElLlEmflDqQqRkpkpkpqSqTlElElElEojlElDlElEoLijijijqeoDoDoDoDoDqeijijijoLnJolnJpfpCqsomompqpqpsompromonomomnJolnJnJolnJnJnJoLijijijqfptptptptptqfijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpiopopopopoppiijijijpinDnDnDorororororororornDnDororororororornDnDnDnDnDpiijijijpikIoYkInInTpiijijijpioyqUpknIplososqkqVodkIoekIqAkIkIkIoXozkIkIoxognGoypiijijijpinInTnGoznIpiijijijpilEmfmflElElElElEmdlEqQqWkpqXqYlElEmKojlElElElLlElEpiijijijpioDoDoDoDoDpiijijijpinJnJnKomompCpqomqspqpCpqompqoEprompfolnJnJnJnJomnJpiijijijpiptptptptptpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFopqZrarbophFijijijhFnDnDnDororororororornDnDnDororororororornDnDnDnDnDhFijijijhFododrcnToChFijijijhFoynGnIpHrdososplplodkIoXobplplkIowkIkIkIkIpZrenGoyhFijijijhFoXozkIkIoxhFijijijhFlElElElDmKlElElElElElErfkpqrlElElElElElElElEmdlElEhFijijijhFoDoDpBoDoDhFijijijhFnJnJolnJomomompqpqompspqpComomoFnJomnJnJomompeomnJhFijijijhFptptptptpthFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoorgrhrirjrkooijijijoonDnDnDororororororornDnDnDnDorororororornDnDnDnDnDooijijijoorlosodrmosooijijijoonGnInZplospWosrnoXkIrooAnGodococoekIkIobnInToyoyoyooijijijookIkIkIkInTooijijijoolElEojlElElElEnVmKlElEqnkpqrlDlDojlElElElEnVlElElEooijijijoooDoDoDoDoDooijijijoonJnJnKnJpqompComomnJoEompsomnJnJnJnJnJomomonomomnJooijijijooptrprqrrptooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLrgrsrtrurkoLijijijoPnDnDnDorornDnDorornDnDnDnDnDororororornDnDnDnDnDnDoPijijijoLoeoZoeoeoxoLijijijoSrvnGoyplqOplrwkIpnnGqvodpboQodoAodododrcnToCoRosnGoSijijijoLpzkIpznInToLijijijpclLlElElEmdlEnUlElGlEmKqnkprxlElElElElEnUnVnVojlElEpcijijijoLoDoDoDoDoDoLijijijpdnJnJnKompqomomnJomnJnJomomnJnJnJpeomompeomomolnJnJpdijijijoLrpryoIrzrroLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpirAopopoprkpiijijijpinDnDnDnDnDnDnDornDnDnDnDnDnDnDnDornDnDnDnDnDnDnDnDpiijijijpiododododoypiijijijpinGnGnGpbodpGqzpKkInZnIososnIoAodpwrlosofrmosrBosnGpiijijijpiododoYnToCpiijijijpilElElEnVlEnVmKmdlEojlEqnkpqrlElElFmdlElElGlElDlElEpiijijijpioDoDoDoDoDpiijijijpinJnJnKnJompenJnJnJnJnJonomnKnKomomnKnJomonomnKnJnJpiijijijpiryrCoIoHrzpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFpHnGpwnInIoxoRnGkIplplrDkIkIpzododoeoZoeoeoxnGnGnGhFijijijhFhFlUnXlUhFhFijijijhFlDlElFlElElEojlElElElEqnkpqrlDlElEojmfojojlElElElEhFijijijhFoklUnXlUhFhFijijijhFnJnJnJnJnJomnJnKolnJnJoFomomomomnJnJomomnKnJnJnJnJhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijijijijijijijijijijnOnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnBnPijijijijijijijijijijijijijnOnFnGnGoxnGrEogpWrFoxrGozkInHnHnHnHofodododoynGodnBnPijijijijijijijijijijijijijnOnFlElElElEmflLlElElElErHkpqrlElElElElElElElElElEnBnPijijijijijijijijijijijijijnOnFnJnJolnKnJnKnJnJnJomomomomomnJnJnJomolnJnJnJnJnBnPijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijnEnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDrInCijijijijijijijijijijijijijijijnEnFnGnGnGnGnGnInInInInGnGnGnGnGnSnInGrJodododrInCijijijijijijijijijijijijijijijnEnFlElElElElElElElElEqnkpqrlElElDlElEnUlElElErInCijijijijijijijijijijijijijijijnEnFnJnJnJnJnJnJnJompeomomomoFomnJnJnJnJnJnJnJrInCijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQntkShFlUnXlUhFkQntkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQnvkShFlUnXlUhFkQnvkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQnwkShFlUnXlUhFkQnwkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQnxkShFlUnXlUhFkQnxkShFkQkRkShFrKijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQrLkShFkQkRkShFkQrLkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQrMkShFkQkRkShFkQrMkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQrNkShFkQkRkShFkQrNkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQrOkShFkQkRkShFkQrOkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFrSrSrSrSrSrSrSrSrSrTrSrSrSrSrSrSrSrSrShFijijijijlxijijlyrPrQrRlCijijlxijijijijhFlErUlElElElElElErUlEnUnVnVojlElElElElEhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFolnKnJnJomomonomomomnJnJnJomomomnJnJnJhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijlZrPrWrXrYrRmcijijijijijijlUhShSrZhSsasbhSscsdscsehShSsfsghShSsbshlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUlDmKlElElEojlElEnUojlElElElElElElDlElElUijijijijijijlZrPrWrXrYrRmcijijijijijijlUrVsisjrVskrVsislrVrVrVrVsjrVskrVslsirVlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUnKomomnJonsmoEomoFomomnJnJsmomnJnJomomlUijijijijijijlZrPrXrXrXrRmcijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijlZsnrXrXrXsomcijijijijijijnXspspspspspspspspspspspspspspspspspspspnXijijijijijijlZsnrXrXrXsomcijijijijijijnXlElElElEnVlEojmKlElFlElFmdlElDlElElEmKnXijijijijijijlZsnrXrXrXsomcijijijijijijnXrVrVrVsqrVrVrVsqrVrVsqrVrVsirVsisjrVrVnXijijijijijijlZsnrXrXrXsomcijijijijijijnXompeomnJnJnJnJnJomsmoFnJnJnJomomomomomnXijijijijijijlZsnrXrXrXsomcijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijlZsrssrXstsumcijijijijijijlUhShSsvsbhSscscswsxsyscscsbhShShSszsAsBlUijijijijijijlZsrssrXstsumcijijijijijijlUlEmdlEnUlElDlElErUlElElEojmflElDlElElElUijijijijijijlZsrssrXstsumcijijijijijijlUrVrVslsjrVrVrVrVrVrVskrVrVrVsqrVrVrVrVlUijijijijijijlZsrssrXstsumcijijijijijijlUpeomsmpqnJnJnJomomomomomnJomomprpsomomlUijijijijijijlZsrrXrXrXsumcijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijmXijijmYsrsCsunaijijmXijijijijhFsDsDsDsDsDsDsDsDsDsDsDsDsDsDsDsDsDsDsDhFijijijijmXijijmYsrsCsunaijijmXijijijijhFnVlEnVmKmdlElElLlEmflElElElElErUlEmKojhFijijijijmXijijmYsrsCsunaijijmXijijijijhFrVsjrVrVsirVrVrVrVrVrVsirVslrVsirVrVsjhFijijijijmXijijmYsrsCsunaijijmXijijijijhFomompspqpComomonoEpsomoFompDomonpDomnJhFijijijijmXijijmYsrsCsunaijijmXijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQrLkShFkQkRkShFkQrLkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQrMkShFkQkRkShFkQrMkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQrNkShFkQkRkShFkQrNkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQrOkShFkQkRkShFkQrOkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnshFkQkRkShFkQsEkShFkQkRkShFkQsEkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQsFkShFkQkRkShFkQsFkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQsGkShFkQkRkShFkQsGkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQsHkShFkQkRkShFkQsHkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnBnCsIsJsKsKsLsIsIsIsJsKsLsIsIsMsKsKsKsLsIsJsKnEnFijijijijijijijijijijijijijijijnBnCnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnFijijijijijijijijijijijijijijijnBnCrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVnEnFijijijijijijijijijijijijijijijnBnCsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNnEnFijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnOnCsIsOsMsKsKsLsIsIsIsJsKsPsOsJsKsKsQsRsIsOsJsKsLnEnPijijijijijijijijijijijijijnOnCnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnPijijijijijijijijijijijijijnOnCrVrVrVsirVrVrVrVrVsSrVrVrVrVrVrVrVrVrVrVrVrVrVnEnPijijijijijijijijijijijijijnOnCsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNnEnPijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFsIsIsMsKsKsKsTsIsIsOsJsKsKsLsJsKsKsPsIsOsIsMsKsLsOhFijijijhFhFlUnXlUokhFijijijhFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFrVrVrVrVrVrVrVrVslrVrVrVsUrVrVrVrVrVrVrVrVsirVrVrVhFijijijhFhFlUnXlUhFhFijijijhFsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoooToakIkIoUooijijijoosIsJsKsKsVsKsLsIsWsIsIsXsKsLsIsXsKsKsPsIsYsKsKsLsIooijijijoosZsZtasZsZooijijijoonDnDnDnDnDnDnDorororororornDnDnDnDnDnDnDnDnDnDnDnDooijijijoolDlElElEmfooijijijoorVrVrVrVslrVrVrVsirVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVooijijijoorVtbrVrVrVooijijijoosNsNsNsNnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNooijijijoosNsNsNsNsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLnGoaobkIkIoLijijijtcsIsYsKsQsJsKsPsIsIsIsIsJsKsLsOtdsXsKsKsLsJsKsQsOsItcijijijoLtatatatataoLijijijtenDnDnDnDnDorororororororororororornDnDnDnDnDnDnDnDteijijijoLlElEtflElEoLijijijtgrVrVsirVrVrVrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVsSrVrVtgijijijoLthrVsisksioLijijijtisNsNsNsNnDtjtjsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNtiijijijoLsNsNsNsNsNoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpinItkoToanIpiijijijpisIsJsKsLsJsKsKtltmsIsIsJsKsTsIsIsMsKsKsPsMsKsLsIsIpiijijijpitnsZtasZsZpiijijijpinDnDnDorororororororororororororororornDnDnDnDnDnDpiijijijpilElElDlElEpiijijijpirVrVrVrVrVsUrVrVrVslsjrVrVrVrVslrVrVrVslrVrVrVrVrVpiijijijpirVtorVrVthpiijijijpisNsNsNtjnDnDtpsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNpiijijijpisNsNsNsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFpHnIosoapIhFijijijhFsIsJsKsLsOsXsKsKsKsLsIsYsKsLsIsYsKsKsKsKsKsKsLsIsIhFijijijhFtatatatatahFijijijhFnDnDnDororororororororororororororororornDnDnDnDnDhFijijijhFlDlElElEmKhFijijijhFrVrVrVrVrVrVsirVrVrVrVrVrVrVrVrVrVrVrVrVskrVrVsirVhFijijijhFrVrVthtqrVhFijijijhFsNsNnDnDtjnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNhFijijijhFsNsNsNsNsNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoonGnGospWoaooijijijoosIsJsKsPsIsIsRsXsKsLsIsMsKsLtmsMsKsQsXsKsKsQsIsOsIooijijijoosZsZtasZsZooijijijoonDnDnDnDororororororororororororororororornDnDnDnDooijijijoolElElEtrlEooijijijoorVrVrVrVrVrVsjrVrVrVrVrVrVrVrVrVtsrVsUrVrVrVrVrVrVooijijijoorVtttutvrVooijijijoosNsNsNnDnDtjsNsNsNsNsNsNsNnDnDnDnDnDsNsNsNsNsNsNsNooijijijoosNsNtwsNsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijtxoCqiosnIoBtxijijijoLsOsJsKsKsLsOsIsMsKsLsJsKsKtysKsKsKsLtzsKsKsLsIsIsIoLijijijtAtatatatatatAijijijoLnDnDnDnDnDororororortBtCtDorororororororornDnDnDnDoLijijijtEnVojlElEnUtEijijijoLrVrVrVslrVrVrVrVrVrVskrVrVrVrVrVrVsSrVrVrVrVrVrVrVoLijijijtFrVtGnJtHrVtFijijijoLsNsNsNsNnDnDtjsNsNsNsNsNnDtjnDnDtjnDnDsNsNsNsNsNsNoLijijijtIsNsNsNsNsNtIijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpiqtnGquqvospiijijijpisIsItJsKtKsIsJsKsKsLsJsKsQsJsKsQsRsIsJsKsKsLsOsIsOpiijijijpisZsZtatnsZpiijijijpinDnDnDnDnDorororortLtMtNtOtPorororororornDnDnDnDnDpiijijijpilLlEojmKlEpiijijijpirVsjrVrVrVsUrVrVsirVrVrVrVrVslrVrVrVrVsirVrVskrVrVpiijijijpirVtGnJtHrVpiijijijpisNsNsNsNsNsNsNsNsNsNsNsNnDnDtjtjnDnDsNsNsNsNsNsNsNpiijijijpisNtwsNsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFplnSnInGoshFijijijhFsIsJsKsKsLtmsMsKsQsItQsKsTsJsKsPsIsIsIsXsKsPsIsIsIhFijijijhFtatatRtatahFijijijhFnDnDnDnDnDororororortStTtTorororororororornDnDnDnDhFijijijhFlElDtUlElEhFijijijhFrVrVrVrVrVrVrVrVrVrVtsrVrVsSsjrVrVrVrVrVsUrVrVrVrVhFijijijhFrVtGtVtHrVhFijijijhFsNsNsNsNsNsNsNsNsNsNsNsNnDnDnDtWnDsNsNsNsNsNsNsNsNhFijijijhFsNsNsNsNsNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijooqNplplpmosooijijijoosIsJsKsKtysKsKsKsLsIsJsKsLsJsKsKsPtXsIsJsKsKsLsIsIooijijijoosZtntYsZsZooijijijoonDnDnDnDnDorororororortZorororororororornDnDnDnDnDooijijijootflElElLlEooijijijoorVsUrVrVrVsirVslrVrVsUrVrVrVrVrVrVrVrVrVsUrVrVrVrVooijijijoorVtGnJtHrVooijijijoosNsNsNsNsNsNsNsNsNsNsNsNsNtjnDtjnDsNsNsNsNsNsNsNsNooijijijoosNsNsNsNsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijtxpknIpluaostxijijijoLsIsIsXsKubsKsQsRsIsOsJsKsPsIsXsKsKsLsOsItJsKsLsIsOoLijijijtAtatatatatatAijijijoLnDnDnDnDnDororororororucorororororororornDnDnDnDnDoLijijijtEmflElElElEtEijijijoLrVsUrVrVrVrVrVrVrVrVrVrVrVrVsUrVskrVrVrVrVrVrVrVrVoLijijijtFrVtGnJtHrVtFijijijoLsNsNsNsNsNsNsNsNsNsNsNsNsNnDnDnDnDsNsNsNsNsNsNsNsNoLijijijtIsNsNsNsNsNtIijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpinIpHrdosospiijijijpisIsIsJsKsKsKsLsIsIsIsJsKsKsLsOsXsKsPsIsJsKsKsTsIsIpiijijijpisZsZtasZsZpiijijijpinDnDnDorororororororornDudororororororornDnDnDnDnDpiijijijpilElDmKlElEpiijijijpirVrVrVskrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVslrVrVrVrVrVpiijijijpirVueufugrVpiijijijpisNnDnDsNnDnDsNsNnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNpiijijijpisNsNsNsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFnZplospWoshFijijijhFsOsIsJsKsKsQsItXsItdsIsXsKsLsIsJsKsKsPsJsKuhsIsIsIhFijijijhFtatatatatahFijijijhFnDnDnDorororororororuinDnDororororororornDnDnDnDnDhFijijijhFojlElEtrlEhFijijijhFrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVrVrVrVsUrVrVrVrVrVhFijijijhFujrVrVujrVhFijijijhFsNnDnDnDtjtWnDnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNhFijijijhFsNtwsNtwsNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoooyplqOplrwooijijijoosIsIsJsKsKsLsIsIsIsIsIsMsKsLsIsIsXsKsKubsKsKsLsIsIooijijijoosZsZtasZsZooijijijoonDnDnDororororororornDnDnDnDorororororornDnDnDnDnDooijijijoolElEmdlEnUooijijijoorVrVrVrVrVrVrVrVrVslrVrVslrVrVskrVrVrVrVsSrVsirVrVooijijijoorVrVukrVtbooijijijoosNtjnDnDnDnDtjnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNooijijijoosNsNsNsNsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLnGpbodpGqzoLijijijtcsIsOtdsXsKsLsIsIsIsIsMsKsKsLtdsIsIsXsKsKsKsKsLsOsItcijijijoLtatatatataoLijijijtenDnDnDorornDnDorornDnDnDnDnDororororornDnDnDnDnDnDteijijijoLlEnVlEnVmKoLijijijtgrVrVrVrVslrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVtgijijijoLrVskrVrVrVoLijijijtisNnDnDtjnDnDnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNtiijijijoLsNsNsNsNsNoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpipwnInIoxoRpiijijijpisIsIsIsMsKsLsOsIsIsMsKsKsQsIsIsIsOsJsKsKsKsKsLsIsIpiijijijpisZsZtasZtnpiijijijpinDnDnDnDnDnDnDornDnDnDnDnDnDnDnDornDnDnDnDnDnDnDnDpiijijijpilFlElElEojpiijijijpirVrVsirVrVrVsSrVrVsjrVrVsirVrVrVskrVrVrVrVrVskrVrVpiijijijpiukrVrVujrVpiijijijpisNsNnDnDnDsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNpiijijijpisNsNsNsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFsIsIsJsKsKsLsIsIsMsKsKsQsIsIsIsIsIsIsXsKsKuhsIsIsOhFijijijhFoklUnXlUhFhFijijijhFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVsUrVhFijijijhFhFlUnXlUhFhFijijijhFsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijijijijijijijijijijnOnFsIsJsKsQsIsIsJsKsKsQsIsIsOsIsIulsIsIsXsKsKsLsInBnPijijijijijijijijijijijijijnOnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnBnPijijijijijijijijijijijijijnOnFrVrVrVrVsUrVrVrVrVrVrVrVrVsirVrVrVslrVsirVrVrVnBnPijijijijijijijijijijijijijnOnFsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNnBnPijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijnEnFsJsKsLsIsIsJsKsQsIsIsIsIsOsIsIsIsIsIsXsKsLrInCijijijijijijijijijijijijijijijnEnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDrInCijijijijijijijijijijijijijijijnEnFrVrVrVrVrVrVrVrVslrVrVrVrVrVrVrVrVrVrVrVrVrInCijijijijijijijijijijijijijijijnEnFsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNsNrInCijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQsEkShFlUnXlUokkQsEkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQsFkShFlUnXlUhFkQsFkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQsGkShFlUnXlUhFkQsGkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQsHkShFlUnXlUhFkQsHkShFkQkRkShFrKijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQumkShFkQkRkShFkQumkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQunkShFkQkRkShFkQunkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQuokShFkQkRkShFkQuokShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQupkShFkQkRkShFkQupkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFnDtjtjtjnDnDnDnDtjnDtjnDnDnDnDnDnDnDnDhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFuqurusutususususurususususuuususuqusushFijijijijlxijijlyrPrQrRlCijijlxijijijijhFrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVsUrVrVrVhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFuvuvuvuvuvuvuwuvuvuvuvuvuvuvuvuvuvuvuvhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijlZrPrWrXrYrRmcijijijijijijlUnDnDnDnDuxtjuytjtjnDtjnDnDtjnDtjtjnDtjlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUususuuusuzuqusuzusususuququAutusususuzlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUrVsirVsUrVrVrVsSrVuBrVrVrVrVrVrVrVrVrVlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUuvuCuvuvuvuvuvuvuvuvuCuvuvuvuwuvuvuvuClUijijijijijijlZrPrXrXrXrRmcijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijlZsnrXrXrXsomcijijijijijijnXtjtjnDnDnDtjtjtjuDnDuxtjuytjuEtjtjtjnDnXijijijijijijlZsnrXrXrXsomcijijijijijijnXusuFusuGusuHuzurusuzuIususususutuGuzuznXijijijijijijlZsnrXrXrXsomcijijijijijijnXrVrVrVuBrVslrVrVrVsUrVrVrVuJrVrVrVuKsinXijijijijijijlZsnrXrXrXsomcijijijijijijnXuvuvuvuvuCuvuvuvuLuvuvuvuvuvuvuvuvuvuvnXijijijijijijlZsnrXrXrXsomcijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijlZsrssrXstsumcijijijijijijlUnDtjnDnDuytjnDtjnDnDtjtjuMnDnDtjnDtjnDlUijijijijijijlZsrssrXstsumcijijijijijijlUuzusuzuruFutuAususuqususuuuNuFusuuuHuslUijijijijijijlZsrssrXstsumcijijijijijijlUrVslrVrVrVsirVuBrVrVuJrVrVuBrVsUrVrVrVlUijijijijijijlZsrssrXstsumcijijijijijijlUuvuvuwuvuvuvuvuvuvuvuvuOuvuvuCuvuvuvuvlUijijijijijijlZsrrXrXrXsumcijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijmXijijmYsrsCsunaijijmXijijijijhFnDtjnDnDtjtjnDtjtjnDtjnDnDnDnDtjuPnDnDhFijijijijmXijijmYsrsCsunaijijmXijijijijhFusuqusuAusususuuusususuqususuAuQuAuAushFijijijijmXijijmYsrsCsunaijijmXijijijijhFrVrVrVrVrVrVrVrVrVsSrVrVrVrVrVrVrVrVrVhFijijijijmXijijmYsrsCsunaijijmXijijijijhFuvuvuvuvuvuvuvuvuCuvuvuvuvuvuvuvuvuvuvhFijijijijmXijijmYsrsCsunaijijmXijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQumkShFkQkRkShFkQumkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQunkShFkQkRkShFkQunkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQuokShFkQkRkShFkQuokShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQupkShFkQkRkShFkQupkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnshFkQkRkShFkQuRkShFkQkRkShFkQuRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQuSkShFkQkRkShFkQuSkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQuTkShFkQkRkShFkQuTkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQuUkShFkQkRkShFkQuUkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnBnCnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnFijijijijijijijijijijijijijijijnBnClElElElElElElElElElElElElElElElElElElElElEnEnFijijijijijijijijijijijijijijijnBnCrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVnEnFijijijijijijijijijijijijijijijnBnCsIsJsKsKsLsIsIsIsJsKsLsIsIsMsKsKsKsLsIsJsKnEnFijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnOnCnDnDnDnDnDuVnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnEnPijijijijijijijijijijijijijnOnClElElEnUlElElElElElElElDlElElElDnVlElElElElElEnEnPijijijijijijijijijijijijijnOnCrVrVrVsirVrVrVrVrVsSrVrVrVrVrVrVrVrVrVrVrVrVrVnEnPijijijijijijijijijijijijijnOnCsIsOsMsKsKsLsIsIsIsJsKsPsOsJsKsKsQsRsIsOsJsKsLnEnPijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFnDnDnDnDnDnDnDnDnDnDuVnDnDtjnDuxnDnDnDnDnDnDnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFlEmKlElEojlElElElDlEojlElElElDlElElElLlEojlElElElEhFijijijhFhFlUnXlUhFhFijijijhFrVrVrVrVrVrVrVrVslrVrVrVsUrVrVrVuJrVrVrVuKsirVrVrVhFijijijhFhFlUnXlUhFhFijijijhFsIsIsMsKsKsKsTsIsIsOsJsKsKsLsJsKsKsPsIsOsIsMsKsLsOhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijootjtjnDtjtjooijijijoonDnDnDnDtjuWtjnDnDnDnDtjnDtjnDnDnDnDnDnDnDtjnDnDnDooijijijootjtjnDnDtjooijijijoolElGlElElFlElElElElElElElElElEojlElEnVlEuXlElElElEooijijijoouYlElElEuYooijijijoorVrVrVrVslrVrVrVsirVrVrVrVuJrVrVrVrVrVrVrVrVrVrVrVooijijijoorVrVrVrVrVooijijijoosIsJsKsKsVsKsLsIsOsIsIsXsKsLsIsXsKsKsPsIsYsKsKsLsIooijijijoonDnDnDnDnDooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLuZuVtjtjvaoLijijijvbnDnDnDnDnDnDnDuxtjtjtjtjnDtjnDnDtjnDtjtjnDnDtjnDnDvbijijijoLnDnDnDtjnDoLijijijvclElElDlEuXlEmflElElDnVlEmKnVmflElElElElElElElElElEvcijijijoLuYlElElEuYoLijijijvdrVrVsirVrVrVrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVsSrVrVvdijijijoLsirVrVrVsioLijijijvesIsYsKsQsJsKsPsIsIvfsIsJsKsLsOsIsXsKsKsLsJsKsQsOsIveijijijoLvgnDnDnDnDvhijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpitjnDtjuVtjpiijijijpinDuPnDtjtjnDnDnDtjtjtjnDnDuxtjtjtjuEtjtjtjtjnDnDnDpiijijijpitjtjnDnDtjpiijijijpilElElElElElElEnVlLlElElGlElElElFlElElElElElElElElEpiijijijpiuYlElElEuYpiijijijpirVrVrVrVrVsUrVrVrVslsjrVrVrVrVuKrVrVrVslrVrVrVrVrVpiijijijpirVuKrVsUrVpiijijijpisIsJsKsLsJsKsKsPtmsIsIsJsKsTsIsIsMsKsKsPsMsKsLsIsIpiijijijpinDnDnDsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFuxnDuZtjnDhFijijijhFnDnDnDnDtjnDnDtjtjnDtjnDnDtjtjuMnDnDtjnDtjnDnDnDnDhFijijijhFtjtjtjtjnDhFijijijhFlFlElElElDlElElElElElElElElElElElElElElEmdojlElElEhFijijijhFlElElElElEhFijijijhFrVrVrVrVuKrVsirVrVrVrVrVrVuKrVrVrVrVrVrVskrVuKsirVhFijijijhFrVrVrVslsihFijijijhFsIsJsKsLsOsXsKsKsKsLsIsYsKsLvisYsKsKsKsKsKsKsLsIsIhFijijijhFnDnDsNsNsNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijootjtjtjtjnDooijijijoonDuxnDnDtjnDnDtjtjnDtjtjnDtjnDvanDnDtjuPnDnDnDnDnDooijijijootjnDtjvjnDooijijijoolElDlDlElElEmKojlElEpNpOpPpQpRlElElEojmflEojlElElEooijijijoouYlEvklEuYooijijijoorVrVrVrVrVrVsjuJrVrVrVrVrVrVrVrVrVrVsUrVrVrVrVrVrVooijijijoorVrVrVvlsjooijijijoosIsJsKsPsIsIsRsXsKsLsIsMsKsLtmsMsKsQsXsKsKsQsIsOsIooijijijoosNsNsNsNsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijvmnDtjnDnDtjvmijijijoLnDnDnDuEtjnDtjtjvnnDtjtjnDtjnDtjtjtjnDtjnDnDnDnDnDoLijijijvotjuPvjnDnDvoijijijoLlElElElElElElElElEpNqbvpvpvpqdpRlElElElElElElElElEoLijijijvquYlEvklEuYvqijijijoLrVrVrVuJrVrVrVrVrVrVskrVrVrVrVrVrVuJrVrVrVrVrVrVrVoLijijijvrrVslrVrVrVvrijijijoLsOsJsKsKsLsOsIsMsKsLsJsKsKtysKsKsKsLsJsKsKsLsIsIsIoLijijijvssNsNnDsNsNvsijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpinDtjtjnDuVpiijijijpinDnDnDtjtjtjtjnDtjtjtjnDnDvttjtjtjnDnDtjtjnDnDnDnDpiijijijpinDtjvjnDnDpiijijijpilElEnVojlElEnUojlEqnvpvpvpvpvpqrlElDlEnVlElElGlElEpiijijijpiuYlEvklEuYpiijijijpirVsjrVrVrVsUrVrVsirVrVrVrVrVslrVrVrVrVsirVrVskrVrVpiijijijpisirVsjsUrVpiijijijpisIsItJsKsLsIsJsKsKsLsJsKsQsJsKsQsRsIsJsKsKsLsOsIsOpiijijijpisNnDvunDsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFtjvvtjnDtjhFijijijhFnDnDtjtjtjnDtjnDtjtjnDnDnDtjtjtjnDnDtjtjnDtjnDnDnDhFijijijhFnDtjvwnDnDhFijijijhFlElElLlEojmKlElFlEqBvpvpvpvpvpqrmKlElElElDlEnUlElEhFijijijhFlElEvklElEhFijijijhFrVrVrVrVrVrVrVrVrVrVuJrVrVsSsjrVrVrVrVrVsUrVrVrVrVhFijijijhFrVrVvlskrVhFijijijhFsIsJsKsKsLtmsMsKsQsIsJsKsTsJsKsPsIsIvfsXsKsPsIsIsIhFijijijhFsNnDnDnDsNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijootjtjnDuEtjooijijijoonDnDuVtjnDnDtjtjtjtjtjtjtjtjnDvttjtjnDnDnDtjtjnDnDooijijijootjtjvjtjnDooijijijoolElElElDlElElElElEqnvpvpvxvpvpqrmKlElElElElElElElEooijijijoouYlEvklEuYooijijijoorVsUrVuKrVsirVslrVvyvyvyvyuKrVrVrVuKrVrVsUrVuJrVrVooijijijoorVsirVsirVooijijijoosIsJsKsKtysKsKsKsLvisJsKsLsJsKsKsPsIsIsJsKsKsLsIsIooijijijoosNnDvunDsNooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijvmvvnDtjtjnDvmijijijoLnDnDnDtjtjnDtjuPnDtjnDnDtjtjtjuVtjtjnDnDtjnDuVnDnDoLijijijvonDnDvjtjtjvoijijijoLlElElElElElLlEmflDqQqRvpvzvpqSqTlElElElEojlElDlElEoLijijijvquYlEvklEuYvqijijijoLrVsUrVrVrVrVrVrVrVvyvyvyvyrVsUrVskrVrVrVrVrVrVrVrVoLijijijvrrVrVrVrVrVvrijijijoLsIsIsXsKubsKsQsRsIsOsJsKsPsIsXsKsKsLsOsItJsKsLsIsOoLijijijvssNsNnDsNsNvsijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpitjtjnDtjuPpiijijijpinDnDnDtjuxnDtjtjnDtjtjnDtjtjnDtjuWnDnDnDtjnDnDnDnDpiijijijpinDnDtjnDuVpiijijijpilEmfmflElElElElEmdlEqQqWkpqXqYlElEmKojlElElElLlElEpiijijijpiuYlElElEuYpiijijijpirVrVrVskrVrVrVrVrVvyvyvyvyrVrVrVrVrVrVslrVrVrVrVrVpiijijijpirVskrVrVrVpiijijijpisIsIsJsKsKsKsLsIsIsIsJsKsKsLsOsXsKsPsIsJsKsKsTsIsIpiijijijpisNsNsNsNsNpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFtjuxnDtjtjhFijijijhFnDuxnDtjtjnDnDtjtjtjtjnDtjtjnDtjtjtjtjtjtjnDtjnDnDhFijijijhFnDnDtjnDnDhFijijijhFlElElElDmKlElElElElElErfkpqrlElElElElElElElEmdlElEhFijijijhFlElElElElEhFijijijhFrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVrVrVrVsUrVrVrVrVrVhFijijijhFrVrVrVrVsjhFijijijhFsOsIsJsKsKsQsIsIsIsIsIsXsKsLsIsJsKsKsPsJsKuhsIsIsIhFijijijhFsNsNsNvusNhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijootjtjnDuVtjooijijijoonDnDnDtjtjtjtjtjtjtjnDnDtjnDnDtjtjnDnDtjnDuxtjnDnDooijijijootjtjtjnDtjooijijijoolElEojlElElElEnVmKlElEqnkpqrlDlDojlElElElEnVlElElEooijijijoouYlElElEuYooijijijoorVrVrVrVrVrVrVrVrVslrVrVslrVrVskrVrVrVrVsSrVsirVrVooijijijoorVrVslrVrVooijijijoosIsIsJsKsKsLsIsIsOsIsIsMsKsLsIsIsXsKsKubsKsKsLsIsIooijijijoosNvgnDnDnDooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLtjuWtjtjtjoLijijijvbnDnDnDtjuVtjuWtjtjnDtjtjnDtjtjtjtjnDnDuVnDnDnDtjnDvbijijijoLnDtjnDuxtjoLijijijvclLlElElEmdlEnUlElGlEmKqnkprxlElElElElEnUnVnVojlElEvcijijijoLuYlElElEuYoLijijijvdrVrVrVrVuKrVrVrVrVrVrVrVrVrVrVrVrVrVrVuJrVrVrVrVrVvdijijijoLrVrVrVrVrVoLijijijvesIsOsIsXsKsLvfsIsIsIsMsKsKsLsIsIsIsXsKsKsKsKsLsOsIveijijijoLnDnDnDnDnDoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpitjuVnDtjtjpiijijijpinDnDnDtjtjtjtjnDtjnDnDtjtjtjtjuEtjnDnDtjnDtjnDnDnDpiijijijpinDuVnDnDnDpiijijijpilElElEnVlEnVmKmdlEojlEqnkpqruXlElFmdlElElGlElDlElEpiijijijpiuYlElElEuYpiijijijpirVrVsirVrVrVsSrVrVsjrVrVsirVrVrVskrVrVrVrVrVskrVrVpiijijijpisirVrVrVsSpiijijijpisIsIsIsMsKsLsOsIsIsMsKsKsQsIsIsIsOsJsKsKsKsKsLsIsIpiijijijpinDnDnDnDnDpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFnDnDnDnDtjnDnDnDnDuxnDuPtjtjnDnDnDnDtjtjnDtjnDnDnDhFijijijhFhFlUnXlUhFhFijijijhFlDlElFlElElEojlElElElEqnkpqrlDlElEojmfojojlElElElEhFijijijhFhFlUnXlUvAhFijijijhFrVrVrVrVrVuKrVrVuJrVrVrVuKrVrVrVrVrVrVrVrVrVrVsUrVhFijijijhFhFlUnXlUhFhFijijijhFsIsIsJsKsKsLsIsIsMsKsKsQsIsIsIvfsIsIsXsKsKuhsIsIsOhFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijijijijijijijijijijnOnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDtjnDnDnDnDnDnBnPijijijijijijijijijijijijijnOnFlElElElEmflLlElElElErHkpqrlElElElElElElElElElEnBnPijijijijijijijijijijijijijnOnFrVrVrVrVsUrVrVrVrVrVrVrVrVsiuKrVrVslrVsirVrVrVnBnPijijijijijijijijijijijijijnOnFsIsJsKsQsIsIsJsKsKsQsIsIsOsIsIsOsIsIsXsKsKsLsInBnPijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijnEnFnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDnDrInCijijijijijijijijijijijijijijijnEnFlElElElElElElElElEqnkpqrlElElDlElEnUlElElErInCijijijijijijijijijijijijijijijnEnFrVrVrVrVrVrVrVrVslrVrVrVrVrVrVrVrVrVrVrVrVrInCijijijijijijijijijijijijijijijnEnFsJsKsLsIsIsJsKsQsIsIsIsIsOsIsIsIsIsIsXsKsLrInCijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQuRkShFlUnXlUhFkQuRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQuSkShFlUnXlUhFkQuSkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQuTkShFlUnXlUhFkQuTkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQuUkShFlUnXlUokkQuUkShFkQkRkShFrKijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQvBkShFkQkRkShFkQvBkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQvCkShFkQkRkShFkQvCkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQvDkShFkQkRkShFkQvDkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijvEhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFospmvFososvGosvFvHvIvFnIvJvKnIvFnIvFoyhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFlGlElElElEvLmdlElEojlEmflElElEmKojmflEhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFrVrVrVrVsjrVsirVrVrVrVrVrVrVrVrVrVrVrVhFijijijijlxijijlyrPrQrRlCijijlxijijijvEhFlElElElElElElElElElElElElElElElElElElEhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijlZrPrWrXrYrRmcijijijijijijlUosplvMvFosvFvNosvMvOpmvPvPodploskIkIrclUijijijijijijlZrPrWrXrYrRmcijijijijijijlUlElDmKlJlElGlElElEmKmflElJlEmflElElGnUlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUrVuJrVrVrVrVrVrVvQrVskrVrVrVuJrVrVrVrVlUijijijijijijlZrPrWrXrYrRmcijijijijijvElUhSvRvRhSvSlElElElElElElElElElElElElElElUijijijijijijlZrPrXrXrXrRmcijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijlZsnrXrXrXsomcijijijijijijnXososvHrcplvFvPvFvOvTvFnGpmnIvJvHkIkIkInXijijijijijijlZsnrXrXrXsomcijijijijijijnXojlElEmflEnVmKlElElGlElElDlDojlElElJlDnXijijijijijijlZsnrXrXrXsomcijijijijijijnXrVsUrVsUrVrVrVuJsjvQrVrVrVrVrVrVrVslrVnXijijijijijijlZsnrXrXrXsomcijijijijijijvUhShSvRvRhSvRhSvSlElElElElElElElElElElEvUijijijijijijlZsnrXrXrXsomcijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijlZsrssrXstsumcijijijijijijlUrckIvHvHkIqtvMvVvHvPvWnGvFvHnIqIvXnIvPlUijijijijijijlZsrssrXstsumcijijijijijijlUlElEmdlEnUlElGlEvYlEnVmdlEmfvLlEmdlEmflUijijijijijijlZsrssrXstsumcijijijijijijlUrVrVsirVrVrVvQrVvQsUrVskrVslrVsirVrVsilUijijijijijijlZsrssrXstsumcijijijijijijlUhShShShShShShSvRhShSvRhShShSlElElElElElUijijijijijijlZsrrXrXrXsumcijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijmXijijmYsrsCsunaijijmXijijijijhFkIkIvHvMvHvHplvMkIvMvMosvFoUnIvFoaoavVhFijijijijmXijijmYsrsCsunaijijmXijijijijhFlElGlEnVmKmdlEojlElElJlEmflElGmdlJmflEhFijijijijmXijijmYsrsCsunaijijmXijijijijhFrVrVsjsirVslrVrVrVrVsSrVrVrVrVrVsUrVrVhFijijijijmXijijmYsrsCsunaijijmXijijijijhFhShShShShShShShShShShSvRvRhShSvRlElElEhFijijijijmXijijmYsrsCsunaijijmXijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQvBkShFkQkRkShFkQvBkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQvCkShFkQkRkShFkQvCkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQvDkShFkQkRkShFkQvDkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnshFkQkRkShFkQvZkShFkQkRkShFkQvZkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQwakShFkQkRkShFkQwakShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnBnComomomomomomomomomomomomomomomomomomomomomnEnFijijijijijijijijijijijijijijijnBnClElElElElElElElElElElElElElElElElElElElElEnEnFijijijijijijijijijijijijijijijnBnCrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVnEnFijijijijijijijijijijijijijijijnBnChShShShShShShShShShShShShShShShShShShShShSnEnFijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnOnComomompDomomomomomomompqomomompqoFomomomomomomnEnPijijijijijijijijijijijijijnOnClElElElElElElElElEhSwbhShSlElElElElElElElElElEnEnPijijijijijijijijijijijijijnOnCrVrVrVsirVrVrVrVrVsSrVrVrVrVrVrVrVrVrVrVrVrVrVnEnPijijijijijijijijijijijijijnOnChShShShShShShShShShShShShShShShShShShShShShShSnEnPijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFompsomomwcomomwdpqomwcomweompqomomompCwdwcomomomomhFijijijhFhFlUnXlUhFhFijijijhFlElElEhShSvRhShShSvRhSvRhShShShShSlElElEhShSlElElEhFijijijhFhFlUnXlUhFhFijijijhFrVrVrVrVrVrVrVrVslrVrVrVsUrVrVrVrVrVrVrVrVsirVrVrVhFijijijhFhFlUnXlUokhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijookIosnHodnGooijijijooomoEomompeweomomomomomomomomomwcomomoFomwdomomomomooijijijoooGoIoIoIoIooijijijoolElEhSvRvRhShSororororororlElElElElElElElEhShSlElEooijijijoohShShShShSooijijijoorVrVrVrVslrVrVrVsirVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVooijijijoorVrVrVrVrVooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLkIosppodnHoLijijijwfomompqomomomqsomwepqoFompsoFqsomomomomomomomwdomomwfijijijoLwgwhoIoIoIoLijijijoLlElEhSvRhSororororororororororororlElElElElElElElEoLijijijoLhShShShShSoLijijijwirVrVsirVrVrVrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVsSrVrVwiijijijoLrVrVrVrVrVoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpioapyoaoQnGpiijijijpiomomomomwdomomoFpComomoEomomompeomomomwdomomomomompiijijijpiwgoIoIrCoIpiijijijpilElElEororororororororororororororororlElElElElElEpiijijijpihShShShShSpiijijijpirVrVrVrVrVsUrVrVrVslsjrVrVrVrVuKrVrVrVslrVrVrVrVrVpiijijijpirVskrVskrVpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFnIwjpkplnGhFijijijhFpeomomompqomomomomwdwkweomomwdomwdomweomwlwcomomomhFijijijhFpgoGwmoIoIhFijijijhFlElElEorororororororororororororororororlElElElElEhFijijijhFhShShShShShFijijijhFrVrVrVrVrVrVsirVrVrVrVrVrVrVrVrVrVrVrVrVskrVrVsirVhFijijijhFrVrVrVrVrVhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijookIpZplwnoyooijijijooompqpqomomompswcomweomwlomoFomwoomomwcqsomwcomomwdooijijijooptpgoGoJoIooijijijoolEhSlElEorororororororororororororororororlElElElEooijijijoohShShShShSooijijijoorVrVrVrVrVrVsjrVrVrVrVrVrVrVrVrVrVrVsUrVrVrVrVrVrVooijijijoorVrVrVrVrVooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijwpnRnHpGnIqlwpijijijoLomomomomomweomomomomomomqsompsweomomwdomomomomomomoLijijijwqptptwgoIoIwqijijijoLlEhSlElElEorororororwrwrwrororororororororlElElElEoLijijijoLhShShShShSoLijijijoLrVrVrVuJrVrVrVrVrVrVskrVrVrVrVrVrVsSrVrVrVrVrVrVrVoLijijijwsrVskrVrVrVwsijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpinInInInSoBpiijijijpiomomoFwcomompDwcomwdomomomompqomompqomoFomomoEomompiijijijpiptwtwgoIoIpiijijijpilEhSwulElEororororwrwrwrwrwrororororororlElElEhSlEpiijijijpihShShShShSpiijijijpirVsjrVrVrVsUrVrVsirVwvwvwvrVslrVrVrVrVsirVrVskrVrVpiijijijpirVrVrVrVrVpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFoaoawwoaodhFijijijhFomompComwcpsompeompDomomomwdpqompsomomompqwepDomomhFijijijhFptrpryrCoIhFijijijhFlElEvRlElEorororororwrwrwrororororororororlElEvRlEhFijijijhFhShShShShShFijijijhFrVrVrVrVrVrVrVrVrVrVwvwxwvsSsjrVrVrVrVrVsUrVrVrVrVhFijijijhFrVrVwyrVrVhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoonIpWnGozocooijijijooomomompqomomomwewoomweomompComompsomomomomomomomomooijijijooptwgoIoHoIooijijijoolElElElElEorororororornDororororororororlElElElElEooijijijoohShShShShSooijijijoorVsUrVrVrVsirVslrVrVwzwvwvrVrVrVrVrVrVrVsUrVrVrVrVooijijijoorVrVrVrVrVooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijwpoXozwAkIogwpijijijoLomomwdomompComqspqomwdomomompqwlomomweomwcompqomomoLijijijwqptwgoJoIoIwqijijijoLlElElElElEorororororornDororororororororlElElElElEoLijijijoLhShShShShSoLijijijoLrVsUrVrVrVrVrVrVrVrVrVrVrVrVsUrVskrVrVrVrVrVrVrVrVoLijijijwsrVrVrVskrVwsijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpikIkIkIkIrepiijijijpiomqsqsomomomomomwlomomwcomweomomompswcomomompComompiijijijpiptpgoGwmoIpiijijijpilElElEorororororororornDnDorororororororlElElElElEpiijijijpihShShShShSpiijijijpirVrVrVskrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVslrVrVrVrVrVpiijijijpirVskrVrVrVpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFkIkIobnIoyhFijijijhFomomompqpsomomomomomompswdomomomweomomomomwdwlomomhFijijijhFptptwgoIrChFijijijhFlElElEororororororornDnDnDorororororororlElElEvRlEhFijijijhFhShShShShShFijijijhFrVrVrVrVrVrVskrVrVrVrVrVrVrVrVrVrVrVrVsUrVrVrVrVrVhFijijijhFrVrVrVrVrVhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijooododrcwBoRooijijijooomomwcomomweomoFpsomwkwdomompqpqwcomomwdomoFomomomooijijijooptrpryoIoIooijijijoolElElEororororororornDhSnDnDororororororlElEhShSlEooijijijoohShShShShSooijijijoorVrVrVrVrVrVrVrVrVslrVrVslrVrVskrVrVrVrVsSrVsirVrVooijijijoorVrVrVrVrVooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLrlosofrmrBoLijijijwfpComomomwlompDomoEompsomoFwlomwdomomompDoFoFwcomomwfijijijoLrpryoHoJoIoLijijijoLlEhSlEororlElEororlEhShShSnDorororororlElEhSwClElEoLijijijoLhShShShShSoLijijijwirVrVrVrVuKrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVwiijijijoLrVskrVrVrVoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpioeoZoeoenGpiijijijpiomomomoFomoFpswlomwcomomomomwdompewlomweoEompqomompiijijijpiryoIoIoIoIpiijijijpilEhShSlElElElEorlElEhShSvRhSlElEorlElElElEvRlElElEpiijijijpihShShShShSpiijijijpirVrVsirVrVrVsSrVrVsjrVrVsirVrVrVskrVrVrVrVrVskrVrVpiijijijpirVrVrVskrVpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFpqompeomomomwcomomomomweomompqomomwcqswcwcomomomomhFijijijhFhFlUnXlUhFhFijijijhFlElEwDhShSlElElElEhShShShShShSlElElElElElElElElElEhFijijijhFhFlUnXlUhFhFijijijhFrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVrVsUrVhFijijijhFoklUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijijijijijijijijijijnOnFomomomomqspCweweomwdwcomomomomomweomomomomomomnBnPijijijijijijijijijijijijijnOnFlElElEhSlElElEvRhShShShShShSvRhSlElElEvRlElElEnBnPijijijijijijijijijijijijijnOnFrVrVrVrVsUrVrVrVrVrVrVrVrVsirVrVrVslrVsirVrVrVnBnPijijijijijijijijijijijijijnOnFhShShShShShShShShShShShShShShShShShShShShShShSnBnPijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijnEnFomomomomomomomomomomomomomompqomompDomomomrInCijijijijijijijijijijijijijijijnEnFlElElElElEvRhShSwEvRhSwFwEhShShSlElElElElErInCijijijijijijijijijijijijijijijnEnFrVrVrVrVrVrVrVrVslrVrVrVrVrVrVrVrVrVrVrVrVrInCijijijijijijijijijijijijijijijnEnFhShShShShShShShShShShShShShShShShShShShShSrInCijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQvZkShFlUnXlUhFkQvZkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUvUlUokkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQwakShFlUnXlUhFkQwakShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUnXlUhFkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQwGkShFkQkRkShFkQwGkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkJkWijijkXkXkXijijkYkZijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijlxijijlyrPrQrRlCijijlxijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijlxijijlyrPrQrRlCijijlxijijijijhFujrVrVujrVsUrVrVsUrVrVsirVtbrVtbrVrVrVhFijijijijlxijijlyrPrQrRlCijijlxijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijlxijijlyrPrQrRlCijijlxijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijlZrPrWrXrYrRmcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZrPrWrXrYrRmcijijijijijijlUrVrVukrVtbrVtttutututututvrVrVrVsisksilUijijijijijijlZrPrWrXrYrRmcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZrPrXrXrXrRmcijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijlZsnrXrXrXsomcijijijijijijnXhShShShShShShShShShShShShShShShShShShSnXijijijijijijlZsnrXrXrXsomcijijijijijijnXhShShShShShShShShShShShShShShShShShShSnXijijijijijijlZsnrXrXrXsomcijijijijijijnXrVskrVrVrVrVtGnJnJwHnJnJtHsirVsirVrVrVnXijijijijijijlZsnrXwIrXsomcijijijijijijnXhShShShShShShShShShShShShShShShShShShSnXijijijijijijlZsnrXrXrXsomcijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijlZsrssrXstsumcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZsrssrXstsumcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZsrssrXstsumcijijijijijijlUukrVrVujrVsjueufufufufufugrVrVrVrVtbrVlUijijijijijijlZsrssrXstsumcijijijijijijlUhShShShShShShShShShShShShShShShShShShSlUijijijijijijlZsrrXrXrXsumcijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijmXijijmYsrsCsunaijijmXijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijmXijijmYsrsCsunaijijmXijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijmXijijmYsrsCsunaijijmXijijijijhFrVsjrVrVsirVsSrVrVsjrVrVsirVrVsSsjrVrVhFijijijijmXijijmYsrsCsunaijijmXijijijijhFhShShShShShShShShShShShShShShShShShShShFijijijijmXijijmYsrsCsunaijijmXijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQwGkShFkQkRkShFkQwGkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFijijijijkYkZijijnnnnnnijijkJkWijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnshFkQkRkShFkQkRkShFkQkRkShFkQkRkShFkQkRkShFnuijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnBnChShShShShShShShShShShShShShShShShShShShShSnEnFijijijijijijijijijijijijijijijnBnChShShShShShShShShShShShShShShShShShShShShSnEnFijijijijijijijijijijijijijijijnBnChShShShShShShShShShShShShShShShShShShShShSnEnFijijijijijijijijijijijijijijijnBnChShShShShShShShShShShShShShShShShShShShShSnEnFijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnOnChShShShShShShShShShShShShShShShShShShShShShShSnEnPijijijijijijijijijijijijijnOnChShShShShShShShShShShShShShShShShShShShShShShSnEnPijijijijijijijijijijijijijnOnChShShShShShShShShShShShShShShShShShShShShShShSnEnPijijijijijijijijijijijijijnOnChShShShShShShShShShShShShShShShShShShShShShShSnEnPijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhShShShShShFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaigijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijoohShShShShShShShShShShShShShShShShShShShShShShShShSooijijijoohShShShShSooijijijigaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaivijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijoLhShShShShShShShShShShShShShShShShShShShShShShShShSoLijijijoLhShShShShSoLijijijivaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaiBijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijpihShShShShShShShShShShShShShShShShShShShShShShShShSpiijijijpihShShShShSpiijijijiBaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFhShShShShShShShShShShShShShShShShShShShShShShShShShFijijijhFhFlUnXlUhFhFijijijhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaakakbijijijijijijijijijijijijijnOnFhShShShShShShShShShShShShShShShShShShShShShShSnBnPijijijijijijijijijijijijijnOnFhShShShShShShShShShShShShShShShShShShShShShShSnBnPijijijijijijijijijijijijijnOnFhShShShShShShShShShShShShShShShShShShShShShShSnBnPijijijijijijijijijijijijijnOnFhShShShShShShShShShShShShShShShShShShShShShShSnBnPijijijijijijijijijijijijijkdkeaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaakakgijijijijijijijijijijijijijijijnEnFhShShShShShShShShShShShShShShShShShShShShSrInCijijijijijijijijijijijijijijijnEnFhShShShShShShShShShShShShShShShShShShShShSrInCijijijijijijijijijijijijijijijnEnFhShShShShShShShShShShShShShShShShShShShShSrInCijijijijijijijijijijijijijijijnEnFhShShShShShShShShShShShShShShShShShShShShSrInCijijijijijijijijijijijijijijijkhkeaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFkiijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUnXlUhFkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUnXlUhFkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUnXlUhFkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijrKhFkQkRkShFkQkRkShFlUnXlUhFkQkRkShFkQkRkShFrKijijijijijijijijijijijijijijijijijkjhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijwJwKwLwLwLwKwJijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkukvijijijkwkxijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijwJwMwMwMwNwMwMwMwJijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkJkKijijijijijkLkxijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkJkWijijkXkXkXijijkYkZijijijijwOkQkRkSwPkQkRkSwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijkJkWijijkXkXkXijijkYkZijijijijwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijwJwMwMwMwNwNwNwMwMwMwJijijijijwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijkJkWijijkXkXkXijijkYkZijijijijwOwOwOwOwOwOwOwOwOwOwOwQkQkRkSwQwOwOwOwOwOijijijijkJkWijijkXkXkXijijkYkZijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijlxijijlyrPrQrRlCijijlxijijijijwOwRwRwRwRkMkMkMwSwTwOwUwVwWwXkMwYwZxaxbwOijijijijlxijijlyrPrQrRlCijijlxijijijijwOxcxdxcxdxcxdxcxdxexfxexdxgxdxcxdxcxdxcwOijijijijwKwMwMwMwNwMwNwMwMwMwKijijijijwOxhxixjxkxkxlxmwQxnxnwQwOxowQxowOxpxpxpwOxqijijijlxijijlyrPrQrRlCijijlxijijijijwOxrxsxtxrxuxtxrxuxtwOwQwQwQwQwQwOxvxwxxwOijijijijlxijijlyrPrQrRlCijijlxijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijijlZrPrWrXrYrRmcijijijijijijxykMkMkMkMkMxzkMwSkMxAkMkMkMkMkMwYkMkMkMwOxBijijijijijlZrPrWrXrYrRmcijijijijijxCwOxcxDxcxDxcxDxExDwQwQwQxDxcxDxcxDxcxDxcwOxBijijijwLwMwNwNwNwNwNwNwNwMwLijijijijxFxGxGxHxkxkxlxlwQwQwQwQwOxowQxowOwQwQwQwOxBijijijijijlZrPrWrXrYrRmcijijijijijxIwOwQwQwQwQwQwQwQwQwQwOwOlUxJlUwOwOwQwQwQwOxBijijijijijlZrPrXrXrXrRmcijijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadivijijijijijijlZsnrXrXrXsomcijijijijijijwPkMkMkMkMxzxKxzwSxLwOwUwVwWwXkMwYkMkMkMxAijijijijijijlZsnrXrXrXsomcijijijijijijxMwQwQwQwQwQwQwQwQwQxNwQwQwQwQwQwQwQwQwQxMijijijijwLwNwNwMwNxOwNwMwNwNwLijijijijxPwQwQwQwQxQwQwQwQwQwQxNxRwQwQwQxPwQwQwQxPijijijijijijlZsnrXrXrXsomcijijijijijijxSwQwQwQwQwQwQwQwQwQxSwQwQxDwQwQwQwQwQwQxSijijijijijijlZsnrXrXrXsomcijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijlZsrssrXstsumcijijijijijijxykMkMkMkMkMxzkMwSwSwOkMkMkMkMkMwYkMkMkMwOijijijijijijlZsrssrXstsumcijijijijijxTwOwQwQwQwQwQwQwQwQwQwQwQwQwQwQwQwQwQwQwQwOxUijijijwLwMwNwNwNwNwNwNwNwMwLijijijxTwOxVxWxWxXxYxZyawQwQwQwQwOybwQxoxFwQwQwQwOijijijijijijlZsrssrXstsumcijijijijijxTwOwQwQwQwQwQwQwQwQwQwOxNwQwQwQwQwQwQwQwQwOijijijijijijlZsrrXrXrXsumcijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijmXijijmYsrsCsunaijijmXijijijijwOycycycyckMkMkMkMkMxAkMkMkMkMkMwYwZxaxbwOijijijijmXijijmYsrsCsunaijijmXijijijijwOydyeyeyeyeyeyeyfyeyeyeyeyeyeyeyeyeyeydwOijijijijwKwMwMwMwNwMwNwMwMwMwKijijijygwOyhxWyiyjykxZyawQylymwQwOxowQxowOxpxpxpwOijijijijmXijijmYsrsCsunaijijmXijijijijwOynyoxtypyqxtypyqxtwOwQwQwQwQwQwQyryryrwOijijijijmXijijmYsrsCsunaijijmXijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFijijijijkYkZijijnnnnnnijijkJkWijijijijwOkQkRkSwPkQkRkSwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijkYkZijijnnnnnnijijkJkWijijijijwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijwJwMwMwMwNwNwNwMwMwMwJijijijijwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijkYkZijijnnnnnnijijkJkWijijijijwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOwOijijijijkYkZijijnnnnnnijijkJkWijijijijhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadigijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijwJwMwMwMwNwMwMwMwJijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkZijijijijijkukKijijijijijigadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacivijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijwJwKwLwLwLwKwJijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijkYkvijijijkwkKijijijijijijivadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadiBijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijiBadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadhFnrijijijijijijijijijijijijijijijijijnyhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFnrijijijijijijijijijijijijijijijijijnyhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFnrijijijijijijijijijijijijijijijijijnyhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFnrijijijijijijijijijijijijijijijijijnyhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFhXhYhZhFnrijijijijijijijijijijijijijijijijijnyhFadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaanznAijijijijijijijijijijijijijijijnLnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznAijijijijijijijijijijijijijijijnLnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznAijijijijijijijijijijijijijijijnLnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznAijijijijijijijijijijijijijijijnLnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznAijijijijijijijijijijijijijijijnLnMaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaanznNijijijijijijijijijijijijijnWnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznNijijijijijijijijijijijijijnWnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznNijijijijijijijijijijijijijnWnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznNijijijijijijijijijijijijijnWnMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanznNijijijijijijijijijijijijijnWnMaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaahFhXhYhZhFhFhXhYhZhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFhXhYhZhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFhXhYhZhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFhXhYhZhFhFhXhYhZhFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFhXhYhZhFhFhXhYhZhFhFhXhYhZhFaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvywyxyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBysysysyByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaysysysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaytytytytytytytytytytytytytytytytytysysysytytytytytytytytytytytytytytytytytaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyCyDyEyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyCyDyEyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaayuyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyvyCyDyEyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBaaaaaayByByByByByByByByByByByByByByByByBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -"} - diff --git a/maps/example/example_areas.dm b/maps/example/example_areas.dm index 8e01e14055..d66be8dea8 100644 --- a/maps/example/example_areas.dm +++ b/maps/example/example_areas.dm @@ -4,10 +4,12 @@ lift_floor_label = "Floor 2" lift_floor_name = "Top Floor" lift_announce_str = "Arriving at Top Floor." + ambience = AMBIENCE_AESTHETIC /area/turbolift/example_ground name = "lift (ground floor)" lift_floor_label = "Floor 1" lift_floor_name = "First Floor" lift_announce_str = "Arriving at First Floor." - base_turf = /turf/simulated/floor \ No newline at end of file + base_turf = /turf/simulated/floor + ambience = AMBIENCE_AESTHETIC \ No newline at end of file diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index abf0a707e8..1021cbbcaa 100644 --- a/maps/northern_star/polaris-1.dmm +++ b/maps/northern_star/polaris-1.dmm @@ -56,7 +56,7 @@ "abd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) "abe" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_chapel_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_chapel_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_chapel_pump"; tag_chamber_sensor = "solar_chapel_sensor"; tag_exterior_door = "solar_chapel_outer"; tag_interior_door = "solar_chapel_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 0; pixel_y = -26},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) "abf" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) -"abg" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) +"abg" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) "abh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) "abi" = (/obj/effect/decal/cleanable/dirt,/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,/area/maintenance/auxsolarstarboard) "abj" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/auxsolarstarboard) @@ -85,9 +85,9 @@ "abG" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_outer"; locked = 1; name = "Library Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) "abH" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "library_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/library) "abI" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "library_maint_airlock"; name = "Airlock Console"; pixel_y = 25; req_access = list(13); tag_airpump = "library_maint_pump"; tag_chamber_sensor = "library_maint_sensor"; tag_exterior_door = "library_maint_outer"; tag_interior_door = "library_maint_inner"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/library) -"abJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_inner"; locked = 1; name = "Library Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) -"abK" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) -"abL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/maintenance/library) +"abJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_inner"; locked = 1; name = "Library Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) +"abK" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) +"abL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/maintenance/library) "abM" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor,/area/maintenance/library) "abN" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/maintenance/library) "abO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard) @@ -406,13 +406,13 @@ "ahP" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "ahQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "ahR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) -"ahS" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) -"ahT" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"ahS" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"ahT" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "ahU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/carpet,/area/chapel/main) "ahV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet,/area/chapel/main) "ahW" = (/turf/simulated/floor/carpet,/area/chapel/main) -"ahX" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) -"ahY" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"ahX" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"ahY" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "ahZ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/chapel/main) "aia" = (/turf/simulated/floor/tiled/dark,/area/chapel/main) "aib" = (/turf/simulated/floor/tiled,/area/maintenance/chapel) @@ -459,12 +459,12 @@ "aiQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "aiR" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "aiS" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled/dark,/area/chapel/main) -"aiT" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"aiT" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) "aiU" = (/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) "aiV" = (/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/chapel/main) "aiW" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/carpet,/area/chapel/main) "aiX" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) -"aiY" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"aiY" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) "aiZ" = (/obj/effect/floor_decal/chapel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/chapel/main) "aja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/chapel/main) "ajb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/chapel/main) @@ -475,7 +475,7 @@ "ajg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/maintenance/chapel) "ajh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/chapel) "aji" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/chapel) -"ajj" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "chapel_maint_inner"; locked = 1; name = "Chapel Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/chapel) +"ajj" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "chapel_maint_inner"; locked = 1; name = "Chapel Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/chapel) "ajk" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "chapel_maint_airlock"; name = "Airlock Console"; pixel_y = 25; req_access = list(13); tag_airpump = "chapel_maint_pump"; tag_chamber_sensor = "chapel_maint_sensor"; tag_exterior_door = "chapel_maint_outer"; tag_interior_door = "chapel_maint_inner"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/chapel) "ajl" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "chapel_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "chapel_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/chapel) "ajm" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "chapel_maint_outer"; locked = 1; name = "Chapel Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/chapel) @@ -560,8 +560,8 @@ "akN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "akO" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "akP" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) -"akQ" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) -"akR" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"akQ" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"akR" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) "akS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/chapel/main) "akT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/chapel/main) "akU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) @@ -571,7 +571,7 @@ "akY" = (/obj/structure/table/rack,/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/obj/machinery/light,/turf/simulated/floor/lino,/area/security/detectives_office) "akZ" = (/turf/simulated/floor/lino,/area/security/detectives_office) "ala" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/lino,/area/security/detectives_office) -"alb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/security{c_tag = "SEC - Detective Office"; dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/lino,/area/security/detectives_office) +"alb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/security{c_tag = "SEC - Detective Office"; dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/lino,/area/security/detectives_office) "alc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/lino,/area/security/detectives_office) "ald" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/turf/simulated/floor/lino,/area/security/detectives_office) "ale" = (/obj/structure/noticeboard{pixel_y = -30},/turf/simulated/floor/lino,/area/security/detectives_office) @@ -603,12 +603,12 @@ "alE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "alF" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "alG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) -"alH" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"alH" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alI" = (/obj/effect/floor_decal/chapel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) "alL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main) -"alM" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"alM" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alN" = (/obj/effect/floor_decal/chapel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) "alP" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/chapel) @@ -696,7 +696,7 @@ "ant" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "anu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "anv" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore) -"anw" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"anw" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) "anx" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/chapel/main) "any" = (/turf/simulated/wall,/area/vacant/vacant_site) "anz" = (/obj/machinery/smartfridge/drinks,/turf/simulated/floor/wood,/area/vacant/vacant_site) @@ -744,9 +744,9 @@ "aop" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/wood,/area/library) "aoq" = (/obj/machinery/librarycomp{pixel_y = 0},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library) "aor" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library) -"aos" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/item/device/retail_scanner/civilian{ icon_state = "retail_idle"; dir = 1},/obj/item/device/camera,/obj/item/device/tape,/turf/simulated/floor/carpet,/area/library) +"aos" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/item/device/retail_scanner/civilian{icon_state = "retail_idle"; dir = 1},/obj/item/device/camera,/obj/item/device/tape,/turf/simulated/floor/carpet,/area/library) "aot" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/invisible,/obj/item/clothing/under/suit_jacket/red,/obj/machinery/light,/obj/item/weapon/barcodescanner,/turf/simulated/floor/carpet,/area/library) -"aou" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/sign/poster{pixel_y = 32},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aou" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/tool/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/sign/poster{pixel_y = 32},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aov" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aow" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aox" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) @@ -754,9 +754,9 @@ "aoz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "aoA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) "aoB" = (/obj/structure/table/glass,/obj/machinery/status_display{pixel_x = 32; pixel_y = 0},/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore) -"aoC" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"aoC" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) "aoD" = (/obj/effect/floor_decal/chapel,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) -"aoE" = (/obj/effect/floor_decal/chapel{ icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"aoE" = (/obj/effect/floor_decal/chapel{icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/chapel/main) "aoF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/vacant/vacant_site) "aoG" = (/turf/simulated/floor/wood,/area/vacant/vacant_site) "aoH" = (/obj/random/drinkbottle,/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/drinkbottle,/turf/simulated/floor/wood,/area/vacant/vacant_site) @@ -887,7 +887,7 @@ "arc" = (/obj/structure/closet/secure_closet/security,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/glasses/hud/security,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "ard" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/glasses/hud/security,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "are" = (/obj/structure/table/standard,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo/cord,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/security/security_lockerroom) -"arf" = (/obj/structure/table/standard,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/security/security_lockerroom) +"arf" = (/obj/structure/table/standard,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "arg" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northleft{name = "Shower"; req_access = list()},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) "arh" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northright{dir = 1; name = "Shower"; req_access = list()},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) "ari" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) @@ -1114,7 +1114,7 @@ "avv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/security_equiptment_storage) "avw" = (/obj/machinery/computer/prisoner,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/warden) "avx" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/industrial/outline/grey,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/security/warden) -"avy" = (/obj/structure/table/reinforced,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/security{c_tag = "SEC - Warden's Office"},/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/obj/item/device/retail_scanner/security,/turf/simulated/floor/tiled/dark,/area/security/warden) +"avy" = (/obj/structure/table/reinforced,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/security{c_tag = "SEC - Warden's Office"},/obj/item/weapon/tool/crowbar,/obj/item/device/radio/off,/obj/item/weapon/tool/wrench,/obj/item/device/retail_scanner/security,/turf/simulated/floor/tiled/dark,/area/security/warden) "avz" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 14; pixel_y = 24},/obj/machinery/photocopier,/turf/simulated/floor/tiled/dark,/area/security/warden) "avA" = (/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 30},/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor/tiled/dark,/area/security/warden) "avB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/security/warden) @@ -1138,7 +1138,7 @@ "avT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/red{dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "avU" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor,/area/security/riot_control) "avV" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/riot_control) -"avW" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/wrench,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/security/riot_control) +"avW" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/tool/wrench,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/security/riot_control) "avX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) "avY" = (/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,/area/maintenance/security_starboard) "avZ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/security_starboard) @@ -1240,14 +1240,14 @@ "axR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "axS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "axT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"axU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"axV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"axW" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"axX" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"axY" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"axU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"axV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"axW" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"axX" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"axY" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "axZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aya" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore) -"ayb" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon/delivery/west{location = "Security"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/security/security_cell_hallway) +"ayb" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon/delivery/west{location = "Security"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/security/security_cell_hallway) "ayc" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/security_starboard) "ayd" = (/obj/effect/decal/cleanable/blood/oil,/obj/item/trash/tastybread,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "aye" = (/obj/item/seeds/poppyseed,/obj/item/seeds/poppyseed,/obj/item/seeds/poppyseed,/turf/simulated/floor,/area/maintenance/security_starboard) @@ -1603,7 +1603,7 @@ "aEQ" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/pool) "aER" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/maintenance/pool) "aES" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/pool) -"aET" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/security,/obj/item/clothing/head/helmet/space/void/security,/obj/item/device/suit_cooling_unit,/obj/item/weapon/tank/oxygen,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "EVA Suit"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aET" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/security,/obj/item/clothing/head/helmet/space/void/security,/obj/item/device/suit_cooling_unit,/obj/item/weapon/tank/oxygen,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "EVA Suit"},/turf/simulated/floor/tiled/dark,/area/security/armoury) "aEU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury) "aEV" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) "aEW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -1732,7 +1732,7 @@ "aHp" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) "aHq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/range) "aHr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled,/area/security/range) -"aHs" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/westright{name = "Range Access"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/range) +"aHs" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/westright{name = "Range Access"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/range) "aHt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/security/range) "aHu" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/security/range) "aHv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled,/area/security/range) @@ -1861,7 +1861,7 @@ "aJO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) "aJP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range) "aJQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled,/area/security/range) -"aJR" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/westright{name = "Range Access"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/range) +"aJR" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/westright{name = "Range Access"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/range) "aJS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/security/range) "aJT" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/range) "aJU" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/blanks{pixel_x = 2; pixel_y = -2},/obj/item/weapon/storage/box/blanks,/turf/simulated/floor/tiled,/area/security/range) @@ -1908,7 +1908,7 @@ "aKJ" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/weapon/storage/box/shotgunshells,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/obj/machinery/door/window/brigdoor/northleft{name = "Ammo"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/tactical) "aKK" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/obj/item/ammo_magazine/s45,/obj/item/ammo_magazine/s45,/turf/simulated/floor/tiled/dark,/area/security/tactical) "aKL" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full,/obj/machinery/door/window/brigdoor/northleft{name = "Combat Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aKM" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/tactical) +"aKM" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/tactical) "aKN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range) "aKO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/range) "aKP" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/security/range) @@ -2117,11 +2117,11 @@ "aOK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aOL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aOM" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Aft"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aON" = (/obj/item/inflatable/door/torn,/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/maintenance/pool) +"aON" = (/obj/item/inflatable/door/torn,/obj/item/weapon/tool/screwdriver,/turf/simulated/floor,/area/maintenance/pool) "aOO" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aOP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aOQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "large_escape_pod_2"; pixel_x = 26; pixel_y = -26; tag_door = "large_escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) -"aOR" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) +"aOR" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aOS" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aOT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aOU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/substation/security) @@ -2423,7 +2423,7 @@ "aUE" = (/turf/simulated/wall,/area/maintenance/engineering/pumpstation) "aUF" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aUG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aUH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 6},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aUH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aUI" = (/obj/machinery/atmospherics/binary/pump/high_power/on{dir = 4; name = "Pump station in"; target_pressure = 4500},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aUJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aUK" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) @@ -2456,7 +2456,7 @@ "aVl" = (/turf/simulated/wall,/area/maintenance/medbay_fore) "aVm" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_fore) "aVn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"; req_one_access = list(11,24)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aVp" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aVq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aVr" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) @@ -2546,7 +2546,7 @@ "aWX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) "aWY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) "aWZ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Park Fore"; dir = 2},/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"aXa" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/fernybush,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/grass,/area/hydroponics/garden) +"aXa" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/fernybush,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/grass,/area/hydroponics/garden) "aXb" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "aXc" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "aXd" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) @@ -2574,7 +2574,7 @@ "aXz" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Pump Station Atmospherics"; req_one_access = list(11,24)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aXA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aXB" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aXC" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aXC" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aXD" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aXE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_fore) "aXF" = (/turf/space,/area/skipjack_station/northwest_solars) @@ -2618,7 +2618,7 @@ "aYr" = (/obj/structure/bed/chair/wood{dir = 4},/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics/garden) "aYs" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics/garden) "aYt" = (/obj/structure/bed/chair/wood{dir = 8},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"aYu" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) +"aYu" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) "aYv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics/garden) "aYw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aYx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) @@ -2638,11 +2638,11 @@ "aYL" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/emergency,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/medbay_fore) "aYM" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "aYN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aYO" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aYP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/random/maintenance/engineering,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aYQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) -"aYR" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) -"aYS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aYO" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aYP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/random/maintenance/engineering,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aYQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) +"aYR" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aYS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aYT" = (/obj/machinery/atmospherics/tvalve/digital/mirrored/bypass{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Pump Station"; dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aYU" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aYV" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) @@ -2688,7 +2688,7 @@ "aZJ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/ai_monitored/storage/emergency/eva) "aZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/ai_monitored/storage/emergency/eva) "aZL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/ai_monitored/storage/emergency/eva) -"aZM" = (/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) +"aZM" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "aZN" = (/obj/effect/floor_decal/corner/brown{dir = 6},/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "aZO" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "aZP" = (/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) @@ -2697,7 +2697,7 @@ "aZS" = (/turf/simulated/wall,/area/medical/surgery_storage) "aZT" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor,/area/maintenance/medbay_fore) "aZU" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/medbay_fore) -"aZV" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 9},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) +"aZV" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 9},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aZW" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) "aZX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "aZY" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation) @@ -2728,27 +2728,27 @@ "bax" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/ai_cyborg_station) "bay" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics/garden) "baz" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/hydroponics/garden) -"baA" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) +"baA" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "baB" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "baC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "baD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "baE" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/emergency/eva) "baF" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/emergency/eva) "baG" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/emergency/eva) -"baH" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera/network/civilian{c_tag = "CIV - Emergency EVA"; dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/emergency/eva) +"baH" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera/network/civilian{c_tag = "CIV - Emergency EVA"; dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/emergency/eva) "baI" = (/obj/structure/table/woodentable,/obj/machinery/light,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/random/maintenance/engineering,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "baJ" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "baK" = (/obj/effect/floor_decal/corner/brown/full{dir = 4},/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "baL" = (/obj/effect/floor_decal/corner/yellow/full,/obj/effect/decal/cleanable/blood/oil,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "baM" = (/obj/effect/floor_decal/corner/yellow{dir = 10},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) -"baN" = (/obj/effect/floor_decal/corner/yellow{dir = 10},/obj/structure/table/marble,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/taperoll/engineering,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) +"baN" = (/obj/effect/floor_decal/corner/yellow{dir = 10},/obj/structure/table/marble,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/taperoll/engineering,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled/white,/area/ai_monitored/storage/emergency/eva) "baO" = (/obj/structure/table/marble,/turf/simulated/floor/tiled/yellow,/area/ai_monitored/storage/emergency/eva) "baP" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "baQ" = (/obj/structure/closet/crate/freezer,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "baR" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "baS" = (/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor,/area/maintenance/medbay_fore) "baT" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/medbay_fore) -"baU" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1"},/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/mine/unexplored/upper_level) +"baU" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/mine/unexplored/upper_level) "baV" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/boots/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/cargo,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/mine/unexplored/upper_level) "baW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/medbay_fore) "baX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/research_shuttle) @@ -2869,7 +2869,7 @@ "bdi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/water/pool,/area/hydroponics/garden) "bdj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/water/pool,/area/hydroponics/garden) "bdk" = (/obj/structure/bed/chair/wood{dir = 1},/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"bdl" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sunnybush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden) +"bdl" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sunnybush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden) "bdm" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bdn" = (/turf/simulated/floor/tiled,/area/medical/surgeryobs) "bdo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/medical/surgeryobs) @@ -2911,7 +2911,7 @@ "bdY" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bdZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/water/pool,/area/hydroponics/garden) "bea" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"beb" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) +"beb" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bec" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bed" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bee" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/hydroponics/garden) @@ -2984,7 +2984,7 @@ "bft" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/corner/pink{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bfu" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/obj/machinery/camera/network/medbay{c_tag = "MED - Examination Room"},/obj/effect/floor_decal/corner/pink{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bfv" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/floor_decal/corner/pink/full{dir = 1},/obj/random/medical,/turf/simulated/floor/tiled/white,/area/medical/exam_room) -"bfw" = (/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/structure/table/glass,/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bfw" = (/obj/item/weapon/tool/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/structure/table/glass,/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bfx" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/cryo) "bfy" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/cryo) "bfz" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) @@ -3004,8 +3004,8 @@ "bfN" = (/turf/simulated/wall/r_wall,/area/server) "bfO" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) "bfP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; use_power = 1},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) -"bfQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled/dark,/area/server) -"bfR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server) +"bfQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled/dark,/area/server) +"bfR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server) "bfS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/machinery/light/small{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc/high{dir = 1; name = "north bump"; pixel_y = 24},/turf/simulated/floor/tiled/dark,/area/server) "bfT" = (/obj/machinery/camera/network/research{c_tag = "SCI - Server Room"},/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled/dark,/area/server) "bfU" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer_1"; use_power = 1; power_setting = 20; set_temperature = 73},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/server) @@ -3030,7 +3030,7 @@ "bgn" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai_upload) "bgo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/central) "bgp" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/camera/network/civilian{c_tag = "CIV - Park Port"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden) -"bgq" = (/obj/effect/floor_decal/spline/plain{ icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "hos"; name = "Statue"},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"bgq" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "hos"; name = "Statue"},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bgs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bgt" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) @@ -3054,9 +3054,9 @@ "bgL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bgM" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 16},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bgN" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/cryo) -"bgO" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bgO" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bgP" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) -"bgQ" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bgQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bgR" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgS" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgT" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) @@ -3107,7 +3107,7 @@ "bhM" = (/turf/simulated/wall/r_wall,/area/ai) "bhN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/vault/bolted{name = "AI core"; req_access = list(16)},/obj/machinery/door/blast/regular{id = "AICore"; name = "AI core maintenance hatch"},/turf/simulated/floor/bluegrid,/area/ai_upload) "bhO" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/central) -"bhP" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) +"bhP" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bhQ" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bhR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hydroponics/garden) "bhS" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hydroponics/garden) @@ -3155,7 +3155,7 @@ "biI" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/research_shuttle) "biJ" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) "biK" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server) -"biL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server) +"biL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server) "biM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/server) "biN" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/tiled/dark,/area/server) "biO" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/tiled/dark,/area/server) @@ -3254,7 +3254,7 @@ "bkD" = (/obj/structure/table/woodentable,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/hydroponics/garden) "bkE" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hydroponics/garden) "bkF" = (/obj/structure/bed/chair/wood,/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"bkG" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sunnybush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/grass,/area/hydroponics/garden) +"bkG" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sunnybush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/grass,/area/hydroponics/garden) "bkH" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "bkI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "bkJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled,/area/medical/surgeryobs) @@ -3273,7 +3273,7 @@ "bkW" = (/obj/structure/bed/chair/wheelchair,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bkX" = (/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bkY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/cryo) -"bkZ" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bkZ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bla" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/steel,/area/medical/cryo) "blb" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "blc" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) @@ -3337,7 +3337,7 @@ "bmi" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/lab) "bmj" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table/standard,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/effect/floor_decal/corner/purple/full{dir = 1},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab) "bmk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) -"bml" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/teleporter) +"bml" = (/obj/structure/closet/crate,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled,/area/teleporter) "bmm" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/teleporter) "bmn" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Steve"; pixel_y = 15},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/dark,/area/ai) "bmo" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/dark,/area/ai) @@ -3387,10 +3387,10 @@ "bng" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/research/station) "bnh" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_outer"; locked = 1; name = "Research Elevator Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "exterior access button"; pixel_x = -6; pixel_y = -26; req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/rnd/docking) "bni" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/docking) -"bnj" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/docking) -"bnk" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_inner"; locked = 1; name = "Research Elevator Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/docking) -"bnl" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/docking) -"bnm" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/docking) +"bnj" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/docking) +"bnk" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_inner"; locked = 1; name = "Research Elevator Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/docking) +"bnl" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/docking) +"bnm" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/docking) "bnn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/docking) "bno" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Research Dock Hallway"; req_access = list(47)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/rnd/docking) "bnp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/rnd/docking) @@ -3503,7 +3503,7 @@ "bps" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{dir = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 21},/obj/item/device/radio/intercom{broadcasting = 0; frequency = 1343; name = "Private Channel"; pixel_x = 0; pixel_y = -21},/obj/item/device/radio/intercom{broadcasting = 1; dir = 4; listening = 1; name = "Common Channel"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/ai) "bpt" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/grass,/area/hydroponics/garden) "bpu" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) -"bpv" = (/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) +"bpv" = (/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) "bpw" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bpx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bpy" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/northern_star{c_tag = "Hall - Central Primary Starboard Mid 1"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) @@ -3663,7 +3663,7 @@ "bsw" = (/obj/structure/bed/chair/wood{dir = 8},/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bsx" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bsy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) -"bsz" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsz" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bsA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bsB" = (/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/structure/table/glass,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) "bsC" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/med_data/laptop,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "MED - Lobby Fore"; dir = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -3774,13 +3774,13 @@ "buD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "buE" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "buF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) -"buG" = (/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"buG" = (/obj/structure/flora/pottedplant{icon_state = "plant-01"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buI" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buK" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"buM" = (/obj/machinery/clonepod{biomass = 600},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"buM" = (/obj/machinery/clonepod/full,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "buN" = (/obj/machinery/computer/cloning,/obj/effect/floor_decal/corner/mauve{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "buO" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "buP" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) @@ -3926,7 +3926,7 @@ "bxz" = (/obj/machinery/disposal,/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/medical/morgue) "bxA" = (/turf/simulated/floor/tiled,/area/medical/morgue) "bxB" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) -"bxC" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) +"bxC" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bxD" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) "bxE" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bxF" = (/obj/effect/floor_decal/corner/lime{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4016,7 +4016,7 @@ "bzl" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) "bzm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) "bzn" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) -"bzo" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled,/area/medical/morgue) +"bzo" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled,/area/medical/morgue) "bzp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_fore) "bzq" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/virology) "bzr" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virology_airlock_control"; name = "Virology Access Console"; pixel_x = 8; pixel_y = -22; tag_exterior_door = "virology_airlock_exterior"; tag_interior_door = "virology_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/corner/lime{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4039,7 +4039,7 @@ "bzI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/auxsolarport) "bzJ" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Fore Port"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/auxsolarport) "bzK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) -"bzL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/turf/simulated/floor,/area/maintenance/research) +"bzL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/turf/simulated/floor,/area/maintenance/research) "bzM" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/maintenance/research) "bzN" = (/obj/structure/closet/emcloset,/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,/area/maintenance/research) "bzO" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -25},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/disposal) @@ -4143,7 +4143,7 @@ "bBI" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor,/area/maintenance/auxsolarport) "bBJ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_tool_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_tool_pump"; tag_chamber_sensor = "solar_tool_sensor"; tag_exterior_door = "solar_tool_outer"; tag_interior_door = "solar_tool_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 0; pixel_y = -26},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor,/area/maintenance/auxsolarport) "bBK" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/auxsolarport) -"bBL" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_access = list(11,13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/auxsolarport) +"bBL" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_access = list(11,13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/auxsolarport) "bBM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/auxsolarport) "bBN" = (/obj/effect/decal/cleanable/dirt,/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,/area/maintenance/auxsolarport) "bBO" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/auxsolarport) @@ -4152,12 +4152,12 @@ "bBR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/research) "bBS" = (/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access = list(12)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/maintenance/disposal) "bBT" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor,/area/maintenance/disposal) -"bBU" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bBU" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bBV" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) -"bBW" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 10},/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bBW" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bBX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bBY" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) -"bBZ" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/item/clothing/glasses/science,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bBZ" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar/red,/obj/item/clothing/glasses/science,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bCa" = (/obj/structure/table/reinforced,/obj/machinery/button/ignition{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bCb" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the proceedings inside the test chamber."; name = "Test Chamber Monitor"; network = list("Miscellaneous Reseach"); pixel_x = 32; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/purple,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bCc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/research{c_tag = "SCI - Research Hallway Center"; dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) @@ -4277,7 +4277,7 @@ "bEm" = (/obj/structure/closet/secure_closet/hydroponics,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled,/area/hydroponics) "bEn" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/hydroponics) "bEo" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/structure/closet/secure_closet/hydroponics,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) -"bEp" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) +"bEp" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/tool/crowbar,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) "bEq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access = list(35)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hydroponics) "bEr" = (/obj/machinery/navbeacon/delivery/south{location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading,/turf/simulated/floor/tiled,/area/hydroponics) "bEs" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/kitchen) @@ -4313,7 +4313,7 @@ "bEW" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/medical/morgue) "bEX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bEY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) -"bEZ" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) +"bEZ" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) "bFa" = (/obj/structure/morgue,/turf/simulated/floor/tiled,/area/medical/morgue) "bFb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/morgue) "bFc" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4346,7 +4346,7 @@ "bFD" = (/turf/simulated/wall/r_wall,/area/assembly/robotics) "bFE" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{name = "Robotics Desk"; req_access = list(29)},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/assembly/robotics) "bFF" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) -"bFG" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) +"bFG" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bFH" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bFI" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bFJ" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = 30},/obj/item/weapon/folder/blue_hop,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) @@ -4395,9 +4395,9 @@ "bGA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGD" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bGD" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGE" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGF" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bGF" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGG" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/morgue) "bGH" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bGI" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/morgue) @@ -4488,16 +4488,16 @@ "bIp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) "bIq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/medical/morgue) "bIr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) -"bIs" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) +"bIs" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) "bIt" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) "bIu" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/camera/network/medbay{c_tag = "MED - Morgue"; dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bIv" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) -"bIw" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) +"bIw" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) "bIx" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access = list(39)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -24; pixel_y = 0; req_access = list(39)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/virology) "bIy" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/medical/virology) "bIz" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research) "bIA" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) -"bIB" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bIB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) "bIC" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "map_injector"; id = "n2_in"; use_power = 1},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) "bID" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research) "bIE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/research) @@ -4538,7 +4538,7 @@ "bJn" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room"; req_access = list(28)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/kitchen) "bJo" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Central Primary Starboard Mid 3"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bJp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) -"bJq" = (/obj/effect/floor_decal/corner/paleblue/full,/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bJq" = (/obj/effect/floor_decal/corner/paleblue/full,/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bJr" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception) "bJs" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Lobby Aft"; dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/reception) "bJt" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/newscaster{pixel_y = -30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -4651,7 +4651,7 @@ "bLw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bLx" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bLy" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft{name = "Medical Delivery"; req_access = list(5)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/medical/patient_wing) -"bLz" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon/delivery/west{location = "Medbay"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) +"bLz" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon/delivery/west{location = "Medbay"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) "bLA" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/tiled/dark,/area/medical/virologyaccess) "bLB" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bLC" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/medical/virologyaccess) @@ -4685,7 +4685,7 @@ "bMe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/standard,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/assembly/robotics) "bMf" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) "bMg" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) -"bMh" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bMh" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/turf/simulated/floor/tiled,/area/assembly/robotics) "bMi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics) "bMj" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bMk" = (/obj/structure/closet/secure_closet/hop2,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) @@ -4725,7 +4725,7 @@ "bMS" = (/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bMT" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bMU" = (/obj/effect/floor_decal/corner/beige{dir = 5},/obj/structure/sink{dir = 2; icon_state = "sink"; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/chemistry) -"bMV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/beige{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bMV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/tool/screwdriver,/obj/effect/floor_decal/corner/beige{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bMW" = (/obj/machinery/button/remote/blast_door{id = "chemwindow"; name = "Pharmacy Windows Shutter Control"; pixel_x = 0; pixel_y = 24; pixel_z = 0},/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/effect/floor_decal/corner/beige{dir = 5},/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bMX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry) "bMY" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/obj/random/medical,/obj/random/medical,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) @@ -4762,7 +4762,7 @@ "bND" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bNE" = (/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bNF" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/virologyaccess) -"bNG" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/shuttle/mining/station) +"bNG" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/shuttle/mining/station) "bNH" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bNI" = (/obj/machinery/computer/shuttle_control/mining{name = "mining elevator control console"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bNJ" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) @@ -4861,7 +4861,7 @@ "bPy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bPz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bPA" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/medical/virologyaccess) -"bPB" = (/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/shuttle/mining/station) +"bPB" = (/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/shuttle/mining/station) "bPC" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bPD" = (/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bPE" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) @@ -4909,7 +4909,7 @@ "bQu" = (/obj/machinery/door/airlock{name = "Private Restroom"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bQv" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bQw" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) -"bQx" = (/obj/machinery/navbeacon/delivery/east{location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"bQx" = (/obj/machinery/navbeacon/delivery/east{location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/bar) "bQy" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar) "bQz" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/item/weapon/storage/secure/safe{pixel_z = 30},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bQA" = (/obj/structure/reagent_dispensers/beerkeg,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -4957,7 +4957,7 @@ "bRq" = (/turf/simulated/wall,/area/hallway/secondary/escape/medical_escape_pod_hallway) "bRr" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Escape Pod"},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) "bRs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "Medical Escape Pod"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) -"bRt" = (/obj/structure/ore_box,/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/shuttle/mining/station) +"bRt" = (/obj/structure/ore_box,/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/shuttle/mining/station) "bRu" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_one_access = list(13,48); tag_door = "mining_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bRv" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research) "bRw" = (/obj/effect/decal/cleanable/generic,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/maintenance/research) @@ -5000,7 +5000,7 @@ "bSh" = (/obj/item/weapon/stool/padded,/obj/machinery/light{dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bSi" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bSj" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bSk" = (/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) +"bSk" = (/obj/structure/flora/pottedplant{icon_state = "plant-01"},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "bSl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bSm" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access = list(28)},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bSn" = (/obj/machinery/door/blast/shutters{dir = 2; id = "kitchen"; layer = 3.3; name = "Kitchen Shutters"},/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -5060,7 +5060,7 @@ "bTp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora"; dir = 2},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora) "bTq" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora) "bTr" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) -"bTs" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 1},/obj/item/weapon/wrench,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bTs" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 1},/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bTt" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/biogenerator,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bTu" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/seed_extractor,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bTv" = (/obj/machinery/reagentgrinder,/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) @@ -5068,7 +5068,7 @@ "bTx" = (/obj/structure/table/standard,/obj/machinery/light,/obj/structure/closet/secure_closet/medical_wall{name = "anesthetic closet"; pixel_x = -32; req_access = list(29)},/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/weapon/storage/box/gloves,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bTy" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bTz" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bTA" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/hemostat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bTA" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/hemostat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bTB" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light,/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bTC" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/assembly/robotics) "bTD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_four) @@ -5078,7 +5078,7 @@ "bTH" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bTI" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera/network/command{c_tag = "COM - Conference Room"},/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bTJ" = (/turf/simulated/floor/wood,/area/bridge/meeting_room) -"bTK" = (/obj/structure/table/woodentable,/obj/item/device/retail_scanner/command{ icon_state = "retail_idle"; dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bTK" = (/obj/structure/table/woodentable,/obj/item/device/retail_scanner/command{icon_state = "retail_idle"; dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bTL" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Bridge"},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bTM" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway) "bTN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{dir = 6},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway) @@ -5154,7 +5154,7 @@ "bVf" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora) "bVg" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora) "bVh" = (/obj/effect/floor_decal/corner/green/full,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Port to Isolation"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) -"bVi" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bVi" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bVj" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bVk" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bVl" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/table/glass,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 30; pixel_y = 0},/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) @@ -5173,7 +5173,7 @@ "bVy" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = list(19)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bVz" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/bridge_hallway) "bVA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{dir = 6},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge_hallway) -"bVB" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bVB" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bVC" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bVD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bVE" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 28},/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -5193,7 +5193,7 @@ "bVS" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) "bVT" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) "bVU" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) -"bVV" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cash_register/civilian{ icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) +"bVV" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cash_register/civilian{icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) "bVW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria) "bVX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central_two) "bVY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chemwindow"; name = "Chemistry Window Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry) @@ -5201,7 +5201,7 @@ "bWa" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bWb" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bWc" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) -"bWd" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/structure/sign/poster{pixel_x = 0; pixel_y = -32},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"bWd" = (/obj/structure/table/rack,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/structure/sign/poster{pixel_x = 0; pixel_y = -32},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bWe" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bWf" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bWg" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_c) @@ -5377,9 +5377,9 @@ "bZu" = (/turf/simulated/wall,/area/maintenance/cargo) "bZv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/cargo) "bZw" = (/obj/machinery/door/window/northright{name = "Xenoflora Containment"; req_access = list(47)},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) -"bZx" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) +"bZx" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) "bZy" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) -"bZz" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) +"bZz" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_storage) "bZA" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bZB" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "bZC" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) @@ -5414,7 +5414,7 @@ "caf" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cag" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor/lino,/area/crew_quarters/bar) "cah" = (/turf/simulated/floor/lino,/area/crew_quarters/bar) -"cai" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{ icon_state = "register_idle"; dir = 8},/obj/machinery/door/blast/shutters{dir = 4; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"cai" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{icon_state = "register_idle"; dir = 8},/obj/machinery/door/blast/shutters{dir = 4; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "caj" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "cak" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "cal" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) @@ -5489,7 +5489,7 @@ "cbC" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "cbD" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "cbE" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/wood,/area/crew_quarters/captain) -"cbF" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/screwdriver,/obj/item/weapon/flame/lighter/zippo,/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/machinery/button/remote/blast_door{id = "bar"; name = "Bar Shutters"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"cbF" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/tool/screwdriver,/obj/item/weapon/flame/lighter/zippo,/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/machinery/button/remote/blast_door{id = "bar"; name = "Bar Shutters"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cbG" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) "cbH" = (/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cbI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) @@ -5501,7 +5501,7 @@ "cbO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway) "cbP" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway) "cbQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/pink{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway) -"cbR" = (/obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1"},/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"},/turf/simulated/floor,/area/maintenance/medbay_aft) +"cbR" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"},/turf/simulated/floor,/area/maintenance/medbay_aft) "cbS" = (/turf/simulated/floor,/area/maintenance/medbay_aft) "cbT" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/maintenance/medbay_aft) "cbU" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_e) @@ -5542,7 +5542,7 @@ "ccD" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/reagent_containers/glass/rag,/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/lino,/area/crew_quarters/bar) "ccE" = (/obj/machinery/door/window/southleft{name = "Bar"; req_access = list(25)},/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) "ccF" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 2; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) -"ccG" = (/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"ccG" = (/obj/structure/flora/pottedplant{icon_state = "plant-01"},/turf/simulated/floor/tiled,/area/crew_quarters/bar) "ccH" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "ccI" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "ccJ" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) @@ -5577,7 +5577,7 @@ "cdm" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/button/remote/blast_door{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 0; pixel_y = -26; req_access = list(29)},/turf/simulated/floor/tiled,/area/assembly/chargebay) "cdn" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "cdo" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) -"cdp" = (/obj/machinery/computer/station_alert/all,/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"cdp" = (/obj/machinery/computer/station_alert/all,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled,/area/bridge) "cdq" = (/obj/machinery/computer/power_monitor,/obj/effect/floor_decal/corner/yellow{dir = 5},/turf/simulated/floor/tiled,/area/bridge) "cdr" = (/obj/machinery/computer/rcon,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow/full{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/bridge) "cds" = (/obj/machinery/computer/shuttle_control/mining,/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/machinery/camera/network/command{c_tag = "COM - Bridge Port"},/turf/simulated/floor/tiled,/area/bridge) @@ -5739,7 +5739,7 @@ "cgs" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/maintenance/medbay_aft) "cgt" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/medbay_aft) "cgu" = (/turf/simulated/floor/plating,/area/maintenance/medbay_aft) -"cgv" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor,/area/maintenance/medbay_aft) +"cgv" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor,/area/maintenance/medbay_aft) "cgw" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) "cgx" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/shuttle/large_escape_pod1/station) "cgy" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) @@ -5858,7 +5858,7 @@ "ciH" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/aicard,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/blue/full,/obj/machinery/light,/turf/simulated/floor/tiled,/area/bridge) "ciI" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/simulated/floor/tiled,/area/bridge) "ciJ" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/white/full,/turf/simulated/floor/tiled,/area/bridge) -"ciK" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/white/full{ icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"ciK" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/bridge) "ciL" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/blue/full,/obj/machinery/light,/turf/simulated/floor/tiled,/area/bridge) "ciM" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/bridge) "ciN" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/bridge) @@ -5886,7 +5886,7 @@ "cjj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) "cjk" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/storage/box/lights/mixed,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) "cjl" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) -"cjm" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) +"cjm" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "cjn" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "cjo" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "cjp" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) @@ -6066,7 +6066,7 @@ "cmH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_three) "cmI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_three) "cmJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_three) -"cmK" = (/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three) +"cmK" = (/obj/structure/flora/pottedplant{icon_state = "plant-01"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three) "cmL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three) "cmM" = (/obj/structure/safe,/obj/item/clothing/under/color/yellow,/obj/item/key,/obj/item/toy/katana,/obj/item/weapon/melee/chainofcommand,/obj/item/weapon/disk/nuclear{name = "authentication disk"},/obj/item/weapon/moneybag/vault,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "cmN" = (/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) @@ -6127,7 +6127,7 @@ "cnQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office) "cnR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office) "cnS" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/brown{dir = 6},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) -"cnT" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/tiled,/area/quartermaster/foyer) +"cnT" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cnU" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cnV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cnW" = (/obj/effect/floor_decal/corner/brown{dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/quartermaster/foyer) @@ -6248,7 +6248,7 @@ "cqh" = (/obj/structure/closet/crate/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/medbay_aft) "cqi" = (/obj/machinery/autolathe,/obj/effect/floor_decal/corner/brown{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office) "cqj" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/office) -"cqk" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/office) +"cqk" = (/obj/machinery/computer/supplycomp/control,/turf/simulated/floor/tiled,/area/quartermaster/office) "cql" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/office) "cqm" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cqn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/foyer) @@ -6487,7 +6487,7 @@ "cuM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking_hallway) "cuN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking_hallway) "cuO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/vacant/vacant_shop) -"cuP" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) +"cuP" = (/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cuQ" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cuR" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 12},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "cuS" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe Back Room"; dir = 2},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) @@ -6519,7 +6519,7 @@ "cvs" = (/obj/structure/curtain/open/shower,/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12) "cvt" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/office) "cvu" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/recharger,/turf/simulated/floor/tiled,/area/quartermaster/office) -"cvv" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/brown{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/device/retail_scanner/civilian{ icon_state = "retail_idle"; dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) +"cvv" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/brown{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/device/retail_scanner/civilian{icon_state = "retail_idle"; dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) "cvw" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/office) "cvx" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cvy" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/status_display/supply_display{pixel_y = -32},/turf/simulated/floor/tiled,/area/quartermaster/foyer) @@ -6703,7 +6703,7 @@ "cyU" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Residential Elevator Starboard"; dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator) "cyV" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cyW" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) -"cyX" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 2; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/obj/machinery/cash_register/civilian{ icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"cyX" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 2; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/obj/machinery/cash_register/civilian{icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cyY" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 2; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cyZ" = (/obj/machinery/door/window/southright{name = "Coffee Shop"; req_one_access = list(25,28)},/obj/machinery/door/blast/shutters{dir = 2; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cza" = (/obj/machinery/door/airlock/multi_tile/glass,/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) @@ -6758,7 +6758,7 @@ "czX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/quartermaster/qm) "czY" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/turf/simulated/floor/tiled,/area/quartermaster/qm) "czZ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cAa" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/qm) +"cAa" = (/obj/machinery/computer/supplycomp/control,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cAb" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/apmaint) "cAc" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/apmaint) "cAd" = (/obj/structure/table/rack,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor,/area/maintenance/apmaint) @@ -6789,7 +6789,7 @@ "cAC" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cAD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cAE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) -"cAF" = (/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"cAF" = (/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/obj/structure/flora/pottedplant{icon_state = "plant-01"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cAG" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cAH" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cAI" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) @@ -6874,7 +6874,7 @@ "cCj" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/maintenance/evahallway) "cCk" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/vacant/vacant_shop) "cCl" = (/obj/effect/floor_decal/corner/brown{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) -"cCm" = (/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"cCm" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cCn" = (/obj/effect/floor_decal/corner/yellow{dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cCo" = (/obj/effect/floor_decal/corner/yellow{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cCp" = (/obj/effect/floor_decal/corner/yellow{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) @@ -6990,7 +6990,7 @@ "cEv" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cEw" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cEx" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cEy" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/engine,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"cEy" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/engine,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cEz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) "cEA" = (/obj/structure/closet,/obj/item/weapon/storage/backpack/dufflebag,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cEB" = (/obj/structure/closet/secure_closet/quartermaster,/turf/simulated/floor/tiled,/area/quartermaster/qm) @@ -7052,7 +7052,7 @@ "cFF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage) "cFG" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; pixel_y = 0; req_one_access = list(13,31); tag_door = "cargo_bay_door"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Bay Port"; dir = 4; name = "security camera"},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cFH" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cFI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/trolley,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"cFI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cFJ" = (/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/apmaint) "cFK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cFL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/space_heater,/turf/simulated/floor,/area/maintenance/apmaint) @@ -7082,7 +7082,7 @@ "cGj" = (/obj/effect/floor_decal/corner/yellow{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cGk" = (/obj/effect/floor_decal/corner/yellow{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cGl" = (/obj/effect/floor_decal/corner/yellow{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) -"cGm" = (/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"cGm" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cGn" = (/obj/effect/floor_decal/corner/brown{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "cGo" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway2) "cGp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/locker) @@ -7103,7 +7103,7 @@ "cGE" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cGF" = (/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cGG" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cGH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/trolley,/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Bay Starboard"; dir = 8; name = "security camera"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"cGH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley,/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Bay Starboard"; dir = 8; name = "security camera"},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cGI" = (/turf/simulated/wall,/area/quartermaster/warehouse) "cGJ" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/effect/decal/cleanable/cobweb,/obj/effect/floor_decal/corner/brown/full{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cGK" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) @@ -7206,7 +7206,7 @@ "cID" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cIE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) "cIF" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cIG" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/trolley,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"cIG" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cIH" = (/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Warehouse"; dir = 4; name = "security camera"},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cII" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cIJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) @@ -7336,7 +7336,7 @@ "cLd" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/longue_area) "cLe" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/longue_area) "cLf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/longue_area) -"cLg" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway2) +"cLg" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway2) "cLh" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/soap,/obj/random/soap,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet) "cLi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet) "cLj" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet) @@ -7421,7 +7421,7 @@ "cMK" = (/obj/structure/curtain/open/shower,/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_8) "cML" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) "cMM" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/status_display/supply_display{pixel_y = -32},/turf/simulated/floor,/area/quartermaster/storage) -"cMN" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"cMN" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cMO" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cMP" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse"; name = "Warehouse Door Control"; pixel_x = 26; pixel_y = 0; req_access = list(31)},/turf/simulated/floor/tiled,/area/quartermaster/storage) "cMQ" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse"; name = "Warehouse Door Control"; pixel_x = -26; pixel_y = 0; req_access = list(31)},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) @@ -7442,7 +7442,7 @@ "cNf" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) "cNg" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) "cNh" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) -"cNi" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/wirecutters,/turf/simulated/floor/tiled,/area/construction) +"cNi" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/tool/wirecutters,/turf/simulated/floor/tiled,/area/construction) "cNj" = (/obj/machinery/suit_cycler/medical,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "cNk" = (/obj/machinery/door/airlock/glass_command{name = "E.V.A. Cycler Access"; req_one_access = list(18)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva) "cNl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) @@ -7518,9 +7518,9 @@ "cOD" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva) "cOE" = (/obj/effect/floor_decal/corner/red/full,/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/security/checkpoint2) "cOF" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/checkpoint2) -"cOG" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/machinery/camera/network/security{c_tag = "SEC - Arrival Checkpoint"; dir = 1},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"cOG" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/device/flash,/obj/machinery/camera/network/security{c_tag = "SEC - Arrival Checkpoint"; dir = 1},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2) "cOH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) -"cOI" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) +"cOI" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) "cOJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) "cOK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) "cOL" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway) @@ -7767,7 +7767,7 @@ "cTs" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "cTt" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "cTu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/standard,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmos RC"; pixel_x = 0; pixel_y = 28},/obj/item/device/t_scanner,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/radio/headset/headset_eng,/obj/item/weapon/cartridge/atmos,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/obj/item/weapon/cartridge/atmos,/obj/item/device/pipe_painter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"cTv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/standard,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/cell_charger,/obj/item/weapon/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos) +"cTv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/standard,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/cell_charger,/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos) "cTw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table/standard,/obj/machinery/newscaster{pixel_y = 30},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/belt/utility/atmostech,/obj/item/weapon/storage/belt/utility/atmostech,/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Fore Starboard"; dir = 2},/turf/simulated/floor/tiled,/area/engineering/atmos) "cTx" = (/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/visible/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/atmos) "cTy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -7815,7 +7815,7 @@ "cUo" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) "cUp" = (/obj/machinery/newscaster{pixel_x = 31; pixel_y = 3},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) "cUq" = (/turf/simulated/wall,/area/crew_quarters/visitor_dining) -"cUr" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dining) +"cUr" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dining) "cUs" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dining) "cUt" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dining) "cUu" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dining) @@ -7825,7 +7825,7 @@ "cUy" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cUz" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cUA" = (/turf/simulated/wall,/area/crew_quarters/visitor_lodging) -"cUB" = (/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) +"cUB" = (/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cUC" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cUD" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cUE" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -7990,7 +7990,7 @@ "cXH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cXI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cXJ" = (/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) -"cXK" = (/obj/structure/closet/crate,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/yellow,/obj/item/weapon/bedsheet/purple,/obj/item/weapon/bedsheet/red,/obj/item/weapon/bedsheet/brown,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) +"cXK" = (/obj/structure/closet/crate,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/yellow,/obj/item/weapon/bedsheet/purple,/obj/item/weapon/bedsheet/red,/obj/item/weapon/bedsheet/brown,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cXL" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "cXM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) "cXN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8056,19 +8056,19 @@ "cYV" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cYW" = (/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cYX" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) -"cYY" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/item/device/communicator,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) +"cYY" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/item/device/communicator,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cYZ" = (/obj/structure/closet/wardrobe/suit,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cZa" = (/obj/structure/closet/wardrobe/xenos,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cZb" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/item/clothing/accessory/storage/knifeharness,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cZc" = (/obj/structure/closet/wardrobe/white,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cZd" = (/obj/structure/closet/wardrobe/grey,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) -"cZe" = (/obj/structure/closet/wardrobe/black,/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/obj/random/maintenance/clean,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) -"cZf" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) +"cZe" = (/obj/structure/closet/wardrobe/black,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/obj/random/maintenance/clean,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) +"cZf" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) "cZg" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "cZh" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos) -"cZi" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"cZi" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "cZj" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"cZk" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"cZk" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "cZl" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "cZm" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/atmos) "cZn" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8081,7 +8081,7 @@ "cZu" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/engineering/break_room) "cZv" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/carpet,/area/engineering/break_room) "cZw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet,/area/engineering/break_room) -"cZx" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "ENG - Foyer"; dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer) +"cZx" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "ENG - Foyer"; dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer) "cZy" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZz" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) "cZA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) @@ -8116,7 +8116,7 @@ "dad" = (/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/wall/r_wall,/area/engineering/atmos) "dae" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "daf" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) -"dag" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Mixed Air Inlet Valve"},/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dag" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Mixed Air Inlet Valve"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dah" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) "dai" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) "daj" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8129,13 +8129,13 @@ "daq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/engineering/break_room) "dar" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/reinforced,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/turf/simulated/floor/tiled,/area/engineering/break_room) "das" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/engineering/break_room) -"dat" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer) +"dat" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer) "dau" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) "dav" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/blue{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/effect/floor_decal/corner/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) "daw" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/yellow{dir = 1},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/foyer) "dax" = (/obj/machinery/computer/station_alert,/obj/effect/floor_decal/corner/yellow/full{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) "day" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engineering_monitoring) -"daz" = (/obj/machinery/computer/power_monitor,/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) +"daz" = (/obj/machinery/computer/power_monitor,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 8},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "daA" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "daB" = (/obj/structure/table/reinforced,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/machinery/alarm{pixel_y = 25},/obj/effect/floor_decal/corner/yellow{dir = 5},/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 6; pixel_y = -12; req_access = newlist(); req_one_access = list(10,24)},/obj/machinery/button/remote/blast_door{id = "englockdown"; name = "Engineering Lockdown"; pixel_x = -6; pixel_y = -12; req_access = list(10)},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "daC" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light_switch{pixel_x = -12; pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) @@ -8161,16 +8161,16 @@ "daW" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "Atmos Tank - Air"; dir = 4},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) "daX" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) "daY" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) -"daZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) +"daZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) "dba" = (/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Air Tank Bypass Pump"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dbb" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) "dbc" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dbd" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/engineering/atmos) "dbe" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "dbf" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dbg" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dbh" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dbi" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{ icon_state = "map"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dbg" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dbh" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dbi" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dbj" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) "dbk" = (/obj/machinery/meter,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible/red{dir = 4; initialize_directions = 11},/turf/simulated/floor/tiled,/area/engineering/atmos) "dbl" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8200,7 +8200,7 @@ "dbJ" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "dbK" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "dbL" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) -"dbM" = (/obj/machinery/light,/obj/structure/flora/pottedplant{ icon_state = "plant-01"},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) +"dbM" = (/obj/machinery/light,/obj/structure/flora/pottedplant{icon_state = "plant-01"},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "dbN" = (/obj/machinery/atm{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "dbO" = (/obj/structure/closet/wardrobe/suit,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "dbP" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) @@ -8225,7 +8225,7 @@ "dci" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dcj" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dck" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dcl" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dcl" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dcm" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos) "dcn" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) "dco" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engineering/break_room) @@ -8273,7 +8273,7 @@ "dde" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "ddf" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "ddg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) -"ddh" = (/obj/structure/flora/pottedplant{ icon_state = "plant-06"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) +"ddh" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) "ddi" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "ddj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "ddk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) @@ -8282,15 +8282,15 @@ "ddn" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "ddo" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "ddp" = (/obj/structure/closet/crate,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/rods,/turf/simulated/floor/tiled,/area/vacant/vacant_site2) -"ddq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) +"ddq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "ddr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Air Mix to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dds" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) -"ddt" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{ icon_state = "map"; dir = 8},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"ddu" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ddt" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map"; dir = 8},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ddu" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) "ddv" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/engineering/atmos) "ddw" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/engineering/atmos) "ddx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) -"ddy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ddy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) "ddz" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4; name = "Air to Ports"},/turf/simulated/floor/tiled,/area/engineering/atmos) "ddA" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos) "ddB" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8342,25 +8342,25 @@ "dev" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/sign/directions/medical{dir = 1; pixel_y = 32},/obj/structure/sign/directions/engineering{dir = 1; pixel_y = 32; pixel_z = -8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dew" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dex" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dey" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dez" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"deA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/medical{dir = 8; pixel_y = 32},/obj/structure/sign/directions/science{dir = 8; pixel_y = 32; pixel_z = -8},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/obj/structure/sign/directions/security{dir = 8; pixel_y = 32},/obj/structure/sign/directions/engineering{dir = 8; pixel_y = 32; pixel_z = -8},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deF" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"dey" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dez" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"deA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/medical{dir = 8; pixel_y = 32},/obj/structure/sign/directions/science{dir = 8; pixel_y = 32; pixel_z = -8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/obj/structure/sign/directions/security{dir = 8; pixel_y = 32},/obj/structure/sign/directions/engineering{dir = 8; pixel_y = 32; pixel_z = -8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deF" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "deG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deI" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deI" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "deJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deL" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 1"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/security{dir = 8; pixel_y = 32},/obj/structure/sign/directions/engineering{dir = 8; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 2"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"deQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deL" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 1"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/directions/security{dir = 8; pixel_y = 32},/obj/structure/sign/directions/engineering{dir = 8; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 2"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"deQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "deR" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) "deS" = (/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 3"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard) "deT" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/vacant/vacant_site2) @@ -8368,28 +8368,28 @@ "deV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "deW" = (/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) "deX" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "o2_in"; use_power = 1},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) -"deY" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos) -"deZ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dfa" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) -"dfb" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Port"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfc" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) +"deY" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos) +"deZ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dfa" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) +"dfb" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Port"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dfc" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) "dfd" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 2; tag_south = 1; tag_west = 3; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dfe" = (/obj/structure/dispenser,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dff" = (/turf/simulated/wall,/area/engineering/atmos) "dfg" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfh" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{ icon_state = "map"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dfh" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dfi" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Ports to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfj" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfk" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfl" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfm" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfn" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Hallway"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfo" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfp" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfq" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfr" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) -"dfs" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) -"dft" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfj" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dfk" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dfl" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfm" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfn" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Hallway"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfo" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfp" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfq" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfr" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dfs" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"dft" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) "dfu" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) "dfv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) "dfw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/westleft{name = "Engineering Reception Desk"; req_access = list(10); req_one_access = newlist()},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) @@ -8400,7 +8400,7 @@ "dfB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "dfC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/camera/network/engineering{c_tag = "ENG - Monitoring Room"; dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{dir = 10},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "dfD" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) -"dfE" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/effect/floor_decal/corner/yellow/full{ icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) +"dfE" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "dfF" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/engineering) "dfG" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/dock_escape_pod_hallway_port) "dfH" = (/obj/structure/sign/pods{dir = 1},/turf/simulated/wall,/area/hallway/secondary/escape/dock_escape_pod_hallway_port) @@ -8447,10 +8447,10 @@ "dgw" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) "dgx" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "o2_sensor"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) "dgy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dgz" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dgA" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) +"dgz" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dgA" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) "dgB" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Mixing"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dgC" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{ icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"dgC" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "dgD" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "dgE" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "dgF" = (/obj/structure/frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8490,18 +8490,18 @@ "dhn" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dho" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dhp" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dht" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhu" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhv" = (/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/power/apc/super/critical{dir = 2; is_critical = 1; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhw" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Port 3"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhy" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two;Airlock Three;Airlock Four"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock;escape_dock_snorth_airlock;escape_dock_ssouth_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_x = 0; pixel_y = -25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhz" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Port 4"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) -"dhB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dht" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhu" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhv" = (/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/power/apc/super/critical{dir = 2; is_critical = 1; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhw" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Port 3"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhy" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two;Airlock Three;Airlock Four"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock;escape_dock_snorth_airlock;escape_dock_ssouth_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_x = 0; pixel_y = -25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhz" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Port 4"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"dhB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dhC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dhD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) "dhE" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) @@ -8522,24 +8522,24 @@ "dhT" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/weldingtool,/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "dhU" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "dhV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) -"dhW" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos) -"dhX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dhW" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos) +"dhX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "dhY" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "dhZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Oxygen Outlet Valve"},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/engineering/atmos) "dia" = (/obj/machinery/atmospherics/pipe/manifold/visible/green,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "dib" = (/obj/machinery/atmospherics/omni/mixer{active_power_usage = 7500; tag_east = 0; tag_east_con = null; tag_north = 2; tag_north_con = null; tag_south = 1; tag_south_con = 0.79; tag_west = 1; tag_west_con = 0.21; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dic" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"did" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"did" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) "die" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "dif" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dig" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ icon_state = "map"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dig" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dih" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "dii" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dij" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dik" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dil" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dim" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"din" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ icon_state = "map"; dir = 1},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) +"din" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map"; dir = 1},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) "dio" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/corner/yellow{dir = 9},/turf/simulated/floor/tiled,/area/engineering/workshop) "dip" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/workshop) "diq" = (/turf/simulated/floor/tiled,/area/engineering/workshop) @@ -8599,14 +8599,14 @@ "djs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) "djt" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "dju" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "N2 to Mixing"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"djv" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{ icon_state = "map"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"djv" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{icon_state = "map"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "djw" = (/obj/machinery/atmospherics/tvalve/digital/mirrored{name = "Waste to Space"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"djx" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 10},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"djx" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 10},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "djy" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) "djz" = (/obj/machinery/atmospherics/valve/digital,/turf/simulated/floor/tiled,/area/engineering/atmos) "djA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "djB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) -"djC" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "intact"; dir = 5},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) +"djC" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact"; dir = 5},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) "djD" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/engineering/workshop) "djE" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/engineering/workshop) "djF" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Workshop"; req_one_access = list(11,24)},/turf/simulated/floor/tiled,/area/engineering/workshop) @@ -8658,14 +8658,14 @@ "dkz" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/vacant/vacant_site2) "dkA" = (/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) "dkB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "n2_in"; use_power = 1},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) -"dkC" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dkD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkC" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos) "dkE" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 5; tag_west = 4; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dkF" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkF" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkG" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkH" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dkI" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dkJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkI" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkK" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/wall/r_wall,/area/engineering/workshop) "dkL" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/tiled,/area/engineering/workshop) "dkM" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/workshop) @@ -8711,7 +8711,7 @@ "dlA" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) "dlB" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) "dlC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/effect/floor_decal/corner/red{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dlD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"dlD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "dlE" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 0; tag_south = 6; tag_west = 2; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dlF" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 1; tag_south = 7; tag_west = 2; use_power = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dlG" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8737,7 +8737,7 @@ "dma" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dmb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dmc" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dmd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/full{ icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dmd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dme" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dmf" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc/super/critical{dir = 4; is_critical = 1; name = "east bump"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dmg" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc/super/critical{dir = 8; is_critical = 1; name = "west bump"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) @@ -8762,8 +8762,8 @@ "dmz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Nitrogen Outlet Valve"},/obj/effect/floor_decal/corner/red/full,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) "dmA" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9; icon_state = "intact"},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "dmB" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dmC" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dmD" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dmC" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dmD" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dmE" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 10; icon_state = "intact"},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "dmF" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "dmG" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8783,13 +8783,13 @@ "dmU" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station) "dmV" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dmW" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "centcom_shuttle_dock_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dmX" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "centcom_shuttle_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "centcom_shuttle_dock_pump"; tag_chamber_sensor = "centcom_shuttle_dock_sensor"; tag_exterior_door = "centcom_shuttle_dock_outer"; tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "centcom_shuttle_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dmY" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dmX" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "centcom_shuttle_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "centcom_shuttle_dock_pump"; tag_chamber_sensor = "centcom_shuttle_dock_sensor"; tag_exterior_door = "centcom_shuttle_dock_outer"; tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "centcom_shuttle_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dmY" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dmZ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dna" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dnb" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dnc" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dnd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dnd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dne" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dnf" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dng" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/corner/white{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) @@ -8831,7 +8831,7 @@ "dnQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2) "dnR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dnS" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dnT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dnT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dnU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 2 Fore"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dnV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3) "dnW" = (/obj/machinery/light{dir = 8},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 3 Fore"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) @@ -8839,7 +8839,7 @@ "dnY" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dnZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D4) "doa" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) -"dob" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) +"dob" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "doc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 4 Fore"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dod" = (/turf/simulated/floor/tiled/freezer,/area/vacant/vacant_site2) "doe" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/vacant/vacant_site2) @@ -8847,7 +8847,7 @@ "dog" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "doh" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/atmos) "doi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/atmos) -"doj" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 10},/obj/effect/floor_decal/corner/black/full,/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Aft Port"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"doj" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 10},/obj/effect/floor_decal/corner/black/full,/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Aft Port"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dok" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank")},/obj/effect/floor_decal/corner/black{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/atmos) "dol" = (/obj/effect/floor_decal/corner/black/full{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "CO2 to Mixing"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dom" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "CO2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8857,7 +8857,7 @@ "doq" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Phoron to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dor" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Aft Starboard"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dos" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/red,/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dot" = (/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/red,/obj/machinery/atmospherics/binary/pump{dir = 1; name = "N2O to Transit"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dot" = (/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/red,/obj/machinery/atmospherics/binary/pump{dir = 1; name = "N2O to Transit"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dou" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "N2O to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dov" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dow" = (/obj/structure/closet/toolcloset,/obj/item/device/flashlight,/turf/simulated/floor/tiled,/area/engineering/workshop) @@ -8888,17 +8888,17 @@ "doV" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "doW" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "doX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9; icon_state = "intact"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) -"doY" = (/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 6},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) +"doY" = (/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 6},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "doZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9; icon_state = "intact"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "dpa" = (/turf/simulated/wall/r_wall,/area/maintenance/atmos_control) "dpb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(24)},/turf/simulated/floor,/area/maintenance/atmos_control) "dpc" = (/obj/structure/closet/toolcloset,/obj/item/device/flashlight,/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/workshop) "dpd" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/engineering/workshop) -"dpe" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/flashlight,/obj/item/weapon/wrench,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/workshop) +"dpe" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/flashlight,/obj/item/weapon/tool/wrench,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/workshop) "dpf" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/tiled,/area/engineering/workshop) "dpg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/item/stack/rods{amount = 50},/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/cell/high,/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/turf/simulated/floor/tiled,/area/engineering/workshop) "dph" = (/obj/structure/table/reinforced,/obj/item/device/floor_painter,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 3; name = "Engineering RC"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled,/area/engineering/workshop) -"dpi" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/workshop) +"dpi" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/workshop) "dpj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/workshop) "dpk" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid"; name_tag = "Engineering Subgrid"},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor,/area/maintenance/substation/engineering) "dpl" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Engineering"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/substation/engineering) @@ -8928,11 +8928,11 @@ "dpJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dpK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dpL" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/vacant/vacant_site2) -"dpM" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 6},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dpN" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dpO" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dpP" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dpQ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dpM" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 6},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dpN" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dpO" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dpP" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) +"dpQ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "dpR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/maintenance/atmos_control) "dpS" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/engineering/workshop) "dpT" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/engineering) @@ -8998,8 +8998,8 @@ "drb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engineering) "drc" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a2_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "d1a2_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "drd" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "d1a2_dock_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dre" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "d1a2_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "d1a2_dock_pump"; tag_chamber_sensor = "d1a2_dock_sensor"; tag_exterior_door = "d1a2_dock_outer"; tag_interior_door = "d1a2_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "d1a2_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"drf" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a2_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dre" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "d1a2_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "d1a2_dock_pump"; tag_chamber_sensor = "d1a2_dock_sensor"; tag_exterior_door = "d1a2_dock_outer"; tag_interior_door = "d1a2_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "d1a2_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"drf" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a2_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "drg" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "d1a2_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "drh" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dri" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) @@ -9058,21 +9058,21 @@ "dsj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering) "dsk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/engineering) "dsl" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dsm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dsn" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dso" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) -"dsp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_mech"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dsm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dsn" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dso" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dsp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_mech"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dsq" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dsr" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dss" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_north_mech"; pixel_y = 19},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dst" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_north_starboard_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsu" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_snorth_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_starboard_mech"; tag_airpump = "escape_dock_north_starboard_pump"; tag_chamber_sensor = "escape_dock_north_starboard_sensor"; tag_exterior_door = "escape_dock_north_starboard_outer"; tag_interior_door = "escape_dock_north_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_starboard_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsv" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dsw" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_snorth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dsu" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_snorth_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_starboard_mech"; tag_airpump = "escape_dock_north_starboard_pump"; tag_chamber_sensor = "escape_dock_north_starboard_sensor"; tag_exterior_door = "escape_dock_north_starboard_outer"; tag_interior_door = "escape_dock_north_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_starboard_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dsv" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dsw" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_snorth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dsx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dsy" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsz" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dsA" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_north_airlock"; master_tag = "arrivals_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_north_mech"; tag_airpump = "arrivals_dock_north_pump"; tag_chamber_sensor = "arrivals_dock_north_sensor"; tag_exterior_door = "arrivals_dock_north_outer"; tag_interior_door = "arrivals_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dsz" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dsA" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_north_airlock"; master_tag = "arrivals_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_north_mech"; tag_airpump = "arrivals_dock_north_pump"; tag_chamber_sensor = "arrivals_dock_north_sensor"; tag_exterior_door = "arrivals_dock_north_outer"; tag_interior_door = "arrivals_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dsB" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_north_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dsC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = -26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrival_dock_north_mech"; pixel_y = -19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dsD" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) @@ -9080,16 +9080,16 @@ "dsF" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dsG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/obj/item/tape/engineering,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dsH" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dsI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dsJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_fore_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dsK" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_fore_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) +"dsI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dsJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_fore_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dsK" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_fore_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dsL" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_three_fore_airlock"; name = "Airlock Console"; pixel_y = 30; req_access = list(13); tag_airpump = "dock_three_fore_pump"; tag_chamber_sensor = "dock_three_fore_sensor"; tag_exterior_door = "dock_three_fore_outer"; tag_interior_door = "dock_three_fore_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dsM" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_fore_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dsM" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_fore_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dsN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_fore_outer"; locked = 1; name = "Dock Three External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dsO" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_fore_outer"; locked = 1; name = "Dock Four External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dsP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "dock_four_fore_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) -"dsQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_four_fore_airlock"; name = "Airlock Console"; pixel_y = 30; req_access = list(13); tag_airpump = "dock_four_fore_pump"; tag_chamber_sensor = "dock_four_fore_sensor"; tag_exterior_door = "dock_four_fore_outer"; tag_interior_door = "dock_four_fore_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) -"dsR" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_fore_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) +"dsQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_four_fore_airlock"; name = "Airlock Console"; pixel_y = 30; req_access = list(13); tag_airpump = "dock_four_fore_pump"; tag_chamber_sensor = "dock_four_fore_sensor"; tag_exterior_door = "dock_four_fore_outer"; tag_interior_door = "dock_four_fore_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) +"dsR" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_fore_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dsS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_four_fore_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dsT" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dsU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/port) @@ -9250,8 +9250,8 @@ "dvT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/engineering) "dvU" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dvV" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "specops_dock_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dvW" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "specops_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "specops_dock_pump"; tag_chamber_sensor = "specops_dock_sensor"; tag_exterior_door = "specops_dock_outer"; tag_interior_door = "specops_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "specops_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dvX" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dvW" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "specops_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "specops_dock_pump"; tag_chamber_sensor = "specops_dock_sensor"; tag_exterior_door = "specops_dock_outer"; tag_interior_door = "specops_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "specops_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dvX" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dvY" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dvZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dwa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9269,15 +9269,15 @@ "dwm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dwn" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dwo" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"dwp" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"dwp" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dwq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dwr" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dws" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dwt" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_port_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = -25; req_one_access = list(11,24)},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dwu" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dwv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) -"dww" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) -"dwx" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) +"dww" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) +"dwx" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dwy" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/engineering{c_tag = "ENG - Hallway Starboard"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dwz" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dwA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = 30; pixel_y = -25; req_one_access = list(13,11,24)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) @@ -9329,22 +9329,22 @@ "dxu" = (/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed"; locked = 0; name = "Engine Access"; req_one_access = list(11)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/steel,/area/engineering/engine_airlock) "dxv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engineering/engine_airlock) "dxw" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) -"dxx" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dxx" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dxy" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dxz" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dxA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_starboard_airlock"; name = "exterior access button"; pixel_x = -4; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dxB" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_starboard_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dxC" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dxC" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dxD" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dxE" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dxF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/weapon/caution/cone,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dxG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dxH" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dxI" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_mid_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "dock_three_mid_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dxI" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_mid_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "dock_three_mid_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dxJ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dock_three_mid_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_access = list(13)},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_outer"; locked = 1; name = "Dock Three External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dxK" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_mid_outer"; locked = 1; name = "Dock Four External Access"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dock_four_mid_airlock"; name = "exterior access button"; pixel_x = -4; pixel_y = 26; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dxL" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "dock_four_mid_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "dock_four_mid_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) -"dxM" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) +"dxM" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dxN" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_mid_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dxO" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) "dxP" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Escape Pods Starboard 1"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) @@ -9379,34 +9379,34 @@ "dys" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "dyt" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dyu" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dyv" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dyw" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dyv" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dyw" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dyx" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_south_mech"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dyy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dyz" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dyA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dyB" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dyC" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_ssouth_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_south_starboard_mech"; tag_airpump = "escape_dock_south_starboard_pump"; tag_chamber_sensor = "escape_dock_south_starboard_sensor"; tag_exterior_door = "escape_dock_south_starboard_outer"; tag_interior_door = "escape_dock_south_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_starboard_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dyD" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dyE" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_ssouth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dyD" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dyE" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_ssouth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dyF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "arrivals_dock_south_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dyG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dyH" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_south_airlock"; master_tag = "arrivals_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_south_mech"; tag_airpump = "arrivals_dock_south_pump"; tag_chamber_sensor = "arrivals_dock_south_sensor"; tag_exterior_door = "arrivals_dock_south_outer"; tag_interior_door = "arrivals_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dyG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dyH" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_south_airlock"; master_tag = "arrivals_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_south_mech"; tag_airpump = "arrivals_dock_south_pump"; tag_chamber_sensor = "arrivals_dock_south_sensor"; tag_exterior_door = "arrivals_dock_south_outer"; tag_interior_door = "arrivals_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dyI" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dyJ" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_south_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dyK" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dyL" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dyM" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/tape/engineering,/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dyN" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/item/weapon/caution/cone,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dyO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_mid_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dyP" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) +"dyO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_mid_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dyP" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dyQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_three_mid_airlock"; name = "Airlock Console"; pixel_y = -30; req_access = list(13); tag_airpump = "dock_three_mid_pump"; tag_chamber_sensor = "dock_three_mid_sensor"; tag_exterior_door = "dock_three_mid_outer"; tag_interior_door = "dock_three_mid_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dyR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_mid_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dyS" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_outer"; locked = 1; name = "Dock Three External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dyT" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_mid_outer"; locked = 1; name = "Dock Four External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dyU" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "dock_four_mid_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dyV" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_four_mid_airlock"; name = "Airlock Console"; pixel_y = -30; req_access = list(13); tag_airpump = "dock_four_mid_pump"; tag_chamber_sensor = "dock_four_mid_sensor"; tag_exterior_door = "dock_four_mid_outer"; tag_interior_door = "dock_four_mid_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) -"dyW" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_mid_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) +"dyW" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_mid_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dyX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_four_mid_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dyY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dyZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) @@ -9531,8 +9531,8 @@ "dBo" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eng_starboard_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_access = newlist(); req_one_access = list(11,24)},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/engineering/aft_hallway) "dBp" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a4_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "d1a4_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dBq" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "d1a4_dock_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dBr" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "d1a4_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "d1a4_dock_pump"; tag_chamber_sensor = "d1a4_dock_sensor"; tag_exterior_door = "d1a4_dock_outer"; tag_interior_door = "d1a4_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "d1a4_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dBs" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a4_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) +"dBr" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "d1a4_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "d1a4_dock_pump"; tag_chamber_sensor = "d1a4_dock_sensor"; tag_exterior_door = "d1a4_dock_outer"; tag_interior_door = "d1a4_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "d1a4_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dBs" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "d1a4_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dBt" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "d1a4_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dBu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dBv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) @@ -9554,7 +9554,7 @@ "dBL" = (/turf/simulated/shuttle/floor,/area/shuttle/constructionsite/station) "dBM" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "engineering_shuttle"; pixel_x = 25; pixel_y = 5; req_one_access = list(13,11,24); tag_door = "engineering_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/constructionsite/station) "dBN" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_waste) -"dBO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_waste) +"dBO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_waste) "dBP" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_waste) "dBQ" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/engine_waste) "dBR" = (/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 500000; output_level = 500000; RCon_tag = "Engine - Main"},/obj/structure/cable,/obj/effect/engine_setup/smes/main,/turf/simulated/floor/plating,/area/engineering/engine_smes) @@ -9601,7 +9601,7 @@ "dCG" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/space,/area/space) "dCH" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/space,/area/space) "dCI" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/structure/lattice,/turf/space,/area/space) -"dCJ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "intact"; dir = 10},/turf/space,/area/space) +"dCJ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 10},/turf/space,/area/space) "dCK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dCL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dCM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) @@ -9618,7 +9618,7 @@ "dCX" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/syndicate_station/southwest) "dCY" = (/obj/machinery/computer/atmos_alert,/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/constructionsite/station) "dCZ" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/constructionsite/station) -"dDa" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) +"dDa" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dDb" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dDc" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 25; req_access = null; req_one_access = list(11,24)},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dDd" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9637,9 +9637,9 @@ "dDq" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor,/area/engineering/engine_room) "dDr" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/plating,/area/engineering/engine_room) "dDs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/obj/structure/lattice,/turf/space,/area/space) -"dDt" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space) +"dDt" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space) "dDu" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/obj/structure/lattice,/turf/space,/area/space) -"dDv" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "intact"; dir = 9},/obj/structure/lattice,/turf/space,/area/space) +"dDv" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 9},/obj/structure/lattice,/turf/space,/area/space) "dDw" = (/obj/structure/lattice,/obj/structure/grille/broken,/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space) "dDx" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dDy" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9667,7 +9667,7 @@ "dDU" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/shuttle/constructionsite/station) "dDV" = (/turf/simulated/floor,/area/engineering/engine_room) "dDW" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor,/area/engineering/engine_room) -"dDX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/engineering/engine_room) +"dDX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/engineering/engine_room) "dDY" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room) "dDZ" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9699,7 +9699,7 @@ "dEA" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room) "dEB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room) "dEC" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dED" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/engineering/engine_room) +"dED" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/engineering/engine_room) "dEE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor,/area/engineering/engine_room) "dEF" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEG" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9708,20 +9708,20 @@ "dEJ" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room) "dEK" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dEL" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 1"},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dEM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dEM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEN" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dEO" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room) "dEP" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room) "dEQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space) -"dER" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "intact"; dir = 9},/turf/space,/area/space) +"dER" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 9},/turf/space,/area/space) "dES" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) -"dET" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) +"dET" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dEU" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "trade_shuttle_dock_airlock"; pixel_x = 28; pixel_y = 0; req_one_access = list(13); tag_airpump = "trade_shuttle_dock_pump"; tag_chamber_sensor = "trade_shuttle_dock_sensor"; tag_exterior_door = "trade_shuttle_dock_outer"; tag_interior_door = "trade_shuttle_dock_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dEV" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "admin_shuttle_dock_airlock"; pixel_x = -28; pixel_y = 0; req_one_access = list(13); tag_airpump = "admin_shuttle_dock_pump"; tag_chamber_sensor = "admin_shuttle_dock_sensor"; tag_exterior_door = "admin_shuttle_dock_outer"; tag_interior_door = "admin_shuttle_dock_inner"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dEW" = (/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) +"dEW" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dEX" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dEY" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) -"dEZ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) +"dEZ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dFa" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_three_aft_airlock"; name = "Airlock Console"; pixel_x = 28; pixel_y = 0; req_access = list(13); tag_airpump = "dock_three_aft_pump"; tag_chamber_sensor = "dock_three_aft_sensor"; tag_exterior_door = "dock_three_aft_outer"; tag_interior_door = "dock_three_aft_inner"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dFb" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "nuke_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dFc" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "nuke_shuttle_dock_airlock"; pixel_x = 0; pixel_y = 30; req_access = list(0); req_one_access = list(13); tag_airpump = "nuke_shuttle_dock_pump"; tag_chamber_sensor = "nuke_shuttle_dock_sensor"; tag_exterior_door = "nuke_shuttle_dock_outer"; tag_interior_door = "nuke_shuttle_dock_inner"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) @@ -9731,14 +9731,14 @@ "dFg" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod4/station) "dFh" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station) "dFi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"dFj" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/cee{ icon_state = "warningcee"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"dFj" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dFk" = (/turf/space,/area/skipjack_station/southwest_solars) "dFl" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/turf/simulated/floor,/area/engineering/engine_room) "dFm" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dFn" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor,/area/engineering/engine_room) "dFo" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFp" = (/obj/machinery/power/emitter{anchored = 1; id = "EngineEmitter"; state = 2},/obj/structure/cable/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dFq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dFq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dFr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dFs" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFt" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9746,8 +9746,8 @@ "dFv" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFw" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dFx" = (/obj/machinery/atmospherics/binary/pump/high_power{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/engine_setup/pump_max,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dFy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dFz" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space) +"dFy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dFz" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space) "dFA" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 1 End"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "trade_shuttle_dock_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dFB" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "trade_shuttle_dock_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "trade_shuttle_dock_sensor"; pixel_x = 30; pixel_y = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dFC" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "admin_shuttle_dock_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "admin_shuttle_dock_sensor"; pixel_x = -30; pixel_y = 8},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) @@ -9778,7 +9778,7 @@ "dGb" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGc" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGd" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dGe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dGe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) "dGf" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dGg" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_dock_outer"; locked = 1; name = "Dock One External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) "dGh" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "trade_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = 28; pixel_y = -6; req_access = list(13)},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_dock_outer"; locked = 1; name = "Dock One External Access"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1) @@ -9799,7 +9799,7 @@ "dGw" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room) "dGx" = (/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core West"; dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGy" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dGz" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 8; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dGz" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 8; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGA" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) "dGB" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/meter,/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core East"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGC" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9815,18 +9815,18 @@ "dGM" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room) "dGN" = (/obj/machinery/atmospherics/unary/heat_exchanger{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dGO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dGP" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dGP" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGQ" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1438; icon_state = "map_injector"; id = "cooling_in"; name = "Coolant Injector"; pixel_y = 1; power_rating = 30000; use_power = 1; volume_rate = 700},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dGR" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = "engine_sensor"; output = 63},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dGS" = (/obj/machinery/atmospherics/unary/vent_pump/engine{dir = 1; external_pressure_bound = 100; external_pressure_bound_default = 0; frequency = 1438; icon_state = "map_vent_in"; id_tag = "cooling_out"; initialize_directions = 1; use_power = 1; pressure_checks = 1; pressure_checks_default = 1; pump_direction = 0},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dGT" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dGU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/engineering/engine_room) -"dGV" = (/obj/machinery/atmospherics/pipe/simple/visible/green{ icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dGU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dGV" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) "dGW" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGX" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room) "dGY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/starboard) "dGZ" = (/obj/machinery/atmospherics/unary/heat_exchanger,/turf/simulated/floor,/area/engineering/engine_room) -"dHa" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dHa" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dHc" = (/obj/machinery/power/supermatter{layer = 4},/obj/machinery/mass_driver{id = "enginecore"},/obj/effect/engine_setup/core,/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) "dHd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) @@ -9835,11 +9835,11 @@ "dHg" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHh" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room) "dHi" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor,/area/engineering/engine_room) -"dHj" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{ icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dHj" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHk" = (/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dHl" = (/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) "dHm" = (/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core South"; dir = 1},/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) -"dHn" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dHn" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHo" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHp" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHq" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -10175,4 +10175,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm index 7ed9493bda..cbdb8d3e61 100644 --- a/maps/northern_star/polaris-2.dmm +++ b/maps/northern_star/polaris-2.dmm @@ -379,7 +379,7 @@ "ho" = (/obj/structure/table/steel_reinforced,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hp" = (/obj/structure/table/steel_reinforced,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom) -"hr" = (/obj/vehicle/train/cargo/engine,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) +"hr" = (/obj/vehicle/train/engine,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hs" = (/turf/simulated/shuttle/floor/darkred,/area/shuttle/trade/centcom) "ht" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hu" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) @@ -395,7 +395,7 @@ "hE" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hF" = (/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/weldpack,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom) -"hH" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) +"hH" = (/obj/vehicle/train/trolley,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hI" = (/obj/machinery/light,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hJ" = (/obj/machinery/vending/medical{pixel_y = -32; req_access = null},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "hK" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) @@ -660,7 +660,7 @@ "mJ" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "mK" = (/obj/structure/lattice,/turf/space,/area/space) "mL" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"mM" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"mM" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "mN" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "mO" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "mP" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -685,7 +685,7 @@ "ni" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nk" = (/obj/structure/table/reinforced,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"nl" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"nl" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nm" = (/obj/structure/table/rack,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/drill,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nn" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "no" = (/obj/structure/table/rack,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/grenade_launcher,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -711,7 +711,7 @@ "nI" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nJ" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nK" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"nL" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"nL" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nM" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(103); use_power = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nN" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "nO" = (/obj/structure/closet/wardrobe/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -755,7 +755,7 @@ "oA" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oB" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oC" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"oD" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"oD" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oF" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT1"; name = "Launch Bay #1"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -772,7 +772,7 @@ "oR" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/centcom/specops) "oS" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oT" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"oU" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"oU" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oV" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oW" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "oX" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -981,7 +981,7 @@ "sS" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "sT" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "sU" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"sV" = (/obj/structure/table/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"sV" = (/obj/structure/table/rack,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "sW" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "sX" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "sY" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) @@ -1133,7 +1133,7 @@ "vO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "vP" = (/turf/simulated/shuttle/floor/white,/area/syndicate_station/start) "vQ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) -"vR" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) +"vR" = (/obj/structure/table/standard,/obj/item/weapon/tool/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "vS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "vT" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "vU" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) @@ -1212,7 +1212,7 @@ "xp" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/white,/area/syndicate_station/start) "xq" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor/white,/area/syndicate_station/start) "xr" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) -"xs" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) +"xs" = (/obj/item/weapon/tool/crowbar,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "xt" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "xu" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "xv" = (/obj/machinery/door/airlock/external,/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) @@ -1357,7 +1357,7 @@ "Ae" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant) "Af" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cash_register/civilian{ icon_state = "register_idle"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "Ag" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/white/diagonal,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) -"Ah" = (/obj/machinery/computer/ordercomp,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) +"Ah" = (/obj/machinery/computer/supplycomp/control,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "Ai" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/turretid{pixel_x = 28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "Aj" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "Ak" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) @@ -1710,7 +1710,7 @@ "GT" = (/obj/machinery/door/airlock{name = "Unit 4"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "GU" = (/obj/machinery/door/airlock{name = "Unit 5"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "GV" = (/obj/machinery/door/airlock{name = "Unit 6"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) -"GW" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"GW" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "GX" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom) "GY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) "GZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) @@ -1783,7 +1783,7 @@ "Io" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ip" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Iq" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ir" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ir" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Is" = (/obj/effect/floor_decal/corner/blue{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "It" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Iu" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -1849,7 +1849,7 @@ "JC" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "JD" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "JE" = (/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) -"JF" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"JF" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "JG" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "JH" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom) "JI" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom) @@ -1955,7 +1955,7 @@ "LE" = (/obj/structure/bed/chair{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "LF" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "LG" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent{pixel_x = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"LH" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) +"LH" = (/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "LI" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "LJ" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome) "LK" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) @@ -1994,7 +1994,7 @@ "Mr" = (/obj/machinery/dna_scannernew,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "Ms" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "Mt" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/centcom/evac) -"Mu" = (/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"Mu" = (/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "Mv" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "Mw" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach) "Mx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach) @@ -2302,8 +2302,8 @@ "Sn" = (/obj/structure/table/steel,/obj/item/clothing/glasses/regular,/obj/item/clothing/glasses/regular,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start) "So" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/red,/area/skipjack_station/start) "Sp" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Sq" = (/obj/item/weapon/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Sr" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/crowbar,/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Sq" = (/obj/item/weapon/tool/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Sr" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/tool/crowbar,/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Ss" = (/obj/machinery/computer/shuttle,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "St" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "Su" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) diff --git a/maps/northern_star/polaris-3.dmm b/maps/northern_star/polaris-3.dmm index 4c429df1ce..d74448f8d3 100644 --- a/maps/northern_star/polaris-3.dmm +++ b/maps/northern_star/polaris-3.dmm @@ -78,7 +78,7 @@ "bz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) "bA" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/tcomsat) "bB" = (/obj/structure/table/standard,/obj/item/device/radio/off,/turf/simulated/shuttle/floor/white,/area/derelict/ship) -"bC" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/derelict/ship) +"bC" = (/obj/structure/table/standard,/obj/item/weapon/tool/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "bN" = (/obj/item/trash/cheesie,/turf/space,/area/space) "bO" = (/obj/machinery/door/blast/regular{id = "oldship_gun"; name = "Pod Bay Door"},/turf/simulated/shuttle/plating,/area/derelict/ship) "bP" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "oldship_gun"},/turf/simulated/shuttle/plating,/area/derelict/ship) diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm index c1c909e168..f4f4ea7608 100644 --- a/maps/northern_star/polaris-5.dmm +++ b/maps/northern_star/polaris-5.dmm @@ -21,7 +21,7 @@ "au" = (/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) "av" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/outpost/research/test_area) "aw" = (/obj/structure/dispenser,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) -"ax" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) +"ax" = (/obj/structure/table/standard,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/screwdriver{pixel_y = 10},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) "ay" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) "az" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) "aA" = (/turf/simulated/wall,/area/outpost/research/hallway/toxins_hallway) @@ -290,7 +290,7 @@ "fD" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway) "fE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "toxins_airlock_control"; name = "Toxins Access Button"; pixel_x = 26; pixel_y = 26; req_access = list(7)},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway) "fF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Toxins Access"; dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway) -"fG" = (/obj/item/weapon/wrench,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/outpost/research/toxins_misc_lab) +"fG" = (/obj/item/weapon/tool/wrench,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/outpost/research/toxins_misc_lab) "fH" = (/obj/machinery/pipedispenser,/turf/simulated/floor/tiled/dark,/area/outpost/research/toxins_misc_lab) "fI" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "fJ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) @@ -882,7 +882,7 @@ "qX" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "qY" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "qZ" = (/obj/structure/table/rack,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) -"ra" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) +"ra" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/tool/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "rb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) "rc" = (/obj/machinery/conveyor{dir = 4; id = "anom"},/turf/simulated/floor/plating,/area/outpost/research/anomaly) "rd" = (/obj/machinery/conveyor{dir = 4; id = "anom"},/obj/structure/plasticflaps/mining,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/outpost/research/anomaly) @@ -909,7 +909,7 @@ "ry" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) "rz" = (/obj/effect/floor_decal/corner/beige{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) "rA" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/beige/full{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) -"rB" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/newscaster{layer = 3.3; pixel_x = -30; pixel_y = 0},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) +"rB" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/tool/crowbar,/obj/machinery/newscaster{layer = 3.3; pixel_x = -30; pixel_y = 0},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "rC" = (/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "rD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) "rE" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) @@ -947,8 +947,8 @@ "sk" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva) "sl" = (/obj/effect/floor_decal/corner/purple/full{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/outpost/research/eva) "sm" = (/obj/effect/floor_decal/corner/purple{dir = 1},/obj/machinery/light{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva) -"sn" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/eva) -"so" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sn" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"so" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva) "sp" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/research/eva) "sq" = (/obj/machinery/light/small,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "sr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/analysis) @@ -1470,7 +1470,7 @@ "Cn" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "Co" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "Cp" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) -"Cq" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"Cq" = (/obj/structure/table/steel,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "Cr" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Cs" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Asteroid Main Grid"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Ct" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) @@ -1586,13 +1586,13 @@ "Ez" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) "EA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) "EB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) -"EC" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/shovel,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) -"ED" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/shovel,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) +"EC" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) +"ED" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) "EE" = (/turf/simulated/wall,/area/outpost/mining_main/storage) "EF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Hallway Aft"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall) "EG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall) "EH" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall) -"EI" = (/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"EI" = (/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) "EJ" = (/obj/item/stack/flag/green{pixel_x = -4; pixel_y = 0},/obj/item/stack/flag/red,/obj/item/stack/flag/yellow{pixel_x = 4},/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) "EK" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) "EL" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage) @@ -1912,7 +1912,7 @@ "KN" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "KO" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "KP" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -2079,7 +2079,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDwDwDwDwDwDw aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDjDODwDwDPDwDQDRDSDTDUDVDWDXDYDZEaEaDtEbEcDtqOeJeJdndndnadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDODwEdEeEfEfEgEhEiEjEkElEmEnEaEaEoDfEpEqDgdneJeJadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDjErEsEtEsEsEuEvEwExEyEzEzEAEzEBDfDfdndndneJeJeJadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDjECEDDwDwEEEFEGEHDgEaEaEIEJDfDfdndndneJeJeJadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDjDjEDECDwDwEEEFEGEHDgEaEaEIEJDfDfdndndneJeJeJadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadDjDjDjEKELEEEMENDBDgEOEPDfDfDfdndndneJeJeJadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadDjDjDjEEEQERESDgDfDfDfdndndndndneJeJdnadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadDjDjETEUEVDfDfaddndndndndndneJeJdnadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/southern_cross/datums/supplypacks/munitions.dm b/maps/southern_cross/datums/supplypacks/munitions.dm index 5b88cc698c..fa24358ceb 100644 --- a/maps/southern_cross/datums/supplypacks/munitions.dm +++ b/maps/southern_cross/datums/supplypacks/munitions.dm @@ -3,7 +3,7 @@ * related to sc weapons live. */ -/datum/supply_packs/munitions/bolt_rifles_explorer +/datum/supply_pack/munitions/bolt_rifles_explorer name = "Weapons - Surplus Hunting Rifles" contains = list( /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 2, @@ -14,7 +14,7 @@ containername = "Hunting Rifle crate" access = access_explorer -/datum/supply_packs/munitions/phase_carbines_explorer +/datum/supply_pack/munitions/phase_carbines_explorer name = "Weapons - Surplus Phase Carbines" contains = list( /obj/item/weapon/gun/energy/phasegun = 2, @@ -24,7 +24,7 @@ containername = "Phase Carbine crate" access = access_explorer -/datum/supply_packs/munitions/phase_rifles_explorer +/datum/supply_pack/munitions/phase_rifles_explorer name = "Weapons - Phase Rifles" contains = list( /obj/item/weapon/gun/energy/phasegun/rifle = 2, diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index c600de3f11..3f4beeb5ed 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -39,11 +39,11 @@ "aaM" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station) "aaN" = (/turf/simulated/shuttle/wall,/area/shuttle/escape_pod2/station) "aaO" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/station) -"aaP" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/wrench,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/holofloor/wood,/area/crew_quarters/firstdeck/gym) +"aaP" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/tool/wrench,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/holofloor/wood,/area/crew_quarters/firstdeck/gym) "aaQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/holofloor/wood,/area/crew_quarters/firstdeck/gym) "aaR" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/rust,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/hallway/primary/firstdeck/auxdockfore) "aaS" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/auxdockfore) -"aaT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "d1fore_port2_inner"; locked = 1; name = "Dock Internal Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/auxdockfore) +"aaT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "d1fore_port2_inner"; locked = 1; name = "Dock Internal Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/auxdockfore) "aaU" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "d1fore_port2_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/auxdockfore) "aaV" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/firstdeck/auxdockfore) "aaW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/monotile,/area/hallway/primary/firstdeck/auxdockfore) @@ -170,7 +170,7 @@ "adn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "ado" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "adp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) -"adq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/first_deck{c_tag = "First Deck Aft Hallway - Two"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) +"adq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/first_deck{c_tag = "First Deck Fore Hallway - One"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "adr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "ads" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "adt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) @@ -210,7 +210,7 @@ "aeb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "aec" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "aed" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) -"aee" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/first_deck{c_tag = "First Deck Aft Hallway - Two"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) +"aee" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/first_deck{c_tag = "First Deck Fore Hallway - Two"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "aef" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore) "aeg" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,67)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "aeh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) @@ -263,7 +263,7 @@ "afc" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor/tiled,/area/hangar/one) "afd" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 8},/obj/effect/floor_decal/industrial/danger/corner{dir = 1},/turf/simulated/floor/tiled,/area/hangar/one) "afe" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) -"aff" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) +"aff" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afh" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afi" = (/obj/structure/closet/crate/engineering,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/plating,/area/construction/firstdeck/construction5) @@ -304,7 +304,7 @@ "afR" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4; target_pressure = 200},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet/crate,/obj/item/weapon/toy/xmas_cracker,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afT" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/paicard,/turf/simulated/floor/plating,/area/construction/firstdeck/construction5) -"afU" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/wirecutters,/turf/simulated/floor/tiled,/area/construction/firstdeck/construction5) +"afU" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/tool/wirecutters,/turf/simulated/floor/tiled,/area/construction/firstdeck/construction5) "afV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = -1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) "afW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) "afX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) @@ -339,7 +339,7 @@ "agA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "agB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "agC" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/construction/firstdeck/construction5) -"agD" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/construction/firstdeck/construction5) +"agD" = (/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled,/area/construction/firstdeck/construction5) "agE" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/construction/firstdeck/construction5) "agF" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) "agG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) @@ -669,7 +669,7 @@ "amS" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) "amT" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) "amU" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "large_escape_pod_2"; pixel_x = 26; pixel_y = -26; tag_door = "large_escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) -"amV" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/random/medical/lite,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) +"amV" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/obj/random/medical/lite,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) "amW" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) "amX" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) "amY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/space_heater,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hangar/one) @@ -1096,7 +1096,7 @@ "avd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "ave" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/camera/network/first_deck{c_tag = "First Deck - Starboard Hallway Three"; dir = 2},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "avf" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) -"avg" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) +"avg" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/machinery/station_map{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "avh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals5,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "avi" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "avj" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals5,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) @@ -1202,7 +1202,7 @@ "axf" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/firstdeck) "axg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/table/glass,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/firstdeck) "axh" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/structure/bed/chair/office/light{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/firstdeck) -"axi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Deck One"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/roller,/obj/item/roller,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/firstdeck) +"axi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Deck One"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/table/rack,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/roller,/obj/item/roller,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/firstdeck) "axj" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled/techmaint,/area/medical/first_aid_station/firstdeck) "axk" = (/turf/simulated/floor,/area/tcomm/tcomstorage) "axl" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcomm/tcomstorage) @@ -1226,7 +1226,7 @@ "axD" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/structure/closet/medical_wall{pixel_y = -31},/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "axE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "axF" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) -"axG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) +"axG" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/machinery/station_map{dir = 1; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/port) "axH" = (/obj/machinery/light,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "axI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "axJ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) @@ -1292,7 +1292,7 @@ "ayR" = (/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) "ayS" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/construction/firstdeck/construction2) "ayT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/construction/firstdeck/construction2) -"ayU" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/wirecutters,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/construction/firstdeck/construction2) +"ayU" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/tool/wirecutters,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/construction/firstdeck/construction2) "ayV" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) "ayW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/port) "ayX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/firstdeck/port) @@ -1513,7 +1513,7 @@ "aDe" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) "aDf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/monotile,/area/hallway/primary/firstdeck/ascenter) "aDg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/first_deck{c_tag = "First Deck - Center Three"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) -"aDh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) +"aDh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aDi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aDj" = (/turf/simulated/wall/r_wall,/area/hangar/two) "aDk" = (/turf/simulated/wall,/area/hangar/two) @@ -1728,7 +1728,7 @@ "aHl" = (/turf/simulated/shuttle/wall/voidcraft,/area/shuttle/shuttle2/start) "aHm" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/steel,/area/hangar/two) "aHn" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod1/station) -"aHo" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/random/medical/lite,/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod1/station) +"aHo" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/obj/random/medical/lite,/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod1/station) "aHp" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod1/station) "aHq" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "aHr" = (/obj/machinery/sleep_console,/obj/item/device/radio/intercom/department/medbay{dir = 1; pixel_x = 0; pixel_y = -21},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) @@ -1873,7 +1873,7 @@ "aKa" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/first_deck{c_tag = "First Deck - Center Four"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) "aKb" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) "aKc" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) -"aKd" = (/obj/item/inflatable/door/torn,/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/maintenance/firstdeck/aftstarboard) +"aKd" = (/obj/item/inflatable/door/torn,/obj/item/weapon/tool/screwdriver,/turf/simulated/floor,/area/maintenance/firstdeck/aftstarboard) "aKe" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aKf" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "shuttle2_sensor"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "shuttle2_pump"},/turf/simulated/shuttle/floor/black,/area/shuttle/shuttle2/start) "aKg" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "shuttle2_shuttle"; pixel_y = -26; tag_airpump = "shuttle2_pump"; tag_chamber_sensor = "shuttle2_sensor"; tag_exterior_door = "shuttle2_outer"; tag_interior_door = "shuttle2_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "shuttle2_pump"},/turf/simulated/shuttle/floor/black,/area/shuttle/shuttle2/start) @@ -1995,7 +1995,7 @@ "aMs" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMt" = (/obj/machinery/computer/security/engineering,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMu" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) -"aMv" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) +"aMv" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "aMw" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMx" = (/obj/machinery/atmospherics/binary/pump/high_power/on{dir = 4; name = "Pump station in"; target_pressure = 4500},/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMy" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) @@ -2130,7 +2130,7 @@ "aOX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump/on{dir = 8; target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aOY" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) -"aPa" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) +"aPa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "aPb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aPc" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/hangar/two) "aPd" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/shuttle2/start) @@ -2283,7 +2283,7 @@ "aRU" = (/obj/machinery/camera/network/first_deck{c_tag = "First Deck - Aft Hallway Four"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/medical_wall{pixel_x = 31; pixel_y = 0},/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft) "aRV" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3) "aRW" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3) -"aRX" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3) +"aRX" = (/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) "aRY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) "aRZ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) "aSa" = (/turf/simulated/wall,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) @@ -2325,7 +2325,7 @@ "aSK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/aft) "aSL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/security/checkpoint3) "aSM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/checkpoint3) -"aSN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals5,/turf/simulated/floor/tiled,/area/security/checkpoint3) +"aSN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/obj/random/mob/mouse,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aSO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/security{c_tag = "SEC - Auxiliary Checkpoint"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint3) "aSP" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) "aSQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) @@ -2342,7 +2342,7 @@ "aTb" = (/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft) "aTc" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft) "aTd" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint3) -"aTe" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/crowbar,/obj/item/weapon/pen,/obj/item/device/flash,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint3) +"aTe" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/tool/crowbar,/obj/item/weapon/pen,/obj/item/device/flash,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint3) "aTf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3) "aTg" = (/obj/machinery/computer/secure_data,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint3) "aTh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/white/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard) @@ -2398,7 +2398,7 @@ "aUf" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod6/station) "aUg" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftport) "aUh" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftport) -"aUi" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft) +"aUi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/starboard) "aUj" = (/obj/structure/stairs/east,/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/aft) "aUk" = (/turf/simulated/wall,/area/hallway/primary/firstdeck/auxdockaft) "aUl" = (/obj/structure/sign/directions/bridge{dir = 1; pixel_y = 10},/obj/structure/sign/directions/science{dir = 1},/obj/structure/sign/directions/medical{dir = 1; pixel_y = -10},/turf/simulated/wall,/area/hallway/primary/firstdeck/auxdockaft) @@ -2573,7 +2573,7 @@ "aXy" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/security/security_restroom) "aXz" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = -1},/obj/machinery/door/window/westright{name = "Shower"},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/security/security_restroom) "aXA" = (/turf/simulated/wall,/area/security/security_restroom) -"aXB" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/machinery/recharger/wallcharger{pixel_x = -24; pixel_y = -4},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/security_lockerroom) +"aXB" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/machinery/recharger/wallcharger{pixel_x = -24; pixel_y = -4},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "aXC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/security_lockerroom) "aXD" = (/obj/structure/closet/secure_closet/security,/obj/item/clothing/glasses/hud/security,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/turf/simulated/floor/tiled,/area/security/security_lockerroom) "aXE" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/security/range) @@ -2700,7 +2700,7 @@ "aZV" = (/obj/machinery/vending/wallmed1{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/prison) "aZW" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/security/prison) "aZX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/security/prison) -"aZY" = (/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"aZY" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard) "aZZ" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/security/prison) "baa" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled/dark,/area/security/prison) "bab" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled/dark,/area/security/prison) @@ -2751,7 +2751,7 @@ "baU" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "baV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "baW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) -"baX" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"baX" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) "baY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) "baZ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) "bba" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/security/brig) @@ -2840,7 +2840,7 @@ "bcF" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/main) "bcG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/main) "bcH" = (/obj/machinery/light{dir = 4},/obj/structure/table/standard,/obj/item/weapon/storage/box/donut,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/security/main) -"bcI" = (/obj/structure/table/steel_reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/magnetic_controller{autolink = 1},/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud/aviator,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/weapon/screwdriver,/turf/simulated/floor/tiled,/area/security/range) +"bcI" = (/obj/structure/table/steel_reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/magnetic_controller{autolink = 1},/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud/aviator,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/weapon/tool/screwdriver,/turf/simulated/floor/tiled,/area/security/range) "bcJ" = (/obj/machinery/door/window/northleft{name = "Range Access"},/obj/effect/floor_decal/industrial/loading{dir = 1},/turf/simulated/floor/tiled,/area/security/range) "bcK" = (/obj/structure/table/steel_reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/tiled,/area/security/range) "bcL" = (/obj/structure/table/steel_reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/tiled,/area/security/range) @@ -2859,7 +2859,7 @@ "bcY" = (/obj/machinery/computer/prisoner,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 30},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) "bcZ" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/camera/network/security{c_tag = "SEC - Warden's Office"},/obj/item/device/radio/intercom/department/security{pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/security/warden) "bda" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/warden) -"bdb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel_reinforced,/obj/item/weapon/book/codex/corp_regs,/obj/item/weapon/stamp/denied{pixel_x = 5},/obj/item/weapon/stamp/ward,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/obj/item/device/retail_scanner/security,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/warden) +"bdb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel_reinforced,/obj/item/weapon/book/codex/corp_regs,/obj/item/weapon/stamp/denied{pixel_x = 5},/obj/item/weapon/stamp/ward,/obj/item/weapon/tool/crowbar,/obj/item/device/radio/off,/obj/item/weapon/tool/wrench,/obj/item/device/retail_scanner/security,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/warden) "bdc" = (/obj/structure/closet/secure_closet/warden,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) "bdd" = (/obj/machinery/camera/network/security{c_tag = "SEC - Brig Hallway Fore"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) "bde" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) @@ -3220,7 +3220,7 @@ "bjV" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/lattice,/turf/space,/area/space) "bjW" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/lattice,/turf/space,/area/space) "bjX" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/security/riot_control) -"bjY" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/wrench,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plating,/area/security/riot_control) +"bjY" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plating,/area/security/riot_control) "bjZ" = (/obj/structure/table/reinforced,/obj/machinery/microscope,/obj/item/device/radio/intercom/department/security{pixel_y = 21},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "bka" = (/obj/structure/table/reinforced,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "bkb" = (/obj/machinery/computer/security/wooden_tv,/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/lino,/area/security/detectives_office) @@ -3342,7 +3342,7 @@ "bmn" = (/obj/effect/landmark{name = "lightsout"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby) "bmo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby) "bmp" = (/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby) -"bmq" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos) +"bmq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint3) "bmr" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hos) "bms" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos) "bmt" = (/obj/structure/bed/chair,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos) @@ -3397,7 +3397,7 @@ "bnq" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/monotile,/area/security/lobby) "bnr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/lobby) "bns" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby) -"bnt" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos) +"bnt" = (/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/prison) "bnu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hos) "bnv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/flashlight/lamp/green{dir = 2; pixel_x = 10; pixel_y = 12},/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos) "bnw" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/folder/red,/obj/item/weapon/stamp/hos,/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos) @@ -3425,7 +3425,7 @@ "bnS" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "bnT" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) "bnU" = (/obj/structure/closet,/obj/random/contraband,/obj/random/contraband,/obj/random/maintenance/security,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/security_port) -"bnV" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port) +"bnV" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "bnW" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; target_pressure = 200},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_port) "bnX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/security_port) "bnY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_port) @@ -3458,7 +3458,7 @@ "boz" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "boA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "boB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"boC" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"boC" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos) "boD" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"},/obj/random/maintenance/security,/obj/random/cash,/turf/simulated/floor,/area/maintenance/security_starboard) "boE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "boF" = (/obj/effect/floor_decal/corner/black/full{dir = 8},/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) @@ -3628,7 +3628,7 @@ "brN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor,/area/maintenance/substation/atmospherics) "brO" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Atmospherics Substation"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/substation/atmospherics) "brP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/maintenance/engineering) -"brQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/engineering) +"brQ" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos) "brR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/airless,/area/maintenance/security_port) "brS" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eva_port_outer"; locked = 1; name = "External Airlock Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/maintenance/security_port) "brT" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eva_port_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eva_port_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/maintenance/security_port) @@ -3945,7 +3945,7 @@ "bxS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "N2O to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) "bxT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "bxU" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/belt/utility/atmostech,/obj/item/weapon/storage/belt/utility/atmostech,/turf/simulated/floor/tiled,/area/engineering/atmos) -"bxV" = (/obj/structure/table/standard,/obj/structure/closet/fireaxecabinet{pixel_y = -32},/obj/machinery/cell_charger,/obj/item/device/multitool{pixel_x = 5},/obj/item/weapon/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos) +"bxV" = (/obj/structure/table/standard,/obj/structure/closet/fireaxecabinet{pixel_y = -32},/obj/machinery/cell_charger,/obj/item/device/multitool{pixel_x = 5},/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos) "bxW" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/meter,/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/engineering/atmos) "bxX" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 1"},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/engineering/atmos) "bxY" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -3993,7 +3993,7 @@ "byO" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research) "byP" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research) "byQ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/red,/turf/simulated/floor/plating,/area/maintenance/research) -"byR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research) +"byR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_port) "byS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research) "byT" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research) "byU" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) @@ -4185,7 +4185,7 @@ "bCy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/storage/auxillary) "bCz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research) "bCA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research) -"bCB" = (/obj/structure/table,/obj/item/stack/material/plastic,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool/hugetank,/turf/simulated/floor/plating,/area/maintenance/research) +"bCB" = (/obj/structure/table,/obj/item/stack/material/plastic,/obj/item/weapon/tool/wrench,/obj/item/weapon/weldingtool/hugetank,/turf/simulated/floor/plating,/area/maintenance/research) "bCC" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research) "bCD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research) "bCE" = (/obj/item/weapon/rig/hazmat/equipped,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/door/window/southright{name = "RD Suit"; req_one_access = list(30)},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor) @@ -4535,7 +4535,7 @@ "bJk" = (/obj/machinery/camera/network/research{c_tag = "SCI - Toxins Gas Storage"; dir = 1},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/storage) "bJl" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/storage) "bJm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/rnd/storage) -"bJn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/weapon/crowbar,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/mixing) +"bJn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/table/standard,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/screwdriver{pixel_y = 10},/obj/item/weapon/tool/crowbar,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/mixing) "bJo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/mixing) "bJp" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/mixing) "bJq" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/rnd/mixing) @@ -4555,7 +4555,7 @@ "bJE" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) "bJF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) "bJG" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_port_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_one_access = list(11,24)},/obj/structure/table/steel,/obj/item/weapon/storage/fancy/cigarettes,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) -"bJH" = (/obj/structure/closet/crate/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light,/turf/simulated/floor,/area/engineering/storage) +"bJH" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "bJI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/floodlight,/turf/simulated/floor,/area/engineering/storage) "bJJ" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/storage) "bJK" = (/obj/machinery/space_heater,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/storage) @@ -4717,7 +4717,7 @@ "bMK" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste) "bML" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste) "bMM" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access = list(10,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste) -"bMN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"bMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor,/area/maintenance/engineering) "bMO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) "bMP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) "bMQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) @@ -5068,7 +5068,7 @@ "bTx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/mixing) "bTy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/rnd/mixing) "bTz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/rnd/mixing) -"bTA" = (/obj/item/weapon/wrench,/turf/simulated/floor/tiled,/area/rnd/mixing) +"bTA" = (/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled,/area/rnd/mixing) "bTB" = (/obj/machinery/pipedispenser,/turf/simulated/floor/tiled,/area/rnd/mixing) "bTC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) "bTD" = (/turf/simulated/wall/r_wall,/area/engineering/engine_room) @@ -5107,7 +5107,7 @@ "bUk" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/engineering/engi_restroom) "bUl" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/engineering/engi_restroom) "bUm" = (/obj/structure/undies_wardrobe,/obj/structure/window/basic,/turf/simulated/floor/tiled/freezer,/area/engineering/engi_restroom) -"bUn" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/floor,/area/maintenance/engineering) +"bUn" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/floor,/area/maintenance/engineering) "bUo" = (/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/plating,/area/maintenance/engineering) "bUp" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/fpcenter) "bUq" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/navbeacon/patrol{location = "CH2"; next_patrol = "CH3"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/fpcenter) @@ -5150,8 +5150,8 @@ "bVb" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bVc" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bVd" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bVe" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/hemostat,/obj/item/stack/cable_coil,/obj/item/weapon/weldingtool/hugetank,/obj/effect/floor_decal/industrial/warning,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bVf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/closet/crate,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/machinery/computer/security/telescreen{desc = "Used to monitor the proceedings inside the test chamber."; name = "Test Chamber Monitor"; network = list("Miscellaneous Reseach"); pixel_x = -32; pixel_y = -4},/obj/machinery/camera/network/research{c_tag = "SCI - Miscellaneous Research"; dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bVe" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/hemostat,/obj/item/stack/cable_coil,/obj/item/weapon/weldingtool/hugetank,/obj/effect/floor_decal/industrial/warning,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bVf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/closet/crate,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar/red,/obj/machinery/computer/security/telescreen{desc = "Used to monitor the proceedings inside the test chamber."; name = "Test Chamber Monitor"; network = list("Miscellaneous Reseach"); pixel_x = -32; pixel_y = -4},/obj/machinery/camera/network/research{c_tag = "SCI - Miscellaneous Research"; dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bVg" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bVh" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/purple/border{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) "bVi" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space) @@ -5281,7 +5281,7 @@ "bXC" = (/obj/structure/closet/secure_closet/engineering_electrical,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/engineering/workshop) "bXD" = (/obj/machinery/vending/tool,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/workshop) "bXE" = (/obj/structure/closet/toolcloset,/obj/item/device/flashlight,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/workshop) -"bXF" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar/red,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled/dark,/area/engineering/workshop) +"bXF" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled/dark,/area/engineering/workshop) "bXG" = (/obj/machinery/computer/station_alert/all,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) "bXH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) "bXI" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Chief Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) @@ -5310,7 +5310,7 @@ "bYf" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Central Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/central) "bYg" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/central) "bYh" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Central Maintenance Access"; req_one_access = list(12,19)},/turf/simulated/floor/plating,/area/maintenance/central) -"bYi" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/teleporter) +"bYi" = (/obj/structure/closet/crate,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/teleporter) "bYj" = (/turf/simulated/floor/tiled,/area/teleporter) "bYk" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/teleporter) "bYl" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/teleporter) @@ -5364,7 +5364,7 @@ "bZh" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/engineering/workshop) "bZi" = (/obj/machinery/vending/engivend,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/workshop) "bZj" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/yellow/border{dir = 6},/turf/simulated/floor/tiled,/area/engineering/workshop) -"bZk" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/wrench,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/engineering/workshop) +"bZk" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/tool/wrench,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/engineering/workshop) "bZl" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the engine room."; layer = 3.3; name = "Engine Monitor"; network = list("Engine"); pixel_x = 0; pixel_y = -34},/obj/machinery/computer/atmos_alert,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) "bZm" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) "bZn" = (/obj/machinery/camera/network/engineering{c_tag = "ENG - Chief Engineer's Office"; dir = 1},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; pixel_x = -6; pixel_y = -44; specialfunctions = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = 6; pixel_y = -44},/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/button/remote/blast_door{id = "englockdown"; name = "Engineering Lockdown"; pixel_x = -6; pixel_y = -34; req_access = list(10)},/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 6; pixel_y = -34; req_access = list(10)},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/chief) @@ -5479,7 +5479,7 @@ "cbs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/fpcenter) "cbt" = (/obj/machinery/status_display{pixel_x = 32},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/fpcenter) "cbu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/maintenance/substation/central) -"cbv" = (/obj/structure/disposalpipe/up{dir = 1},/obj/structure/cable{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/railing{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central) +"cbv" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research) "cbw" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/central) "cbx" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central) "cby" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central) @@ -5513,7 +5513,7 @@ "cca" = (/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = -30},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/purple/border{dir = 6},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/purple/bordercorner2,/turf/simulated/floor/tiled/white,/area/rnd/research_foyer) "ccb" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) "ccc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"ccd" = (/obj/structure/table/standard,/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = 0; pixel_y = -30},/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"ccd" = (/obj/structure/table/standard,/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = 0; pixel_y = -30},/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "cce" = (/obj/structure/closet{name = "robotics parts"},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "ccf" = (/obj/structure/closet{name = "welding equipment"},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "ccg" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics) @@ -5904,7 +5904,7 @@ "cjB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) "cjC" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) "cjD" = (/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) -"cjE" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Port Hallway One"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) +"cjE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research) "cjF" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) "cjG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) "cjH" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) @@ -5927,7 +5927,7 @@ "cjY" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cjZ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cka" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) -"ckb" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Port Hallway Three"},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) +"ckb" = (/obj/structure/closet/crate/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light,/obj/item/stack/material/lead{amount = 30},/turf/simulated/floor,/area/engineering/storage) "ckc" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "ckd" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cke" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) @@ -6023,7 +6023,7 @@ "clQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/starboard) "clR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "clS" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/hallway/primary/seconddeck/starboard) -"clT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Port Hallway Four"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) +"clT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) "clU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "clV" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/industrial/danger{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/hallway/primary/seconddeck/starboard) "clW" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/research_medical) @@ -6121,7 +6121,7 @@ "cnK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cnL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cnM" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) -"cnN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Port Hallway Two"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) +"cnN" = (/obj/structure/disposalpipe/up{dir = 1},/obj/structure/cable{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/railing{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central) "cnO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cnP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cnQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) @@ -6215,11 +6215,11 @@ "cpA" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/medical/genetics) "cpB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/research{name = "Genetics Lab"; req_one_access = list(5,47)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/hallway/secondary/seconddeck/research_medical) "cpC" = (/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/tvalve/mirrored/bypass,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating,/area/medical/virology) -"cpD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) -"cpE" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/virology) -"cpF" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/white,/area/medical/virology) -"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/lime/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) -"cpH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"cpD" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway One"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) +"cpE" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Three"},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) +"cpF" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"cpH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Four"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cpI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/virology) "cpJ" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = 32},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/lime/border{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) "cpK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) @@ -6513,7 +6513,7 @@ "cvm" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/brown/border{dir = 5},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cvn" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "quart_tint"},/obj/machinery/ai_status_display{layer = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) "cvo" = (/obj/structure/filingcabinet,/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/brown/border{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cvp" = (/obj/machinery/computer/supplycomp,/obj/machinery/status_display/supply_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/qm) +"cvp" = (/obj/machinery/computer/supplycomp/control,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cvq" = (/obj/machinery/computer/security/mining,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cvr" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 0; pixel_y = 28},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/brown/border{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cvs" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/ai_monitored/storage/emergency/eva) @@ -6624,7 +6624,7 @@ "cxt" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor,/area/engineering/engine_room) "cxu" = (/obj/machinery/status_display,/turf/simulated/wall,/area/quartermaster/qm) "cxv" = (/obj/structure/table/reinforced,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/turf/simulated/floor/tiled/techmaint,/area/ai_monitored/storage/emergency/eva) -"cxw" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/machinery/camera/network/civilian{c_tag = "CIV - Emergency EVA"; dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/techmaint,/area/ai_monitored/storage/emergency/eva) +"cxw" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/machinery/camera/network/civilian{c_tag = "CIV - Emergency EVA"; dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/techmaint,/area/ai_monitored/storage/emergency/eva) "cxx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/techmaint,/area/ai_monitored/storage/emergency/eva) "cxy" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/apcenter) "cxz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) @@ -6764,7 +6764,7 @@ "cAd" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/obj/random/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/regular,/obj/random/medical,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "cAe" = (/obj/structure/closet/l3closet/medical,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "cAf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) -"cAg" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"cAg" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/tool/crowbar/red,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "cAh" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cAi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cAj" = (/turf/simulated/wall,/area/medical/medbay2) @@ -6846,7 +6846,7 @@ "cBH" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/foyer) "cBI" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/foyer) "cBJ" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/foyer) -"cBK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/screwdriver,/obj/machinery/button/remote/blast_door{id = "chemwindow"; name = "Pharmacy Windows Shutter Control"; pixel_x = 6; pixel_y = -18; pixel_z = 0},/obj/machinery/button/remote/blast_door{id = "chemcounter"; name = "Pharmacy Counter Lockdown Control"; pixel_x = -6; pixel_y = -18},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/beige/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"cBK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/tool/screwdriver,/obj/machinery/button/remote/blast_door{id = "chemwindow"; name = "Pharmacy Windows Shutter Control"; pixel_x = 6; pixel_y = -18; pixel_z = 0},/obj/machinery/button/remote/blast_door{id = "chemcounter"; name = "Pharmacy Counter Lockdown Control"; pixel_x = -6; pixel_y = -18},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/beige/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "cBL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "cBM" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/chemistry) "cBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) @@ -6868,7 +6868,7 @@ "cCd" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency) "cCe" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency) "cCf" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/powercell,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1) -"cCg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/cargo) +"cCg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Two"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) "cCh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/cargo) "cCi" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor,/area/maintenance/apmaint) "cCj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/construction/seconddeck/construction1) @@ -6879,7 +6879,7 @@ "cCo" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/delivery) "cCp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/delivery) "cCq" = (/obj/structure/table/steel,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/brown/bordercorner,/turf/simulated/floor/tiled,/area/quartermaster/delivery) -"cCr" = (/obj/machinery/computer/ordercomp,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/foyer) +"cCr" = (/obj/machinery/computer/supplycomp,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cCs" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cCt" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/foyer) "cCu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/foyer) @@ -6916,7 +6916,7 @@ "cCZ" = (/obj/structure/closet/secure_closet/medical1,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) "cDa" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/pink/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 10},/obj/effect/floor_decal/corner/pink/bordercorner2{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "cDb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/pink/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/pink/bordercorner2{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) -"cDc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/structure/table/rack{dir = 8; layer = 2.6},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) +"cDc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/structure/table/rack{dir = 8; layer = 2.6},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) "cDd" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "exam_window_tint"},/turf/simulated/floor/plating,/area/medical/exam_room) "cDe" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Examination Room"; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/medical/exam_room) "cDf" = (/obj/structure/table/glass,/obj/machinery/recharger{pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - Medical Break Area"; dir = 4},/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -7052,7 +7052,7 @@ "cFF" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/delivery) "cFG" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3; pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/retail_scanner/civilian{icon_state = "retail_idle"; dir = 1},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cFH" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Cargo Technician"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) -"cFI" = (/obj/machinery/computer/supplycomp,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) +"cFI" = (/obj/machinery/computer/supplycomp/control,/turf/simulated/floor/tiled,/area/quartermaster/office) "cFJ" = (/obj/structure/filingcabinet/filingcabinet,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) "cFK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) "cFL" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) @@ -7193,7 +7193,7 @@ "cIq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cIr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cIs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) -"cIt" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"cIt" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) "cIu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cIv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cIw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) @@ -7249,7 +7249,7 @@ "cJu" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/hydro,/area/hallway/primary/seconddeck/ascenter) "cJv" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/ascenter) "cJw" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/boots/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/cargo,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/medbay) -"cJx" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cJx" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -29},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/white,/area/medical/virology) "cJy" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/medbay) "cJz" = (/obj/structure/sign/warning/high_voltage{pixel_y = -32},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay) "cJA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/medbay) @@ -7375,8 +7375,8 @@ "cLQ" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green,/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/brown/bordercorner,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cLR" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Cargo Technician"},/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) "cLS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) -"cLT" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/engine{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office) -"cLU" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/trolley{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) +"cLT" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/engine{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office) +"cLU" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) "cLV" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) "cLW" = (/turf/unsimulated/mask,/area/quartermaster/office) "cLX" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/cargo) @@ -7411,7 +7411,7 @@ "cMA" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/pink/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "cMB" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/pink/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "cMC" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/pink/border{dir = 5},/obj/machinery/computer/crew,/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"cMD" = (/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/structure/table/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/techmaint,/area/medical/cryo) +"cMD" = (/obj/item/weapon/tool/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/structure/table/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/techmaint,/area/medical/cryo) "cME" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor/tiled/techmaint,/area/medical/cryo) "cMF" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/medical/cryo) "cMG" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/techmaint,/area/medical/cryo) @@ -7528,7 +7528,7 @@ "cON" = (/obj/structure/ladder/updown,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency) "cOO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency) "cOP" = (/obj/machinery/space_heater,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency) -"cOQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cOQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) "cOR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "cOS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/medical) "cOT" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) @@ -7589,7 +7589,7 @@ "cPW" = (/obj/structure/table/gamblingtable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/machinery/alarm{pixel_y = 22},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) "cPX" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor,/area/maintenance/cargo) "cPY" = (/obj/structure/bed/chair/wood{dir = 8},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) -"cPZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) +"cPZ" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/lime/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) "cQa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) "cQb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/bar) "cQc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) @@ -7696,7 +7696,7 @@ "cRZ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/airless,/area/maintenance/cargo) "cSa" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "crg_aft_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/airless,/area/maintenance/cargo) "cSb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/cargo) -"cSc" = (/obj/item/glass_jar,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cSc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) "cSd" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/maintenance/cargo) "cSe" = (/obj/structure/table/rack{dir = 1},/obj/random/toy,/obj/random/tank,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/maintenance/cargo) "cSf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/cargo) @@ -7777,7 +7777,7 @@ "cTC" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "cTD" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 22},/obj/machinery/button/holosign{id = "cafeopen"; name = "Open Sign"; pixel_x = 11; pixel_y = 30},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "cTE" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) -"cTF" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe Back Room"; dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) +"cTF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/cargo) "cTG" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_coffee/full,/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "cTH" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay) "cTI" = (/obj/structure/closet/crate/plastic,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/reagent_containers/dropper,/obj/random/maintenance/clean,/obj/random/soap,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) @@ -7887,7 +7887,7 @@ "cVI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/barrestroom) "cVJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/barrestroom) "cVK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/barrestroom) -"cVL" = (/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/screwdriver,/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/marble,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Fore"; dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"cVL" = (/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/tool/screwdriver,/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/marble,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Fore"; dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cVM" = (/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cVN" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) "cVO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) @@ -7983,7 +7983,7 @@ "cXA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "aft_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/maintenance/medbay) "cXB" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/wall/r_wall,/area/maintenance/medbay) "cXC" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) -"cXD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cXD" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay2) "cXE" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward) "cXF" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward) "cXG" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward) @@ -8354,7 +8354,7 @@ "deH" = (/obj/structure/table/marble,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "deI" = (/obj/machinery/cooker/cereal,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "deJ" = (/obj/machinery/cooker/candy,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"deK" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/crowbar,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/chapel) +"deK" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/tool/crowbar,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/chapel) "deL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/chapel) "deM" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/light{dir = 8},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/holodeck_control) "deN" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/holodeck_control) @@ -8421,7 +8421,7 @@ "dfW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/hydro,/area/hydroponics) "dfX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/hydro,/area/hydroponics) "dfY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/hydro,/area/hydroponics) -"dfZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/chapel) +"dfZ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay) "dga" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/camera/network/civilian{c_tag = "CIV - Holodeck Port"; dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/holodeck_control) "dgb" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/obj/machinery/camera/network/civilian{c_tag = "CIV - Holodeck Control"; dir = 4},/turf/simulated/floor/tiled,/area/holodeck_control) "dgc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/holodeck_control) @@ -8470,7 +8470,7 @@ "dgT" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/hydro,/area/hydroponics) "dgU" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/hydro,/area/hydroponics) "dgV" = (/obj/structure/closet/secure_closet/hydroponics,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/hydro,/area/hydroponics) -"dgW" = (/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/crowbar,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/hydro,/area/hydroponics) +"dgW" = (/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/tool/crowbar,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/hydro,/area/hydroponics) "dgX" = (/obj/structure/table/rack,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/chapel) "dgY" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/holodeck_control) "dgZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/holodeck_control) @@ -8602,7 +8602,7 @@ "djv" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library"},/turf/simulated/floor/tiled/steel_grid,/area/library) "djw" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Aft Hallway Four"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "djx" = (/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/chapel/main) -"djy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Chapel Office"; req_access = list(27)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/chapel/office) +"djy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay) "djz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/chapel) "djA" = (/turf/simulated/wall/r_wall,/area/chapel/main) "djB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) @@ -8644,7 +8644,7 @@ "dkl" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/library) "dkm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/wood,/area/library) "dkn" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/library) -"dko" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/deck/cards,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/wood,/area/library) +"dko" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar) "dkp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/library) "dkq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library) "dkr" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/library) @@ -8814,7 +8814,7 @@ "dnz" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "dnA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "dnB" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) -"dnC" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) +"dnC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/station_map{dir = 4; pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft) "dnD" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/seconddeck/locker/locker_toilet) "dnE" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/seconddeck/locker/locker_toilet) "dnF" = (/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/seconddeck/locker/locker_toilet) @@ -9046,7 +9046,7 @@ "drX" = (/obj/machinery/lapvend,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) "drY" = (/obj/machinery/computer/security,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) "drZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/checkpoint2) -"dsa" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/crowbar,/obj/item/weapon/pen,/obj/item/device/flash,/obj/machinery/camera/network/security{c_tag = "SEC - Arrival Checkpoint"; dir = 8},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"dsa" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/tool/crowbar,/obj/item/weapon/pen,/obj/item/device/flash,/obj/machinery/camera/network/security{c_tag = "SEC - Arrival Checkpoint"; dir = 8},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) "dsb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "dsc" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/seconddeck/locker) "dsd" = (/obj/structure/closet/wardrobe/mixed,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/seconddeck/locker) @@ -9776,7 +9776,7 @@ "dFZ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/largecrate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) "dGa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) "dGb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) -"dGc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) +"dGc" = (/obj/item/glass_jar,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo) "dGd" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/sc/hop/quarters) "dGe" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hop/quarters) "dGf" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hop/quarters) @@ -9798,7 +9798,7 @@ "dGv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor/quarters) "dGw" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor/quarters) "dGx" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/sc/hor/quarters) -"dGy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) +"dGy" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe Back Room"; dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "dGz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) "dGA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light/small{dir = 8},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dGB" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hop/quarters) @@ -10144,7 +10144,7 @@ "dNd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) "dNe" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) "dNf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) -"dNg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) +"dNg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/station_map{dir = 1; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/fpcenter) "dNh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) "dNi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) "dNj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) @@ -10237,11 +10237,11 @@ "dOS" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) "dOT" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/window/northright,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) "dOU" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) -"dOV" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/thirddeck/aftstarboard) +"dOV" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/thirddeck/aftstarboard) "dOW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dOX" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) "dOY" = (/obj/structure/table/steel,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) -"dOZ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"dOZ" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo) "dPa" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) "dPb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "dPc" = (/obj/structure/bed/chair/comfy/blue{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) @@ -10577,6 +10577,20 @@ "dVu" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dVv" = (/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/starboard) +"dVx" = (/obj/machinery/station_map{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/port) +"dVy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/station_map{dir = 1; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard) +"dVz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/station_map{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) +"dVA" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/machinery/station_map{dir = 8; pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) +"dVB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/station_map{dir = 1; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central) +"dVC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/light/small,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/medbay) +"dVD" = (/obj/machinery/light/small{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/chapel) +"dVE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar) +"dVF" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Chapel Office"; req_access = list(27)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/chapel/office) +"dVG" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/deck/cards,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/wood,/area/library) +"dVH" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/locker) +"dVI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) +"dVJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) +"dVK" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/meeting_room) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10684,7 +10698,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaadLadLaekaelaemaenaenaenaeoaenaenaenaepaeqaczabtaeraesaetaeuaevaewaexaeyaezaeAaeBaeAaezaeCabtabtadFaeDaeEaejaejaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaaaaaaaaaadLadLaeGaeHaeIaemaeJaeKaeLaeMaeNaeOaenaePaeQaePaeRaeRaeSaeTajdabtabtaaaaaaaaaaeVaeWaeVaaaaaaaaaabtaanaeDaeXaeYaejaejaaaaaaaaaaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaaaaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaeFaeFafaafbafcafcafcafcafcafcafcafcafcafcafcafdafaaeFaeFaaiadLadLafeaffafgafhaemafiafjafjafkafkaflaenafmafnafoafpaePafqafrafsabtaaaaaaaftaftaftafuaftaftaftaaaaaaaanafvaeXafwafwaejaejaanaeZaeZafxafyafzafzafzafzafzafzafzafzafzafzafzafAafBaeZaeZaafaafaafaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaeFafCafDafEafFafFafFafGafHafIafJafGafFafFafFafKafDafLaeFafMafNafOafPafQafRafSaemafTafkafUafjafkaflaenafVafWafXafYaePafZagaagbabtaaaaaaaftagcagdageagfaggaftaaaaaaaanafvaeXaghagiagjagkaghaeZaglaglaglagmagmagmagmagmagmagmagmagmagmagmagnagoagpaeZaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaeFafCafDafEafFafFafFafGafHafIafJafGafFafFafFafKafDafLaeFafMafNafOafPafQafRafSaemafTafkafUafjafkaflaenafVafWafXafYaePafZagaagbabtaaaaaaaftagcagdageagfaggaftaaaaaaaanafvaeXaMvagiagjagkaghaeZaglaglaglagmagmagmagmagmagmagmagmagmagmagmagnagoagpaeZaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaadaaaaaaaaaaeFafCafDafEafFafFafGagqagragsagtagqafGafFafFafKafDaguagvafMagwagxagyagzagAagBaemagCafkafjafjagDagEaenagFagGagHagIaePagJagKagJabtaaaaaaaftagLagdagMagdagNaftaaaaaaaanagOagPagQagRagSagTaghagUaglafxaglagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaadaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaeFafCafDafEafFafFagWagXagYagZagYahaagWafFafFafKafDahbaeFahcahdaheaheahfaheaheaemahgahhafkafjafjahiaenaePahjaePahkaePahlahmahlabtaaaaaaaftahnahoahpahqahraftaaaaaaahsahtahtahuahtahtahvahwaeZahxagoahyagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaaaaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaahcaeFahzahAafEafFafFafGahBagWahCagWahDafGafFafFafKahEahFaeFaeFahGaheahHahIahJahKaemahLahMahNahOafjahPahQaePahRaePahSaePahTahUahVabtaaaaaaaftahWagdahXahYahZaftaaaaaaahsaiaaibaicaidahtaieaeZaeZaifaigaihagmagmagmagmagmagmagmagmagmagmagmagVaiiaijaeZaikaaaaaaaaaaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10697,7 +10711,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLakLakLakLakLakLakLakLakLakLakLakLaeFaeFakMakgafFafGakNakOakNakNakPakQakRakSafFafKakTaeFaeFaeFaioakUadlaaaaaaaaaaaaajpajpakoakVakWakWakXakYakZalaalbalcaldalealfalgalhalialjalkallalmalmalnakIajxajxaaaaaaaaaaaaadFaloaiyaeZaeZaeZalpaiAagmagmagmagmagmagmagmagmagmagmagmagValqaeZaeZalralralralralralralralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltalualtaltalualtaltaltalvaeFalwalxakgafFafGalyaiDalzagZalAalBalCafGafFafKalDalEaeFahcaioadladlaaaaaaaaaajpajpakoakoalFakoalGalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalJakIalKakIakIajxajxaaaaaaaaaadFadFaiyaikaeZalLalMaiAagmagmagmagmagmagmagmagmagmagmagmagValNaijaeZalOalOalOalOalOalPalOalOalOalOalOalPalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRalSalTalUalValWalXalYalZamaambaeFamcajEafEafFaiDaiDahBafFafFafFahBaiDaiDafFafKajEamdaeFameaioadLaaaaaaaaaaaaajpakoakVakWamfamgalHalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalIamhamialmalnakIajxaaaaaaaaaaaaaejaiyamjaeZaiSamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZalOamlalOalOalOalOalOalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaambaeFamqajEafEafFamramsafFafFafFafFafFamramsafFafKajEamtaeFamuaioadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyamNaeZamOamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZalOalOalOalOalOalOamQalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaambaeFamqajEafEafFamramsafFafFafFafFafFamramsafFafKajEamtaeFamuaPaadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyamNaeZamOamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZalOalOalOalOalOalOamQalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRamRamSamTamoamUamVamWamXamaambaeFamYamZanaanbanbanbanbanbanbanbanbanbanbanbancandaneaeFanfaioadLaaaaaaaaaajoanganhalFalGanianianialHalHanjanjanjanjanjankanlanmanmannanoanpanqalIalIalIalJalKanransajwaaaaaaaaaaejaiyantaeZanuanvanwanxanxanxanxanxanxanxanxanxanxanxanyanzanAaeZalOalOalOalOalOanBanCalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltaluanDanDalualtaltaltanEaeFanFanGanHanHanIanHanHanJanKanLanManNanNanNanNanOamtaeFanPaioadladlaaaaaaajpanQanRanSanianianTanUanialHanVanWanXanYanZanZaoaaobaocaodaoealIaofalIaogalIalIaohaoiaojajxaaaaaaadFadFaiyaokaeZaolaomaonaonaonaonaooaopaoqaoraosaosaotaosaosaouaovaeZalPalOalOalOaowalOalOalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaakLakLakLakLakLakLakLaoxaoxaoyaoyaoyaoyaoyaeFaeFaeFaeFaeFaeFaeFaeFaozahcaoAaeFaoBaoBaoBaeFaeFaeFaeFafMaoCaoDadlaaaaaaajpaoEaoFaoGaoHaoIaoJaoKanialHanjaoLaoMaoNanZanZaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXalIaoYaoZapaajxaaaaaaadFapbapcapdaeZaeZaeZaikapeapeapeaikapfaikapgaikaeZaeZaeZaeZaeZaeZaeZaphaphaphaphaphapiapialralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10706,8 +10720,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLarSapkakLakLakLakLakLakLarTarUarUarUarVarWarXapuarYapyaqParZasaasbapuascasdaseapCasfasgashapCasiasjaskaslasmasnadlasoasoaspasqasrajSamxarfargarfanialHalHalHalHalHalHalHalHalHalHalHalIalIalIamHassastalIasuasvaswasxasyasyadFaszaghasAasAasAasAaqgasBasCasDaqgasEasFasGaqmasHasIasJarIasKaqqaqmasLasMasNasOasOasOaphalralralralralralralOalPalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLasPapkakLasQasQasQasQasQarTasRasSasTasUasVasWasXasYapuasZapuapuapuapuataatbatcatdapCapCapCapCateadlarUarUadlatfarUatgathatiatjatkatlatmatmatnatmatmaurauraurauratoatoatoatoatoatpatqatratsattatuatvatwatpatxatyatzatAatBatCatDatEadFatDatDatDatDaqgaqgaqgaqgatFatGatHatIaqmaqmaqmaqmatJaqmatKatLatMatNatOatDatPatQatRatSatSatSatSatSalralOalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaafaaaaaaaaaatTatUapkakLasQasQasQasQasQatVatWatXatYatZauaaubaucaudatZaueaucaufatWaugauhauiaujaukaukaukaulaumaunauoaupauqauzausautauuaukauvauwauxauyauBauDauCauFauEavLauGavMauratoatoatoatoatoatpauIauJauKattauLauMauNatpauOauPauQauRauSauTauUauVauWauXauYauZavaavbauRavcauSauSavdasFauRaveavfavgavaavhauRaviavaavjavkauRavlavmauSavnatSatSatSatSatSalravoalOavpaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafatTapkavqakLasQasQasQasQasQavravsavtavuavuavvavwavwavxavyavzavwavAavwavwavBavCavDavwavwavyavwavwavAavwavEavFavGavHavwavIavwavwavJavKavwavNavPavOavRavQawOavSawQauratoatoatoatoatoatpavTavUavVavWavXavYavZatpawaawbawcawdawdaweawdawfawgawhawiawjawkawlawlawmawlawlawnawoawlawlawmawpawlawqawlawrawlawlawsawtawtawuawvawwatSatSatSatSatSalrawxalOavpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaafaaaaaaaaaatTapkawyakLasQasQasQasQasQawzawAawBawCawDawEawFawGawHawIawJawKawAawAawLawMatbawNawAawAawPawAawRawAawSawTawUawVawWawXawYawZaxaaxbaxcauyaxdauDaxeaxgaxfaxiaxhaxjauratoatoatoatoatoatpaxkaxlaxmattavZaxnaxoatpaxpaxqaxrasGaxsaxtaxuaxvaxwauXaxxaxyaxzaxAaxBaxsaxDaxsaxEasFasGaxFaxsaxGaxHaxIasGaxJaxzaxKaxLasGaxMaxNaxsaxOatSatSatSatSatSalraxPalOavpaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafatTaRXavqakLasQasQasQasQasQavravsavtavuavuavvavwavwavxavyavzavwavAavwavwavBavCavDavwavwavyavwavwavAavwavEavFavGavHavwavIavwavwavJavKavwavNavPavOavRavQawOavSawQauratoatoatoatoatoatpavTavUavVavWavXavYavZatpawaawbawcawdawdaweawdawfawgawhawiawjawkawlawlawmawlawlawnawoawlawlawmawpawlawqawlawrawlawlawsawtawtawuawvawwatSatSatSatSatSalrawxalOavpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaafaaaaaaaaaatTapkawyakLasQasQasQasQasQawzawAawBawCawDawEawFawGawHawIawJawKaxGawAawLawMatbawNawAawAawPawAawRawAawSawTawUawVawWawXawYawZaxaaxbaxcauyaxdauDaxeaxgaxfaxiaxhaxjauratoatoatoatoatoatpaxkaxlaxmattavZaxnaxoatpaxpaxqaxrasGaxsaxtaxuaxvaxwauXaxxaxyaxzaxAaxBaxsaxDaxsaxEasFasGaxFaxsaUiaxHaxIasGaxJaxzaxKaxLasGaxMaxNaxsaxOatSatSatSatSatSalraxPalOavpaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaakLapkapkakLaxQasQasQasQasQarTaxRaxSarUaxTaxUaxVaxWaxXaxVaxYaxVaxVaxVaxVaxZatbayaarUarUarUarUarUarUarUarUarUaybaycarUaydayeayfaygayhayiaxCatmatnayjatmatmatmatmauraynatoatoatoatoatpayoaypayqattatuazvatuatpayraysaytayuatPayvatDaywayxatDatDatDatDayyayyayyayyayzayAayBayCayDayDayDayDayEayDayFayGayHayIayJayKatPayLatRayMatSatSatSatSalrayNalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLayOapkakLakLakLakLakLakLarTarUarUarUayPapkaxVayQayRaySayTayUayRayVaxVayWayXayYaybayZazaazbazcazcazdazeazfazgazhaybasoasoaziazjazkazlaykazmaznazoazpaykaylaymauHauHazsaztazuauHatpatpatpatpatpatpaAlatpatpazwazxazyazzasyasyayxazAazBazCazDazEazFayyazGazHazIayyazJasFazKayDazLazMayDazNazOazPayDazQazRazSazTazTazTazUalralralralralralrarRalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaakLakLapkapkapkapkaqDaqDaqDaqDaqDazVazWazWazXaxVayQayRayRazYayRayRayVaxVazZaAaaAaaAbazbazbaAcaAcaAcaAcaAcaAcaAcaAdaybaaaaaaaAeaAfaAgaAhauAazrazqaAjaAiauAaAnaAoaApaAkaAraAsaAtaAuaAvaAwaAxaAyaAzaAAaABaACaAzaADaAEaAFaAGaaaaaaayxaAHazBaAIaAIaAIaAIaAJaAKaALaAMaANaAOaAPaAPayDaAQaARaASazNaATaAUayDaAVaAWaAXaAYaAZaBaaBbaBcaBdaBdaBearRarRarRalralraaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10725,23 +10739,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaKGaKGaKGaKHaKIaCsaKJaKJaKJaKJaKJaKpaKKaKLaKMaKqaKNaKNaKNaKNaybazhaKsaKOaKPaKtaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaKRaKSaJUaKTaKUaKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaKyaKVaKWaKzaElaKXaDjaJraKYaGxaGyaGyaHOaKZaLaaJwaLbaLcaHOaGyaGyaGBaKYaJyaDjaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaIHaIIaIIaIIaFTaLdaKJaKJaKJaKJaKJaKpaLeaLfaLgaKqaLhaAcaAcaAcaLiazhaLjaLkaLlaLmaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaLnaLoaLpaLqaLraKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaLsaLtaLuaLvaElaLwaDjaJraLxaGxaGyaGyaHkaLyaJwaJwaJwaLzaHkaGyaGyaGBaLxaJyaDjaDkaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaLAaFOaFQaFQaFQaFQaFQaFQaFQaFRaEPaEPaEPaLBaLCaKJaKJaKJaKJaKJaKpaLDaLEaLFaKqaAcaAcaAcaLGaybaLHaKsaLIaLlaLJaKtaaaaaaaaaaaaaLKaLLaLMaLLaLNaaaaaaaLOaLOaLPaJUaLQaLRaLRaLRaLRaLRaLRaLSaLSaLSaLRaLRaLRaLRaKyaLTaLtaLUaKzaElaDkaDjaDjaLVaLWaGyaGyaKhaLXaLXaJwaLXaLXaKhaGyaGyaGBaLYaDjaDjaDjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaLZaEPaEPaFTaMaaKJaKJaKJaKJaKJaKpaKqaMbaKqaKqaMcaMdaMeaMfaMfaMgaKsaMhaLlaMiaKtaaaaaaaaaaaaaMjaMkaMlaMmaMjaaaaaaaaaaLOaMnaJUaMoaMpaMqaMraMsaMtaLSaMuaMvaMwaMxaMyaMzaLRaMAaMBaLtaLuaKzaMCaDjaDjaMDaMEaLWaGyaGyaHOaMFaKhaMGaKhaHlaHOaGyaGyaGBaMHaMIaDjaDkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaLZaEPaEPaFTaMaaKJaKJaKJaKJaKJaKpaKqaMbaKqaKqaMcaMdaMeaMfaMfaMgaKsaMhaLlaMiaKtaaaaaaaaaaaaaMjaMkaMlaMmaMjaaaaaaaaaaLOaMnaJUaMoaMpaMqaMraMsaMtaLSaMuaSNaMwaMxaMyaMzaLRaMAaMBaLtaLuaKzaMCaDjaDjaMDaMEaLWaGyaGyaHOaMFaKhaMGaKhaHlaHOaGyaGyaGBaMHaMIaDjaDkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaCsaEEaFOaFPaFQaFQaFQaFQaFQaFPaFRaMJaMKaMLaMMaCsaMNaKJaKJaKJaKJaMfaDOaDOaDOaybaybaybaybaMfaMOaLHaKsaKsaMPaKsaKtaMQaMQaMQaMRaMjaMSaMTaMUaMjaMVaMQaMQaMQaMWaMXaMWaLRaMqaMYaMZaNbaNaaNdaNcaNfaNeaNgaMzaLRaKzaKzaNhaKzaKzaNiaDkaDjaNjaNkaLWaGyaGyaKhaNlaNmaJwaNmaNnaKhaGyaGyaGBaNkaJyaDjaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaCsaNoaNpaNqaNraNraNsaNtaNtaNuaNvaNwaCtaCtaCtaCsaMfaMfaMfaMfaMfaMfaNxaNxaNxaNyaNzaybaNAaNBaAcaNCaNDaNEaNFaNGaNHaMQaNIaNJaNKaNLaNMaNNaNMaNLaNOaNPaNQaMQaNRaNSaNRaLRaNTaNUaNVaNWaNXaNYaNZaOaaObaOcaMzaLRaOdaOeaOfaOgaOhaOiaAIaOjaOkaNkaGxaGyaGyaHOaHUaOlaOmaOnaHUaHOaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaCsaOoaOpaOqaOqaOraOqaOqaOsaOtaOuaCuaDOaOvaAcaAcaAcaOwaAcaAcaAcaAcaAcaOxaAcaAcaOyaAcaAcaAcaAcaAcaAcaAcaLHaOzaMQaOAaOAaOBaOCaODaOEaOFaOGaOHaOAaOIaMQaIpaOJaOKaLRaOLaOMaONaOOaOPaOQaORaOSaOTaOUaOVaLRaOWaOXaOYaOZaPaaPbaAIaDjaPcaNkaGxaGyaGyaGyaHOaPdaPeaPfaHOaGyaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaCsaCsaCOaDRaCOaCsaCOaDRaCOaCsaCsaCsaDOaOvaMfaFcaFcaFcaFcaFcaMfaPgaPhaMfaMfaMfaMfaMfaMfaMfaFcaFcaAcaAcazhaPiaMQaPjaOAaPkaPlaPlaPmaPnaPnaPoaOAaPpaMQaPqaPraPsaLRaPtaPuaPvaPwaPxaPyaPzaPAaPBaPCaPDaLRaPEaPFaPGaPHaFuaFuaPIaDjaDjaNkaPJaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPLaPMaDjaDjaafaafaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaCsaOoaOpaOqaOqaOraOqaOqaOsaOtaOuaCuaDOaOvaAcaAcaAcaOwaAcaAcaAcaAcaAcaOxaAcaAcaOyaAcaAcaAcaAcaAcaAcaAcaLHaOzaMQaOAaOAaOBaOCaODaOEaOFaOGaOHaOAaOIaMQaIpaOJaOKaLRaOLaOMaONaOOaOPaOQaORaOSaOTaOUaOVaLRaOWaOXaOYaOZaZYaPbaAIaDjaPcaNkaGxaGyaGyaGyaHOaPdaPeaPfaHOaGyaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaCsaCsaCOaDRaCOaCsaCOaDRaCOaCsaCsaCsaDOaOvaMfaFcaFcaFcaFcaFcaMfaPgaPhaMfaMfaMfaMfaMfaMfaMfaFcaFcbaXaAcazhaPiaMQaPjaOAaPkaPlaPlaPmaPnaPnaPoaOAaPpaMQaPqaPraPsaLRaPtaPuaPvaPwaPxaPyaPzaPAaPBaPCaPDaLRaPEaPFaPGaPHaFuaFuaPIaDjaDjaNkaPJaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPLaPMaDjaDjaafaafaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaCsaMfaMfaMfaaaaaaaaaaaaaaaaMfaMfaMfaMfaaaaaaaaaaafaaaaaaaaaaFcaFcaAcazhazcaMQaPNaPOaPPaPQaPRaPSaPTaPUaPVaPWaNMaPXaPYaPZaKTaLRaLRaQaaQbaQcaLSaQdaQeaQfaQgaQhaQiaLRaQjaQkaQlaFuaFuaaaaaaaaaaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaFcaFcazhaQmaMQaNMaNMaQnaNMaNMaQoaNMaNMaQpaNMaNMaQqaQraPZaQsaQtaQuaQuaQvaQuaQuaQuaQuaQuaQwaQuaQuaLRaQxaQyaFuaFuaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaFcaQzaQAaQBaQCaQDaQDaQEaQFaQGaQHaQDaQIaQDaQJaQKaQLaQMaQNaQKaQOaQPaQQaQRaQSaQKaQTaQUaQVaQVaQWaQXaQYaQZaFuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaagaadaadabcaagaagaadaadaafaagaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaabaaaaaaaaaaMfazgazgaybaRaaRbaRbaRcaRdaReaRfaRgaRhaRbaRiaRjaRkaRlaRmaRjaRnaRjaRoaRpaRqaRraRsaRtaRjaRjaRuayxazBazBaPIaaaaaaaaaaabaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaafaadaadaadaafaaeaagaadaadaadaafaaaaafaagaadaadaadaadaafaaeaaaaMfaMfaMfaMfaLOaLOaLOaRvaRwaRxaRyaRzaRAaRzaRzaRBaKvaRCaKwaKxaRDaRDaRDaRDaREaRFaRGaRHaLOaLOaLOaPIaPIaPIaPIaafaafaadaadaadaadaKmaaaaadaafaadaadaadaadaadaadaadaaaaaeaKmaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaRNaROaRMaRPaRQaRRaRzaRSaRTaRCaRUaRSaRDaRVaRWaRXaREaRYaRZaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaRNaROaRMaRPaRQaRRaRzaRSaRTaRCaRUaRSaRDaRVaRWaRWaREaRYaRZaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaaaaaaaaaaaaaaaaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaSgaShaSiaSjaSkaSlaSmaSnaRMaSoaSpaSqaSraRSaSsaStaKTaKRaRDaSuaRVaSvaSwaSxaSyaSzaSAaSBaSCaSDaSEaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaSFaSGaRyaRzaRzaRzaRzaRSaSHaSIaSJaSKaSLaSMaSNaSOaREaSPaSQaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaSFaSGaRyaRzaRzaRzaRzaRSaSHaSIaSJaSKaSLaSMbmqaSOaREaSPaSQaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSRaRyaRyaRyaRyaRyaRyaSSaSTaRyaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTeaTfaTgaREaThaTiaREaREaREaREaREaREaTjaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTlaTlaTmaTlaTnaRMaToaTpaTqaTraTbaTbaTbaTsaTbaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaSaaTDaTEaTFaTEaTEaSeaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTGaTHaTIaTJaTKaTLaTMaTNaRyaTOaTPaTQaTRaRnaTSaTTaTUaTcaTdaTVaTWaTXaREaTYaTZaUaaUbaUcaUdaUeaUfaSeaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTlaTlaTmaTlaTnaRMaUgaUhaRyaUiaKRaUjaUkaUlaUmaUnaUmaUoaUkaUpaUqaUraREaUsaUtaSaaTDaTEaTFaTEaTEaSeaaaaaaaaaaTkaTkaTkaTkaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTlaTlaTmaTlaTnaRMaUgaUhaRydnCaKRaUjaUkaUlaUmaUnaUmaUoaUkaUpaUqaUraREaUsaUtaSaaTDaTEaTFaTEaTEaSeaaaaaaaaaaTkaTkaTkaTkaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUuaUvaUvaUvaUvaUvaRyaUwaUwaRMaUxaUkaUkaUkaUyaUzaUAaUzaUBaUkaUCaUCaUCaREaUDaUEaREaUvaUvaUvaUvaUvaUuaaaaTkaTkaTkaTkaTkaTkaTkaTkaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUFaUGaUHaUFaUIaUJaUKaULaUMaUNaUOaUPaUQaURaUSaUTaUUaUVaUWaUXaUYaULaUYaUZaUMaVaaVbaVcaVdaUFaVeaVfaUFaTkaTkaTkaTkaTkaTkaTkaTkaTkaTkaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaVqaVraVraVraVraVsaVtaVuaVraVraVraVraVvaVwaVxaVyaVmaVlaVzaVAaVBaVCaVDaTkaTkaTkaTkaTkaTkaTkaTkaTkaTkaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10914,8 +10928,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWBaYmaYnaYoaXaaYpaXLaXMaXIaXLaYqaXhaYraXjaYsaWnaYtaWNaYuaYvaYwaYxaYyaYzaYAaYBaYCaYDaYEaXvaYFaWoaYGaYHaYIaYJaYKaXAaYLaYMaYNaWXaXEaXFaXFaXFaYiaYjaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWsaWtaWtaWtaWtaYkaWtaWtaWtaYlaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaWBaYOaYPaXJaXaaYQaYRaYSaYTaYUaYVaXhaYWaXjaYXaWnaYYaYZaZaaZbaWnaZcaZdaZeaZfaZgaWoaZhaZiaZjaWoaWoaXAaXAaZkaZlaZmaZnaZoaZpaZqaWXaXEaZraZsaZtaYiaYjaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtaYkaWuaYlaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWCaXaaZuaXaaXhaZvaXLaZwaZxaXLaZyaXhaXhaZzaXhaWnaZAaWnaZBaWnaWnaWnaZCaZDaZCaWnaWoaWoaWoaWoaWoaWoaZEaZFaYbaZGaZHaXAaZIaZJaZKaWXaZLaXFaZMaXFaZNaWXaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaafaafaafaWsaWuaZOaWtaWtaWtaWtaWtaZPaWtaWtaWtaWtaWtaZQaWuaWsaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaZRaZSaZTaZUaZVaZWaXLaZXaZYaXLaZZbaababbacbadbaebafbagbahbaibajbakbalbambanbaobapbaqbarbasbatbauaXAaXAaXAbavaXAaXAbawbaxbawaWXbaybazbaAbazbaBaWXaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtbaCbaDbaEaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaabaaaaaabaFbaGbaHbaIbaJbaKbaLbaMbaNbaLbaObaPbaLbaQbaRbakbaSbaTbaUbaVbaWbaXbaYbaZbbabbbbbcbbdbbebbfbbgbaobbhbbibbjbbkbblbbmbbnbbkbbobbpbbqaXFbbraXFbbsaWXaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaWsaWsaWtaWtaWtaWtbaCaWtbaDaWtbaEaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaZRaZSaZTaZUaZVaZWaXLaZXbntaXLaZZbaababbacbadbaebafbagbahbaibajbakbalbambanbaobapbaqbarbasbatbauaXAaXAaXAbavaXAaXAbawbaxbawaWXbaybazbaAbazbaBaWXaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtbaCbaDbaEaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaabaaaaaabaFbaGbaHbaIbaJbaKbaLbaMbaNbaLbaObaPbaLbaQbaRbakbaSbaTbaUbaVbaWbnVbaYbaZbbabbbbbcbbdbbebbfbbgbaobbhbbibbjbbkbblbbmbbnbbkbbobbpbbqaXFbbraXFbbsaWXaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaWsaWsaWtaWtaWtaWtbaCaWtbaDaWtbaEaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabbtbbubbvaXMbbwbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbakbaSbbHbbIbbJbbKbbLbbMbbNbbObaobbPbbQbbRbbSbapbaobbTbbUbbVbbWbbXbbXbbYbbZbcabcbbccbcdbcebcdbcfaYjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtbaCaWtbcgbaDbchaWtbaEaWtaWtaWtaWsaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaWBaWBbcibcjbckaXhbclbcmbcnaXhbcobcpaXhaXLbcqbcrbcrbcrbcsbctbcubcvbcwbcxbcybczbaobaobcAbaobaobaobcBbcCbcDbcEbcFbbUbcGbbUbcHaYjbcIbcJbcKbcJbcLaYjaaaaaaaaaaadbcMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaafaagaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabcNbcObcPbcQbcRbcSbcPbcTbcRbcUbcVaXhbcWbcXbcrbcYbcZbdabdbbdcbcrbddbdebdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdrbbUbbUbbUbdsbdtbdubdvbdwbdxbduaYjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10929,18 +10943,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaabaaaaaaaaabgvbjabjbbgvbjabjbbgvbjcbjdbgvbgwbgvbjabjebgvaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaabgxbjfbjgbjhbgybjibjjbcRbjkbjlbcRbjmbjnbjmbjmbjobjpbjqbjmbjrbjsbjtbjubjvbjwbjxbjubjybjsbjzbjAbjBbjCbfgbjDbjEbjFbjGbjHbjIbjJbjKbjLbjMbjNbjObjPbjQbjRbjSaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhbjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabjUbgwaaabjUbgwaaabjVbjVaaabgwaaabjUbjWaaaaaaaaaaaaaaaaaaaafbfGaaaaaaaaaaaaaaaaaabgxbjXbjgbjYbgxbcNbcNbcNbcNbcRbcRbjZbkabkbbkcbkdbkebkfbkgbjrbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkqbkvbkvbkvbkvbkvbkvbkvbkvbkwbkxbkybkybkybEBbkyaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaabkAbkCbkEbkDbkBbkEbkFbkGbkHbkIbkJbkFbkGbkKbkLbkMbkAbkAaaaaaaaaaaaaaadaaaaaaaadaaaaaaaaabgxbgxbkNbgxbgxbkObkPbkQbjrbkRbkSbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhblibljblkbllblmblnbloblpblqbkvblrblsbltblublvblwbkvblxblybkyblzblAblBbkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAblCblDblEblFblGblHblIblJblKblLblMblNblOblPblQblRblSblTbkAaafaafaafaadaafabcaadaafaafaafblUblVblVblVblWblXblYblZbjrbmabmbbmcbmdbmebkZbmfbmgbmhbmibmjbmkbldbmlbmmbmnbmoblcbljbmpbmqbmrbmsbmtbmubmvbkvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbkyaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmJbhgbmJaaaaaaaafaaaaaaaaaaafaaaaaabmJbhhbmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAbmKbmLbmMbmNbmLbmObmPbmQbmRbmLbmSbmNbmTbmMbmUbmLbmVbmWbkAaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUbmXbmYbmZblWblWbnablWbjrbnbbncbndbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnobnsblkbntbnubnvbnwbnxbnybkvbnzbnAbmAbnBbmAbnCbmCbnDbnEbkybkybkybkybkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabkGbnFbnGbmObmPbnHbnIbnJbnKbnLbnMbnNbnObnPbnQbnRbmQbnSbnTbkGaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUblUbnUbnVbnWbnXbnYblVbjrbnZboabmbbobbocbkZbodbmfboebofbjrbogbohboibojbokbolbombonboobkqbopboqborbosbotbkvboubovbowboxbmyboybmCbozboAboBboCboDboEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAblCblDblEblFblGblHblIblJblKblLblMblNblOblPblQblRblSblTbkAaafaafaafaadaafabcaadaafaafaafblUblVblVblVblWblXblYblZbjrbmabmbbmcbmdbmebkZbmfbmgbmhbmibmjbmkbldbmlbmmbmnbmoblcbljbmpboCbmrbmsbmtbmubmvbkvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbkyaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmJbhgbmJaaaaaaaafaaaaaaaaaaafaaaaaabmJbhhbmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAbmKbmLbmMbmNbmLbmObmPbmQbmRbmLbmSbmNbmTbmMbmUbmLbmVbmWbkAaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUbmXbmYbmZblWblWbnablWbjrbnbbncbndbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnobnsblkbrQbnubnvbnwbnxbnybkvbnzbnAbmAbnBbmAbnCbmCbnDbnEbkybkybkybkybkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabkGbnFbnGbmObmPbnHbnIbnJbnKbnLbnMbnNbnObnPbnQbnRbmQbnSbnTbkGaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUblUbnUbyRbnWbnXbnYblVbjrbnZboabmbbobbocbkZbodbmfboebofbjrbogbohboibojbokbolbombonboobkqbopboqborbosbotbkvboubovbowboxbmyboybmCbozboAboBbJHboDboEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvboFboGboJboKboHboIboLboMboNboLboQboPboOboQboRboSboTboUbmMbmUboVboWboXbkGaaaaaaaaaaafaaaaaaaaaaabaaaaaaaaaboYboZbpablYbpbbnYblVbpcbpdbpebpfbpgbphbkZbpibkZbpjbpkbjrbjubjubjubplbpmbpnbjubpobjubkqbppbpqbprbpsbptbkvbpubpvbmAbpwbmxbpxbmCbpybpzbpAbpBbpCboEaaaaaaaaaaabaagaaaaaaaaaaaaaaaaafabcaadaadaadaadaadaagaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbpDbpEbpFbpGbpHbpIbpJbpKbmPbpLbpMbpMbpNbnHbpObpPbmPbpQbpRbpSbpTbpUbpVbpWbpWbpWbpWbpWaaaaaaaaaaaaaaaaaaaaaboYboZbpXbpYbpZbqablVbjrbqbbqcbqdbqebqfbqgbqhbqibqjbqkbjrbqlbjubqmbqnbqobqpbqmbqqbjubqrbkqbkqbkqbkqbkqbkvbqsbqtbqubqvbqwbqxbmCbqybqzbqAbqBbqBboEaaaaaaaaaaaaaadaaaaaaaaaaaaaafaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKaafaafaafaafbgvbgvbgvbgvaaabqCbqDbqEbmMbmNbqFbqGbqJbqIbqHbqKbqLbqMbqHbqNbpTbmTbqObqPbpWbqQbqRbqSbpWbqTbqUbqUaaaaaabqVblUbqWbqXbqYbqZbrabrbbrbbrbbrbbrbbrbbrcbrbbrbbrbbrbbrbbrbbrbbrbbrbbrdbrebrfbrfbrgbrhbribribrjbrkbrlbrmbrnbmCbrobrpbrqbrobrobmCbmCbrrbrsbrtbrubrvbrwbrxaafaafaafaadaaaaaaaaaaafaafaaaaaaaafaaaaaaaafaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabgvbrybrzboJboKboHbrAboLbrBbrCboUbrDbmLbmTbmUbmLbrEbnJbrFbnJbrGbrHbrIbrJbrKbrLbrMbrNbrObrPbrQbqUbqUaaabrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbshbsibsjbskbslbsmbsnbsobspbsqbsrbssbsubsvbtPbswbsxbsybszbsAbsBbsCbsDbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPaaaaaaaaaabcaadaadaadaagaabaaaaaaaafaaaaaaaafaaaaafaafbsQaafaafaaaaaaaaaaaeaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabgvbrybrzboJboKboHbrAboLbrBbrCboUbrDbmLbmTbmUbmLbrEbnJbrFbnJbrGbrHbrIbrJbrKbrLbrMbrNbrObrPbMNbqUbqUaaabrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbshbsibsjbskbslbsmbsnbsobspbsqbsrbssbsubsvbtPbswbsxbsybszbsAbsBbsCbsDbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPaaaaaaaaaabcaadaadaadaagaabaaaaaaaafaaaaaaaafaaaaafaafbsQaafaafaaaaaaaaaaaeaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaabgvbsRbsSbpFbpGbsTbsUbmTbsVbsWbsXbsYbqHbsZbpTbtabtbbtcbtdbtebtfbtgbthbtibtjbtkbtlbtmbtnbtobtpbtqbqUaaabtrbrSbtsbttbtubtvbtwbtxbtybtzbtAbtzbtBbtzbtCbtDbtzbtEbtFbtGbtHbtIbtJbtKbtLbtMbtNbtObtQbtRbuTbtSbvkbtTbtUbtVbtWbtVbtXbtVbtYbtZbuabubbucbudbsLbuebufbsObugaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabuhbuibujbukaaaaafaaabulaaaaafaaaaaaaagaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaabaaaaaabhhaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabqCbumbqEbmMbmNbunbuobupbuqburbsWbusbutbutbutbuubutbutbuvbuwbuwbuwbuwbuwbuxbuybuzbqTbqTblUblUbuAbuBbuCbuDbuEbrbbuFbuGbuHbuGbuIbuJbuGbuKbuLbuHbuKbuMbuNbuObuPbuQbspbuRbuSbuUbuVbvXbvYbuWbuXbuWbuYbuWbuWbuWbuZbvabvbbvabuZbuZbvcbvdbrtbvebvfbrwbrwaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabvgbvhbvhbvgbvgbvgbvibvjaaaaafaaaaaaaafaaaaaaaaaaaaaabbhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbvmbvlboJboKbvnbvqboLbrBbvobvpbwvboQbvrboQboTbvsbutbvtbvubvvbvwbvxbuvbvybvzbvAbvBbuwbvCbvDbvEbvFbvGbvHbvIbvJbvKblUblUbvLbrbbvMbvNbvObvNbvPbrbbvQbuPbrbbvRbuPbrbbvSbuPbrYbvTbvUbvVbvWbxhbxjbzybxjbuWbwabwbbwcbwdbwebuWbwfbwgbwhbwibwjbuZbwkbvZbvZbwlbwmbwnbvgaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabwobwpbwqbwrbwsbwsbwtbvjbvibviaaaaaaaafaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbwubBUbpFbpGbwwbwxbwybwzbwAbwBbwCbwBbwDbwBbwEbwFbwGbwHbwIbwJbwKbwLbuvbwMbwNbwObwPbwQbwRbwSbwTbwUbwUbwUbwUbwUbwUbwVbwWbwXbrbbwYbvNbwZbvNbvPbrbbvNbxabrbbvNbxbbrbbvNbxcbrbbxdbxebxfbxgbxhclfclgcnebuWbxkbxlbxmbxnbxobuWbxpbxqbxrbxsbxtbuZbxubxvbvZbxwbxibxxbvgaaaaaaaaaaaaaaabvgbvgbvibvibvibvgbxybxzbxAbxBbxCbxDbxEbxFbxGbvibvgbxHbxHbxIbxIaafaafaafbhgaafaafaafaafbxJbxKbxLbhgbxMbxNbxObxPbxQaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabxRbxSbqEbxTbxUbxVbxWbxXbxYbmTbxZbyabwGbybbycbydbyebyfbuvbygbyhbyibyjbuwbvCbykbylbuxbuxbuxbuxbuxbuxbuxbymbynbrbbyobvNbypbyqbvPbrbbyrbysbrbbyrbytbrbbyrbyubrbbyvbywbyxbxgbxhcnfcoUcJZbuWbyybyzbyAbyBbyCbuWbyDbxqbyEbxqbyFbuZbyGbxvbvZbvZbyHbvZbvZbvgbvgbvgbvgbvgbvgbxibyIbyJbyKbyKbyLbyMbyMbyLbyNbyObyPbyQbyRbySbyTbxHbyUbyVbxIbxIaaaaaabhgaaaaaaaaaaafbyWbyXbyYbyZbzabyZbyWbzbbyWaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabxRbxSbqEbxTbxUbxVbxWbxXbxYbmTbxZbyabwGbybbycbydbyebyfbuvbygbyhbyibyjbuwbvCbykbylbuxbuxbuxbuxbuxbuxbuxbymbynbrbbyobvNbypbyqbvPbrbbyrbysbrbbyrbytbrbbyrbyubrbbyvbywbyxbxgbxhcnfcoUcJZbuWbyybyzbyAbyBbyCbuWbyDbxqbyEbxqbyFbuZbyGbxvbvZbvZbyHbvZbvZbvgbvgbvgbvgbvgbvgcbvbyIbyJbyKbyKbyLbyMbyMbyLbyNbyObyPbyQcjEbySbyTbxHbyUbyVbxIbxIaaaaaabhgaaaaaaaaaaafbyWbyXbyYbyZbzabyZbyWbzbbyWaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJaaaaaaaaaaaaaaaaaaaaaaaaaaabkAbzcbzdbzebkAbkAbzfbzgbzhbzgbzibzjbzkbuvbutbzlbutbuvbuvbuwbuwbzmbuwbuwbuxbznbzobzpbuxbzqbzrbzsbztbuxbymbynbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbzubzvbzwbzxbxhcOBdcSdfrbuWbzAbzBbzCbzDbzEbuWbzFbzGbzHbxqbzIbuZbzJbzKbzLbzMbzNbzNbzNbzNbzNbzNbzObzNbzNbzNbzNbzPbzQbzRbzSbzTbzUbzVbzWbyObyPbzXbyObzYbzZbAabAbbAcbAdbxIaaaaaabhgaaaaaaaaaaaabyWbAebyZbAfbAgbAhbyWbAibyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjaaaaaaaaaaaaaaabAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaafaaaaaaaaaaaaaaaaaabAkbAkbAkbAkbAkbAkbAkbAkbAkbAlbAmbAnbAobApbAqbArbAsbAtbAtbAubAvbAwbAxbAybAzbAAbABbACbvCbADbAEbAFbuxbDJbymbymbymbAGbAHbAIbwUbAJbAKbALbAMbwUbwUbwUbwUbwUbwUbANbAObwUbAPbAQbuxbARbASbATbxhbxhbxhbxhbuWbAVbAWbAXbAYbAZbuWbBabBbbBcbBdbBebuZbBfbxibBgbBhbBibBjbBkbxibxibBlbBlbBlbBlbBlbBlbBlbBmbBnbBobBpbBqbBrbBrbBrbBrbBsbBsbBsbBsbBsbBtbBubBvbBwbBwbBxbBwbBxbBwbBxbBwbBwbBybBzbBAbBBbBCbyWbBDbyWbyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaabBEbBFbBGbBHbAkbBIbBJbBKbBLbBMbBMbBNbAkbBObBPbBQbBRbBSbBTbDpbBVbDpbBWbBXbBYbBZbCabCbbCcbCdbCebCfbvCbCgbzobChbuxbCibCjbymbymbuxbCkbClbymbCmbCnbuxbuxbCobuxbuxbCpbymbymbAQbCqbymbCrbuxbuxbCsbCtbCubvZbvZbCvbyJbuWbCwbCxbuWbuWbuWbuWbuZbuZbCybuZbuZbuZbBfbxibCzbCAbBibwnbCBbCCbCDbBlbCEbCFbCGbCHbCIbBlbCJbCJbCKbCJbCJbBrbCLbCMbCNbBsbCObBsbCPbBsbCQbCRbCSbBwbCTbCUbCVbCVbCWbCXbCYbBwbCZbDabDbbDcbDdbDebDfbDgbyWaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10948,25 +10962,25 @@ aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbA aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbGmbEMbENbEObEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabFbbFcbuxbFdbFebFfbFgbFhbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEbFFbFGbEabFHbFIbFJbFKbFLbFVbFMbFNbFObFPbEjbFQbBrbFRbFSbFTbGbbGibFWbFXbFYbBsbFZbGabHybGcbGdbGebGdbGfbGgbGhbKrbGjbGkbGlbGpbGqbGnbGobJpbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDbGEbGFbEObGGbGHbERbGIbGJbGKbGLbGMbEXbGNbGObGPbGQbGRbuxbGSbGTbGUbGVbFhbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtbHubHvbHwbHxbKtbHzbHAbHBbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLbEtbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaafaaabHWbHWbHWbHWbHWbHWbHWbHXbHXbBEbHYbHZbDibAkbIabIabIbbIcbIdbIebIfbAkbIgbIhbIibIjbIkbIlccMbCfbInbIobIpbIqbIrbDybIsbItbIubIvbIwbIxbIxbIybIxbIxbIxbIxbuxbuxbuxbIzbDGbIAbIBbICbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbIEbIFbIGbIHbIIbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbIJbIKbILbILbIMbINbBqbDZbIObIPbIQbEabIRbISbITbIUbIVbIWbEgbEjbHubIXbIYbIZbBrbJabJbbJcbBsbJdbJebJfbJgbBsbJhbJibBwbBwbJjbJkbJlbJjbJmbJjbBwbJnbJobKFbJqbJrbJsbJtbJqbJubJvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIabJHbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKzbDZbEabBlbEgbKsbOobKsbKubBlbKvbxIbKwbxIbKxbBrbBrbBrbBrbKybBsbPEbBsbBsbBsbHGbKAbyVbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbLkbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIackbbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKzbDZbEabBlbEgbKsbOobKsbKubBlbKvbxIbKwbxIbKxbBrbBrbBrbBrbKybBsbPEbBsbBsbBsbHGbKAbyVbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbLkbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaafbKLbKMbKMbKMbKMbKNbKObKPbKQbKRbKSbKTbKUbHWbKVbKWbKXbKYbKZbBEbAkbAkbAkbAkbAkbAkbAkbAkbAkbLabLbbLcbLdbLebLfbLgbLhbLibLjbPTbLlbLmbEXbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbIxbLybLzbLAbCrbDGbDGbDGbDGaaaaaaaaaaaaaaaaaabLBbLBbLCbLCbLCbLBbLBbLDbLEbHcbLFbLGbLHbLHbIDbIDbIDbLHbLHaaaaaaaaaaaaaaaaaabFBbFBbFBbFBbFBbLIbBqbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLYbLZbMabMbbMcbMbbMdbMebMfbMgbMhbMibMjbMkbMlbMmbMmbMnbMobMpbMmbMqbMrbJvbMsbMtbMubMvbMwbMxbMybMzbMAbMAbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbPTbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOebNXbOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbPGbOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMclTbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbPTbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOebNXbOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbPGbOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKLbMDbMDbKMbMDbKNbMFbOybOzbOAbOBbOCbODbHWbOEbKXbOFbOGbOHbOIbOJbOKbOLbOMbONbOObOPbOQbORbOSbOTbOKbOUbOVbLgbNhbOWbNjbOXbOYbOZbPabDybDybDzbPbbDzbDybIxbIxbPcbPdbNsbPebIxbPfbPgbAQbCrbymbuxaaaaaaaaaaaaaaabLCbLCbPhbPibPhbPjbPkbPlbNAbNAbPmbNDbHcbNEbPmbNHbNHbPnbPobPpbPqbPrbPqbIDbIDaaaaaaaaaaaaaaabvZbPsbPtbPubPvbPvbPwbPxbPwbPwbPwbPwbPybPzbCSbPAbPAbPAbPAbPBbPAbPAbPAbPAbPAbPAbPAbPCbPDbSWbPFbPFbPFbPFbPFbPFbPFbTabPHbPIbPJbPKbPLbJvbPMbPNbMubPObPPbPQbMybPRbPSbTCbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMCbKMbKMbKMbKMbKNbKObPUbPVbPVbPWbPXbPYbHWbPZbQabQbbQcbDibQdbQebQfbQgbQhbQibQhbQhbQjbQhbQgbQkbQlbQmbQnbQobQpbQkbQqbQrbQsbOZbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNsbQEbIxbQFbPgbAQbCrbQGbuxaaaaaaaaaaaabLCbLCbQHbQIbQJbQKbQLbQMbQNbQJbQObQPbQQbHcbQRbQPbQSbNEbQTbQUbQVbQWbNEbQXbQYbIDbIDaaaaaaaaaaaabvZbQZbvZbvZbPvbRabRbbRcbRdbRebRfbRgbRhbRibEsbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbPAbPCbRubRvbRwbRxbPFbRybRzbRAbPFbRBbRCbPIbPIbRDbREbRFbRGbRHbRIbRJbKBbKKbKBbKBbKBbKBbKGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabHWbRKbRLbRMbRNbRObRPbHWbRQbRRbQbbRSbDibRTbRUbQgbQgbRVbRWbRXbRYbRZbSabSbbQkbScbSdbSebSfbSgbShbSibSjbSkbEVbSlbSmbSnbSobSpbSqbSrbSsbStbStbSubStbStbStbStbuxbuxbCrbSvbuxaaaaaaaaabLCbLCbQHbQIbSwbSwbSxbSybSzbSAbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSJbSKbSLbSMbSMbQXbQYbIDbIDaaaaaaaaabvZbSNbSObSPbPvbSQbSRbSSbSTbSUbSVbWObSXbSYbSZcdnbTbbTcbTdbTdbTdbTebTfbTgbThbTibTjbPCbTkbTlbTmbTnbTobTobTobTobPFbTpbTqbTrbPIbTsbTtbKBbTubTvbTwbTxbTybTzbTAbTBbJvaaaaaaaabaaaaaaaaaabcaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaafaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaafaafbTDbTEbTDbTDbTDbTDbTDbTEbTFbTGbTDbBEbTHbQbbTIbDibTJbTKbQgbTLbTMbTNbTObTPbTQbTRbTSbQkbTTbTUbTVbTWbTXbTYbTZbSjbUabEVbUbbUcbUdbUebUfbUgbUhbUibStbUjbUkbUlbUlbUmbStbUnbymbCrbUobGZaaaaaaaaabLCbUpbQIbSwbUqbUrbUsbUtbUubUvbUwbUxbUybUzbUAbUBbQPbUCbNEbUDbUEbUFbUGbUHbUIbSMbQXbUJbIDaaaaaaaaabvibUKbxibULbPvbUMbUNbUObUPbUQbURbUSbUTbUUbUVbRjbUWbUXbUYbUZbUYbVabTibVbbVcbVdbVebPCbVfbVgbVhbVxbVjbVkbTobVlbPFbVmbVnbVobPIbVpbVqbKBbVrbVsbVtbVtbVtbVsbVsbVubHVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaafaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaafaafbTDbTEbTDbTDbTDbTDbTDbTEbTFbTGbTDbBEbTHbQbbTIbDibTJbTKbQgbTLbTMbTNbTObTPbTQbTRbTSbQkbTTbTUbTVbTWbTXbTYbTZbSjbUabEVbUbbUcbUdbUebUfbUgbUhbUibStbUjbUkbUlbUlbUmbStbUnbymbCrbUobGZaaaaaaaaabLCbUpbQIbSwbUqbUrbUsbUtbUubUvdNgbUxbUybUzbUAbUBbQPbUCbNEbUDbUEbUFbUGbUHbUIbSMbQXbUJbIDaaaaaaaaabvibUKbxibULbPvbUMbUNbUObUPbUQbURbUSbUTbUUbUVbRjbUWbUXbUYbUZbUYbVabTibVbbVcbVdbVebPCbVfbVgbVhbVxbVjbVkbTobVlbPFbVmbVnbVobPIbVpbVqbKBbVrbVsbVtbVtbVtbVsbVsbVubHVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVybVzbVEbVBbVCbVDbVBbXpbVBbVFbVGbVHbVIbBEbVJbVKbVLbVMbVNbVObQgbVPbTMbVQbVRbVSbVTbTRbVUbQkbVVbVWbVXbVYbVZbWabNjbWbbWcbWdbWebWfbWgbWhbWibWjbUhbWkbWlbWmbWnbWobWpbWqbStbWrbymbCrbWsbGZaaaaaabLBbLBbWtbQJbSwbWubWvbWwbWxbWybWxbWxbWzbWAbKjbWBbWCbWDbWDbWEbWFbWGbWDbWDbWHbUHbSMbNEbWIbLHbLHaaaaaabvibUKbxibWJbPvbWKbWLbWMbUPbWNbPvbPvbxHcfqbxHbPCbPCbWPbWQbWRbWSbVabWTbWUbWVbWWbWXbPCbWYbWZbXabXbbVjbXcbTobXdbPFbXebXfbXgbPIbXhbBvbKBbVrbXibXjbXkbXlbXmbXnbVubGsaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabMCbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbVybXoccAbXqbXrbXsbXtbXrbXsbXubXvbXwbXxbBEbXybXzbKZbDibXAbXBbQgbXCbTMbTObXDbXEbTObTRbXFbQkbXGbXHbXIbXJbXKbXLbXMbXNbXObGLbXPbUcbQwbXQbXRbXRbXSbQwbStbXTbXUbXVbXWbXXbStbWrbymbCrbDLbGZaaaaaabLBbXYbXZbYabYbbYcbWwbWwbYdbYebYfbWwbYgbWAbWAbYhbWDbWDbYibYjbYkbYlbYmbWDbWDbYnbYobYpbYqbYrbLHaaaaaabvibUKbYscvCbPvbYtbYubYubYvbYwbUSbYxbYybYzbYAbYBbRjbYCbYDbYDbYDbYEbYFbYFbYGbYHbYFbYIbYJbYKbYLbYMbTobTobTobYNbPFbYObYPbYQbPIbRDbREbKBbYRbKBbKBbKBbKBbKBbKBbKBbKBbYSbYSaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaadbYTbYUbYVbYWbYXbYVbYWbYXbXubYYbYZbZabBEbZbbZcbZbbDibZdbZebQgbZfbZgbZhbZibXEbZhbZjbZkbQkbZlbZmbZnbZobZpbZqbSibOXbEVbEVbSlbZrbZsbQwbQwbQwbQwbZtbStbZubStbZvbStbStbStbuxbymbCrbZwbuxaaaaaabLCbZxbZybZzbZAbZBbZCbZDbZEbZFbZGbWwbZHbZHbZIbZJbWDbZKbZLbZMbZMbZNbZObZPbWDbZQbZRbZSbYqbZTbIDaaaaaabvZbUKbAUbvZbPvbZUbZVbZWbZWbZXbZYbZZcaacabcaccadcaecafcagcagcagcahcaicajcakcalcambYIcancaocapcaqbPFcarcascatbPFcaucavcawbPIbRDbREcaxcaycazcaAcaBcaCcaDcaEcaFcaGcaHcaIcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVycaJbTDcaKbYWbYXbYVbYWbYXbXucaLcaMcaMcaMcaMcaMcaMcaMcaNcaObQgcaPcaQcaRcaScaTcaUcaVcaWbQkbQkcaXbQkcaYcaZbQkcbacbbbEVcbccbdbQucbecbfcbgcbhcbicbjbStcbkbStcblbStcbmcbncbobymbCrbymbuxaaaaaabLCcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcbCcbDbWDcbEcbFcbGcbHcbIbZOcbJcbKcbLcbMcbNcbOcbPbIDaaaaaabvZbUKcbQcbRbPvbPvcbScbTcbUcbVbUScbWcbXcbYcbZccaccbcccccdcceccfccgcaicchcciccjcckbYIbPFcclbPFbPFbPFbPFbPFbPFbPFbPIbPIbPIbPIccmccncaxccoccpccqccrccscctcaCcaFcaFcaHccuccvccwcaHccxccycaHcaHaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVycaJbTDcaKbYWbYXbYVbYWbYXbXucaLcaMcaMcaMcaMcaMcaMcaMcaNcaObQgcaPcaQcaRcaScaTcaUcaVcaWbQkbQkcaXbQkcaYcaZbQkcbacbbbEVcbccbdbQucbecbfcbgcbhcbicbjbStcbkbStcblbStcbmcbncbobymbCrbymbuxaaaaaabLCcbpcbqcbrcbscbtcbucnNcbwcbxcbycbzcbAcbBcbCcbDbWDcbEcbFcbGcbHcbIbZOcbJcbKcbLcbMcbNcbOcbPbIDaaaaaabvZbUKcbQcbRbPvbPvcbScbTcbUcbVbUScbWcbXcbYcbZccaccbcccccdcceccfccgcaicchcciccjcckbYIbPFcclbPFbPFbPFbPFbPFbPFbPFbPIbPIbPIbPIccmccncaxccoccpccqccrccscctcaCcaFcaFcaHccuccvccwcaHccxccycaHcaHaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVyccBbTDccCbYWccDccEbYWccDbXuccFcaMccGccHccIccJccKcaMbXAccLcaWcaWcaWcaWcaWcaWcaWcaWcaWcCibQkbQkbQkbQkbQkbQkccNccObDxccPccNccQccQccQccQccQccQccQccRccRccRccRbStccSccTbuxccUccVccWbuxaaaaaabLCccXccYccZcdacdbbWwbWwbWwbWwbWwbWwcdccddcddcdebWDbWDbWDbWDbWDcdfbZOcdgbWDcdhcbMcdicbOcdjbIDaaaaaabvZcdkbxibxicdlbPvbPvbPvbPvbPvbPvcdmcipcdocipcdmbPCbPCbPCbPCbPCbPCbYIcdpcdqcdqcdrbYIcdscdscdscdtcducdvcdwcdxcdycdzcdAbxHcdBcdCcdDcdEcdFcdGcdHccrccscdIcaCcdJcaFcdKcdLcdMcdNcaIcdOcdMcdPcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafbTDcehcdScdTcdUcdVcdTcdWcdXcdYcdZceacebceccedceebXAcefcegcfEceicejcekcekcekcekcekcekcekcekcekcelcemcenceocepceqceqcerbuxcescescetbDLceubymbAQbAQbvFbvGbuxcevbuxbuxbymbCrcewbuxaaaaaabLBcexccYbQJceycezceAceBceCceDceEceFceGceHceHceIceHceHceHceJceKceLceMceNbWDbNEceObNEcbObNGbLHaaaaaabvZcePceQceQceQceRceSbxiceTceUbvZceVceWceXceWceYceZcfacfbcfccfdcfebYIbYIcffcfgbYIbYIcfhcficficfjcfkcflcfmcfmcfmcdvcfnbxHcfocfpbOncoHcfrcfscftccrccsccscdIcdIcaFcaHcfucfvcfwcfxcfycfzcfAcfBcfCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcfDbXrcfFciGcfGcfHbXucfIcaMcaMcaMcaMcfJcfKcfLcfMcfNcfOcfOcfPcfQcfRcfRcfRcfRcfRcfRcfRcencencencfScfTcfUcfVcfWcfXcfYcfZcgacgbcgacgacgacgacgacgccgccgccgccgdcgccgccgccgecgfbuxbLCbLCbLBcggccYcghcgicgjcgkcglcglcgmceEcgnbWAbWAbWAbWAbWAbWAbWAcgnbWEcgocgpcgqbWDcgrcgscgtcgucgvbLHcgwcgwbvZbUKbxibAUbCCbCDcgxbxicgybxicgzcgAcgBcgCcgDcgAcgEcfacgFcgGcgHcgIcgJcgKcgLcgMcgNcgNcgOcdtcdtcdtcdtcdtcdtcdtcfmcdvcgPbxHcgQcgRcgScaxcgTcgUcgVccrccscdIcgWcgXcaFcaHcgYcgZchacaHcaIchbcaIcaHcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDchdchechfbXuchgchhchichjchkchlchmchnchochpchqchrchschtcfRchuchuchuchuchuchvchwchxcenchychzchAchBchCchDchEbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxchFchGchHchIbLBchJchKchLchMchNcgkcgkchOchPceEchQbWAchRchRchRchRchRbWAchSbWDchTchUbWDbWDchVchWchVchXchYchZciacibciccidbvgbvZbvZbvZbvZbvZbvZbvZbvZciecifcigcihcieceZceZceZciiceZceZceZceZcijcikcgNcilcimcinciociociociociocdtcdvcdvcaGbxHcoIbxHbxHcaxciqcaxcaxccrcaFcaGcaHcaHcaHcaHcircgZciscitciucivciwcixcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafciybTDcizciAciBciCciDciEciFcmCciHciIciJciKciLciMciNciOciPciQciRcfOciSciTcfRchuchuchuchuchuciUciVciWciXciYciZcjacjbcjccjdcjecjfcjgchCcjdcjhcjicjbcjjcjkcjlcjmcjbcjncjociWcjpcjqcjrcjscjtcjucjvbUwbUwcjwcjxcjycjzcgkceEceEceEcdcbWAchRchRchRchRchRbWAcgnbWDbWDbWDbWDciacjAcjBcjCcjDcjDcjEcjFcjGcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcjNcjOcjScjTcjUcjVcjWcjXcjTcjYcjZckackbcijckcckdckeckfckgciociociociociocdtckhcdvckickjckkcklcaGckmcknckockpcaCckqckrcaHckscktcaHckucgZcdMcdMcdMcgZcdMckvckwcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMchnbLgckNcfOcfOckOcencfRchuchuchuchuchuckPckQckRckSckTckUckVckWckXckWckYckUckZckUckUclaclbckUckUclccldcledhndhpdhqclhclicljclkcllclmcllcllcllcllcllclncloclpbYhclqclrceHclsbWAchRchRchRchRchRbWAcltbZJcluclvclwclxclyclzclAclAclAclAclAclBclCclDclEclFclGclHclIclHclHclJclKclHclIclLclHclMclHclHclNclHclHclOclPclJclQclRclSclTclUclVciociociociociocdtclWcdvclXclYclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmncmocmpcmqcmrcmscmtcdMcmucmvaafaafaafaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaaabTDcmwciAcmxcmycmzcmAcmBcrAcmDcmEcmFcmGcmHcmIcmJcmKcfOcfOcfOcmLcmMcmNcfRchuchuchuchuchucmOcmPciWciXcmQcmRcmScmTcjccmUcmVcmWcmXchCdhscmYcmZcmTcnacnbcnccndcngdhSdiqcnhcnicnjcnkcnlcnmcnncnobUwbUwcnpcnqcnrcnsbWAcntcnucddcddbWAchRchRchRchRchRbWAcnvcnwcnxcnybWAcnzcnAcnBcnCcnDcnDcnEcnFcnGcnHcnIcnJcjKcjLcjPcnKcjPcjPcnLcnMcnNcnOcnPcnQcnRcnRcnScnTcnLcnRcnUcnVcnWcnXckcckdcnYcnZcoaciociociociociocdtcobcoccaGcodcoecofcaGcogcohcogcoicojcokcolcaHcomconcaHcoocopcoqcdMcorcgZcdMcoscotcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcmLcrQcrOcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCcpDcpEcpFcpGcpHcpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafciybTDcizciAciBciCciDciEciFcmCciHciIciJciKciLciMciNciOciPciQciRcfOciSciTcfRchuchuchuchuchuciUciVciWciXciYciZcjacjbcjccjdcjecjfcjgdVxcjdcjhcjicjbcjjcjkcjlcjmcjbcjncjociWcjpcjqcjrcjscjtcjucjvbUwbUwcjwcjxcjycjzcgkceEceEceEcdcbWAchRchRchRchRchRbWAcgnbWDbWDbWDbWDciacjAcjBcjCcjDcjDcpDcjFcjGcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcjNcjOcjScjTcjUcjVcjWcjXcjTcjYcjZckacpEcijckcckdckeckfckgciociociociociocdtckhcdvckickjckkcklcaGckmcknckockpcaCckqckrcaHckscktcaHckucpGcpFcpFcpFcopcdMckvckwcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMchnbLgckNcfOcfOckOcencfRchuchuchuchuchuckPckQckRckSckTckUckVckWckXckWckYckUckZckUckUclaclbckUckUclccldcledhndhpdhqclhclicljclkcllclmcllcllcllcllcllclncloclpbYhclqclrceHclsbWAchRchRchRchRchRbWAcltbZJcluclvclwclxclyclzclAclAclAclAclAclBclCclDclEclFclGclHclIclHclHclJclKclHclIclLclHclMclHclHclNclHclHclOclPclJclQclRclScpHclUclVciociociociociocdtclWcdvclXclYclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmncmocmpcmqcmrcmscmtcdMcmucmvaafaafaafaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaaabTDcmwciAcmxcmycmzcmAcmBcrAcmDcmEcmFcmGcmHcmIcmJcmKcfOcfOcfOcmLcmMcmNcfRchuchuchuchuchucmOcmPciWciXcmQcmRcmScmTcjccmUcmVcmWcmXchCdhscmYcmZcmTcnacnbcnccndcngdhSdiqcnhcnicnjcnkcnlcnmcnncnobUwbUwcnpcnqcnrcnsbWAcntcnucddcddbWAchRchRchRchRchRbWAcnvcnwcnxcnybWAcnzcnAcnBcnCcnDcnDcnEcnFcnGcnHcnIcnJcjKcjLcjPcnKcjPcjPcnLcnMcCgcnOcnPcnQdVycnRcnScnTcnLcnRcnUcnVcnWcnXckcckdcnYcnZcoaciociociociociocdtcobcoccaGcodcoecofcaGcogcohcogcoicojcokcolcaHcomconcaHcoocopcoqcdMcorcgZcdMcoscotcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcmLcrQcrOcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCcOQcItcJxcPZcSccpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcpKcpLcpMcpNchecmDbXucpOcpPcpPcpQcpPcpRcpScpPcoEcmLcmLcmLcpUcpTcfRcfRcfRcfRcfRcfRcfRcencencencpVcpWcpXcpYcpZcqacpXcqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcoQdwTdwWdwTdwUcqncqocoVbLCbLCcqpcqqcqrcqscqtcqubWzcqvcqwcqxcqxcqxcqycqycqzcqAcqBcqpcpdcqCcqDcqEcqFcqGcpdcqHcqIcjCcqJcqKchZcgwcgwcpkcqLcqMcqNcqOcqPcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqZcracracrbcrccrdcrecrfcrgcrhcrhcrhcricdtcdtcdtcdtcdtcdtcdtcfmcdvcrjcpwcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrvcaHcrwcgZcrxcaHcaIcrycaIcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaafaafbTDcrzbXrctqcrBcrCcrDcrEcrFcrGcrHcrIcrJcrKcrLcpPcuXcrMcrNcrNcrPcuZcrRcrRcrRcrScrTcrUcrVcpVcpVcrWcpVcencrXcrXcrXcrXcrXcoPcrYcrZcsacsbcsccoQcsdcsecsfcsgcoQdyidypdybdwUcshcqocoVaaaaaacqpcsicqrcsjcskcslbWzcsmcsncqxcsocspcsqcsrcsjcsjcsjcsscstcsucsvcswcsxcsycpdcszcsAcjDcsBcsCchZaaaaaacpkcsDcsEcsFcpkcsGcsHcpncsIcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScpncsTcsUcsVcsVcsWcrhcdvcdvcsXcfmcfmcfmcfmcfmcfmcfmcfmcdvcsYcpwcsZctacrmctbctcctdctectfctgcthcticrvcrvctjctkctlctmcaIctnctoctpcaHaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVybVzbTDcttctrctscwRctrctuctvctwcpPctxctyctzctActBcpPcuXctCctDctDctFctEctDctGctGctHctHctIctJctIctKctIctIctLctLctMctNctMctLctLctOctOctOctPctOctOctQctRctScoQcoQdUPdUQdBMdwUctTcqocoVaaaaaactUctVctWctXcskctYbWzctZcuacubcuccudcuecufcugcuhcsjcuicujcukculcumcuncuocpdcupcsAcuqcurcuscgwaaaaaacpkcutcuucuucuucuvcuwcuucuucuxcuxcuxcuycuzcuAcuzcuzcuzcuzcuBcuCcuDcuEcuFcuCcuGcuGcuGcuGcuGcuGcuGcuHcuHcuHcuHcuIcuIcuIcuIcuJcuKcuLctbcuMcrqcrqcrqcrqcrqcrvcrvcrvcaHcuNcorcuOcaIcdOcdMcdPcaHaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10974,22 +10988,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaadbYTcwQcwUcwScwTcxtcwScwTcwVcwWcwXcwYbTDcfRcrMcrNcrNcrNcwZctDcxacxccxdctDcvacxectHctHctIcxfcxgcxhcxicxjcxkcxlcxlcxlcxmcxncxocxpcxqcxrcxscFGcxucxvcxwcxxcvvcoQdwUdwUdwUdwUcoVcqocoVaaaaaactUcxycqrcxzcxAcxBbWzcxCcxDcqxcxEcxFcxGcsrcxHcxIcxJcvKcxKcxLcxMcxNcxOcxPcpdcvRcxQcxRcxScxTcgwaaaaaacpkcsDcuucxUcxVcxWcxXcxYcxZcyacybcyccuzcydcyecyfcygcyhcyicyjcykcylcymcyncyocypcyqcyrcyscyrcytcwwcyucyvcywcwAcyxcyycyzcwEcyAcyBcrmcrmcrmcrmcrmcrmcrmcrmcrmcpzcpzcaHcyCcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaaaaaaaaabKLbKMbKMbKMbKMbKMbKMbKMcyDbKMbKMbKMbVybXocyEcyFcyGcyHcyIcyJcyHcyKcyLcyLcyMbTDcfRcyNcmLcyOcyOcyPcyOctDcyRcyQctDctDcyTcyUcyVctIcyWcyXcyYcyZczaczbcxlcxlczcczdczeczfctOczgczhcziczjctOcoQcoQczkcoQcoQcqmcqmcqmcqmcoVcqoczlaaaaaacqpcsicqrczmcznczobWAbWAczpcqxcxEczqczrcsrcsjcvAcsjczscpdcztczuczvczwcpdcpdczxczyczzczAczBchZaaaaaaczCcsDcuuczDczEcxWczFczGcxZczHczIczJcuzczKcyeczLczMczNczOczPczQczRczSczTczUczVczWczXczYczXczZcAacAbcAccAdcwAcAecAfcAgcwEcAhcAicAjcAkcAlcAmcAncAocApcAqcArcAsbYScAtcAuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVyccBbTDbTDcAvcAwcAxbXpcAxcAycyLcyLcAzbTDcfRcyNcmLcyOcAAcABcACctDcAEcyScAFctDcAGcAHcAIctIcAJcAKcALcAMcANcAOcAPcAQcAQcARczecAScATcAUcAVcAWcAXctOcAYcAZcBacBbcBccqmcBdcqmcBecoVcqoczlaaaaaacqpcqpcBfcsjcuhcBgcBhbWAcBicqxcqxcqxcqxcBjcBkcBlcBkcBmcpdcpdcBncBocpdcpdcBpcBqcBrcjDcBschZchZaaaaaaczCcsDcuucuucBtcBucBvcBwcxZcBxcBycBzcuzcBAcBBcBCcBCcBDcBEcBFcBGcBHcBIcwocBJcypcBKcBLcBMcBNcBOcuGcBPcBQcBRcwAcBScBTcBUcwEcBVcBWcBXcBYcBYcAmcBZcCacCbcAmcAmcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafaafbTEbTDbTDbTDbTDbTDbTDbTDbTDbTDbTDcfRcCccencyOcCdcABcCectDcCfcADcNpcCjcCkcClcCmctIcCncCocCpcCqctIcCrcCscCtcCtcCucCvcCwcxpcCxcCycxrcCzctOcAYcCAcCBcCCcBbcBbcqmcBdcqmcoVcqoczlaaaaaaaaactUcCDcCEcuhcCFcCGcCHcCIcCJcCKcCKcCLcCMcCNcskcCOcCMcCPcnDcCQcCRcCScCTcCUcCVcBrcCWcCXcgwaaaaaaaaaczCcsDcCYcuucCZcDacDbcDccxZcDdcDecDdcuzcDfcyecDgcDhcDicDjcDkcDlcwmcDmcwocDncypcDoczXcDpczXcDqcuGcDrcDscDtcwAcDucDvcDwcwEcDxcDycDzcDAcDBcDCcDDcDEcApcDFcDGcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcXVcChcCgcPXcyOcDRcDScDTctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcDOcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafaafbTEbTDbTDbTDbTDbTDbTDbTDbTDbTDbTDcfRcCccencyOcCdcABcCectDcCfcADcNpcCjcCkcClcCmctIcCncCocCpcCqctIcCrcCscCtcCtcCucCvcCwcxpcCxcCycxrcCzctOcAYcCAcCBcCCcBbcBbcqmcBdcqmcoVcqoczlaaaaaaaaactUcCDcCEcuhcCFcCGcCHcCIcCJdVzcCKcCLcCMcCNcskcCOcCMcCPcnDcCQcCRcCScCTcCUcCVcBrcCWcCXcgwaaaaaaaaaczCcsDcCYcuucCZcDacDbcDccxZcDdcDecDdcuzcDfcyecDgcDhcDicDjcDkcDlcwmcDmcwocDncypcDoczXcDpczXcDqcuGcDrcDscDtcwAcDucDvcDwcwEcDxcDycDzcDAcDBcDCcDDcDEcApcDFcDGcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcXVcChcTFcPXcyOcDRcDScDTctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcDOcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcFncFocFpcFqcDHcDHcDHcMXcEZcDPcFtcyOcyOcyOcyOcGTcFvcFwcFxcDUcFycFzcFAcFBcFCcFDcFEcFFctIcOlcFHcFIcFJcFKcFLcFMctOcxpcFNcxpcFOctOcFPcFQcFRcFScEjcoVcoVcFTcoVcoVcFUcoVaaaaaaaaaaaactUctUcElcCEcsjcFVcFWcFXcFYcsjcFZcGacGbcskcGccGacGdcjDcGecGfcGgcGhcjDcCWcEAcgwcgwaaaaaaaaaaaacpkcsDcGicGjcGkcGlcGmcGncGocGpcGqcGrcuzcGscuzcuzcGtcGucGtcuycuEcGvcuEcGwcuEcuGcwwcGxcGycwwcuGcuGcGzcGAcFrcwAcwEcGCcwEcwEcFfcFgcFhcGDcGEcAmcGFcGGcGHcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGBcLFcFscGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscItcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcGNcKtcIJcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwcJxcGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGBcLFcFscGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscXDcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcGNcKtcIJcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwdfZcGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacDHcKmcKncKocGKcKpcDHcKqcKrcGOcKscKtcKucKtcKucKvcKwcKxcIMcIMcDUcKycKzcKzcKAcKBcKCcHgcKDcHgcKEcHgcHgcHgcKDcKFcKGcKGcKGcKGcKGcKGcKHcKIcKJcKKcKLcEjcHtcHucBbcKMcKNcKNcKNcKNcKNaaaaaaaaaaaaaaaaaacqpcqpctUctUctUcqpcqpcqpcKOcKPcKQcqpchZchZcgwcgwcgwchZchZaaaaaaaaaaaaaaaaaacKRcKRcKRcKRcKScKTcKTcIIcKVcKTcKWcKXcKYcKXcKZcLacLbcLccLdcLccLbcLbcLbcLecLfcLgcLbcLhcLicLjcLkcLjcLhcLhcLlcLmcLncLmcLlcAjcLocLpcLqcLrcAjcLscLtcLucLvcLwcLxcLyaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcLzcLAcDHcLBcLCcLDcDHcKqcLEcLFcLGcLHcLIcLJcLKcLLcGTcLMcIMcIMcDUcLNcLOcKzcLPcLQcDUcLRcLScHgcLTcLUcLUcLUcLScLVcKGcLWcLWcLWcLWcLWcLXcLYcLYcLZcLYcoVcoVcoVcBbcFUcKNcMacMbcMccKNcKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcMdcMecMfcMgcMhctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcKRcMicMjcKRcMkcKVcMlcMmcMncKTcMocMpcMqcMrcMscKZcMtcMucMvcMwcMxcLbcMycMzcMAcMBcMCcLhcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMOcMOcMOcMOcMOcMPcMQcMRcMScMTcMUcMVaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaacMWcDHcFpcFpcDHcDHcMXcMYcMYcMXcMZcNacMXcMXcLLcGTcIMcIMcIMcDUcNbcNccNdcNecNfcDUcNgcHgcHgcNhcNicHgcHgcHgcNjcNkcLWcLWcLWcLWcLWcLXcNlcNmcNncLYcNocQkcoVcBbcNqcNrcNscNscNtcNucKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcNvcNwcNxcNycNzctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcNAcNBcNCcKRcNDcKVcNEcNFcNGcKTcNHcNIcNJcNKcNLcNMcNNcNOcNPcNQcNRcLccNScNTcNUcNVcNWcNXcNYcNZcOacObcOccLhcOdcOecOfcOgcOhcMOcOicOjcOkcPucMOcOmcOncLucOocOpcOqcLyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODcOEcOFcKNcOGcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRcOQcKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcSLcMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPUcPVcPWcQZcPYcPZcQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcQhcQicpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODcOEcOFcKNcOGcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRdjycKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcSLcMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPUcPVcPWcQZcPYdkocQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcQhcQicpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcKUcLYcLYcoVcoVcoVcQScQTcQUcHwcQVcQWcQXcHwcQacQYdFLcRacRbcRccPUcAYcPUcPUcRdcRecoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcRncQocRmcsFcsFcRocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcRucRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvcSccSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScSscBbcPUcPUcRdcPUcPUcStcAYcSucSvcSwcSucSucSucSxcSycSzcSAcSAcSAcSAcSAcSAcSAcSBcSCcSDcSDcSDcSEcSFcSGcSHcSDcSDcSIcSJcSKcVacSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTucTucTucTucTucTucTucSucSucSucSucSucSucSucTvcTwcTxcTycSucTzcTAcTBcSAcTCcTDcTEcTFcTGcSAcTHcsFcsEcsFcsFcTIcTJcTJcTJcTJcTJcTJcTKcTLcsFcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcUgcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMcIMcIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrcUscUtcTucUucUvcUwcUxcUycTucUzcUAcUBcUCcUDcUEcUFcUGcUGcUHcUIcSucUJcUKcULcUMcUNcUOcUPcUQcURcSAcUScUTcpkcUUcUVcRmcTJcUWcUXcUYcUZcVYcsFcTLcVbcVccVdcVecVfcVgcVhcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvdGccSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScSscBbcPUcPUcRdcPUcPUcStcAYcSucSvcSwcSucSucSucSxcSycSzcSAcSAcSAcSAcSAcSAcSAcSBcSCcSDcSDcSDcSEcSFcSGcSHcSDcSDcSIcSJcSKcVacSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTucTucTucTucTucTucTucSucSucSucSucSucSucSucTvcTwcTxcTycSucTzcTAcTBcSAcTCcTDcTEdGycTGcSAcTHcsFcsEcsFcsFcTIcTJcTJcTJcTJcTJcTJcTKcTLcsFcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcUgcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMdOZcIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrcUscUtcTucUucUvcUwcUxcUycTucUzcUAcUBcUCcUDcUEcUFcUGcUGcUHcUIcSucUJcUKcULcUMcUNcUOcUPcUQcURcSAcUScUTcpkcUUcUVcRmcTJcUWcUXcUYcUZcVYcsFcTLcVbcVccVdcVecVfcVgcVhcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacMXcMXcVxcVycVzcVAcVBcVCcVDcVEcVFcMXcMXaaaaaaaaaczlcVGcVHcTucTucTucVIcVJcVKcTucVLcVMcVNcVOcVPcVQcSucVRcVScVTcVUcSucVVcVWcVXcSAcXjcVZcWacWbcWccSAcWdcWecTJcTJcTJcTJcTJcWfcWgcWhcWicWjcqMcWkcWlcWmcWmcWlcWncWocWpcWqcWrcWscWtcWucWvcWwcWxcWycWzcWAcWycWycWxcWAcWBcWCcWycWDcWEcQRcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWSaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAdbNcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCcXDcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcWFcXWcXXcXYcXZcYacYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAdbNcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCdVCcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcWFcXWcXXcXYcXZcYacYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaabaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcVGcVHcTucTucTucTucYjcTucYkcYlcYlcYmcYlcYlcYncYocYpcYqcYrcYscYtcYucUKcYvcYwcYxcYycYzcYAcYBcYCcYDcYEcYFcYGcYHcYIcTJcTJcTJcYJcTJcTJcpkcYKcYLcYMcYNcYOcTRczCczCcTRcTScTScYPcYQcYRcYScYRcSPcYTcYUcYVcSPcYWcYXcYYcYZcYYcZacZbcZbcZbcZccZdcZccZecZfcZgcZfcZhcZicZjcZicWSaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaagaadaadabcaagaagaadaadaadaadaafaaeaaaaafaagaadaadaadaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcUscZkcZlcZmcZncSucZocTwcZpcZqcZqcZrcZqcZqcZscTwcZtcZucZvcZwcYtcZxcZycZzcZAcZBcZCcXocZDcZEcXocZFcZGcZHcZIcZJcZKcZLcZMcZNcZOcZPcTJcZQcZRcZScZTcZTcTRaaaaaaaafaaaaaaaaacYPcZUcZVcZWcZXcZYcZYcZZcZYcZYdaadabdacdaddaedafdagdahcZbdaidajdakcZedaldamdancZhcWScYicWScVwaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacUrcUrdaodapdaqdaqdaqdardasdatdatdaudatdavdatdawdaxdaydazdaAdazdaBdaCdaDdaEdaFdaGdaHdaIdaJdaKdaJdaJdaLdaMdaNdaOdaPdaQdaRdaQdaQdaSdaTcTJdaUcZRdaVdaWdaXdaYaaaaaaaafaaaaaaaaacYPdaZdbadbbdbcdbddbedbfdbgdbhdbidbjdbkdblcYYdbmdbndbocZbdbpdbqdbrcZedbsdbtdbucZhaaaaaaaaaaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11000,26 +11014,26 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczlddXdekddZddZddZddZddZddZddZddZddZddZddYdeldemddrdendeodepdeqdercSudescVWdetcYwdeudevdewdexdeydezdeAdeBdeCdeDdeEdeFdeGdeHdeIcZKdeJcTJdeKdeLcZSaaaaaaaaaaagaadaaaaaaaaaaaaaagaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaczlddXdeMddZddZddZddZddZddZddZddZddZddZddYdeNdeOddrcSucSudePcSucSucSudeQcUKdeRdeSdeTdeTdeUdeUdeUdeVdeWdeXdeTdeYdeZdeTdeUdeUdeUdeUdeTdeTdfadcZcZSaafaafaafaadaaaaabaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaafaadaadaadaafaaeaagaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafcUrddXddYddZddZddZddZddZddZddZddZddZddZdfbdfcdfddfeddrdffdfgdfgdfhdfidfjcUKdfkdfkdeUdfldfmdfndfodfpdfqdUXdfsdftdfudfvdfwdfxdfydfzdfAdhXdaUdcZcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaaaaafaaaaadaadaafaadaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXddYddZddZddZddZddZddZddZddZddZddZdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMcZydfNcULdfOdfPdfQdfRdfSdfQdfTdfUdfUdfUdfVdfWdfUdfUdfXdfUdfYdeTdfZdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaagaaaaadaadaadaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXddYddZddZddZddZddZddZddZddZddZddZdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMcZydfNcULdfOdfPdfQdfRdfSdfQdfTdfUdfUdfUdfVdfWdfUdfUdfXdfUdfYdeTdVDdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaagaaaaadaadaadaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXdgaddZddZddZddZddZddZddZddZddZddZddYdgbdgcdgddgedgfdggdghcULcSzdgidgjdgkdgldgmdgndgodUYdgqdgqdgrdgqdgsdgqdgtdgudgvdgwdgxdgvdgydgzdgAdgBdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcUrddXddYddZddZddZddZddZddZddZddZddZddZdfbdfcdgCdgDddrdgEdgFdgGdgHdfidgIcTAdgJdfkdeUdgKdgLdgMdgNdgOdgPdgQdgRdgSdgTdgNdgOdgUdgVdgVdgWdeTdgXdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaczlddXdeMddZddZddZddZddZddZddZddZddZddZddYdgYdgZddrdhadhbdhadhadhadfidhcdhddhedeTdeTdhfdeTdeTdeTdeTdhgdeTdeTdeTdeTdeTdeTdeTdeTdeTdeTdeTdhhdhicZSaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczldhkdekddZddZddZddZddZddZddZddZddZddZddYdeldhldhmdVadhodUZdVcdhrdVbcTBcTAdhtdhudhvdhwdhxdhydhzdhxdhAdhvdhBdhCdhDdhEdhFdhGdhBdhHdhIdhJdhKdhLcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczldVEdekddZddZddZddZddZddZddZddZddZddZddYdeldhldhmdVadhodUZdVcdhrdVbcTBcTAdhtdhudhvdhwdhxdhydhzdhxdhAdhvdhBdhCdhDdhEdhFdhGdhBdhHdhIdhJdhKdhLcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczldhkddYddZddZddZddZddZddZddZddZddZddZddYdhMdhNdhmdhOdhPdhQdhRdVddhTdhUdhVdhWdhudhxdhYdibdhZdiadicdizdhxdhBdiddiedifdigdihdhBdiidijdikdildimcZSaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaafaafaafcUrdhkddrddrdindiodipddrddrddrddrddrddrddrddrddrddrdVfdVedisdVgdhrdiudivcVWdiwdixdiydiBdiAdhydhydjRdiCdhxdiDdiEdiFdiGdiHdiIdhBdiJdiKdikdiLdimcZSaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkcvwdiMdiNdiMdiOdiMdiPdiQdiRdiQdiSdiTdiUdiVdiMdiWdhadhadhadhadiXdfkcUKdiYdixdiZdjadiZdhydjbdiZdjcdjddjedjfdjfdjgdjfdjhdhBdjidjjdjkdjldjmcZSaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkctTdiMdjndjodjpdjqdiPdjrdiRdjsdiSdjtdjsdjsdjudjsdjsdiQdjsdjvdbKdfkcUKdjwdhudhxdhYdibdhydhydicdizdjxdhBdiDdiDdjydiDdiDdhBdixdixdixdhhdjzdjAdjAdjAaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkctTdiMdjndjodjpdjqdiPdjrdiRdjsdiSdjtdjsdjsdjudjsdjsdiQdjsdjvdbKdfkcUKdjwdhudhxdhYdibdhydhydicdizdjxdhBdiDdiDdVFdiDdiDdhBdixdixdixdhhdjzdjAdjAdjAaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdjBdjCdiMdjDdjEdjFdjsdjGdjHdjIdjJdjIdjKdjLdjMdjNdjLdjOdjLdjLdjPdhTdhUdhVdjQdhudiZdjUdjSdjTdjTdnhdjVdjWdjXdjYdjYdjZdkadkbdkcdkddkbdkbdkedkfdkgdkhdkiaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkjdkkdkldkmdkndkodkpdkqdkrdksdktdkudkvdjsdjsdjsdkwdiMdkxdiMdiMdiMdkycZydkzdixdkAdkBdkCdkDdkEdkFdkGdkHdkIdkJdkHdkKdkLdkMdkNdkOdkNdkNdkPdkQdkRdkSdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkjdkkdkldkmdkndVGdkpdkqdkrdksdktdkudkvdjsdjsdjsdkwdiMdkxdiMdiMdiMdkycZydkzdixdkAdkBdkCdkDdkEdkFdkGdkHdkIdkJdkHdkKdkLdkMdkNdkOdkNdkNdkPdkQdkRdkSdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkTdkUdiMdkVdkWdkXdjsdkYdjsdjsdkZdjsdkvdladlbdlcdlddkxdledlfdlgdiMdlhcUKdlidixdhudhudixdljdlkdixdlldhudixdixdlmdixdlndixdlodlpdlqdhxdlrdlsdixdjAdjAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcAYdltdiMdludjsdlvdjsdkYdlwdlxdlydlzdlAdlBdlCdlDdlDdlEdlFdlGdlHdiMdfkdlIdlJdlKdlLdlMdlNdlOdlPdlQdlRddzdlSdixdlTdlUdlVdixdlWdlWdlXdlYdlZdmadmbdmcdmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcUrcUrcUrcUrcUrcUrdmediMdiMdmfdmgdmhdkYdmidlxdmjdlzdmkdmldmjdmmdmndkxdmodmpdmqdiMdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmDdixdixdixdixdixdixdixdixdixdmEdmFdmFdmFdmGdmGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdmJdmKdmLdmMdiMdmNdmOdmOdmPdmQdiMdiMdiMdiMdiMdiMdiMdiMdiMdiMdiMdiMdmRdmSdcLdmTdmUdmUdmUdmUdmUdmUdmUdmUdmUdmUdmUdmVdmWdmVdmXdmYdmZdnadmVdnbdncdmFdnddnednfaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdrgdrgdrgdnidnidmKdnjdnkdnkdnldnkdnmdnndnodnpdnqdnrdnsdntdnudnvdnwdnxdnydnzdnAdnBdfkcUKdnCdmUdnDdnEdnFdnGdnHdnIdmUdnJdnKdmUdmXdmXdmXdmXdmXdmXdmXdmXdnLdnMdnNdnMdnOdnfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdrgdrgdrgdnidnidmKdnjdnkdnkdnldnkdnmdnndnodnpdnqdnrdnsdntdnudnvdnwdnxdnydnzdnAdnBdfkcUKdVAdmUdnDdnEdnFdnGdnHdnIdmUdnJdnKdmUdmXdmXdmXdmXdmXdmXdmXdmXdnLdnMdnNdnMdnOdnfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdnPdnQdnRdnRdnSdmIdnTdnUdnVdnWdnXdnYdnZdoadobdocdoddoedofdogdohdoidojdokdoldomdomdomdondoodopdmUdmUdmUdoqdordosdotdoudovdowdmUdoxdoydozdoAdoBdoCdoDdmXdnbdnMdmFdoEdoFdnfaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdoGdoHdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoRdoPdoPdoOdoSdoTdoUdoVdoWdoXdoYdoZdpadpbdoYdfkdpcdpddmUdpedpfdpgdphdpidpjdmUdpkdnKdmUdpldpmdpndpodppdpqdprdmXdnbdpsdmFdmFdmGdmGaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdptdoHdoHdoIdoJdoKdoLdpudpvdoOdpwdpxdpydpzdpAdoOdpBdpBdpCdpBdpDdpEdpFdpGdpFdpHdpIdpJdpcdpKdmUdmUdmUdmUdpLdmUdmUdmUdmUdmUdmUdpMdpmdpndpNdpOdpmdpPdmXdpQdnMdVtdpRdmGaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdpSdpTdpUdpUdnSdmIdmKdpVdpudpWdoPdpXdpYdpZdpXdpXdqadqbdqcdqddqcdqedpEdqfdqgdqhdpFdqidfkdpcdqjdqkdqldqmdqndqodqpdqqdqrdqsdqtdqudqvdqvdqvdqwdqxdqxdqydqzdqAdqBdnMdqCdnfaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdpSdpTdpUdpUdnSdmIdmKdpVdpudpWdoPdpXdpYdpZdpXdpXdqadqbdqcdqddqcdqedpEdqfdqgdqhdpFdqidfkdpcdqjdqkdqldqmdqndqodqpdqqdqrdqsdqtdqudqvdqvdqvdqwdqxdqxdqydqzdqAdqBdVHdqCdnfaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdqDdqDdqDdnidnidmKdqEdpudqFdoPdqGdqHdqIdqJdqKdoOdqLdqMdqNdqcdqOdpEdqPdqQdqRdpFdqidfkdqSdqjdqkdqldqTdqUdqUdqVdqWdqUdqXdqUdqYdqZdradrbdqYdqUdrcdqUdmXdrddrednMdrfdnfaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdxodmKdrhdridrjdoOdrkdrldrmdrndrodoOdrpdrqdrrdqcdrsdpEdrtdrudrvdrwdrxdfkdrydrzdrAdrBdrCdrDdrEdqUdqWdrFdrGdrGdrHdrGdrIdrIdrJdrIdrIdmXdmXdrKdrLdnMdrMdnfaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmKdmKdmKdmKdmKdmKdmKdrNdrOdpWdoPdrPdrQdrRdrSdrTdoOdrUdqcdrVdrWdrXdpEdrYdrZdsadpFdqidfkcUKdsbdscdsddqTdsedsfdqUdqWdsgdrGdshdsidsjdrIdskdsldsmdrIdsndmXdsodspdmGdmGdmGaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11215,7 +11229,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFmdFndFoaaaaaaaaadAVdAVdAVdAVdAVdCLdAVdAVdFpdFpdFqdFpdFpdErdFrdErdFsdFsdFtdFsdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaadFudFvdFwdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFxdFydFoaaaaaadAVdAVdAVdAVdAVdAVdCLdAVdFpdFpdFzdFAdFBdFpdFCdFDdFEdFsdFFdFGdFHdFsdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaadFudFIdFJdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFKdVudFoaaaaaadAVdAVdAVdAVdAVdAVdCLdAVdFpdFMdFNdFOdFPdFQdFRdFSdFTdFUdFVdFWdFXdFYdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaadFudFZdGadCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGbdGcdCcaaaaaadGddGedGfdGedGgdGgdGhdGgdGgdGidGjdGkdGldFpdGmdGndGmdFsdGodGpdGqdGrdGsdGtdGudGtdGsdGvdGwdGvdGxaaaaaadCfdGydGzdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGbdVIdCcaaaaaadGddGedGfdGedGgdGgdGhdGgdGgdGidGjdGkdGldFpdGmdGndGmdFsdGodGpdGqdGrdGsdGtdGudGtdGsdGvdGwdGvdGxaaaaaadCfdVJdGzdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGAdCldCcaaaaaadGddGBdGCdGDdGEdGFdGGdGHdGgdFpdFpdFpdGIdGJdGKdGLdGMdGNdGOdFsdFsdFsdGsdGPdGQdGRdGSdGTdGUdGVdGxaaaaaadCfdCUdGWdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGXdGYdCcaaaaaadGddGZdHadHbdGEdHcdHddHedGgdHfdHgdHgdHhdHgdHgdHidHgdHgdHjdHgdHgdHkdGsdHldHmdHndGSdHodHpdHqdGxaaaaaadCfdHrdHsdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdCcdHtdEqdCcaaaaaadGddHudHvdHwdGEdHxdHydHzdGgdHAdHBdHCdHDdHEdHFdHGdHEdHEdHHdHIdHBdHAdGsdHJdHKdHLdGSdHMdHNdHOdGxaaaaaadCfdEvdHPdCfdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11227,11 +11241,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdLhdLidLjdLkdLldLmdLndKFdLodKHdLpdLqdLrdLrdLsdLtdKLdLudLvdLwdKKdLxdLydLzdIedISdISdISdISdISdIedLAdLBdLCdKWdLDdLEdLFdKVdLGdLHdLIdLadAVdAVdIudLJdJhdLKdLLdLMdLNdLOdLPdLQdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdKAdKAdKBdKAdKCdLRdLSdLTdLUdLVdKHdKHdLWdLXdLYdLZdKLdMadMbdMcdKKdMddMedIedMfdMgdMhdMidMjdIedMkdIedMldMddKWdMmdMndModKVdMpdMqdMrdLadAVdAVdMsdMtdMudMvdMwdLedLfdLgdLfdLfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdMxdMxdMxdMxdMxdMydMzdKHdMAdMBdMCdMDdMDdMEdKLdMFdMGdMHdKKdMIdMJdMKdMLdMMdMNdMNdMNdMOdMPdMQdMNdMRdKWdMSdMTdMUdKVdMVdMWdMXdLaaaaaaadMYdMZdNadMYdMYdMYdMYdMYdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNcdKHdKHdKHdKHdKHdKHdKHdKKdKKdKKdKKdKKdNddNedNfdNgdNhdNhdNidNjdNkdNldNmdNndNodKWdKWdKWdKWdKWdLadLadLadLaaaaaaadMYdNpdNqdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNcdKHdKHdKHdKHdKHdKHdKHdKKdKKdKKdKKdKKdNddNedNfdVBdNhdNhdNidNjdNkdNldNmdNndNodKWdKWdKWdKWdKWdLadLadLadLaaaaaaadMYdNpdNqdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNrdNsdMxaaaaaadNtdNudNvdNwdNxdNydNzdNAdNtdNBdNCdNDdNEdNFdNGdNHdNGdNEdNEdNDdNIdNJdNKdNLdNMdNNdNOdNKdNPdNQdNKaaaaaadMYdNRdNSdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNTdMxaaaaaadNtdNUdNVdNWdNXdNYdNZdOadNtdObdOcdIedOddOedHBdHAdHBdOfdOgdIedOhdOidNKdOjdOkdOldOmdOndOodOpdNKaaaaaadMYdOqdOrdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdOsdOtaaaaaadOudNydOvdOwdOxdOydOzdOAdOBdOCdODdOEdOddOFdOGdOHdOIdHBdOJdOKdOLdOMdONdOOdOPdOQdORdNKdOSdOTdNKaaaaaadOUdOVdOWdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdOXdOYdOtaaaaaadOZdPadPbdPcdPddPcdPedPfdNtdPgdPhdIedPidPjdPkdPldPmdPndPodIedPpdPqdNKdNKdNKdPrdNKdNKdNKdNKdNKaaaaaadOUdPsdPtdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdOXdOYdOtaaaaaadVKdPadPbdPcdPddPcdPedPfdNtdPgdPhdIedPidPjdPkdPldPmdPndPodIedPpdPqdNKdNKdNKdPrdNKdNKdNKdNKdNKaaaaaadOUdPsdPtdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPvdOtaaaaaadPwdPxdNydNydPydNydNydPzdNtdObdOcdPAdPAdPAdPBdPCdPDdPAdPAdPAdOhdOidNKdPEdPFdPGdPHdPIdPJdPKdNKaaaaaadOUdPLdPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPQdMxaaaaaadPRdPSdPTdNydPUdPVdPWdPXdPYdPZdQadQbdQcdQddQedQfdQgdQhdQidQjdQkdQldQmdQndQodQpdQqdQrdQsdQtdNKaaaaaadMYdQudPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudQzdMxdMxdNtdNtdNtdQAdQBdQCdQBdQAdNtdNtdQDdQEdQFdQGdQHdQGdQIdQGdQHdQGdQGdQJdQKdNKdNKdQLdQMdQNdQOdQPdQQdNKdNKdMYdMYdQRdPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm index abba80d160..16cd2ebfc5 100644 --- a/maps/southern_cross/southern_cross-3.dmm +++ b/maps/southern_cross/southern_cross-3.dmm @@ -28,13 +28,13 @@ "aB" = (/turf/simulated/floor/water,/area/surface/outside/plains/mountains) "aC" = (/turf/simulated/floor/water/shoreline/corner,/area/surface/outside/ocean) "aD" = (/turf/simulated/floor/water,/area/surface/outside/ocean) -"aE" = (/turf/simulated/floor/water/shoreline/corner{ icon_state = "shorelinecorner"; dir = 1},/area/surface/outside/ocean) +"aE" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 1},/area/surface/outside/ocean) "aF" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/outpost) -"aG" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean) -"aH" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 4},/area/surface/outside/ocean) +"aG" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean) +"aH" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 4},/area/surface/outside/ocean) "aI" = (/obj/item/weapon/banner/nt,/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/outpost) -"aJ" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean) -"aK" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 10},/area/surface/outside/ocean) +"aJ" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean) +"aK" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 10},/area/surface/outside/ocean) "aL" = (/turf/simulated/floor/water/shoreline,/area/surface/outside/ocean) "aM" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/ocean) "aN" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/storage) @@ -47,7 +47,7 @@ "aU" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) "aV" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/effect/floor_decal/corner/brown/full{dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) "aW" = (/obj/structure/table/steel,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) -"aX" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/steel,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) +"aX" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/steel,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "aY" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/structure/table/steel,/obj/item/stack/flag/green{pixel_x = -4; pixel_y = 0},/obj/item/stack/flag/red,/obj/item/stack/flag/yellow{pixel_x = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "aZ" = (/obj/structure/closet/secure_closet/miner,/obj/item/clothing/shoes/boots/winter/mining,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "ba" = (/obj/structure/table/steel,/obj/item/weapon/mining_scanner,/obj/item/weapon/mining_scanner,/obj/item/weapon/mining_scanner,/obj/effect/floor_decal/corner/brown{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) @@ -98,8 +98,8 @@ "bT" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) "bU" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) "bV" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) -"bW" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) -"bX" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) +"bW" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) +"bX" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage) "bY" = (/obj/effect/floor_decal/corner/brown{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "ca" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) @@ -117,7 +117,7 @@ "cm" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway) "cn" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway) "co" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/surface/outpost/main/gateway) -"cp" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 0; pixel_y = 28},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/weapon/screwdriver,/obj/item/device/defib_kit/loaded,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) +"cp" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 0; pixel_y = 28},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/weapon/tool/screwdriver,/obj/item/device/defib_kit/loaded,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "cq" = (/obj/machinery/sleep_console{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "cr" = (/obj/machinery/sleeper{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "cs" = (/obj/structure/bed/roller,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) @@ -128,11 +128,11 @@ "cx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "cy" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/corner/brown,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "cz" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) -"cA" = (/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/machinery/light,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) +"cA" = (/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/machinery/light,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "cB" = (/obj/machinery/mech_recharger,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "cC" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "cD" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery) -"cE" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost) +"cE" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost) "cF" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room) "cG" = (/obj/structure/window/reinforced,/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "cH" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) @@ -172,7 +172,7 @@ "dp" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway) "dq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atm{pixel_x = 30},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway) "dr" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) -"ds" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/table/glass,/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) +"ds" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/table/glass,/obj/item/weapon/tool/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "dt" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid) "du" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid) "dv" = (/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/contraband,/obj/random/drinkbottle,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/storage) @@ -191,7 +191,7 @@ "dI" = (/obj/machinery/mineral/unloading_machine{icon_state = "unloader-corner"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) "dJ" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/machinery/mineral/input,/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) "dK" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/mining_main/gen_room) -"dL" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/tiled/steel/sif/planetuse{ icon_state = "dark"},/area/surface/outpost/mining_main/gen_room) +"dL" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/tiled/steel/sif/planetuse{icon_state = "dark"},/area/surface/outpost/mining_main/gen_room) "dM" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Security Checkpoint"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "dN" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "dO" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) @@ -202,7 +202,7 @@ "dT" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "dU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "dV" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) -"dW" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) +"dW" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "dX" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/camera/network/main_outpost{c_tag = "MO - FA Station"; dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "dY" = (/turf/simulated/wall,/area/surface/outpost/mining_main/emergencystorage) "dZ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage) @@ -211,8 +211,8 @@ "ec" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/mask/breath,/obj/machinery/door/window/westleft{req_access = list(48)},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/effect/floor_decal/corner/brown{dir = 6},/obj/random/multiple/voidsuit/mining,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "ed" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery) "ee" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) -"ef" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) -"eg" = (/obj/machinery/conveyor_switch{id = "mining_external"},/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) +"ef" = (/obj/machinery/conveyor_switch{id = "mining_external"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) +"eg" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) "eh" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 5; icon_state = "warning_dust"},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/path/plains) "ei" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "ej" = (/obj/structure/bed/chair/office/dark,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) @@ -245,10 +245,10 @@ "eK" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery) "eL" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) "eM" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost) -"eN" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/path/plains) +"eN" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/path/plains) "eO" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "eP" = (/obj/machinery/computer/security,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) -"eQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/flash,/obj/item/weapon/pen,/obj/item/weapon/crowbar,/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) +"eQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/flash,/obj/item/weapon/pen,/obj/item/weapon/tool/crowbar,/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "eR" = (/obj/structure/closet/crate,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "eS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "eT" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/red/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) @@ -259,7 +259,7 @@ "eY" = (/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway) "eZ" = (/obj/structure/closet/l3closet/scientist,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "fa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) -"fb" = (/obj/structure/table/glass,/obj/item/weapon/crowbar,/obj/item/bodybag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/obj/item/bodybag/cryobag,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) +"fb" = (/obj/structure/table/glass,/obj/item/weapon/tool/crowbar,/obj/item/bodybag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/obj/item/bodybag/cryobag,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "fc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "fd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid) "fe" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid) @@ -325,7 +325,7 @@ "gm" = (/obj/effect/floor_decal/corner/brown,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main) "gn" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery) "go" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery) -"gp" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) +"gp" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room) "gq" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main5_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main5_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security) "gr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security) "gs" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security) @@ -352,7 +352,7 @@ "gN" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room) "gO" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "gP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) -"gQ" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/obj/structure/sign/warning/moving_parts{pixel_y = -32},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery) +"gQ" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/structure/sign/warning/moving_parts{pixel_y = -32},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery) "gR" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) "gS" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) "gT" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery) @@ -373,7 +373,7 @@ "hi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main) "hj" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main) "hk" = (/obj/machinery/mech_recharger,/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid) -"hl" = (/obj/structure/table/steel,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid) +"hl" = (/obj/structure/table/steel,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid) "hm" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid) "hn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/white/bordercorner2,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid) "ho" = (/obj/structure/closet/secure_closet/sar,/obj/machinery/light,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/obj/item/roller/adv,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid) @@ -434,7 +434,7 @@ "ir" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/machinery/atmospherics/binary/pump{dir = 2},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "is" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "it" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) -"iu" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) +"iu" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iv" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power East"; dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iw" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms) "ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms) @@ -460,10 +460,10 @@ "iR" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iS" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 5; tag_south = 6; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iT" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) -"iU" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) +"iU" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iV" = (/obj/machinery/light/small{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "iW" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "Telecommunication Hub"; req_one_access = list(10,48,65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms) -"iX" = (/obj/structure/table/standard,/obj/item/weapon/crowbar/red,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/item/weapon/crowbar/red,/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter) +"iX" = (/obj/structure/table/standard,/obj/item/weapon/tool/crowbar/red,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/item/weapon/tool/crowbar/red,/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter) "iY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter) "iZ" = (/obj/machinery/bluespace_beacon,/obj/item/device/radio/beacon,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter) "ja" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Teleporter"; dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter) @@ -479,7 +479,7 @@ "jk" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "jl" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gen_room) "jm" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) -"jn" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) +"jn" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jo" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jp" = (/turf/simulated/wall,/area/surface/outpost/main/gen_room) "jq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "Teleport Access"; req_access = list(17)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/teleporter) @@ -514,7 +514,7 @@ "jT" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/plains/outpost) "jU" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) -"jW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) +"jW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jY" = (/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "jZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main) @@ -552,7 +552,7 @@ "kF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage) "kG" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage) "kH" = (/obj/machinery/mech_recharger,/obj/effect/decal/mecha_wreckage/ripley,/obj/machinery/light,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage) -"kI" = (/obj/item/inflatable/door/torn,/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/surface/outpost/main/garage) +"kI" = (/obj/item/inflatable/door/torn,/obj/item/weapon/tool/screwdriver,/turf/simulated/floor,/area/surface/outpost/main/garage) "kJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/surface/outpost/main/garage) "kK" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/surface/outpost/main/garage) "kL" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) @@ -614,7 +614,7 @@ "lP" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Gym"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/gym) "lQ" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main) "lR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main) -"lS" = (/obj/effect/floor_decal/spline/plain{ icon_state = "spline_plain_full"; dir = 1},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main) +"lS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room) "lT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main) "lU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main) "lV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/surface/outpost/main) @@ -647,7 +647,7 @@ "mw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym) "mx" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym) "my" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym) -"mz" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/wrench,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym) +"mz" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/tool/wrench,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym) "mA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main) "mB" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/surface/outpost/main) "mC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main) @@ -658,7 +658,7 @@ "mH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main) "mI" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main) "mJ" = (/obj/machinery/light/small{dir = 8; pixel_x = 0},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main) -"mK" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar/red,/obj/item/frame/light,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area) +"mK" = (/obj/structure/closet/crate,/obj/item/weapon/tool/crowbar/red,/obj/item/frame/light,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area) "mL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area) "mM" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes) "mN" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes) @@ -812,9 +812,9 @@ "pF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "pG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "pH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) -"pI" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) +"pI" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main) "pJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) -"pK" = (/obj/effect/floor_decal/spline/plain{ icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "hos"; name = "Statue"; pixel_y = 2},/obj/item/device/gps/internal/base,/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/corridor) +"pK" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "pL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "pM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "pN" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor) @@ -850,7 +850,7 @@ "qr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qs" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor West"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qt" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) -"qu" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) +"qu" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "hos"; name = "Statue"; pixel_y = 2},/obj/item/device/gps/internal/base,/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/corridor) "qv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qw" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) @@ -872,7 +872,7 @@ "qN" = (/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom) "qO" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom) "qP" = (/turf/simulated/wall,/area/surface/outpost/main/dorms) -"qQ" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light,/obj/structure/closet/emcloset,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) +"qQ" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qR" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main3_airlock_control"; name = "Main Access Console"; pixel_x = 0; pixel_y = -26; tag_exterior_door = "main3_airlock_exterior"; tag_interior_door = "main3_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qS" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "qT" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) @@ -881,7 +881,7 @@ "qW" = (/obj/structure/closet/wardrobe/suit,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main) "qX" = (/obj/structure/closet/wardrobe/grey,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main) "qY" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main) -"qZ" = (/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/surface/outpost/main) +"qZ" = (/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/surface/outpost/main) "ra" = (/obj/machinery/mech_recharger,/obj/machinery/light,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main) "rb" = (/turf/simulated/wall,/area/surface/outpost/main) "rc" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main) @@ -908,7 +908,7 @@ "rx" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) "ry" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) "rz" = (/obj/item/weapon/bedsheet/bluedouble,/obj/structure/bed/double/padded,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) -"rA" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor) +"rA" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light,/obj/structure/closet/emcloset,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor) "rB" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main3_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main3_airlock_control"; name = "Main Access Button"; pixel_x = -32; pixel_y = -6; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor) "rC" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/pool) "rD" = (/turf/simulated/wall,/area/surface/outpost/main/pool) @@ -929,7 +929,7 @@ "rS" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm6"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) "rT" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) "rU" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) -"rV" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/surface/outpost/main/corridor) +"rV" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor) "rW" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/corridor) "rX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) "rY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_y = 30},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) @@ -992,7 +992,7 @@ "td" = (/obj/item/weapon/stool,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm7"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms) "te" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm8"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) "tf" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms) -"tg" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) +"tg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/corridor) "th" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor) "ti" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool) "tj" = (/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool) @@ -1006,7 +1006,7 @@ "tr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) "ts" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Pool East"; dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) "tt" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/plains) -"tu" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/effect/zone_divider,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) +"tu" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) "tv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/effect/zone_divider,/turf/simulated/floor/plating,/area/surface/outpost/main/pool) "tw" = (/obj/structure/table/glass,/obj/item/weapon/book/codex/lore/vir,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) "tx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/glass,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) @@ -1022,7 +1022,7 @@ "tH" = (/obj/structure/table/glass,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool) "tI" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/mountains) "tJ" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline/corner,/area/surface/outside/ocean) -"tK" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean) +"tK" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/effect/zone_divider,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) "tL" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/ocean) "tM" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/ocean) "tN" = (/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/normal) @@ -1056,12 +1056,12 @@ "up" = (/turf/simulated/floor/plating/sif/planetuse,/area/shuttle/shuttle1/planet) "uq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost) "ur" = (/turf/simulated/floor/plating/sif/planetuse,/area/shuttle/shuttle2/planet) -"us" = (/turf/simulated/floor/water/shoreline/corner{ icon_state = "shorelinecorner"; dir = 8},/area/surface/outside/ocean) -"ut" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 5},/area/surface/outside/ocean) -"uu" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) -"uv" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) -"uw" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains) -"ux" = (/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) +"us" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean) +"ut" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains) +"uu" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 5},/area/surface/outside/ocean) +"uv" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 8},/area/surface/outside/ocean) +"uw" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) +"ux" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains) "uy" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/outpost) "uz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) "uA" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/research/xenoresearch) @@ -1274,10 +1274,10 @@ "yz" = (/obj/machinery/sleep_console,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology) "yA" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/obj/random/medical/lite,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/bodybag/cryobag,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "yB" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/xenoflora) -"yC" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora) +"yC" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) "yD" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora) -"yE" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora) -"yF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) +"yE" = (/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost) +"yF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "yG" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "yH" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "yI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) @@ -1337,7 +1337,7 @@ "zK" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology) "zL" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology) "zM" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora) -"zN" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora) +"zN" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora) "zO" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora) "zP" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/door/window/westright{name = "Xenoflora Containment"; req_access = list(55)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora) "zQ" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) @@ -1411,7 +1411,7 @@ "Bg" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology) "Bh" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology) "Bi" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Isolation"},/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) -"Bj" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) +"Bj" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora) "Bk" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora) "Bl" = (/obj/effect/floor_decal/corner/green{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "Bm" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) @@ -1429,8 +1429,8 @@ "By" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology) "Bz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology) "BA" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology) -"BB" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) -"BC" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/item/weapon/wrench,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) +"BB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora) +"BC" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/item/weapon/tool/wrench,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "BD" = (/obj/effect/floor_decal/corner/green{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "BE" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) "BF" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) @@ -1523,12 +1523,12 @@ "Do" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/water,/area/surface/outside/river/indalsalven) "Dp" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven) "Dq" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal) -"Dr" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{ icon_state = "railing0"; dir = 1},/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal) -"Ds" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{ icon_state = "railing0"; dir = 1},/turf/simulated/floor/water,/area/surface/outside/river/indalsalven) -"Dt" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{ icon_state = "railing0"; dir = 1},/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven) -"Du" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 9},/area/surface/outside/ocean) -"Dv" = (/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 1},/area/surface/outside/ocean) -"Dw" = (/turf/simulated/floor/water/shoreline/corner{ icon_state = "shorelinecorner"; dir = 4},/area/surface/outside/ocean) +"Dr" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) +"Ds" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora) +"Dt" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal) +"Du" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/water,/area/surface/outside/river/indalsalven) +"Dv" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven) +"Dw" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 1},/area/surface/outside/ocean) "Dx" = (/turf/simulated/floor/water,/area/surface/outside/river/faxalven) "Dy" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven) "Dz" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/syndicate_station/planet) @@ -1540,7 +1540,7 @@ "DF" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/river/faxalven) "DG" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/plains/normal) "DH" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/normal) -"DI" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{ icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean) +"DI" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 9},/area/surface/outside/ocean) "DJ" = (/turf/simulated/floor/water,/area/surface/outside/lake/romsele) "DK" = (/turf/simulated/floor/water/deep,/area/surface/outside/lake/romsele) "DL" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/skipjack_station/planet) @@ -1558,6 +1558,8 @@ "DX" = (/turf/unsimulated/wall/planetary/sif{icon_state = "rock-dark"},/area/surface/outpost/wall) "DY" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall) "DZ" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outside/lake/romsele) +"Ea" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 4},/area/surface/outside/ocean) +"Eb" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean) (1,1,1) = {" aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacadadadabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeababababababababab @@ -1588,7 +1590,7 @@ aaafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalal aaafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNcucucvcvcvcvaNcwcxcyaQczcAcBcCcDcDcDcDcEcEcEcFajajajalalalalalalalalalalbHbHcGcGcHcIcJcKcLcMcNcOcPcKcQcRcRcScTbPbPalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDaDaDaDaDaDcUcUaM aaafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNcvcvcvcVcWcXcYcZbZdacDcDcDcDcDcDdbdcdddedfdfdgajajajalalalalalalalalalalbIdhdidjdkcIdlcKdmdndodpdqcKdrcRcRdsdtdubQalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDaDaDaDaDcUcUcUcUaM aaafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNdvdwcvdxdydzcYdAbZdBcDdCdDdEdFdGdHdIdJdKdKdKdLajajajalalalalalalalalalalbJdMcIdNcIdOdPbIdQdRdRdRdSbQdTdUcRdVdWdXbRalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUaM -aaafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNaNaNaNdYdZcYcYeaebeccDedeeeecDeedbcDcDefegcEehajajajalalalalalalalalalalbIeiejekelemeneoepeqereqeseteuevewexeyezbQalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUaM +aaafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNaNaNaNdYdZcYcYeaebeccDedeeeecDeedbcDcDegefcEehajajajalalalalalalalalalalbIeiejekelemeneoepeqereqeseteuevewexeyezbQalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUaM aaafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmbmaQeAeBaQeCeDeEeFbheGbieHeIeIeJeKeeeLcDeMeMeMeMeNajajajalalalalalalalalalalbHeOePeQeReSeTbIeUeVeWeXeYbQeZfafbfcfdfebPalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUaM aaafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmfffgfhfifjfkflfmfnfmfofpfqfrfsftfufvfwcDeMeMeMeMeNajajajajalalalalalalalbHbHbHfxfxfxfyfzfAfxcKbofBbocKfCfDfEfFfCfCfCbPbPalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM aaafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmfGaPfHfIaPfJfKfLbYbieGbieHeIfMfNfOeefPcDeMeMeMeMeNajajajajajajajajajajfQbIfRfSbIfTfUfVcIfWfXbIfYfZgabQgbgcgcgdgegfgcggbQalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM @@ -1599,63 +1601,63 @@ aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctct aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIikhIhyiliminioipiqirisisitiuivgIalalalalalamajajajalalalalalalalalalhBiwixiyhBiziAiAiBhCiCiDiEhFiFiGiGiGiHiHiGiIhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIiJiKiLhJhyiMiNiOiPiQiRiSiTiUiVgIalalalalalamajajajalalalalalalalalalhBhBiWhBhBiXiYiZjahChDhijbhFiHiHjciiiiiHiHiGhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIgIjdjejfjggIgIjhgIgIjijjjkjkgIgIalalalalalamajajajalalalalalalalalaljljmjnjojphChCjqhChCjrhijshGjtiHjujvjwiGiHiHhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIgIgIgIjxgIjyjzjygIgIgIgIgIgIalalalalalalamajajajalalalalalalalalaljljAjBjCjDjEjFjGjHjIfYhijJhGjKiHjLiHiGiGiHiHhGaljMjMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalajajajjNjOjOjOjPjOjOjQjRjRjRjRjRjRjRjRjRjRjRjRjRjSjRjRjRjTjTjTjTjTjTjTjTjTjUjVjWjXjYjZkakbkakckakdkekfkgkhkikhkhkjiHiHhGalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIgIgIgIjxgIjyjzjygIgIgIgIgIgIalalalalalalamajajajalalalalalalalalaljljAjWjCjDjEjFjGjHjIfYhijJhGjKiHjLiHiGiGiHiHhGaljMjMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalajajajjNjOjOjOjPjOjOjQjRjRjRjRjRjRjRjRjRjRjRjRjRjSjRjRjRjTjTjTjTjTjTjTjTjTjUjVlSjXjYjZkakbkakckakdkekfkgkhkikhkhkjiHiHhGalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajajajajajamajajajajajajajajajajajajajajajajajajajajamajajajalalalalalalalalaljlkkjBkljpkmknkokpkqkrkskthGkuiGjuiHiHiHiHiHhFalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalaljMalalalalajajajajajajajajajajajamajajajajajajajajajajajajajajajajajajajajamajajajalalalalalalalalaljlkvkwkxjpkykzkAkBkBjIkCkDhFhFkEkFkGkHkIkJkKhFalaIalaljMalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalkLalalalalalalalalalalalalalalalalalalalalamajajajalalalalalalalalalkMkNkNkNkNkNkNkNkMkOkPkQkRkShFhGkThGhGhFhFhFhFalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalkUkUkUkUkVkVkWkXkWkYkYkYkYkZkZkYkYkYkYalalalalalalalalalamajajajalalalalalalalalalkMlalblclbldlelflglhliljlkfYjIlllmlnlolplqlrlsltjMalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUkUlulvlwlxlylzlAlBlClDlElFlElGlHlElIkYkYalalalalalalalalamlJlJlKalalalalalalalalalkMlLlMlMlMlMlNlOlPlQlRlSlTlUlVlWlXlYlZmambmcmdmejMjMjMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUkUlulvlwlxlylzlAlBlClDlElFlElGlHlElIkYkYalalalalalalalalamlJlJlKalalalalalalalalalkMlLlMlMlMlMlNlOlPlQlRpIlTlUlVlWlXlYlZmambmcmdmejMjMjMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUmflxlxlxmgmhlzmimjlCmkmlmmmnmomnmnmpmqkYalalalalalalalalmrmsmtmumualalalalalalalalmvmwmxmxmxmxmymzmvhhmAmBmCfYjImDmEmFmGkBmHmIkBmJaljMjMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUlulxmKlxmLlxlzmMmNlCmOlEmPlEmQlElElEmRkYalalalalalalalalmSmTmUmVmsalalalalalalalalmvmWmXmWmXmWmWmYkMmZfYnakRnbncndnendndkBkBkBkBalalaljMjMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUnflxngnhninjlznknllClEnmnnnonpnononqnrkYalalalalalalalalmSnsntnumsalalalalalalalalkMnvnwnxnynzmWnAkMkBjInBkDncncnCnDnEnFnGncalalalaIalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajaIalkUnHnIlxlxnJnKnLnMnNlClElElElEnOlElElEnPkYalalalalalalalmumrmsnQmumumualalalalalalalkMnRnSnTnUnVmWnWkNnXfYiDnYnZoanEobocndndncalalalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalodkUkUkUkVkVoeofnLogohlCkZkZkZlCoilCkZkZojkYmumumsmsmumsmsmuokolomonoomumsmsmumsmsmumukMkNmvopmvkNmvmvkNoqfYnakRndornEosnEotouncalalalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajovowoxoyozoAoBoCoDoEoFoGoHoIoJoJoKoLoMoJoNoOoJoPoQoRoRoSoRoToRoUoVoWoXoYoZoRoRpaoToRoRoPpbpclhpdpepcpfpcpgphphpipjndpknEosplndndncncncalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpmpnpopppqprpsptpupvpwpxpypvpvpzpvpApvpvpBpvpCpDpEpFpGpGpGpHpGpIpJpKpLpGpGpGpFpGpHpGpMpNgylUlUpOpPpPpQpPpPpPkapRpSndpTnEosplndpUpVpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpXodpYpZodqaqbqcpsqdqeqfqgqhqiqjpsqcqkqlqmqnqoqpqqqrqqqsqqqqqtquqvqwqxqyqqqqqrqzqqqqqqqpqAqBqBqCqBqBqBqBqDfYqEqFqGndqHqIqJqKqLqMqNqOncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalododododqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPodododmumumsmsmumsmsmuqQqRntqSqTmumsmsmumsmsmumukBqUqVqWqXqYqZrarbfYrcrdrerfrgnErhrindpUrjpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajaIalodrkrlrmrnrorprqrrrsqPrtrurvrprorwrxryrzodalalalalalalalmurAmurBmsmumualalalalalalalkBrCrDrDrDrDrDrDrDrDrErFrGndndndrHndndndrIncncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalowrJrKrLqPqcrMqPrNrOqPrPrQqPrRqcqPrSrTrUowalalalalalalalalrVrWmUmVmsalalalalalalalalalrCrXrYrZrZsasbscsdsesfsgshsisjskslsmsnsorCalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodqPqPqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPqPqPodalalalalalalaIalrVspsqsrmsalaIalalalalalalalssstsusvswswswswswswsxswswswswswswsyszstssalalalaljMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalodsArlrmsBsCsDsEsFsGqPsHsIsJsKsCsLrxrysModalalalalalalalalrAmusNmsmualalalalalalalalalsOsPstsQsRsSsTsTsTsTsTsTsUsUsUsVsRsWstsXsOalalalaljMalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalododsYsZqPowowqPtatbqPtctdqPowowqPtetfododalalalalalalalaltgthlJlJalalalalalalalalalalssstsRsQsRtitjtjtjtjtjtjtktktktlsRsWsRstssalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodowododalalododowodowododalalododowodalalalalalalalalaltgajajajalalalalalalalalalalrCrCtmtnsRtitjtjtjtotptqtktktktlsRtrtsrCrCalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaagagaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFttttttaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFtuttttttaFaFaFaFaFaFaFaFaFaFaFtvtwtxtytztAtAtAtBtCtDtEtEtEtFtytGtHtvaFaFaFaFaFaFaFaFaFaFaFaFagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagtItItItItJtKtLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM -aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalaltgajajajajalalalalalalalalalalsOsttOsRtitjtjtjtktktktktktktlsRtPstsOalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalalalaltgajajajajalalalalalalalalalalsssRsRsRtQtRtRtRtStStStStStStTsRsRsRssalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalaltgajajajajalalalalalalalalalalrCtUtVsRsRsRsRsRsRsRsRsRsRsRsRsRsRtWrCalalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalaltgajajajajalalalalalalalalalalalrCrCsttXtYtZsRsRsRsRsRuatYubstrCrCalalalaljMalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalmuudajajalalalalalalaluemuuealalalalalalalalalufmualtgalajajajalalalalalalalalalalalalrCsssOssrCtXuguhuitXrCsssOssrCalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalujukulululululululululumujukulululululululululumujaltgalajajajalalalalalalalalalalalalalalalalrCrCsssOssrCrCalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuououpupupupupuououqueunururuouououououruruqalaltgajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalaljMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururuououourururuqalajazajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalaljMjMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajazajajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafucucucaAaAaAaAaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajazalajajajalajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafucucucucaAaAaAaAusutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajaluuuvuwuwuwuvuvuvuvuvuvuvuvuvuxajajajajajajajajalalalalaljMjMjMalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAusutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajajalalalalalalalalaltgalalalalajajajajajajalaljMjMalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAusutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajalalalalalalalalalaltgalalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalaluyuyafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaltgalalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyafafafafafafafafafafafafafafagafafafafafafafafafafafafafafucucucucucaAaAaAaAaAaAaAaAaAusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalaIalaluAuBuBalalaIalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyafafafafafafafafafafafafagafafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalalaluCuDuEuFuCalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyafafafafafafafagafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAaAaAusutaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpmpnpopppqprpsptpupvpwpxpypvpvpzpvpApvpvpBpvpCpDpEpFpGpGpGpHpGpKpJqupLpGpGpGpFpGpHpGpMpNgylUlUpOpPpPpQpPpPpPkapRpSndpTnEosplndpUpVpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpXodpYpZodqaqbqcpsqdqeqfqgqhqiqjpsqcqkqlqmqnqoqpqqqrqqqsqqqqqtqQqvqwqxqyqqqqqrqzqqqqqqqpqAqBqBqCqBqBqBqBqDfYqEqFqGndqHqIqJqKqLqMqNqOncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalododododqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPodododmumumsmsmumsmsmurAqRntqSqTmumsmsmumsmsmumukBqUqVqWqXqYqZrarbfYrcrdrerfrgnErhrindpUrjpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajaIalodrkrlrmrnrorprqrrrsqPrtrurvrprorwrxryrzodalalalalalalalmurVmurBmsmumualalalalalalalkBrCrDrDrDrDrDrDrDrDrErFrGndndndrHndndndrIncncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalowrJrKrLqPqcrMqPrNrOqPrPrQqPrRqcqPrSrTrUowalalalalalalalaltgrWmUmVmsalalalalalalalalalrCrXrYrZrZsasbscsdsesfsgshsisjskslsmsnsorCalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodqPqPqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPqPqPodalalalalalalaIaltgspsqsrmsalaIalalalalalalalssstsusvswswswswswswsxswswswswswswsyszstssalalalaljMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalodsArlrmsBsCsDsEsFsGqPsHsIsJsKsCsLrxrysModalalalalalalalalrVmusNmsmualalalalalalalalalsOsPstsQsRsSsTsTsTsTsTsTsUsUsUsVsRsWstsXsOalalalaljMalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalododsYsZqPowowqPtatbqPtctdqPowowqPtetfododalalalalalalalaltuthlJlJalalalalalalalalalalssstsRsQsRtitjtjtjtjtjtjtktktktlsRsWsRstssalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodowododalalododowodowododalalododowodalalalalalalalalaltuajajajalalalalalalalalalalrCrCtmtnsRtitjtjtjtotptqtktktktlsRtrtsrCrCalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaagagaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFttttttaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFtKttttttaFaFaFaFaFaFaFaFaFaFaFtvtwtxtytztAtAtAtBtCtDtEtEtEtFtytGtHtvaFaFaFaFaFaFaFaFaFaFaFaFagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagtItItItItJustLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM +aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalsOsttOsRtitjtjtjtktktktktktktlsRtPstsOalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalsssRsRsRtQtRtRtRtStStStStStStTsRsRsRssalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalrCtUtVsRsRsRsRsRsRsRsRsRsRsRsRsRsRtWrCalalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalalrCrCsttXtYtZsRsRsRsRsRuatYubstrCrCalalalaljMalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalmuudajajalalalalalalaluemuuealalalalalalalalalufmualtualajajajalalalalalalalalalalalalrCsssOssrCtXuguhuitXrCsssOssrCalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalujukulululululululululumujukulululululululululumujaltualajajajalalalalalalalalalalalalalalalalrCrCsssOssrCrCalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuououpupupupupuououqueunururuouououououruruqalaltuajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalaljMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururuououourururuqalajutajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalaljMjMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajutajajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafucucucaAaAaAaAaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajutalajajajalajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafucucucucaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajaluwyCuxuxuxyCyCyCyCyCyCyCyCyCyEajajajajajajajajalalalalaljMjMjMalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajajalalalalalalalalaltualalalalajajajajajajalaljMjMalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajalalalalalalalalalaltualalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalaluyuyafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaltualalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyafafafafafafafafafafafafafafagafafafafafafafafafafafafafafucucucucucaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalaIalaluAuBuBalalaIalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyafafafafafafafafafafafafagafafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalalaluCuDuEuFuCalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyafafafafafafafagafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalaluGuGuGuHuHuIuHuJuJuJuJuJuJuJuKuLuMuDuDuDuFuNuFuDuDuFuDuOuDuFuDalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyafafafafagafafafafafafafafafafafucucucucucucucaAaAaAaAaAaAaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalaluGuGuPuQuRuSuTuUuVuWuXuYuZvauJvbvcvduDvevfvgvhvivjuOvkvkvkvlvmuDuDalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvnvovovovovovovovpucucucucucucucucucucaAaAaAvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalaluGuGuPuQuRuSuTuUuVuWuXuYuZvauJvbvcvduDvevfvgvhvivjuOvkvkvkvlvmuDuDalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvnvovovovovovovovpucucucucucucucucucucaAaAaAvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupuouououpupupuqueunuourururururururuouqalalalajajajalalalaluGvrvsvtuRvuvvvwuVvxvyvzvAvBuJuDvCuFuDvDvEvFvGvHvIuOvkvkvkvJvKuOuDalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupuouououououpupuqueunuouourururururuououqalalalajajajalalalaluGvNvOvNuRuRvPuRuVuVuVvQuVuVuVvRvSvTuOvUvVvWvXvYvZuOuOuOuOwauOuOuDalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupuouououououpupuqueunuouourururururuououqalalalajajajalalalaluGvNvOvNuRuRvPuRuVuVuVvQuVuVuVvRvSvTuOvUvVvWvXvYvZuOuOuOuOwauOuOuDalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalwbwcwdwdwdwdwdwdwdwdwdwewbwcwdwdwdwdwdwdwdwdwdwewbalalajajajalalalaluFwfwgwhwiwjwkwlwmwnwowpwowqwrwowswowtwuwvwwwxwowywzwwwowAwBwCwDuFalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalmuwEalalalalalalalalalwEmuwEalalalalalalalalalwEmualalajajajalalalaluNwFwGwHwIwJwKwLwMwNwOwPwQwQwRwQwSwQwTwUwQwVwQwQwQwWwXwYwZxawFwFuNalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalaluFxbxcxdxexexfxexexgxcxhxixjuFuFxkuFuFuDxlxmxnwFxoxoxpxqxoxrxnxsxtxualalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalxexexvxwxxxyxzxAxBxyxCxDxExexexFxGxHxIxJxoxoxKxLxKxoxMxNxOxoxPxLxQxoxoalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalxexexRxSxTxUxexVxWxXxexYxZyaybxexeycydyexoxoyfygyhyiyjxOykxOylymynyoypxoxoalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalxeyqyrysyryrxexeytxexeyuyvysywyxxeyyyzyAxoyByCyDyEyFyGxOykxOyHyIyJyKyKyLxoalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalxeyqyrysyryrxexeytxexeyuyvysywyxxeyyyzyAxoyBBjyDBByFyGxOykxOyHyIyJyKyKyLxoalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalxexexexexeyMysyryNyOyPyQyRyrysySxexexexexexoxoyTxOyKyUyVyWyXyYxOyZzazbzcyByBxoxoxoaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalxezdzezfzgzhyrziysyszjysysziyrzkzlzfzezmxeznzozpzqyKzrzsztxOykxOzuzvzwyKxKzxzyxOxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalxezzzzzzzAzByszCzDzEzFzGzHzIzJzKzLzzzzzzxezMzNzOzPzQzRzSzTxOykxOzUzVzWzXxKxOxOzYxLuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalalalxezzzzzzzZAayrysyryrAbyryrysAcAdzlzzzzzzxeAeAfAfzqAgxOxOxOxOAhAiAiAjAiAiAkAiAlzYxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajalalalalalalalxeAmAmAmAnAoyrysApAqArAsyrysAcAtAuAvAvAvxeAwAxAxAyzaAzAAAAABACADyKyKAEAFyBAGAHAIxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajalalalalalalalalalxezzzzzzAJAKyrysyryrALyryrysAcAMANzzzzzzxoAOAPAQAyAgxOxOxOARASATyXyXyXyXAUyXAVzYxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -AWAXaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalalalalalalalalxezzAYzzAZzBysBaBbBcBdzEBeBfBgzKBhzzzzzzxoBiyKBjBkBlBmBnBoARyKxOBpBqBrBsxKBtxOzYxLuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -AWAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalxeBuBvzfBwBxyrziysysysysysziAcByBzzfBvBAxoBBBCyKAyyKBDBEBFARyKxOBGBHBIyKxKxOBJBKxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +AWAXaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalalalalalalalalxezzAYzzAZzBysBaBbBcBdzEBeBfBgzKBhzzzzzzxoBiyKDrBkBlBmBnBoARyKxOBpBqBrBsxKBtxOzYxLuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +AWAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalxeBuBvzfBwBxyrziysysysysysziAcByBzzfBvBAxoDsBCyKAyyKBDBEBFARyKxOBGBHBIyKxKxOBJBKxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM AWAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalxexexexexeBLysyrysyryryrysyrBgBMxexexexexoxoxoBNBOyKBPAABQBRBSyXBTyVBUBVyBBWxoxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM AWAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalalalalalalalalalalxeBXyrysBYBZCaCbCcCdCaCeCfCgChCiCjCkClClxoCmCnCoCpyKyGARCqxOyHyKyKCrCsCtxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM AWCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalCvCwCwCvalalalalalalalalalalalalalalalalalalxexeCxyrxeCyCzCAAmCBCCCDxeyrCExexeClCluexoxoCFCGyBxKxKCHyBCIxKxKyBCsCJxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM @@ -1664,15 +1666,15 @@ AWAXAXAXAXCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtN aaafAXAXAXCuCuCuAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXDeCwCwCXCuCuCuCuAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXalalxeDfzzzzAmzzzzDgxealalalalalalalalalalalxoxOzYzYDhzYzYDixouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafAXAXAXAXCuCuAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuDeCwCwCXAXAXCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuAXAXAXxeDjDjDjxexexexexealalalalalalalalalaluyxoxKxLxKxoxKxLxKxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXCuCuCuCuCKCwCwCLAXAXAXAXAXAXAXAXAXCuCuCuAXCuCuCuCuCuCuCuAXAXAXalalalalalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafaftNtNtNtNAXAXAXAXAXAXAXAXAXCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuCuAXAXAXCKCwCwCLAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafaftNtNtNtNAXAXAXAXAXAXAXAXAXCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuCuAXAXAXCKCwCwCLAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXAXCKCwCwCLAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuCuCuCuAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafaftNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXAXtNCvCwCwCvtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafaftNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXAXtNCvCwCwCvtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuCuCuCuAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNajajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpAXAXAXAXAXAXAXCuCuCuCuCuCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXCuAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajajtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXCuCuAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXCuCuAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXCuCuCuAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXCuAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalAXAXAXCuCuCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM @@ -1692,20 +1694,20 @@ aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtN aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXAXvpvpvpvpvpvpajajajajajajajajajttajajajvpvpvpvpvpvpvpvpvpvpajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajajajajajajajajajajajvpvpvpvpajajajajajajajajajvpvpvpvpvpvpvpvpvpvpAXAXCuCuCuAXAXvpvpvpvpajajajajajajvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnvpajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNDmtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpCvDoDoDpDpDpDoDoDqCvajajajajvpvpvpvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnDnajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajCwCwCwCwCwCwCwCwCwCwajajvpvpvpvpvpvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUcUcUaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajCwCwCwCwCwCwCwCwCwCwajajvpvpvpvpvpvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajCwCwCwCwCwCwCwCwCwCwajvpvpvpvpvpvpvpvpvpvpvpDkvpDnDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpCvDrDsDsDtDtDtDsDsCvvpvpvpvpvpvpvpvpvpvpvpvpDkvpDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUaDaDaDDuDvDvDvutaDaDaDaDcUcUcUcUcUcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvMvMvMvMvMvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUaDaDDuDwvqvqvqusDvutaDaDaDaDcUcUcUcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUaDaDaHvqvMvMvqvqvqusDvutaDaDaDaDcUcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaHvqvqvMvMvMvqvqvqusutaDaDaDaDcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDDuDwvqvqvMvMvMvMvMvqvqusDvutaDaDcUcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqaCaLaJaDaDaDcUcUcUaDaDDuDwvqvqvMvMvpvpvpvMvqvqvqvqaGaDaDaDcUcUaM -aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqaCaLaLaLaJaDaDaDaDaDcUcUcUaDaDaHvqvqvMvMvpvpvpvpvMvMvMvMvqusutaDaDaDcUaM -aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqaLaLaLaJaDaDaDaDaDaDaDaDaDcUcUcUcUaDaKaEvqvMvMvMvpvpvpvpvMvMvMvMvqusutaDaDaDaM -aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMAXAXaDaDaDaDaDaDaDaDaDaDaDaDaDaDcUcUcUaDaDaKaEvqvMvMvMvMvpvpvpvpvMvMvMvqusutaDaDaM -aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMAXAXAXAXAXaDaDaDaDDuDvDvDvDvDvDvutaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvMvMvMvqvqaGaDaDaM -aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXaDaDDuDvDwvqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvqvqvqvqaGaDaDaM -aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXAXvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXDvDvDwvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaKaLaEvqvqvqvqvqvqvqaCaLaLaJaDaDaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpCvDtDuDuDvDvDvDuDuCvvpvpvpvpvpvpvpvpvpvpvpvpDkvpDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUaDaDaDDIDwDwDwuuaDaDaDaDcUcUcUcUcUcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvMvMvMvMvMvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUaDaDDIEavqvqvquvDwuuaDaDaDaDcUcUcUcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUaDaDaHvqvMvMvqvqvquvDwuuaDaDaDaDcUcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaHvqvqvMvMvMvqvqvquvuuaDaDaDaDcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDDIEavqvqvMvMvMvMvMvqvquvDwuuaDaDcUcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqaCaLaJaDaDaDcUcUcUaDaDDIEavqvqvMvMvpvpvpvMvqvqvqvqaGaDaDaDcUcUaM +aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqaCaLaLaLaJaDaDaDaDaDcUcUcUaDaDaHvqvqvMvMvpvpvpvpvMvMvMvMvquvuuaDaDaDcUaM +aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqaLaLaLaJaDaDaDaDaDaDaDaDaDcUcUcUcUaDaKaEvqvMvMvMvpvpvpvpvMvMvMvMvquvuuaDaDaDaM +aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMAXAXaDaDaDaDaDaDaDaDaDaDaDaDaDaDcUcUcUaDaDaKaEvqvMvMvMvMvpvpvpvpvMvMvMvquvuuaDaDaM +aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMAXAXAXAXAXaDaDaDaDDIDwDwDwDwDwDwuuaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvMvMvMvqvqaGaDaDaM +aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXaDaDDIDwEavqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvqvqvqvqaGaDaDaM +aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXAXvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXDwDwEavqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaKaLaEvqvqvqvqvqvqvqaCaLaLaJaDaDaM aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUaDaDaDaDaKaLaLaLaLaLaLaLaJaDaDaDaDaDaM aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvpvpvpvpvpDkvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaM aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXAXAXAXAXAXDlAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDaDaDcUcUcUaM @@ -1722,22 +1724,22 @@ aaafafvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDz aaafafvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMAXAXAXAXaDaKaEvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADAvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqAXAXAXaDaDaKaLaLaEvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADAvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDBvpDBvpCvCwCwCvvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqAXAXaDaDaDaDaDaKaLaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafDADADADADADAvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqusDvDvutaDaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafDADADADADADADADAvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafDADADADADADADADADAvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqusDvutaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafDADADADADADAvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvquvDwDwuuaDaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafDADADADADADADADAvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafDADADADADADADADADAvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafDADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDBvpDBvpCvCwCwCvvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafDADADADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafDADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDBvpDBvpCvCwCwCvvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafDADADADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADADADADADADADADzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADADADADADADADADADAvMvMDzDzDzDzvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvMDAvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADADADEvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADADEDADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADADEDADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADEDADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDAvMvMvMDADADADADADEDADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDAvMvMvMDADADADADADEDADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM @@ -1750,44 +1752,44 @@ aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaagagagDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDFDFDFDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkttttttttDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDGDGDGDGDGDGDHDHDHDHDHDHDHDHDHDHDHDHDItLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaagagagDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDFDFDFDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkttttttttDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDGDGDGDGDGDGDHDHDHDHDHDHDHDHDHDHDHDHEbtLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqusDvutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusDvutaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM -aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDcUcUcUcUcUcUcUcUcUaM +aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUaM aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusaDaDaDaDaDaDcUcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDcUcUcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDcUcUcUcUaM -aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusDvutaDaDaDaDaDcUcUcUaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaDaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaDaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusutaDaDaDaDaDaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusDvDvutaDaDaM -aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqusDvDvaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvaDaDaDaDaDaDcUcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUaM +aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDcUcUcUaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwDwuuaDaDaM +aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwDwaM aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafaa aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafaa aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJvMvMvMvMDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafafaa diff --git a/maps/southern_cross/southern_cross-4.dmm b/maps/southern_cross/southern_cross-4.dmm index 365cd32aac..19928e3a45 100644 --- a/maps/southern_cross/southern_cross-4.dmm +++ b/maps/southern_cross/southern_cross-4.dmm @@ -60,7 +60,7 @@ "bh" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/closet/crate,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage) "bi" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/status_display{pixel_x = -32},/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) -"bk" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) +"bk" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bm" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bn" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep) @@ -98,7 +98,7 @@ "bT" = (/obj/effect/floor_decal/corner/purple/full,/obj/machinery/suspension_gen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bU" = (/obj/machinery/suspension_gen,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bV" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) -"bW" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Expedition Prep"; dir = 1},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) +"bW" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Expedition Prep"; dir = 1},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep) "bX" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep) "bY" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northright,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep) "bZ" = (/obj/structure/table/steel,/obj/item/device/suit_cooling_unit,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/obj/item/device/suit_cooling_unit,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep) @@ -183,10 +183,10 @@ "dA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/table/standard,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/obj/item/weapon/storage/box/cups,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology) "dB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_research{name = "Outpost Hallway"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology) "dC" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly) -"dD" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) +"dD" = (/obj/structure/table/steel,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "dE" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) "dF" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) -"dG" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) +"dG" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/tool/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) "dH" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly) "dI" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/button/remote/blast_door{id = "xenoarch_cell2"; name = "Cell 2"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly) "dJ" = (/turf/simulated/floor/plating{ icon_state = "asteroidplating2"},/area/surface/cave/explored/normal) @@ -421,8 +421,8 @@ "ie" = (/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/normal) "if" = (/obj/item/stack/flag/green,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal) "ig" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal) +"ih" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/tool/crowbar,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly) "ii" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/obj/machinery/floodlight,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) -"il" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "im" = (/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "in" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "io" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) @@ -430,8 +430,8 @@ "iq" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "ir" = (/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "is" = (/obj/machinery/mining/drill,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) -"it" = (/obj/vehicle/train/cargo/engine,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) -"iu" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) +"it" = (/obj/vehicle/train/engine,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) +"iu" = (/obj/vehicle/train/trolley,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "iv" = (/obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "iw" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/heavyduty{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "ix" = (/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) @@ -676,9 +676,9 @@ adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbAaTbBbCbDbEbFbGbHbIbJbKbLbMbNbObNaNbPbQbRbSayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbTbUbVbWbXbYbZcacbcccdavcebMcfcgchaNayayayayayafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapapapapapapapapapcicjckavclcmcncncocpcqcrcsctcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead -adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecviigqgpiliicvafafafaecAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead +adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecviigqgpdDiicvafafafaecAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinimimimimimioafafafaecAdadbdccEdddedfandgdhdiaxdjdkdkdldmdndodpdqdrcuafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead -adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipimimimimimiqafafaeaecAdudvdwdxdydzdAamandBandCdDdEdFdGdHdIcucucucucudJafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead +adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipimimimimimiqafafaeaecAdudvdwdxdydzdAamandBandCdGdEdFihdHdIcucucucucudJafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipimimimimimiqafafafaecAdKdLdMdNdOdPdQcIdRdSdTaxdUdVdWdXdYdZeaebecedeedJafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipirisirimitiqafafafeicAdNdNcAejekelemeneodSdTbKepbNbNeqereseteueveweedJafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipimimimimiuiqafafafeyanezeAaneBeBeCeDeEeFdSdTaxeGeHeIeJeKeLeMeNeOePeedJafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead diff --git a/maps/southern_cross/southern_cross-5.dmm b/maps/southern_cross/southern_cross-5.dmm index 8d343fbf8e..11bfad0b0f 100644 --- a/maps/southern_cross/southern_cross-5.dmm +++ b/maps/southern_cross/southern_cross-5.dmm @@ -39,6 +39,7 @@ "aM" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/white,/area/derelict/ship) "aN" = (/obj/structure/table/standard,/obj/item/device/analyzer,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "aO" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/white,/area/derelict/ship) +"aP" = (/obj/structure/table/standard,/obj/item/weapon/tool/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "aS" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "aT" = (/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "aU" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/white,/area/derelict/ship) @@ -59,7 +60,6 @@ "bk" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "oldship_gun"},/turf/simulated/shuttle/plating,/area/derelict/ship) "bl" = (/obj/machinery/door/airlock/glass{name = "Pod Bay"},/turf/simulated/shuttle/floor/white,/area/derelict/ship) "bm" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/shuttle/floor/white,/area/derelict/ship) -"bn" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "bo" = (/obj/structure/table/standard,/obj/item/device/radio/off,/turf/simulated/shuttle/floor/white,/area/derelict/ship) "bp" = (/turf/simulated/mineral/vacuum,/area/mine/unexplored) "bq" = (/turf/simulated/mineral/floor/ignore_mapgen/vacuum,/area/mine/explored) @@ -209,7 +209,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacabacacacababalalaiajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjbkazacacacacacacblacacababababalaiajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbmacacacacacababababaaaaababaiajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacbnboababababaaaaaaaaababawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacaPboababababaaaaaaaaababawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index 50aa2c5b0a..f681cf1436 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -10,7 +10,7 @@ "aj" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/pin/flower,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre) "ak" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre) "al" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom) -"am" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom) +"am" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom) "an" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom) "ao" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_wildlife) "ap" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_plating) @@ -45,7 +45,7 @@ "aS" = (/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea) "aT" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea) "aU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea) -"aV" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) +"aV" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "aW" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "aX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea) "aY" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre) @@ -79,7 +79,7 @@ "bA" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom) "bB" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt) "bC" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt) -"bD" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) +"bD" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "bE" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea) "bF" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea) "bG" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom) @@ -95,7 +95,7 @@ "bQ" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre) "bR" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre) "bS" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre) -"bT" = (/obj/structure/flora/pottedplant{ icon_state = "plant-06"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre) +"bT" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre) "bU" = (/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 10},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre) "bV" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom) "bW" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/obj/structure/bed/chair/holochair{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom) @@ -109,7 +109,7 @@ "ce" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall,/area/space) "cf" = (/turf/simulated/floor/holofloor/space,/area/holodeck/source_space) "cg" = (/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield) -"ch" = (/obj/structure/flora/pottedplant{ icon_state = "plant-06"},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall) +"ch" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall) "ci" = (/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall) "cj" = (/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball) "ck" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball) @@ -195,7 +195,7 @@ "dM" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet{dir = 8},/area/holodeck/source_meetinghall) "dN" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball) "dO" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 8; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball) -"dP" = (/turf/unsimulated/beach/sand{ icon_state = "beach"},/area/holodeck/source_beach) +"dP" = (/turf/unsimulated/beach/sand{icon_state = "beach"},/area/holodeck/source_beach) "dQ" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 8; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_thunderdomecourt) "dR" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt) "dS" = (/obj/machinery/door/window/holowindoor{dir = 1; name = "Green Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt) @@ -292,7 +292,7 @@ "fF" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "fG" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "fH" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) -"fI" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"fI" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "fJ" = (/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "fK" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(103); use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "fL" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) @@ -323,10 +323,10 @@ "gk" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "gl" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "gm" = (/obj/structure/table/rack,/obj/item/device/lightreplacer,/obj/item/device/lightreplacer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) -"gn" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"gn" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "go" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "gp" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"gq" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"gq" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "gr" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "gs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "gt" = (/obj/effect/floor_decal/corner/yellow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -383,7 +383,7 @@ "hs" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "ht" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/response_ship/start) "hu" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) -"hv" = (/obj/machinery/computer/shuttle_control/web/ert{ icon_state = "flightcomp_center"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) +"hv" = (/obj/machinery/computer/shuttle_control/web/ert{icon_state = "flightcomp_center"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hw" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hx" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "response_shuttle"; pixel_x = 0; pixel_y = -25; tag_door = "response_shuttle_door"},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hy" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "response_shuttle_door"; locked = 1; name = "Forward Docking Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) @@ -394,7 +394,7 @@ "hD" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hE" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hF" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) -"hG" = (/obj/structure/table/reinforced,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"hG" = (/obj/structure/table/reinforced,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/tool/screwdriver,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hI" = (/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hJ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -406,7 +406,7 @@ "hP" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hQ" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "hR" = (/obj/item/device/radio/intercom/specops{pixel_y = -21},/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) -"hS" = (/obj/structure/flight_right{ icon_state = "right"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) +"hS" = (/obj/structure/flight_right{icon_state = "right"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hU" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) "hV" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start) @@ -425,7 +425,7 @@ "ii" = (/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ij" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "ik" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) -"il" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"il" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "im" = (/obj/structure/table/reinforced,/obj/item/weapon/pinpointer/advpinpointer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "in" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; dir = 8; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/specops) "io" = (/obj/machinery/shield_gen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -527,7 +527,7 @@ "kg" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2_recovery"; pixel_x = -25; pixel_y = 25; req_one_access = list(13); tag_door = "escape_pod_2_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac) "kh" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/plating,/area/centcom/evac) "ki" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) -"kj" = (/turf/unsimulated/floor{ icon_state = "asteroid"},/area/centcom/main_hall) +"kj" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/centcom/main_hall) "kk" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/centcom/evac) "kl" = (/turf/simulated/shuttle/plating,/area/centcom/evac) "km" = (/obj/machinery/door/airlock/maintenance_hatch{req_access = list(101)},/turf/simulated/shuttle/floor/black,/area/centcom/evac) @@ -593,10 +593,10 @@ "lu" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) "lv" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/plating,/area/centcom/evac) "lw" = (/turf/simulated/shuttle/wall/dark/no_join,/area/centcom/evac) -"lx" = (/obj/structure/closet/secure_closet/security,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) -"ly" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) -"lz" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) -"lA" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) +"lx" = (/obj/structure/closet/secure_closet/security,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) +"ly" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) +"lz" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) +"lA" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) "lB" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac) "lC" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor,/area/centcom/evac) "lD" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod2/centcom) @@ -614,7 +614,7 @@ "lP" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom) "lQ" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "lR" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) -"lS" = (/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) +"lS" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) "lT" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "lU" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "lV" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) @@ -637,7 +637,7 @@ "mm" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "mn" = (/obj/machinery/computer/shuttle_control/centcom,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "mo" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/plating,/area/centcom/evac) -"mp" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) +"mp" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) "mq" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "mr" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "ms" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) @@ -645,7 +645,7 @@ "mu" = (/obj/machinery/biogenerator,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mv" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mw" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/fryer,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"mx" = (/obj/machinery/computer/ordercomp,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) +"mx" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/supplycomp/control,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "my" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "mz" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "mA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/transport1/centcom) @@ -655,7 +655,7 @@ "mE" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom) "mF" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle"; pixel_x = 0; pixel_y = -25; tag_door = "centcom_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "mG" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) -"mH" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) +"mH" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) "mI" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "mJ" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "mK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) @@ -665,8 +665,8 @@ "mO" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "mP" = (/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "mQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 26; pixel_y = 0; tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) -"mR" = (/obj/machinery/computer/card,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) -"mS" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac) +"mR" = (/obj/machinery/computer/card,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) +"mS" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac) "mT" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "mU" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/oven,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mV" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) @@ -676,9 +676,9 @@ "mZ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "na" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 02"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac) "nb" = (/obj/machinery/computer/pod{id = "thunderdomehea"; name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"nc" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) +"nc" = (/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "nd" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) -"ne" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"ne" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "nf" = (/obj/machinery/atmospherics/pipe/vent{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "ng" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "steel"},/area/tdome) "nh" = (/obj/machinery/seed_storage/garden,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) @@ -715,7 +715,7 @@ "nM" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor,/area/centcom/evac) "nN" = (/obj/machinery/computer/pod{id = "thunderdome"; name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) "nO" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"nP" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"nP" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "nQ" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/glasses/square,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "nR" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/icecream_vat,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "nS" = (/obj/machinery/computer/security,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) @@ -736,8 +736,8 @@ "oh" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) "oi" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 01"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac) "oj" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"ok" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) -"ol" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"ok" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) +"ol" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "om" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/vending/dinnerware,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "on" = (/obj/structure/flora/pottedplant/stoutbush,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/main_hall) "oo" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) @@ -751,7 +751,7 @@ "ow" = (/obj/structure/toilet,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "ox" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/centcom) "oy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"oz" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"oz" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "oA" = (/obj/structure/flora/pottedplant,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar) "oB" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "oC" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) @@ -817,11 +817,11 @@ "pK" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "pL" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "pM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"pN" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"pN" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "pO" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar) "pP" = (/turf/unsimulated/wall,/area/centcom/bar) "pQ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"pR" = (/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"pR" = (/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "pS" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living) "pT" = (/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living) "pU" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living) @@ -854,7 +854,7 @@ "qv" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living) "qw" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/living) "qx" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living) -"qy" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom) +"qy" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom) "qz" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "qA" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/shuttle/floor,/area/centcom/evac) "qB" = (/turf/unsimulated/wall,/area/shuttle/trade) @@ -862,7 +862,7 @@ "qD" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "qE" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "qF" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"qG" = (/obj/structure/bed/chair/wood/wings,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"qG" = (/obj/structure/bed/chair/wood/wings,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "qH" = (/obj/machinery/light,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) "qI" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) "qJ" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom) @@ -915,7 +915,7 @@ "rE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) "rF" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/clerical,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) "rG" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) -"rH" = (/obj/machinery/door/airlock/glass{name = "Bar"},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"rH" = (/obj/machinery/door/airlock/glass{name = "Bar"},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "rI" = (/obj/machinery/floor_light,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) "rJ" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar) "rK" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/centcom/evac) @@ -929,8 +929,8 @@ "rS" = (/obj/machinery/door/airlock/glass_centcom{name = "Bridge Access"; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "rT" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar) "rU" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar) -"rV" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/flame/candle,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) -"rW" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"rV" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/flame/candle,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) +"rW" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "rX" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) "rY" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) "rZ" = (/obj/structure/bookcase,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) @@ -938,8 +938,8 @@ "sb" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy,/obj/item/clothing/suit/storage/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/head/helmet,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) "sc" = (/obj/structure/frame/computer,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) "sd" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/shuttle/trade) -"se" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) -"sf" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"se" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) +"sf" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "sg" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living) "sh" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living) "si" = (/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living) @@ -951,7 +951,7 @@ "so" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/centcom) "sp" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/shuttle/trade) "sq" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) -"sr" = (/obj/structure/table/woodentable{dir = 5},/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar) +"sr" = (/obj/structure/table/woodentable{dir = 5},/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar) "ss" = (/obj/machinery/floor_light,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) "st" = (/obj/machinery/light{dir = 8},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) "su" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 3"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac) @@ -996,7 +996,7 @@ "th" = (/obj/structure/table/reinforced,/obj/item/frame/light,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "ti" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "tj" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) -"tk" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"tk" = (/obj/item/weapon/tool/crowbar,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "tl" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tm" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tn" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/white,/area/centcom/evac) @@ -1008,10 +1008,10 @@ "tt" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tu" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tv" = (/obj/structure/bed/roller,/turf/simulated/shuttle/floor/white,/area/centcom/evac) -"tw" = (/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/shuttle/floor/white,/area/centcom/evac) -"tx" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"tw" = (/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"tx" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "ty" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/shuttle/floor/white,/area/centcom/evac) -"tz" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"tz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tA" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade) "tB" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade) "tC" = (/obj/structure/closet/wardrobe/pink,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) @@ -1034,7 +1034,7 @@ "tT" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade) "tU" = (/turf/unsimulated/wall,/area/centcom/security) "tV" = (/turf/unsimulated/wall,/area/centcom/medical) -"tW" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -30; pixel_y = 0},/obj/structure/table/standard,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/machinery/recharger,/obj/item/weapon/screwdriver,/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"tW" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -30; pixel_y = 0},/obj/structure/table/standard,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/machinery/recharger,/obj/item/weapon/tool/screwdriver,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tX" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tY" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "tZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "trade_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 25; pixel_y = 0; tag_door = "trade_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade) @@ -1086,7 +1086,7 @@ "uT" = (/obj/machinery/computer/operating,/turf/simulated/shuttle/floor/white,/area/centcom/evac) "uU" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/black,/area/centcom/evac) "uV" = (/obj/structure/morgue,/turf/simulated/shuttle/floor/white,/area/centcom/evac) -"uW" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac) +"uW" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac) "uX" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/merchant/home) "uY" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "uZ" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/merchant/home) @@ -1176,7 +1176,7 @@ "wF" = (/obj/structure/table/steel_reinforced,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wG" = (/obj/structure/table/steel_reinforced,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) -"wI" = (/obj/vehicle/train/cargo/engine,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) +"wI" = (/obj/vehicle/train/engine,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wJ" = (/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home) "wK" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wL" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1190,14 +1190,14 @@ "wT" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wU" = (/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/weldpack,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) -"wW" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) +"wW" = (/obj/vehicle/train/trolley,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wX" = (/obj/machinery/light,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wY" = (/obj/machinery/vending/medical{pixel_y = -32; req_access = null},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "wZ" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security) "xa" = (/obj/structure/table/bench/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xb" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "xc" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"xd" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"xd" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "xe" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "xf" = (/obj/structure/table/steel_reinforced,/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "xg" = (/obj/machinery/door/window/southleft{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1209,7 +1209,7 @@ "xm" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "xn" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "xo" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"xp" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"xp" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "xq" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) "xr" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) "xs" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1356,7 +1356,7 @@ "Ad" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ae" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Af" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ag" = (/turf/unsimulated/floor{ icon_state = "asteroid"},/area/centcom/terminal) +"Ag" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/centcom/terminal) "Ah" = (/turf/unsimulated/wall{icon = 'icons/obj/doors/Doormaint.dmi'; icon_state = "door_closed"; name = "Sealed Door"},/area/centcom/terminal) "Ai" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/terminal) "Aj" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/terminal) @@ -1369,9 +1369,9 @@ "Aq" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) "Ar" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) "As" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home) -"At" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/atm{pixel_x = -32},/obj/machinery/meter,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) +"At" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/atm{pixel_x = -32},/obj/machinery/meter,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "Au" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "trade2_control"; pixel_x = -22; pixel_y = -32; req_one_access = list(150)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) -"Av" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) +"Av" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "Aw" = (/obj/structure/table/standard,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "Ax" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "Ay" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/glass{amount = 15},/obj/item/stack/material/glass{amount = 15},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1384,7 +1384,7 @@ "AF" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "AG" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/shuttle/merchant/home) "AH" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/shuttle/merchant/home) -"AI" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/shuttle/merchant/home) +"AI" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/shuttle/merchant/home) "AJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "AK" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "AL" = (/obj/machinery/vending/engivend,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1392,7 +1392,7 @@ "AN" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "AO" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "AP" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"AQ" = (/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) +"AQ" = (/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "AR" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "AS" = (/obj/structure/table/standard,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "AT" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "trade2_vent"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1331; id_tag = "trade2_control"; pixel_x = -24; req_access = list(150); tag_airpump = "trade2_vent"; tag_chamber_sensor = "trade2_sensor"; tag_exterior_door = "trade2_shuttle_outer"; tag_interior_door = "trade2_shuttle_inner"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) @@ -1404,7 +1404,7 @@ "AZ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "trade2_control"; pixel_x = 24; req_one_access = list(150)},/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_outer"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home) "Ba" = (/obj/structure/table/standard,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Bb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"Bc" = (/obj/effect/floor_decal/industrial/loading{ icon_state = "loadingarea"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) +"Bc" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Bd" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Be" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Bf" = (/obj/machinery/light{dir = 8},/obj/structure/bed/chair/shuttle{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) @@ -1412,8 +1412,8 @@ "Bh" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/closet/emcloset,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Bi" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "Bj" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"Bk" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) -"Bl" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"Bk" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"Bl" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Bm" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom) "Bn" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Bo" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) @@ -1431,7 +1431,7 @@ "BA" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/sign/dock/two,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BB" = (/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BC" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"BD" = (/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) +"BD" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BE" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/escape/centcom) "BF" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "BG" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) @@ -1480,7 +1480,7 @@ "Cx" = (/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "Cy" = (/obj/structure/undies_wardrobe,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "Cz" = (/turf/simulated/shuttle/wall/no_join,/area/shuttle/escape/centcom) -"CA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"CA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "CB" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "CC" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "CD" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) @@ -1503,14 +1503,14 @@ "CU" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station) "CV" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "CW" = (/mob/living/simple_animal/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"CX" = (/obj/structure/flora/pottedplant{ icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) +"CX" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "CY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "CZ" = (/obj/structure/bed/chair/shuttle{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Da" = (/obj/structure/bed/chair/shuttle{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Db" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/bed/chair/shuttle{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Dc" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "Dd" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"De" = (/obj/structure/flora/pottedplant{ icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"De" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "Df" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Dg" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Dh" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) @@ -1533,7 +1533,7 @@ "Dy" = (/obj/structure/table/steel_reinforced,/obj/item/stack/telecrystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "Dz" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "DA" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"DB" = (/obj/structure/flora/pottedplant{ icon_state = "plant-04"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) +"DB" = (/obj/structure/flora/pottedplant{icon_state = "plant-04"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "DC" = (/obj/structure/sign/electricshock,/turf/simulated/shuttle/wall/dark/hard_corner,/area/wizard_station) "DD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) "DE" = (/obj/machinery/computer/shuttle,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) @@ -1544,7 +1544,7 @@ "DJ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/computer/station_alert/all,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "DK" = (/obj/structure/table/steel_reinforced,/obj/item/device/mmi/radio_enabled,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "DL" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"DM" = (/obj/structure/flora/pottedplant{ icon_state = "plant-03"},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) +"DM" = (/obj/structure/flora/pottedplant{icon_state = "plant-03"},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "DN" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) "DO" = (/obj/machinery/power/port_gen/pacman,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) "DP" = (/obj/structure/table/steel_reinforced,/obj/item/xenos_claw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) @@ -1566,7 +1566,7 @@ "Ef" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/book/manual/engineering_hacking,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Eg" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Eh" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"Ei" = (/obj/effect/floor_decal/industrial/warning/corner{ icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) +"Ei" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Ej" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/item/target,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Ek" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom) "El" = (/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom) @@ -1574,7 +1574,7 @@ "En" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Eo" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Ep" = (/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) -"Eq" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) +"Eq" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Er" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) "Es" = (/obj/item/robot_parts/r_arm,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) "Et" = (/obj/item/robot_parts/l_leg,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station) @@ -1679,7 +1679,7 @@ "Go" = (/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo) "Gp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "ninja_shuttle"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "ninja_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "blastninja"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start) "Gq" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "ninja_shuttle_inner"; name = "Ship Internal Hatch"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start) -"Gr" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "ninja_shuttle"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start) +"Gr" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "ninja_shuttle"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start) "Gs" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start) "Gt" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo) "Gu" = (/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo) @@ -1692,7 +1692,7 @@ "GB" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/obj/machinery/button/remote/blast_door{id = "ninjawindow"; name = "remote shutter control"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) "GC" = (/obj/structure/table/bench/wooden,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo) "GD" = (/obj/structure/flight_right{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) -"GE" = (/obj/machinery/computer/shuttle_control/web/ninja{ icon_state = "flightcomp_center"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) +"GE" = (/obj/machinery/computer/shuttle_control/web/ninja{icon_state = "flightcomp_center"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) "GF" = (/obj/structure/flight_left{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) "GG" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach) "GH" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach) @@ -1705,9 +1705,9 @@ "GO" = (/obj/structure/flora/tree/pine,/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo) "GP" = (/obj/structure/flora/ausbushes/palebush,/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo) "GQ" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo) -"GR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{ icon_state = "asteroid"},/area/ninja_dojo/dojo) -"GS" = (/turf/unsimulated/floor{ icon_state = "asteroid"},/area/ninja_dojo/dojo) -"GT" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{ icon_state = "asteroid"},/area/ninja_dojo/dojo) +"GR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo) +"GS" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo) +"GT" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo) "GU" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo) "GV" = (/turf/unsimulated/floor{icon_state = "sandwater"},/area/beach) "GW" = (/turf/unsimulated/beach/coastline{density = 1; opacity = 1},/area/beach) @@ -1771,10 +1771,10 @@ "Ic" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership) "Id" = (/turf/simulated/mineral,/area/space) "Ie" = (/turf/simulated/mineral,/area/skipjack_station) -"If" = (/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"If" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "Ig" = (/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two;Airlock Three;Airlock Four"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock;escape_dock_snorth_airlock;escape_dock_ssouth_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_y = -32; req_one_access = list(13)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Ih" = (/obj/structure/table/standard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) -"Ii" = (/obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1"},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) +"Ii" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) "Ij" = (/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) "Ik" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/prison/solitary) "Il" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/prison/solitary) @@ -1794,7 +1794,7 @@ "Iz" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad) "IA" = (/turf/simulated/shuttle/wall/dark/no_join,/area/shuttle/syndicate_elite/mothership) "IB" = (/obj/effect/landmark{name = "Syndicate-Commando-Bomb"},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership) -"IC" = (/obj/structure/inflatable,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"IC" = (/obj/structure/inflatable,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "ID" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) "IE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station) "IF" = (/obj/item/weapon/tray{pixel_y = 5},/obj/structure/table/standard,/obj/item/weapon/material/knife/butch,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station) @@ -1845,10 +1845,10 @@ "Jy" = (/obj/machinery/door/airlock/centcom{name = "Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Jz" = (/obj/machinery/door/airlock/centcom{icon_state = "door_locked"; locked = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "JA" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken1"},/area/skipjack_station) -"JB" = (/obj/structure/table/standard,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"JC" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"JD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"JE" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) +"JB" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"JC" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"JD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"JE" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) "JF" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station) "JG" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -28; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station) "JH" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station) @@ -1867,8 +1867,8 @@ "JU" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station) "JV" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station) "JW" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership) -"JX" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"JY" = (/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) +"JX" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"JY" = (/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) "JZ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 9},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/skipjack_station) "Ka" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station) "Kb" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station) @@ -1888,7 +1888,7 @@ "Kp" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station) "Kq" = (/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station) "Kr" = (/obj/item/xenos_claw,/obj/item/organ/internal/brain/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station) -"Ks" = (/obj/item/weapon/ore,/turf/unsimulated/floor{ name = "plating"; icon_state = "asteroid_dug"},/area/skipjack_station) +"Ks" = (/obj/item/weapon/ore,/turf/unsimulated/floor{name = "plating"; icon_state = "asteroid_dug"},/area/skipjack_station) "Kt" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_station) "Ku" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station) "Kv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station) @@ -1898,9 +1898,9 @@ "Kz" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken2"},/area/skipjack_station) "KA" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 10},/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/skipjack_station) "KB" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station) -"KC" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"KD" = (/obj/structure/table/rack,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"KE" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"KC" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"KD" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"KE" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "KF" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "KG" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "KH" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) @@ -1911,68 +1911,68 @@ "KM" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station) "KN" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station) "KO" = (/turf/simulated/floor/airless,/area/shuttle/syndicate_elite/mothership) -"KP" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"KQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"KR" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hop,/turf/unsimulated/floor{ icon_state = "wood"},/area/skipjack_station) -"KS" = (/obj/item/weapon/ore,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"KT" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"KP" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"KQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"KR" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hop,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station) +"KS" = (/obj/item/weapon/ore,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"KT" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "KU" = (/obj/machinery/door/airlock/centcom{name = "Suit Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "KV" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station) "KW" = (/obj/machinery/door/airlock{name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station) "KX" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station) -"KY" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"KZ" = (/obj/item/weapon/storage/box,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"La" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"KY" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"KZ" = (/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"La" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "Lb" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Lc" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Ld" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) -"Le" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"Lf" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"Lg" = (/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"Lh" = (/obj/item/weapon/storage/box/syndie_kit/clerical,/obj/structure/table/standard,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Le" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Lf" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Lg" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Lh" = (/obj/item/weapon/storage/box/syndie_kit/clerical,/obj/structure/table/standard,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "Li" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) "Lj" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) -"Lk" = (/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"Ll" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) +"Lk" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"Ll" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) "Lm" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station) "Ln" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station) -"Lo" = (/obj/structure/table/rack,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"Lp" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"Lo" = (/obj/structure/table/rack,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"Lp" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "Lq" = (/obj/structure/table/rack,/obj/item/weapon/storage/briefcase/inflatable,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Lr" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Ls" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Lt" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) -"Lu" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Lu" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "Lv" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) "Lw" = (/obj/structure/table/standard,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) -"Lx" = (/obj/structure/bed/chair,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"Ly" = (/obj/item/weapon/tank/vox,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"Lx" = (/obj/structure/bed/chair,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"Ly" = (/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "Lz" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LA" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LB" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) -"LC" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"LD" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"LE" = (/obj/structure/table/glass,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) -"LF" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) +"LC" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"LD" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"LE" = (/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"LF" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "LG" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) "LH" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/sunglasses/prescription,/obj/item/clothing/glasses/sunglasses/prescription,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) -"LI" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LJ" = (/obj/structure/table/steel,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LK" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LL" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"LM" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"LI" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LJ" = (/obj/structure/table/steel,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LK" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LL" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"LM" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "LN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LO" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LP" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LQ" = (/obj/structure/table/glass,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "LR" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) -"LS" = (/obj/structure/table/steel,/obj/item/device/radio/uplink,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LT" = (/obj/item/weapon/gun/launcher/pneumatic,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) -"LU" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_station) +"LS" = (/obj/structure/table/steel,/obj/item/device/radio/uplink,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LT" = (/obj/item/weapon/gun/launcher/pneumatic,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) +"LU" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "LV" = (/obj/structure/table/standard,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) -"LW" = (/obj/item/weapon/storage/box/syndie_kit/spy,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LX" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/skipjack_station) -"LY" = (/obj/structure/ore_box,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/skipjack_station) +"LW" = (/obj/item/weapon/storage/box/syndie_kit/spy,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LX" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station) +"LY" = (/obj/structure/ore_box,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station) "LZ" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Ma" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Mb" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) @@ -2003,9 +2003,9 @@ "MA" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "MB" = (/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "MC" = (/obj/machinery/autolathe{hacked = 1; name = "hacked autolathe"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"MD" = (/obj/structure/shuttle/engine/heater{ icon_state = "heater"; dir = 4},/turf/simulated/floor/airless,/area/syndicate_station/start) -"ME" = (/obj/structure/shuttle/engine/router{ icon_state = "router"; dir = 8},/turf/simulated/floor/airless,/area/syndicate_station/start) -"MF" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) +"MD" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/airless,/area/syndicate_station/start) +"ME" = (/obj/structure/shuttle/engine/router{icon_state = "router"; dir = 8},/turf/simulated/floor/airless,/area/syndicate_station/start) +"MF" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) "MG" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "MH" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "MI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2013,55 +2013,55 @@ "MK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "ML" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "MM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"MN" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 6},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) +"MN" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) "MO" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "MP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 28; pixel_y = 8},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "merc_shuttle"; pixel_x = 24; pixel_y = -2; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "MQ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) -"MR" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 10},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) +"MR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) "MS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start) "MT" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "MU" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "MV" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/structure/table/steel,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "MW" = (/obj/machinery/light{dir = 4},/obj/structure/table/rack,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"MX" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) +"MX" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) "MY" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "MZ" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Na" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nb" = (/obj/structure/flight_left,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nc" = (/obj/machinery/computer/shuttle_control/web/heist,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nd" = (/obj/structure/flight_right,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Ne" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/pirate,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Na" = (/obj/structure/flight_left,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nb" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nc" = (/obj/structure/flight_right,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nd" = (/obj/machinery/computer/shuttle_control/web/heist,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Ne" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/pirate,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Nf" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1331; id_tag = "skipjack_shuttle"; pixel_x = -24; req_access = list(150); tag_airpump = "vox_east_vent"; tag_chamber_sensor = "vox_east_sensor"; tag_exterior_door = "vox_northeast_lock"; tag_interior_door = "vox_southeast_lock"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Ng" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Nh" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"Ni" = (/obj/machinery/atmospherics/pipe/manifold/visible{ icon_state = "map"; dir = 8},/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) +"Ni" = (/obj/machinery/atmospherics/pipe/manifold/visible{icon_state = "map"; dir = 8},/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Nj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/light/small,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Nk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Nl" = (/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Nm" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Nn" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "No" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"Np" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"Np" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Nq" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/structure/table/steel,/obj/item/weapon/storage/box/frags,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Nr" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_southwest_lock"; locked = 0; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Ns" = (/obj/machinery/light/small{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nt" = (/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nu" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Nv" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Ns" = (/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nt" = (/obj/machinery/light/small{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nu" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Nv" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Nw" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start) "Nx" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_southeast_lock"; locked = 0; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Ny" = (/obj/machinery/porta_turret/ai_defense,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"Nz" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) +"Nz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) "NA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"NB" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) -"NC" = (/obj/structure/table/steel,/obj/effect/spawner/newbomb/timer/syndicate,/obj/item/weapon/screwdriver,/obj/item/device/assembly/signaler{pixel_y = 2},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"NB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start) +"NC" = (/obj/structure/table/steel,/obj/effect/spawner/newbomb/timer/syndicate,/obj/item/weapon/tool/screwdriver,/obj/item/device/assembly/signaler{pixel_y = 2},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "ND" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "NE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "NF" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) -"NG" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) +"NG" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start) "NH" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; pixel_x = -22; req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "NI" = (/obj/structure/table/rack,/obj/item/weapon/material/harpoon,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/random/rigsuit,/obj/random/multiple/voidsuit,/obj/random/multiple/voidsuit,/obj/random/energy,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"NJ" = (/obj/structure/table/rack,/obj/random/rigsuit,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"NJ" = (/obj/structure/table/rack,/obj/random/rigsuit,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "NK" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/random/multiple/voidsuit,/obj/random/multiple/voidsuit,/obj/random/energy,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "NL" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/machinery/light/small{dir = 8},/obj/random/multiple/voidsuit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "NM" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; pixel_x = 22; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2084,17 +2084,17 @@ "Od" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Oe" = (/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Of" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Og" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/obj/item/weapon/pinpointer/shuttle/heist,/obj/item/weapon/pinpointer/shuttle/heist,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Og" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/obj/item/weapon/pinpointer/shuttle/heist,/obj/item/weapon/pinpointer/shuttle/heist,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Oh" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/clothing/shoes/magboots,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Oi" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Oj" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Ok" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start) "Ol" = (/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"Om" = (/obj/structure/bed/chair/comfy/red{ icon_state = "comfychair_preview"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"Om" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "On" = (/obj/machinery/light{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Oo" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/bed/chair/comfy/red{dir = 4; icon_state = "comfychair_preview"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Op" = (/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"Oq" = (/obj/machinery/light{dir = 4},/obj/structure/bed/chair/comfy/red{ icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"Oq" = (/obj/machinery/light{dir = 4},/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Or" = (/obj/machinery/door/airlock/voidcraft{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "Os" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Ot" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) @@ -2106,14 +2106,14 @@ "Oz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"OC" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"OC" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "OD" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/skipjack_station/start) "OE" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"OG" = (/obj/structure/flight_right{ icon_state = "right"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"OG" = (/obj/structure/flight_right{icon_state = "right"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "OH" = (/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "OI" = (/obj/structure/bed/chair/comfy/red{dir = 4; icon_state = "comfychair_preview"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"OJ" = (/obj/structure/bed/chair/comfy/red{ icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"OJ" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "OK" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "OL" = (/obj/machinery/turretid{pixel_x = 0; pixel_y = 32; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "OM" = (/obj/structure/table/rack,/obj/item/device/aicard,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) @@ -2121,7 +2121,7 @@ "OO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OP" = (/obj/item/robot_parts/l_leg,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OQ" = (/obj/machinery/computer/shuttle_control/web/syndicate{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"OR" = (/obj/structure/bed/chair/comfy/red{ icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"OR" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "OS" = (/obj/machinery/door/airlock/voidcraft/vertical{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "OT" = (/mob/living/simple_animal/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "OU" = (/obj/machinery/door/airlock/voidcraft/vertical{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) @@ -2130,25 +2130,25 @@ "OX" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OY" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "OZ" = (/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Pa" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Pb" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Pc" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Pd" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Pa" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Pb" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Pc" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Pd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Pe" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Pf" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Pg" = (/obj/structure/flight_left{ icon_state = "left"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) +"Pg" = (/obj/structure/flight_left{icon_state = "left"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Ph" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "Pi" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Pj" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Pk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Pl" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) -"Pm" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Pn" = (/obj/structure/table/steel,/obj/item/clothing/glasses/regular,/obj/item/clothing/glasses/regular,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"Po" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Pm" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Pn" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"Po" = (/obj/structure/table/steel,/obj/item/clothing/glasses/regular,/obj/item/clothing/glasses/regular,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Pp" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) "Pq" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Pr" = (/obj/item/weapon/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Ps" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/crowbar,/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Pr" = (/obj/item/weapon/tool/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ps" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/tool/crowbar,/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Pt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start) "Pu" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Pv" = (/obj/structure/bed/chair/comfy/red,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) @@ -2162,9 +2162,9 @@ "PD" = (/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) "PE" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) "PF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"PG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"PH" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) -"PI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"PG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"PH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) +"PI" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "PJ" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) "PK" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) "PL" = (/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) @@ -2178,24 +2178,24 @@ "PT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "PU" = (/obj/machinery/light{dir = 1},/obj/structure/table/steel,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/device/defib_kit/compact/combat/loaded,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "PV" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/storage/firstaid/combat,/obj/item/weapon/storage/firstaid/clotting,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"PW" = (/obj/machinery/atmospherics/pipe/manifold/visible{ icon_state = "map"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"PX" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"PW" = (/obj/machinery/atmospherics/pipe/manifold/visible{icon_state = "map"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"PX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "PY" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/skipjack_station/start) "PZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Qa" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Qa" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Qb" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) "Qc" = (/obj/machinery/door/airlock/voidcraft{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Qd" = (/obj/machinery/door/window{dir = 8; name = "Cell"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) "Qe" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "Qf" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"Qg" = (/obj/machinery/atmospherics/portables_connector{ icon_state = "map_connector"; dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"Qg" = (/obj/machinery/atmospherics/portables_connector{icon_state = "map_connector"; dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "Qh" = (/obj/structure/table/steel,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/manifold/visible,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"Qi" = (/obj/machinery/atmospherics/unary/freezer{ icon_state = "freezer_0"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) +"Qi" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer_0"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "Qj" = (/turf/simulated/shuttle/wall/no_join{base_state = "orange"; icon = 'icons/turf/shuttle_orange.dmi'; icon_state = "orange"},/area/centcom/evac) "Qk" = (/obj/structure/table/standard,/obj/item/weapon/handcuffs/legcuffs,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) "Ql" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) "Qm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Qn" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start) +"Qn" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start) "Qo" = (/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/obj/item/weapon/surgical/hemostat,/obj/item/weapon/surgical/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start) "Qp" = (/obj/structure/toilet{dir = 4},/obj/machinery/flasher{id = "syndieflash"; pixel_x = -28; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "Qq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/syndicate_station/start) @@ -2226,7 +2226,7 @@ "QP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/steel,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "QQ" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "QR" = (/obj/machinery/iv_drip,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) -"QS" = (/obj/structure/shuttle/engine/heater{ icon_state = "heater"; dir = 4},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/turf/simulated/floor/airless,/area/syndicate_station/start) +"QS" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/turf/simulated/floor/airless,/area/syndicate_station/start) "QT" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start) "QU" = (/obj/item/weapon/bedsheet/orange,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start) "QV" = (/obj/item/weapon/bedsheet/green,/obj/machinery/light/small{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start) @@ -2471,17 +2471,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdaaaaaaaaMdMeMeMfaaaaaaaaaaaaaaaaaaaaaaaaaaMdMeMeMfaaaaIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaMnMhMhMoaaaaaaaaaaaaMpMpMqMrMsMpMpMpMpMpMpMpaaaaaaIdIdIdIdIdIdIdIdIdabaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMuMvMtaaaaaaMtaaaaaaaaaaMtaaaaaaMtMwMxMtaaaaIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaMpMzMzMpaaaaaaMpMpMpMpMAMBMBMBMBMBMCMpMDMEMFaaaaaaaaIdIdIdIdIdIdIdIdabaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMGMHMtaaaaaaMtMIMJMJMJMKMtaaaaaaMtMLMMMtaaaaaaaaIdIdIdIdIdabIdIdIdIdIdIdIdIdaaaaaaaaaaaaMpMpMpMpMNMOMPMQMRMSMpMpMTMUMpMVMBMBMBMBMBMWMpMDMEMXaaaaaaaaaaIdIdIdIdIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMYMZMtaaaaMtMtNaNbNcNdNeMtMtaaaaMtNfNgMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdIdaaaaaaaaaaMpMpMpMBMBNhNiNjNkNlNmNnNnNoNpMBMpNqMBMBMBMpMpMpMpMDMEMXaaaaaaaaaaIdIdIdIdIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNrMtMtaaaaMtMtNsNtNuNtNvNwMtaaaaMtMtNxMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdaaaaaaaaMpMpMpMpNyMBMBMpNzNANAMQNBMBMBMBMBNyMpNCMBMBNDMpNENFMpMDMENGaaaaaaaaaaaaIdIdIdIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNHNIMtMtMtMtNJNtNtNtNtNtNJMtMtMtMtNKNMMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdaaaaaaaaMpMpNNNOMpMBMBNPMpNQNRNSNTMpNUNVMBMBMpMpMpNWMBNXNYNZOaMpMpMpMpMpaaaaaaaaaaaaIdIdIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdaaaaaaaaaaaaMtObOcOdOeOfMtOgNtNtNtNtNtOgMtOhOiOjOcObMtaaaaaaaaaaIdIdIdIdabIdIdIdIdaaaaaaaaaaOkOlMBOmMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpOsMpMSOrMpMpNZOtMpOuOvOwMpMpaaaaaaaaaaIdIdIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMYMZMtaaaaMtMtNbNaNdNcNeMtMtaaaaMtNfNgMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdIdaaaaaaaaaaMpMpMpMBMBNhNiNjNkNlNmNnNnNoNpMBMpNqMBMBMBMpMpMpMpMDMEMXaaaaaaaaaaIdIdIdIdIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNrMtMtaaaaMtMtNtNsNuNsNvNwMtaaaaMtMtNxMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdaaaaaaaaMpMpMpMpNyMBMBMpNzNANAMQNBMBMBMBMBNyMpNCMBMBNDMpNENFMpMDMENGaaaaaaaaaaaaIdIdIdIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNHNIMtMtMtMtNJNsNsNsNsNsNJMtMtMtMtNKNMMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdaaaaaaaaMpMpNNNOMpMBMBNPMpNQNRNSNTMpNUNVMBMBMpMpMpNWMBNXNYNZOaMpMpMpMpMpaaaaaaaaaaaaIdIdIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdaaaaaaaaaaaaMtObOcOdOeOfMtOgNsNsNsNsNsOgMtOhOiOjOcObMtaaaaaaaaaaIdIdIdIdabIdIdIdIdaaaaaaaaaaOkOlMBOmMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpOsMpMSOrMpMpNZOtMpOuOvOwMpMpaaaaaaaaaaIdIdIdIdIdabaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOxIdaaaaaaaaaaaaaaMtObOcOcOcOyMtOzOAOBOCOzOAOBMtNLOcOcOEObMtaaaaaaaaaaIdIdIdIdabIdIdIdIdaaaaaaaaaaOFOGOpOHMpMBMBNPMpOIOpOpOJMpMBOKOLOpMBMBMBOKOpMBMpMpMpMpNZNZNZOMMpMpaaaaaaaaaaIdIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOOObOcOcOcOcOCNtNtNtNtNtNtNtOCOcOcOPOcObOOaaaaaaaaaaaaIdIdIdabIdIdIdIdaaaaaaaaaaOFOQOROpOSOpOpOpOSOpOpOpOpOSOpOpOpOpOpOTOpOpOpNZNZNZNZOUNZNZNZNZOVMpaaaaaaaaaaaaIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOWOXOcOYOZOcMtPaPbNtNtNtPcPdMtOcPeOcPfObOWaaaaaaaaaaaaIdIdIdabIdIdIdaaaaaaaaaaaaOFPgOpPhMpMBMBNPMpOIOpOpOJMpMBNWMBOpMBMBMBNWOpMBMpMpMpMpPiNZNZPjMpMpaaaaaaaaaaaaIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaPkOXOcOcMtPlMtMtMtPmPnPoMtMtMtPpMtPqPrPsPkaaaaaaaaaaaaaaIdIdabIdIdIdaaaaaaaaaaaaPtPuMBPvMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpPwMpMSOrMpMpPxPxMpPyPzPAMpMpaaaaaaaaaaaaaaIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPBPCPCMtPDPEPDPFPGPHPIPFPJPKPLMtPMPNPOMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaMpMpPPPQMpMBMBNPMpPRMBMBPRMpPSPTMpMBMpMpMpPUOpPVOpPWPXMpMpMpMpMpaaaaaaaaaaaaaaaaIdIdIdabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPYPYMtMtPDPDPDPZPGQaPIPZPLPLQbMtMtPYPYMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaaaMpMpMpMpNyMBMBMpMpMpQcMpMpNZNZQdMBNPMpQeQfOpOpQgQhQiMpMDMEMFaaaaaaaaaaaaaaaaaaaaIdIdabaaaa -aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaMtODODMtMtQkQlPDQmQnNtQnQmPLPLQoMtMtODODMtaaaaaaaaaaaaaaIdIdabIdaaaaaaaaaaaaaaaaaaaaaaMpMpMpMBMBMBMpNENZMpQpNZNZQqQrQsMpOpOpOpOpQtQuQvMpMDMEMXaaaaaaaaaaaaaaaaaaaaIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOOObOcOcOcOcOCNsNsNsNsNsNsNsOCOcOcOPOcObOOaaaaaaaaaaaaIdIdIdabIdIdIdIdaaaaaaaaaaOFOQOROpOSOpOpOpOSOpOpOpOpOSOpOpOpOpOpOTOpOpOpNZNZNZNZOUNZNZNZNZOVMpaaaaaaaaaaaaIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOWOXOcOYOZOcMtPaPbNsNsNsPdPcMtOcPeOcPfObOWaaaaaaaaaaaaIdIdIdabIdIdIdaaaaaaaaaaaaOFPgOpPhMpMBMBNPMpOIOpOpOJMpMBNWMBOpMBMBMBNWOpMBMpMpMpMpPiNZNZPjMpMpaaaaaaaaaaaaIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaPkOXOcOcMtPlMtMtMtPmPoPnMtMtMtPpMtPqPrPsPkaaaaaaaaaaaaaaIdIdabIdIdIdaaaaaaaaaaaaPtPuMBPvMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpPwMpMSOrMpMpPxPxMpPyPzPAMpMpaaaaaaaaaaaaaaIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPBPCPCMtPDPEPDPFPGPIPHPFPJPKPLMtPMPNPOMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaMpMpPPPQMpMBMBNPMpPRMBMBPRMpPSPTMpMBMpMpMpPUOpPVOpPWPXMpMpMpMpMpaaaaaaaaaaaaaaaaIdIdIdabaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPYPYMtMtPDPDPDPZPGQaPHPZPLPLQbMtMtPYPYMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaaaMpMpMpMpNyMBMBMpMpMpQcMpMpNZNZQdMBNPMpQeQfOpOpQgQhQiMpMDMEMFaaaaaaaaaaaaaaaaaaaaIdIdabaaaa +aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaMtODODMtMtQkQlPDQmQnNsQnQmPLPLQoMtMtODODMtaaaaaaaaaaaaaaIdIdabIdaaaaaaaaaaaaaaaaaaaaaaMpMpMpMBMBMBMpNENZMpQpNZNZQqQrQsMpOpOpOpOpQtQuQvMpMDMEMXaaaaaaaaaaaaaaaaaaaaIdIdabaaaa aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtPDQwPDMtMtQxMtMtQyPLQzMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpMpMpMpQAQBMpMpMSMpMpQCQDMpQEOpOpOpQFOpQGMpMDMEMXaaaaaaaaaaaaaaaaaaaaIdIdabaaaa aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtPDPDQHMtQIQJQKMtPLPLQLMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpMpMpaaaaaaMpMpMpMpQMQNOpQOQPQQQRMpQSMENGaaaaaaaaaaaaaaaaaaBrBrIdabaaaa aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtMtQTPDMtQUQJQVMtQWQXMtMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpQYQZRaMpMpMpMpMpMpMpaaaaaaaaaaaaaaaaBrBraaIdabaaaa diff --git a/maps/southern_cross/southern_cross-8.dmm b/maps/southern_cross/southern_cross-8.dmm index 233df0df02..1d136a9a6d 100644 --- a/maps/southern_cross/southern_cross-8.dmm +++ b/maps/southern_cross/southern_cross-8.dmm @@ -1,65842 +1,332 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/unsimulated/wall/planetary/sif, -/area/surface/outside/wilderness/mountains) -"ac" = ( -/turf/simulated/floor/outdoors/grass/sif/forest/planetuse, -/area/surface/outpost/wall) -"ad" = ( -/turf/unsimulated/wall/planetary/sif{ - icon_state = "rock-dark" - }, -/area/surface/outside/wilderness/mountains) -"ah" = ( -/turf/simulated/mineral/sif, -/area/surface/outside/wilderness/mountains) -"ai" = ( -/obj/effect/zone_divider, -/turf/simulated/mineral/sif, -/area/surface/outside/wilderness/mountains) -"am" = ( -/turf/simulated/floor/water, -/area/surface/outside/river/svartan) -"an" = ( -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"ao" = ( -/turf/simulated/floor/outdoors/grass/sif/forest/planetuse, -/area/surface/outside/wilderness/normal) -"ap" = ( -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/surface/outside/wilderness/normal) -"au" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/surface/outside/wilderness/normal) -"ax" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/path/wilderness) -"ay" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/grass/sif/forest/planetuse, -/area/surface/outside/wilderness/normal) -"az" = ( -/turf/simulated/floor/wood, -/area/surface/outside/path/wilderness) -"aA" = ( -/turf/simulated/floor/outdoors/dirt, -/area/surface/outside/path/wilderness) -"aB" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/wilderness/normal) -"aC" = ( -/turf/simulated/wall/wood, -/area/surface/outside/path/wilderness) -"aH" = ( -/turf/simulated/floor/outdoors/dirt, -/area/surface/outside/wilderness/normal) -"aI" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/water, -/area/surface/outside/river/svartan) -"aJ" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aK" = ( -/turf/unsimulated/wall/planetary/sif, -/area/surface/outside/river/svartan) -"aL" = ( -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/surface/outside/wilderness/deep) -"aM" = ( -/obj/effect/step_trigger/teleporter/bridge/west_to_east, -/obj/structure/railing{ - dir = 4 - }, -/turf/simulated/floor/water, -/area/surface/outside/river/svartan) -"aN" = ( -/obj/effect/step_trigger/teleporter/bridge/east_to_west, -/obj/structure/railing{ - dir = 8 - }, -/turf/simulated/floor/water, -/area/surface/outside/river/svartan) -"aO" = ( -/obj/effect/step_trigger/teleporter/bridge/east_to_west, -/obj/structure/railing{ - dir = 8 - }, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aP" = ( -/turf/simulated/floor/outdoors/grass/sif/forest/planetuse, -/area/surface/outside/wilderness/deep) -"aQ" = ( -/turf/simulated/floor/plating/sif/planetuse, -/area/surface/outside/path/wilderness) -"aR" = ( -/obj/effect/step_trigger/teleporter/bridge/west_to_east, -/obj/structure/railing{ - dir = 4 - }, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aS" = ( -/obj/effect/step_trigger/teleporter/bridge/east_to_west/small, -/turf/simulated/floor/water, -/area/surface/outside/river/svartan) -"aT" = ( -/obj/effect/step_trigger/teleporter/bridge/west_to_east, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aU" = ( -/obj/effect/step_trigger/teleporter/bridge/east_to_west, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aV" = ( -/obj/effect/step_trigger/teleporter/bridge/west_to_east/small, -/turf/simulated/floor/water/deep, -/area/surface/outside/river/svartan) -"aW" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/surface/outside/wilderness/deep) -"aX" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/grass/sif/forest/planetuse, -/area/surface/outside/wilderness/deep) -"aY" = ( -/turf/simulated/floor/outdoors/dirt, -/area/surface/outside/wilderness/deep) -"dA" = ( -/obj/machinery/space_heater, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "mining_dock_2"; - name = "shuttle bay controller"; - pixel_x = 0; - pixel_y = -26; - tag_door = "mining_dock_2_door" - }, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"fa" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/path/wilderness) -"hS" = ( -/turf/simulated/floor/water/deep, -/area/surface/outside/ocean) -"je" = ( -/obj/item/weapon/banner/virgov, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"lh" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"mo" = ( -/obj/random/junk, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "mining_dock_1"; - name = "shuttle bay controller"; - pixel_x = 0; - pixel_y = -26; - tag_door = "mining_dock_1_door" - }, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"nb" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/water/deep, -/area/surface/outside/ocean) -"ne" = ( -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/surface/outpost/wall/checkpoint) -"np" = ( -/obj/structure/showcase/sign{ - desc = "This appears to be a sign warning people that the other side is extremely hazardous."; - icon_state = "wilderness2"; - pixel_y = -5 - }, -/turf/simulated/wall/wood, -/area/surface/outside/path/wilderness) -"nx" = ( -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"oK" = ( -/obj/effect/step_trigger/teleporter/wild/from_wild, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"oM" = ( -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/shuttle/shuttle2/mining) -"rl" = ( -/obj/item/weapon/banner/virgov, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"sd" = ( -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"tL" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"uG" = ( -/turf/unsimulated/wall/planetary/sif, -/area/surface/outside/ocean) -"vK" = ( -/turf/simulated/floor/outdoors/rocks/sif/planetuse, -/area/surface/outside/wilderness/deep) -"vW" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"xY" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/wilderness/deep) -"AJ" = ( -/obj/structure/closet, -/obj/random/maintenance/clean, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"Dc" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"EG" = ( -/obj/structure/closet/crate, -/obj/random/powercell, -/obj/item/weapon/screwdriver, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"Hm" = ( -/obj/structure/table/steel, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"Jl" = ( -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/shuttle/shuttle1/mining) -"JC" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/water, -/area/surface/outside/ocean) -"KN" = ( -/obj/structure/simple_door/sifwood, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"Li" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/shuttle/shuttle1/mining) -"LO" = ( -/obj/item/weapon/banner/nt, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) -"Oe" = ( -/turf/simulated/floor/outdoors/rocks/sif/planetuse, -/area/surface/outside/wilderness/normal) -"Pj" = ( -/obj/effect/step_trigger/teleporter/wild/from_wild, -/turf/simulated/floor/water, -/area/surface/outside/ocean) -"Qf" = ( -/turf/simulated/wall/log_sif, -/area/surface/outside/path/wilderness) -"RA" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/rocks/sif/planetuse, -/area/surface/outside/wilderness/normal) -"RZ" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/wilderness/mountains) -"Us" = ( -/obj/effect/zone_divider, -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/wilderness/normal) -"UB" = ( -/turf/simulated/floor/water, -/area/surface/outside/ocean) -"UO" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/plating/external, -/area/surface/outside/path/wilderness) -"XT" = ( -/turf/simulated/shuttle/wall/voidcraft, -/area/surface/outpost/wall/checkpoint) -"Yf" = ( -/turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/shuttle/shuttle2/mining) -"ZR" = ( -/obj/machinery/door/airlock/voidcraft{ - name = "Wilderness Containment" - }, -/turf/simulated/shuttle/floor/voidcraft/external, -/area/surface/outpost/wall/checkpoint) +"aa" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/wilderness/mountains) +"ab" = (/turf/unsimulated/wall/planetary/sif{icon_state = "rock-dark"},/area/surface/outside/wilderness/mountains) +"ac" = (/turf/simulated/mineral/sif,/area/surface/outside/wilderness/mountains) +"ad" = (/obj/effect/zone_divider,/turf/simulated/mineral/sif,/area/surface/outside/wilderness/mountains) +"ae" = (/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/wilderness/deep) +"af" = (/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outpost/wall) +"ag" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/wilderness/deep) +"ah" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/wilderness/deep) +"ai" = (/turf/simulated/floor/outdoors/dirt,/area/surface/outside/wilderness/deep) +"aj" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/wilderness/deep) +"ak" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/wilderness/deep) +"al" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/river/svartan) +"am" = (/turf/simulated/floor/water,/area/surface/outside/river/svartan) +"an" = (/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"ao" = (/turf/simulated/floor/outdoors/dirt,/area/surface/outside/path/wilderness) +"ap" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/wilderness/normal) +"aq" = (/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/path/wilderness) +"ar" = (/turf/simulated/floor/wood,/area/surface/outside/path/wilderness) +"as" = (/turf/simulated/wall/wood,/area/surface/outside/path/wilderness) +"at" = (/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/wilderness/normal) +"au" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/obj/structure/railing{dir = 4},/turf/simulated/floor/water,/area/surface/outside/river/svartan) +"av" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/obj/structure/railing{dir = 8},/turf/simulated/floor/water,/area/surface/outside/river/svartan) +"aw" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/river/svartan) +"ax" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west/small,/turf/simulated/floor/water,/area/surface/outside/river/svartan) +"ay" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"az" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"aA" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"aB" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east/small,/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"aC" = (/obj/structure/showcase/sign{desc = "This appears to be a sign warning people that the other side is extremely hazardous."; icon_state = "wilderness2"; pixel_y = -5},/turf/simulated/wall/wood,/area/surface/outside/path/wilderness) +"aD" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/wilderness/normal) +"aE" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/obj/structure/railing{dir = 4},/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"aF" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/obj/structure/railing{dir = 8},/turf/simulated/floor/water/deep,/area/surface/outside/river/svartan) +"aG" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/wilderness/normal) +"aH" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/wilderness/normal) +"aI" = (/turf/simulated/floor/outdoors/dirt,/area/surface/outside/wilderness/normal) +"aJ" = (/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/wilderness/deep) +"aK" = (/turf/simulated/floor/water,/area/surface/outside/ocean) +"aL" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/ocean) +"aM" = (/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/wilderness/normal) +"aN" = (/turf/simulated/floor/water/deep,/area/surface/outside/ocean) +"aO" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/wilderness/normal) +"aP" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/wilderness/normal) +"aQ" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/ocean) +"aR" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/ocean) +"aS" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/shuttle/shuttle2/mining) +"aT" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/shuttle/shuttle2/mining) +"aU" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/shuttle/shuttle1/mining) +"aV" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/shuttle/shuttle1/mining) +"aW" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/wilderness) +"aX" = (/turf/simulated/wall/log_sif,/area/surface/outside/path/wilderness) +"aY" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"aZ" = (/obj/structure/simple_door/sifwood,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"ba" = (/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bb" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/wilderness) +"bc" = (/obj/structure/table/steel,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bd" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"be" = (/obj/structure/closet,/obj/random/maintenance/clean,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bf" = (/obj/structure/closet/crate,/obj/random/powercell,/obj/item/weapon/tool/screwdriver,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bg" = (/obj/random/junk,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_dock_1"; name = "shuttle bay controller"; pixel_x = 0; pixel_y = -26; tag_door = "mining_dock_1_door"},/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bh" = (/obj/machinery/space_heater,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bi" = (/obj/item/weapon/banner/virgov,/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bj" = (/obj/machinery/space_heater,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_dock_2"; name = "shuttle bay controller"; pixel_x = 0; pixel_y = -26; tag_door = "mining_dock_2_door"},/turf/simulated/floor/plating/external,/area/surface/outside/path/wilderness) +"bk" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/wilderness/mountains) +"bl" = (/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bm" = (/obj/item/weapon/banner/nt,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bn" = (/obj/item/weapon/banner/virgov,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bo" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/surface/outpost/wall/checkpoint) +"bp" = (/obj/machinery/door/airlock/voidcraft{name = "Wilderness Containment"},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bq" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall/checkpoint) +"br" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bs" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bt" = (/obj/effect/step_trigger/teleporter/wild/from_wild,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint) +"bu" = (/obj/effect/step_trigger/teleporter/wild/from_wild,/turf/simulated/floor/water,/area/surface/outside/ocean) (1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aK -aK -aK -aK -aK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -am -am -an -an -am -am -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(3,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -am -am -an -an -am -am -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(4,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -xY -xY -xY -xY -ah -xY -am -am -an -an -am -am -aB -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(5,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -aP -aX -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -xY -am -am -an -an -am -am -am -aB -aB -aB -aB -aB -aB -ao -ah -ah -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ao -ao -ao -ay -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(6,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -am -am -an -an -am -am -am -ao -aB -aB -aB -aB -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(7,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(8,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(9,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aa -"} -(10,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -aa -"} -(11,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -aa -"} -(12,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -ah -aa -"} -(13,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -aa -"} -(14,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -ah -aa -"} -(15,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(16,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(17,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(18,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(19,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(20,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(21,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(22,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(23,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(24,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(25,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(26,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(27,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(28,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(29,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(30,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(31,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(32,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -ah -aa -"} -(33,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(34,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(35,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(36,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(37,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(38,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(39,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(40,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(41,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(42,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(43,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(44,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(45,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(46,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(47,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(48,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(49,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(50,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(51,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(52,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(53,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(54,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(55,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(56,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(57,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(58,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(59,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(60,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aA -aA -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(61,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aA -aQ -aM -aM -aT -an -aM -aM -aC -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(62,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aP -aA -az -az -az -az -aV -az -az -az -aA -aA -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(63,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -az -az -aS -az -az -az -az -az -ao -aA -aA -aA -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(64,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aC -aN -am -aU -aU -aN -aN -np -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(65,1,1) = {" -aa -ai -ai -ai -ai -ai -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aI -aI -aJ -aJ -aJ -aI -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ai -ai -ai -ai -aa -"} -(66,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(67,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(68,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(69,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(70,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(71,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -ah -aa -"} -(72,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(73,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(74,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(75,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(76,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(77,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(78,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(79,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(80,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(81,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(82,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(83,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(84,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(85,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(86,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(87,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(88,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(89,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(90,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(91,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(92,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(93,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(94,1,1) = {" -ad -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(95,1,1) = {" -ad -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(96,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(97,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(98,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -xY -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(99,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -aa -"} -(100,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ah -ah -ah -aa -"} -(101,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ah -ah -ah -aa -"} -(102,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ah -ah -ah -aa -"} -(103,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ah -ah -ah -aa -"} -(104,1,1) = {" -aa -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ap -ap -ao -ah -ah -ah -aa -"} -(105,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ao -ao -ao -ah -ah -ah -aa -"} -(106,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ah -ah -ah -ah -aa -"} -(107,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ah -ah -ah -ah -aa -"} -(108,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ao -ao -ao -ap -ap -ao -ah -ah -ah -ah -aa -"} -(109,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ap -ap -ao -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(110,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(111,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(112,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(113,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(114,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ap -ao -ao -ao -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(115,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(116,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(117,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(118,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(119,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ap -ap -ao -ao -ap -ao -ao -ap -ao -ao -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(120,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ap -ao -ao -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(121,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(122,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(123,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -RZ -ah -ah -ah -ah -aa -"} -(124,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ao -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -ap -ap -ap -ax -ax -LO -ne -XT -XT -XT -"} -(125,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -ap -ax -nx -nx -ZR -nx -Dc -oK -"} -(126,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ap -ap -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ax -ax -nx -nx -XT -nx -nx -oK -"} -(127,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ap -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -nx -nx -ZR -nx -lh -oK -"} -(128,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ax -je -ne -XT -XT -XT -"} -(129,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -RZ -ah -ah -ah -ah -aa -"} -(130,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ah -ah -ah -ah -ah -aa -"} -(131,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ah -ah -ah -ah -ah -aa -"} -(132,1,1) = {" -aa -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ah -ah -ah -ah -ah -aa -"} -(133,1,1) = {" -aa -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ah -ah -ah -ah -aa -"} -(134,1,1) = {" -aa -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(135,1,1) = {" -ad -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(136,1,1) = {" -ad -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(137,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -an -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ay -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(138,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ay -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(139,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ay -ao -ao -ap -ao -ao -ap -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(140,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ay -ao -ao -ao -ao -ao -ap -ao -ao -ap -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(141,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ay -ao -ap -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(142,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ao -ay -ap -ap -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(143,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aY -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ao -ay -ap -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(144,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ap -ao -ao -ao -ay -ap -ao -ap -ap -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(145,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ay -ao -ao -ap -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(146,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ay -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(147,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ao -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(148,1,1) = {" -aa -ah -ah -ac -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ao -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(149,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ao -ao -ao -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(150,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ap -ay -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(151,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ao -ap -ay -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -oM -oM -Yf -Yf -Yf -oM -oM -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(152,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -Yf -oM -Yf -Yf -oM -Yf -oM -Yf -Yf -oM -Yf -Yf -oM -ap -ax -ax -ax -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(153,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -ap -oM -oM -oM -oM -Yf -Yf -oM -oM -oM -Yf -oM -oM -Yf -ax -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(154,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ao -ao -ao -ap -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -oM -oM -Yf -Yf -Yf -oM -oM -Yf -Yf -oM -Yf -Yf -ax -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(155,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -ap -oM -oM -Yf -Yf -Yf -oM -oM -oM -Yf -oM -Yf -Yf -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(156,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ao -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -oM -oM -Yf -Yf -Yf -oM -Yf -oM -Yf -Yf -Yf -Yf -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(157,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ay -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -oM -Yf -Yf -oM -Yf -oM -oM -Yf -Yf -oM -Yf -Yf -Yf -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(158,1,1) = {" -ad -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ay -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -oM -Yf -oM -oM -oM -Yf -oM -Yf -Yf -Yf -oM -oM -Yf -ap -ap -ap -ap -ax -ax -Qf -Qf -Qf -Qf -Qf -Qf -ap -ah -ah -ah -aa -"} -(159,1,1) = {" -ad -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -oM -oM -oM -Yf -Yf -oM -oM -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -tL -sd -Hm -Hm -mo -Qf -ah -ah -ah -ah -aa -"} -(160,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ax -ax -Qf -sd -UO -sd -vW -Qf -ah -ah -ah -ah -aa -"} -(161,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -an -am -am -am -ao -ao -ao -ao -ap -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -ap -ap -ap -ap -ap -ap -ax -KN -sd -sd -sd -rl -Qf -ah -ah -ah -ah -aa -"} -(162,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ao -ao -ap -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -Qf -sd -sd -sd -sd -Qf -ah -ah -ah -ah -aa -"} -(163,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ap -ap -ao -ao -ao -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Jl -Li -Li -Li -Jl -Jl -Jl -ap -ap -ax -ax -tL -sd -AJ -EG -dA -Qf -ah -ah -ah -ah -aa -"} -(164,1,1) = {" -aa -ah -ah -ac -ac -aP -aP -aP -aP -aP -xY -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -an -am -am -am -ao -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Jl -Jl -Jl -Li -Li -Jl -Jl -Li -Li -Jl -Jl -Li -Li -ap -ap -ax -ax -Qf -Qf -Qf -Qf -Qf -Qf -ah -ah -ah -ah -aa -"} -(165,1,1) = {" -aa -ah -ah -ac -ac -aP -aP -aP -aP -xY -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ao -ao -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Li -Jl -Jl -Li -Li -Li -Li -Jl -Jl -Li -Jl -Li -Li -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(166,1,1) = {" -ad -ah -ah -ac -ac -aP -aP -aP -xY -xY -xY -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -an -am -am -am -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Li -Li -Jl -Jl -Li -Li -Li -Jl -Jl -Jl -Jl -Li -ap -ax -ap -ap -ax -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(167,1,1) = {" -ad -ah -ah -ac -ac -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -am -ao -ap -ao -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Li -Li -Li -Jl -Jl -Li -Li -Li -Jl -Jl -Li -Li -ap -ap -ax -ax -ax -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(168,1,1) = {" -aa -ah -ah -ac -ac -aP -aP -aP -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -am -am -am -am -am -am -am -am -ap -ap -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -Li -Li -Jl -Li -Jl -Li -Li -Li -Jl -Jl -Li -Li -ap -ap -ax -ax -ax -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(169,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -am -am -am -am -am -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Li -Jl -Jl -Li -Jl -Jl -Li -Jl -Jl -Jl -Jl -Li -Li -ap -ap -ax -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(170,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -xY -xY -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -am -am -am -am -an -am -am -am -ao -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Jl -Li -Li -Li -Jl -Jl -Jl -Li -Li -Jl -Jl -Li -Li -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(171,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -am -am -am -am -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Jl -Li -Li -Li -Jl -Li -Li -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(172,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(173,1,1) = {" -ad -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(174,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -aB -ap -ap -aB -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(175,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -aB -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(176,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ap -ap -aB -ap -aB -ap -ap -ax -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(177,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -aB -ap -aB -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(178,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(179,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(180,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -ap -ap -aB -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(181,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(182,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(183,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(184,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(185,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(186,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(187,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(188,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(189,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(190,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(191,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -an -an -an -am -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(192,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aL -aL -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(193,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(194,1,1) = {" -aa -ai -ai -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aX -aW -aW -aX -aX -aX -aX -aX -aX -aX -aX -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aI -aI -aJ -aJ -aJ -aJ -aI -aI -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -au -fa -au -au -au -au -ai -ai -ai -ai -aa -"} -(195,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aY -aL -aL -aY -aL -aL -aL -aL -aL -aL -aL -aC -aM -aR -aR -aR -aR -aM -aM -np -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(196,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aA -aL -aL -aA -aA -az -az -az -az -az -az -az -az -az -aA -aA -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(197,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aY -aY -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aA -aL -aL -aA -aA -az -az -az -az -az -az -az -az -az -aA -aA -aA -aA -aA -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(198,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aY -aY -aY -aP -aP -aY -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aC -aN -aN -aO -aO -aO -aN -aN -aC -ap -ap -aA -aA -aA -ap -ap -aH -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(199,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -an -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aH -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(200,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -an -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(201,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aH -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(202,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aL -aP -aP -aL -aP -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(203,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(204,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(205,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(206,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(207,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(208,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(209,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(210,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aP -aL -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(211,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aP -aP -aP -aL -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(212,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(213,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(214,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -ap -ap -ap -ap -ap -aB -aB -aB -aB -ap -ap -ap -ap -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(215,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -ap -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(216,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -aB -aB -aB -Oe -Oe -aB -aB -aB -aB -aB -aB -ap -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -aa -"} -(217,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -aB -aB -aB -ap -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(218,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -aB -aB -aB -ap -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(219,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -aB -aB -aB -ax -ax -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(220,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -aB -aB -ax -ap -ap -ap -ap -ap -ap -ap -ah -ah -ah -ah -aa -"} -(221,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -aB -ax -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(222,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -Oe -Oe -Oe -Oe -Oe -aB -aB -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(223,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -Oe -Oe -Oe -Oe -Oe -Oe -ax -ap -ap -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(224,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -Oe -Oe -Oe -Oe -ax -Oe -Oe -ap -ap -ap -ah -ah -ah -ah -ah -aa -"} -(225,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -Oe -ax -ax -Oe -Oe -Oe -Oe -ap -ah -ah -ah -ah -ah -aa -"} -(226,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -ap -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -ax -ax -Oe -Oe -Oe -Oe -Oe -ah -ah -ah -ah -ah -aa -"} -(227,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -ap -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -az -az -UB -Oe -Oe -Oe -Oe -ah -ah -ah -ah -ah -aa -"} -(228,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -ap -ap -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -az -az -UB -UB -UB -UB -Oe -ah -ah -ah -ah -ah -aa -"} -(229,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -ap -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -az -az -UB -UB -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(230,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -ap -ap -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(231,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -au -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(232,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -an -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -Us -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(233,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -an -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -Us -aB -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -aa -"} -(234,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -am -am -am -an -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -Us -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -aa -"} -(235,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aL -aP -am -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -Oe -RA -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -UB -ah -ah -ah -aa -"} -(236,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -am -am -am -am -an -an -am -am -am -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -Oe -Oe -RA -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(237,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -am -am -am -am -an -an -am -am -am -aB -aB -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -Oe -Oe -RA -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(238,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -am -am -am -an -am -am -am -aB -aB -aB -ap -ap -ap -ap -ap -ap -ap -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -RA -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -ah -ah -ah -ah -aa -"} -(239,1,1) = {" -aa -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aL -aP -aP -aP -aP -aL -aP -aP -aP -aL -am -am -am -an -am -am -am -Oe -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -JC -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -ah -ah -ah -ah -aa -"} -(240,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -am -am -an -an -am -am -Oe -Oe -Oe -aB -aB -aB -aB -aB -aB -aB -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -JC -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -ah -ah -ah -aa -"} -(241,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -am -am -an -am -am -am -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -JC -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -ah -ah -aa -"} -(242,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aL -aL -aP -aP -aL -aL -aP -aP -xY -xY -am -am -am -am -am -am -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -JC -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -aa -"} -(243,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -xY -vK -am -am -am -an -an -am -am -Oe -Oe -Oe -Oe -Oe -Oe -UB -UB -UB -UB -UB -UB -UB -UB -UB -JC -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -aa -"} -(244,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -vK -vK -am -am -am -an -an -am -am -am -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -JC -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -Pj -"} -(245,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -vK -vK -vK -am -am -an -an -an -am -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -JC -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -Pj -"} -(246,1,1) = {" -aa -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aL -aP -aP -aP -aP -aP -aP -aP -aP -aP -xY -xY -xY -vK -vK -vK -am -am -am -an -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -JC -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -Pj -"} -(247,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aL -aP -aP -aL -aP -aP -aP -aL -aL -xY -xY -xY -xY -xY -vK -vK -vK -am -am -UB -UB -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -aa -"} -(248,1,1) = {" -aa -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -xY -xY -xY -xY -xY -vK -vK -am -UB -UB -UB -hS -hS -UB -UB -UB -UB -UB -UB -UB -UB -UB -UB -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -ah -aa -"} -(249,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -UB -UB -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -ah -ah -aa -"} -(250,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aX -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -ah -ah -aa -"} -(251,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -ah -ah -aa -"} -(252,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aP -aP -aP -aP -aP -aP -aP -aP -aP -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -ah -ah -aa -"} -(253,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -aL -aL -aL -aL -aL -aL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -ah -ah -ah -aa -"} -(254,1,1) = {" -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ai -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -UB -UB -UB -UB -UB -UB -UB -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -nb -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -hS -UB -UB -UB -UB -UB -UB -ah -ah -aa -"} -(255,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -uG -aa -aa -aa -"} +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaababaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeaeaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacaeafaeaeaeafaeaeacacacacacacacacacacacacacacacacafaeaeaeafaeaeacacacacaeacacacacacacacacacaeaeaeaeaeaeaeaeaeacacacacaeaeafaeaeaeafaeaeacacacacacacacacacacacaeaeafafafafafaeaeacacacacacaeaeaeaeaeaeaeaeaeacacacacaeaeaeaeaeagaeacacacacacacacaeaeaeaeacacacacacacaeaeaeaeaeaeaeaeacacacacacacacacacacaeaeaeaeaeaeaeaeaeacacacacacacacacacacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacacacadacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacaa +aaacacacacacacacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacacaa +aaacacacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacaa +aaacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacaa +aaacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahaeaeahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacaa +aaacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahaeaeaeaeahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacacaa +aaacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahaeaeaeaeaeaeaeahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahaeaeahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaiaiaeaeaeaeaeaeaeaeahahahahahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahaeaeaeaeaeaeaeaeaeaeaeahahahaeahahahahahaiaiaeaiaiaiaiaiaeaeaeaeaeaeaeaeaeaeaeaeaeaiaiaiaiaeaeaeaeaeahahahahahahahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahaeaeaeaeaeaeaeaeahahahahahahahahahahahahahahahaiaiaiaiaeaeaeaeaeaeaeaeaeaeaeaiaiaiaiaiaiaeaeaeahahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahahaeaeaeahahahahahaeahahahaeaeaeaeahahahahaeaeaeaiaiaeaeaeaeaeaeaeaeaeaeaeaiaiaiaiaiaiahahahahaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahahahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaiaiahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahaeaeaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaadadadagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagadadadadaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeajajaeaeacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeajacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajaeajaeaeaeajajajacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeaeaeaeajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeajajaeaeajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeajaeaeaeajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajaeaeajajajajajajajajajajajajajacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeajajajajajajajajajajajajajajacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeajaeaeaeajajajajajajajajajajajajajajajajajajacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajaeaeajajajajajajajajajajajajajajajajajajajacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajaeaeaeaeajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaiaiaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeajaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaiaiaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeajajajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeaeaeaeaeaeagaeaeaiaiaeaeaeaeaeaeaeajaeaeaeaeajaeaeaeaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeaeaeajaeaeaeaeaeaeaeaeagaeaeaiaiaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeaeajajajaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaiaiaeaeaeajajaeaeaeaeaeaeaeaeaeaeaeajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeajaeaeaeaeaeaeaeajaeaeajajaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeaeaeaeaeagaeaeaeaiaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeajaeaeaeajaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeajajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeajaeaeaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajagaeaeaeaeaeaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajakaeaeaeaeaeaeajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeaeaeaeakaeaeaeaeajajajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeaeagaeaeaeaeaeajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeaeagaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeagaeaeajajaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeagaeajaeaeaeajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagajajaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajagaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajagajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +aaacacahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +aaacacacahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +aaacacahahahaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +alamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +alamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacaa +alanananananananamamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +alanananananananananananananananamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaiaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +alamamamamamamamananananananananananananananananamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +alamamamamamamamamamamamamamamamamananananananananananananamamamamamamamaeaeamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaoaoaoaeaeagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacapamamamamamamamamamamamamamamamamamamananananananananananananamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaoaqararasagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacapatatatatatatatatatamamamamamamamamamamamamamamamamamamanananananananamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeauararavawamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajakaiajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacapapatatatatatatatatatatatatatatatamamamamamamamamamamamamamananananananananananananananananamamamamamamamamamamauaraxamawamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacaa +aaacacacapapatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamananananananananananananananananananananayararazaAananananananananananamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacapapatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamamamamanananananananananaBarazaAanananananananananananamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajakaiajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacapapatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamamamamamamauararavaAanamamamamamamamanananananananamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajaeajajajajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacapatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamauararavawamamamamamamamamamamananananananananananananamamamamamamamamamaeaeamamamaeaeaeaeamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamatasararaCaDamamamamamamamamamamamamananananananananananananananananamamamamamamamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajakajaoaoajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataoatataDatatatatatatatamamamamamamamamananananananananananananananananamamanananamamamamanananamamamamamamamamamamamamaeaeaeaeaeamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajaeajajajajajajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataoaoataDatatatatatatatatatatamamamamamamamamamamamamamamamamamanananamamamamanananamamamanananananananananamamamamamamamamamamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajakajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataoataDatatatatatatatatatatatatamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamanananananananamamamamamanananananananananamamamamamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajakajaoaoajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataoataDatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamatatamamamamamamamamamamamamamamamamamamamamamamanananananananananananananananananamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajakajaoaoajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamatatatatatatamamamamamamamamamamanananananananananananananananamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajamamawasararasajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamanananamanananamamananamamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeaeaeaeaeaeajajajajajajajajajajajajajajajajamamamamamawauararavamamamamajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamamamamamamananananamamamamamamamamamamamamaeaeaeaeaeaeaeaeaeajajaeajajajajajajajajajajajajamamamamamamanananaAaEararavananamamamamamajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamananananananamamamamamamamamamaeaeaeaeaeaeaeajajaeajajajajajajajajajajamamamamamamamamananananaAaEararaFananananamamamamamamajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaeajajajajajajajajajacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamanananananamamamamamamamamamaeaeaeaeaeaeaeajajajajajajajamamamamamamamamamananananananaAaEararaFanananananananamamamamamamamamamamajajajajajajajajajajajajajajajajajajajajajajajaeaeaeajajajajajaeaeaeacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamanananananamamamamamamamamamamamamamajajajamamamamamamamamamamamamananananamamanaAaEararaFananananananananananamamamamamamamamamajajajajajajajajajajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamananananamamamamamamamamamamamamamamamamamamamamamamamananananananamamamamawauararavamamamamamamanananananamananananamamamamamajajajajajajajajajajajajajajajajajajaeajaeaeaeaeaeaeajajaeacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamanananananamamamamamamamamamamamamamamananananananananamamamamamamamawauararavamamamamamamamamamamanananananananananamamamamajajajajajajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamanananananamamamamananananananananananananamamamamamamamamamaGaHaCararasaGaGaGaGaGaGamamamamamamamamananananananamamamamamamamamamajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamanananamamamanananananananamamamamamamamamamamamamaGaGaGaGaGaHaGaoaoaGaGaGaGaGaGaGaGaGamamamamamamamamamamanananananananamamamamamamajajajajajaeajajaeaeaeajajaeaeaeaeajaeacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamamamamamamamamamamaGaGaGaGaGaGaGaGaGaHaGaoaoaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamamamananananananananamamamamamamajajajajaeaeaeaeaeajaeaeaeaeaeacacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamamamamamamamamamamaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaoaoaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamanananananananamamamamamamaeaeaeaeajaeaeaeaeaeaeaeaeacacacacacacacaa +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatamamamamamamamaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaoaoaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamamanananananananamamamamaeaeaeaeaeaeaeaeaeaeaeacacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaoaoaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamamamanananananamamamamaeaeaeaeajaeaeaeaeajacacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamamananananamamamaeaeaeaeajajaeaeaeajacacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamananananamamamajaeaeaeaeaeaeaeahacacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaIaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamanananamamamajaeaeaeahaeahahahacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamananamamamaeahahahahahahahacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamananamamamahaJaJaJahahahacacacacacacaa +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatataGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaIaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamananamamamaJaJaJahahacacacacaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamananamamamaJaJaJahacacacaKaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGamamamamamamamamamaJaJaJacaKaKaKaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapamamamamanamamamaJaJaKaKaKaKaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaIaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMamamanananamamamaKaKaKaKaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMamamananamamaKaKaKaKaKaKaKaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaMaMaMamamananaKaKaKaKaKaKaKaKaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMamamaKaKaKaNaNaKaKaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMamaKaKaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaKaKaKaKaKaKaKaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatataGaGatataGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatataGaGaGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatataGatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatataGaGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaL +aaadadadaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaHaHaHaDaDaHaHaHaHaHaDaDaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaOaOaOaPaPaPaPaQaQaQaQaQaQaQaQaRaRaRaRaRaRaRaRaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaL +aaacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaMaMaMaMaKaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaKaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatataGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatataGaGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatataGaGatatatataGaGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGaGataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaGaGapapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatataGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaGapaGaGaGaGapaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGataGaGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaSaTaGaGaGaGaGaSaSaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatataGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaSaSaSaGaGaGaSaTaSaGaGaGaGaGaUaUaUaUaUaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaGaGaTaTaSaSaSaSaTaSaSaGaGapaGaVaVaUaUaUaVaVaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaGaGaTaTaSaSaSaSaTaSaTaGaGaGaGaVaVaVaUaVaVaUaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatataGatatataGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaSaSaTaTaTaSaSaTaGaGaGaGaVaUaVaVaUaUaUaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatataGaGaGatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaSaTaTaTaTaTaTaTaSaGaGaGaGaUaUaUaVaVaVaUaGaGapapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaSaSaTaTaTaTaSaSaSapaGaGaGaUaUaUaUaUaVaVaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatatatatatatatatataGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaSaSaSaSaSaTaGaGaGaGaGaVaUaUaUaUaUaVaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaSaSaSaTaTaTaGaGaGaGaVaVaVaVaUaUaVaVaVaGaGapapaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatataGaGatatatataGaGaGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapaGaGapaGaGaSaSaTaSaSaTaTaGapapaGaUaUaVaVaVaVaVaUaUaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaTaTaTaTaSaSaGaGapaGaUaUaUaVaVaVaVaUaUaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaSaSaSaTaTaSaGaGaGaGaUaVaVaVaUaUaVaVaUaGaGapaGaGapaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaSaSaTaTaTaTaTaGaGaGaGaVaVaUaUaUaUaUaVaVaGaGaGapaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatataGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaTaTaTaTaTaGaGaGaGaGaVaUaUaGaGaGaUaUaUaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGataGaGataGaGaGataGaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaGaGaGaGaGaGaGaGaVaUaGaWaGaGaGaUaUaGaGaGaGapapaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatatataGataGaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaGaGaGaGaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaGaGaGaGaGaGapapapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGapapapapaMaMaMaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGaGaGaGaGaGaGaGaGaGapaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaWaWaWaGaWaGaWaWaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaWaWaWaWapaMaMaWaWarararaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaGaWaWaWaWaWaWarararaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGapapaGaGaGaGaGaWaWaWaWaWaWaWaWaWaGaGaGaWaWaWaWaGaGaGaGaGaGaGaGaGaGaXaYaXaZaXaYaXaGaWaWaWaGaWaWaWaWaWaWaWaGaWaWaWaWaWaWaWaGaGaWaWaWaWaGaGaGaHaWaWaWaWaWaWaWaWaWaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaXbababababaaXaGaGaGaGaGaGaGaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWbbaWaGaGaWaWaWaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaMaMaMaMaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaL +aaacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatataGaGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaXbcbdbababeaXaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaMaMaMaKaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaNaNaNaKaKaKaKaKaKaL +aaacacacacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaXbcbabababfaXaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaMaMaMaKaKaKaKaKaKaKaKaKaKaKaKaKaNaNaNaNaNaNaNaKaKaKaKaKaKaKaL +aaacacacacacacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGatataGatataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaWaWaWaWaWaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaXbgbhbibabjaXaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaMaMaMaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaL +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataDatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataGaGatataGataGaGaGaGaGaGaGacacacacacacacbkaWblblblaWbkacacacaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaXaXaXaXaXaXaXaGaGaGacacacacacacacacacacaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGacacacacacacacacaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaL +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacatatatatatatatatatatatatatatatacacacacadacacacacacacatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatacacacacacacacacacacacacacacacacacacbmblblblbnacacacacacacacacacacacacacacacaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaGaGaGadacacacacacacacacaGaGaGaGaGaGaGaGaGaGaGaGaGaGacacacacacacacacacacacacacacacacaKaKaKacacacacaKaKaKaKaKaKaKaKaKaKaKaKaKaKaKaL +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacatatatatatatatatatatatatatatatatatacacacacacacacacacacacacacacacacacacacacacacacacbobpbqbpboacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaKaKaKaKaKaKaKaKaKaKaKacacaKaL +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbqblblblbqacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaKaKaKaKaKaKaKacacacacacacaa +aaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbqbrblbsbqacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaKaKaKacacacacacacacacaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbtbtbtbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabububuaaaaaaaaaaaaaaaaaa +"} + diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm index ffa2ca4d1a..92766ce1ab 100644 --- a/maps/southern_cross/southern_cross_areas.dm +++ b/maps/southern_cross/southern_cross_areas.dm @@ -57,6 +57,9 @@ name = "Southern Shoreline" icon_state = "southeast" +/area/surface/outside + ambience = AMBIENCE_SIF + // The area near the outpost, so POIs don't show up right next to the outpost. /area/surface/outside/plains/outpost name = "Outpost Perimeter" @@ -122,7 +125,6 @@ flags = RAD_SHIELDED /area/surface/cave - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/ambience/serspaceamb1.ogg') // The bottom half that connects to the outpost and is safer. /area/surface/cave/explored/normal @@ -147,6 +149,7 @@ //Surface Outposts /area/surface/outpost + ambience = AMBIENCE_GENERIC // Main mining outpost /area/surface/outpost/mining_main @@ -281,6 +284,7 @@ /area/surface/outpost/main/gen_room name = "\improper Main Outpost SMES" icon_state = "substation" + ambience = AMBIENCE_ENGINEERING /area/surface/outpost/main/gen_room/smes name = "\improper Main Outpost Dorm SMES" @@ -345,9 +349,11 @@ name = "The Wall" icon_state = "red" requires_power = FALSE + ambience = AMBIENCE_HIGHSEC /area/surface/outpost/wall/checkpoint name = "Checkpoint" + ambience = AMBIENCE_HIGHSEC //Mining Station @@ -364,7 +370,6 @@ /area/outpost/mining_station/gen_station name = "Mining Station Generator Room" icon_state = "substation" - ambience = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg') /area/outpost/mining_station/crew_area name = "Mining Station Crew Area" @@ -658,7 +663,7 @@ /area/tcomm/ icon_state = "tcomsatcham" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + holomap_color = HOLOMAP_AREACOLOR_COMMAND /area/tcomm/entrance name = "\improper Telecomms Teleporter" @@ -667,7 +672,6 @@ /area/tcomm/tcomfoyer name = "\improper Telecomms Foyer" icon_state = "tcomsatfoyer" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') /area/tcomm/chamber name = "\improper Telecomms Central Compartment" @@ -676,7 +680,6 @@ /area/tcomm/tcomstorage name = "\improper Telecomms Storage" icon_state = "tcomsatstore" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') /area/tcomm/computer name = "\improper Telecomms Control Room" @@ -739,22 +742,27 @@ /area/crew_quarters/heads/sc/hop name = "\improper Command - HoP's Office" icon_state = "head_quarters" + holomap_color = HOLOMAP_AREACOLOR_COMMAND /area/crew_quarters/heads/sc/hor name = "\improper Research - RD's Office" icon_state = "head_quarters" + holomap_color = HOLOMAP_AREACOLOR_SCIENCE /area/crew_quarters/heads/sc/chief name = "\improper Engineering - CE's Office" icon_state = "head_quarters" + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING /area/crew_quarters/heads/sc/hos name = "\improper Security - HoS' Office" icon_state = "head_quarters" + holomap_color = HOLOMAP_AREACOLOR_SECURITY /area/crew_quarters/heads/sc/cmo name = "\improper Medbay - CMO's Office" icon_state = "head_quarters" + holomap_color = HOLOMAP_AREACOLOR_MEDICAL /area/engineering/engineer_eva name = "\improper Engineering EVA" @@ -896,6 +904,10 @@ //Deck Three (Z-3) +/area/ai + holomap_color = HOLOMAP_AREACOLOR_COMMAND + ambience = AMBIENCE_AI + /area/ai/ai_cyborg_station name = "\improper Cyborg Station" icon_state = "ai_cyborg" @@ -904,12 +916,10 @@ /area/ai/ai_upload name = "\improper AI Upload Chamber" icon_state = "ai_upload" - ambience = list('sound/ambience/ambimalf.ogg') /area/ai/ai_upload_foyer name = "AI Upload Access" icon_state = "ai_foyer" - ambience = list('sound/ambience/ambimalf.ogg') sound_env = SMALL_ENCLOSED /area/ai/ai_server_room @@ -921,6 +931,7 @@ name = "\improper Command - Station Director's Office" icon_state = "captain" sound_env = MEDIUM_SOFTFLOOR + holomap_color = HOLOMAP_AREACOLOR_COMMAND area/crew_quarters/heads/sc/hop/quarters name = "\improper Command - HoP's Quarters" @@ -980,6 +991,7 @@ area/crew_quarters/heads/sc/hop/quarters /area/maintenance/solars icon_state = "SolarcontrolA" sound_env = SMALL_ENCLOSED + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING /area/maintenance/solars/aftportsolar name = "Solar Maintenance - Aft Port" @@ -1000,6 +1012,7 @@ area/crew_quarters/heads/sc/hop/quarters /area/solar requires_power = 1 always_unpowered = 1 + ambience = AMBIENCE_SPACE /area/solar/aftportsolar name = "\improper Aft Port Solar Array" @@ -1020,6 +1033,7 @@ area/crew_quarters/heads/sc/hop/quarters /area/thirddeck/roof name = "\improper Third Deck Plating" dynamic_lighting = 0 + ambience = AMBIENCE_SPACE // Shuttles @@ -1030,6 +1044,7 @@ area/crew_quarters/heads/sc/hop/quarters icon_state = "centcom" requires_power = 0 flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC /area/shuttle/response_ship/start name = "\improper Response Team Base" @@ -1211,6 +1226,7 @@ area/crew_quarters/heads/sc/hop/quarters requires_power = 0 dynamic_lighting = 0 flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC /area/syndicate_station name = "\improper Mercenary Base" @@ -1218,6 +1234,7 @@ area/crew_quarters/heads/sc/hop/quarters requires_power = 0 dynamic_lighting = 0 flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC /area/syndicate_station/start name = "\improper Mercenary Ship" @@ -1278,6 +1295,7 @@ area/crew_quarters/heads/sc/hop/quarters requires_power = 0 dynamic_lighting = 0 flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC /area/skipjack_station/transit name = "transit" @@ -1331,6 +1349,7 @@ area/crew_quarters/heads/sc/hop/quarters icon_state = "green" requires_power = 0 flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC /area/ninja_dojo/dojo name = "\improper Clan Dojo" @@ -1560,7 +1579,9 @@ area/crew_quarters/heads/sc/hop/quarters /area/wreck/ufoship name = "\improper Wreck" icon_state = "storage" + ambience = AMBIENCE_OTHERWORLDLY /area/wreck/supplyshuttle name = "\improper Wreck" icon_state = "storage" + ambience = AMBIENCE_RUINS diff --git a/maps/southern_cross/southern_cross_defines.dm b/maps/southern_cross/southern_cross_defines.dm index c01ba36eb9..3d46a3d87b 100644 --- a/maps/southern_cross/southern_cross_defines.dm +++ b/maps/southern_cross/southern_cross_defines.dm @@ -19,6 +19,11 @@ lobby_icon = 'icons/misc/title.dmi' lobby_screens = list("mockingjay00") // New lobby screen if possible. + holomap_smoosh = list(list( + Z_LEVEL_STATION_ONE, + Z_LEVEL_STATION_TWO, + Z_LEVEL_STATION_THREE)) + zlevel_datum_type = /datum/map_z_level/southern_cross station_name = "NLS Southern Cross" @@ -105,26 +110,40 @@ // Todo: Forest generation. return 1 +// For making the 6-in-1 holomap, we calculate some offsets +#define SOUTHERN_CROSS_MAP_SIZE 160 // Width and height of compiled in Southern Cross z levels. +#define SOUTHERN_CROSS_HOLOMAP_CENTER_GUTTER 40 // 40px central gutter between columns +#define SOUTHERN_CROSS_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*SOUTHERN_CROSS_MAP_SIZE) - SOUTHERN_CROSS_HOLOMAP_CENTER_GUTTER) / 2) // 100 +#define SOUTHERN_CROSS_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*SOUTHERN_CROSS_MAP_SIZE)) / 2) // 60 + /datum/map_z_level/southern_cross/station flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES + holomap_legend_x = 220 + holomap_legend_y = 160 /datum/map_z_level/southern_cross/station/station_one z = Z_LEVEL_STATION_ONE name = "Deck 1" base_turf = /turf/space transit_chance = 6 + holomap_offset_x = SOUTHERN_CROSS_HOLOMAP_MARGIN_X - 40 + holomap_offset_y = SOUTHERN_CROSS_HOLOMAP_MARGIN_Y + SOUTHERN_CROSS_MAP_SIZE*0 /datum/map_z_level/southern_cross/station/station_two z = Z_LEVEL_STATION_TWO name = "Deck 2" base_turf = /turf/simulated/open transit_chance = 6 + holomap_offset_x = SOUTHERN_CROSS_HOLOMAP_MARGIN_X - 40 + holomap_offset_y = SOUTHERN_CROSS_HOLOMAP_MARGIN_Y + SOUTHERN_CROSS_MAP_SIZE*1 /datum/map_z_level/southern_cross/station/station_three z = Z_LEVEL_STATION_THREE name = "Deck 3" base_turf = /turf/simulated/open transit_chance = 6 + holomap_offset_x = HOLOMAP_ICON_SIZE - SOUTHERN_CROSS_HOLOMAP_MARGIN_X - SOUTHERN_CROSS_MAP_SIZE - 40 + holomap_offset_y = SOUTHERN_CROSS_HOLOMAP_MARGIN_Y + SOUTHERN_CROSS_MAP_SIZE*1 /datum/map_z_level/southern_cross/empty_space z = Z_LEVEL_EMPTY_SPACE @@ -242,3 +261,16 @@ Z_LEVEL_SURFACE_WILD, Z_LEVEL_TRANSIT ) + +//Suit Storage Units + +/obj/machinery/suit_cycler/exploration + name = "Explorer suit cycler" + model_text = "Exploration" + req_one_access = list(access_pilot,access_explorer) + +/obj/machinery/suit_cycler/pilot + name = "Pilot suit cycler" + model_text = "Pilot" + req_access = null + req_one_access = list(access_pilot,access_explorer) \ No newline at end of file diff --git a/maps/southern_cross/structures/closets/misc.dm b/maps/southern_cross/structures/closets/misc.dm index 6904b2144b..7fc5b62889 100644 --- a/maps/southern_cross/structures/closets/misc.dm +++ b/maps/southern_cross/structures/closets/misc.dm @@ -111,7 +111,7 @@ /obj/item/device/healthanalyzer, /obj/item/device/radio/off, /obj/random/medical, - /obj/item/weapon/crowbar, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/extinguisher/mini, /obj/item/weapon/storage/box/freezer, /obj/item/clothing/accessory/storage/white_vest, diff --git a/maps/southern_cross/turfs/outdoors.dm b/maps/southern_cross/turfs/outdoors.dm index 6c0e2b9035..167b1256f5 100644 --- a/maps/southern_cross/turfs/outdoors.dm +++ b/maps/southern_cross/turfs/outdoors.dm @@ -161,6 +161,5 @@ temperature = TCMB // Step trigger to fall down to planet Sif -/obj/effect/step_trigger/teleporter/planetary_fall/sif/initialize() - planet = planet_sif - . = ..() +/obj/effect/step_trigger/teleporter/planetary_fall/sif/find_planet() + planet = planet_sif \ No newline at end of file diff --git a/maps/submaps/surface_submaps/mountains/backup/IceCave1.dmm b/maps/submaps/surface_submaps/mountains/backup/IceCave1.dmm deleted file mode 100644 index cd02c8cbc0..0000000000 --- a/maps/submaps/surface_submaps/mountains/backup/IceCave1.dmm +++ /dev/null @@ -1,1228 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/wall/dungeon/rock{ - block_tele = 0 - }, -/area/submap/cave/IceCave1) -"b" = ( -/turf/template_noop, -/area/submap/cave/IceCave1) -"c" = ( -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"d" = ( -/obj/machinery/crystal/ice, -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"e" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"f" = ( -/obj/machinery/crystal/ice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -e -e -e -e -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -e -e -e -"} -(3,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -c -c -c -a -a -f -f -a -a -a -a -a -a -a -a -e -e -"} -(4,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -f -e -f -a -a -a -a -f -a -a -e -e -"} -(5,1,1) = {" -a -a -c -c -c -c -c -c -c -c -d -c -c -c -a -a -f -e -f -e -e -a -f -f -a -a -e -e -"} -(6,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -e -e -e -e -e -e -e -a -a -a -e -e -"} -(7,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -d -c -c -d -f -e -e -a -a -f -e -e -e -e -f -e -e -"} -(8,1,1) = {" -a -a -d -c -c -c -c -c -c -c -c -c -c -c -d -f -e -e -a -a -a -f -e -e -e -e -e -e -"} -(9,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -d -c -d -f -e -e -a -a -a -a -a -e -e -e -e -a -"} -(10,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -e -e -e -a -a -a -a -a -a -f -a -a -a -"} -(11,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -e -e -e -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -c -c -c -c -c -c -c -d -c -c -c -c -d -e -e -e -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -c -c -c -d -c -c -c -c -c -c -c -c -d -e -e -e -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -e -e -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -d -c -c -e -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -d -d -a -a -a -a -e -e -a -a -a -a -e -d -a -a -a -a -c -c -d -d -a -a -a -a -"} -(18,1,1) = {" -a -a -d -d -a -a -a -a -e -e -a -a -a -a -e -f -a -a -a -a -c -c -d -d -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -e -e -a -a -f -e -e -f -a -a -a -a -c -c -c -c -a -a -a -a -"} -(20,1,1) = {" -b -a -a -a -a -a -a -a -e -e -a -a -f -e -e -f -a -a -a -a -c -c -c -c -a -a -a -a -"} -(21,1,1) = {" -b -b -b -a -a -a -a -a -e -e -a -a -e -e -f -f -a -a -a -a -d -d -e -e -a -a -a -a -"} -(22,1,1) = {" -b -b -b -b -a -a -a -a -e -e -a -a -e -e -e -f -a -a -a -a -d -d -e -e -a -a -a -a -"} -(23,1,1) = {" -b -b -b -b -a -a -c -c -d -c -d -d -f -e -e -f -a -a -a -a -a -a -e -e -e -f -a -a -"} -(24,1,1) = {" -b -b -b -b -a -a -c -c -c -c -d -d -d -f -e -e -a -a -e -e -e -a -e -e -e -f -a -a -"} -(25,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -a -a -a -e -e -e -f -e -e -e -f -e -e -e -f -a -a -"} -(26,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -f -f -a -e -f -e -f -e -e -e -e -e -e -f -f -a -a -"} -(27,1,1) = {" -b -b -b -b -a -a -d -c -c -c -a -e -e -a -e -e -e -f -e -e -e -a -a -a -a -a -a -a -"} -(28,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -e -e -e -e -e -f -f -e -e -e -a -a -a -a -a -a -a -"} -(29,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -e -e -a -a -a -a -a -e -e -e -a -a -b -b -b -b -b -"} -(30,1,1) = {" -b -b -b -a -a -a -f -e -f -f -a -e -e -e -e -e -f -e -e -a -a -a -a -b -b -b -b -b -"} -(31,1,1) = {" -b -a -a -a -a -a -f -e -f -f -a -e -e -f -e -e -e -e -e -a -a -a -a -b -b -b -b -b -"} -(32,1,1) = {" -a -a -a -a -a -e -e -e -f -f -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(33,1,1) = {" -a -a -a -e -e -e -e -e -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(34,1,1) = {" -a -a -e -e -e -e -e -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(35,1,1) = {" -a -a -e -e -e -e -e -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(36,1,1) = {" -a -a -f -e -e -e -e -e -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(37,1,1) = {" -a -a -f -f -e -e -e -f -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(38,1,1) = {" -a -a -a -e -e -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} diff --git a/maps/submaps/surface_submaps/mountains/backup/IceCave1A.dmm b/maps/submaps/surface_submaps/mountains/backup/IceCave1A.dmm deleted file mode 100644 index eb09cec59a..0000000000 --- a/maps/submaps/surface_submaps/mountains/backup/IceCave1A.dmm +++ /dev/null @@ -1,1240 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/wall/solidrock{ - block_tele = 0 - }, -/area/submap/cave/IceCave1) -"b" = ( -/turf/template_noop, -/area/submap/cave/IceCave1) -"c" = ( -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"d" = ( -/obj/machinery/crystal/ice, -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"e" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"f" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"g" = ( -/obj/machinery/crystal/ice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"h" = ( -/obj/random/firstaid, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"i" = ( -/obj/random/ammo, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -f -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -"} -(3,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -c -c -c -a -a -g -g -a -a -a -a -a -a -a -a -f -f -"} -(4,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -g -f -g -a -a -a -a -g -a -a -f -f -"} -(5,1,1) = {" -a -a -c -c -c -c -c -c -c -c -d -c -c -c -a -a -g -f -g -f -f -a -g -g -a -a -f -f -"} -(6,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -f -f -f -f -f -f -f -a -a -a -f -f -"} -(7,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -d -c -c -d -g -f -f -a -a -g -f -f -f -f -g -f -f -"} -(8,1,1) = {" -a -a -d -c -c -c -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -g -f -f -f -f -f -f -"} -(9,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -d -c -d -g -f -f -a -a -a -a -a -f -f -f -f -a -"} -(10,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -g -a -a -a -"} -(11,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -c -c -c -c -c -c -c -d -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -c -c -c -d -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -f -f -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -d -c -c -f -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -d -a -a -a -a -c -c -d -d -a -a -a -a -"} -(18,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -g -a -a -a -a -c -c -d -d -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(20,1,1) = {" -b -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(21,1,1) = {" -b -b -b -a -a -a -a -a -f -f -a -a -f -f -g -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(22,1,1) = {" -b -b -b -b -a -a -a -a -f -f -a -a -f -f -f -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(23,1,1) = {" -b -b -b -b -a -a -c -c -d -c -d -d -g -f -f -g -a -a -a -a -a -a -g -f -f -g -a -a -"} -(24,1,1) = {" -b -b -b -b -a -a -c -c -c -c -d -d -d -g -f -f -a -a -g -f -f -a -f -f -f -g -a -a -"} -(25,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -a -a -a -f -f -f -g -f -f -f -g -f -f -f -g -a -a -"} -(26,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -g -g -a -f -g -f -g -f -f -f -f -f -f -g -g -a -a -"} -(27,1,1) = {" -b -b -b -b -a -a -d -c -c -c -a -e -f -a -f -f -f -g -f -f -f -a -a -a -a -a -a -a -"} -(28,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -f -f -f -f -f -g -g -f -f -f -a -a -a -a -a -a -a -"} -(29,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -f -f -a -a -a -a -a -f -f -g -a -a -b -b -b -b -b -"} -(30,1,1) = {" -b -b -b -a -a -a -g -f -g -g -a -f -f -f -f -f -g -f -f -a -a -a -a -b -b -b -b -b -"} -(31,1,1) = {" -b -a -a -a -a -a -g -f -g -g -a -f -f -g -f -f -f -f -f -a -a -a -a -b -b -b -b -b -"} -(32,1,1) = {" -a -a -a -a -a -f -f -f -g -g -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(33,1,1) = {" -a -a -a -g -f -f -f -f -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(34,1,1) = {" -a -a -e -f -f -f -f -g -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(35,1,1) = {" -a -a -f -f -f -f -f -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(36,1,1) = {" -a -a -g -f -f -f -f -f -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(37,1,1) = {" -a -a -g -g -f -f -f -g -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(38,1,1) = {" -a -a -a -h -i -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} diff --git a/maps/submaps/surface_submaps/mountains/backup/IceCave1B.dmm b/maps/submaps/surface_submaps/mountains/backup/IceCave1B.dmm deleted file mode 100644 index eb09cec59a..0000000000 --- a/maps/submaps/surface_submaps/mountains/backup/IceCave1B.dmm +++ /dev/null @@ -1,1240 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/wall/solidrock{ - block_tele = 0 - }, -/area/submap/cave/IceCave1) -"b" = ( -/turf/template_noop, -/area/submap/cave/IceCave1) -"c" = ( -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"d" = ( -/obj/machinery/crystal/ice, -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"e" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"f" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"g" = ( -/obj/machinery/crystal/ice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"h" = ( -/obj/random/firstaid, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"i" = ( -/obj/random/ammo, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -f -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -"} -(3,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -c -c -c -a -a -g -g -a -a -a -a -a -a -a -a -f -f -"} -(4,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -g -f -g -a -a -a -a -g -a -a -f -f -"} -(5,1,1) = {" -a -a -c -c -c -c -c -c -c -c -d -c -c -c -a -a -g -f -g -f -f -a -g -g -a -a -f -f -"} -(6,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -f -f -f -f -f -f -f -a -a -a -f -f -"} -(7,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -d -c -c -d -g -f -f -a -a -g -f -f -f -f -g -f -f -"} -(8,1,1) = {" -a -a -d -c -c -c -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -g -f -f -f -f -f -f -"} -(9,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -d -c -d -g -f -f -a -a -a -a -a -f -f -f -f -a -"} -(10,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -g -a -a -a -"} -(11,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -c -c -c -c -c -c -c -d -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -c -c -c -d -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -f -f -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -d -c -c -f -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -d -a -a -a -a -c -c -d -d -a -a -a -a -"} -(18,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -g -a -a -a -a -c -c -d -d -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(20,1,1) = {" -b -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(21,1,1) = {" -b -b -b -a -a -a -a -a -f -f -a -a -f -f -g -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(22,1,1) = {" -b -b -b -b -a -a -a -a -f -f -a -a -f -f -f -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(23,1,1) = {" -b -b -b -b -a -a -c -c -d -c -d -d -g -f -f -g -a -a -a -a -a -a -g -f -f -g -a -a -"} -(24,1,1) = {" -b -b -b -b -a -a -c -c -c -c -d -d -d -g -f -f -a -a -g -f -f -a -f -f -f -g -a -a -"} -(25,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -a -a -a -f -f -f -g -f -f -f -g -f -f -f -g -a -a -"} -(26,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -g -g -a -f -g -f -g -f -f -f -f -f -f -g -g -a -a -"} -(27,1,1) = {" -b -b -b -b -a -a -d -c -c -c -a -e -f -a -f -f -f -g -f -f -f -a -a -a -a -a -a -a -"} -(28,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -f -f -f -f -f -g -g -f -f -f -a -a -a -a -a -a -a -"} -(29,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -f -f -a -a -a -a -a -f -f -g -a -a -b -b -b -b -b -"} -(30,1,1) = {" -b -b -b -a -a -a -g -f -g -g -a -f -f -f -f -f -g -f -f -a -a -a -a -b -b -b -b -b -"} -(31,1,1) = {" -b -a -a -a -a -a -g -f -g -g -a -f -f -g -f -f -f -f -f -a -a -a -a -b -b -b -b -b -"} -(32,1,1) = {" -a -a -a -a -a -f -f -f -g -g -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(33,1,1) = {" -a -a -a -g -f -f -f -f -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(34,1,1) = {" -a -a -e -f -f -f -f -g -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(35,1,1) = {" -a -a -f -f -f -f -f -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(36,1,1) = {" -a -a -g -f -f -f -f -f -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(37,1,1) = {" -a -a -g -g -f -f -f -g -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(38,1,1) = {" -a -a -a -h -i -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} diff --git a/maps/submaps/surface_submaps/mountains/backup/IceCave1C.dmm b/maps/submaps/surface_submaps/mountains/backup/IceCave1C.dmm deleted file mode 100644 index eb09cec59a..0000000000 --- a/maps/submaps/surface_submaps/mountains/backup/IceCave1C.dmm +++ /dev/null @@ -1,1240 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/wall/solidrock{ - block_tele = 0 - }, -/area/submap/cave/IceCave1) -"b" = ( -/turf/template_noop, -/area/submap/cave/IceCave1) -"c" = ( -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"d" = ( -/obj/machinery/crystal/ice, -/turf/simulated/floor/outdoors/ice{ - outdoors = 0 - }, -/area/submap/cave/IceCave1) -"e" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"f" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"g" = ( -/obj/machinery/crystal/ice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"h" = ( -/obj/random/firstaid, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) -"i" = ( -/obj/random/ammo, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/submap/cave/IceCave1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -f -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -f -f -"} -(3,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -c -c -c -a -a -g -g -a -a -a -a -a -a -a -a -f -f -"} -(4,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -g -f -g -a -a -a -a -g -a -a -f -f -"} -(5,1,1) = {" -a -a -c -c -c -c -c -c -c -c -d -c -c -c -a -a -g -f -g -f -f -a -g -g -a -a -f -f -"} -(6,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -a -a -f -f -f -f -f -f -f -a -a -a -f -f -"} -(7,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -d -c -c -d -g -f -f -a -a -g -f -f -f -f -g -f -f -"} -(8,1,1) = {" -a -a -d -c -c -c -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -g -f -f -f -f -f -f -"} -(9,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -d -c -d -g -f -f -a -a -a -a -a -f -f -f -f -a -"} -(10,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -g -a -a -a -"} -(11,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -c -c -c -c -c -c -c -d -c -c -c -c -d -f -f -f -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -c -c -c -d -c -c -c -c -c -c -c -c -d -g -f -f -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -f -f -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -c -c -c -c -c -c -c -c -c -c -c -c -d -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -c -c -c -c -d -c -c -c -c -d -c -c -f -d -c -c -c -c -c -c -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -d -a -a -a -a -c -c -d -d -a -a -a -a -"} -(18,1,1) = {" -a -a -d -d -a -a -a -a -f -f -a -a -a -a -f -g -a -a -a -a -c -c -d -d -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(20,1,1) = {" -b -a -a -a -a -a -a -a -f -g -a -a -g -f -f -g -a -a -a -a -c -c -c -c -a -a -a -a -"} -(21,1,1) = {" -b -b -b -a -a -a -a -a -f -f -a -a -f -f -g -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(22,1,1) = {" -b -b -b -b -a -a -a -a -f -f -a -a -f -f -f -g -a -a -a -a -d -d -f -f -a -a -a -a -"} -(23,1,1) = {" -b -b -b -b -a -a -c -c -d -c -d -d -g -f -f -g -a -a -a -a -a -a -g -f -f -g -a -a -"} -(24,1,1) = {" -b -b -b -b -a -a -c -c -c -c -d -d -d -g -f -f -a -a -g -f -f -a -f -f -f -g -a -a -"} -(25,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -a -a -a -f -f -f -g -f -f -f -g -f -f -f -g -a -a -"} -(26,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -g -g -a -f -g -f -g -f -f -f -f -f -f -g -g -a -a -"} -(27,1,1) = {" -b -b -b -b -a -a -d -c -c -c -a -e -f -a -f -f -f -g -f -f -f -a -a -a -a -a -a -a -"} -(28,1,1) = {" -b -b -b -b -a -a -c -c -c -c -a -f -f -f -f -f -g -g -f -f -f -a -a -a -a -a -a -a -"} -(29,1,1) = {" -b -b -b -b -a -a -c -c -c -d -a -f -f -a -a -a -a -a -f -f -g -a -a -b -b -b -b -b -"} -(30,1,1) = {" -b -b -b -a -a -a -g -f -g -g -a -f -f -f -f -f -g -f -f -a -a -a -a -b -b -b -b -b -"} -(31,1,1) = {" -b -a -a -a -a -a -g -f -g -g -a -f -f -g -f -f -f -f -f -a -a -a -a -b -b -b -b -b -"} -(32,1,1) = {" -a -a -a -a -a -f -f -f -g -g -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(33,1,1) = {" -a -a -a -g -f -f -f -f -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -"} -(34,1,1) = {" -a -a -e -f -f -f -f -g -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(35,1,1) = {" -a -a -f -f -f -f -f -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(36,1,1) = {" -a -a -g -f -f -f -f -f -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(37,1,1) = {" -a -a -g -g -f -f -f -g -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(38,1,1) = {" -a -a -a -h -i -e -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} diff --git a/maps/submaps/surface_submaps/mountains/backup/temple.dmm b/maps/submaps/surface_submaps/mountains/backup/temple.dmm deleted file mode 100644 index 35a0478e3f..0000000000 --- a/maps/submaps/surface_submaps/mountains/backup/temple.dmm +++ /dev/null @@ -1,69 +0,0 @@ -"a" = (/turf/template_noop,/area/submap/AbandonedTemple) -"b" = (/turf/simulated/mineral/floor,/area/submap/AbandonedTemple) -"c" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"d" = (/turf/simulated/wall/sandstone,/area/submap/AbandonedTemple) -"e" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"f" = (/obj/effect/decal/remains/mummy1,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"g" = (/turf/simulated/wall/sandstonediamond,/area/submap/AbandonedTemple) -"h" = (/obj/item/weapon/flame/candle/everburn,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"i" = (/obj/item/weapon/ectoplasm,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"j" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/iron,/obj/item/weapon/coin/phoron,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/uranium,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/iron,/obj/item/weapon/coin/phoron,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/uranium,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/iron,/obj/item/weapon/coin/phoron,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/uranium,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"k" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"l" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"m" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"n" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"o" = (/obj/structure/loot_pile/maint/technical,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"p" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"q" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/red,/obj/item/weapon/flame/lighter/zippo/royal,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"r" = (/obj/effect/rune,/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"s" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"t" = (/obj/machinery/artifact,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"u" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"v" = (/obj/structure/table/woodentable,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"w" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"x" = (/obj/effect/decal/cleanable/blood/xeno,/obj/effect/decal/remains/posi,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"y" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle/candleabra/everburn,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"z" = (/obj/structure/simple_door/gold,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"A" = (/obj/effect/decal/remains/posi,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"B" = (/obj/machinery/crystal{icon_state = "crystal3"; light_color = "#f44256"; light_power = 3},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/crystal1) -"C" = (/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"D" = (/obj/machinery/crystal{icon_state = "crystal3"; light_color = "#f44256"; light_power = 3},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"E" = (/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"F" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/remains/human,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"G" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/alien{desc = ""; icon_state = "alienpaper_words"; info = "(On the screen of the tablet are several lines of characters written in a language you don't seem to recognize. At the end of each line is a set of numbers seperated by a colon. The screen flickers occasionally, as if damaged. Nothing about the tablet seems particularly interesting, but it does seem very, very old.)"},/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"H" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/carpet/turcarpet,/area/submap/AbandonedTemple) -"I" = (/obj/structure/table/bench/wooden,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"J" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"K" = (/obj/structure/table/bench/wooden,/obj/effect/decal/remains/xeno,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"L" = (/obj/structure/simple_door/sandstone,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"M" = (/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/flame/candle/candleabra/everburn,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"N" = (/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/flame/candle/candleabra/everburn,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/AbandonedTemple) -"O" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor,/area/submap/AbandonedTemple) - -(1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaa -aaabbbbbbbbbbbbbbbbbbaaaa -aaccccccccccccccccccccaaa -abcddddddddddddddddddcbaa -abcdefghihgjkgclmgnodcbaa -abcdpqgcrsgccgctcgccdcbaa -abcduvghchgppgwccgcxdcbaa -abcdpygzgggppgggzgncdcbaa -abcdppgccccccccccgccdcbaa -abcdppggggzggzggggcAdcbaa -abcdwcgBCccccccCDgcndcbaa -abcdcEgccwpFppcccgcldcbaa -abcdcczcccpGyHlcczwndcbaa -abcddsgccIIccIIccgnddcbaa -abcmddgccccccccccgddJcbaa -abbcmddccKIccIIcsddccbbaa -abbbccddDccwsccDddccbbbaa -abbbbccddddLLddddJcbbbbaa -abbbbbccmdMccNdsccbbbbbaa -abbbbbbbcdcwccdcbbbbbbbaa -aabbbbbbcddLLddcbbbbbbaaa -aaabbbbbsccccsccbbbbbaaaa -aaaabbbbbbbbObbbbbbbaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaa -"} diff --git a/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm b/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm index d98df50007..d9013d201b 100644 --- a/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm +++ b/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm @@ -9,7 +9,7 @@ "ai" = (/obj/machinery/porta_turret/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aj" = (/obj/structure/loot_pile/surface/alien/engineering,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "ak" = (/obj/structure/prop/alien/computer,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) -"al" = (/obj/item/weapon/wrench/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"al" = (/obj/item/weapon/tool/wrench/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "am" = (/obj/structure/bed/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "an" = (/obj/structure/table/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) "ao" = (/obj/structure/table/alien,/obj/item/clothing/head/helmet/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) @@ -25,8 +25,8 @@ "ay" = (/obj/structure/prop/alien/computer{ icon_state = "console-c"; dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "az" = (/obj/machinery/door/airlock/alien/locked{welded = 1},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aA" = (/obj/structure/bed/alien,/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) -"aB" = (/obj/item/weapon/screwdriver/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) -"aC" = (/obj/item/weapon/wirecutters/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aB" = (/obj/item/weapon/tool/screwdriver/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aC" = (/obj/item/weapon/tool/wirecutters/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aD" = (/obj/structure/table/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aE" = (/obj/item/device/multitool/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aF" = (/obj/structure/prop/alien/computer/camera/flipped{ icon_state = "camera_flipped"; dir = 4},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) @@ -34,7 +34,7 @@ "aH" = (/obj/machinery/porta_turret/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) "aI" = (/obj/machinery/door/airlock/alien/locked{p_open = 1},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aJ" = (/obj/effect/decal/remains/robot,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) -"aK" = (/obj/item/weapon/crowbar/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aK" = (/obj/item/weapon/tool/crowbar/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aL" = (/obj/item/stack/cable_coil/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aM" = (/obj/structure/table/alien,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aN" = (/obj/structure/table/alien,/obj/item/weapon/paper/alien{icon_state = "alienpaper_words"; info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]"},/obj/item/device/gps/internal/poi,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm index cd309990e2..79440f618f 100644 --- a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm +++ b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm @@ -1,1122 +1,121 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"ab" = ( -/turf/simulated/shuttle/wall/dark/hard_corner, -/area/submap/crashedcontainmentshuttle) -"ac" = ( -/turf/simulated/shuttle/wall/dark, -/area/submap/crashedcontainmentshuttle) -"ad" = ( -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"ae" = ( -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"af" = ( -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"ag" = ( -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"ah" = ( -/obj/structure/grille, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"ai" = ( -/obj/random/landmine, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aj" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"ak" = ( -/obj/structure/door_assembly/door_assembly_ext{ - anchored = 1 - }, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"al" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"am" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"an" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"ao" = ( -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"ap" = ( -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aq" = ( -/obj/structure/door_assembly/door_assembly_ext, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"ar" = ( -/obj/structure/grille, -/obj/item/weapon/material/shard, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"as" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"at" = ( -/obj/structure/loot_pile/maint/technical, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"au" = ( -/obj/item/stack/rods, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"av" = ( -/obj/structure/closet/walllocker/emerglocker/east, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aw" = ( -/obj/structure/frame, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"ax" = ( -/obj/item/frame/mirror, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/shuttle/wall/dark, -/area/submap/crashedcontainmentshuttle) -"ay" = ( -/obj/effect/decal/mecha_wreckage/gygax{ - anchored = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"az" = ( -/obj/effect/gibspawner/generic, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aA" = ( -/obj/structure/closet/medical_wall, -/turf/simulated/shuttle/wall/dark, -/area/submap/crashedcontainmentshuttle) -"aB" = ( -/obj/structure/largecrate/animal/crashedshuttle, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"aC" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aD" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aE" = ( -/obj/structure/extinguisher_cabinet, -/turf/simulated/shuttle/wall/dark, -/area/submap/crashedcontainmentshuttle) -"aF" = ( -/obj/machinery/computer, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"aG" = ( -/obj/item/weapon/circuitboard/broken, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aH" = ( -/obj/structure/frame/computer, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"aI" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/item/stack/rods, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"aJ" = ( -/obj/item/stack/rods, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"aK" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/obj/item/stack/rods, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"aL" = ( -/obj/item/weapon/circuitboard/broken, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aM" = ( -/obj/structure/frame, -/obj/item/weapon/circuitboard/broken, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aN" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aO" = ( -/obj/structure/closet/walllocker/emerglocker/north, -/obj/structure/frame, -/obj/item/weapon/circuitboard/broken, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"aP" = ( -/turf/simulated/floor/outdoors/rocks, -/area/submap/crashedcontainmentshuttle) -"aQ" = ( -/obj/item/clothing/suit/space/cult, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aR" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aS" = ( -/obj/structure/door_assembly/door_assembly_highsecurity{ - anchored = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aT" = ( -/obj/structure/loot_pile/maint/technical, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"aU" = ( -/obj/structure/loot_pile/maint/technical, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"aV" = ( -/obj/effect/decal/remains/robot, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aW" = ( -/obj/structure/loot_pile/maint/technical, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"aX" = ( -/obj/structure/door_assembly/door_assembly_ext{ - anchored = 1 - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aY" = ( -/obj/effect/decal/remains/human, -/obj/effect/gibspawner/human, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"aZ" = ( -/obj/item/clothing/head/helmet/space/cult, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bb" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bc" = ( -/obj/structure/door_assembly, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"bd" = ( -/obj/item/weapon/material/knife/ritual, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"be" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/effect/decal/remains/human, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bf" = ( -/obj/structure/grille, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bg" = ( -/obj/effect/gibspawner/generic, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bh" = ( -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"bi" = ( -/obj/item/weapon/circuitboard/broken, -/obj/effect/decal/remains/human, -/obj/item/weapon/gun/energy/laser, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bj" = ( -/obj/item/device/gps/internal/poi, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bk" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bl" = ( -/obj/effect/decal/remains/robot, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bm" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bn" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"bo" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bp" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"bq" = ( -/obj/item/weapon/circuitboard/broken, -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"br" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"bs" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"bt" = ( -/obj/structure/shuttle/engine/propulsion{ - icon_state = "burst_r" - }, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bv" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bw" = ( -/obj/item/weapon/material/knife/ritual, -/obj/effect/decal/cleanable/blood, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bx" = ( -/turf/simulated/shuttle/wall/dark/no_join, -/area/submap/crashedcontainmentshuttle) -"by" = ( -/obj/random/landmine, -/obj/random/landmine, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bz" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/head/helmet/space/cult, -/obj/effect/decal/cleanable/blood, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bA" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"bB" = ( -/obj/structure/sink{ - icon_state = "sink"; - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"bC" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bD" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/random/landmine, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bE" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bF" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) -"bG" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bH" = ( -/obj/structure/closet/crate{ - name = "landmines crate"; - opened = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bI" = ( -/obj/random/landmine, -/turf/simulated/shuttle/floor/black, -/area/submap/crashedcontainmentshuttle) -"bJ" = ( -/obj/random/landmine, -/turf/simulated/floor/plating, -/area/submap/crashedcontainmentshuttle) -"bK" = ( -/obj/random/landmine, -/turf/simulated/shuttle/floor/yellow, -/area/submap/crashedcontainmentshuttle) -"bL" = ( -/obj/effect/decal/cleanable/blood, -/obj/random/landmine, -/turf/simulated/shuttle/floor/red, -/area/submap/crashedcontainmentshuttle) -"bM" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/remains/human, -/obj/item/weapon/flame/lighter/random, -/turf/template_noop, -/area/submap/crashedcontainmentshuttle) -"bN" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/effect/gibspawner/generic, -/obj/effect/decal/remains/human, -/obj/item/weapon/card/id/syndicate{ - age = "\\42"; - blood_type = "\\O+"; - desc = "A strange ID card."; - dna_hash = "\[REDACTED]"; - fingerprint_hash = "\\------"; - name = "Aaron Presley's ID Card(Delivery Service) "; - registered_name = "Aaron Presley"; - sex = "\\Male" - }, -/turf/simulated/shuttle/floor/white, -/area/submap/crashedcontainmentshuttle) +"aa" = (/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"ab" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/submap/crashedcontainmentshuttle) +"ac" = (/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) +"ad" = (/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"ae" = (/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"af" = (/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"ag" = (/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"ah" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"ai" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aj" = (/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"ak" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"al" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"am" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"an" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"ao" = (/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"ap" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aq" = (/obj/item/weapon/material/shard,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"ar" = (/obj/structure/grille,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"as" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"at" = (/obj/item/stack/rods,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"au" = (/obj/item/stack/rods,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"av" = (/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aw" = (/obj/structure/frame,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"ax" = (/obj/item/frame/mirror,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) +"ay" = (/obj/effect/decal/mecha_wreckage/gygax{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"az" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aA" = (/obj/structure/closet/medical_wall,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) +"aB" = (/obj/structure/largecrate/animal/crashedshuttle,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"aC" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aD" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aE" = (/obj/structure/extinguisher_cabinet,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) +"aF" = (/obj/machinery/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"aG" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aH" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"aI" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"aJ" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"aK" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"aL" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aM" = (/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aN" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aO" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"aP" = (/turf/simulated/floor/outdoors/rocks,/area/submap/crashedcontainmentshuttle) +"aQ" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aR" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"aS" = (/obj/structure/door_assembly/door_assembly_highsecurity{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aT" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"aU" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"aV" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aW" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"aX" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aY" = (/obj/item/clothing/suit/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"aZ" = (/obj/effect/decal/remains/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"ba" = (/obj/effect/decal/remains/human,/obj/effect/gibspawner/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bb" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bc" = (/obj/structure/door_assembly,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bd" = (/obj/item/clothing/head/helmet/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"be" = (/obj/item/weapon/material/knife/ritual,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bf" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bg" = (/obj/effect/gibspawner/generic,/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"bh" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"bi" = (/obj/item/weapon/circuitboard/broken,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bj" = (/obj/item/device/gps/internal/poi,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bk" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bl" = (/obj/effect/decal/remains/robot,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bm" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"bn" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bo" = (/obj/effect/decal/cleanable/blood/drip,/turf/template_noop,/area/submap/crashedcontainmentshuttle) +"bp" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"bq" = (/obj/item/weapon/circuitboard/broken,/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"br" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"bs" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"bt" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bu" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bv" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bw" = (/obj/item/weapon/material/knife/ritual,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bx" = (/turf/simulated/shuttle/wall/dark/no_join,/area/submap/crashedcontainmentshuttle) +"by" = (/obj/random/landmine,/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bz" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/helmet/space/cult,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bA" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bB" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bC" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bD" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bE" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bF" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bG" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bH" = (/obj/structure/closet/crate{name = "landmines crate"; opened = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bI" = (/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) +"bJ" = (/obj/random/landmine,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle) +"bK" = (/obj/random/landmine,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle) +"bL" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) +"bM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) +"bN" = (/obj/structure/toilet{dir = 8},/obj/effect/gibspawner/generic,/obj/effect/decal/remains/human,/obj/item/weapon/card/id/syndicate{age = "\\42"; blood_type = "\\O+"; desc = "A strange ID card."; dna_hash = "\[REDACTED]"; fingerprint_hash = "\\------"; name = "Aaron Presley's ID Card(Delivery Service) "; registered_name = "Aaron Presley"; sex = "\\Male"},/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) +"bO" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/remains/human,/obj/item/weapon/flame/lighter/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) (1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aP -aa -aP -aP -aP -ad -aP -aP -aa -ac -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aD -aQ -aa -aa -ad -aP -bx -aP -aP -aa -ac -aP -aa -aa -aG -bt -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -ab -ac -aa -aG -aa -aY -aa -aD -ad -aD -aa -ad -aa -aa -aa -aG -aa -aa -aa -aa -ad -aa -"} -(4,1,1) = {" -aa -aa -aa -ac -aa -aa -aa -aR -aZ -aa -aR -aa -aR -aa -aa -aa -aa -aP -aR -aa -aa -bg -aa -ad -ad -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -au -ad -ac -bd -al -ac -ac -ac -aa -aJ -aa -am -ac -aa -aP -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ad -aq -ao -aa -al -ad -ad -aM -aW -aa -al -ao -al -ad -ac -aP -ac -at -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -ak -aa -ad -al -au -ad -ad -ad -bE -bI -ad -ad -ad -aX -aa -aa -aa -ad -aa -aa -"} -(8,1,1) = {" -aa -aa -ah -aa -aa -ar -ad -ad -al -ad -ad -bk -bb -az -ad -ad -aW -ad -al -ao -aa -aa -aL -ac -aP -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -ac -ad -aV -ad -ad -bi -ad -ad -ad -ad -aP -aP -ad -ao -aa -ad -aa -aa -aP -aP -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -ac -ai -al -ad -ad -ad -bb -bb -ad -aP -aP -aP -ad -aK -aa -aa -aa -aa -bC -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -ai -at -aG -bI -ad -ac -ac -ac -an -an -aP -aP -bb -ad -an -al -aa -bD -bm -bm -aa -"} -(12,1,1) = {" -aa -aa -ai -aa -al -aC -bH -by -bI -ac -bj -bv -bl -ac -ad -ad -ad -aw -an -al -bm -bm -bG -bm -aa -"} -(13,1,1) = {" -aa -aa -an -al -aP -ac -by -bI -ad -aS -af -aB -bL -ac -ad -ac -aA -ax -an -aP -aa -bo -bM -bm -bm -"} -(14,1,1) = {" -aa -aa -aa -aa -aP -ac -ay -az -ad -ac -af -bw -bz -ac -ad -an -bA -bB -ac -aP -bo -aa -bm -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aP -aP -an -ad -bb -au -an -ac -ac -an -aE -ad -ac -aU -ag -ac -aP -aa -bm -bm -ai -aa -"} -(16,1,1) = {" -aa -aa -aa -aP -ad -an -ad -ad -ad -ad -ad -aL -ad -ad -ad -bc -bF -bn -ar -al -aa -bg -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aP -ac -aW -aN -aN -av -ad -ad -bb -ad -ad -ac -aO -bN -an -aP -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -am -aa -ab -ac -ac -aA -ac -ad -aS -as -ah -ac -ac -ac -an -ab -aP -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -an -ae -bh -bK -bK -ae -ae -ae -aT -ac -ab -aP -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -bJ -aT -ae -bp -bq -br -bp -ae -bs -ac -aP -aP -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aj -aa -ap -aa -aa -aa -an -ae -aH -aH -aF -aH -ae -ac -ab -aP -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ar -ao -aI -ao -ah -ac -aP -aa -bg -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -al -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ap -aa -aa -aa -be -bf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaiaaaaaaajanaaaaaaaaaaaaaaalaaaaaaaa +aaaaabacaaaaaaaaaaaaaaaaapaaaPaPaaaqaaaaaaaaaaaaaa +aaaaacaaaaadaaaaaaaaajapaPaPaPadaPaaaaaaataaaaaaaa +aaaCaaaaauaDakaracacaGaQacacananacabaaaaaaaaaaaaaa +aaaVaXaaadaoaaadadajaXbHbyayadadaWacabaaaaaaaaaaaa +aaaYaaaRacaaadadaZapbIbybIazbbadaNacanbJaaaaaaaaaa +aaaababdbeapapapadadadbIadadauadaNaAaeaTanaaaaataa +acaaaaaaapadauadadadacacaSacanadavacbhaeaeahaaaaaa +aPadaVaRacadadadbiadacbjafafacadadadbKbpaHaraaaaaa +aaaPadaaacaMadbkadbbacbvaBbwacaLadaSbKbqaHaoapaaaa +aPbxaVaRacaWadbbadbbanblbLbzanadbbasaebraFaIaabfaa +aPaPaaaaaaaabEazadadanacacacaEadadahaebpaHaoaaaiaa +aPaPadaaaJapbIadadaPaPadadadadadadacaeaeaeahaaaaaa +adaaaaaaaaaoadadaPaPaPadacanacbcacacaTbsacacaaaaaa +aPacaaaaamapadaWaPaPbbadaAbAaUbFaOacacacabaPaaaaaa +aPaPaaaPacadadadadadadawaxbBagbnbNanabaPaPaaaaaaaa +aaaaaXbtaaacbuapaoaKanananacacaranabaPaPaabgaaaaaa +acaaaaaaaPaPaaaoaaaaapapaPaPaPapaPaPaaaaaaaaaaaaaa +aaaXaaaaaaacaaaaadaaaabmaaboaaaaaaaaaaaaaaaaaaaaaa +aabDaabgaaaGaaaaaaaabGbmboaabmbgaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaadaLaaaabmbMbObmbmaaaaaaaaaaaaaaaaaaaa +aaaaadadaaaaaaacaPbCbmbmbmaaajaaaaaaaaaaaaaaaaaaaa +aaaaaaadaaaaaaaPaPaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/mountains/deadBeacon.dmm b/maps/submaps/surface_submaps/mountains/deadBeacon.dmm index c94a76b9a5..85eefad2c5 100644 --- a/maps/submaps/surface_submaps/mountains/deadBeacon.dmm +++ b/maps/submaps/surface_submaps/mountains/deadBeacon.dmm @@ -27,7 +27,7 @@ "A" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/deadBeacon) "B" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) "C" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) -"D" = (/obj/item/weapon/cigbutt,/obj/item/weapon/wrench,/obj/machinery/light/built,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) +"D" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tool/wrench,/obj/machinery/light/built,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "E" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "F" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "G" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) diff --git a/maps/submaps/surface_submaps/mountains/deadspy.dmm b/maps/submaps/surface_submaps/mountains/deadspy.dmm index f22e0d3e61..15b57e5fce 100644 --- a/maps/submaps/surface_submaps/mountains/deadspy.dmm +++ b/maps/submaps/surface_submaps/mountains/deadspy.dmm @@ -8,7 +8,7 @@ "h" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) "i" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/molten_item,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) "j" = (/obj/item/weapon/material/butterfly,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) -"k" = (/obj/effect/decal/remains/human,/obj/item/weapon/wrench,/obj/item/clothing/head/hardhat,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"k" = (/obj/effect/decal/remains/human,/obj/item/weapon/tool/wrench,/obj/item/clothing/head/hardhat,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) "l" = (/obj/item/weapon/flame/lighter/zippo,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) "m" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/balaclava,/obj/item/clothing/under/suit_jacket/really_black,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) "n" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) diff --git a/maps/submaps/surface_submaps/mountains/digsite.dmm b/maps/submaps/surface_submaps/mountains/digsite.dmm index 928a1a85ec..f97910d431 100644 --- a/maps/submaps/surface_submaps/mountains/digsite.dmm +++ b/maps/submaps/surface_submaps/mountains/digsite.dmm @@ -32,7 +32,7 @@ "F" = (/obj/structure/boulder,/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) "G" = (/obj/structure/boulder,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) "H" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating/external,/area/submap/cave/digsite) -"I" = (/obj/structure/table/steel,/obj/item/weapon/wrench,/obj/item/weapon/storage/box/samplebags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) +"I" = (/obj/structure/table/steel,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/box/samplebags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) "J" = (/obj/structure/table/steel,/obj/item/stack/flag/yellow,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) "K" = (/obj/random/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) "L" = (/obj/structure/closet/crate,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite) diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm index f1045f22f0..9bcce0da1e 100644 --- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm +++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm @@ -1,94 +1,123 @@ /area/submap/cave name = "Cave Submap Area" icon_state = "submap" + ambience = AMBIENCE_RUINS /area/submap/cave/deadBeacon name = "abandoned relay" + ambience = AMBIENCE_TECH_RUINS /area/submap/cave/prepper1 name = "Prepper Bunker" + ambience = AMBIENCE_FOREBODING /area/submap/cave/qShuttle name = "Quarantined Shuttle" + ambience = AMBIENCE_RUINS /area/submap/cave/AMine1 name = "Abandoned Mine" /area/submap/cave/Scave1 name = "Spider Cave 1" + ambience = AMBIENCE_FOREBODING /area/submap/cave/crashed_ufo name = "Crashed Alien Vessel" requires_power = FALSE + ambience = AMBIENCE_OTHERWORLDLY /area/submap/cave/crystal1 name = "Crystaline Cave" + ambience = AMBIENCE_SPACE /area/submap/cave/crystal2 name = "Crystaline Cave" + ambience = AMBIENCE_SPACE /area/submap/cave/crystal3 name = "Crystaline Cave" + ambience = AMBIENCE_SPACE /area/submap/cave/lost_explorer name = "Final Resting Place" + ambience = AMBIENCE_GHOSTLY /area/submap/Rockb1 name = "RockyBase1" + ambience = AMBIENCE_FOREBODING /area/submap/Cavelake name = "Cavelake" + ambience = AMBIENCE_SPACE /area/submap/CaveTrench name = "Cave River" + ambience = AMBIENCE_FOREBODING /area/submap/CorgiRitual name = "Dark Ritual" + ambience = AMBIENCE_UNHOLY /area/submap/AbandonedTemple name = "Abandoned Temple" + ambience = AMBIENCE_RUINS /area/submap/CrashedMedShuttle name = "Crashed Med Shuttle" + ambience = AMBIENCE_RUINS /area/submap/cave/digsite name = "Dig Site" + ambience = AMBIENCE_OTHERWORLDLY /area/submap/cave/vault1 name = "Mine Vault" + ambience = AMBIENCE_FOREBODING /area/submap/cave/vault2 name = "Mine Vault" + ambience = AMBIENCE_FOREBODING /area/submap/cave/vault3 name = "Mine Vault" + ambience = AMBIENCE_FOREBODING /area/submap/cave/vault4 name = "Mine Vault" + ambience = AMBIENCE_FOREBODING /area/submap/cave/vault5 name = "Mine Vault" + ambience = AMBIENCE_FOREBODING /area/submap/cave/IceCave1A name = "Ice Cave 1A" + ambience = AMBIENCE_SPACE /area/submap/cave/IceCave1B name = "Ice Cave 1B" + ambience = AMBIENCE_SPACE /area/submap/cave/IceCave1C name = "Ice Cave 1C" + ambience = AMBIENCE_SPACE /area/submap/cave/swordcave name = "Cursed Sword Cave" + ambience = AMBIENCE_UNHOLY /area/submap/cave/SupplyDrop1 name = "Supply Drop 1" + ambience = AMBIENCE_TECH_RUINS /area/submap/cave/BlastMine1 name = "Blast Mine 1" /area/submap/crashedcontainmentshuttle - name = "Crashed Containment Shuttle" + name = "Crashed Containment Shuttle" + ambience = AMBIENCE_HIGHSEC /area/submap/deadspy - name = "Dead Spy" \ No newline at end of file + name = "Dead Spy" + ambience = AMBIENCE_FOREBODING \ No newline at end of file diff --git a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm index b1610b1ec7..ab2a36f75b 100644 --- a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm +++ b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm @@ -26,7 +26,7 @@ "az" = (/obj/item/trash/syndi_cakes,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aA" = (/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aB" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) -"aC" = (/obj/item/weapon/material/knife/boot,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) +"aC" = (/obj/item/weapon/material/knife/tacknife/boot,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aD" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) "aE" = (/obj/item/trash/sosjerky,/obj/item/weapon/storage/box/donut/empty,/obj/item/weapon/reagent_containers/food/drinks/sillycup,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) "aF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle) @@ -64,7 +64,7 @@ "bl" = (/obj/structure/closet/crate/secure/science{icon_state = "scisecurecrateopen"; locked = 0; name = "Virus Samples - FRAGILE"; opened = 1},/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "bm" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) "bn" = (/obj/structure/table/standard,/obj/item/device/taperecorder,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle) -"bo" = (/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) +"bo" = (/obj/item/weapon/tool/crowbar/red,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) "bp" = (/obj/item/trash/chips,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "bq" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "br" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle) @@ -112,7 +112,7 @@ "ch" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) "ci" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) "cj" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) -"ck" = (/obj/structure/table/steel,/obj/item/weapon/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) +"ck" = (/obj/structure/table/steel,/obj/item/weapon/tool/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) "cl" = (/obj/structure/table/rack,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) "cm" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) "cn" = (/obj/structure/closet/crate/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle) diff --git a/maps/submaps/surface_submaps/plains/Field1.dmm b/maps/submaps/surface_submaps/plains/Field1.dmm index fdc4357179..9dcafe0400 100644 --- a/maps/submaps/surface_submaps/plains/Field1.dmm +++ b/maps/submaps/surface_submaps/plains/Field1.dmm @@ -4,8 +4,8 @@ "d" = (/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) "e" = (/obj/structure/ore_box,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) "f" = (/obj/item/device/radio,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) -"g" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) -"h" = (/obj/vehicle/train/cargo/engine,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) +"g" = (/obj/vehicle/train/trolley,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) +"h" = (/obj/vehicle/train/engine,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) "i" = (/obj/item/device/flashlight,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1) (1,1,1) = {" diff --git a/maps/submaps/surface_submaps/plains/Thiefc.dmm b/maps/submaps/surface_submaps/plains/Thiefc.dmm index a418dedd59..57a27da7c5 100644 --- a/maps/submaps/surface_submaps/plains/Thiefc.dmm +++ b/maps/submaps/surface_submaps/plains/Thiefc.dmm @@ -1,670 +1,39 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/template_noop, -/area/submap/Thiefc) -"c" = ( -/turf/simulated/mineral/ignore_mapgen, -/area/submap/Thiefc) -"d" = ( -/obj/structure/ore_box, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"e" = ( -/obj/structure/closet/crate, -/obj/item/weapon/extinguisher, -/obj/item/weapon/extinguisher, -/obj/item/weapon/extinguisher, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"f" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"g" = ( -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/obj/item/weapon/ore/coal, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"h" = ( -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"i" = ( -/obj/structure/closet/crate, -/obj/item/weapon/lipstick, -/obj/item/weapon/lipstick/black, -/obj/item/weapon/lipstick/random, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"j" = ( -/obj/structure/table/steel, -/obj/item/weapon/beartrap, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"k" = ( -/obj/vehicle/train/cargo/trolley, -/obj/random/firstaid, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"l" = ( -/obj/structure/closet/crate, -/obj/item/weapon/folder/blue, -/obj/item/weapon/folder/red, -/obj/item/weapon/folder/white, -/obj/item/weapon/folder/yellow, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"m" = ( -/obj/structure/table/steel, -/obj/item/weapon/paper{ - desc = "This is some bullshit. First chance we got to knick something that looks half decent turns out to be mostly junk. And now we're getting calls that the other stash we've got has got a spider problem. Fuck this, Between the shitty weather, The pissed of bugs, And now apparently some NT goon running around in the area there's hardly enough reason to stick around. I'm telling Carl I'm out tommorow."; - name = "Note" - }, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"n" = ( -/obj/vehicle/train/cargo/trolley, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"o" = ( -/obj/structure/closet/crate, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) -"p" = ( -/obj/structure/closet/crate, -/obj/item/weapon/storage/box/shotgunammo, -/obj/item/weapon/storage/box/practiceshells, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/submap/Thiefc) +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/template_noop,/area/submap/Thiefc) +"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Thiefc) +"d" = (/obj/structure/ore_box,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"e" = (/obj/structure/closet/crate,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"f" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"g" = (/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/coal,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"h" = (/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"i" = (/obj/structure/closet/crate,/obj/item/weapon/lipstick,/obj/item/weapon/lipstick/black,/obj/item/weapon/lipstick/random,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"j" = (/obj/structure/table/steel,/obj/item/weapon/beartrap,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"k" = (/obj/vehicle/train/trolley,/obj/random/firstaid,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"l" = (/obj/structure/closet/crate,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/red,/obj/item/weapon/folder/white,/obj/item/weapon/folder/yellow,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"m" = (/obj/structure/table/steel,/obj/item/weapon/paper{desc = "This is some bullshit. First chance we got to knick something that looks half decent turns out to be mostly junk. And now we're getting calls that the other stash we've got has got a spider problem. Fuck this, Between the shitty weather, The pissed of bugs, And now apparently some NT goon running around in the area there's hardly enough reason to stick around. I'm telling Carl I'm out tommorow."; name = "Note"},/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"n" = (/obj/vehicle/train/trolley,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"o" = (/obj/structure/closet/crate,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"p" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/practiceshells,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) (1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -b -b -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(3,1,1) = {" -a -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(4,1,1) = {" -a -b -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(5,1,1) = {" -a -b -c -c -c -c -c -b -b -c -b -b -b -c -b -b -b -b -b -a -"} -(6,1,1) = {" -a -b -c -c -c -c -c -b -c -c -c -b -b -c -b -b -b -b -b -a -"} -(7,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -h -h -c -c -b -b -b -b -a -"} -(8,1,1) = {" -a -b -c -c -c -j -m -c -c -c -c -h -h -c -c -b -b -b -b -a -"} -(9,1,1) = {" -a -c -c -c -h -h -h -h -c -c -h -h -h -c -c -b -b -b -b -a -"} -(10,1,1) = {" -a -c -c -f -h -h -h -h -h -c -h -h -c -c -c -b -b -b -b -a -"} -(11,1,1) = {" -a -c -d -g -h -k -n -h -h -h -h -h -c -c -c -b -b -b -b -a -"} -(12,1,1) = {" -a -c -e -h -h -h -h -h -h -h -h -c -c -c -c -b -b -b -b -a -"} -(13,1,1) = {" -a -c -c -c -i -h -h -h -h -c -c -c -c -c -c -b -b -b -b -a -"} -(14,1,1) = {" -a -c -c -c -h -h -h -h -c -c -c -c -c -c -c -b -b -b -b -a -"} -(15,1,1) = {" -a -c -c -h -h -l -o -p -h -c -c -c -c -c -c -b -b -b -b -a -"} -(16,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -a -"} -(17,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -a -"} -(18,1,1) = {" -a -b -b -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -a -"} -(19,1,1) = {" -a -b -b -b -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -a -"} -(20,1,1) = {" -a -b -b -b -b -b -c -c -c -c -c -c -b -b -b -b -b -b -b -a -"} -(21,1,1) = {" -a -b -b -b -b -b -b -c -c -c -b -b -b -b -b -b -b -b -b -a -"} -(22,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(23,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(24,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +aaaaaaaaaaaaaaaaaaaaaaaaa +abcbbbbbcccccccbbbbbbbbba +abccccccccdecccccbbbbbbba +accccccccfghcchcccbbbbbba +accccccchhhhihhccccbbbbba +abcccccjhhkhhhlccccbbbbba +abbccccmhhnhhhocccccbbbba +abbbbbcchhhhhhpccccccbbba +abbbbcccchhhhchccccccbbba +abbbcccccchhcccccccccbbba +abbbbccchhhhccccccccbbbba +abbbbbhhhhhcccccccccbbbba +abbbbbhhhccccccccccbbbbba +abbbccccccccccccccbbbbbba +abbbbbcccccccccccbbbbbbba +abbbbbbbbbbbbbbbbbbbbbbba +abbbbbbbbbbbbbbbbbbbbbbba +abbbbbbbbbbbbbbbbbbbbbbba +abbbbbbbbbbbbbbbbbbbbbbba +aaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/plains/construction1.dmm b/maps/submaps/surface_submaps/plains/construction1.dmm index 96dce1f425..23577514ee 100644 --- a/maps/submaps/surface_submaps/plains/construction1.dmm +++ b/maps/submaps/surface_submaps/plains/construction1.dmm @@ -8,7 +8,7 @@ "h" = (/obj/structure/firedoor_assembly,/obj/structure/grille,/turf/simulated/floor/plating/external,/area/submap/construction1) "i" = (/obj/item/clothing/gloves/black,/turf/simulated/floor/outdoors/rocks,/area/template_noop) "j" = (/turf/simulated/floor/tiled/external,/area/submap/construction1) -"k" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/external,/area/submap/construction1) +"k" = (/obj/item/weapon/tool/wrench,/turf/simulated/floor/plating/external,/area/submap/construction1) "l" = (/turf/simulated/wall,/area/submap/construction1) "m" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/plating/external,/area/submap/construction1) "n" = (/obj/item/weapon/pickaxe/drill,/turf/simulated/floor/outdoors/rocks,/area/template_noop) @@ -27,7 +27,7 @@ "A" = (/obj/item/weapon/shovel,/turf/simulated/floor/plating/external,/area/submap/construction1) "B" = (/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating/external,/area/submap/construction1) "C" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/floor/tiled/external,/area/submap/construction1) -"D" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating/external,/area/submap/construction1) +"D" = (/obj/item/weapon/tool/crowbar,/turf/simulated/floor/plating/external,/area/submap/construction1) "E" = (/obj/item/clothing/glasses/welding,/turf/simulated/floor/plating/external,/area/submap/construction1) "F" = (/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating/external,/area/submap/construction1) diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm index 771f063622..99f9fef12e 100644 --- a/maps/submaps/surface_submaps/plains/plains_areas.dm +++ b/maps/submaps/surface_submaps/plains/plains_areas.dm @@ -3,9 +3,11 @@ /area/submap/construction1 name = "construction site" + ambience = AMBIENCE_RUINS /area/submap/camp1 name = "camp site" + ambience = AMBIENCE_SIF /area/submap/house1 name = "old explorer's home" @@ -15,6 +17,7 @@ /area/submap/Epod1 name = "Epod1" + ambience = AMBIENCE_FOREBODING /area/submap/Rocky2 name = "Rocky2" @@ -24,6 +27,7 @@ /area/submap/PascalB name = "PascalB" + ambience = AMBIENCE_FOREBODING /area/submap/bonfire name = "abandoned bonfire" @@ -39,6 +43,7 @@ /area/submap/Thiefc name = "Thieves Cave" + ambience = AMBIENCE_FOREBODING /area/submap/smol2 name = "Small 2" @@ -54,30 +59,39 @@ /area/submap/PooledR name = "Pooled Rocks" + ambience = AMBIENCE_SIF /area/submap/Diner name = "Diner" + ambience = AMBIENCE_SIF /area/submap/snow1 name = "Snow1" + ambience = AMBIENCE_SIF /area/submap/snow2 name = "Snow2" + ambience = AMBIENCE_SIF /area/submap/snow3 name = "Snow3" + ambience = AMBIENCE_SIF /area/submap/snow4 name = "Snow4" + ambience = AMBIENCE_SIF /area/submap/snow5 name = "Snow5" + ambience = AMBIENCE_SIF /area/submap/SupplyDrop2 name = "Supply Drop 2" + ambience = AMBIENCE_TECH_RUINS /area/submap/RationCache name = "Ration Cache" /area/submap/Oldhouse name = "Oldhouse" + ambience = AMBIENCE_FOREBODING diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm index 5fecb8d0f4..5bfa361b59 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm @@ -1,83 +1,115 @@ /area/submap name = "Submap Area" icon_state = "submap" + flags = RAD_SHIELDED + ambience = AMBIENCE_RUINS + +/area/submap/event //To be used for Events not for regular PoIs + name = "Unknown" + requires_power = FALSE /area/submap/spider1 name = "spider nest" + ambience = AMBIENCE_FOREBODING /area/submap/Field1 name = "Field 1" + ambience = AMBIENCE_SIF /area/submap/Lake1 name = "Lake 1" + ambience = AMBIENCE_SIF /area/submap/MilitaryCamp1 name = "Military Camp 1" + ambience = AMBIENCE_HIGHSEC /area/submap/Mudpit name = "Mudpit" + ambience = AMBIENCE_SIF /area/submap/Rocky1 name = "Rocky1" + ambience = AMBIENCE_SIF /area/submap/Rocky2 name = "Rocky2" + ambience = AMBIENCE_SIF /area/submap/Rocky3 name = "Rocky3" + ambience = AMBIENCE_SIF /area/submap/Shack1 name = "Shack1" + ambience = AMBIENCE_RUINS /area/submap/Small1 name = "Small1" + ambience = AMBIENCE_SIF /area/submap/SnowR1 name = "SnowR1" + ambience = AMBIENCE_SIF /area/submap/BoomBase name = "Boom1" + ambience = AMBIENCE_FOREBODING /area/submap/Blackshuttledown name = "BSD" requires_power = FALSE + ambience = AMBIENCE_HIGHSEC /area/submap/Cragzone1 name = "Craggy1" + ambience = AMBIENCE_SIF /area/submap/Lab1 name = "Lab1" + ambience = AMBIENCE_RUINS /area/submap/Rocky4 name = "Rocky4" + ambience = AMBIENCE_SIF /area/submap/DJOutpost1 name = "DJOutpost1" + ambience = AMBIENCE_TECH_RUINS /area/submap/DJOutpost2 name = "DJOutpost2" + ambience = AMBIENCE_GHOSTLY /area/submap/MHR name = "Manhack Rock" + ambience = AMBIENCE_FOREBODING /area/submap/Rockybase name = "Rockybase" + ambience = AMBIENCE_HIGHSEC /area/submap/GovPatrol name = "GovPatrol" + ambience = AMBIENCE_GHOSTLY /area/submap/DecoupledEngine name = "DecoupledEngine" + ambience = AMBIENCE_FOREBODING /area/submap/DoomP name = "DoomP" + ambience = AMBIENCE_HIGHSEC /area/submap/CaveS name = "CaveS" + ambience = AMBIENCE_FOREBODING /area/submap/Drugd name = "DrugDen" + ambience = AMBIENCE_FOREBODING /area/submap/Manor1 name = "Manor1" + ambience = AMBIENCE_FOREBODING diff --git a/maps/tether/tether_phoronlock.dm b/maps/tether/tether_phoronlock.dm index ed76bbdffb..8f86c9eedc 100644 --- a/maps/tether/tether_phoronlock.dm +++ b/maps/tether/tether_phoronlock.dm @@ -116,7 +116,7 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior "processing" = program.memory["processing"] ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "phoron_airlock_console.tmpl", name, 470, 290) ui.set_initial_data(data) diff --git a/maps/tether/tether_telecomms.dm b/maps/tether/tether_telecomms.dm index 0b93c8220f..619b21a5d2 100644 --- a/maps/tether/tether_telecomms.dm +++ b/maps/tether/tether_telecomms.dm @@ -68,7 +68,7 @@ // Telecommunications Satellite /area/tether/surfacebase/tcomms name = "\improper Telecomms" - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') + ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg') /area/tether/surfacebase/tcomms/entrance name = "\improper Telecomms Teleporter" diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 6e04634b5d..0ecd7fbfdb 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -51,13 +51,11 @@ var/list/all_maps = list() //Also including them lets us override already created jobs, letting us keep the datums to a minimum mostly. //This is probably a lot longer explanation than it needs to be. - // VOREStation Edit - Holomaps! var/list/holomap_smoosh // List of lists of zlevels to smoosh into single icons var/list/holomap_offset_x = list() var/list/holomap_offset_y = list() var/list/holomap_legend_x = list() var/list/holomap_legend_y = list() - // VOREStation Edit End var/list/meteor_strike_areas // VOREStation Edit - Areas meteor strikes may choose to hit. var/station_name = "BAD Station" @@ -171,12 +169,12 @@ var/list/all_maps = list() var/flags = 0 // Bitflag of which *_levels lists this z should be put into. var/turf/base_turf // Type path of the base turf for this z var/transit_chance = 0 // Percentile chance this z will be chosen for map-edge space transit. - // VOREStation Edit - Holomaps + +// Holomaps var/holomap_offset_x = -1 // Number of pixels to offset the map right (for centering) for this z var/holomap_offset_y = -1 // Number of pixels to offset the map up (for centering) for this z var/holomap_legend_x = 96 // x position of the holomap legend for this z var/holomap_legend_y = 96 // y position of the holomap legend for this z - // VOREStation Edit End // Default constructor applies itself to the parent map datum /datum/map_z_level/New(var/datum/map/map) @@ -197,7 +195,7 @@ var/list/all_maps = list() map.base_turf_by_z["[z]"] = base_turf if(transit_chance) map.accessible_z_levels["[z]"] = transit_chance - // VOREStation Edit - Holomaps + // Holomaps // Auto-center the map if needed (Guess based on maxx/maxy) if (holomap_offset_x < 0) holomap_offset_x = ((HOLOMAP_ICON_SIZE - world.maxx) / 2) @@ -208,7 +206,6 @@ var/list/all_maps = list() LIST_NUMERIC_SET(map.holomap_offset_y, z, holomap_offset_y) LIST_NUMERIC_SET(map.holomap_legend_x, z, holomap_legend_x) LIST_NUMERIC_SET(map.holomap_legend_y, z, holomap_legend_y) - // VOREStation Edit End /datum/map_z_level/Destroy(var/force) crash_with("Attempt to delete a map_z_level instance [log_info_line(src)]") diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 42b68b4f6e..e3258dd065 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -60,6 +60,9 @@ NanoBaseHelpers = function () ceil: function(number) { return Math.ceil(number); }, + abs: function(number) { + return Math.abs(number); + }, // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") string: function() { if (arguments.length == 0) diff --git a/nano/templates/comm_power_monitor.tmpl b/nano/templates/comm_power_monitor.tmpl new file mode 100644 index 0000000000..ffcd70ff2a --- /dev/null +++ b/nano/templates/comm_power_monitor.tmpl @@ -0,0 +1,76 @@ +

    Powernet Monitoring

    + +{{if data.currentTab == 0}} + + + +
    + {{:helper.link('Scan For Sensors', 'refresh', {'cartridge_topic' : 1, 'powernet_refresh' : 1})}} No active sensor. Printing sensor list. +
    +
    +
+ {{for data.powernet_monitoring}} + + {{empty}} + WARNING: No Sensors Detected! + {{/for}} +
+ {{if value.alarm}} + {{:helper.link(value.name, 'alert', {'switch_tab' : value.name, 'powernet_target' : value.name})}} + {{else}} + {{:helper.link(value.name, '' , {'switch_tab' : value.name, 'cartridge_topic' : 1, 'powernet_target' : value.name})}} + {{/if}} +
+{{else}} + + + +
+ {{:helper.link('Show List', 'cancel', { 'switch_tab' : 0})}} Sensor selected: {{:data.currentTab}} +
+ {{if data.powernet_target.error}} + {{:data.powernet_target.error}} + {{else}} + +

Network Information

+ {{for data.powernet_target.status :nodeValue:nodeIndex}} +
+
{{:nodeValue.field}}
+
{{:nodeValue.statval}}
+
+ {{/for}} + + +

Sensor Readings

+ + + + + + + + + + {{for data.powernet_target.apc_data :apcValue:apcIndex}} + + + + + + + + + {{empty}} + + {{/for}} +
APC NameEquipmentLightingEnvironmentCell StatusAPC Load
{{:apcValue.name}}{{:apcValue.s_equipment}}{{:apcValue.s_lighting}}{{:apcValue.s_environment}} + {{if apcValue.cell_status == "N"}} + {{:helper.link(apcValue.cell_charge + '%', 'batt_disc', null,'disabled', 'width75btn')}} + {{else apcValue.cell_status == "C"}} + {{:helper.link(apcValue.cell_charge + '%', 'batt_chrg', null,'disabled', 'width75btn')}} + {{else}} + {{:helper.link(apcValue.cell_charge + '%', 'batt_full', null,'disabled', 'width75btn')}} + {{/if}} + {{:apcValue.total_load}}
No APCs detected in connected powernet.
+ {{/if}} +{{/if}} diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 716034a7f4..41d81391bd 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -3,20 +3,6 @@ Title: Communicator UI Used In File(s): code\game\objects\items\devices\communicator\communicator.dm --> -
-
-
- {{:data.time}} | - {{if data.connectionStatus == 1}} - - {{else}} - - {{/if}} - | {{:data.owner}} | {{:data.occupation}} -
-
-
- {{if data.currentTab == 1}}
@@ -32,10 +18,7 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{else data.currentTab == 2}}

Manual Dial

-
-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

-
@@ -82,47 +65,51 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
+

Connection Management


+

External Connections

- {{for data.voice_mobs}} -
-
- {{:value.name}} -
-
-
{{:helper.link('Disconnect', 'close', {'disconnect' : value.true_name}, null, 'redButton')}}
-
+ {{for data.voice_mobs}} +
+
+ {{:value.name}}
- {{/for}} +
+
{{:helper.link('Disconnect', 'close', {'disconnect' : value.true_name}, null, 'redButton')}}
+
+
+ {{/for}} +

Internal Connections

- {{for data.communicating}} -
-
- {{:value.name}} -
-
- {{:helper.link('Disconnect', 'close', {'disconnect' : value.true_name}, null, 'redButton')}} - {{if data.video_comm == null}} - {{:helper.link('Start Video', 'signal-diag', {'startvideo' : value.ref})}} - {{else data.video_comm == value.ref}} - {{:helper.link('End Video', 'signal-diag', {'endvideo' : value.true_name}, null, 'redButton')}} - {{/if}} -
+ {{for data.communicating}} +
+
+ {{:value.name}}
- {{/for}} +
+ {{:helper.link('Disconnect', 'close', {'disconnect' : value.true_name}, null, 'redButton')}} + {{if data.video_comm == null}} + {{:helper.link('Start Video', 'signal-diag', {'startvideo' : value.ref})}} + {{else data.video_comm == value.ref}} + {{:helper.link('End Video', 'signal-diag', {'endvideo' : value.true_name}, null, 'redButton')}} + {{/if}} +
+
+ {{/for}} +

Requests Received

- {{for data.requestsReceived}} -
-
- {{:value.name}} -
-
-
{{:value.address}}
{{:helper.link('Accept', 'signal-diag', {'dial' : value.address})}}{{:helper.link('Decline', 'close', {'decline' : value.ref})}} -
+ {{for data.requestsReceived}} +
+
+ {{:value.name}}
- {{/for}} +
+
{{:value.address}}
{{:helper.link('Accept', 'signal-diag', {'dial' : value.address})}}{{:helper.link('Decline', 'close', {'decline' : value.ref})}} +
+
+ {{/for}}

Invites Sent

{{for data.invitesSent}} @@ -142,32 +129,28 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{else data.currentTab == 3}}

Known Devices

-
-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

- {{for data.knownDevices}} -
-
- {{:value.name}} -
-
-
{{:value.address}}
- {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} - {{:helper.link('Call', 'phone', {'dial' : value.address, 'copy' : value.address, 'switch_tab' : 2})}} - {{:helper.link('Msg', 'mail-closed', {'copy' : value.address, 'copy_name' : value.name, 'switch_tab' : 40})}} -
+ {{for data.knownDevices}} +
+
+ {{:value.name}}
- {{/for}} +
+
{{:value.address}}
+ {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Call', 'phone', {'dial' : value.address, 'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Msg', 'mail-closed', {'copy' : value.address, 'copy_name' : value.name, 'switch_tab' : 40})}} +
+
+ {{/for}} {{else data.currentTab == 4}}

Messaging

-
-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

{{for data.imContacts}}
@@ -184,9 +167,7 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{else data.currentTab == 40}}

Conversation With: {{:data.targetAddressName}}

-
-
{{:helper.link('Back', 'arrowreturnthick-1-w', {'switch_tab' : 4})}}

@@ -207,14 +188,62 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
- + {{else data.currentTab == 5}} -

Note Keeper

- +

News

+
+ + {{if data.feeds.length}} + +

Recent News

+
+ {{for data.latest_news}} +
{{:value.channel}}
+ -{{:value.body}}
+ {{if value.has_image}} +
+ {{if value.caption}} + {{:value.caption}}
+ {{/if}} + {{/if}} + + {{:helper.link('Go to', 'arrow', {'newsfeed' : value.channel})}} + [{{:value.message_type}} by {{:value.author}} - {{:value.time_stamp}}] +
+ {{empty}} + {{/for}} +
+
+ + +

News Feeds

+
+ {{for data.feeds}} +
+ {{:helper.link(value.name, 'arrow', {'newsfeed' : value.name})}} +
+ {{/for}} +
+ {{else}} + +
+
+ Error +
+
+ No weather reports available. Please try again later. +
+
+ {{/if}} + + + +{{else data.currentTab == 6}} + +

Note Keeper


-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

@@ -234,17 +263,15 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
- + -{{else data.currentTab == 6}} +{{else data.currentTab == 7}}

Weather

-
-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

Current Conditions:

{{#def.atmosphericScan}} - +

Weather Reports:

{{for data.weather}}
@@ -254,7 +281,8 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
Time: {{:value.Time}}
Weather: {{:value.Weather}}, {{:helper.fixed(value.Temperature)}}°C
- High: {{:helper.fixed(value.High)}}°C | Low: {{:helper.fixed(value.Low)}}°C + High: {{:helper.fixed(value.High)}}°C | Low: {{:helper.fixed(value.Low)}}°C
+ Forecast: {{:value.Forecast}}
{{empty}} @@ -268,21 +296,28 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
{{/for}} - + -{{else data.currentTab == 7}} +{{else data.currentTab == 8}} + + {{#def.crewManifest}} + + + +{{else data.currentTab == 9}}

Settings

-
-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

Owner:
-
{{:data.owner}}
{{:helper.link('Rename', 'pencil', {'rename' : 1})}} +
+ {{:data.owner}} +
+ {{:helper.link('Rename', 'pencil', {'rename' : 1})}}
@@ -291,7 +326,9 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm Occupation:
-
{{:data.occupation}}
+
+ {{:data.occupation}} +
@@ -313,10 +350,15 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm Device EPv2 Address:
-
{{:data.address}}
+
+ {{:data.address}} +
-
{{:helper.link('Visible', 'signal-diag', {'toggle_visibility' : 1}, data.visible ? 'selected' : null)}}{{:helper.link('Invisible', 'close', {'toggle_visibility' : 1}, data.visible ? null : 'selected')}}
+
+ {{:helper.link('Visible', 'signal-diag', {'toggle_visibility' : 1}, data.visible ? 'selected' : null)}} + {{:helper.link('Invisible', 'close', {'toggle_visibility' : 1}, data.visible ? null : 'selected')}} +
@@ -325,25 +367,39 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm Ringer:
-
{{:helper.link('On', 'volume-on', {'toggle_ringer' : 1}, data.ring ? 'selected' : null)}}{{:helper.link('Off', 'volume-off', {'toggle_ringer' : 1}, data.ring ? null : 'selected')}}
+
+ {{:helper.link('On', 'volume-on', {'toggle_ringer' : 1}, data.ring ? 'selected' : null)}} + {{:helper.link('Off', 'volume-off', {'toggle_ringer' : 1}, data.ring ? null : 'selected')}} +
-
-
- Flashlight: + + +{{else data.currentTab == 10}} + +

External Plugin

+
+ + {{for data.cart_templates}} +
+ {{:helper.link(value.name, 'gear', {'switch_template' : value.template, 'switch_tab' : 0})}}
-
-
{{:helper.link(data.flashlight==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'Light' : 1}, null,'fixedLeftWide')}}
-
-
- - - -{{else data.currentTab == 8}} - - - - - + {{empty}} + {{/for}} + {{if data.cart_devices}} +
+

Internal Devices

+ {{for data.cart_devices}} +
+
+ {{:value.name}} +
+
+
{{:helper.link('On', 'power', {'toggle_device' : value.index}, value.active ? 'selected' : null)}} + {{:helper.link('Off', 'stop', {'toggle_device' : value.index}, value.active ? null : 'selected')}}
+
+
+ {{/for}} + {{/if}} {{/if}} diff --git a/nano/templates/communicator_header.tmpl b/nano/templates/communicator_header.tmpl new file mode 100644 index 0000000000..63289ba181 --- /dev/null +++ b/nano/templates/communicator_header.tmpl @@ -0,0 +1,18 @@ +
+
+
+ {{:data.time}} | + {{if data.connectionStatus == 1}} + + {{else}} + + {{/if}} + | {{:data.owner}} | {{:data.occupation}} | +
+
+ {{:helper.link('Home', 'home', {'switch_tab' : 1, 'switch_template' : 'communicator.tmpl'})}} +
+
+
+ +{{#def.Body}} \ No newline at end of file diff --git a/nano/templates/crew_manifest.tmpl b/nano/templates/crew_manifest.tmpl index 00c45a1d5f..2246fefd26 100644 --- a/nano/templates/crew_manifest.tmpl +++ b/nano/templates/crew_manifest.tmpl @@ -1,5 +1,7 @@ - @@ -7,7 +9,6 @@ Copy-pasted from pda.tmpl

Crew Manifest


-
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

diff --git a/nano/templates/emp_records.tmpl b/nano/templates/emp_records.tmpl new file mode 100644 index 0000000000..16b5159039 --- /dev/null +++ b/nano/templates/emp_records.tmpl @@ -0,0 +1,23 @@ +

Employment Records

+{{if data.currentTab == "0"}} +
+ {{for data.emp_records}} +
+ {{:helper.link(value.name, '', {"switch_tab" : value.name})}} +
+ {{/for}} +
+{{/if}} +{{for data.emp_records}} + {{if value.name == data.currentTab}} +
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

+
+ {{for value.record :itemValue:itemIndex}} +
+
{{:itemValue.tab}}
+
{{:itemValue.val}}
+
+ {{/for}} +
+ {{/if}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/gps_access.tmpl b/nano/templates/gps_access.tmpl new file mode 100644 index 0000000000..21b61b767a --- /dev/null +++ b/nano/templates/gps_access.tmpl @@ -0,0 +1,66 @@ +

Integrated GPS

+ + +{{if data.gps_status.enabled}} +
+ Area: {{:data.gps_status.my_area_name}}, {{:data.gps_status.curr_z_name}}
+ GPS Coordinates: ({{:data.gps_status.curr_x}}, {{:data.gps_status.curr_y}}) +
+{{else}} +
+ Error: Location data unavailable. No sensors online! +
+{{/if}} + + +
+ {{for data.gps_access}} +
+
+ {{:index}}: {{:value.tag}} +
+
+ {{:helper.link('On', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Power", 'value' : "1"}, value.power ? 'selected' : null)}} + {{:helper.link('Off', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Power", 'value' : "0"}, value.power ? null : 'selected')}} + {{:helper.link('Edit Tag', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Tag", 'user' : data.user})}} + {{if value.power}} + {{if value.long_range}} +
+ + {{:helper.string("Long range scanning is {0}.", value.local_mode ? "disabled" : "active")}} + {{:helper.link('Enable', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Long_Range", 'value' : "0"}, value.long_range_en ? 'selected' : null)}} + {{:helper.link('Disable', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Long_Range", 'value' : "1"}, value.long_range_en ? null : 'selected')}} + {{/if}} + {{if value.can_hide}} +
+ {{:helper.string("{0}", value.hide_signal ? "Broadcasting location" : "Receiving only ")}} + {{:helper.link('Broadcast', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Hide_Signal", 'value' : "1"}, value.hide_signal ? 'selected' : null)}} + {{:helper.link('Receive', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Hide_Signal", 'value' : "0"}, value.hide_signal ? null : 'selected')}} + {{/if}} + {{/if}} +
+
+ {{empty}} + {{/for}} +
+ + +{{if data.gps_status.enabled}} +
+ {{for data.gps_signal}} +
+
+ {{:value.gps_tag}} +
+
+ Coordinates: ({{:value.x}}, {{:value.y}}) +
+ Area: {{:value.area_name}}, {{:value.z_name}} + {{if value.local}} + {{:helper.string("Distance: {0}m {1} - {2}m {3}, {4}m {5}", value.distance < 0 ? 0 : value.distance, value.direction, helper.abs(value.distY), ((value.distY > 0) ? "N" : "S"), helper.abs(value.distX), ((value.distX > 0) ? "E" : "W"))}} + {{/if}} +
+
+ {{/for}} +
+{{/if}} \ No newline at end of file diff --git a/nano/templates/janitorialLocator.tmpl b/nano/templates/janitorialLocator.tmpl new file mode 100644 index 0000000000..d476b7def4 --- /dev/null +++ b/nano/templates/janitorialLocator.tmpl @@ -0,0 +1,11 @@ +

Janitorial Supply Locator

+{{for data.janidata}} +
+
+ {{:value.field}} +
+
+ {{:value.val}} +
+
+{{/for}} \ No newline at end of file diff --git a/nano/templates/manifest.tmpl b/nano/templates/manifest.tmpl new file mode 100644 index 0000000000..00c45a1d5f --- /dev/null +++ b/nano/templates/manifest.tmpl @@ -0,0 +1,27 @@ + + +

Crew Manifest

+ +
+
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

+ +
+
+ {{for data.manifest}} + {{if value.elems.length}} + + {{for value.elems :itemValue:itemIndex}} + + + + + + {{/for}} + {{/if}} + {{/for}} +
{{:value.cat}}
{{:itemValue.name}}{{:itemValue.rank}}{{:itemValue.active}}
+
diff --git a/nano/templates/med_records.tmpl b/nano/templates/med_records.tmpl new file mode 100644 index 0000000000..f24339a779 --- /dev/null +++ b/nano/templates/med_records.tmpl @@ -0,0 +1,23 @@ +

Medical Records

+{{if data.currentTab == "0"}} +
+ {{for data.med_records}} +
+ {{:helper.link(value.name, '', {"switch_tab" : value.name})}} +
+ {{/for}} +
+{{/if}} +{{for data.med_records}} + {{if value.name == data.currentTab}} +
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

+
+ {{for value.record :itemValue:itemIndex}} +
+
{{:itemValue.tab}}
+
{{:itemValue.val}}
+
+ {{/for}} +
+ {{/if}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/merc_blast_door_control.tmpl b/nano/templates/merc_blast_door_control.tmpl new file mode 100644 index 0000000000..ec323ce081 --- /dev/null +++ b/nano/templates/merc_blast_door_control.tmpl @@ -0,0 +1,23 @@ +

Shuttle Blast Door Control

+ +
+ {{:helper.link('Open all doors', 'radio-on', {'cartridge_topic' : 1, 'all_blast_doors' : "open"})}} + {{:helper.link('Close all doors', 'radio-off', {'cartridge_topic' : 1, 'all_blast_doors' : "close"})}} +
+
+ {{:helper.link('Scan for doors', 'refresh', {'cartridge_topic' : 1, 'scan_blast_doors' : 1})}} +
+ +{{for data.blast_door}} +
+
+ {{:value.name}} #{{:index}} +
+
+ {{:helper.link('On', 'radio-on', {'cartridge_topic' : 1, 'toggle_blast_door' : value.ref}, value.open ? 'selected' : null)}} + {{:helper.link('Off', 'radio-off', {'cartridge_topic' : 1, 'toggle_blast_door' : value.ref}, value.open ? null : 'selected')}} +
+
+{{empty}} +

No doors detected!

+{{/for}} \ No newline at end of file diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 04ee2abfd9..e8911f7b9b 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -295,24 +295,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm {{else data.mode== 41}} -
-
- {{for data.manifest}} - {{if value.elems.length}} - - {{for value.elems :itemValue:itemIndex}} - - - - - - {{/for}} - {{/if}} - {{/for}} - - -
{{:value.cat}}
{{:itemValue.name}}{{:itemValue.rank}}{{:itemValue.active}}
-
+ {{#def.crewManifest}} {{else data.mode == 3}} diff --git a/nano/templates/sec_bot_access.tmpl b/nano/templates/sec_bot_access.tmpl new file mode 100644 index 0000000000..49214cb97f --- /dev/null +++ b/nano/templates/sec_bot_access.tmpl @@ -0,0 +1,36 @@ +

Security Bot Control

+ +{{if data.currentTab == 0}} + + +
+ Select A Bot. +
+
+ {{for data.sec_bot_access}} +
+ {{:helper.link(value.bot, 'gear', {'switch_tab' : value.bot})}} +
+ {{empty}} +

No bots found.

+ {{/for}} +
+ +{{else}} + + + {{for data.sec_bot_access}} + {{if value.bot == data.currentTab}} + {{for value.status :statVal:statIndex}} +
+
+ {{:statVal.tab}} +
+
+ {{:statVal.val}} +
+
+ {{/for}} + {{/if}} + {{/for}} +{{/if}} \ No newline at end of file diff --git a/nano/templates/sec_records.tmpl b/nano/templates/sec_records.tmpl new file mode 100644 index 0000000000..f644289061 --- /dev/null +++ b/nano/templates/sec_records.tmpl @@ -0,0 +1,23 @@ +

Security Records

+{{if data.currentTab == "0"}} +
+ {{for data.sec_records}} +
+ {{:helper.link(value.name, '', {"switch_tab" : value.name})}} +
+ {{/for}} +
+{{/if}} +{{for data.sec_records}} + {{if value.name == data.currentTab}} +
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

+
+ {{for value.record :itemValue:itemIndex}} +
+
{{:itemValue.tab}}
+
{{:itemValue.val}}
+
+ {{/for}} +
+ {{/if}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/signaler_access.tmpl b/nano/templates/signaler_access.tmpl new file mode 100644 index 0000000000..86220f07cb --- /dev/null +++ b/nano/templates/signaler_access.tmpl @@ -0,0 +1,24 @@ +

Signaler Control

+ + +{{for data.signaler_access}} +
+
+ {{:index}} +
+
+ {{:helper.link('Pulse', 'arrowstop-1-n', {'cartridge_topic' : "1", 'signaler_target' : value.ref, 'signaler_action' : "Pulse"})}} +
+
+ {{for value.status :statVal:statIndex}} +
+
+ {{:statVal.tab}} +
+
+
{{:statVal.val}}
+
{{:helper.link('Edit', 'gear', {'cartridge_topic' : "1", 'signaler_target' : value.ref, 'signaler_action' : "Edit", 'signaler_value' : statVal.tab, 'user' : data.user})}}
+
+
+ {{/for}} +{{/for}} \ No newline at end of file diff --git a/nano/templates/stat_display_access.tmpl b/nano/templates/stat_display_access.tmpl new file mode 100644 index 0000000000..20655bb709 --- /dev/null +++ b/nano/templates/stat_display_access.tmpl @@ -0,0 +1,57 @@ +

Station Status Display Interlink

+ +
+
+ Code +
+
+ {{:helper.link('Clear Message', 'trash', {'cartridge_topic' : "1", 'stat_display' : "blank"}, (data.stat_display.active == "blank") ? 'selected' : null)}} + {{:helper.link('Clear Alert', 'alert', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "default"}, (data.stat_display.active == "default") ? 'selected' : null)}} +
+
+
+
+ Message +
+
+ {{:helper.link('Shuttle ETA', 'gear', {'cartridge_topic' : "1", 'stat_display' : "shuttle"}, (data.stat_display.active == "shuttle") ? 'selected' : null)}} + {{:helper.link('Set Message', 'gear', {'cartridge_topic' : "1", 'stat_display' : "message"}, (data.stat_display.active == "message") ? 'selected' : null)}} +
+
+
+
+ Alert +
+
+ {{:helper.link('Red Alert', 'alert', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "redalert"}, (data.stat_display.active == "redalert") ? 'selected' : null)}} + {{:helper.link('Lockdown', 'caution', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "lockdown"}, (data.stat_display.active == "lockdown") ? 'selected' : null)}} + {{:helper.link('Biohazard', 'radiation', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "biohazard"}, (data.stat_display.active == "biohazard") ? 'selected' : null)}} +
+
+{{if data.stat_display.line1 != data.stat_display.active_line1 || data.stat_display.line2 != data.stat_display.active_line2}} +
+
+ Active Message: +
+
+ {{:data.stat_display.active_line1}}
+ {{:data.stat_display.active_line2}} +
+
+{{/if}} +
+
+ Stored line 1 +
+
+ {{:helper.link(data.stat_display.line1 + ' (set)', 'pencil', {'cartridge_topic' : "1", 'stat_display' : "setmsg", 'line' : "1"}, null, null)}} +
+
+
+
+ Stored line 2 +
+
+ {{:helper.link(data.stat_display.line2 + ' (set)', 'pencil', {'cartridge_topic' : "1", 'stat_display' : "setmsg", 'line' : "2"}, null, null)}} +
+
diff --git a/nano/templates/supply_records.tmpl b/nano/templates/supply_records.tmpl new file mode 100644 index 0000000000..8a8a749bd2 --- /dev/null +++ b/nano/templates/supply_records.tmpl @@ -0,0 +1,226 @@ +

Supply Records

+ + +
+ + Supply points: {{:data.supply_points}}
+ + +
+

Supply Shuttle

+
+ Location:
+ Engines: +
+
+ {{:data.shuttle.location}}
+ {{:data.shuttle.engine}} +
+ {{if data.shuttle.mode == 4}} +
+ ETA: +
+
+ {{:data.shuttle.time}} minutes +
+ {{/if}} + {{if data.shuttle_auth}} + + {{if data.shuttle.launch == 1 && data.shuttle.mode == 0}} + {{:helper.link('Send away', 'suitcase', {'send_shuttle' : 'send_away'})}} + {{else data.shuttle.launch == 2 && (data.shuttle.mode == 3 || data.shuttle.mode == 1)}} + {{:helper.link('Cancel launch', 'stop', {'send_shuttle' : 'cancel_shuttle'})}} + {{else data.shuttle.launch == 1 && data.shuttle.mode == 5}} + {{:helper.link('Send shuttle', 'suitcase', {'send_shuttle' : 'send_to_station'})}} + {{/if}} + {{if data.shuttle.force}} + {{:helper.link('Force launch', 'alert', {'send_shuttle' : 'force_shuttle'})}} + {{/if}} + {{/if}} +
+
+ + +{{if data.currentTab == 0}} +
+ +
+ {{:helper.link('Request items', 'note', {'switch_tab' : 1})}} +
+ + +
+ {{:helper.link('View accepted orders', 'cart', {'switch_tab' : "Approved"})}} +
+ + +
+ {{:helper.link('View pending requests', 'cart', {'switch_tab' : "Requested"})}} +
+ + + {{:helper.link('View order history', 'document', {'switch_tab' : "All"})}} + + +
+ {{:helper.link('View export history', 'document', {'switch_tab' : "Export"})}} +
+
+ +{{else}} + {{:helper.link('Back to menu', 'arrowreturn-1-w', {'switch_tab' : 0})}} + + + + {{if data.currentTab == 1}} + {{for data.categories}} +
+ {{:helper.link(value, 'bookmark', {'switch_tab' : value, 'active_category' : value})}} +
+ {{/for}} + + + {{else data.currentTab == "Export"}} +

Exported Crates

+ {{for data.receipts}} +
+
+ {{for value.title :titleVal:titleIndex}} +
+ {{:titleVal.field}} +
+
+ {{:titleVal.entry}} + {{if data.order_auth}} + + {{:helper.link('Edit', 'wrench', {'order_ref' : value.ref, 'edit' : titleVal.field, 'default' : titleVal.entry, 'user' : data.user})}} + + {{/if}} +
+ {{/for}} + + {{if value.error}} +
+ + Error + +
+
+ {{:value.error}} +
+ {{else}} + {{for value.contents :contentVal:contentIndex}} +
+ {{:contentVal.quantity}}x {{:contentVal.object}} - {{:contentVal.value}} points +
+ {{if data.order_auth}} +
+ {{:helper.link('Edit Quantity','wrench', {'export_ref' : value.ref, 'edit' : 1, 'default' : contentVal.quantity, 'index' : contentIndex, 'user' : data.user})}} + {{:helper.link('Delete Entry', 'trash', {'export_ref' : value.ref, 'delete' : 1, 'index' : contentIndex, 'user' : data.user})}} +
+ {{/if}} + {{/for}} + {{/if}} + + {{if data.order_auth}} +
{{:helper.link('Add item to record', 'plus', {'export_ref' : value.ref, 'add_item' : 1, 'user' : data.user})}} +
{{:helper.link('Delete record', 'trash', {'export_ref' : value.ref, 'delete' : 1, 'user' : data.user})}} + {{/if}} +
+ {{empty}} +
No receipts on record!
+ {{/for}} + + + + + + {{else data.currentTab == "Approved" || data.currentTab == "Requested" || data.currentTab == "All"}} +

{{:data.currentTab}} Orders

+ {{for data.orders}} + {{if (value.status == data.currentTab) || (data.currentTab == "All")}} +
+
+ {{for value.entries :entryVal:entryIndex}} + + {{if entryVal.entry}} +
+ {{:entryVal.field}} +
+
+ {{:entryVal.entry}} + {{if data.order_auth}} + + {{:helper.link('Edit', 'wrench', {'order_ref' : value.ref, 'edit' : entryVal.field, 'default' : entryVal.entry, 'user' : data.user})}} + + {{/if}} +
+ {{/if}} + {{/for}} + + {{if data.currentTab == "All"}} +
+ Status +
+
+ {{:value.status}} +
+ {{if data.order_auth}} +
{{:helper.link('Delete record', 'trash', {'order_ref' : value.ref, 'delete' : 1, 'user' : data.user})}} + {{/if}} + {{/if}} + + {{if data.order_auth && data.currentTab == "Requested"}} + {{:helper.link('Approve', 'check', {'order_ref' : value.ref, 'approve' : 1, 'user' : data.user})}} + {{:helper.link('Deny', 'cancel', {'order_ref' : value.ref, 'deny' : 1, 'user' : data.user})}} + {{/if}} +
+ {{/if}} + {{empty}} +
No orders on record!
+ {{/for}} + + {{if data.currentTab == "Requested" && data.order_auth}} + {{:helper.link('Clear all requests', 'trash', {'clear_all_requests' : 1, 'user' : data.user})}} + {{/if}} + + + + {{else}} +
+ {{:helper.link('Back to categories', 'arrow-return-1-w', {'switch_tab' : 1})}} +
+ +

+ {{:data.active_category}} +

+ + {{for data.supply_packs :packValue:packIndex}} + {{if !packValue.contraband || data.contraband}} +
+ + {{:helper.link(packValue.name + ' - ' + packValue.cost, packValue.expand ? 'folder-open' : 'folder-collapsed', {'cartridge_topic' : 1, 'pack_ref' : packValue.ref, 'expand' : 1})}} +
+ + {{if packValue.expand}} +
+
+ {{if packValue.random}} + Contains any {{:packValue.random}} of:
+ {{/if}} + + {{for packValue.manifest :manifestElem:manifestIndex}} + {{:manifestElem}}
+ {{/for}} +
+ +
+ {{:helper.link('Request', 'cart', {'cartridge_topic' : 1, 'pack_ref' : packValue.ref, 'request' : 1, 'user' : data.user})}} +
+
+
+ {{/if}} + {{/if}} + {{/for}} + {{/if}} +{{/if}} \ No newline at end of file diff --git a/sound/ambience/ambimalf.ogg b/sound/ambience/ai/ai1.ogg similarity index 100% rename from sound/ambience/ambimalf.ogg rename to sound/ambience/ai/ai1.ogg diff --git a/sound/ambience/ambigen2.ogg b/sound/ambience/ambigen2.ogg deleted file mode 100644 index 6a5a2d27c9..0000000000 Binary files a/sound/ambience/ambigen2.ogg and /dev/null differ diff --git a/sound/ambience/ambigen1.ogg b/sound/ambience/arrivals/arrivals1.ogg similarity index 100% rename from sound/ambience/ambigen1.ogg rename to sound/ambience/arrivals/arrivals1.ogg diff --git a/sound/ambience/ambigen14.ogg b/sound/ambience/arrivals/arrivals2.ogg similarity index 100% rename from sound/ambience/ambigen14.ogg rename to sound/ambience/arrivals/arrivals2.ogg diff --git a/sound/ambience/ambicha1.ogg b/sound/ambience/chapel/chapel1.ogg similarity index 100% rename from sound/ambience/ambicha1.ogg rename to sound/ambience/chapel/chapel1.ogg diff --git a/sound/ambience/ambicha2.ogg b/sound/ambience/chapel/chapel2.ogg similarity index 100% rename from sound/ambience/ambicha2.ogg rename to sound/ambience/chapel/chapel2.ogg diff --git a/sound/ambience/ambicha3.ogg b/sound/ambience/chapel/chapel3.ogg similarity index 100% rename from sound/ambience/ambicha3.ogg rename to sound/ambience/chapel/chapel3.ogg diff --git a/sound/ambience/ambicha4.ogg b/sound/ambience/chapel/chapel4.ogg similarity index 100% rename from sound/ambience/ambicha4.ogg rename to sound/ambience/chapel/chapel4.ogg diff --git a/sound/ambience/engineering/engineering1.ogg b/sound/ambience/engineering/engineering1.ogg new file mode 100644 index 0000000000..c832c677d5 Binary files /dev/null and b/sound/ambience/engineering/engineering1.ogg differ diff --git a/sound/ambience/engineering/engineering2.ogg b/sound/ambience/engineering/engineering2.ogg new file mode 100644 index 0000000000..9651049c25 Binary files /dev/null and b/sound/ambience/engineering/engineering2.ogg differ diff --git a/sound/ambience/engineering/engineering3.ogg b/sound/ambience/engineering/engineering3.ogg new file mode 100644 index 0000000000..63afd437a6 Binary files /dev/null and b/sound/ambience/engineering/engineering3.ogg differ diff --git a/sound/ambience/foreboding/foreboding1.ogg b/sound/ambience/foreboding/foreboding1.ogg new file mode 100644 index 0000000000..b6e65c0bf6 Binary files /dev/null and b/sound/ambience/foreboding/foreboding1.ogg differ diff --git a/sound/ambience/foreboding/foreboding2.ogg b/sound/ambience/foreboding/foreboding2.ogg new file mode 100644 index 0000000000..dde64a9858 Binary files /dev/null and b/sound/ambience/foreboding/foreboding2.ogg differ diff --git a/sound/ambience/ambigen3.ogg b/sound/ambience/generic/generic1.ogg similarity index 100% rename from sound/ambience/ambigen3.ogg rename to sound/ambience/generic/generic1.ogg diff --git a/sound/ambience/ambigen4.ogg b/sound/ambience/generic/generic2.ogg similarity index 100% rename from sound/ambience/ambigen4.ogg rename to sound/ambience/generic/generic2.ogg diff --git a/sound/ambience/ambigen5.ogg b/sound/ambience/generic/generic3.ogg similarity index 100% rename from sound/ambience/ambigen5.ogg rename to sound/ambience/generic/generic3.ogg diff --git a/sound/ambience/ambigen6.ogg b/sound/ambience/generic/generic4.ogg similarity index 100% rename from sound/ambience/ambigen6.ogg rename to sound/ambience/generic/generic4.ogg diff --git a/sound/ambience/ambimo1.ogg b/sound/ambience/ghostly/ghostly1.ogg similarity index 100% rename from sound/ambience/ambimo1.ogg rename to sound/ambience/ghostly/ghostly1.ogg diff --git a/sound/ambience/ambimo2.ogg b/sound/ambience/ghostly/ghostly2.ogg similarity index 100% rename from sound/ambience/ambimo2.ogg rename to sound/ambience/ghostly/ghostly2.ogg diff --git a/sound/ambience/highsec/highsec1.ogg b/sound/ambience/highsec/highsec1.ogg new file mode 100644 index 0000000000..265b51f2c9 Binary files /dev/null and b/sound/ambience/highsec/highsec1.ogg differ diff --git a/sound/ambience/highsec/highsec2.ogg b/sound/ambience/highsec/highsec2.ogg new file mode 100644 index 0000000000..761c63a480 Binary files /dev/null and b/sound/ambience/highsec/highsec2.ogg differ diff --git a/sound/ambience/holy/holy1.ogg b/sound/ambience/holy/holy1.ogg new file mode 100644 index 0000000000..cd53dc2789 Binary files /dev/null and b/sound/ambience/holy/holy1.ogg differ diff --git a/sound/ambience/holy/holy2.ogg b/sound/ambience/holy/holy2.ogg new file mode 100644 index 0000000000..4532dd0a81 Binary files /dev/null and b/sound/ambience/holy/holy2.ogg differ diff --git a/sound/ambience/lava/lava1.ogg b/sound/ambience/lava/lava1.ogg new file mode 100644 index 0000000000..b552965faa Binary files /dev/null and b/sound/ambience/lava/lava1.ogg differ diff --git a/sound/ambience/ambigen7.ogg b/sound/ambience/maintenance/maintenance1.ogg similarity index 100% rename from sound/ambience/ambigen7.ogg rename to sound/ambience/maintenance/maintenance1.ogg diff --git a/sound/ambience/ambigen8.ogg b/sound/ambience/maintenance/maintenance2.ogg similarity index 100% rename from sound/ambience/ambigen8.ogg rename to sound/ambience/maintenance/maintenance2.ogg diff --git a/sound/ambience/ambigen9.ogg b/sound/ambience/maintenance/maintenance3.ogg similarity index 100% rename from sound/ambience/ambigen9.ogg rename to sound/ambience/maintenance/maintenance3.ogg diff --git a/sound/ambience/ambigen10.ogg b/sound/ambience/maintenance/maintenance4.ogg similarity index 100% rename from sound/ambience/ambigen10.ogg rename to sound/ambience/maintenance/maintenance4.ogg diff --git a/sound/ambience/ambigen11.ogg b/sound/ambience/maintenance/maintenance5.ogg similarity index 100% rename from sound/ambience/ambigen11.ogg rename to sound/ambience/maintenance/maintenance5.ogg diff --git a/sound/ambience/ambigen12.ogg b/sound/ambience/maintenance/maintenance6.ogg similarity index 100% rename from sound/ambience/ambigen12.ogg rename to sound/ambience/maintenance/maintenance6.ogg diff --git a/sound/ambience/otherworldly/otherworldly1.ogg b/sound/ambience/otherworldly/otherworldly1.ogg new file mode 100644 index 0000000000..77599fac5b Binary files /dev/null and b/sound/ambience/otherworldly/otherworldly1.ogg differ diff --git a/sound/ambience/otherworldly/otherworldly2.ogg b/sound/ambience/otherworldly/otherworldly2.ogg new file mode 100644 index 0000000000..3bc051cf5a Binary files /dev/null and b/sound/ambience/otherworldly/otherworldly2.ogg differ diff --git a/sound/ambience/otherworldly/otherworldly3.ogg b/sound/ambience/otherworldly/otherworldly3.ogg new file mode 100644 index 0000000000..3ef1211897 Binary files /dev/null and b/sound/ambience/otherworldly/otherworldly3.ogg differ diff --git a/sound/ambience/ruins/ruins1.ogg b/sound/ambience/ruins/ruins1.ogg new file mode 100644 index 0000000000..ff4cef4a41 Binary files /dev/null and b/sound/ambience/ruins/ruins1.ogg differ diff --git a/sound/ambience/ruins/ruins2.ogg b/sound/ambience/ruins/ruins2.ogg new file mode 100644 index 0000000000..2dc408e2b6 Binary files /dev/null and b/sound/ambience/ruins/ruins2.ogg differ diff --git a/sound/ambience/ruins/ruins3.ogg b/sound/ambience/ruins/ruins3.ogg new file mode 100644 index 0000000000..ad56a915f9 Binary files /dev/null and b/sound/ambience/ruins/ruins3.ogg differ diff --git a/sound/ambience/ruins/ruins4.ogg b/sound/ambience/ruins/ruins4.ogg new file mode 100644 index 0000000000..2073b5a277 Binary files /dev/null and b/sound/ambience/ruins/ruins4.ogg differ diff --git a/sound/ambience/ruins/ruins5.ogg b/sound/ambience/ruins/ruins5.ogg new file mode 100644 index 0000000000..4b6c79a72d Binary files /dev/null and b/sound/ambience/ruins/ruins5.ogg differ diff --git a/sound/ambience/ruins/ruins6.ogg b/sound/ambience/ruins/ruins6.ogg new file mode 100644 index 0000000000..ed88fcd52d Binary files /dev/null and b/sound/ambience/ruins/ruins6.ogg differ diff --git a/sound/ambience/seag1.ogg b/sound/ambience/seag1.ogg deleted file mode 100644 index 8b26eeefc4..0000000000 Binary files a/sound/ambience/seag1.ogg and /dev/null differ diff --git a/sound/ambience/seag2.ogg b/sound/ambience/seag2.ogg deleted file mode 100644 index b0c714b77b..0000000000 Binary files a/sound/ambience/seag2.ogg and /dev/null differ diff --git a/sound/ambience/seag3.ogg b/sound/ambience/seag3.ogg deleted file mode 100644 index 6385e87e1d..0000000000 Binary files a/sound/ambience/seag3.ogg and /dev/null differ diff --git a/sound/ambience/shore.ogg b/sound/ambience/shore.ogg deleted file mode 100644 index d3edf17961..0000000000 Binary files a/sound/ambience/shore.ogg and /dev/null differ diff --git a/sound/ambience/sif/sif1.ogg b/sound/ambience/sif/sif1.ogg new file mode 100644 index 0000000000..6ce351521b Binary files /dev/null and b/sound/ambience/sif/sif1.ogg differ diff --git a/sound/ambience/space/space1.ogg b/sound/ambience/space/space1.ogg new file mode 100644 index 0000000000..44b4c62c36 Binary files /dev/null and b/sound/ambience/space/space1.ogg differ diff --git a/sound/ambience/serspaceamb1.ogg b/sound/ambience/space/space_serithi.ogg similarity index 100% rename from sound/ambience/serspaceamb1.ogg rename to sound/ambience/space/space_serithi.ogg diff --git a/sound/ambience/tech_ruins/tech_ruins1.ogg b/sound/ambience/tech_ruins/tech_ruins1.ogg new file mode 100644 index 0000000000..5f21514e5c Binary files /dev/null and b/sound/ambience/tech_ruins/tech_ruins1.ogg differ diff --git a/sound/ambience/tech_ruins/tech_ruins2.ogg b/sound/ambience/tech_ruins/tech_ruins2.ogg new file mode 100644 index 0000000000..bd6428bff3 Binary files /dev/null and b/sound/ambience/tech_ruins/tech_ruins2.ogg differ diff --git a/sound/ambience/tech_ruins/tech_ruins3.ogg b/sound/ambience/tech_ruins/tech_ruins3.ogg new file mode 100644 index 0000000000..effd23b132 Binary files /dev/null and b/sound/ambience/tech_ruins/tech_ruins3.ogg differ diff --git a/sound/ambience/unholy/unholy1.ogg b/sound/ambience/unholy/unholy1.ogg new file mode 100644 index 0000000000..d78dc46a4c Binary files /dev/null and b/sound/ambience/unholy/unholy1.ogg differ diff --git a/sound/ambience/vaporwave.ogg b/sound/ambience/vaporwave.ogg new file mode 100644 index 0000000000..4374f46710 Binary files /dev/null and b/sound/ambience/vaporwave.ogg differ diff --git a/sound/effects/thunder/thunder1.ogg b/sound/effects/thunder/thunder1.ogg new file mode 100644 index 0000000000..7ec34e88e8 Binary files /dev/null and b/sound/effects/thunder/thunder1.ogg differ diff --git a/sound/effects/thunder/thunder10.ogg b/sound/effects/thunder/thunder10.ogg new file mode 100644 index 0000000000..43aefb098f Binary files /dev/null and b/sound/effects/thunder/thunder10.ogg differ diff --git a/sound/effects/thunder/thunder2.ogg b/sound/effects/thunder/thunder2.ogg new file mode 100644 index 0000000000..bc2f581dda Binary files /dev/null and b/sound/effects/thunder/thunder2.ogg differ diff --git a/sound/effects/thunder/thunder3.ogg b/sound/effects/thunder/thunder3.ogg new file mode 100644 index 0000000000..0df287aa78 Binary files /dev/null and b/sound/effects/thunder/thunder3.ogg differ diff --git a/sound/effects/thunder/thunder4.ogg b/sound/effects/thunder/thunder4.ogg new file mode 100644 index 0000000000..6c671b8010 Binary files /dev/null and b/sound/effects/thunder/thunder4.ogg differ diff --git a/sound/effects/thunder/thunder5.ogg b/sound/effects/thunder/thunder5.ogg new file mode 100644 index 0000000000..3d5187a716 Binary files /dev/null and b/sound/effects/thunder/thunder5.ogg differ diff --git a/sound/effects/thunder/thunder6.ogg b/sound/effects/thunder/thunder6.ogg new file mode 100644 index 0000000000..65aef886ff Binary files /dev/null and b/sound/effects/thunder/thunder6.ogg differ diff --git a/sound/effects/thunder/thunder7.ogg b/sound/effects/thunder/thunder7.ogg new file mode 100644 index 0000000000..b72848a2b6 Binary files /dev/null and b/sound/effects/thunder/thunder7.ogg differ diff --git a/sound/effects/thunder/thunder8.ogg b/sound/effects/thunder/thunder8.ogg new file mode 100644 index 0000000000..a25fe21e32 Binary files /dev/null and b/sound/effects/thunder/thunder8.ogg differ diff --git a/sound/effects/thunder/thunder9.ogg b/sound/effects/thunder/thunder9.ogg new file mode 100644 index 0000000000..9ebc1045bf Binary files /dev/null and b/sound/effects/thunder/thunder9.ogg differ diff --git a/sound/instruments/piano/Ab2.ogg b/sound/instruments/piano/Ab2.ogg new file mode 100644 index 0000000000..22591b0f2a Binary files /dev/null and b/sound/instruments/piano/Ab2.ogg differ diff --git a/sound/instruments/piano/Ab3.ogg b/sound/instruments/piano/Ab3.ogg new file mode 100644 index 0000000000..149fa26c89 Binary files /dev/null and b/sound/instruments/piano/Ab3.ogg differ diff --git a/sound/instruments/piano/Ab4.ogg b/sound/instruments/piano/Ab4.ogg new file mode 100644 index 0000000000..5a64cb10f8 Binary files /dev/null and b/sound/instruments/piano/Ab4.ogg differ diff --git a/sound/instruments/piano/Ab5.ogg b/sound/instruments/piano/Ab5.ogg new file mode 100644 index 0000000000..8635b8a624 Binary files /dev/null and b/sound/instruments/piano/Ab5.ogg differ diff --git a/sound/instruments/piano/Ab6.ogg b/sound/instruments/piano/Ab6.ogg new file mode 100644 index 0000000000..b771a29f27 Binary files /dev/null and b/sound/instruments/piano/Ab6.ogg differ diff --git a/sound/instruments/piano/Ab7.ogg b/sound/instruments/piano/Ab7.ogg new file mode 100644 index 0000000000..ff98fb05a8 Binary files /dev/null and b/sound/instruments/piano/Ab7.ogg differ diff --git a/sound/instruments/piano/Ab8.ogg b/sound/instruments/piano/Ab8.ogg new file mode 100644 index 0000000000..aca8ed4d4f Binary files /dev/null and b/sound/instruments/piano/Ab8.ogg differ diff --git a/sound/instruments/piano/An1.ogg b/sound/instruments/piano/An1.ogg new file mode 100644 index 0000000000..72c3a64360 Binary files /dev/null and b/sound/instruments/piano/An1.ogg differ diff --git a/sound/instruments/piano/An2.ogg b/sound/instruments/piano/An2.ogg new file mode 100644 index 0000000000..b92232621c Binary files /dev/null and b/sound/instruments/piano/An2.ogg differ diff --git a/sound/instruments/piano/An3.ogg b/sound/instruments/piano/An3.ogg new file mode 100644 index 0000000000..f4fa9a1e72 Binary files /dev/null and b/sound/instruments/piano/An3.ogg differ diff --git a/sound/instruments/piano/An4.ogg b/sound/instruments/piano/An4.ogg new file mode 100644 index 0000000000..6946e13516 Binary files /dev/null and b/sound/instruments/piano/An4.ogg differ diff --git a/sound/instruments/piano/An5.ogg b/sound/instruments/piano/An5.ogg new file mode 100644 index 0000000000..322cc3b4c5 Binary files /dev/null and b/sound/instruments/piano/An5.ogg differ diff --git a/sound/instruments/piano/An6.ogg b/sound/instruments/piano/An6.ogg new file mode 100644 index 0000000000..7a561af80e Binary files /dev/null and b/sound/instruments/piano/An6.ogg differ diff --git a/sound/instruments/piano/An7.ogg b/sound/instruments/piano/An7.ogg new file mode 100644 index 0000000000..5e935dfe3c Binary files /dev/null and b/sound/instruments/piano/An7.ogg differ diff --git a/sound/instruments/piano/An8.ogg b/sound/instruments/piano/An8.ogg new file mode 100644 index 0000000000..b70ba0b901 Binary files /dev/null and b/sound/instruments/piano/An8.ogg differ diff --git a/sound/instruments/piano/Bb1.ogg b/sound/instruments/piano/Bb1.ogg new file mode 100644 index 0000000000..d66d6b2f01 Binary files /dev/null and b/sound/instruments/piano/Bb1.ogg differ diff --git a/sound/instruments/piano/Bb2.ogg b/sound/instruments/piano/Bb2.ogg new file mode 100644 index 0000000000..c75195976c Binary files /dev/null and b/sound/instruments/piano/Bb2.ogg differ diff --git a/sound/instruments/piano/Bb3.ogg b/sound/instruments/piano/Bb3.ogg new file mode 100644 index 0000000000..648c8b3717 Binary files /dev/null and b/sound/instruments/piano/Bb3.ogg differ diff --git a/sound/instruments/piano/Bb4.ogg b/sound/instruments/piano/Bb4.ogg new file mode 100644 index 0000000000..aa842dd3ed Binary files /dev/null and b/sound/instruments/piano/Bb4.ogg differ diff --git a/sound/instruments/piano/Bb5.ogg b/sound/instruments/piano/Bb5.ogg new file mode 100644 index 0000000000..0ae78e81e6 Binary files /dev/null and b/sound/instruments/piano/Bb5.ogg differ diff --git a/sound/instruments/piano/Bb6.ogg b/sound/instruments/piano/Bb6.ogg new file mode 100644 index 0000000000..172f63f3f4 Binary files /dev/null and b/sound/instruments/piano/Bb6.ogg differ diff --git a/sound/instruments/piano/Bb7.ogg b/sound/instruments/piano/Bb7.ogg new file mode 100644 index 0000000000..d1240c623d Binary files /dev/null and b/sound/instruments/piano/Bb7.ogg differ diff --git a/sound/instruments/piano/Bb8.ogg b/sound/instruments/piano/Bb8.ogg new file mode 100644 index 0000000000..53eff2867d Binary files /dev/null and b/sound/instruments/piano/Bb8.ogg differ diff --git a/sound/instruments/piano/Bn1.ogg b/sound/instruments/piano/Bn1.ogg new file mode 100644 index 0000000000..1af185c0e8 Binary files /dev/null and b/sound/instruments/piano/Bn1.ogg differ diff --git a/sound/instruments/piano/Bn2.ogg b/sound/instruments/piano/Bn2.ogg new file mode 100644 index 0000000000..acd03a4f1d Binary files /dev/null and b/sound/instruments/piano/Bn2.ogg differ diff --git a/sound/instruments/piano/Bn3.ogg b/sound/instruments/piano/Bn3.ogg new file mode 100644 index 0000000000..61a8d157b7 Binary files /dev/null and b/sound/instruments/piano/Bn3.ogg differ diff --git a/sound/instruments/piano/Bn4.ogg b/sound/instruments/piano/Bn4.ogg new file mode 100644 index 0000000000..e38b9eec56 Binary files /dev/null and b/sound/instruments/piano/Bn4.ogg differ diff --git a/sound/instruments/piano/Bn5.ogg b/sound/instruments/piano/Bn5.ogg new file mode 100644 index 0000000000..4759c0f825 Binary files /dev/null and b/sound/instruments/piano/Bn5.ogg differ diff --git a/sound/instruments/piano/Bn6.ogg b/sound/instruments/piano/Bn6.ogg new file mode 100644 index 0000000000..0282535a01 Binary files /dev/null and b/sound/instruments/piano/Bn6.ogg differ diff --git a/sound/instruments/piano/Bn7.ogg b/sound/instruments/piano/Bn7.ogg new file mode 100644 index 0000000000..57334fba24 Binary files /dev/null and b/sound/instruments/piano/Bn7.ogg differ diff --git a/sound/instruments/piano/Bn8.ogg b/sound/instruments/piano/Bn8.ogg new file mode 100644 index 0000000000..5d723d196d Binary files /dev/null and b/sound/instruments/piano/Bn8.ogg differ diff --git a/sound/instruments/piano/Cn2.ogg b/sound/instruments/piano/Cn2.ogg new file mode 100644 index 0000000000..251c3bd1f2 Binary files /dev/null and b/sound/instruments/piano/Cn2.ogg differ diff --git a/sound/instruments/piano/Cn3.ogg b/sound/instruments/piano/Cn3.ogg new file mode 100644 index 0000000000..66286e5e71 Binary files /dev/null and b/sound/instruments/piano/Cn3.ogg differ diff --git a/sound/instruments/piano/Cn4.ogg b/sound/instruments/piano/Cn4.ogg new file mode 100644 index 0000000000..e271c7e4b0 Binary files /dev/null and b/sound/instruments/piano/Cn4.ogg differ diff --git a/sound/instruments/piano/Cn5.ogg b/sound/instruments/piano/Cn5.ogg new file mode 100644 index 0000000000..375987640d Binary files /dev/null and b/sound/instruments/piano/Cn5.ogg differ diff --git a/sound/instruments/piano/Cn6.ogg b/sound/instruments/piano/Cn6.ogg new file mode 100644 index 0000000000..1c675eb73e Binary files /dev/null and b/sound/instruments/piano/Cn6.ogg differ diff --git a/sound/instruments/piano/Cn7.ogg b/sound/instruments/piano/Cn7.ogg new file mode 100644 index 0000000000..8d87e17a64 Binary files /dev/null and b/sound/instruments/piano/Cn7.ogg differ diff --git a/sound/instruments/piano/Cn8.ogg b/sound/instruments/piano/Cn8.ogg new file mode 100644 index 0000000000..bdb8a046b6 Binary files /dev/null and b/sound/instruments/piano/Cn8.ogg differ diff --git a/sound/instruments/piano/Cn9.ogg b/sound/instruments/piano/Cn9.ogg new file mode 100644 index 0000000000..09ce034cd8 Binary files /dev/null and b/sound/instruments/piano/Cn9.ogg differ diff --git a/sound/instruments/piano/Db2.ogg b/sound/instruments/piano/Db2.ogg new file mode 100644 index 0000000000..840ffd49b5 Binary files /dev/null and b/sound/instruments/piano/Db2.ogg differ diff --git a/sound/instruments/piano/Db3.ogg b/sound/instruments/piano/Db3.ogg new file mode 100644 index 0000000000..d286473854 Binary files /dev/null and b/sound/instruments/piano/Db3.ogg differ diff --git a/sound/instruments/piano/Db4.ogg b/sound/instruments/piano/Db4.ogg new file mode 100644 index 0000000000..adffd15837 Binary files /dev/null and b/sound/instruments/piano/Db4.ogg differ diff --git a/sound/instruments/piano/Db5.ogg b/sound/instruments/piano/Db5.ogg new file mode 100644 index 0000000000..1c43e84804 Binary files /dev/null and b/sound/instruments/piano/Db5.ogg differ diff --git a/sound/instruments/piano/Db6.ogg b/sound/instruments/piano/Db6.ogg new file mode 100644 index 0000000000..92bd1d2aa6 Binary files /dev/null and b/sound/instruments/piano/Db6.ogg differ diff --git a/sound/instruments/piano/Db7.ogg b/sound/instruments/piano/Db7.ogg new file mode 100644 index 0000000000..72c34b0f6e Binary files /dev/null and b/sound/instruments/piano/Db7.ogg differ diff --git a/sound/instruments/piano/Db8.ogg b/sound/instruments/piano/Db8.ogg new file mode 100644 index 0000000000..4984f3da6f Binary files /dev/null and b/sound/instruments/piano/Db8.ogg differ diff --git a/sound/instruments/piano/Dn2.ogg b/sound/instruments/piano/Dn2.ogg new file mode 100644 index 0000000000..1d3b39a0f7 Binary files /dev/null and b/sound/instruments/piano/Dn2.ogg differ diff --git a/sound/instruments/piano/Dn3.ogg b/sound/instruments/piano/Dn3.ogg new file mode 100644 index 0000000000..36aa1e3e98 Binary files /dev/null and b/sound/instruments/piano/Dn3.ogg differ diff --git a/sound/instruments/piano/Dn4.ogg b/sound/instruments/piano/Dn4.ogg new file mode 100644 index 0000000000..89e64a10b6 Binary files /dev/null and b/sound/instruments/piano/Dn4.ogg differ diff --git a/sound/instruments/piano/Dn5.ogg b/sound/instruments/piano/Dn5.ogg new file mode 100644 index 0000000000..0e928f4613 Binary files /dev/null and b/sound/instruments/piano/Dn5.ogg differ diff --git a/sound/instruments/piano/Dn6.ogg b/sound/instruments/piano/Dn6.ogg new file mode 100644 index 0000000000..8413e46635 Binary files /dev/null and b/sound/instruments/piano/Dn6.ogg differ diff --git a/sound/instruments/piano/Dn7.ogg b/sound/instruments/piano/Dn7.ogg new file mode 100644 index 0000000000..4516a46bc4 Binary files /dev/null and b/sound/instruments/piano/Dn7.ogg differ diff --git a/sound/instruments/piano/Dn8.ogg b/sound/instruments/piano/Dn8.ogg new file mode 100644 index 0000000000..348c690fef Binary files /dev/null and b/sound/instruments/piano/Dn8.ogg differ diff --git a/sound/instruments/piano/Eb2.ogg b/sound/instruments/piano/Eb2.ogg new file mode 100644 index 0000000000..b300b39eb9 Binary files /dev/null and b/sound/instruments/piano/Eb2.ogg differ diff --git a/sound/instruments/piano/Eb3.ogg b/sound/instruments/piano/Eb3.ogg new file mode 100644 index 0000000000..879b6907fc Binary files /dev/null and b/sound/instruments/piano/Eb3.ogg differ diff --git a/sound/instruments/piano/Eb4.ogg b/sound/instruments/piano/Eb4.ogg new file mode 100644 index 0000000000..e2d57556db Binary files /dev/null and b/sound/instruments/piano/Eb4.ogg differ diff --git a/sound/instruments/piano/Eb5.ogg b/sound/instruments/piano/Eb5.ogg new file mode 100644 index 0000000000..6eec439bf8 Binary files /dev/null and b/sound/instruments/piano/Eb5.ogg differ diff --git a/sound/instruments/piano/Eb6.ogg b/sound/instruments/piano/Eb6.ogg new file mode 100644 index 0000000000..80b4952ab9 Binary files /dev/null and b/sound/instruments/piano/Eb6.ogg differ diff --git a/sound/instruments/piano/Eb7.ogg b/sound/instruments/piano/Eb7.ogg new file mode 100644 index 0000000000..e88eec4fec Binary files /dev/null and b/sound/instruments/piano/Eb7.ogg differ diff --git a/sound/instruments/piano/Eb8.ogg b/sound/instruments/piano/Eb8.ogg new file mode 100644 index 0000000000..cb7b3efdfd Binary files /dev/null and b/sound/instruments/piano/Eb8.ogg differ diff --git a/sound/instruments/piano/En2.ogg b/sound/instruments/piano/En2.ogg new file mode 100644 index 0000000000..0f5e8a073d Binary files /dev/null and b/sound/instruments/piano/En2.ogg differ diff --git a/sound/instruments/piano/En3.ogg b/sound/instruments/piano/En3.ogg new file mode 100644 index 0000000000..f24b26bf06 Binary files /dev/null and b/sound/instruments/piano/En3.ogg differ diff --git a/sound/instruments/piano/En4.ogg b/sound/instruments/piano/En4.ogg new file mode 100644 index 0000000000..eb409d0e09 Binary files /dev/null and b/sound/instruments/piano/En4.ogg differ diff --git a/sound/instruments/piano/En5.ogg b/sound/instruments/piano/En5.ogg new file mode 100644 index 0000000000..cd83f438d2 Binary files /dev/null and b/sound/instruments/piano/En5.ogg differ diff --git a/sound/instruments/piano/En6.ogg b/sound/instruments/piano/En6.ogg new file mode 100644 index 0000000000..62a0361284 Binary files /dev/null and b/sound/instruments/piano/En6.ogg differ diff --git a/sound/instruments/piano/En7.ogg b/sound/instruments/piano/En7.ogg new file mode 100644 index 0000000000..c1072ade23 Binary files /dev/null and b/sound/instruments/piano/En7.ogg differ diff --git a/sound/instruments/piano/En8.ogg b/sound/instruments/piano/En8.ogg new file mode 100644 index 0000000000..79b7176061 Binary files /dev/null and b/sound/instruments/piano/En8.ogg differ diff --git a/sound/instruments/piano/Fn2.ogg b/sound/instruments/piano/Fn2.ogg new file mode 100644 index 0000000000..449cd6a8a2 Binary files /dev/null and b/sound/instruments/piano/Fn2.ogg differ diff --git a/sound/instruments/piano/Fn3.ogg b/sound/instruments/piano/Fn3.ogg new file mode 100644 index 0000000000..afd5b3b802 Binary files /dev/null and b/sound/instruments/piano/Fn3.ogg differ diff --git a/sound/instruments/piano/Fn4.ogg b/sound/instruments/piano/Fn4.ogg new file mode 100644 index 0000000000..ac18206012 Binary files /dev/null and b/sound/instruments/piano/Fn4.ogg differ diff --git a/sound/instruments/piano/Fn5.ogg b/sound/instruments/piano/Fn5.ogg new file mode 100644 index 0000000000..e59a4c6cc6 Binary files /dev/null and b/sound/instruments/piano/Fn5.ogg differ diff --git a/sound/instruments/piano/Fn6.ogg b/sound/instruments/piano/Fn6.ogg new file mode 100644 index 0000000000..7636c242dc Binary files /dev/null and b/sound/instruments/piano/Fn6.ogg differ diff --git a/sound/instruments/piano/Fn7.ogg b/sound/instruments/piano/Fn7.ogg new file mode 100644 index 0000000000..810338b641 Binary files /dev/null and b/sound/instruments/piano/Fn7.ogg differ diff --git a/sound/instruments/piano/Fn8.ogg b/sound/instruments/piano/Fn8.ogg new file mode 100644 index 0000000000..3504877e8a Binary files /dev/null and b/sound/instruments/piano/Fn8.ogg differ diff --git a/sound/instruments/piano/Gb2.ogg b/sound/instruments/piano/Gb2.ogg new file mode 100644 index 0000000000..353d09af13 Binary files /dev/null and b/sound/instruments/piano/Gb2.ogg differ diff --git a/sound/instruments/piano/Gb3.ogg b/sound/instruments/piano/Gb3.ogg new file mode 100644 index 0000000000..4527d9849d Binary files /dev/null and b/sound/instruments/piano/Gb3.ogg differ diff --git a/sound/instruments/piano/Gb4.ogg b/sound/instruments/piano/Gb4.ogg new file mode 100644 index 0000000000..abb5264465 Binary files /dev/null and b/sound/instruments/piano/Gb4.ogg differ diff --git a/sound/instruments/piano/Gb5.ogg b/sound/instruments/piano/Gb5.ogg new file mode 100644 index 0000000000..3765c1882c Binary files /dev/null and b/sound/instruments/piano/Gb5.ogg differ diff --git a/sound/instruments/piano/Gb6.ogg b/sound/instruments/piano/Gb6.ogg new file mode 100644 index 0000000000..fb6ff9006b Binary files /dev/null and b/sound/instruments/piano/Gb6.ogg differ diff --git a/sound/instruments/piano/Gb7.ogg b/sound/instruments/piano/Gb7.ogg new file mode 100644 index 0000000000..07983100d5 Binary files /dev/null and b/sound/instruments/piano/Gb7.ogg differ diff --git a/sound/instruments/piano/Gb8.ogg b/sound/instruments/piano/Gb8.ogg new file mode 100644 index 0000000000..717707816b Binary files /dev/null and b/sound/instruments/piano/Gb8.ogg differ diff --git a/sound/instruments/piano/Gn2.ogg b/sound/instruments/piano/Gn2.ogg new file mode 100644 index 0000000000..bad4105f25 Binary files /dev/null and b/sound/instruments/piano/Gn2.ogg differ diff --git a/sound/instruments/piano/Gn3.ogg b/sound/instruments/piano/Gn3.ogg new file mode 100644 index 0000000000..b69d27986f Binary files /dev/null and b/sound/instruments/piano/Gn3.ogg differ diff --git a/sound/instruments/piano/Gn4.ogg b/sound/instruments/piano/Gn4.ogg new file mode 100644 index 0000000000..c26d227122 Binary files /dev/null and b/sound/instruments/piano/Gn4.ogg differ diff --git a/sound/instruments/piano/Gn5.ogg b/sound/instruments/piano/Gn5.ogg new file mode 100644 index 0000000000..18b94e8e72 Binary files /dev/null and b/sound/instruments/piano/Gn5.ogg differ diff --git a/sound/instruments/piano/Gn6.ogg b/sound/instruments/piano/Gn6.ogg new file mode 100644 index 0000000000..587a8432b0 Binary files /dev/null and b/sound/instruments/piano/Gn6.ogg differ diff --git a/sound/instruments/piano/Gn7.ogg b/sound/instruments/piano/Gn7.ogg new file mode 100644 index 0000000000..5da32b72a9 Binary files /dev/null and b/sound/instruments/piano/Gn7.ogg differ diff --git a/sound/instruments/piano/Gn8.ogg b/sound/instruments/piano/Gn8.ogg new file mode 100644 index 0000000000..13559c201d Binary files /dev/null and b/sound/instruments/piano/Gn8.ogg differ diff --git a/sound/violin/Ab1.mid b/sound/instruments/violin/Ab1.mid similarity index 100% rename from sound/violin/Ab1.mid rename to sound/instruments/violin/Ab1.mid diff --git a/sound/violin/Ab2.mid b/sound/instruments/violin/Ab2.mid similarity index 100% rename from sound/violin/Ab2.mid rename to sound/instruments/violin/Ab2.mid diff --git a/sound/violin/Ab3.mid b/sound/instruments/violin/Ab3.mid similarity index 100% rename from sound/violin/Ab3.mid rename to sound/instruments/violin/Ab3.mid diff --git a/sound/violin/Ab4.mid b/sound/instruments/violin/Ab4.mid similarity index 100% rename from sound/violin/Ab4.mid rename to sound/instruments/violin/Ab4.mid diff --git a/sound/violin/Ab5.mid b/sound/instruments/violin/Ab5.mid similarity index 100% rename from sound/violin/Ab5.mid rename to sound/instruments/violin/Ab5.mid diff --git a/sound/violin/Ab6.mid b/sound/instruments/violin/Ab6.mid similarity index 100% rename from sound/violin/Ab6.mid rename to sound/instruments/violin/Ab6.mid diff --git a/sound/violin/Ab7.mid b/sound/instruments/violin/Ab7.mid similarity index 100% rename from sound/violin/Ab7.mid rename to sound/instruments/violin/Ab7.mid diff --git a/sound/violin/Ab8.mid b/sound/instruments/violin/Ab8.mid similarity index 100% rename from sound/violin/Ab8.mid rename to sound/instruments/violin/Ab8.mid diff --git a/sound/violin/An1.mid b/sound/instruments/violin/An1.mid similarity index 100% rename from sound/violin/An1.mid rename to sound/instruments/violin/An1.mid diff --git a/sound/violin/An2.mid b/sound/instruments/violin/An2.mid similarity index 100% rename from sound/violin/An2.mid rename to sound/instruments/violin/An2.mid diff --git a/sound/violin/An3.mid b/sound/instruments/violin/An3.mid similarity index 100% rename from sound/violin/An3.mid rename to sound/instruments/violin/An3.mid diff --git a/sound/violin/An4.mid b/sound/instruments/violin/An4.mid similarity index 100% rename from sound/violin/An4.mid rename to sound/instruments/violin/An4.mid diff --git a/sound/violin/An5.mid b/sound/instruments/violin/An5.mid similarity index 100% rename from sound/violin/An5.mid rename to sound/instruments/violin/An5.mid diff --git a/sound/violin/An6.mid b/sound/instruments/violin/An6.mid similarity index 100% rename from sound/violin/An6.mid rename to sound/instruments/violin/An6.mid diff --git a/sound/violin/An7.mid b/sound/instruments/violin/An7.mid similarity index 100% rename from sound/violin/An7.mid rename to sound/instruments/violin/An7.mid diff --git a/sound/violin/An8.mid b/sound/instruments/violin/An8.mid similarity index 100% rename from sound/violin/An8.mid rename to sound/instruments/violin/An8.mid diff --git a/sound/violin/Bb1.mid b/sound/instruments/violin/Bb1.mid similarity index 100% rename from sound/violin/Bb1.mid rename to sound/instruments/violin/Bb1.mid diff --git a/sound/violin/Bb2.mid b/sound/instruments/violin/Bb2.mid similarity index 100% rename from sound/violin/Bb2.mid rename to sound/instruments/violin/Bb2.mid diff --git a/sound/violin/Bb3.mid b/sound/instruments/violin/Bb3.mid similarity index 100% rename from sound/violin/Bb3.mid rename to sound/instruments/violin/Bb3.mid diff --git a/sound/violin/Bb4.mid b/sound/instruments/violin/Bb4.mid similarity index 100% rename from sound/violin/Bb4.mid rename to sound/instruments/violin/Bb4.mid diff --git a/sound/violin/Bb5.mid b/sound/instruments/violin/Bb5.mid similarity index 100% rename from sound/violin/Bb5.mid rename to sound/instruments/violin/Bb5.mid diff --git a/sound/violin/Bb6.mid b/sound/instruments/violin/Bb6.mid similarity index 100% rename from sound/violin/Bb6.mid rename to sound/instruments/violin/Bb6.mid diff --git a/sound/violin/Bb7.mid b/sound/instruments/violin/Bb7.mid similarity index 100% rename from sound/violin/Bb7.mid rename to sound/instruments/violin/Bb7.mid diff --git a/sound/violin/Bb8.mid b/sound/instruments/violin/Bb8.mid similarity index 100% rename from sound/violin/Bb8.mid rename to sound/instruments/violin/Bb8.mid diff --git a/sound/violin/Bn1.mid b/sound/instruments/violin/Bn1.mid similarity index 100% rename from sound/violin/Bn1.mid rename to sound/instruments/violin/Bn1.mid diff --git a/sound/violin/Bn2.mid b/sound/instruments/violin/Bn2.mid similarity index 100% rename from sound/violin/Bn2.mid rename to sound/instruments/violin/Bn2.mid diff --git a/sound/violin/Bn3.mid b/sound/instruments/violin/Bn3.mid similarity index 100% rename from sound/violin/Bn3.mid rename to sound/instruments/violin/Bn3.mid diff --git a/sound/violin/Bn4.mid b/sound/instruments/violin/Bn4.mid similarity index 100% rename from sound/violin/Bn4.mid rename to sound/instruments/violin/Bn4.mid diff --git a/sound/violin/Bn5.mid b/sound/instruments/violin/Bn5.mid similarity index 100% rename from sound/violin/Bn5.mid rename to sound/instruments/violin/Bn5.mid diff --git a/sound/violin/Bn6.mid b/sound/instruments/violin/Bn6.mid similarity index 100% rename from sound/violin/Bn6.mid rename to sound/instruments/violin/Bn6.mid diff --git a/sound/violin/Bn7.mid b/sound/instruments/violin/Bn7.mid similarity index 100% rename from sound/violin/Bn7.mid rename to sound/instruments/violin/Bn7.mid diff --git a/sound/violin/Bn8.mid b/sound/instruments/violin/Bn8.mid similarity index 100% rename from sound/violin/Bn8.mid rename to sound/instruments/violin/Bn8.mid diff --git a/sound/violin/Cn1.mid b/sound/instruments/violin/Cn1.mid similarity index 100% rename from sound/violin/Cn1.mid rename to sound/instruments/violin/Cn1.mid diff --git a/sound/violin/Cn2.mid b/sound/instruments/violin/Cn2.mid similarity index 100% rename from sound/violin/Cn2.mid rename to sound/instruments/violin/Cn2.mid diff --git a/sound/violin/Cn3.mid b/sound/instruments/violin/Cn3.mid similarity index 100% rename from sound/violin/Cn3.mid rename to sound/instruments/violin/Cn3.mid diff --git a/sound/violin/Cn4.mid b/sound/instruments/violin/Cn4.mid similarity index 100% rename from sound/violin/Cn4.mid rename to sound/instruments/violin/Cn4.mid diff --git a/sound/violin/Cn5.mid b/sound/instruments/violin/Cn5.mid similarity index 100% rename from sound/violin/Cn5.mid rename to sound/instruments/violin/Cn5.mid diff --git a/sound/violin/Cn6.mid b/sound/instruments/violin/Cn6.mid similarity index 100% rename from sound/violin/Cn6.mid rename to sound/instruments/violin/Cn6.mid diff --git a/sound/violin/Cn7.mid b/sound/instruments/violin/Cn7.mid similarity index 100% rename from sound/violin/Cn7.mid rename to sound/instruments/violin/Cn7.mid diff --git a/sound/violin/Cn8.mid b/sound/instruments/violin/Cn8.mid similarity index 100% rename from sound/violin/Cn8.mid rename to sound/instruments/violin/Cn8.mid diff --git a/sound/violin/Cn9.mid b/sound/instruments/violin/Cn9.mid similarity index 100% rename from sound/violin/Cn9.mid rename to sound/instruments/violin/Cn9.mid diff --git a/sound/violin/Db1.mid b/sound/instruments/violin/Db1.mid similarity index 100% rename from sound/violin/Db1.mid rename to sound/instruments/violin/Db1.mid diff --git a/sound/violin/Db2.mid b/sound/instruments/violin/Db2.mid similarity index 100% rename from sound/violin/Db2.mid rename to sound/instruments/violin/Db2.mid diff --git a/sound/violin/Db3.mid b/sound/instruments/violin/Db3.mid similarity index 100% rename from sound/violin/Db3.mid rename to sound/instruments/violin/Db3.mid diff --git a/sound/violin/Db4.mid b/sound/instruments/violin/Db4.mid similarity index 100% rename from sound/violin/Db4.mid rename to sound/instruments/violin/Db4.mid diff --git a/sound/violin/Db5.mid b/sound/instruments/violin/Db5.mid similarity index 100% rename from sound/violin/Db5.mid rename to sound/instruments/violin/Db5.mid diff --git a/sound/violin/Db6.mid b/sound/instruments/violin/Db6.mid similarity index 100% rename from sound/violin/Db6.mid rename to sound/instruments/violin/Db6.mid diff --git a/sound/violin/Db7.mid b/sound/instruments/violin/Db7.mid similarity index 100% rename from sound/violin/Db7.mid rename to sound/instruments/violin/Db7.mid diff --git a/sound/violin/Db8.mid b/sound/instruments/violin/Db8.mid similarity index 100% rename from sound/violin/Db8.mid rename to sound/instruments/violin/Db8.mid diff --git a/sound/violin/Dn1.mid b/sound/instruments/violin/Dn1.mid similarity index 100% rename from sound/violin/Dn1.mid rename to sound/instruments/violin/Dn1.mid diff --git a/sound/violin/Dn2.mid b/sound/instruments/violin/Dn2.mid similarity index 100% rename from sound/violin/Dn2.mid rename to sound/instruments/violin/Dn2.mid diff --git a/sound/violin/Dn3.mid b/sound/instruments/violin/Dn3.mid similarity index 100% rename from sound/violin/Dn3.mid rename to sound/instruments/violin/Dn3.mid diff --git a/sound/violin/Dn4.mid b/sound/instruments/violin/Dn4.mid similarity index 100% rename from sound/violin/Dn4.mid rename to sound/instruments/violin/Dn4.mid diff --git a/sound/violin/Dn5.mid b/sound/instruments/violin/Dn5.mid similarity index 100% rename from sound/violin/Dn5.mid rename to sound/instruments/violin/Dn5.mid diff --git a/sound/violin/Dn6.mid b/sound/instruments/violin/Dn6.mid similarity index 100% rename from sound/violin/Dn6.mid rename to sound/instruments/violin/Dn6.mid diff --git a/sound/violin/Dn7.mid b/sound/instruments/violin/Dn7.mid similarity index 100% rename from sound/violin/Dn7.mid rename to sound/instruments/violin/Dn7.mid diff --git a/sound/violin/Dn8.mid b/sound/instruments/violin/Dn8.mid similarity index 100% rename from sound/violin/Dn8.mid rename to sound/instruments/violin/Dn8.mid diff --git a/sound/violin/Eb1.mid b/sound/instruments/violin/Eb1.mid similarity index 100% rename from sound/violin/Eb1.mid rename to sound/instruments/violin/Eb1.mid diff --git a/sound/violin/Eb2.mid b/sound/instruments/violin/Eb2.mid similarity index 100% rename from sound/violin/Eb2.mid rename to sound/instruments/violin/Eb2.mid diff --git a/sound/violin/Eb3.mid b/sound/instruments/violin/Eb3.mid similarity index 100% rename from sound/violin/Eb3.mid rename to sound/instruments/violin/Eb3.mid diff --git a/sound/violin/Eb4.mid b/sound/instruments/violin/Eb4.mid similarity index 100% rename from sound/violin/Eb4.mid rename to sound/instruments/violin/Eb4.mid diff --git a/sound/violin/Eb5.mid b/sound/instruments/violin/Eb5.mid similarity index 100% rename from sound/violin/Eb5.mid rename to sound/instruments/violin/Eb5.mid diff --git a/sound/violin/Eb6.mid b/sound/instruments/violin/Eb6.mid similarity index 100% rename from sound/violin/Eb6.mid rename to sound/instruments/violin/Eb6.mid diff --git a/sound/violin/Eb7.mid b/sound/instruments/violin/Eb7.mid similarity index 100% rename from sound/violin/Eb7.mid rename to sound/instruments/violin/Eb7.mid diff --git a/sound/violin/Eb8.mid b/sound/instruments/violin/Eb8.mid similarity index 100% rename from sound/violin/Eb8.mid rename to sound/instruments/violin/Eb8.mid diff --git a/sound/violin/En1.mid b/sound/instruments/violin/En1.mid similarity index 100% rename from sound/violin/En1.mid rename to sound/instruments/violin/En1.mid diff --git a/sound/violin/En2.mid b/sound/instruments/violin/En2.mid similarity index 100% rename from sound/violin/En2.mid rename to sound/instruments/violin/En2.mid diff --git a/sound/violin/En3.mid b/sound/instruments/violin/En3.mid similarity index 100% rename from sound/violin/En3.mid rename to sound/instruments/violin/En3.mid diff --git a/sound/violin/En4.mid b/sound/instruments/violin/En4.mid similarity index 100% rename from sound/violin/En4.mid rename to sound/instruments/violin/En4.mid diff --git a/sound/violin/En5.mid b/sound/instruments/violin/En5.mid similarity index 100% rename from sound/violin/En5.mid rename to sound/instruments/violin/En5.mid diff --git a/sound/violin/En6.mid b/sound/instruments/violin/En6.mid similarity index 100% rename from sound/violin/En6.mid rename to sound/instruments/violin/En6.mid diff --git a/sound/violin/En7.mid b/sound/instruments/violin/En7.mid similarity index 100% rename from sound/violin/En7.mid rename to sound/instruments/violin/En7.mid diff --git a/sound/violin/En8.mid b/sound/instruments/violin/En8.mid similarity index 100% rename from sound/violin/En8.mid rename to sound/instruments/violin/En8.mid diff --git a/sound/violin/Fn1.mid b/sound/instruments/violin/Fn1.mid similarity index 100% rename from sound/violin/Fn1.mid rename to sound/instruments/violin/Fn1.mid diff --git a/sound/violin/Fn2.mid b/sound/instruments/violin/Fn2.mid similarity index 100% rename from sound/violin/Fn2.mid rename to sound/instruments/violin/Fn2.mid diff --git a/sound/violin/Fn3.mid b/sound/instruments/violin/Fn3.mid similarity index 100% rename from sound/violin/Fn3.mid rename to sound/instruments/violin/Fn3.mid diff --git a/sound/violin/Fn4.mid b/sound/instruments/violin/Fn4.mid similarity index 100% rename from sound/violin/Fn4.mid rename to sound/instruments/violin/Fn4.mid diff --git a/sound/violin/Fn5.mid b/sound/instruments/violin/Fn5.mid similarity index 100% rename from sound/violin/Fn5.mid rename to sound/instruments/violin/Fn5.mid diff --git a/sound/violin/Fn6.mid b/sound/instruments/violin/Fn6.mid similarity index 100% rename from sound/violin/Fn6.mid rename to sound/instruments/violin/Fn6.mid diff --git a/sound/violin/Fn7.mid b/sound/instruments/violin/Fn7.mid similarity index 100% rename from sound/violin/Fn7.mid rename to sound/instruments/violin/Fn7.mid diff --git a/sound/violin/Fn8.mid b/sound/instruments/violin/Fn8.mid similarity index 100% rename from sound/violin/Fn8.mid rename to sound/instruments/violin/Fn8.mid diff --git a/sound/violin/Gb1.mid b/sound/instruments/violin/Gb1.mid similarity index 100% rename from sound/violin/Gb1.mid rename to sound/instruments/violin/Gb1.mid diff --git a/sound/violin/Gb2.mid b/sound/instruments/violin/Gb2.mid similarity index 100% rename from sound/violin/Gb2.mid rename to sound/instruments/violin/Gb2.mid diff --git a/sound/violin/Gb3.mid b/sound/instruments/violin/Gb3.mid similarity index 100% rename from sound/violin/Gb3.mid rename to sound/instruments/violin/Gb3.mid diff --git a/sound/violin/Gb4.mid b/sound/instruments/violin/Gb4.mid similarity index 100% rename from sound/violin/Gb4.mid rename to sound/instruments/violin/Gb4.mid diff --git a/sound/violin/Gb5.mid b/sound/instruments/violin/Gb5.mid similarity index 100% rename from sound/violin/Gb5.mid rename to sound/instruments/violin/Gb5.mid diff --git a/sound/violin/Gb6.mid b/sound/instruments/violin/Gb6.mid similarity index 100% rename from sound/violin/Gb6.mid rename to sound/instruments/violin/Gb6.mid diff --git a/sound/violin/Gb7.mid b/sound/instruments/violin/Gb7.mid similarity index 100% rename from sound/violin/Gb7.mid rename to sound/instruments/violin/Gb7.mid diff --git a/sound/violin/Gb8.mid b/sound/instruments/violin/Gb8.mid similarity index 100% rename from sound/violin/Gb8.mid rename to sound/instruments/violin/Gb8.mid diff --git a/sound/violin/Gn1.mid b/sound/instruments/violin/Gn1.mid similarity index 100% rename from sound/violin/Gn1.mid rename to sound/instruments/violin/Gn1.mid diff --git a/sound/violin/Gn2.mid b/sound/instruments/violin/Gn2.mid similarity index 100% rename from sound/violin/Gn2.mid rename to sound/instruments/violin/Gn2.mid diff --git a/sound/violin/Gn3.mid b/sound/instruments/violin/Gn3.mid similarity index 100% rename from sound/violin/Gn3.mid rename to sound/instruments/violin/Gn3.mid diff --git a/sound/violin/Gn4.mid b/sound/instruments/violin/Gn4.mid similarity index 100% rename from sound/violin/Gn4.mid rename to sound/instruments/violin/Gn4.mid diff --git a/sound/violin/Gn5.mid b/sound/instruments/violin/Gn5.mid similarity index 100% rename from sound/violin/Gn5.mid rename to sound/instruments/violin/Gn5.mid diff --git a/sound/violin/Gn6.mid b/sound/instruments/violin/Gn6.mid similarity index 100% rename from sound/violin/Gn6.mid rename to sound/instruments/violin/Gn6.mid diff --git a/sound/violin/Gn7.mid b/sound/instruments/violin/Gn7.mid similarity index 100% rename from sound/violin/Gn7.mid rename to sound/instruments/violin/Gn7.mid diff --git a/sound/violin/Gn8.mid b/sound/instruments/violin/Gn8.mid similarity index 100% rename from sound/violin/Gn8.mid rename to sound/instruments/violin/Gn8.mid diff --git a/sound/items/electronic_assembly_empty.ogg b/sound/items/electronic_assembly_empty.ogg new file mode 100644 index 0000000000..9144b414df Binary files /dev/null and b/sound/items/electronic_assembly_empty.ogg differ diff --git a/sound/items/electronic_assembly_emptying.ogg b/sound/items/electronic_assembly_emptying.ogg new file mode 100644 index 0000000000..70e47e7f83 Binary files /dev/null and b/sound/items/electronic_assembly_emptying.ogg differ diff --git a/sound/piano/A#1.ogg b/sound/piano/A#1.ogg deleted file mode 100644 index b40cc72333..0000000000 Binary files a/sound/piano/A#1.ogg and /dev/null differ diff --git a/sound/piano/A#2.ogg b/sound/piano/A#2.ogg deleted file mode 100644 index 2b0677d44a..0000000000 Binary files a/sound/piano/A#2.ogg and /dev/null differ diff --git a/sound/piano/A#3.ogg b/sound/piano/A#3.ogg deleted file mode 100644 index e8fc263d8f..0000000000 Binary files a/sound/piano/A#3.ogg and /dev/null differ diff --git a/sound/piano/A#4.ogg b/sound/piano/A#4.ogg deleted file mode 100644 index 8ba7c40d33..0000000000 Binary files a/sound/piano/A#4.ogg and /dev/null differ diff --git a/sound/piano/A#5.ogg b/sound/piano/A#5.ogg deleted file mode 100644 index 65c14d3320..0000000000 Binary files a/sound/piano/A#5.ogg and /dev/null differ diff --git a/sound/piano/A#6.ogg b/sound/piano/A#6.ogg deleted file mode 100644 index 88317f7d55..0000000000 Binary files a/sound/piano/A#6.ogg and /dev/null differ diff --git a/sound/piano/A#7.ogg b/sound/piano/A#7.ogg deleted file mode 100644 index e7354522fe..0000000000 Binary files a/sound/piano/A#7.ogg and /dev/null differ diff --git a/sound/piano/A#8.ogg b/sound/piano/A#8.ogg deleted file mode 100644 index 7d8014c059..0000000000 Binary files a/sound/piano/A#8.ogg and /dev/null differ diff --git a/sound/piano/Ab1.ogg b/sound/piano/Ab1.ogg deleted file mode 100644 index 0c5ae36216..0000000000 Binary files a/sound/piano/Ab1.ogg and /dev/null differ diff --git a/sound/piano/Ab2.ogg b/sound/piano/Ab2.ogg deleted file mode 100644 index 4dabf2cc82..0000000000 Binary files a/sound/piano/Ab2.ogg and /dev/null differ diff --git a/sound/piano/Ab3.ogg b/sound/piano/Ab3.ogg deleted file mode 100644 index beb96005de..0000000000 Binary files a/sound/piano/Ab3.ogg and /dev/null differ diff --git a/sound/piano/Ab4.ogg b/sound/piano/Ab4.ogg deleted file mode 100644 index bfcf301877..0000000000 Binary files a/sound/piano/Ab4.ogg and /dev/null differ diff --git a/sound/piano/Ab5.ogg b/sound/piano/Ab5.ogg deleted file mode 100644 index b95acaf5a0..0000000000 Binary files a/sound/piano/Ab5.ogg and /dev/null differ diff --git a/sound/piano/Ab6.ogg b/sound/piano/Ab6.ogg deleted file mode 100644 index 501f51b3e1..0000000000 Binary files a/sound/piano/Ab6.ogg and /dev/null differ diff --git a/sound/piano/Ab7.ogg b/sound/piano/Ab7.ogg deleted file mode 100644 index b96f4e0766..0000000000 Binary files a/sound/piano/Ab7.ogg and /dev/null differ diff --git a/sound/piano/Ab8.ogg b/sound/piano/Ab8.ogg deleted file mode 100644 index c4bd37195b..0000000000 Binary files a/sound/piano/Ab8.ogg and /dev/null differ diff --git a/sound/piano/An1.ogg b/sound/piano/An1.ogg deleted file mode 100644 index 5698578e79..0000000000 Binary files a/sound/piano/An1.ogg and /dev/null differ diff --git a/sound/piano/An2.ogg b/sound/piano/An2.ogg deleted file mode 100644 index aaff9b8e65..0000000000 Binary files a/sound/piano/An2.ogg and /dev/null differ diff --git a/sound/piano/An3.ogg b/sound/piano/An3.ogg deleted file mode 100644 index 16fe54be83..0000000000 Binary files a/sound/piano/An3.ogg and /dev/null differ diff --git a/sound/piano/An4.ogg b/sound/piano/An4.ogg deleted file mode 100644 index 52cfc701a0..0000000000 Binary files a/sound/piano/An4.ogg and /dev/null differ diff --git a/sound/piano/An5.ogg b/sound/piano/An5.ogg deleted file mode 100644 index ba4ad8ee61..0000000000 Binary files a/sound/piano/An5.ogg and /dev/null differ diff --git a/sound/piano/An6.ogg b/sound/piano/An6.ogg deleted file mode 100644 index 49be4e31a8..0000000000 Binary files a/sound/piano/An6.ogg and /dev/null differ diff --git a/sound/piano/An7.ogg b/sound/piano/An7.ogg deleted file mode 100644 index da5f477db7..0000000000 Binary files a/sound/piano/An7.ogg and /dev/null differ diff --git a/sound/piano/An8.ogg b/sound/piano/An8.ogg deleted file mode 100644 index 32e5cb81e7..0000000000 Binary files a/sound/piano/An8.ogg and /dev/null differ diff --git a/sound/piano/B#1.ogg b/sound/piano/B#1.ogg deleted file mode 100644 index b82c6cff8a..0000000000 Binary files a/sound/piano/B#1.ogg and /dev/null differ diff --git a/sound/piano/B#2.ogg b/sound/piano/B#2.ogg deleted file mode 100644 index e218380629..0000000000 Binary files a/sound/piano/B#2.ogg and /dev/null differ diff --git a/sound/piano/B#3.ogg b/sound/piano/B#3.ogg deleted file mode 100644 index b4dd559a24..0000000000 Binary files a/sound/piano/B#3.ogg and /dev/null differ diff --git a/sound/piano/B#4.ogg b/sound/piano/B#4.ogg deleted file mode 100644 index 578c45e452..0000000000 Binary files a/sound/piano/B#4.ogg and /dev/null differ diff --git a/sound/piano/B#5.ogg b/sound/piano/B#5.ogg deleted file mode 100644 index 6dfd56115f..0000000000 Binary files a/sound/piano/B#5.ogg and /dev/null differ diff --git a/sound/piano/B#6.ogg b/sound/piano/B#6.ogg deleted file mode 100644 index 32996328c8..0000000000 Binary files a/sound/piano/B#6.ogg and /dev/null differ diff --git a/sound/piano/B#7.ogg b/sound/piano/B#7.ogg deleted file mode 100644 index 89b771aa37..0000000000 Binary files a/sound/piano/B#7.ogg and /dev/null differ diff --git a/sound/piano/B#8.ogg b/sound/piano/B#8.ogg deleted file mode 100644 index cca99040de..0000000000 Binary files a/sound/piano/B#8.ogg and /dev/null differ diff --git a/sound/piano/Bb1.ogg b/sound/piano/Bb1.ogg deleted file mode 100644 index c872abe1a9..0000000000 Binary files a/sound/piano/Bb1.ogg and /dev/null differ diff --git a/sound/piano/Bb2.ogg b/sound/piano/Bb2.ogg deleted file mode 100644 index acd54ab388..0000000000 Binary files a/sound/piano/Bb2.ogg and /dev/null differ diff --git a/sound/piano/Bb3.ogg b/sound/piano/Bb3.ogg deleted file mode 100644 index 33bea9f079..0000000000 Binary files a/sound/piano/Bb3.ogg and /dev/null differ diff --git a/sound/piano/Bb4.ogg b/sound/piano/Bb4.ogg deleted file mode 100644 index 736fa1fc8d..0000000000 Binary files a/sound/piano/Bb4.ogg and /dev/null differ diff --git a/sound/piano/Bb5.ogg b/sound/piano/Bb5.ogg deleted file mode 100644 index 38bddcf761..0000000000 Binary files a/sound/piano/Bb5.ogg and /dev/null differ diff --git a/sound/piano/Bb6.ogg b/sound/piano/Bb6.ogg deleted file mode 100644 index e7a0425745..0000000000 Binary files a/sound/piano/Bb6.ogg and /dev/null differ diff --git a/sound/piano/Bb7.ogg b/sound/piano/Bb7.ogg deleted file mode 100644 index 89441baba6..0000000000 Binary files a/sound/piano/Bb7.ogg and /dev/null differ diff --git a/sound/piano/Bb8.ogg b/sound/piano/Bb8.ogg deleted file mode 100644 index 49dce93253..0000000000 Binary files a/sound/piano/Bb8.ogg and /dev/null differ diff --git a/sound/piano/Bn1.ogg b/sound/piano/Bn1.ogg deleted file mode 100644 index 2ddf3f59b8..0000000000 Binary files a/sound/piano/Bn1.ogg and /dev/null differ diff --git a/sound/piano/Bn2.ogg b/sound/piano/Bn2.ogg deleted file mode 100644 index 92b49a24ca..0000000000 Binary files a/sound/piano/Bn2.ogg and /dev/null differ diff --git a/sound/piano/Bn3.ogg b/sound/piano/Bn3.ogg deleted file mode 100644 index 20aa8ca434..0000000000 Binary files a/sound/piano/Bn3.ogg and /dev/null differ diff --git a/sound/piano/Bn4.ogg b/sound/piano/Bn4.ogg deleted file mode 100644 index b2ecc85255..0000000000 Binary files a/sound/piano/Bn4.ogg and /dev/null differ diff --git a/sound/piano/Bn5.ogg b/sound/piano/Bn5.ogg deleted file mode 100644 index e03af44292..0000000000 Binary files a/sound/piano/Bn5.ogg and /dev/null differ diff --git a/sound/piano/Bn6.ogg b/sound/piano/Bn6.ogg deleted file mode 100644 index 1acf0d94d0..0000000000 Binary files a/sound/piano/Bn6.ogg and /dev/null differ diff --git a/sound/piano/Bn7.ogg b/sound/piano/Bn7.ogg deleted file mode 100644 index b68372b4ab..0000000000 Binary files a/sound/piano/Bn7.ogg and /dev/null differ diff --git a/sound/piano/Bn8.ogg b/sound/piano/Bn8.ogg deleted file mode 100644 index 5db915a607..0000000000 Binary files a/sound/piano/Bn8.ogg and /dev/null differ diff --git a/sound/piano/C#1.ogg b/sound/piano/C#1.ogg deleted file mode 100644 index dc3c859cae..0000000000 Binary files a/sound/piano/C#1.ogg and /dev/null differ diff --git a/sound/piano/C#2.ogg b/sound/piano/C#2.ogg deleted file mode 100644 index 5a36e244a7..0000000000 Binary files a/sound/piano/C#2.ogg and /dev/null differ diff --git a/sound/piano/C#3.ogg b/sound/piano/C#3.ogg deleted file mode 100644 index af3e49f21e..0000000000 Binary files a/sound/piano/C#3.ogg and /dev/null differ diff --git a/sound/piano/C#4.ogg b/sound/piano/C#4.ogg deleted file mode 100644 index 8b18a4ce41..0000000000 Binary files a/sound/piano/C#4.ogg and /dev/null differ diff --git a/sound/piano/C#5.ogg b/sound/piano/C#5.ogg deleted file mode 100644 index 690bd2763e..0000000000 Binary files a/sound/piano/C#5.ogg and /dev/null differ diff --git a/sound/piano/C#6.ogg b/sound/piano/C#6.ogg deleted file mode 100644 index 3a27950bd3..0000000000 Binary files a/sound/piano/C#6.ogg and /dev/null differ diff --git a/sound/piano/C#7.ogg b/sound/piano/C#7.ogg deleted file mode 100644 index 9a7bc071ea..0000000000 Binary files a/sound/piano/C#7.ogg and /dev/null differ diff --git a/sound/piano/C#8.ogg b/sound/piano/C#8.ogg deleted file mode 100644 index 9adc2dbbbc..0000000000 Binary files a/sound/piano/C#8.ogg and /dev/null differ diff --git a/sound/piano/Cb2.ogg b/sound/piano/Cb2.ogg deleted file mode 100644 index 7c36759c95..0000000000 Binary files a/sound/piano/Cb2.ogg and /dev/null differ diff --git a/sound/piano/Cb3.ogg b/sound/piano/Cb3.ogg deleted file mode 100644 index b856963854..0000000000 Binary files a/sound/piano/Cb3.ogg and /dev/null differ diff --git a/sound/piano/Cb4.ogg b/sound/piano/Cb4.ogg deleted file mode 100644 index fb693c0cad..0000000000 Binary files a/sound/piano/Cb4.ogg and /dev/null differ diff --git a/sound/piano/Cb5.ogg b/sound/piano/Cb5.ogg deleted file mode 100644 index b114181e3f..0000000000 Binary files a/sound/piano/Cb5.ogg and /dev/null differ diff --git a/sound/piano/Cb6.ogg b/sound/piano/Cb6.ogg deleted file mode 100644 index 42470f9f3a..0000000000 Binary files a/sound/piano/Cb6.ogg and /dev/null differ diff --git a/sound/piano/Cb7.ogg b/sound/piano/Cb7.ogg deleted file mode 100644 index adeb34cacd..0000000000 Binary files a/sound/piano/Cb7.ogg and /dev/null differ diff --git a/sound/piano/Cb8.ogg b/sound/piano/Cb8.ogg deleted file mode 100644 index 1f2cbb94dd..0000000000 Binary files a/sound/piano/Cb8.ogg and /dev/null differ diff --git a/sound/piano/Cb9.ogg b/sound/piano/Cb9.ogg deleted file mode 100644 index 25c0d646c3..0000000000 Binary files a/sound/piano/Cb9.ogg and /dev/null differ diff --git a/sound/piano/Cn1.ogg b/sound/piano/Cn1.ogg deleted file mode 100644 index e05b36d325..0000000000 Binary files a/sound/piano/Cn1.ogg and /dev/null differ diff --git a/sound/piano/Cn2.ogg b/sound/piano/Cn2.ogg deleted file mode 100644 index cc96f26570..0000000000 Binary files a/sound/piano/Cn2.ogg and /dev/null differ diff --git a/sound/piano/Cn3.ogg b/sound/piano/Cn3.ogg deleted file mode 100644 index 6d2f206927..0000000000 Binary files a/sound/piano/Cn3.ogg and /dev/null differ diff --git a/sound/piano/Cn4.ogg b/sound/piano/Cn4.ogg deleted file mode 100644 index d0c0f4995e..0000000000 Binary files a/sound/piano/Cn4.ogg and /dev/null differ diff --git a/sound/piano/Cn5.ogg b/sound/piano/Cn5.ogg deleted file mode 100644 index 1d95dfa099..0000000000 Binary files a/sound/piano/Cn5.ogg and /dev/null differ diff --git a/sound/piano/Cn6.ogg b/sound/piano/Cn6.ogg deleted file mode 100644 index f1e847d32f..0000000000 Binary files a/sound/piano/Cn6.ogg and /dev/null differ diff --git a/sound/piano/Cn7.ogg b/sound/piano/Cn7.ogg deleted file mode 100644 index 85cb1dd0fe..0000000000 Binary files a/sound/piano/Cn7.ogg and /dev/null differ diff --git a/sound/piano/Cn8.ogg b/sound/piano/Cn8.ogg deleted file mode 100644 index f081d91d8b..0000000000 Binary files a/sound/piano/Cn8.ogg and /dev/null differ diff --git a/sound/piano/Cn9.ogg b/sound/piano/Cn9.ogg deleted file mode 100644 index 06172ca6f1..0000000000 Binary files a/sound/piano/Cn9.ogg and /dev/null differ diff --git a/sound/piano/D#1.ogg b/sound/piano/D#1.ogg deleted file mode 100644 index bd58c7dd75..0000000000 Binary files a/sound/piano/D#1.ogg and /dev/null differ diff --git a/sound/piano/D#2.ogg b/sound/piano/D#2.ogg deleted file mode 100644 index fc01076810..0000000000 Binary files a/sound/piano/D#2.ogg and /dev/null differ diff --git a/sound/piano/D#3.ogg b/sound/piano/D#3.ogg deleted file mode 100644 index e437f44466..0000000000 Binary files a/sound/piano/D#3.ogg and /dev/null differ diff --git a/sound/piano/D#4.ogg b/sound/piano/D#4.ogg deleted file mode 100644 index 0804aa03de..0000000000 Binary files a/sound/piano/D#4.ogg and /dev/null differ diff --git a/sound/piano/D#5.ogg b/sound/piano/D#5.ogg deleted file mode 100644 index 40889dbae5..0000000000 Binary files a/sound/piano/D#5.ogg and /dev/null differ diff --git a/sound/piano/D#6.ogg b/sound/piano/D#6.ogg deleted file mode 100644 index 616481d2f9..0000000000 Binary files a/sound/piano/D#6.ogg and /dev/null differ diff --git a/sound/piano/D#7.ogg b/sound/piano/D#7.ogg deleted file mode 100644 index 5c191fb7f6..0000000000 Binary files a/sound/piano/D#7.ogg and /dev/null differ diff --git a/sound/piano/D#8.ogg b/sound/piano/D#8.ogg deleted file mode 100644 index 5955ed7f8d..0000000000 Binary files a/sound/piano/D#8.ogg and /dev/null differ diff --git a/sound/piano/Db1.ogg b/sound/piano/Db1.ogg deleted file mode 100644 index a33554e476..0000000000 Binary files a/sound/piano/Db1.ogg and /dev/null differ diff --git a/sound/piano/Db2.ogg b/sound/piano/Db2.ogg deleted file mode 100644 index dd45c2f11d..0000000000 Binary files a/sound/piano/Db2.ogg and /dev/null differ diff --git a/sound/piano/Db3.ogg b/sound/piano/Db3.ogg deleted file mode 100644 index ebfa23bbc3..0000000000 Binary files a/sound/piano/Db3.ogg and /dev/null differ diff --git a/sound/piano/Db4.ogg b/sound/piano/Db4.ogg deleted file mode 100644 index 52486484eb..0000000000 Binary files a/sound/piano/Db4.ogg and /dev/null differ diff --git a/sound/piano/Db5.ogg b/sound/piano/Db5.ogg deleted file mode 100644 index 8250bbb7cb..0000000000 Binary files a/sound/piano/Db5.ogg and /dev/null differ diff --git a/sound/piano/Db6.ogg b/sound/piano/Db6.ogg deleted file mode 100644 index 8ec394da17..0000000000 Binary files a/sound/piano/Db6.ogg and /dev/null differ diff --git a/sound/piano/Db7.ogg b/sound/piano/Db7.ogg deleted file mode 100644 index 9a6c81dc34..0000000000 Binary files a/sound/piano/Db7.ogg and /dev/null differ diff --git a/sound/piano/Db8.ogg b/sound/piano/Db8.ogg deleted file mode 100644 index 2790f60390..0000000000 Binary files a/sound/piano/Db8.ogg and /dev/null differ diff --git a/sound/piano/Dn1.ogg b/sound/piano/Dn1.ogg deleted file mode 100644 index 89ac14cc14..0000000000 Binary files a/sound/piano/Dn1.ogg and /dev/null differ diff --git a/sound/piano/Dn2.ogg b/sound/piano/Dn2.ogg deleted file mode 100644 index bb5f18fbf7..0000000000 Binary files a/sound/piano/Dn2.ogg and /dev/null differ diff --git a/sound/piano/Dn3.ogg b/sound/piano/Dn3.ogg deleted file mode 100644 index 6a54b77549..0000000000 Binary files a/sound/piano/Dn3.ogg and /dev/null differ diff --git a/sound/piano/Dn4.ogg b/sound/piano/Dn4.ogg deleted file mode 100644 index 8f930b8b50..0000000000 Binary files a/sound/piano/Dn4.ogg and /dev/null differ diff --git a/sound/piano/Dn5.ogg b/sound/piano/Dn5.ogg deleted file mode 100644 index 981d37e910..0000000000 Binary files a/sound/piano/Dn5.ogg and /dev/null differ diff --git a/sound/piano/Dn6.ogg b/sound/piano/Dn6.ogg deleted file mode 100644 index 112f101bb2..0000000000 Binary files a/sound/piano/Dn6.ogg and /dev/null differ diff --git a/sound/piano/Dn7.ogg b/sound/piano/Dn7.ogg deleted file mode 100644 index ff2724463c..0000000000 Binary files a/sound/piano/Dn7.ogg and /dev/null differ diff --git a/sound/piano/Dn8.ogg b/sound/piano/Dn8.ogg deleted file mode 100644 index 5e2523f123..0000000000 Binary files a/sound/piano/Dn8.ogg and /dev/null differ diff --git a/sound/piano/E#1.ogg b/sound/piano/E#1.ogg deleted file mode 100644 index c192032dc0..0000000000 Binary files a/sound/piano/E#1.ogg and /dev/null differ diff --git a/sound/piano/E#2.ogg b/sound/piano/E#2.ogg deleted file mode 100644 index da09b64979..0000000000 Binary files a/sound/piano/E#2.ogg and /dev/null differ diff --git a/sound/piano/E#3.ogg b/sound/piano/E#3.ogg deleted file mode 100644 index e7a2f93535..0000000000 Binary files a/sound/piano/E#3.ogg and /dev/null differ diff --git a/sound/piano/E#4.ogg b/sound/piano/E#4.ogg deleted file mode 100644 index b3b14b7266..0000000000 Binary files a/sound/piano/E#4.ogg and /dev/null differ diff --git a/sound/piano/E#5.ogg b/sound/piano/E#5.ogg deleted file mode 100644 index 08bc2cf5a8..0000000000 Binary files a/sound/piano/E#5.ogg and /dev/null differ diff --git a/sound/piano/E#6.ogg b/sound/piano/E#6.ogg deleted file mode 100644 index 6060576f36..0000000000 Binary files a/sound/piano/E#6.ogg and /dev/null differ diff --git a/sound/piano/E#7.ogg b/sound/piano/E#7.ogg deleted file mode 100644 index 77a81ed570..0000000000 Binary files a/sound/piano/E#7.ogg and /dev/null differ diff --git a/sound/piano/E#8.ogg b/sound/piano/E#8.ogg deleted file mode 100644 index 5502fedbda..0000000000 Binary files a/sound/piano/E#8.ogg and /dev/null differ diff --git a/sound/piano/Eb1.ogg b/sound/piano/Eb1.ogg deleted file mode 100644 index 8923e11fd9..0000000000 Binary files a/sound/piano/Eb1.ogg and /dev/null differ diff --git a/sound/piano/Eb2.ogg b/sound/piano/Eb2.ogg deleted file mode 100644 index b61faa1737..0000000000 Binary files a/sound/piano/Eb2.ogg and /dev/null differ diff --git a/sound/piano/Eb3.ogg b/sound/piano/Eb3.ogg deleted file mode 100644 index bf80c6eeeb..0000000000 Binary files a/sound/piano/Eb3.ogg and /dev/null differ diff --git a/sound/piano/Eb4.ogg b/sound/piano/Eb4.ogg deleted file mode 100644 index fa991d11c5..0000000000 Binary files a/sound/piano/Eb4.ogg and /dev/null differ diff --git a/sound/piano/Eb5.ogg b/sound/piano/Eb5.ogg deleted file mode 100644 index e63e0143a5..0000000000 Binary files a/sound/piano/Eb5.ogg and /dev/null differ diff --git a/sound/piano/Eb6.ogg b/sound/piano/Eb6.ogg deleted file mode 100644 index e3f6ccb4c4..0000000000 Binary files a/sound/piano/Eb6.ogg and /dev/null differ diff --git a/sound/piano/Eb7.ogg b/sound/piano/Eb7.ogg deleted file mode 100644 index a7dc94edbd..0000000000 Binary files a/sound/piano/Eb7.ogg and /dev/null differ diff --git a/sound/piano/Eb8.ogg b/sound/piano/Eb8.ogg deleted file mode 100644 index f6a7f46657..0000000000 Binary files a/sound/piano/Eb8.ogg and /dev/null differ diff --git a/sound/piano/En1.ogg b/sound/piano/En1.ogg deleted file mode 100644 index fbcb29c2de..0000000000 Binary files a/sound/piano/En1.ogg and /dev/null differ diff --git a/sound/piano/En2.ogg b/sound/piano/En2.ogg deleted file mode 100644 index b6f4f1a5e8..0000000000 Binary files a/sound/piano/En2.ogg and /dev/null differ diff --git a/sound/piano/En3.ogg b/sound/piano/En3.ogg deleted file mode 100644 index 5f6ade5f1b..0000000000 Binary files a/sound/piano/En3.ogg and /dev/null differ diff --git a/sound/piano/En4.ogg b/sound/piano/En4.ogg deleted file mode 100644 index 0f567ffb98..0000000000 Binary files a/sound/piano/En4.ogg and /dev/null differ diff --git a/sound/piano/En5.ogg b/sound/piano/En5.ogg deleted file mode 100644 index 05719f2a2d..0000000000 Binary files a/sound/piano/En5.ogg and /dev/null differ diff --git a/sound/piano/En6.ogg b/sound/piano/En6.ogg deleted file mode 100644 index b1295b67ee..0000000000 Binary files a/sound/piano/En6.ogg and /dev/null differ diff --git a/sound/piano/En7.ogg b/sound/piano/En7.ogg deleted file mode 100644 index 0d97b93fbc..0000000000 Binary files a/sound/piano/En7.ogg and /dev/null differ diff --git a/sound/piano/En8.ogg b/sound/piano/En8.ogg deleted file mode 100644 index f0ea5f1ec5..0000000000 Binary files a/sound/piano/En8.ogg and /dev/null differ diff --git a/sound/piano/F#1.ogg b/sound/piano/F#1.ogg deleted file mode 100644 index ad9e0a563c..0000000000 Binary files a/sound/piano/F#1.ogg and /dev/null differ diff --git a/sound/piano/F#2.ogg b/sound/piano/F#2.ogg deleted file mode 100644 index b1e86bfeaa..0000000000 Binary files a/sound/piano/F#2.ogg and /dev/null differ diff --git a/sound/piano/F#3.ogg b/sound/piano/F#3.ogg deleted file mode 100644 index 53b56c5017..0000000000 Binary files a/sound/piano/F#3.ogg and /dev/null differ diff --git a/sound/piano/F#4.ogg b/sound/piano/F#4.ogg deleted file mode 100644 index e9d71303a1..0000000000 Binary files a/sound/piano/F#4.ogg and /dev/null differ diff --git a/sound/piano/F#5.ogg b/sound/piano/F#5.ogg deleted file mode 100644 index c4cc3165ab..0000000000 Binary files a/sound/piano/F#5.ogg and /dev/null differ diff --git a/sound/piano/F#6.ogg b/sound/piano/F#6.ogg deleted file mode 100644 index 0942095116..0000000000 Binary files a/sound/piano/F#6.ogg and /dev/null differ diff --git a/sound/piano/F#7.ogg b/sound/piano/F#7.ogg deleted file mode 100644 index c37dc8fb37..0000000000 Binary files a/sound/piano/F#7.ogg and /dev/null differ diff --git a/sound/piano/F#8.ogg b/sound/piano/F#8.ogg deleted file mode 100644 index 0241e9beab..0000000000 Binary files a/sound/piano/F#8.ogg and /dev/null differ diff --git a/sound/piano/Fb1.ogg b/sound/piano/Fb1.ogg deleted file mode 100644 index fbcb29c2de..0000000000 Binary files a/sound/piano/Fb1.ogg and /dev/null differ diff --git a/sound/piano/Fb2.ogg b/sound/piano/Fb2.ogg deleted file mode 100644 index 4cece2d9cd..0000000000 Binary files a/sound/piano/Fb2.ogg and /dev/null differ diff --git a/sound/piano/Fb3.ogg b/sound/piano/Fb3.ogg deleted file mode 100644 index 3675271a15..0000000000 Binary files a/sound/piano/Fb3.ogg and /dev/null differ diff --git a/sound/piano/Fb4.ogg b/sound/piano/Fb4.ogg deleted file mode 100644 index 2608770227..0000000000 Binary files a/sound/piano/Fb4.ogg and /dev/null differ diff --git a/sound/piano/Fb5.ogg b/sound/piano/Fb5.ogg deleted file mode 100644 index f8016a6d24..0000000000 Binary files a/sound/piano/Fb5.ogg and /dev/null differ diff --git a/sound/piano/Fb6.ogg b/sound/piano/Fb6.ogg deleted file mode 100644 index 397714bdaa..0000000000 Binary files a/sound/piano/Fb6.ogg and /dev/null differ diff --git a/sound/piano/Fb7.ogg b/sound/piano/Fb7.ogg deleted file mode 100644 index d9f630f11d..0000000000 Binary files a/sound/piano/Fb7.ogg and /dev/null differ diff --git a/sound/piano/Fb8.ogg b/sound/piano/Fb8.ogg deleted file mode 100644 index 28ae958d82..0000000000 Binary files a/sound/piano/Fb8.ogg and /dev/null differ diff --git a/sound/piano/Fn1.ogg b/sound/piano/Fn1.ogg deleted file mode 100644 index 9d10f8ccf6..0000000000 Binary files a/sound/piano/Fn1.ogg and /dev/null differ diff --git a/sound/piano/Fn2.ogg b/sound/piano/Fn2.ogg deleted file mode 100644 index 24cff105e6..0000000000 Binary files a/sound/piano/Fn2.ogg and /dev/null differ diff --git a/sound/piano/Fn3.ogg b/sound/piano/Fn3.ogg deleted file mode 100644 index 313c54b59a..0000000000 Binary files a/sound/piano/Fn3.ogg and /dev/null differ diff --git a/sound/piano/Fn4.ogg b/sound/piano/Fn4.ogg deleted file mode 100644 index 3331d67fbe..0000000000 Binary files a/sound/piano/Fn4.ogg and /dev/null differ diff --git a/sound/piano/Fn5.ogg b/sound/piano/Fn5.ogg deleted file mode 100644 index 7294171595..0000000000 Binary files a/sound/piano/Fn5.ogg and /dev/null differ diff --git a/sound/piano/Fn6.ogg b/sound/piano/Fn6.ogg deleted file mode 100644 index 8218928c85..0000000000 Binary files a/sound/piano/Fn6.ogg and /dev/null differ diff --git a/sound/piano/Fn7.ogg b/sound/piano/Fn7.ogg deleted file mode 100644 index b459e82acd..0000000000 Binary files a/sound/piano/Fn7.ogg and /dev/null differ diff --git a/sound/piano/Fn8.ogg b/sound/piano/Fn8.ogg deleted file mode 100644 index be14499059..0000000000 Binary files a/sound/piano/Fn8.ogg and /dev/null differ diff --git a/sound/piano/G#1.ogg b/sound/piano/G#1.ogg deleted file mode 100644 index 3ef68c0d87..0000000000 Binary files a/sound/piano/G#1.ogg and /dev/null differ diff --git a/sound/piano/G#2.ogg b/sound/piano/G#2.ogg deleted file mode 100644 index 4d92169365..0000000000 Binary files a/sound/piano/G#2.ogg and /dev/null differ diff --git a/sound/piano/G#3.ogg b/sound/piano/G#3.ogg deleted file mode 100644 index 21a03c7805..0000000000 Binary files a/sound/piano/G#3.ogg and /dev/null differ diff --git a/sound/piano/G#4.ogg b/sound/piano/G#4.ogg deleted file mode 100644 index 070ad2b453..0000000000 Binary files a/sound/piano/G#4.ogg and /dev/null differ diff --git a/sound/piano/G#5.ogg b/sound/piano/G#5.ogg deleted file mode 100644 index 233256500f..0000000000 Binary files a/sound/piano/G#5.ogg and /dev/null differ diff --git a/sound/piano/G#6.ogg b/sound/piano/G#6.ogg deleted file mode 100644 index 3c387fcfab..0000000000 Binary files a/sound/piano/G#6.ogg and /dev/null differ diff --git a/sound/piano/G#7.ogg b/sound/piano/G#7.ogg deleted file mode 100644 index 4ba6c8b658..0000000000 Binary files a/sound/piano/G#7.ogg and /dev/null differ diff --git a/sound/piano/G#8.ogg b/sound/piano/G#8.ogg deleted file mode 100644 index b847ab1c86..0000000000 Binary files a/sound/piano/G#8.ogg and /dev/null differ diff --git a/sound/piano/Gb1.ogg b/sound/piano/Gb1.ogg deleted file mode 100644 index d53e3ea9d8..0000000000 Binary files a/sound/piano/Gb1.ogg and /dev/null differ diff --git a/sound/piano/Gb2.ogg b/sound/piano/Gb2.ogg deleted file mode 100644 index 0ceea3ecc8..0000000000 Binary files a/sound/piano/Gb2.ogg and /dev/null differ diff --git a/sound/piano/Gb3.ogg b/sound/piano/Gb3.ogg deleted file mode 100644 index 53b56c5017..0000000000 Binary files a/sound/piano/Gb3.ogg and /dev/null differ diff --git a/sound/piano/Gb4.ogg b/sound/piano/Gb4.ogg deleted file mode 100644 index c982d7beaf..0000000000 Binary files a/sound/piano/Gb4.ogg and /dev/null differ diff --git a/sound/piano/Gb5.ogg b/sound/piano/Gb5.ogg deleted file mode 100644 index 787c19bed8..0000000000 Binary files a/sound/piano/Gb5.ogg and /dev/null differ diff --git a/sound/piano/Gb6.ogg b/sound/piano/Gb6.ogg deleted file mode 100644 index d5a5dbb2d1..0000000000 Binary files a/sound/piano/Gb6.ogg and /dev/null differ diff --git a/sound/piano/Gb7.ogg b/sound/piano/Gb7.ogg deleted file mode 100644 index c6f9271680..0000000000 Binary files a/sound/piano/Gb7.ogg and /dev/null differ diff --git a/sound/piano/Gb8.ogg b/sound/piano/Gb8.ogg deleted file mode 100644 index 85c0b70754..0000000000 Binary files a/sound/piano/Gb8.ogg and /dev/null differ diff --git a/sound/piano/Gn1.ogg b/sound/piano/Gn1.ogg deleted file mode 100644 index d2829a4c0b..0000000000 Binary files a/sound/piano/Gn1.ogg and /dev/null differ diff --git a/sound/piano/Gn2.ogg b/sound/piano/Gn2.ogg deleted file mode 100644 index e657124c71..0000000000 Binary files a/sound/piano/Gn2.ogg and /dev/null differ diff --git a/sound/piano/Gn3.ogg b/sound/piano/Gn3.ogg deleted file mode 100644 index c1e88555f1..0000000000 Binary files a/sound/piano/Gn3.ogg and /dev/null differ diff --git a/sound/piano/Gn4.ogg b/sound/piano/Gn4.ogg deleted file mode 100644 index bbae7fa3e8..0000000000 Binary files a/sound/piano/Gn4.ogg and /dev/null differ diff --git a/sound/piano/Gn5.ogg b/sound/piano/Gn5.ogg deleted file mode 100644 index 556cd6085a..0000000000 Binary files a/sound/piano/Gn5.ogg and /dev/null differ diff --git a/sound/piano/Gn6.ogg b/sound/piano/Gn6.ogg deleted file mode 100644 index 6bf8c36013..0000000000 Binary files a/sound/piano/Gn6.ogg and /dev/null differ diff --git a/sound/piano/Gn7.ogg b/sound/piano/Gn7.ogg deleted file mode 100644 index 0637492985..0000000000 Binary files a/sound/piano/Gn7.ogg and /dev/null differ diff --git a/sound/piano/Gn8.ogg b/sound/piano/Gn8.ogg deleted file mode 100644 index 85f89a198e..0000000000 Binary files a/sound/piano/Gn8.ogg and /dev/null differ diff --git a/sound/violin/A#1.mid b/sound/violin/A#1.mid deleted file mode 100644 index 693b73f542..0000000000 Binary files a/sound/violin/A#1.mid and /dev/null differ diff --git a/sound/violin/A#2.mid b/sound/violin/A#2.mid deleted file mode 100644 index 40da5f3da1..0000000000 Binary files a/sound/violin/A#2.mid and /dev/null differ diff --git a/sound/violin/A#3.mid b/sound/violin/A#3.mid deleted file mode 100644 index 5bab6ccd63..0000000000 Binary files a/sound/violin/A#3.mid and /dev/null differ diff --git a/sound/violin/A#4.mid b/sound/violin/A#4.mid deleted file mode 100644 index dce830448e..0000000000 Binary files a/sound/violin/A#4.mid and /dev/null differ diff --git a/sound/violin/A#5.mid b/sound/violin/A#5.mid deleted file mode 100644 index fda796e27b..0000000000 Binary files a/sound/violin/A#5.mid and /dev/null differ diff --git a/sound/violin/A#6.mid b/sound/violin/A#6.mid deleted file mode 100644 index 9e5da684f4..0000000000 Binary files a/sound/violin/A#6.mid and /dev/null differ diff --git a/sound/violin/A#7.mid b/sound/violin/A#7.mid deleted file mode 100644 index 215c56cbe7..0000000000 Binary files a/sound/violin/A#7.mid and /dev/null differ diff --git a/sound/violin/A#8.mid b/sound/violin/A#8.mid deleted file mode 100644 index 4b55c34691..0000000000 Binary files a/sound/violin/A#8.mid and /dev/null differ diff --git a/sound/violin/B#1.mid b/sound/violin/B#1.mid deleted file mode 100644 index d83b176edd..0000000000 Binary files a/sound/violin/B#1.mid and /dev/null differ diff --git a/sound/violin/B#2.mid b/sound/violin/B#2.mid deleted file mode 100644 index cddff75625..0000000000 Binary files a/sound/violin/B#2.mid and /dev/null differ diff --git a/sound/violin/B#3.mid b/sound/violin/B#3.mid deleted file mode 100644 index 8bd7ec2fa9..0000000000 Binary files a/sound/violin/B#3.mid and /dev/null differ diff --git a/sound/violin/B#4.mid b/sound/violin/B#4.mid deleted file mode 100644 index 4c7ab84b57..0000000000 Binary files a/sound/violin/B#4.mid and /dev/null differ diff --git a/sound/violin/B#5.mid b/sound/violin/B#5.mid deleted file mode 100644 index d7f990b2d6..0000000000 Binary files a/sound/violin/B#5.mid and /dev/null differ diff --git a/sound/violin/B#6.mid b/sound/violin/B#6.mid deleted file mode 100644 index e124ccb8e2..0000000000 Binary files a/sound/violin/B#6.mid and /dev/null differ diff --git a/sound/violin/B#7.mid b/sound/violin/B#7.mid deleted file mode 100644 index 231c9e428d..0000000000 Binary files a/sound/violin/B#7.mid and /dev/null differ diff --git a/sound/violin/B#8.mid b/sound/violin/B#8.mid deleted file mode 100644 index 981943c08f..0000000000 Binary files a/sound/violin/B#8.mid and /dev/null differ diff --git a/sound/violin/C#1.mid b/sound/violin/C#1.mid deleted file mode 100644 index 88dba85145..0000000000 Binary files a/sound/violin/C#1.mid and /dev/null differ diff --git a/sound/violin/C#2.mid b/sound/violin/C#2.mid deleted file mode 100644 index b510926b45..0000000000 Binary files a/sound/violin/C#2.mid and /dev/null differ diff --git a/sound/violin/C#3.mid b/sound/violin/C#3.mid deleted file mode 100644 index 9954bbe478..0000000000 Binary files a/sound/violin/C#3.mid and /dev/null differ diff --git a/sound/violin/C#4.mid b/sound/violin/C#4.mid deleted file mode 100644 index 2c5ff74db0..0000000000 Binary files a/sound/violin/C#4.mid and /dev/null differ diff --git a/sound/violin/C#5.mid b/sound/violin/C#5.mid deleted file mode 100644 index e5850a3fd0..0000000000 Binary files a/sound/violin/C#5.mid and /dev/null differ diff --git a/sound/violin/C#6.mid b/sound/violin/C#6.mid deleted file mode 100644 index 217c0ad014..0000000000 Binary files a/sound/violin/C#6.mid and /dev/null differ diff --git a/sound/violin/C#7.mid b/sound/violin/C#7.mid deleted file mode 100644 index ec32bdbf90..0000000000 Binary files a/sound/violin/C#7.mid and /dev/null differ diff --git a/sound/violin/C#8.mid b/sound/violin/C#8.mid deleted file mode 100644 index 555bce3db0..0000000000 Binary files a/sound/violin/C#8.mid and /dev/null differ diff --git a/sound/violin/Cb1.mid b/sound/violin/Cb1.mid deleted file mode 100644 index a00f09dfb0..0000000000 Binary files a/sound/violin/Cb1.mid and /dev/null differ diff --git a/sound/violin/Cb2.mid b/sound/violin/Cb2.mid deleted file mode 100644 index 4085711bf1..0000000000 Binary files a/sound/violin/Cb2.mid and /dev/null differ diff --git a/sound/violin/Cb3.mid b/sound/violin/Cb3.mid deleted file mode 100644 index f647983ef0..0000000000 Binary files a/sound/violin/Cb3.mid and /dev/null differ diff --git a/sound/violin/Cb4.mid b/sound/violin/Cb4.mid deleted file mode 100644 index 24f22f09ee..0000000000 Binary files a/sound/violin/Cb4.mid and /dev/null differ diff --git a/sound/violin/Cb5.mid b/sound/violin/Cb5.mid deleted file mode 100644 index 057e97c5e0..0000000000 Binary files a/sound/violin/Cb5.mid and /dev/null differ diff --git a/sound/violin/Cb6.mid b/sound/violin/Cb6.mid deleted file mode 100644 index 887e65fc13..0000000000 Binary files a/sound/violin/Cb6.mid and /dev/null differ diff --git a/sound/violin/Cb7.mid b/sound/violin/Cb7.mid deleted file mode 100644 index 99668bc192..0000000000 Binary files a/sound/violin/Cb7.mid and /dev/null differ diff --git a/sound/violin/Cb8.mid b/sound/violin/Cb8.mid deleted file mode 100644 index 53ea61d1b2..0000000000 Binary files a/sound/violin/Cb8.mid and /dev/null differ diff --git a/sound/violin/Cb9.mid b/sound/violin/Cb9.mid deleted file mode 100644 index 1e8c3afadf..0000000000 Binary files a/sound/violin/Cb9.mid and /dev/null differ diff --git a/sound/violin/D#1.mid b/sound/violin/D#1.mid deleted file mode 100644 index 829e6fcf18..0000000000 Binary files a/sound/violin/D#1.mid and /dev/null differ diff --git a/sound/violin/D#2.mid b/sound/violin/D#2.mid deleted file mode 100644 index 66029b340c..0000000000 Binary files a/sound/violin/D#2.mid and /dev/null differ diff --git a/sound/violin/D#3.mid b/sound/violin/D#3.mid deleted file mode 100644 index c982375941..0000000000 Binary files a/sound/violin/D#3.mid and /dev/null differ diff --git a/sound/violin/D#4.mid b/sound/violin/D#4.mid deleted file mode 100644 index 016ed4f1ed..0000000000 Binary files a/sound/violin/D#4.mid and /dev/null differ diff --git a/sound/violin/D#5.mid b/sound/violin/D#5.mid deleted file mode 100644 index ddb511795d..0000000000 Binary files a/sound/violin/D#5.mid and /dev/null differ diff --git a/sound/violin/D#6.mid b/sound/violin/D#6.mid deleted file mode 100644 index b7242b9ab9..0000000000 Binary files a/sound/violin/D#6.mid and /dev/null differ diff --git a/sound/violin/D#7.mid b/sound/violin/D#7.mid deleted file mode 100644 index 773538340a..0000000000 Binary files a/sound/violin/D#7.mid and /dev/null differ diff --git a/sound/violin/D#8.mid b/sound/violin/D#8.mid deleted file mode 100644 index 4ad074e173..0000000000 Binary files a/sound/violin/D#8.mid and /dev/null differ diff --git a/sound/violin/E#1.mid b/sound/violin/E#1.mid deleted file mode 100644 index 3f130ee126..0000000000 Binary files a/sound/violin/E#1.mid and /dev/null differ diff --git a/sound/violin/E#2.mid b/sound/violin/E#2.mid deleted file mode 100644 index f67c2d0a26..0000000000 Binary files a/sound/violin/E#2.mid and /dev/null differ diff --git a/sound/violin/E#3.mid b/sound/violin/E#3.mid deleted file mode 100644 index bb393382d6..0000000000 Binary files a/sound/violin/E#3.mid and /dev/null differ diff --git a/sound/violin/E#4.mid b/sound/violin/E#4.mid deleted file mode 100644 index a96520c595..0000000000 Binary files a/sound/violin/E#4.mid and /dev/null differ diff --git a/sound/violin/E#5.mid b/sound/violin/E#5.mid deleted file mode 100644 index d1378af197..0000000000 Binary files a/sound/violin/E#5.mid and /dev/null differ diff --git a/sound/violin/E#6.mid b/sound/violin/E#6.mid deleted file mode 100644 index 7abe40bd82..0000000000 Binary files a/sound/violin/E#6.mid and /dev/null differ diff --git a/sound/violin/E#7.mid b/sound/violin/E#7.mid deleted file mode 100644 index df278c20d6..0000000000 Binary files a/sound/violin/E#7.mid and /dev/null differ diff --git a/sound/violin/E#8.mid b/sound/violin/E#8.mid deleted file mode 100644 index 35254cd5b2..0000000000 Binary files a/sound/violin/E#8.mid and /dev/null differ diff --git a/sound/violin/F#1.mid b/sound/violin/F#1.mid deleted file mode 100644 index d18668e891..0000000000 Binary files a/sound/violin/F#1.mid and /dev/null differ diff --git a/sound/violin/F#2.mid b/sound/violin/F#2.mid deleted file mode 100644 index 302f0c6fdc..0000000000 Binary files a/sound/violin/F#2.mid and /dev/null differ diff --git a/sound/violin/F#3.mid b/sound/violin/F#3.mid deleted file mode 100644 index 1f592fc903..0000000000 Binary files a/sound/violin/F#3.mid and /dev/null differ diff --git a/sound/violin/F#4.mid b/sound/violin/F#4.mid deleted file mode 100644 index 45854126f9..0000000000 Binary files a/sound/violin/F#4.mid and /dev/null differ diff --git a/sound/violin/F#5.mid b/sound/violin/F#5.mid deleted file mode 100644 index fb1e1da339..0000000000 Binary files a/sound/violin/F#5.mid and /dev/null differ diff --git a/sound/violin/F#6.mid b/sound/violin/F#6.mid deleted file mode 100644 index bfa896bb78..0000000000 Binary files a/sound/violin/F#6.mid and /dev/null differ diff --git a/sound/violin/F#7.mid b/sound/violin/F#7.mid deleted file mode 100644 index a27763c1d4..0000000000 Binary files a/sound/violin/F#7.mid and /dev/null differ diff --git a/sound/violin/F#8.mid b/sound/violin/F#8.mid deleted file mode 100644 index aaab80a727..0000000000 Binary files a/sound/violin/F#8.mid and /dev/null differ diff --git a/sound/violin/Fb1.mid b/sound/violin/Fb1.mid deleted file mode 100644 index c89b3f36b4..0000000000 Binary files a/sound/violin/Fb1.mid and /dev/null differ diff --git a/sound/violin/Fb2.mid b/sound/violin/Fb2.mid deleted file mode 100644 index 3db6af1aa4..0000000000 Binary files a/sound/violin/Fb2.mid and /dev/null differ diff --git a/sound/violin/Fb3.mid b/sound/violin/Fb3.mid deleted file mode 100644 index 5f601f3ac4..0000000000 Binary files a/sound/violin/Fb3.mid and /dev/null differ diff --git a/sound/violin/Fb4.mid b/sound/violin/Fb4.mid deleted file mode 100644 index f1abc8109d..0000000000 Binary files a/sound/violin/Fb4.mid and /dev/null differ diff --git a/sound/violin/Fb5.mid b/sound/violin/Fb5.mid deleted file mode 100644 index 2ec1b2e512..0000000000 Binary files a/sound/violin/Fb5.mid and /dev/null differ diff --git a/sound/violin/Fb6.mid b/sound/violin/Fb6.mid deleted file mode 100644 index b8bdf7fee0..0000000000 Binary files a/sound/violin/Fb6.mid and /dev/null differ diff --git a/sound/violin/Fb7.mid b/sound/violin/Fb7.mid deleted file mode 100644 index 51f5f1bcdb..0000000000 Binary files a/sound/violin/Fb7.mid and /dev/null differ diff --git a/sound/violin/Fb8.mid b/sound/violin/Fb8.mid deleted file mode 100644 index 47928f3847..0000000000 Binary files a/sound/violin/Fb8.mid and /dev/null differ diff --git a/sound/violin/G#1.mid b/sound/violin/G#1.mid deleted file mode 100644 index b1b3885685..0000000000 Binary files a/sound/violin/G#1.mid and /dev/null differ diff --git a/sound/violin/G#2.mid b/sound/violin/G#2.mid deleted file mode 100644 index e827cfc635..0000000000 Binary files a/sound/violin/G#2.mid and /dev/null differ diff --git a/sound/violin/G#3.mid b/sound/violin/G#3.mid deleted file mode 100644 index 57e1f76c97..0000000000 Binary files a/sound/violin/G#3.mid and /dev/null differ diff --git a/sound/violin/G#4.mid b/sound/violin/G#4.mid deleted file mode 100644 index 59e95a6d99..0000000000 Binary files a/sound/violin/G#4.mid and /dev/null differ diff --git a/sound/violin/G#5.mid b/sound/violin/G#5.mid deleted file mode 100644 index 9bd3436287..0000000000 Binary files a/sound/violin/G#5.mid and /dev/null differ diff --git a/sound/violin/G#6.mid b/sound/violin/G#6.mid deleted file mode 100644 index 3c90af807e..0000000000 Binary files a/sound/violin/G#6.mid and /dev/null differ diff --git a/sound/violin/G#7.mid b/sound/violin/G#7.mid deleted file mode 100644 index b51afd323c..0000000000 Binary files a/sound/violin/G#7.mid and /dev/null differ diff --git a/sound/violin/G#8.mid b/sound/violin/G#8.mid deleted file mode 100644 index d3f5c898d4..0000000000 Binary files a/sound/violin/G#8.mid and /dev/null differ diff --git a/vorestation.dme b/vorestation.dme index bed61a67a9..a426b1ed8f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -21,6 +21,7 @@ #include "code\names.dm" #include "code\stylesheet.dm" #include "code\world.dm" +#include "code\__datastructures\globals.dm" #include "code\__defines\_compile_options.dm" #include "code\__defines\_planes+layers.dm" #include "code\__defines\_planes+layers_vr.dm" @@ -33,11 +34,13 @@ #include "code\__defines\callbacks.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\chemistry_vr.dm" +#include "code\__defines\color.dm" #include "code\__defines\construction.dm" #include "code\__defines\damage_organs.dm" #include "code\__defines\dna.dm" #include "code\__defines\gamemode.dm" #include "code\__defines\holomap.dm" +#include "code\__defines\integrated_circuits.dm" #include "code\__defines\inventory_sizes.dm" #include "code\__defines\items_clothing.dm" #include "code\__defines\lighting.dm" @@ -62,6 +65,7 @@ #include "code\__defines\stat_tracking.dm" #include "code\__defines\subsystems.dm" #include "code\__defines\subsystems_vr.dm" +#include "code\__defines\supply.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" #include "code\__defines\unit_tests.dm" @@ -72,6 +76,10 @@ #include "code\_compatibility\509\JSON Writer.dm" #include "code\_compatibility\509\text.dm" #include "code\_compatibility\509\type2type.dm" +#include "code\_global_vars\misc.dm" +#include "code\_global_vars\mobs.dm" +#include "code\_global_vars\sensitive.dm" +#include "code\_global_vars\lists\mapping.dm" #include "code\_helpers\_global_objects.dm" #include "code\_helpers\atmospherics.dm" #include "code\_helpers\events.dm" @@ -180,6 +188,7 @@ #include "code\controllers\controller.dm" #include "code\controllers\emergency_shuttle_controller.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\globals.dm" #include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" #include "code\controllers\master.dm" @@ -209,8 +218,9 @@ #include "code\controllers\subsystems\airflow.dm" #include "code\controllers\subsystems\atoms.dm" #include "code\controllers\subsystems\bellies_vr.dm" +#include "code\controllers\subsystems\circuits.dm" #include "code\controllers\subsystems\garbage.dm" -#include "code\controllers\subsystems\holomaps_vr.dm" +#include "code\controllers\subsystems\holomaps.dm" #include "code\controllers\subsystems\lighting.dm" #include "code\controllers\subsystems\machines.dm" #include "code\controllers\subsystems\mapping_vr.dm" @@ -308,6 +318,7 @@ #include "code\datums\outfits\military\marines.dm" #include "code\datums\outfits\military\military.dm" #include "code\datums\outfits\military\sifguard.dm" +#include "code\datums\repositories\ammomaterial.dm" #include "code\datums\repositories\cameras.dm" #include "code\datums\repositories\crew.dm" #include "code\datums\repositories\decls.dm" @@ -403,7 +414,6 @@ #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" #include "code\game\sound.dm" -#include "code\game\supplyshuttle.dm" #include "code\game\trader_visit.dm" #include "code\game\antagonist\_antagonist_setup.dm" #include "code\game\antagonist\antagonist.dm" @@ -921,8 +931,8 @@ #include "code\game\objects\effects\decals\posters\polarisposters.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" -#include "code\game\objects\effects\temporary_visuials\miscellaneous.dm" -#include "code\game\objects\effects\temporary_visuials\temproary_visual.dm" +#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" +#include "code\game\objects\effects\temporary_visuals\temproary_visual.dm" #include "code\game\objects\items\antag_spawners.dm" #include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\blueprints.dm" @@ -1049,7 +1059,6 @@ #include "code\game\objects\items\weapons\syndie.dm" #include "code\game\objects\items\weapons\tape.dm" #include "code\game\objects\items\weapons\teleportation.dm" -#include "code\game\objects\items\weapons\tools.dm" #include "code\game\objects\items\weapons\towels.dm" #include "code\game\objects\items\weapons\traps.dm" #include "code\game\objects\items\weapons\traps_vr.dm" @@ -1084,12 +1093,15 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" #include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" +#include "code\game\objects\items\weapons\grenades\concussion.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\explosive.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm" #include "code\game\objects\items\weapons\grenades\grenade.dm" +#include "code\game\objects\items\weapons\grenades\projectile.dm" #include "code\game\objects\items\weapons\grenades\smokebomb.dm" #include "code\game\objects\items\weapons\grenades\spawnergrenade.dm" +#include "code\game\objects\items\weapons\grenades\supermatter.dm" #include "code\game\objects\items\weapons\id cards\cards.dm" #include "code\game\objects\items\weapons\id cards\station_ids.dm" #include "code\game\objects\items\weapons\id cards\syndicate_ids.dm" @@ -1106,6 +1118,7 @@ #include "code\game\objects\items\weapons\implants\implantpad.dm" #include "code\game\objects\items\weapons\implants\implantreagent_vr.dm" #include "code\game\objects\items\weapons\implants\implantuplink.dm" +#include "code\game\objects\items\weapons\implants\neuralbasic.dm" #include "code\game\objects\items\weapons\material\ashtray.dm" #include "code\game\objects\items\weapons\material\bats.dm" #include "code\game\objects\items\weapons\material\chainsaw.dm" @@ -1149,6 +1162,11 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tank_types_vr.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" +#include "code\game\objects\items\weapons\tools\crowbar.dm" +#include "code\game\objects\items\weapons\tools\screwdriver.dm" +#include "code\game\objects\items\weapons\tools\weldingtool.dm" +#include "code\game\objects\items\weapons\tools\wirecutters.dm" +#include "code\game\objects\items\weapons\tools\wrench.dm" #include "code\game\objects\random\_random.dm" #include "code\game\objects\random\guns_and_ammo.dm" #include "code\game\objects\random\maintenance.dm" @@ -1207,6 +1225,7 @@ #include "code\game\objects\structures\crates_lockers\crates_vr.dm" #include "code\game\objects\structures\crates_lockers\largecrate.dm" #include "code\game\objects\structures\crates_lockers\largecrate_vr.dm" +#include "code\game\objects\structures\crates_lockers\vehiclecage.dm" #include "code\game\objects\structures\crates_lockers\closets\coffin.dm" #include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm" #include "code\game\objects\structures\crates_lockers\closets\egg_vr.dm" @@ -1238,9 +1257,11 @@ #include "code\game\objects\structures\flora\grass.dm" #include "code\game\objects\structures\flora\trees.dm" #include "code\game\objects\structures\ghost_pods\ghost_pods.dm" +#include "code\game\objects\structures\ghost_pods\mysterious.dm" #include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\props\alien_props.dm" #include "code\game\objects\structures\props\beam_prism.dm" +#include "code\game\objects\structures\props\nest.dm" #include "code\game\objects\structures\props\projectile_lock.dm" #include "code\game\objects\structures\props\prop.dm" #include "code\game\objects\structures\props\puzzledoor.dm" @@ -1380,6 +1401,7 @@ #include "code\modules\admin\verbs\dice.dm" #include "code\modules\admin\verbs\getlogs.dm" #include "code\modules\admin\verbs\grief_fixers.dm" +#include "code\modules\admin\verbs\lightning_strike.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\massmodvar.dm" @@ -1531,6 +1553,7 @@ #include "code\modules\clothing\head\hardhat.dm" #include "code\modules\clothing\head\helmet.dm" #include "code\modules\clothing\head\helmet_vr.dm" +#include "code\modules\clothing\head\hood.dm" #include "code\modules\clothing\head\jobs.dm" #include "code\modules\clothing\head\misc.dm" #include "code\modules\clothing\head\misc_special.dm" @@ -1578,6 +1601,7 @@ #include "code\modules\clothing\spacesuits\rig\suits\ert.dm" #include "code\modules\clothing\spacesuits\rig\suits\light.dm" #include "code\modules\clothing\spacesuits\rig\suits\merc.dm" +#include "code\modules\clothing\spacesuits\rig\suits\pmc.dm" #include "code\modules\clothing\spacesuits\rig\suits\station.dm" #include "code\modules\clothing\spacesuits\rig\suits\station_vr.dm" #include "code\modules\clothing\spacesuits\void\merc.dm" @@ -1591,13 +1615,13 @@ #include "code\modules\clothing\suits\armor_vr.dm" #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\bio_vr.dm" +#include "code\modules\clothing\suits\hooded.dm" #include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" #include "code\modules\clothing\suits\miscellaneous.dm" #include "code\modules\clothing\suits\solgov.dm" #include "code\modules\clothing\suits\solgov_vr.dm" #include "code\modules\clothing\suits\storage.dm" -#include "code\modules\clothing\suits\toggles.dm" #include "code\modules\clothing\suits\utility.dm" #include "code\modules\clothing\suits\utility_vr.dm" #include "code\modules\clothing\suits\wiz_robe.dm" @@ -1726,6 +1750,7 @@ #include "code\modules\ext_scripts\python.dm" #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" +#include "code\modules\flufftext\look_up.dm" #include "code\modules\flufftext\TextFilters.dm" #include "code\modules\food\recipe_dump.dm" #include "code\modules\food\recipes_microwave.dm" @@ -1790,12 +1815,16 @@ #include "code\modules\hydroponics\trays\tray_update_icons.dm" #include "code\modules\integrated_electronics\_defines.dm" #include "code\modules\integrated_electronics\core\assemblies.dm" -#include "code\modules\integrated_electronics\core\device.dm" +#include "code\modules\integrated_electronics\core\detailer.dm" #include "code\modules\integrated_electronics\core\helpers.dm" #include "code\modules\integrated_electronics\core\integrated_circuit.dm" #include "code\modules\integrated_electronics\core\pins.dm" #include "code\modules\integrated_electronics\core\printer.dm" #include "code\modules\integrated_electronics\core\tools.dm" +#include "code\modules\integrated_electronics\core\assemblies\clothing.dm" +#include "code\modules\integrated_electronics\core\assemblies\device.dm" +#include "code\modules\integrated_electronics\core\assemblies\generic.dm" +#include "code\modules\integrated_electronics\core\assemblies\implant.dm" #include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm" #include "code\modules\integrated_electronics\core\special_pins\char_pin.dm" #include "code\modules\integrated_electronics\core\special_pins\color_pin.dm" @@ -1887,9 +1916,9 @@ #include "code\modules\mining\shelters.dm" #include "code\modules\mining\drilling\drill.dm" #include "code\modules\mining\drilling\scanner.dm" -#include "code\modules\mining\orm_vr\construction.dm" -#include "code\modules\mining\orm_vr\equipment_vendor.dm" -#include "code\modules\mining\orm_vr\mine_point_items.dm" +#include "code\modules\mining\ore_redemption_machine\construction.dm" +#include "code\modules\mining\ore_redemption_machine\equipment_vendor.dm" +#include "code\modules\mining\ore_redemption_machine\mine_point_items.dm" #include "code\modules\mob\animations.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" @@ -2043,6 +2072,10 @@ #include "code\modules\mob\living\carbon\human\unarmed_attack.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\update_icons_vr.dm" +#include "code\modules\mob\living\carbon\human\descriptors\_descriptors.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_generic.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" #include "code\modules\mob\living\carbon\human\species\species.dm" #include "code\modules\mob\living\carbon\human\species\species_attack.dm" #include "code\modules\mob\living\carbon\human\species\species_attack_vr.dm" @@ -2451,6 +2484,7 @@ #include "code\modules\projectiles\ammunition\magazines.dm" #include "code\modules\projectiles\ammunition\magnetic.dm" #include "code\modules\projectiles\ammunition\rounds.dm" +#include "code\modules\projectiles\ammunition\smartmag.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\launcher.dm" #include "code\modules\projectiles\guns\modular_guns.dm" @@ -2493,6 +2527,7 @@ #include "code\modules\projectiles\projectile\arc.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\beams_vr.dm" +#include "code\modules\projectiles\projectile\blob.dm" #include "code\modules\projectiles\projectile\bullets.dm" #include "code\modules\projectiles\projectile\bullets_vr.dm" #include "code\modules\projectiles\projectile\change.dm" @@ -2500,6 +2535,7 @@ #include "code\modules\projectiles\projectile\energy_vr.dm" #include "code\modules\projectiles\projectile\force.dm" #include "code\modules\projectiles\projectile\magnetic.dm" +#include "code\modules\projectiles\projectile\pellets.dm" #include "code\modules\projectiles\projectile\special.dm" #include "code\modules\projectiles\targeting\targeting_client.dm" #include "code\modules\projectiles\targeting\targeting_gun.dm" @@ -2681,6 +2717,7 @@ #include "code\modules\shuttles\shuttles_web.dm" #include "code\modules\shuttles\web_datums.dm" #include "code\modules\spells\artifacts.dm" +#include "code\modules\spells\construct_spells.dm" #include "code\modules\spells\no_clothes.dm" #include "code\modules\spells\spell_code.dm" #include "code\modules\spells\spell_projectile.dm" @@ -2694,12 +2731,15 @@ #include "code\modules\spells\aoe_turf\smoke.dm" #include "code\modules\spells\aoe_turf\summons.dm" #include "code\modules\spells\aoe_turf\conjure\conjure.dm" +#include "code\modules\spells\aoe_turf\conjure\construct.dm" #include "code\modules\spells\aoe_turf\conjure\forcewall.dm" #include "code\modules\spells\general\area_teleport.dm" #include "code\modules\spells\general\rune_write.dm" #include "code\modules\spells\targeted\ethereal_jaunt.dm" #include "code\modules\spells\targeted\genetic.dm" +#include "code\modules\spells\targeted\harvest.dm" #include "code\modules\spells\targeted\mind_transfer.dm" +#include "code\modules\spells\targeted\shift.dm" #include "code\modules\spells\targeted\subjugate.dm" #include "code\modules\spells\targeted\targeted.dm" #include "code\modules\spells\targeted\equip\equip.dm" @@ -2748,8 +2788,11 @@ #include "code\modules\turbolift\turbolift_map.dm" #include "code\modules\turbolift\turbolift_process.dm" #include "code\modules\turbolift\turbolift_turfs.dm" +#include "code\modules\vehicles\bike.dm" #include "code\modules\vehicles\boat.dm" #include "code\modules\vehicles\cargo_train.dm" +#include "code\modules\vehicles\construction.dm" +#include "code\modules\vehicles\quad.dm" #include "code\modules\vehicles\train.dm" #include "code\modules\vehicles\vehicle.dm" #include "code\modules\ventcrawl\ventcrawl.dm"